[pal-cvs 3268] [1002] initial commit.

アーカイブの一覧に戻る

svnno****@sourc***** svnno****@sourc*****
2008年 6月 30日 (月) 11:54:28 JST


Revision: 1002
          http://svn.sourceforge.jp/cgi-bin/viewcvs.cgi?root=pal&view=rev&rev=1002
Author:   shinsuke
Date:     2008-06-30 11:54:27 +0900 (Mon, 30 Jun 2008)

Log Message:
-----------
initial commit.

Added Paths:
-----------
    announcement/trunk/.classpath
    announcement/trunk/.project
    announcement/trunk/.settings/
    announcement/trunk/.settings/org.eclipse.jdt.core.prefs
    announcement/trunk/.settings/org.eclipse.jdt.ui.prefs
    announcement/trunk/.settings/org.seasar.dolteng.eclipse.prefs
    announcement/trunk/dbflute/
    announcement/trunk/dbflute/_project.bat
    announcement/trunk/dbflute/_project.sh
    announcement/trunk/dbflute/build-announcement.properties
    announcement/trunk/dbflute/dfprop/
    announcement/trunk/dbflute/dfprop/databaseInfoMap.dfprop
    announcement/trunk/dbflute/doc.bat
    announcement/trunk/dbflute/doc.sh
    announcement/trunk/dbflute/generate.bat
    announcement/trunk/dbflute/generate.sh
    announcement/trunk/dbflute/jdbc.bat
    announcement/trunk/dbflute/jdbc.sh
    announcement/trunk/dbflute/log/
    announcement/trunk/dbflute/log/readme.txt
    announcement/trunk/dbflute/output/
    announcement/trunk/dbflute/output/doc/
    announcement/trunk/dbflute/output/doc/readme.txt
    announcement/trunk/dbflute/outside-sql-test.bat
    announcement/trunk/dbflute/outside-sql-test.sh
    announcement/trunk/dbflute/playsql/
    announcement/trunk/dbflute/playsql/replace-schema.sql
    announcement/trunk/dbflute/replace-schema.bat
    announcement/trunk/dbflute/replace-schema.sh
    announcement/trunk/dbflute/schema/
    announcement/trunk/dbflute/schema/readme.txt
    announcement/trunk/dbflute/sql2entity.bat
    announcement/trunk/dbflute/sql2entity.sh
    announcement/trunk/mydbflute/
    announcement/trunk/mydbflute/readme.txt
    announcement/trunk/pom.xml
    announcement/trunk/src/
    announcement/trunk/src/main/
    announcement/trunk/src/main/config/
    announcement/trunk/src/main/config/clay/
    announcement/trunk/src/main/config/clay/announcement.clay
    announcement/trunk/src/main/config/sql/
    announcement/trunk/src/main/config/sql/mysql/
    announcement/trunk/src/main/config/sql/mysql/announcement.sql
    announcement/trunk/src/main/java/
    announcement/trunk/src/main/java/jp/
    announcement/trunk/src/main/java/jp/sf/
    announcement/trunk/src/main/java/jp/sf/pal/
    announcement/trunk/src/main/java/jp/sf/pal/announcement/
    announcement/trunk/src/main/java/jp/sf/pal/announcement/AnnouncementConstraints.java
    announcement/trunk/src/main/java/jp/sf/pal/announcement/db/
    announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/
    announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/AccessContext.java
    announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/BFinder.java
    announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/BehaviorSelector.java
    announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/CacheAbstractSelector.java
    announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/CacheBehaviorSelector.java
    announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/CacheDaoSelector.java
    announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/DBFluteConfig.java
    announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/DaoReadable.java
    announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/DaoSelector.java
    announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/DaoWritable.java
    announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/Entity.java
    announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/EntityDefinedCommonColumn.java
    announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/GenMetaData.java
    announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/InternalMapContext.java
    announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/QLog.java
    announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/XLog.java
    announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/annotation/
    announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/annotation/OutsideSql.java
    announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/bhv/
    announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/bhv/AbstractBehaviorReadable.java
    announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/bhv/AbstractBehaviorWritable.java
    announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/bhv/BehaviorReadable.java
    announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/bhv/BehaviorWritable.java
    announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/bhv/batch/
    announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/bhv/batch/TokenFileOutputOption.java
    announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/bhv/batch/TokenFileOutputResult.java
    announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/bhv/batch/TokenFileReflectionFailure.java
    announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/bhv/batch/TokenFileReflectionOption.java
    announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/bhv/batch/TokenFileReflectionResult.java
    announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/bhv/load/
    announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/bhv/load/LoadRefererOption.java
    announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/bhv/load/LoadReferrerOption.java
    announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/bhv/setup/
    announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/bhv/setup/ConditionBeanSetupper.java
    announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/bhv/setup/EntityListSetupper.java
    announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/bhv/setup/ValueLabelBox.java
    announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/bhv/setup/ValueLabelSetupper.java
    announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/cbean/
    announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/cbean/AbstractConditionBean.java
    announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/cbean/AbstractConditionQuery.java
    announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/cbean/ConditionBean.java
    announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/cbean/ConditionBeanContext.java
    announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/cbean/ConditionQuery.java
    announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/cbean/FetchNarrowingBean.java
    announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/cbean/FetchNarrowingBeanContext.java
    announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/cbean/ListResultBean.java
    announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/cbean/MapParameterBean.java
    announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/cbean/OrderByBean.java
    announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/cbean/PagingBean.java
    announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/cbean/PagingHandler.java
    announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/cbean/PagingInvoker.java
    announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/cbean/PagingResultBean.java
    announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/cbean/ResultBeanBuilder.java
    announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/cbean/SelectResource.java
    announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/cbean/SimpleOrderByBean.java
    announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/cbean/SimplePagingBean.java
    announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/cbean/ckey/
    announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/cbean/ckey/ConditionKey.java
    announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/cbean/ckey/ConditionKeyEqual.java
    announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/cbean/ckey/ConditionKeyGreaterEqual.java
    announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/cbean/ckey/ConditionKeyGreaterThan.java
    announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/cbean/ckey/ConditionKeyInScope.java
    announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/cbean/ckey/ConditionKeyIsNotNull.java
    announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/cbean/ckey/ConditionKeyIsNull.java
    announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/cbean/ckey/ConditionKeyLessEqual.java
    announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/cbean/ckey/ConditionKeyLessThan.java
    announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/cbean/ckey/ConditionKeyLikeSearch.java
    announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/cbean/ckey/ConditionKeyNotEqual.java
    announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/cbean/ckey/ConditionKeyNotInScope.java
    announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/cbean/ckey/ConditionKeyPrefixSearch.java
    announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/cbean/coption/
    announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/cbean/coption/ConditionOption.java
    announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/cbean/coption/DateFromToOption.java
    announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/cbean/coption/FromToOption.java
    announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/cbean/coption/InScopeOption.java
    announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/cbean/coption/LikeSearchOption.java
    announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/cbean/coption/SimpleStringOption.java
    announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/cbean/coption/parts/
    announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/cbean/coption/parts/SplitOptionParts.java
    announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/cbean/coption/parts/ToSingleByteOptionParts.java
    announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/cbean/coption/parts/ToUpperLowerCaseOptionParts.java
    announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/cbean/coption/parts/local/
    announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/cbean/coption/parts/local/JapaneseOptionPartsAgent.java
    announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/cbean/cvalue/
    announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/cbean/cvalue/ConditionValue.java
    announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/cbean/grouping/
    announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/cbean/grouping/GroupingOption.java
    announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/cbean/grouping/GroupingRowEndDeterminer.java
    announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/cbean/grouping/GroupingRowResource.java
    announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/cbean/grouping/GroupingRowSetupper.java
    announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/cbean/mapping/
    announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/cbean/mapping/EntityDtoMapper.java
    announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/cbean/outsidesql/
    announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/cbean/outsidesql/OutsideSqlContext.java
    announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/cbean/outsidesql/OutsideSqlDao.java
    announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/cbean/outsidesql/OutsideSqlOption.java
    announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/cbean/outsidesql/executor/
    announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/cbean/outsidesql/executor/OutsideSqlBasicExecutor.java
    announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/cbean/outsidesql/executor/OutsideSqlCursorExecutor.java
    announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/cbean/outsidesql/executor/OutsideSqlEntityExecutor.java
    announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/cbean/outsidesql/executor/OutsideSqlPagingExecutor.java
    announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/cbean/pagenavi/
    announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/cbean/pagenavi/PageNumberLink.java
    announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/cbean/pagenavi/PageNumberLinkSetupper.java
    announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/cbean/pagenavi/group/
    announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/cbean/pagenavi/group/PageGroupBean.java
    announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/cbean/pagenavi/group/PageGroupOption.java
    announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/cbean/pagenavi/range/
    announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/cbean/pagenavi/range/PageRangeBean.java
    announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/cbean/pagenavi/range/PageRangeOption.java
    announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/cbean/sqlclause/
    announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/cbean/sqlclause/AbstractSqlClause.java
    announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/cbean/sqlclause/OrderByClause.java
    announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/cbean/sqlclause/OrderByElement.java
    announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/cbean/sqlclause/SqlClause.java
    announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/cbean/sqlclause/SqlClauseDb2.java
    announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/cbean/sqlclause/SqlClauseDefault.java
    announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/cbean/sqlclause/SqlClauseDerby.java
    announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/cbean/sqlclause/SqlClauseFirebird.java
    announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/cbean/sqlclause/SqlClauseH2.java
    announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/cbean/sqlclause/SqlClauseInterbase.java
    announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/cbean/sqlclause/SqlClauseMySql.java
    announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/cbean/sqlclause/SqlClauseOracle.java
    announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/cbean/sqlclause/SqlClausePostgreSql.java
    announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/cbean/sqlclause/SqlClauseSqlServer.java
    announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/cbean/sqlclause/WhereClauseSimpleFilter.java
    announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/dbmeta/
    announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/dbmeta/AbstractDBMeta.java
    announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/dbmeta/DBMeta.java
    announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/dbmeta/DBMetaInstanceHandler.java
    announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/dbmeta/hierarchy/
    announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/dbmeta/hierarchy/HierarchyArranger.java
    announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/dbmeta/hierarchy/HierarchyBasicRequest.java
    announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/dbmeta/hierarchy/HierarchyRequest.java
    announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/dbmeta/hierarchy/HierarchyRequestElement.java
    announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/dbmeta/hierarchy/HierarchySourceColumn.java
    announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/dbmeta/hierarchy/HierarchySourceIterator.java
    announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/dbmeta/hierarchy/HierarchySourceRow.java
    announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/dbmeta/hierarchy/basic/
    announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/dbmeta/hierarchy/basic/HierarchySourceEntityColumn.java
    announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/dbmeta/hierarchy/basic/HierarchySourceEntityListIterator.java
    announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/dbmeta/hierarchy/basic/HierarchySourceEntityRow.java
    announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/dbmeta/hierarchy/basic/HierarchySourceListIterator.java
    announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/dbmeta/hierarchy/basic/HierarchySourceRowSetupper.java
    announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/dbmeta/info/
    announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/dbmeta/info/ColumnInfo.java
    announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/dbmeta/info/ForeignInfo.java
    announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/dbmeta/info/ReferrerInfo.java
    announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/dbmeta/info/RelationInfo.java
    announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/dbmeta/info/UniqueInfo.java
    announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/exception/
    announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/exception/BindVariableCommentNotFoundPropertyException.java
    announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/exception/BindVariableParameterNullValueException.java
    announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/exception/DangerousResultSizeException.java
    announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/exception/EmbeddedValueCommentNotFoundPropertyException.java
    announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/exception/EmbeddedValueParameterNullValueException.java
    announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/exception/EndCommentNotFoundException.java
    announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/exception/EntityAlreadyDeletedException.java
    announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/exception/EntityAlreadyUpdatedException.java
    announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/exception/EntityDuplicatedException.java
    announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/exception/IfCommentConditionNotFoundException.java
    announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/exception/IfCommentNotBooleanResultException.java
    announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/exception/IfCommentWrongExpressionException.java
    announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/exception/OutsideSqlNotFoundException.java
    announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/exception/RecordHasAlreadyBeenDeletedException.java
    announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/exception/RecordHasOverlappedException.java
    announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/exception/RequiredOptionNotFoundException.java
    announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/helper/
    announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/helper/MapListString.java
    announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/helper/MapListStringImpl.java
    announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/helper/MapStringBuilder.java
    announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/helper/MapStringBuilderImpl.java
    announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/helper/character/
    announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/helper/character/GeneralCharacter.java
    announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/helper/character/JapaneseCharacter.java
    announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/helper/character/impl/
    announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/helper/character/impl/GeneralCharacterImpl.java
    announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/helper/character/impl/JapaneseCharacterImpl.java
    announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/helper/collection/
    announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/helper/collection/order/
    announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/helper/collection/order/AccordingToOrder.java
    announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/helper/collection/order/AccordingToOrderIdExtractor.java
    announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/helper/collection/order/AccordingToOrderOption.java
    announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/helper/collection/order/impl/
    announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/helper/collection/order/impl/AccordingToOrderImpl.java
    announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/helper/token/
    announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/helper/token/file/
    announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/helper/token/file/FileMakingCallback.java
    announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/helper/token/file/FileMakingHeaderInfo.java
    announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/helper/token/file/FileMakingOption.java
    announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/helper/token/file/FileMakingRowResource.java
    announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/helper/token/file/FileMakingSimpleFacade.java
    announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/helper/token/file/FileToken.java
    announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/helper/token/file/FileTokenizingCallback.java
    announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/helper/token/file/FileTokenizingHeaderInfo.java
    announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/helper/token/file/FileTokenizingOption.java
    announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/helper/token/file/FileTokenizingRowResource.java
    announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/helper/token/file/impl/
    announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/helper/token/file/impl/FileMakingSimpleFacadeImpl.java
    announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/helper/token/file/impl/FileTokenImpl.java
    announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/helper/token/line/
    announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/helper/token/line/LineMakingOption.java
    announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/helper/token/line/LineToken.java
    announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/helper/token/line/LineTokenizingOption.java
    announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/helper/token/line/impl/
    announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/helper/token/line/impl/LineTokenImpl.java
    announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/jdbc/
    announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/jdbc/CursorHandler.java
    announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/jdbc/LatestSqlProvider.java
    announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/jdbc/StatementConfig.java
    announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/s2dao/
    announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/s2dao/FetchNarrowingResultSetFactory.java
    announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/s2dao/FetchNarrowingResultSetWrapper.java
    announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/s2dao/S2BeanMetaDataFactoryImpl.java
    announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/s2dao/S2DaoInterceptor.java
    announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/s2dao/S2DaoLatestSqlProvider.java
    announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/s2dao/S2DaoMetaDataExtension.java
    announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/s2dao/S2DaoMetaDataFactoryImpl.java
    announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/s2dao/S2DaoPropertyTypeFactoryBuilderExtension.java
    announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/s2dao/S2DaoSelectDynamicCommand.java
    announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/s2dao/internal/
    announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/s2dao/internal/rshandler/
    announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/s2dao/internal/rshandler/InternalBeanArrayMetaDataResultSetHandler.java
    announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/s2dao/internal/rshandler/InternalBeanListMetaDataResultSetHandler.java
    announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/s2dao/internal/sqlcommand/
    announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/s2dao/internal/sqlcommand/InternalAbstractAutoStaticCommand.java
    announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/s2dao/internal/sqlcommand/InternalAbstractBatchAutoStaticCommand.java
    announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/s2dao/internal/sqlcommand/InternalAbstractDynamicCommand.java
    announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/s2dao/internal/sqlcommand/InternalAbstractSqlCommand.java
    announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/s2dao/internal/sqlcommand/InternalAbstractStaticCommand.java
    announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/s2dao/internal/sqlcommand/InternalDeleteAutoStaticCommand.java
    announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/s2dao/internal/sqlcommand/InternalDeleteBatchAutoStaticCommand.java
    announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/s2dao/internal/sqlcommand/InternalDeleteQueryAutoDynamicCommand.java
    announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/s2dao/internal/sqlcommand/InternalInsertAutoDynamicCommand.java
    announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/s2dao/internal/sqlcommand/InternalInsertBatchAutoStaticCommand.java
    announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/s2dao/internal/sqlcommand/InternalUpdateAutoDynamicCommand.java
    announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/s2dao/internal/sqlcommand/InternalUpdateBatchAutoStaticCommand.java
    announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/s2dao/internal/sqlcommand/InternalUpdateDynamicCommand.java
    announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/s2dao/internal/sqlcommand/InternalUpdateModifiedOnlyCommand.java
    announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/s2dao/internal/sqlhandler/
    announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/s2dao/internal/sqlhandler/InternalAbstractAutoHandler.java
    announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/s2dao/internal/sqlhandler/InternalAbstractBatchAutoHandler.java
    announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/s2dao/internal/sqlhandler/InternalBasicHandler.java
    announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/s2dao/internal/sqlhandler/InternalBasicSelectHandler.java
    announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/s2dao/internal/sqlhandler/InternalBasicUpdateHandler.java
    announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/s2dao/internal/sqlhandler/InternalCommandContextHandler.java
    announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/s2dao/internal/sqlhandler/InternalDeleteAutoHandler.java
    announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/s2dao/internal/sqlhandler/InternalDeleteBatchAutoHandler.java
    announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/s2dao/internal/sqlhandler/InternalInsertAutoHandler.java
    announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/s2dao/internal/sqlhandler/InternalInsertBatchAutoHandler.java
    announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/s2dao/internal/sqlhandler/InternalUpdateAutoHandler.java
    announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/s2dao/internal/sqlhandler/InternalUpdateBatchAutoHandler.java
    announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/s2dao/internal/sqllog/
    announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/s2dao/internal/sqllog/InternalSqlLog.java
    announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/s2dao/internal/sqllog/InternalSqlLogRegistry.java
    announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/s2dao/internal/sqlparser/
    announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/s2dao/internal/sqlparser/InternalCommandContextCreator.java
    announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/s2dao/internal/sqlparser/InternalSqlParser.java
    announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/s2dao/internal/sqlparser/InternalSqlTokenizer.java
    announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/s2dao/internal/util/
    announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/s2dao/internal/util/InternalBindVariableUtil.java
    announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/util/
    announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/util/SimpleAssertUtil.java
    announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/util/SimpleStringUtil.java
    announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/util/SimpleSystemUtil.java
    announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/util/TraceViewUtil.java
    announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/util/ValueLabelUtil.java
    announcement/trunk/src/main/java/jp/sf/pal/announcement/db/bsbhv/
    announcement/trunk/src/main/java/jp/sf/pal/announcement/db/bsbhv/BsAnnouncementBhv.java
    announcement/trunk/src/main/java/jp/sf/pal/announcement/db/bsbhv/BsAnnouncementBodyBhv.java
    announcement/trunk/src/main/java/jp/sf/pal/announcement/db/bsdao/
    announcement/trunk/src/main/java/jp/sf/pal/announcement/db/bsdao/BsAnnouncementBodyDao.java
    announcement/trunk/src/main/java/jp/sf/pal/announcement/db/bsdao/BsAnnouncementDao.java
    announcement/trunk/src/main/java/jp/sf/pal/announcement/db/bsentity/
    announcement/trunk/src/main/java/jp/sf/pal/announcement/db/bsentity/BsAnnouncement.java
    announcement/trunk/src/main/java/jp/sf/pal/announcement/db/bsentity/BsAnnouncementBody.java
    announcement/trunk/src/main/java/jp/sf/pal/announcement/db/bsentity/dbmeta/
    announcement/trunk/src/main/java/jp/sf/pal/announcement/db/bsentity/dbmeta/AnnouncementBodyDbm.java
    announcement/trunk/src/main/java/jp/sf/pal/announcement/db/bsentity/dbmeta/AnnouncementDbm.java
    announcement/trunk/src/main/java/jp/sf/pal/announcement/db/cbean/
    announcement/trunk/src/main/java/jp/sf/pal/announcement/db/cbean/AnnouncementBodyCB.java
    announcement/trunk/src/main/java/jp/sf/pal/announcement/db/cbean/AnnouncementCB.java
    announcement/trunk/src/main/java/jp/sf/pal/announcement/db/cbean/bs/
    announcement/trunk/src/main/java/jp/sf/pal/announcement/db/cbean/bs/BsAnnouncementBodyCB.java
    announcement/trunk/src/main/java/jp/sf/pal/announcement/db/cbean/bs/BsAnnouncementCB.java
    announcement/trunk/src/main/java/jp/sf/pal/announcement/db/cbean/cq/
    announcement/trunk/src/main/java/jp/sf/pal/announcement/db/cbean/cq/AnnouncementBodyCQ.java
    announcement/trunk/src/main/java/jp/sf/pal/announcement/db/cbean/cq/AnnouncementCQ.java
    announcement/trunk/src/main/java/jp/sf/pal/announcement/db/cbean/cq/bs/
    announcement/trunk/src/main/java/jp/sf/pal/announcement/db/cbean/cq/bs/AbstractBsAnnouncementBodyCQ.java
    announcement/trunk/src/main/java/jp/sf/pal/announcement/db/cbean/cq/bs/AbstractBsAnnouncementCQ.java
    announcement/trunk/src/main/java/jp/sf/pal/announcement/db/cbean/cq/bs/BsAnnouncementBodyCQ.java
    announcement/trunk/src/main/java/jp/sf/pal/announcement/db/cbean/cq/bs/BsAnnouncementCQ.java
    announcement/trunk/src/main/java/jp/sf/pal/announcement/db/cbean/cq/ciq/
    announcement/trunk/src/main/java/jp/sf/pal/announcement/db/cbean/cq/ciq/AnnouncementBodyCIQ.java
    announcement/trunk/src/main/java/jp/sf/pal/announcement/db/cbean/cq/ciq/AnnouncementCIQ.java
    announcement/trunk/src/main/java/jp/sf/pal/announcement/db/cbean/nss/
    announcement/trunk/src/main/java/jp/sf/pal/announcement/db/cbean/nss/AnnouncementBodyNss.java
    announcement/trunk/src/main/java/jp/sf/pal/announcement/db/cbean/nss/AnnouncementNss.java
    announcement/trunk/src/main/java/jp/sf/pal/announcement/db/exbhv/
    announcement/trunk/src/main/java/jp/sf/pal/announcement/db/exbhv/AnnouncementBhv.java
    announcement/trunk/src/main/java/jp/sf/pal/announcement/db/exbhv/AnnouncementBodyBhv.java
    announcement/trunk/src/main/java/jp/sf/pal/announcement/db/exdao/
    announcement/trunk/src/main/java/jp/sf/pal/announcement/db/exdao/AnnouncementBodyDao.java
    announcement/trunk/src/main/java/jp/sf/pal/announcement/db/exdao/AnnouncementDao.java
    announcement/trunk/src/main/java/jp/sf/pal/announcement/db/exentity/
    announcement/trunk/src/main/java/jp/sf/pal/announcement/db/exentity/Announcement.java
    announcement/trunk/src/main/java/jp/sf/pal/announcement/db/exentity/AnnouncementBody.java
    announcement/trunk/src/main/java/jp/sf/pal/announcement/dxo/
    announcement/trunk/src/main/java/jp/sf/pal/announcement/dxo/AnnouncementDxo.java
    announcement/trunk/src/main/java/jp/sf/pal/announcement/filter/
    announcement/trunk/src/main/java/jp/sf/pal/announcement/filter/AnnouncementFilter.java
    announcement/trunk/src/main/java/jp/sf/pal/announcement/service/
    announcement/trunk/src/main/java/jp/sf/pal/announcement/service/AnnouncementService.java
    announcement/trunk/src/main/java/jp/sf/pal/announcement/web/
    announcement/trunk/src/main/java/jp/sf/pal/announcement/web/edit/
    announcement/trunk/src/main/java/jp/sf/pal/announcement/web/edit/EditContentPage.java
    announcement/trunk/src/main/java/jp/sf/pal/announcement/web/view/
    announcement/trunk/src/main/java/jp/sf/pal/announcement/web/view/DisplayContentPage.java
    announcement/trunk/src/main/resources/
    announcement/trunk/src/main/resources/AMMessages.properties
    announcement/trunk/src/main/resources/app.dicon
    announcement/trunk/src/main/resources/appMessages.properties
    announcement/trunk/src/main/resources/appMessages_ja.properties
    announcement/trunk/src/main/resources/app_aop.dicon
    announcement/trunk/src/main/resources/convention.dicon
    announcement/trunk/src/main/resources/creator.dicon
    announcement/trunk/src/main/resources/customizer.dicon
    announcement/trunk/src/main/resources/dbflute.dicon
    announcement/trunk/src/main/resources/env.txt
    announcement/trunk/src/main/resources/env_ut.txt
    announcement/trunk/src/main/resources/jdbc.dicon
    announcement/trunk/src/main/resources/jp/
    announcement/trunk/src/main/resources/jp/sf/
    announcement/trunk/src/main/resources/jp/sf/pal/
    announcement/trunk/src/main/resources/jp/sf/pal/announcement/
    announcement/trunk/src/main/resources/jp/sf/pal/announcement/web/
    announcement/trunk/src/main/resources/jp/sf/pal/announcement/web/edit/
    announcement/trunk/src/main/resources/jp/sf/pal/announcement/web/edit/label.properties
    announcement/trunk/src/main/resources/jp/sf/pal/announcement/web/edit/label_ja.properties
    announcement/trunk/src/main/resources/s2container.dicon
    announcement/trunk/src/main/resources/teedaCustomize.dicon
    announcement/trunk/src/main/resources/teedaErrorPage.dicon
    announcement/trunk/src/main/webapp/
    announcement/trunk/src/main/webapp/WEB-INF/
    announcement/trunk/src/main/webapp/WEB-INF/faces-config.xml
    announcement/trunk/src/main/webapp/WEB-INF/portlet.xml
    announcement/trunk/src/main/webapp/WEB-INF/web.xml
    announcement/trunk/src/main/webapp/fckeditor/
    announcement/trunk/src/main/webapp/fckeditor/editor/
    announcement/trunk/src/main/webapp/fckeditor/editor/_source/
    announcement/trunk/src/main/webapp/fckeditor/editor/_source/classes/
    announcement/trunk/src/main/webapp/fckeditor/editor/_source/classes/fckcontextmenu.js
    announcement/trunk/src/main/webapp/fckeditor/editor/_source/classes/fckdataprocessor.js
    announcement/trunk/src/main/webapp/fckeditor/editor/_source/classes/fckdocumentfragment_gecko.js
    announcement/trunk/src/main/webapp/fckeditor/editor/_source/classes/fckdocumentfragment_ie.js
    announcement/trunk/src/main/webapp/fckeditor/editor/_source/classes/fckdomrange.js
    announcement/trunk/src/main/webapp/fckeditor/editor/_source/classes/fckdomrange_gecko.js
    announcement/trunk/src/main/webapp/fckeditor/editor/_source/classes/fckdomrange_ie.js
    announcement/trunk/src/main/webapp/fckeditor/editor/_source/classes/fckdomrangeiterator.js
    announcement/trunk/src/main/webapp/fckeditor/editor/_source/classes/fckeditingarea.js
    announcement/trunk/src/main/webapp/fckeditor/editor/_source/classes/fckelementpath.js
    announcement/trunk/src/main/webapp/fckeditor/editor/_source/classes/fckenterkey.js
    announcement/trunk/src/main/webapp/fckeditor/editor/_source/classes/fckevents.js
    announcement/trunk/src/main/webapp/fckeditor/editor/_source/classes/fckhtmliterator.js
    announcement/trunk/src/main/webapp/fckeditor/editor/_source/classes/fckicon.js
    announcement/trunk/src/main/webapp/fckeditor/editor/_source/classes/fckiecleanup.js
    announcement/trunk/src/main/webapp/fckeditor/editor/_source/classes/fckimagepreloader.js
    announcement/trunk/src/main/webapp/fckeditor/editor/_source/classes/fckkeystrokehandler.js
    announcement/trunk/src/main/webapp/fckeditor/editor/_source/classes/fckmenublock.js
    announcement/trunk/src/main/webapp/fckeditor/editor/_source/classes/fckmenublockpanel.js
    announcement/trunk/src/main/webapp/fckeditor/editor/_source/classes/fckmenuitem.js
    announcement/trunk/src/main/webapp/fckeditor/editor/_source/classes/fckpanel.js
    announcement/trunk/src/main/webapp/fckeditor/editor/_source/classes/fckplugin.js
    announcement/trunk/src/main/webapp/fckeditor/editor/_source/classes/fckspecialcombo.js
    announcement/trunk/src/main/webapp/fckeditor/editor/_source/classes/fckstyle.js
    announcement/trunk/src/main/webapp/fckeditor/editor/_source/classes/fcktoolbar.js
    announcement/trunk/src/main/webapp/fckeditor/editor/_source/classes/fcktoolbarbreak_gecko.js
    announcement/trunk/src/main/webapp/fckeditor/editor/_source/classes/fcktoolbarbreak_ie.js
    announcement/trunk/src/main/webapp/fckeditor/editor/_source/classes/fcktoolbarbutton.js
    announcement/trunk/src/main/webapp/fckeditor/editor/_source/classes/fcktoolbarbuttonui.js
    announcement/trunk/src/main/webapp/fckeditor/editor/_source/classes/fcktoolbarfontformatcombo.js
    announcement/trunk/src/main/webapp/fckeditor/editor/_source/classes/fcktoolbarfontscombo.js
    announcement/trunk/src/main/webapp/fckeditor/editor/_source/classes/fcktoolbarfontsizecombo.js
    announcement/trunk/src/main/webapp/fckeditor/editor/_source/classes/fcktoolbarpanelbutton.js
    announcement/trunk/src/main/webapp/fckeditor/editor/_source/classes/fcktoolbarspecialcombo.js
    announcement/trunk/src/main/webapp/fckeditor/editor/_source/classes/fcktoolbarstylecombo.js
    announcement/trunk/src/main/webapp/fckeditor/editor/_source/classes/fckw3crange.js
    announcement/trunk/src/main/webapp/fckeditor/editor/_source/classes/fckxml.js
    announcement/trunk/src/main/webapp/fckeditor/editor/_source/classes/fckxml_gecko.js
    announcement/trunk/src/main/webapp/fckeditor/editor/_source/classes/fckxml_ie.js
    announcement/trunk/src/main/webapp/fckeditor/editor/_source/commandclasses/
    announcement/trunk/src/main/webapp/fckeditor/editor/_source/commandclasses/fck_othercommands.js
    announcement/trunk/src/main/webapp/fckeditor/editor/_source/commandclasses/fckblockquotecommand.js
    announcement/trunk/src/main/webapp/fckeditor/editor/_source/commandclasses/fckcorestylecommand.js
    announcement/trunk/src/main/webapp/fckeditor/editor/_source/commandclasses/fckfitwindow.js
    announcement/trunk/src/main/webapp/fckeditor/editor/_source/commandclasses/fckindentcommands.js
    announcement/trunk/src/main/webapp/fckeditor/editor/_source/commandclasses/fckjustifycommands.js
    announcement/trunk/src/main/webapp/fckeditor/editor/_source/commandclasses/fcklistcommands.js
    announcement/trunk/src/main/webapp/fckeditor/editor/_source/commandclasses/fcknamedcommand.js
    announcement/trunk/src/main/webapp/fckeditor/editor/_source/commandclasses/fckpasteplaintextcommand.js
    announcement/trunk/src/main/webapp/fckeditor/editor/_source/commandclasses/fckpastewordcommand.js
    announcement/trunk/src/main/webapp/fckeditor/editor/_source/commandclasses/fckremoveformatcommand.js
    announcement/trunk/src/main/webapp/fckeditor/editor/_source/commandclasses/fckshowblocks.js
    announcement/trunk/src/main/webapp/fckeditor/editor/_source/commandclasses/fckspellcheckcommand_gecko.js
    announcement/trunk/src/main/webapp/fckeditor/editor/_source/commandclasses/fckspellcheckcommand_ie.js
    announcement/trunk/src/main/webapp/fckeditor/editor/_source/commandclasses/fckstylecommand.js
    announcement/trunk/src/main/webapp/fckeditor/editor/_source/commandclasses/fcktablecommand.js
    announcement/trunk/src/main/webapp/fckeditor/editor/_source/commandclasses/fcktextcolorcommand.js
    announcement/trunk/src/main/webapp/fckeditor/editor/_source/fckconstants.js
    announcement/trunk/src/main/webapp/fckeditor/editor/_source/fckeditorapi.js
    announcement/trunk/src/main/webapp/fckeditor/editor/_source/fckjscoreextensions.js
    announcement/trunk/src/main/webapp/fckeditor/editor/_source/fckscriptloader.js
    announcement/trunk/src/main/webapp/fckeditor/editor/_source/internals/
    announcement/trunk/src/main/webapp/fckeditor/editor/_source/internals/fck.js
    announcement/trunk/src/main/webapp/fckeditor/editor/_source/internals/fck_contextmenu.js
    announcement/trunk/src/main/webapp/fckeditor/editor/_source/internals/fck_gecko.js
    announcement/trunk/src/main/webapp/fckeditor/editor/_source/internals/fck_ie.js
    announcement/trunk/src/main/webapp/fckeditor/editor/_source/internals/fckbrowserinfo.js
    announcement/trunk/src/main/webapp/fckeditor/editor/_source/internals/fckcodeformatter.js
    announcement/trunk/src/main/webapp/fckeditor/editor/_source/internals/fckcommands.js
    announcement/trunk/src/main/webapp/fckeditor/editor/_source/internals/fckconfig.js
    announcement/trunk/src/main/webapp/fckeditor/editor/_source/internals/fckdebug.js
    announcement/trunk/src/main/webapp/fckeditor/editor/_source/internals/fckdebug_empty.js
    announcement/trunk/src/main/webapp/fckeditor/editor/_source/internals/fckdialog.js
    announcement/trunk/src/main/webapp/fckeditor/editor/_source/internals/fckdocumentprocessor.js
    announcement/trunk/src/main/webapp/fckeditor/editor/_source/internals/fckdomtools.js
    announcement/trunk/src/main/webapp/fckeditor/editor/_source/internals/fcklanguagemanager.js
    announcement/trunk/src/main/webapp/fckeditor/editor/_source/internals/fcklisthandler.js
    announcement/trunk/src/main/webapp/fckeditor/editor/_source/internals/fcklistslib.js
    announcement/trunk/src/main/webapp/fckeditor/editor/_source/internals/fckplugins.js
    announcement/trunk/src/main/webapp/fckeditor/editor/_source/internals/fckregexlib.js
    announcement/trunk/src/main/webapp/fckeditor/editor/_source/internals/fckselection.js
    announcement/trunk/src/main/webapp/fckeditor/editor/_source/internals/fckselection_gecko.js
    announcement/trunk/src/main/webapp/fckeditor/editor/_source/internals/fckselection_ie.js
    announcement/trunk/src/main/webapp/fckeditor/editor/_source/internals/fckstyles.js
    announcement/trunk/src/main/webapp/fckeditor/editor/_source/internals/fcktablehandler.js
    announcement/trunk/src/main/webapp/fckeditor/editor/_source/internals/fcktablehandler_gecko.js
    announcement/trunk/src/main/webapp/fckeditor/editor/_source/internals/fcktablehandler_ie.js
    announcement/trunk/src/main/webapp/fckeditor/editor/_source/internals/fcktoolbaritems.js
    announcement/trunk/src/main/webapp/fckeditor/editor/_source/internals/fcktoolbarset.js
    announcement/trunk/src/main/webapp/fckeditor/editor/_source/internals/fcktools.js
    announcement/trunk/src/main/webapp/fckeditor/editor/_source/internals/fcktools_gecko.js
    announcement/trunk/src/main/webapp/fckeditor/editor/_source/internals/fcktools_ie.js
    announcement/trunk/src/main/webapp/fckeditor/editor/_source/internals/fckundo.js
    announcement/trunk/src/main/webapp/fckeditor/editor/_source/internals/fckurlparams.js
    announcement/trunk/src/main/webapp/fckeditor/editor/_source/internals/fckxhtml.js
    announcement/trunk/src/main/webapp/fckeditor/editor/_source/internals/fckxhtml_gecko.js
    announcement/trunk/src/main/webapp/fckeditor/editor/_source/internals/fckxhtml_ie.js
    announcement/trunk/src/main/webapp/fckeditor/editor/_source/internals/fckxhtmlentities.js
    announcement/trunk/src/main/webapp/fckeditor/editor/css/
    announcement/trunk/src/main/webapp/fckeditor/editor/css/behaviors/
    announcement/trunk/src/main/webapp/fckeditor/editor/css/behaviors/disablehandles.htc
    announcement/trunk/src/main/webapp/fckeditor/editor/css/behaviors/showtableborders.htc
    announcement/trunk/src/main/webapp/fckeditor/editor/css/fck_editorarea.css
    announcement/trunk/src/main/webapp/fckeditor/editor/css/fck_internal.css
    announcement/trunk/src/main/webapp/fckeditor/editor/css/fck_showtableborders_gecko.css
    announcement/trunk/src/main/webapp/fckeditor/editor/css/images/
    announcement/trunk/src/main/webapp/fckeditor/editor/css/images/block_address.png
    announcement/trunk/src/main/webapp/fckeditor/editor/css/images/block_blockquote.png
    announcement/trunk/src/main/webapp/fckeditor/editor/css/images/block_div.png
    announcement/trunk/src/main/webapp/fckeditor/editor/css/images/block_h1.png
    announcement/trunk/src/main/webapp/fckeditor/editor/css/images/block_h2.png
    announcement/trunk/src/main/webapp/fckeditor/editor/css/images/block_h3.png
    announcement/trunk/src/main/webapp/fckeditor/editor/css/images/block_h4.png
    announcement/trunk/src/main/webapp/fckeditor/editor/css/images/block_h5.png
    announcement/trunk/src/main/webapp/fckeditor/editor/css/images/block_h6.png
    announcement/trunk/src/main/webapp/fckeditor/editor/css/images/block_p.png
    announcement/trunk/src/main/webapp/fckeditor/editor/css/images/block_pre.png
    announcement/trunk/src/main/webapp/fckeditor/editor/css/images/fck_anchor.gif
    announcement/trunk/src/main/webapp/fckeditor/editor/css/images/fck_flashlogo.gif
    announcement/trunk/src/main/webapp/fckeditor/editor/css/images/fck_hiddenfield.gif
    announcement/trunk/src/main/webapp/fckeditor/editor/css/images/fck_pagebreak.gif
    announcement/trunk/src/main/webapp/fckeditor/editor/css/images/fck_plugin.gif
    announcement/trunk/src/main/webapp/fckeditor/editor/dialog/
    announcement/trunk/src/main/webapp/fckeditor/editor/dialog/common/
    announcement/trunk/src/main/webapp/fckeditor/editor/dialog/common/fck_dialog_common.css
    announcement/trunk/src/main/webapp/fckeditor/editor/dialog/common/fck_dialog_common.js
    announcement/trunk/src/main/webapp/fckeditor/editor/dialog/common/images/
    announcement/trunk/src/main/webapp/fckeditor/editor/dialog/common/images/locked.gif
    announcement/trunk/src/main/webapp/fckeditor/editor/dialog/common/images/reset.gif
    announcement/trunk/src/main/webapp/fckeditor/editor/dialog/common/images/unlocked.gif
    announcement/trunk/src/main/webapp/fckeditor/editor/dialog/fck_about/
    announcement/trunk/src/main/webapp/fckeditor/editor/dialog/fck_about/logo_fckeditor.gif
    announcement/trunk/src/main/webapp/fckeditor/editor/dialog/fck_about/logo_fredck.gif
    announcement/trunk/src/main/webapp/fckeditor/editor/dialog/fck_about/sponsors/
    announcement/trunk/src/main/webapp/fckeditor/editor/dialog/fck_about/sponsors/spellchecker_net.gif
    announcement/trunk/src/main/webapp/fckeditor/editor/dialog/fck_about.html
    announcement/trunk/src/main/webapp/fckeditor/editor/dialog/fck_anchor.html
    announcement/trunk/src/main/webapp/fckeditor/editor/dialog/fck_button.html
    announcement/trunk/src/main/webapp/fckeditor/editor/dialog/fck_checkbox.html
    announcement/trunk/src/main/webapp/fckeditor/editor/dialog/fck_colorselector.html
    announcement/trunk/src/main/webapp/fckeditor/editor/dialog/fck_docprops/
    announcement/trunk/src/main/webapp/fckeditor/editor/dialog/fck_docprops/fck_document_preview.html
    announcement/trunk/src/main/webapp/fckeditor/editor/dialog/fck_docprops.html
    announcement/trunk/src/main/webapp/fckeditor/editor/dialog/fck_flash/
    announcement/trunk/src/main/webapp/fckeditor/editor/dialog/fck_flash/fck_flash.js
    announcement/trunk/src/main/webapp/fckeditor/editor/dialog/fck_flash/fck_flash_preview.html
    announcement/trunk/src/main/webapp/fckeditor/editor/dialog/fck_flash.html
    announcement/trunk/src/main/webapp/fckeditor/editor/dialog/fck_form.html
    announcement/trunk/src/main/webapp/fckeditor/editor/dialog/fck_hiddenfield.html
    announcement/trunk/src/main/webapp/fckeditor/editor/dialog/fck_image/
    announcement/trunk/src/main/webapp/fckeditor/editor/dialog/fck_image/fck_image.js
    announcement/trunk/src/main/webapp/fckeditor/editor/dialog/fck_image/fck_image_preview.html
    announcement/trunk/src/main/webapp/fckeditor/editor/dialog/fck_image.html
    announcement/trunk/src/main/webapp/fckeditor/editor/dialog/fck_link/
    announcement/trunk/src/main/webapp/fckeditor/editor/dialog/fck_link/fck_link.js
    announcement/trunk/src/main/webapp/fckeditor/editor/dialog/fck_link.html
    announcement/trunk/src/main/webapp/fckeditor/editor/dialog/fck_listprop.html
    announcement/trunk/src/main/webapp/fckeditor/editor/dialog/fck_paste.html
    announcement/trunk/src/main/webapp/fckeditor/editor/dialog/fck_radiobutton.html
    announcement/trunk/src/main/webapp/fckeditor/editor/dialog/fck_replace.html
    announcement/trunk/src/main/webapp/fckeditor/editor/dialog/fck_select/
    announcement/trunk/src/main/webapp/fckeditor/editor/dialog/fck_select/fck_select.js
    announcement/trunk/src/main/webapp/fckeditor/editor/dialog/fck_select.html
    announcement/trunk/src/main/webapp/fckeditor/editor/dialog/fck_smiley.html
    announcement/trunk/src/main/webapp/fckeditor/editor/dialog/fck_source.html
    announcement/trunk/src/main/webapp/fckeditor/editor/dialog/fck_specialchar.html
    announcement/trunk/src/main/webapp/fckeditor/editor/dialog/fck_spellerpages/
    announcement/trunk/src/main/webapp/fckeditor/editor/dialog/fck_spellerpages/spellerpages/
    announcement/trunk/src/main/webapp/fckeditor/editor/dialog/fck_spellerpages/spellerpages/blank.html
    announcement/trunk/src/main/webapp/fckeditor/editor/dialog/fck_spellerpages/spellerpages/controlWindow.js
    announcement/trunk/src/main/webapp/fckeditor/editor/dialog/fck_spellerpages/spellerpages/controls.html
    announcement/trunk/src/main/webapp/fckeditor/editor/dialog/fck_spellerpages/spellerpages/server-scripts/
    announcement/trunk/src/main/webapp/fckeditor/editor/dialog/fck_spellerpages/spellerpages/server-scripts/spellchecker.cfm
    announcement/trunk/src/main/webapp/fckeditor/editor/dialog/fck_spellerpages/spellerpages/server-scripts/spellchecker.php
    announcement/trunk/src/main/webapp/fckeditor/editor/dialog/fck_spellerpages/spellerpages/server-scripts/spellchecker.pl
    announcement/trunk/src/main/webapp/fckeditor/editor/dialog/fck_spellerpages/spellerpages/spellChecker.js
    announcement/trunk/src/main/webapp/fckeditor/editor/dialog/fck_spellerpages/spellerpages/spellchecker.html
    announcement/trunk/src/main/webapp/fckeditor/editor/dialog/fck_spellerpages/spellerpages/spellerStyle.css
    announcement/trunk/src/main/webapp/fckeditor/editor/dialog/fck_spellerpages/spellerpages/wordWindow.js
    announcement/trunk/src/main/webapp/fckeditor/editor/dialog/fck_spellerpages.html
    announcement/trunk/src/main/webapp/fckeditor/editor/dialog/fck_table.html
    announcement/trunk/src/main/webapp/fckeditor/editor/dialog/fck_tablecell.html
    announcement/trunk/src/main/webapp/fckeditor/editor/dialog/fck_template/
    announcement/trunk/src/main/webapp/fckeditor/editor/dialog/fck_template/images/
    announcement/trunk/src/main/webapp/fckeditor/editor/dialog/fck_template/images/template1.gif
    announcement/trunk/src/main/webapp/fckeditor/editor/dialog/fck_template/images/template2.gif
    announcement/trunk/src/main/webapp/fckeditor/editor/dialog/fck_template/images/template3.gif
    announcement/trunk/src/main/webapp/fckeditor/editor/dialog/fck_template.html
    announcement/trunk/src/main/webapp/fckeditor/editor/dialog/fck_textarea.html
    announcement/trunk/src/main/webapp/fckeditor/editor/dialog/fck_textfield.html
    announcement/trunk/src/main/webapp/fckeditor/editor/dtd/
    announcement/trunk/src/main/webapp/fckeditor/editor/dtd/fck_dtd_test.html
    announcement/trunk/src/main/webapp/fckeditor/editor/dtd/fck_xhtml10strict.js
    announcement/trunk/src/main/webapp/fckeditor/editor/dtd/fck_xhtml10transitional.js
    announcement/trunk/src/main/webapp/fckeditor/editor/fckdebug.html
    announcement/trunk/src/main/webapp/fckeditor/editor/fckdialog.html
    announcement/trunk/src/main/webapp/fckeditor/editor/fckeditor.html
    announcement/trunk/src/main/webapp/fckeditor/editor/fckeditor.original.html
    announcement/trunk/src/main/webapp/fckeditor/editor/filemanager/
    announcement/trunk/src/main/webapp/fckeditor/editor/filemanager/browser/
    announcement/trunk/src/main/webapp/fckeditor/editor/filemanager/browser/default/
    announcement/trunk/src/main/webapp/fckeditor/editor/filemanager/browser/default/browser.css
    announcement/trunk/src/main/webapp/fckeditor/editor/filemanager/browser/default/browser.html
    announcement/trunk/src/main/webapp/fckeditor/editor/filemanager/browser/default/frmactualfolder.html
    announcement/trunk/src/main/webapp/fckeditor/editor/filemanager/browser/default/frmcreatefolder.html
    announcement/trunk/src/main/webapp/fckeditor/editor/filemanager/browser/default/frmfolders.html
    announcement/trunk/src/main/webapp/fckeditor/editor/filemanager/browser/default/frmresourceslist.html
    announcement/trunk/src/main/webapp/fckeditor/editor/filemanager/browser/default/frmresourcetype.html
    announcement/trunk/src/main/webapp/fckeditor/editor/filemanager/browser/default/frmupload.html
    announcement/trunk/src/main/webapp/fckeditor/editor/filemanager/browser/default/images/
    announcement/trunk/src/main/webapp/fckeditor/editor/filemanager/browser/default/images/ButtonArrow.gif
    announcement/trunk/src/main/webapp/fckeditor/editor/filemanager/browser/default/images/Folder.gif
    announcement/trunk/src/main/webapp/fckeditor/editor/filemanager/browser/default/images/Folder32.gif
    announcement/trunk/src/main/webapp/fckeditor/editor/filemanager/browser/default/images/FolderOpened.gif
    announcement/trunk/src/main/webapp/fckeditor/editor/filemanager/browser/default/images/FolderOpened32.gif
    announcement/trunk/src/main/webapp/fckeditor/editor/filemanager/browser/default/images/FolderUp.gif
    announcement/trunk/src/main/webapp/fckeditor/editor/filemanager/browser/default/images/icons/
    announcement/trunk/src/main/webapp/fckeditor/editor/filemanager/browser/default/images/icons/32/
    announcement/trunk/src/main/webapp/fckeditor/editor/filemanager/browser/default/images/icons/32/ai.gif
    announcement/trunk/src/main/webapp/fckeditor/editor/filemanager/browser/default/images/icons/32/avi.gif
    announcement/trunk/src/main/webapp/fckeditor/editor/filemanager/browser/default/images/icons/32/bmp.gif
    announcement/trunk/src/main/webapp/fckeditor/editor/filemanager/browser/default/images/icons/32/cs.gif
    announcement/trunk/src/main/webapp/fckeditor/editor/filemanager/browser/default/images/icons/32/default.icon.gif
    announcement/trunk/src/main/webapp/fckeditor/editor/filemanager/browser/default/images/icons/32/dll.gif
    announcement/trunk/src/main/webapp/fckeditor/editor/filemanager/browser/default/images/icons/32/doc.gif
    announcement/trunk/src/main/webapp/fckeditor/editor/filemanager/browser/default/images/icons/32/exe.gif
    announcement/trunk/src/main/webapp/fckeditor/editor/filemanager/browser/default/images/icons/32/fla.gif
    announcement/trunk/src/main/webapp/fckeditor/editor/filemanager/browser/default/images/icons/32/gif.gif
    announcement/trunk/src/main/webapp/fckeditor/editor/filemanager/browser/default/images/icons/32/htm.gif
    announcement/trunk/src/main/webapp/fckeditor/editor/filemanager/browser/default/images/icons/32/html.gif
    announcement/trunk/src/main/webapp/fckeditor/editor/filemanager/browser/default/images/icons/32/jpg.gif
    announcement/trunk/src/main/webapp/fckeditor/editor/filemanager/browser/default/images/icons/32/js.gif
    announcement/trunk/src/main/webapp/fckeditor/editor/filemanager/browser/default/images/icons/32/mdb.gif
    announcement/trunk/src/main/webapp/fckeditor/editor/filemanager/browser/default/images/icons/32/mp3.gif
    announcement/trunk/src/main/webapp/fckeditor/editor/filemanager/browser/default/images/icons/32/pdf.gif
    announcement/trunk/src/main/webapp/fckeditor/editor/filemanager/browser/default/images/icons/32/png.gif
    announcement/trunk/src/main/webapp/fckeditor/editor/filemanager/browser/default/images/icons/32/ppt.gif
    announcement/trunk/src/main/webapp/fckeditor/editor/filemanager/browser/default/images/icons/32/rdp.gif
    announcement/trunk/src/main/webapp/fckeditor/editor/filemanager/browser/default/images/icons/32/swf.gif
    announcement/trunk/src/main/webapp/fckeditor/editor/filemanager/browser/default/images/icons/32/swt.gif
    announcement/trunk/src/main/webapp/fckeditor/editor/filemanager/browser/default/images/icons/32/txt.gif
    announcement/trunk/src/main/webapp/fckeditor/editor/filemanager/browser/default/images/icons/32/vsd.gif
    announcement/trunk/src/main/webapp/fckeditor/editor/filemanager/browser/default/images/icons/32/xls.gif
    announcement/trunk/src/main/webapp/fckeditor/editor/filemanager/browser/default/images/icons/32/xml.gif
    announcement/trunk/src/main/webapp/fckeditor/editor/filemanager/browser/default/images/icons/32/zip.gif
    announcement/trunk/src/main/webapp/fckeditor/editor/filemanager/browser/default/images/icons/ai.gif
    announcement/trunk/src/main/webapp/fckeditor/editor/filemanager/browser/default/images/icons/avi.gif
    announcement/trunk/src/main/webapp/fckeditor/editor/filemanager/browser/default/images/icons/bmp.gif
    announcement/trunk/src/main/webapp/fckeditor/editor/filemanager/browser/default/images/icons/cs.gif
    announcement/trunk/src/main/webapp/fckeditor/editor/filemanager/browser/default/images/icons/default.icon.gif
    announcement/trunk/src/main/webapp/fckeditor/editor/filemanager/browser/default/images/icons/dll.gif
    announcement/trunk/src/main/webapp/fckeditor/editor/filemanager/browser/default/images/icons/doc.gif
    announcement/trunk/src/main/webapp/fckeditor/editor/filemanager/browser/default/images/icons/exe.gif
    announcement/trunk/src/main/webapp/fckeditor/editor/filemanager/browser/default/images/icons/fla.gif
    announcement/trunk/src/main/webapp/fckeditor/editor/filemanager/browser/default/images/icons/gif.gif
    announcement/trunk/src/main/webapp/fckeditor/editor/filemanager/browser/default/images/icons/htm.gif
    announcement/trunk/src/main/webapp/fckeditor/editor/filemanager/browser/default/images/icons/html.gif
    announcement/trunk/src/main/webapp/fckeditor/editor/filemanager/browser/default/images/icons/jpg.gif
    announcement/trunk/src/main/webapp/fckeditor/editor/filemanager/browser/default/images/icons/js.gif
    announcement/trunk/src/main/webapp/fckeditor/editor/filemanager/browser/default/images/icons/mdb.gif
    announcement/trunk/src/main/webapp/fckeditor/editor/filemanager/browser/default/images/icons/mp3.gif
    announcement/trunk/src/main/webapp/fckeditor/editor/filemanager/browser/default/images/icons/pdf.gif
    announcement/trunk/src/main/webapp/fckeditor/editor/filemanager/browser/default/images/icons/png.gif
    announcement/trunk/src/main/webapp/fckeditor/editor/filemanager/browser/default/images/icons/ppt.gif
    announcement/trunk/src/main/webapp/fckeditor/editor/filemanager/browser/default/images/icons/rdp.gif
    announcement/trunk/src/main/webapp/fckeditor/editor/filemanager/browser/default/images/icons/swf.gif
    announcement/trunk/src/main/webapp/fckeditor/editor/filemanager/browser/default/images/icons/swt.gif
    announcement/trunk/src/main/webapp/fckeditor/editor/filemanager/browser/default/images/icons/txt.gif
    announcement/trunk/src/main/webapp/fckeditor/editor/filemanager/browser/default/images/icons/vsd.gif
    announcement/trunk/src/main/webapp/fckeditor/editor/filemanager/browser/default/images/icons/xls.gif
    announcement/trunk/src/main/webapp/fckeditor/editor/filemanager/browser/default/images/icons/xml.gif
    announcement/trunk/src/main/webapp/fckeditor/editor/filemanager/browser/default/images/icons/zip.gif
    announcement/trunk/src/main/webapp/fckeditor/editor/filemanager/browser/default/images/spacer.gif
    announcement/trunk/src/main/webapp/fckeditor/editor/filemanager/browser/default/js/
    announcement/trunk/src/main/webapp/fckeditor/editor/filemanager/browser/default/js/common.js
    announcement/trunk/src/main/webapp/fckeditor/editor/filemanager/browser/default/js/fckxml.js
    announcement/trunk/src/main/webapp/fckeditor/editor/filemanager/connectors/
    announcement/trunk/src/main/webapp/fckeditor/editor/filemanager/connectors/asp/
    announcement/trunk/src/main/webapp/fckeditor/editor/filemanager/connectors/asp/basexml.asp
    announcement/trunk/src/main/webapp/fckeditor/editor/filemanager/connectors/asp/class_upload.asp
    announcement/trunk/src/main/webapp/fckeditor/editor/filemanager/connectors/asp/commands.asp
    announcement/trunk/src/main/webapp/fckeditor/editor/filemanager/connectors/asp/config.asp
    announcement/trunk/src/main/webapp/fckeditor/editor/filemanager/connectors/asp/connector.asp
    announcement/trunk/src/main/webapp/fckeditor/editor/filemanager/connectors/asp/io.asp
    announcement/trunk/src/main/webapp/fckeditor/editor/filemanager/connectors/asp/upload.asp
    announcement/trunk/src/main/webapp/fckeditor/editor/filemanager/connectors/asp/util.asp
    announcement/trunk/src/main/webapp/fckeditor/editor/filemanager/connectors/aspx/
    announcement/trunk/src/main/webapp/fckeditor/editor/filemanager/connectors/aspx/config.ascx
    announcement/trunk/src/main/webapp/fckeditor/editor/filemanager/connectors/aspx/connector.aspx
    announcement/trunk/src/main/webapp/fckeditor/editor/filemanager/connectors/aspx/upload.aspx
    announcement/trunk/src/main/webapp/fckeditor/editor/filemanager/connectors/cfm/
    announcement/trunk/src/main/webapp/fckeditor/editor/filemanager/connectors/cfm/ImageObject.cfc
    announcement/trunk/src/main/webapp/fckeditor/editor/filemanager/connectors/cfm/cf5_connector.cfm
    announcement/trunk/src/main/webapp/fckeditor/editor/filemanager/connectors/cfm/cf5_upload.cfm
    announcement/trunk/src/main/webapp/fckeditor/editor/filemanager/connectors/cfm/cf_basexml.cfm
    announcement/trunk/src/main/webapp/fckeditor/editor/filemanager/connectors/cfm/cf_commands.cfm
    announcement/trunk/src/main/webapp/fckeditor/editor/filemanager/connectors/cfm/cf_connector.cfm
    announcement/trunk/src/main/webapp/fckeditor/editor/filemanager/connectors/cfm/cf_io.cfm
    announcement/trunk/src/main/webapp/fckeditor/editor/filemanager/connectors/cfm/cf_upload.cfm
    announcement/trunk/src/main/webapp/fckeditor/editor/filemanager/connectors/cfm/cf_util.cfm
    announcement/trunk/src/main/webapp/fckeditor/editor/filemanager/connectors/cfm/config.cfm
    announcement/trunk/src/main/webapp/fckeditor/editor/filemanager/connectors/cfm/connector.cfm
    announcement/trunk/src/main/webapp/fckeditor/editor/filemanager/connectors/cfm/image.cfc
    announcement/trunk/src/main/webapp/fckeditor/editor/filemanager/connectors/cfm/upload.cfm
    announcement/trunk/src/main/webapp/fckeditor/editor/filemanager/connectors/lasso/
    announcement/trunk/src/main/webapp/fckeditor/editor/filemanager/connectors/lasso/config.lasso
    announcement/trunk/src/main/webapp/fckeditor/editor/filemanager/connectors/lasso/connector.lasso
    announcement/trunk/src/main/webapp/fckeditor/editor/filemanager/connectors/lasso/upload.lasso
    announcement/trunk/src/main/webapp/fckeditor/editor/filemanager/connectors/perl/
    announcement/trunk/src/main/webapp/fckeditor/editor/filemanager/connectors/perl/basexml.pl
    announcement/trunk/src/main/webapp/fckeditor/editor/filemanager/connectors/perl/commands.pl
    announcement/trunk/src/main/webapp/fckeditor/editor/filemanager/connectors/perl/connector.cgi
    announcement/trunk/src/main/webapp/fckeditor/editor/filemanager/connectors/perl/io.pl
    announcement/trunk/src/main/webapp/fckeditor/editor/filemanager/connectors/perl/upload.cgi
    announcement/trunk/src/main/webapp/fckeditor/editor/filemanager/connectors/perl/upload_fck.pl
    announcement/trunk/src/main/webapp/fckeditor/editor/filemanager/connectors/perl/util.pl
    announcement/trunk/src/main/webapp/fckeditor/editor/filemanager/connectors/php/
    announcement/trunk/src/main/webapp/fckeditor/editor/filemanager/connectors/php/basexml.php
    announcement/trunk/src/main/webapp/fckeditor/editor/filemanager/connectors/php/commands.php
    announcement/trunk/src/main/webapp/fckeditor/editor/filemanager/connectors/php/config.php
    announcement/trunk/src/main/webapp/fckeditor/editor/filemanager/connectors/php/connector.php
    announcement/trunk/src/main/webapp/fckeditor/editor/filemanager/connectors/php/io.php
    announcement/trunk/src/main/webapp/fckeditor/editor/filemanager/connectors/php/phpcompat.php
    announcement/trunk/src/main/webapp/fckeditor/editor/filemanager/connectors/php/upload.php
    announcement/trunk/src/main/webapp/fckeditor/editor/filemanager/connectors/php/util.php
    announcement/trunk/src/main/webapp/fckeditor/editor/filemanager/connectors/py/
    announcement/trunk/src/main/webapp/fckeditor/editor/filemanager/connectors/py/config.py
    announcement/trunk/src/main/webapp/fckeditor/editor/filemanager/connectors/py/connector.py
    announcement/trunk/src/main/webapp/fckeditor/editor/filemanager/connectors/py/fckcommands.py
    announcement/trunk/src/main/webapp/fckeditor/editor/filemanager/connectors/py/fckconnector.py
    announcement/trunk/src/main/webapp/fckeditor/editor/filemanager/connectors/py/fckoutput.py
    announcement/trunk/src/main/webapp/fckeditor/editor/filemanager/connectors/py/fckutil.py
    announcement/trunk/src/main/webapp/fckeditor/editor/filemanager/connectors/py/htaccess.txt
    announcement/trunk/src/main/webapp/fckeditor/editor/filemanager/connectors/py/upload.py
    announcement/trunk/src/main/webapp/fckeditor/editor/filemanager/connectors/py/wsgi.py
    announcement/trunk/src/main/webapp/fckeditor/editor/filemanager/connectors/py/zope.py
    announcement/trunk/src/main/webapp/fckeditor/editor/filemanager/connectors/test.html
    announcement/trunk/src/main/webapp/fckeditor/editor/filemanager/connectors/uploadtest.html
    announcement/trunk/src/main/webapp/fckeditor/editor/images/
    announcement/trunk/src/main/webapp/fckeditor/editor/images/anchor.gif
    announcement/trunk/src/main/webapp/fckeditor/editor/images/arrow_ltr.gif
    announcement/trunk/src/main/webapp/fckeditor/editor/images/arrow_rtl.gif
    announcement/trunk/src/main/webapp/fckeditor/editor/images/smiley/
    announcement/trunk/src/main/webapp/fckeditor/editor/images/smiley/msn/
    announcement/trunk/src/main/webapp/fckeditor/editor/images/smiley/msn/angel_smile.gif
    announcement/trunk/src/main/webapp/fckeditor/editor/images/smiley/msn/angry_smile.gif
    announcement/trunk/src/main/webapp/fckeditor/editor/images/smiley/msn/broken_heart.gif
    announcement/trunk/src/main/webapp/fckeditor/editor/images/smiley/msn/cake.gif
    announcement/trunk/src/main/webapp/fckeditor/editor/images/smiley/msn/confused_smile.gif
    announcement/trunk/src/main/webapp/fckeditor/editor/images/smiley/msn/cry_smile.gif
    announcement/trunk/src/main/webapp/fckeditor/editor/images/smiley/msn/devil_smile.gif
    announcement/trunk/src/main/webapp/fckeditor/editor/images/smiley/msn/embaressed_smile.gif
    announcement/trunk/src/main/webapp/fckeditor/editor/images/smiley/msn/envelope.gif
    announcement/trunk/src/main/webapp/fckeditor/editor/images/smiley/msn/heart.gif
    announcement/trunk/src/main/webapp/fckeditor/editor/images/smiley/msn/kiss.gif
    announcement/trunk/src/main/webapp/fckeditor/editor/images/smiley/msn/lightbulb.gif
    announcement/trunk/src/main/webapp/fckeditor/editor/images/smiley/msn/omg_smile.gif
    announcement/trunk/src/main/webapp/fckeditor/editor/images/smiley/msn/regular_smile.gif
    announcement/trunk/src/main/webapp/fckeditor/editor/images/smiley/msn/sad_smile.gif
    announcement/trunk/src/main/webapp/fckeditor/editor/images/smiley/msn/shades_smile.gif
    announcement/trunk/src/main/webapp/fckeditor/editor/images/smiley/msn/teeth_smile.gif
    announcement/trunk/src/main/webapp/fckeditor/editor/images/smiley/msn/thumbs_down.gif
    announcement/trunk/src/main/webapp/fckeditor/editor/images/smiley/msn/thumbs_up.gif
    announcement/trunk/src/main/webapp/fckeditor/editor/images/smiley/msn/tounge_smile.gif
    announcement/trunk/src/main/webapp/fckeditor/editor/images/smiley/msn/whatchutalkingabout_smile.gif
    announcement/trunk/src/main/webapp/fckeditor/editor/images/smiley/msn/wink_smile.gif
    announcement/trunk/src/main/webapp/fckeditor/editor/images/spacer.gif
    announcement/trunk/src/main/webapp/fckeditor/editor/js/
    announcement/trunk/src/main/webapp/fckeditor/editor/js/fckadobeair.js
    announcement/trunk/src/main/webapp/fckeditor/editor/js/fckeditorcode_gecko.js
    announcement/trunk/src/main/webapp/fckeditor/editor/js/fckeditorcode_ie.js
    announcement/trunk/src/main/webapp/fckeditor/editor/lang/
    announcement/trunk/src/main/webapp/fckeditor/editor/lang/_translationstatus.txt
    announcement/trunk/src/main/webapp/fckeditor/editor/lang/af.js
    announcement/trunk/src/main/webapp/fckeditor/editor/lang/ar.js
    announcement/trunk/src/main/webapp/fckeditor/editor/lang/bg.js
    announcement/trunk/src/main/webapp/fckeditor/editor/lang/bn.js
    announcement/trunk/src/main/webapp/fckeditor/editor/lang/bs.js
    announcement/trunk/src/main/webapp/fckeditor/editor/lang/ca.js
    announcement/trunk/src/main/webapp/fckeditor/editor/lang/cs.js
    announcement/trunk/src/main/webapp/fckeditor/editor/lang/da.js
    announcement/trunk/src/main/webapp/fckeditor/editor/lang/de.js
    announcement/trunk/src/main/webapp/fckeditor/editor/lang/el.js
    announcement/trunk/src/main/webapp/fckeditor/editor/lang/en-au.js
    announcement/trunk/src/main/webapp/fckeditor/editor/lang/en-ca.js
    announcement/trunk/src/main/webapp/fckeditor/editor/lang/en-uk.js
    announcement/trunk/src/main/webapp/fckeditor/editor/lang/en.js
    announcement/trunk/src/main/webapp/fckeditor/editor/lang/eo.js
    announcement/trunk/src/main/webapp/fckeditor/editor/lang/es.js
    announcement/trunk/src/main/webapp/fckeditor/editor/lang/et.js
    announcement/trunk/src/main/webapp/fckeditor/editor/lang/eu.js
    announcement/trunk/src/main/webapp/fckeditor/editor/lang/fa.js
    announcement/trunk/src/main/webapp/fckeditor/editor/lang/fi.js
    announcement/trunk/src/main/webapp/fckeditor/editor/lang/fo.js
    announcement/trunk/src/main/webapp/fckeditor/editor/lang/fr-ca.js
    announcement/trunk/src/main/webapp/fckeditor/editor/lang/fr.js
    announcement/trunk/src/main/webapp/fckeditor/editor/lang/gl.js
    announcement/trunk/src/main/webapp/fckeditor/editor/lang/gu.js
    announcement/trunk/src/main/webapp/fckeditor/editor/lang/he.js
    announcement/trunk/src/main/webapp/fckeditor/editor/lang/hi.js
    announcement/trunk/src/main/webapp/fckeditor/editor/lang/hr.js
    announcement/trunk/src/main/webapp/fckeditor/editor/lang/hu.js
    announcement/trunk/src/main/webapp/fckeditor/editor/lang/it.js
    announcement/trunk/src/main/webapp/fckeditor/editor/lang/ja.js
    announcement/trunk/src/main/webapp/fckeditor/editor/lang/km.js
    announcement/trunk/src/main/webapp/fckeditor/editor/lang/ko.js
    announcement/trunk/src/main/webapp/fckeditor/editor/lang/lt.js
    announcement/trunk/src/main/webapp/fckeditor/editor/lang/lv.js
    announcement/trunk/src/main/webapp/fckeditor/editor/lang/mn.js
    announcement/trunk/src/main/webapp/fckeditor/editor/lang/ms.js
    announcement/trunk/src/main/webapp/fckeditor/editor/lang/nb.js
    announcement/trunk/src/main/webapp/fckeditor/editor/lang/nl.js
    announcement/trunk/src/main/webapp/fckeditor/editor/lang/no.js
    announcement/trunk/src/main/webapp/fckeditor/editor/lang/pl.js
    announcement/trunk/src/main/webapp/fckeditor/editor/lang/pt-br.js
    announcement/trunk/src/main/webapp/fckeditor/editor/lang/pt.js
    announcement/trunk/src/main/webapp/fckeditor/editor/lang/ro.js
    announcement/trunk/src/main/webapp/fckeditor/editor/lang/ru.js
    announcement/trunk/src/main/webapp/fckeditor/editor/lang/sk.js
    announcement/trunk/src/main/webapp/fckeditor/editor/lang/sl.js
    announcement/trunk/src/main/webapp/fckeditor/editor/lang/sr-latn.js
    announcement/trunk/src/main/webapp/fckeditor/editor/lang/sr.js
    announcement/trunk/src/main/webapp/fckeditor/editor/lang/sv.js
    announcement/trunk/src/main/webapp/fckeditor/editor/lang/th.js
    announcement/trunk/src/main/webapp/fckeditor/editor/lang/tr.js
    announcement/trunk/src/main/webapp/fckeditor/editor/lang/uk.js
    announcement/trunk/src/main/webapp/fckeditor/editor/lang/vi.js
    announcement/trunk/src/main/webapp/fckeditor/editor/lang/zh-cn.js
    announcement/trunk/src/main/webapp/fckeditor/editor/lang/zh.js
    announcement/trunk/src/main/webapp/fckeditor/editor/plugins/
    announcement/trunk/src/main/webapp/fckeditor/editor/plugins/autogrow/
    announcement/trunk/src/main/webapp/fckeditor/editor/plugins/autogrow/fckplugin.js
    announcement/trunk/src/main/webapp/fckeditor/editor/plugins/bbcode/
    announcement/trunk/src/main/webapp/fckeditor/editor/plugins/bbcode/_sample/
    announcement/trunk/src/main/webapp/fckeditor/editor/plugins/bbcode/_sample/sample.config.js
    announcement/trunk/src/main/webapp/fckeditor/editor/plugins/bbcode/_sample/sample.html
    announcement/trunk/src/main/webapp/fckeditor/editor/plugins/bbcode/fckplugin.js
    announcement/trunk/src/main/webapp/fckeditor/editor/plugins/dragresizetable/
    announcement/trunk/src/main/webapp/fckeditor/editor/plugins/dragresizetable/fckplugin.js
    announcement/trunk/src/main/webapp/fckeditor/editor/plugins/placeholder/
    announcement/trunk/src/main/webapp/fckeditor/editor/plugins/placeholder/fck_placeholder.html
    announcement/trunk/src/main/webapp/fckeditor/editor/plugins/placeholder/fckplugin.js
    announcement/trunk/src/main/webapp/fckeditor/editor/plugins/placeholder/lang/
    announcement/trunk/src/main/webapp/fckeditor/editor/plugins/placeholder/lang/de.js
    announcement/trunk/src/main/webapp/fckeditor/editor/plugins/placeholder/lang/en.js
    announcement/trunk/src/main/webapp/fckeditor/editor/plugins/placeholder/lang/es.js
    announcement/trunk/src/main/webapp/fckeditor/editor/plugins/placeholder/lang/fr.js
    announcement/trunk/src/main/webapp/fckeditor/editor/plugins/placeholder/lang/it.js
    announcement/trunk/src/main/webapp/fckeditor/editor/plugins/placeholder/lang/pl.js
    announcement/trunk/src/main/webapp/fckeditor/editor/plugins/placeholder/placeholder.gif
    announcement/trunk/src/main/webapp/fckeditor/editor/plugins/simplecommands/
    announcement/trunk/src/main/webapp/fckeditor/editor/plugins/simplecommands/fckplugin.js
    announcement/trunk/src/main/webapp/fckeditor/editor/plugins/tablecommands/
    announcement/trunk/src/main/webapp/fckeditor/editor/plugins/tablecommands/fckplugin.js
    announcement/trunk/src/main/webapp/fckeditor/editor/skins/
    announcement/trunk/src/main/webapp/fckeditor/editor/skins/_fckviewstrips.html
    announcement/trunk/src/main/webapp/fckeditor/editor/skins/default/
    announcement/trunk/src/main/webapp/fckeditor/editor/skins/default/fck_dialog.css
    announcement/trunk/src/main/webapp/fckeditor/editor/skins/default/fck_dialog_ie6.js
    announcement/trunk/src/main/webapp/fckeditor/editor/skins/default/fck_editor.css
    announcement/trunk/src/main/webapp/fckeditor/editor/skins/default/fck_strip.gif
    announcement/trunk/src/main/webapp/fckeditor/editor/skins/default/images/
    announcement/trunk/src/main/webapp/fckeditor/editor/skins/default/images/dialog.sides.gif
    announcement/trunk/src/main/webapp/fckeditor/editor/skins/default/images/dialog.sides.png
    announcement/trunk/src/main/webapp/fckeditor/editor/skins/default/images/dialog.sides.rtl.png
    announcement/trunk/src/main/webapp/fckeditor/editor/skins/default/images/sprites.gif
    announcement/trunk/src/main/webapp/fckeditor/editor/skins/default/images/sprites.png
    announcement/trunk/src/main/webapp/fckeditor/editor/skins/default/images/toolbar.arrowright.gif
    announcement/trunk/src/main/webapp/fckeditor/editor/skins/default/images/toolbar.buttonarrow.gif
    announcement/trunk/src/main/webapp/fckeditor/editor/skins/default/images/toolbar.collapse.gif
    announcement/trunk/src/main/webapp/fckeditor/editor/skins/default/images/toolbar.end.gif
    announcement/trunk/src/main/webapp/fckeditor/editor/skins/default/images/toolbar.expand.gif
    announcement/trunk/src/main/webapp/fckeditor/editor/skins/default/images/toolbar.separator.gif
    announcement/trunk/src/main/webapp/fckeditor/editor/skins/default/images/toolbar.start.gif
    announcement/trunk/src/main/webapp/fckeditor/editor/skins/office2003/
    announcement/trunk/src/main/webapp/fckeditor/editor/skins/office2003/fck_dialog.css
    announcement/trunk/src/main/webapp/fckeditor/editor/skins/office2003/fck_dialog_ie6.js
    announcement/trunk/src/main/webapp/fckeditor/editor/skins/office2003/fck_editor.css
    announcement/trunk/src/main/webapp/fckeditor/editor/skins/office2003/fck_strip.gif
    announcement/trunk/src/main/webapp/fckeditor/editor/skins/office2003/images/
    announcement/trunk/src/main/webapp/fckeditor/editor/skins/office2003/images/dialog.sides.gif
    announcement/trunk/src/main/webapp/fckeditor/editor/skins/office2003/images/dialog.sides.png
    announcement/trunk/src/main/webapp/fckeditor/editor/skins/office2003/images/dialog.sides.rtl.png
    announcement/trunk/src/main/webapp/fckeditor/editor/skins/office2003/images/sprites.gif
    announcement/trunk/src/main/webapp/fckeditor/editor/skins/office2003/images/sprites.png
    announcement/trunk/src/main/webapp/fckeditor/editor/skins/office2003/images/toolbar.arrowright.gif
    announcement/trunk/src/main/webapp/fckeditor/editor/skins/office2003/images/toolbar.bg.gif
    announcement/trunk/src/main/webapp/fckeditor/editor/skins/office2003/images/toolbar.buttonarrow.gif
    announcement/trunk/src/main/webapp/fckeditor/editor/skins/office2003/images/toolbar.collapse.gif
    announcement/trunk/src/main/webapp/fckeditor/editor/skins/office2003/images/toolbar.end.gif
    announcement/trunk/src/main/webapp/fckeditor/editor/skins/office2003/images/toolbar.expand.gif
    announcement/trunk/src/main/webapp/fckeditor/editor/skins/office2003/images/toolbar.separator.gif
    announcement/trunk/src/main/webapp/fckeditor/editor/skins/office2003/images/toolbar.start.gif
    announcement/trunk/src/main/webapp/fckeditor/editor/skins/silver/
    announcement/trunk/src/main/webapp/fckeditor/editor/skins/silver/fck_dialog.css
    announcement/trunk/src/main/webapp/fckeditor/editor/skins/silver/fck_dialog_ie6.js
    announcement/trunk/src/main/webapp/fckeditor/editor/skins/silver/fck_editor.css
    announcement/trunk/src/main/webapp/fckeditor/editor/skins/silver/fck_strip.gif
    announcement/trunk/src/main/webapp/fckeditor/editor/skins/silver/images/
    announcement/trunk/src/main/webapp/fckeditor/editor/skins/silver/images/dialog.sides.gif
    announcement/trunk/src/main/webapp/fckeditor/editor/skins/silver/images/dialog.sides.png
    announcement/trunk/src/main/webapp/fckeditor/editor/skins/silver/images/dialog.sides.rtl.png
    announcement/trunk/src/main/webapp/fckeditor/editor/skins/silver/images/sprites.gif
    announcement/trunk/src/main/webapp/fckeditor/editor/skins/silver/images/sprites.png
    announcement/trunk/src/main/webapp/fckeditor/editor/skins/silver/images/toolbar.arrowright.gif
    announcement/trunk/src/main/webapp/fckeditor/editor/skins/silver/images/toolbar.buttonarrow.gif
    announcement/trunk/src/main/webapp/fckeditor/editor/skins/silver/images/toolbar.buttonbg.gif
    announcement/trunk/src/main/webapp/fckeditor/editor/skins/silver/images/toolbar.collapse.gif
    announcement/trunk/src/main/webapp/fckeditor/editor/skins/silver/images/toolbar.end.gif
    announcement/trunk/src/main/webapp/fckeditor/editor/skins/silver/images/toolbar.expand.gif
    announcement/trunk/src/main/webapp/fckeditor/editor/skins/silver/images/toolbar.separator.gif
    announcement/trunk/src/main/webapp/fckeditor/editor/skins/silver/images/toolbar.start.gif
    announcement/trunk/src/main/webapp/fckeditor/fckconfig.js
    announcement/trunk/src/main/webapp/fckeditor/fckeditor.afp
    announcement/trunk/src/main/webapp/fckeditor/fckeditor.asp
    announcement/trunk/src/main/webapp/fckeditor/fckeditor.cfc
    announcement/trunk/src/main/webapp/fckeditor/fckeditor.cfm
    announcement/trunk/src/main/webapp/fckeditor/fckeditor.js
    announcement/trunk/src/main/webapp/fckeditor/fckeditor.lasso
    announcement/trunk/src/main/webapp/fckeditor/fckeditor.php
    announcement/trunk/src/main/webapp/fckeditor/fckeditor.pl
    announcement/trunk/src/main/webapp/fckeditor/fckeditor.py
    announcement/trunk/src/main/webapp/fckeditor/fckeditor_php4.php
    announcement/trunk/src/main/webapp/fckeditor/fckeditor_php5.php
    announcement/trunk/src/main/webapp/fckeditor/fckpackager.xml
    announcement/trunk/src/main/webapp/fckeditor/fckstyles.xml
    announcement/trunk/src/main/webapp/fckeditor/fcktemplates.xml
    announcement/trunk/src/main/webapp/fckeditor/fckutils.cfm
    announcement/trunk/src/main/webapp/fckeditor/license.txt
    announcement/trunk/src/main/webapp/fckeditor/myconfig.js
    announcement/trunk/src/main/webapp/view/
    announcement/trunk/src/main/webapp/view/edit/
    announcement/trunk/src/main/webapp/view/edit/editContent.html
    announcement/trunk/src/main/webapp/view/error/
    announcement/trunk/src/main/webapp/view/error/error.html
    announcement/trunk/src/main/webapp/view/view/
    announcement/trunk/src/main/webapp/view/view/displayContent.html


-------------- next part --------------
Added: announcement/trunk/.classpath
===================================================================
--- announcement/trunk/.classpath	                        (rev 0)
+++ announcement/trunk/.classpath	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,43 @@
+<classpath>
+  <classpathentry kind="src" path="src/main/java"/>
+  <classpathentry kind="src" path="src/main/resources"/>
+  <classpathentry kind="output" path="target/classes"/>
+  <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
+  <classpathentry kind="var" path="M2_REPO/aopalliance/aopalliance/1.0/aopalliance-1.0.jar" sourcepath="M2_REPO/aopalliance/aopalliance/1.0/aopalliance-1.0-sources.jar"/>
+  <classpathentry kind="var" path="M2_REPO/org/apache/geronimo/specs/geronimo-ejb_3.0_spec/1.0/geronimo-ejb_3.0_spec-1.0.jar"/>
+  <classpathentry kind="var" path="M2_REPO/portlet-api/portlet-api/1.0/portlet-api-1.0.jar"/>
+  <classpathentry kind="var" path="M2_REPO/org/seasar/teeda/teeda-ajax/1.0.13-sp2-20080605/teeda-ajax-1.0.13-sp2-20080605.jar" sourcepath="M2_REPO/org/seasar/teeda/teeda-ajax/1.0.13-sp2-20080605/teeda-ajax-1.0.13-sp2-20080605-sources.jar"/>
+  <classpathentry kind="var" path="M2_REPO/jp/sf/pal/common-utils/0.3/common-utils-0.3.jar" sourcepath="M2_REPO/jp/sf/pal/common-utils/0.3/common-utils-0.3-sources.jar"/>
+  <classpathentry kind="var" path="M2_REPO/javax/servlet/jstl/1.1.2/jstl-1.1.2.jar" sourcepath="M2_REPO/javax/servlet/jstl/1.1.2/jstl-1.1.2-sources.jar"/>
+  <classpathentry kind="var" path="M2_REPO/org/seasar/container/s2-tiger/2.4.25/s2-tiger-2.4.25.jar"/>
+  <classpathentry kind="var" path="M2_REPO/org/apache/portals/bridges/portals-bridges-portletfilter/1.0.3/portals-bridges-portletfilter-1.0.3.jar"/>
+  <classpathentry kind="var" path="M2_REPO/commons-io/commons-io/1.3.2/commons-io-1.3.2.jar"/>
+  <classpathentry kind="var" path="M2_REPO/org/seasar/teeda/teeda-extension/1.0.13-sp2-20080605/teeda-extension-1.0.13-sp2-20080605.jar" sourcepath="M2_REPO/org/seasar/teeda/teeda-extension/1.0.13-sp2-20080605/teeda-extension-1.0.13-sp2-20080605-sources.jar"/>
+  <classpathentry kind="var" path="M2_REPO/junit-addons/junit-addons/1.4/junit-addons-1.4.jar"/>
+  <classpathentry kind="var" path="M2_REPO/xerces/xercesImpl/2.6.2/xercesImpl-2.6.2.jar" sourcepath="M2_REPO/xerces/xercesImpl/2.6.2/xercesImpl-2.6.2-sources.jar"/>
+  <classpathentry kind="var" path="M2_REPO/jp/sf/pal/portlet-output-optimizer/0.2/portlet-output-optimizer-0.2.jar" sourcepath="M2_REPO/jp/sf/pal/portlet-output-optimizer/0.2/portlet-output-optimizer-0.2-sources.jar"/>
+  <classpathentry kind="var" path="M2_REPO/org/seasar/container/s2-framework/2.4.25/s2-framework-2.4.25.jar"/>
+  <classpathentry kind="var" path="M2_REPO/org/apache/geronimo/specs/geronimo-jta_1.1_spec/1.0/geronimo-jta_1.1_spec-1.0.jar"/>
+  <classpathentry kind="var" path="M2_REPO/jp/sf/pal/faces-response-filter/0.2/faces-response-filter-0.2.jar" sourcepath="M2_REPO/jp/sf/pal/faces-response-filter/0.2/faces-response-filter-0.2-sources.jar"/>
+  <classpathentry kind="var" path="M2_REPO/jboss/javassist/3.4.ga/javassist-3.4.ga.jar"/>
+  <classpathentry kind="var" path="M2_REPO/mysql/mysql-connector-java/5.0.4/mysql-connector-java-5.0.4.jar"/>
+  <classpathentry kind="var" path="M2_REPO/org/seasar/container/s2-extension/2.4.25/s2-extension-2.4.25.jar"/>
+  <classpathentry kind="var" path="M2_REPO/commons-lang/commons-lang/2.4/commons-lang-2.4.jar"/>
+  <classpathentry kind="var" path="M2_REPO/commons-logging/commons-logging/1.1/commons-logging-1.1.jar" sourcepath="M2_REPO/commons-logging/commons-logging/1.1/commons-logging-1.1-sources.jar"/>
+  <classpathentry kind="var" path="M2_REPO/javax/servlet/servlet-api/2.3/servlet-api-2.3.jar" sourcepath="M2_REPO/javax/servlet/servlet-api/2.3/servlet-api-2.3-sources.jar"/>
+  <classpathentry kind="var" path="M2_REPO/org/apache/geronimo/specs/geronimo-jpa_3.0_spec/1.0/geronimo-jpa_3.0_spec-1.0.jar"/>
+  <classpathentry kind="var" path="M2_REPO/log4j/log4j/1.2.9/log4j-1.2.9.jar"/>
+  <classpathentry kind="var" path="M2_REPO/org/seasar/teeda/teeda-core/1.0.13-sp2-20080605/teeda-core-1.0.13-sp2-20080605.jar" sourcepath="M2_REPO/org/seasar/teeda/teeda-core/1.0.13-sp2-20080605/teeda-core-1.0.13-sp2-20080605-sources.jar"/>
+  <classpathentry kind="var" path="M2_REPO/commons-fileupload/commons-fileupload/1.2/commons-fileupload-1.2.jar"/>
+  <classpathentry kind="var" path="M2_REPO/org/apache/geronimo/specs/geronimo-servlet_2.4_spec/1.0/geronimo-servlet_2.4_spec-1.0.jar"/>
+  <classpathentry kind="var" path="M2_REPO/org/seasar/teeda/teeda-tiger/1.0.13/teeda-tiger-1.0.13.jar"/>
+  <classpathentry kind="var" path="M2_REPO/org/apache/geronimo/specs/geronimo-jsp_2.0_spec/1.0/geronimo-jsp_2.0_spec-1.0.jar"/>
+  <classpathentry kind="var" path="M2_REPO/ognl/ognl/2.6.9-patch-20070908/ognl-2.6.9-patch-20070908.jar"/>
+  <classpathentry kind="var" path="M2_REPO/org/seasar/dao/s2-dao-tiger/1.0.48/s2-dao-tiger-1.0.48.jar"/>
+  <classpathentry kind="var" path="M2_REPO/org/apache/poi/poi/3.0-FINAL/poi-3.0-FINAL.jar"/>
+  <classpathentry kind="var" path="M2_REPO/org/seasar/portlet/s2-portlet/1.0.7/s2-portlet-1.0.7.jar" sourcepath="M2_REPO/org/seasar/portlet/s2-portlet/1.0.7/s2-portlet-1.0.7-sources.jar"/>
+  <classpathentry kind="var" path="M2_REPO/xerces/xmlParserAPIs/2.6.2/xmlParserAPIs-2.6.2.jar"/>
+  <classpathentry kind="var" path="M2_REPO/junit/junit/4.4/junit-4.4.jar"/>
+  <classpathentry kind="var" path="M2_REPO/org/seasar/dao/s2-dao/1.0.48/s2-dao-1.0.48.jar"/>
+  <classpathentry kind="var" path="M2_REPO/commons-el/commons-el/1.0/commons-el-1.0.jar" sourcepath="M2_REPO/commons-el/commons-el/1.0/commons-el-1.0-sources.jar"/>
+</classpath>
\ No newline at end of file


Property changes on: announcement/trunk/.classpath
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/.project
===================================================================
--- announcement/trunk/.project	                        (rev 0)
+++ announcement/trunk/.project	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,15 @@
+<projectDescription>
+  <name>announcement</name>
+  <comment></comment>
+  <projects/>
+  <buildSpec>
+    <buildCommand>
+      <name>org.eclipse.jdt.core.javabuilder</name>
+      <arguments/>
+    </buildCommand>
+  </buildSpec>
+  <natures>
+    <nature>org.eclipse.jdt.core.javanature</nature>
+    <nature>org.seasar.dolteng.eclipse.nature</nature>
+  </natures>
+</projectDescription>
\ No newline at end of file


Property changes on: announcement/trunk/.project
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/.settings/org.eclipse.jdt.core.prefs
===================================================================
--- announcement/trunk/.settings/org.eclipse.jdt.core.prefs	                        (rev 0)
+++ announcement/trunk/.settings/org.eclipse.jdt.core.prefs	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,259 @@
+#Fri Aug 10 22:15:11 JST 2007
+org.eclipse.jdt.core.formatter.brace_position_for_enum_constant=end_of_line
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_method_invocation=do not insert
+org.eclipse.jdt.core.formatter.format_guardian_clause_on_one_line=false
+org.eclipse.jdt.core.formatter.comment.indent_root_tags=true
+org.eclipse.jdt.core.formatter.number_of_blank_lines_at_beginning_of_method_body=0
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_synchronized=insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_switch=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_for_inits=insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_method_invocation=do not insert
+org.eclipse.jdt.core.compiler.compliance=1.5
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_annotation_type_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_brace_in_array_initializer=insert
+org.eclipse.jdt.core.formatter.insert_new_line_before_catch_in_try_statement=do not 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_between_brackets_in_array_type_reference=do not insert
+org.eclipse.jdt.core.formatter.brace_position_for_switch=end_of_line
+org.eclipse.jdt.core.formatter.insert_space_after_closing_angle_bracket_in_type_parameters=insert
+org.eclipse.jdt.core.formatter.insert_space_before_postfix_operator=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_enum_constant=insert
+org.eclipse.jdt.core.formatter.insert_new_line_at_end_of_file_if_missing=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_catch=insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_method_declaration=do not insert
+org.eclipse.jdt.core.formatter.brace_position_for_enum_declaration=end_of_line
+org.eclipse.jdt.core.formatter.alignment_for_arguments_in_allocation_expression=16
+org.eclipse.jdt.core.formatter.continuation_indentation_for_array_initializer=2
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_constructor_declaration_throws=insert
+org.eclipse.jdt.core.formatter.blank_lines_before_method=1
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_anonymous_type_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_after_assignment_operator=insert
+org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_annotation_declaration_header=true
+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_brace_in_array_initializer=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_annotation_type_member_declaration=do not insert
+org.eclipse.jdt.core.formatter.comment.format_html=true
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_explicitconstructorcall_arguments=do not 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_paren_in_annotation=do not insert
+org.eclipse.jdt.core.formatter.number_of_empty_lines_to_preserve=1
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_enum_declarations=insert
+org.eclipse.jdt.core.formatter.comment.insert_new_line_before_root_tags=insert
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.5
+org.eclipse.jdt.core.formatter.insert_new_line_before_while_in_do_statement=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_after_opening_paren_in_enum_constant=do not insert
+org.eclipse.jdt.core.formatter.alignment_for_selector_in_method_invocation=16
+org.eclipse.jdt.core.formatter.insert_space_after_at_in_annotation_type_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_question_in_conditional=insert
+org.eclipse.jdt.core.formatter.alignment_for_enum_constants=0
+org.eclipse.jdt.core.formatter.tabulation.size=4
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_type_declaration=insert
+org.eclipse.jdt.core.formatter.insert_new_line_in_empty_enum_constant=insert
+org.eclipse.jdt.core.formatter.never_indent_line_comments_on_first_column=false
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_catch=do not insert
+org.eclipse.jdt.core.formatter.comment.insert_new_line_for_parameter=insert
+org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_method_invocation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_parenthesized_expression_in_throw=insert
+org.eclipse.jdt.core.formatter.indent_statements_compare_to_body=true
+org.eclipse.jdt.core.formatter.insert_space_before_colon_in_conditional=insert
+org.eclipse.jdt.core.formatter.comment.indent_parameter_description=true
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_method_declaration=insert
+org.eclipse.jdt.core.formatter.keep_then_statement_on_same_line=false
+org.eclipse.jdt.core.formatter.tabulation.char=space
+org.eclipse.jdt.core.formatter.insert_space_between_empty_brackets_in_array_allocation_expression=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_synchronized=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_array_initializer=insert
+org.eclipse.jdt.core.formatter.insert_space_after_colon_in_labeled_statement=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_closing_angle_bracket_in_type_arguments=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_bracket_in_array_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_for_increments=insert
+org.eclipse.jdt.core.formatter.alignment_for_parameters_in_method_declaration=16
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_switch=do not insert
+org.eclipse.jdt.core.formatter.use_tabs_only_for_leading_indentations=false
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_enum_constant_arguments=do not insert
+org.eclipse.jdt.core.formatter.alignment_for_superinterfaces_in_type_declaration=16
+org.eclipse.jdt.core.formatter.blank_lines_between_import_groups=1
+org.eclipse.jdt.core.formatter.insert_space_before_at_in_annotation_type_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_before_unary_operator=do not insert
+org.eclipse.jdt.core.formatter.brace_position_for_block_in_case=end_of_line
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_constructor_declaration_parameters=insert
+org.eclipse.jdt.core.formatter.brace_position_for_block=end_of_line
+org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_reference=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_and_in_type_parameter=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_assignment_operator=insert
+org.eclipse.jdt.core.formatter.insert_space_after_ellipsis=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_comma_in_superinterfaces=insert
+org.eclipse.jdt.core.formatter.insert_space_before_colon_in_default=do not insert
+org.eclipse.jdt.core.formatter.blank_lines_before_imports=1
+org.eclipse.jdt.core.formatter.insert_space_after_colon_in_conditional=insert
+org.eclipse.jdt.core.formatter.insert_space_before_semicolon_in_for=do not insert
+org.eclipse.jdt.core.formatter.indent_switchstatements_compare_to_cases=true
+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_comma_in_allocation_expression=insert
+org.eclipse.jdt.core.formatter.alignment_for_compact_if=16
+org.eclipse.jdt.core.formatter.insert_space_after_and_in_type_parameter=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_if=insert
+org.eclipse.jdt.core.formatter.insert_space_between_empty_braces_in_array_initializer=do not insert
+org.eclipse.jdt.core.formatter.blank_lines_before_member_type=1
+org.eclipse.jdt.core.formatter.insert_space_before_question_in_wildcard=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_colon_in_for=insert
+org.eclipse.jdt.core.formatter.insert_space_after_postfix_operator=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_invocation_arguments=insert
+org.eclipse.jdt.core.formatter.never_indent_block_comments_on_first_column=false
+org.eclipse.jdt.core.formatter.insert_space_before_ellipsis=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_multiple_local_declarations=do not insert
+org.eclipse.jdt.core.formatter.brace_position_for_array_initializer=end_of_line
+org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_enum_constant_header=true
+org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_type_header=true
+org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_type_parameters=do not insert
+org.eclipse.jdt.core.formatter.blank_lines_before_field=1
+org.eclipse.jdt.core.formatter.insert_new_line_in_empty_type_declaration=insert
+org.eclipse.jdt.core.formatter.indent_statements_compare_to_block=true
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_declaration_parameters=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_colon_in_case=insert
+org.eclipse.jdt.core.formatter.keep_empty_array_initializer_on_one_line=false
+org.eclipse.jdt.core.formatter.insert_space_before_binary_operator=insert
+org.eclipse.jdt.core.formatter.comment.format_block_comments=false
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_annotation=insert
+org.eclipse.jdt.core.formatter.insert_space_after_closing_brace_in_block=insert
+org.eclipse.jdt.core.formatter.comment.clear_blank_lines_in_block_comment=false
+org.eclipse.jdt.core.formatter.put_empty_statement_on_new_line=true
+org.eclipse.jdt.core.formatter.brace_position_for_method_declaration=end_of_line
+org.eclipse.jdt.core.formatter.insert_space_before_prefix_operator=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_superinterfaces=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_enum_constant_arguments=insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_parenthesized_expression=do not insert
+org.eclipse.jdt.core.formatter.comment.clear_blank_lines_in_javadoc_comment=false
+org.eclipse.jdt.core.formatter.blank_lines_before_first_class_body_declaration=0
+org.eclipse.jdt.core.formatter.lineSplit=80
+org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_enum_constant=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_question_in_conditional=insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_if=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_question_in_wildcard=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_explicitconstructorcall_arguments=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_enum_constant=do not insert
+org.eclipse.jdt.core.formatter.blank_lines_after_imports=1
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_synchronized=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_block=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_after_annotation=insert
+org.eclipse.jdt.core.formatter.alignment_for_throws_clause_in_method_declaration=16
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_cast=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_closing_paren_in_method_invocation=do not insert
+org.eclipse.jdt.core.formatter.alignment_for_arguments_in_explicit_constructor_call=16
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_enum_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_brace_in_array_initializer=insert
+org.eclipse.jdt.core.formatter.alignment_for_arguments_in_qualified_allocation_expression=16
+org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_constructor_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_semicolon_in_for=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_allocation_expression=do not insert
+org.eclipse.jdt.core.formatter.blank_lines_before_package=0
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_type_arguments=insert
+org.eclipse.jdt.core.formatter.wrap_before_binary_operator=true
+org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_type_parameters=do not insert
+org.eclipse.jdt.core.formatter.brace_position_for_type_declaration=end_of_line
+org.eclipse.jdt.core.formatter.insert_space_after_closing_paren_in_cast=insert
+org.eclipse.jdt.core.formatter.brace_position_for_anonymous_type_declaration=end_of_line
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_while=do not insert
+org.eclipse.jdt.core.formatter.insert_new_line_in_empty_method_body=insert
+org.eclipse.jdt.core.formatter.keep_else_statement_on_same_line=false
+org.eclipse.jdt.core.formatter.align_type_members_on_columns=false
+org.eclipse.jdt.core.formatter.insert_space_after_opening_bracket_in_array_allocation_expression=do not insert
+org.eclipse.jdt.core.formatter.blank_lines_between_type_declarations=1
+org.eclipse.jdt.core.formatter.insert_new_line_after_opening_brace_in_array_initializer=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_binary_operator=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_new_line_before_closing_brace_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_opening_angle_bracket_in_parameterized_type_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_prefix_operator=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_annotation=do not insert
+org.eclipse.jdt.core.formatter.brace_position_for_constructor_declaration=end_of_line
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_parameterized_type_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_parenthesized_expression=do not insert
+org.eclipse.jdt.core.formatter.indent_switchstatements_compare_to_switch=false
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_cast=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_for=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_type_reference=do not insert
+org.eclipse.jdt.core.formatter.comment.format_header=false
+org.eclipse.jdt.core.formatter.insert_new_line_in_empty_block=insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_parameterized_type_reference=do not insert
+eclipse.preferences.version=1
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_invocation_arguments=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_comma_in_allocation_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_colon_in_assert=insert
+org.eclipse.jdt.core.formatter.alignment_for_superclass_in_type_declaration=16
+org.eclipse.jdt.core.formatter.insert_new_line_in_empty_anonymous_type_declaration=insert
+org.eclipse.jdt.core.formatter.alignment_for_superinterfaces_in_enum_declaration=16
+org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_method_declaration=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_after_at_in_annotation=do not insert
+org.eclipse.jdt.core.formatter.alignment_for_conditional_expression=80
+org.eclipse.jdt.core.formatter.blank_lines_before_new_chunk=1
+org.eclipse.jdt.core.formatter.brace_position_for_annotation_type_declaration=end_of_line
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_annotation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_bracket_in_array_reference=do not insert
+org.eclipse.jdt.core.formatter.alignment_for_multiple_fields=16
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_for_inits=do not insert
+org.eclipse.jdt.core.formatter.alignment_for_arguments_in_method_invocation=16
+org.eclipse.jdt.core.formatter.alignment_for_expressions_in_array_initializer=16
+org.eclipse.jdt.core.formatter.insert_space_after_closing_angle_bracket_in_type_arguments=insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_constructor_declaration=do not insert
+org.eclipse.jdt.core.formatter.keep_imple_if_on_one_line=false
+org.eclipse.jdt.core.formatter.insert_space_before_parenthesized_expression_in_return=insert
+org.eclipse.jdt.core.formatter.comment.format_javadoc_comments=false
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_while=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_parameterized_type_reference=insert
+org.eclipse.jdt.core.formatter.alignment_for_arguments_in_enum_constant=16
+org.eclipse.jdt.core.formatter.indentation.size=4
+org.eclipse.jdt.core.formatter.alignment_for_assignment=0
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_declaration_parameters=insert
+org.eclipse.jdt.core.formatter.blank_lines_after_package=1
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_declaration_throws=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_labeled_statement=do not 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_type_parameters=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_switch=insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_enum_constant=do not insert
+org.eclipse.jdt.core.formatter.insert_new_line_in_empty_annotation_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_catch=do not insert
+org.eclipse.jdt.core.formatter.indent_empty_lines=false
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_parenthesized_expression=do not insert
+org.eclipse.jdt.core.formatter.comment.format_line_comments=false
+org.eclipse.jdt.core.formatter.insert_space_before_semicolon=do not insert
+org.eclipse.jdt.core.formatter.alignment_for_parameters_in_constructor_declaration=16
+org.eclipse.jdt.core.formatter.alignment_for_binary_expression=16
+org.eclipse.jdt.core.formatter.insert_new_line_in_empty_enum_declaration=insert
+org.eclipse.jdt.core.formatter.alignment_for_throws_clause_in_constructor_declaration=16
+org.eclipse.jdt.core.formatter.insert_new_line_before_finally_in_try_statement=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_constructor_declaration=insert
+org.eclipse.jdt.core.formatter.indent_breaks_compare_to_cases=true
+org.eclipse.jdt.core.formatter.compact_else_if=true
+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_while=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_for_increments=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_before_closing_paren_in_constructor_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_switch=insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_array_initializer=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_colon_in_for=insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_annotation=do not insert
+org.eclipse.jdt.core.compiler.source=1.5
+org.eclipse.jdt.core.formatter.comment.format_source_code=true
+org.eclipse.jdt.core.formatter.comment.line_length=80
+org.eclipse.jdt.core.formatter.insert_space_after_unary_operator=do not insert
+org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_enum_declaration_header=true
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_multiple_local_declarations=insert
+org.eclipse.jdt.core.formatter.continuation_indentation=2
+org.eclipse.jdt.core.formatter.insert_space_after_colon_in_assert=insert

Added: announcement/trunk/.settings/org.eclipse.jdt.ui.prefs
===================================================================
--- announcement/trunk/.settings/org.eclipse.jdt.ui.prefs	                        (rev 0)
+++ announcement/trunk/.settings/org.eclipse.jdt.ui.prefs	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,5 @@
+#Fri Aug 03 14:46:18 JST 2007
+eclipse.preferences.version=1
+formatter_profile=_Seasar
+formatter_settings_version=11
+org.eclipse.jdt.ui.text.custom_code_templates=<?xml version\="1.0" encoding\="UTF-8"?><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 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">/*\n * Copyright 2005-2007 Portal Application Laboratory Project and the Others.\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, \n * either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */</template><template autoinsert\="true" context\="typecomment_context" deleted\="false" description\="Comment for created types" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.typecomment" name\="typecomment">/**\n * @author ${user}\n *\n * ${tags}\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">/**\n * \n */</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">/* (non-Javadoc)\n * ${see_to_overridden}\n */</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><template autoinsert\="true" context\="newtype_context" deleted\="false" description\="Newly created files" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.newtype" name\="newtype">${filecomment}\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></templates>

Added: announcement/trunk/.settings/org.seasar.dolteng.eclipse.prefs
===================================================================
--- announcement/trunk/.settings/org.seasar.dolteng.eclipse.prefs	                        (rev 0)
+++ announcement/trunk/.settings/org.seasar.dolteng.eclipse.prefs	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,12 @@
+#Mon May 26 09:54:10 JST 2008
+DaoType=S2Dao
+DefaultDaoPackage=jp.sf.pal.announcement.dao
+DefaultDtoPackage=jp.sf.pal.announcement.dto
+DefaultEntityPackage=jp.sf.pal.announcement.entity
+DefaultResourcePath=/announcement/src/main/resources
+DefaultRootPackage=jp.sf.pal.announcement
+DefaultSrcPath=/announcement/src/main/java
+DefaultWebPackage=jp.sf.pal.announcement.web
+ServletPath=/announcement
+WebContentsRoot=src/main/webapp/
+eclipse.preferences.version=1

Added: announcement/trunk/dbflute/_project.bat
===================================================================
--- announcement/trunk/dbflute/_project.bat	                        (rev 0)
+++ announcement/trunk/dbflute/_project.bat	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,5 @@
+ @ echo off
+
+set MY_PROJECT_NAME=announcement
+
+set DBFLUTE_HOME=..\mydbflute\dbflute-0.7.0


Property changes on: announcement/trunk/dbflute/_project.bat
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/dbflute/_project.sh
===================================================================
--- announcement/trunk/dbflute/_project.sh	                        (rev 0)
+++ announcement/trunk/dbflute/_project.sh	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,5 @@
+#!/bin/sh
+
+export MY_PROJECT_NAME=announcement
+
+export DBFLUTE_HOME=../mydbflute/dbflute-0.7.0


Property changes on: announcement/trunk/dbflute/_project.sh
___________________________________________________________________
Name: svn:executable
   + *
Name: svn:eol-style
   + native

Added: announcement/trunk/dbflute/build-announcement.properties
===================================================================
--- announcement/trunk/dbflute/build-announcement.properties	                        (rev 0)
+++ announcement/trunk/dbflute/build-announcement.properties	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,162 @@
+# =======================================================================================
+#                                                                                 for All
+#                                                                                 =======
+
+# -------------------------------------------------------------------
+#  P R O J E C T
+# -------------------------------------------------------------------
+# @FirstProperty
+# @Required
+torque.project = announcement
+
+# -------------------------------------------------------------------
+#  T A R G E T  D A T A B A S E
+# -------------------------------------------------------------------
+# This is the target database, only considered when generating
+# the SQL for your Torque project. Your possible choices are:
+#
+#   axion, cloudscape, db2, db2400, hypersonic, interbase, mssql,
+#   mysql, oracle, postgresql, sapdb, sybase, firebird, derby, h2
+# -------------------------------------------------------------------
+# @FirstProperty
+# @Required
+torque.database = mysql
+
+# -------------------------------------------------------------------
+#  T A R G E T  L A N G U A G E
+# -------------------------------------------------------------------
+# (Default 'java')
+#   The target language. Your possible choices are:
+#     java, csharp
+# -------------------------------------------------------------------
+# @FirstProperty
+#torque.targetLanguage = java
+
+
+
+# =======================================================================================
+#                                                                             for OM task
+#                                                                             ===========
+
+# _/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
+#                                                            Basic
+#                                                         _/_/_/_/
+# /---------------------------------------------------------------------------
+# [Output Directory]
+#   java.dir: (Default '../src/main/java')
+#     The base output directory.
+#
+#     If this value is '../src/main/java' and your project stype is under maven,
+#     you don't need to set up this property!
+#
+#     {project}
+#         |
+#         |-dbflute_ldb
+#         |       |-build-ldb.properties
+#         |       |-...
+#         |
+#         |-src/main/java         // *Here!
+#         |-src/main/resources
+#         |-...
+#
+#
+# @FirstProperty
+#torque.java.dir = ../src/main/java
+# ----------------/
+
+# _/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
+#                                                          Package
+#                                                             _/_/
+# /---------------------------------------------------------------------------
+# [EntityDao Package]
+#    packageBase: (Default '')
+#      The base directory of package.
+#
+#      *If this property is specified and other package properties is not specified,
+#       Then The packages of generated class are as follows:
+#
+#        ex) packageBase = org.seasar.dbflute.example.dbflute.ldb
+#              baseCommonPackage       --> org.seasar.dbflute.example.dbflute.ldb.allcommon
+#              baseBehaviorPackage     --> org.seasar.dbflute.example.dbflute.ldb.bsbhv
+#              baseDaoPackage          --> org.seasar.dbflute.example.dbflute.ldb.bsdao
+#              baseEntityPackage       --> org.seasar.dbflute.example.dbflute.ldb.bsentity
+#              conditionBeanPackage    --> org.seasar.dbflute.example.dbflute.ldb.cbean
+#              extendedBehaviorPackage --> org.seasar.dbflute.example.dbflute.ldb.exbhv
+#              extendedDaoPackage      --> org.seasar.dbflute.example.dbflute.ldb.exdao
+#              extendedEntityPackage   --> org.seasar.dbflute.example.dbflute.ldb.exentity
+#
+#      *If this property is not specified, you should specify the other package properties.
+#
+#
+#    baseCommonPackage:       (Default Java:'allcommon' C#:'allcommon')
+#    baseBehaviorPackage:     (Default Java:'bsbhv'     C#:'bsbhv')
+#    baseDaoPackage:          (Default Java:'bsdao'     C#:'bsdao')
+#    baseEntityPackage:       (Default Java:'bsentity'  C#:'bsentity')
+#    conditionBeanPackage:    (Default Java:'cbean'     C#:'cbean')
+#    extendedBehaviorPackage: (Default Java:'exbhv'     C#:'exbhv')
+#    extendedDaoPackage:      (Default Java:'exdao'     C#:'exdao')
+#    extendedEntityPackage:   (Default Java:'exentity'  C#:'exentity')
+#
+# @FirstProperty
+torque.packageBase				= jp.sf.pal.announcement.db
+# ----------------/
+
+# _/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
+#                                                 S2Dao Adjustment
+#                                                     _/_/_/_/_/_/
+# /---------------------------------------------------------------------------
+# [S2Dao Version]
+#   s2daoVersion: (Default [The latest version])
+#
+# @JavaOnly
+torque.s2daoVersion = 1.0.47
+# ----------------/
+
+
+
+# =======================================================================================
+#                                                                           for JDBC task
+#                                                                           =============
+
+# - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+# [Database Informaition]
+#
+#   * * * * * * * * * * * * * * * * * * * * * * * * *
+#   You shuold use './dfprop/databaseInfoMap.dfprop'
+#   Look the file!
+#   * * * * * * * * * * * * * * * * * * * * * * * * *
+# - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+
+# _/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
+#                                                         Adavance
+#                                                             _/_/
+
+# /---------------------------------------------------------------------------
+# [Sequence]
+#   sequenceDefinitionMap: (Default 'map:{}')
+#     The method 'XxxDao#selectNextVal()' is generated for its table primary key.
+#
+#       ex) public String selectNextVal_SQL = "select gen_id(BOOK_BOOK_ID_INC, 1) from RDB$DATABASE";
+#           public java.math.BigDecimal selectNextVal();
+#           // This example is for the database of Firebird
+#
+#   sequenceReturnType: (Default 'java.math.BigDecimal')
+#     The return type of The method 'XxxDao#selectNextVal()'.
+#
+
+#
+# *Apache Derby does not support Sequence-Object.
+#  But I want to test this property.
+#
+#torque.sequenceDefinitionMap	= map:{	\
+#		prodcts	= PRODUCTS_PRODUCTS_ID_INC	\
+#	}
+
+#torque.sequenceReturnType		=	java.lang.Integer
+# [Additional ForeignKey]
+torque.additionalForeignKeyMap = map:{ \
+ FK_ANNOUNCEMENT_BODY = map:{ localTableName = ANNOUNCEMENT_BODY; localColumnName = ID; foreignTableName = ANNOUNCEMENT; foreignColumnName = ID } \
+}
+
+
+


Property changes on: announcement/trunk/dbflute/build-announcement.properties
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/dbflute/dfprop/databaseInfoMap.dfprop
===================================================================
--- announcement/trunk/dbflute/dfprop/databaseInfoMap.dfprop	                        (rev 0)
+++ announcement/trunk/dbflute/dfprop/databaseInfoMap.dfprop	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,18 @@
+# /---------------------------------------------------------------------------
+# [Database Information]
+#   databaseInfoMap: 
+#     driver   -- The class name of JDBC-Driver.
+#     url      -- The url for connecting database.
+#     schema   -- The schema name.
+#     user     -- The database user name.
+#     password -- The database password.
+#
+# @FirstProperty
+map:{
+	; driver		= com.mysql.jdbc.Driver
+	; url			= jdbc:mysql://localhost/announcement?useUnicode=true&amp;characterEncoding=UTF-8
+	; schema		= announcement
+	; user			= amuser
+	; password		= am123
+}
+# ----------------/

Added: announcement/trunk/dbflute/doc.bat
===================================================================
--- announcement/trunk/dbflute/doc.bat	                        (rev 0)
+++ announcement/trunk/dbflute/doc.bat	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,19 @@
+ @ echo off
+
+%~d0
+cd %~p0
+call _project.bat
+
+rem /nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn
+rem Specify the file path to be used as build-properties.
+rem nnnnnnnnnn/
+set MY_PROPERTIES_PATH=build-%MY_PROJECT_NAME%.properties
+
+rem /nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn
+rem Execute {Document}.
+rem nnnnnnnnnn/
+call %DBFLUTE_HOME%\etc\cmd\_df-doc.cmd %MY_PROPERTIES_PATH%
+
+pause
+
+


Property changes on: announcement/trunk/dbflute/doc.bat
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/dbflute/doc.sh
===================================================================
--- announcement/trunk/dbflute/doc.sh	                        (rev 0)
+++ announcement/trunk/dbflute/doc.sh	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,14 @@
+#!/bin/sh
+
+. _project.sh
+
+echo "/nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn"
+echo "Specify the file path to be used as build-properties."
+echo "nnnnnnnnnn/"
+export MY_PROPERTIES_PATH=build-${MY_PROJECT_NAME}.properties
+
+echo "/nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn"
+echo "Execute {Document}."
+echo "nnnnnnnnnn/"
+sh $DBFLUTE_HOME/etc/cmd/_df-doc.sh $MY_PROPERTIES_PATH
+


Property changes on: announcement/trunk/dbflute/doc.sh
___________________________________________________________________
Name: svn:executable
   + *
Name: svn:eol-style
   + native

Added: announcement/trunk/dbflute/generate.bat
===================================================================
--- announcement/trunk/dbflute/generate.bat	                        (rev 0)
+++ announcement/trunk/dbflute/generate.bat	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,19 @@
+ @ echo off
+
+%~d0
+cd %~p0
+call _project.bat
+
+rem /nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn
+rem Specify the file path to be used as build-properties.
+rem nnnnnnnnnn/
+set MY_PROPERTIES_PATH=build-%MY_PROJECT_NAME%.properties
+
+rem /nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn
+rem Execute {Generate}.
+rem nnnnnnnnnn/
+call %DBFLUTE_HOME%\etc\cmd\_df-generate.cmd %MY_PROPERTIES_PATH%
+
+pause
+
+


Property changes on: announcement/trunk/dbflute/generate.bat
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/dbflute/generate.sh
===================================================================
--- announcement/trunk/dbflute/generate.sh	                        (rev 0)
+++ announcement/trunk/dbflute/generate.sh	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,16 @@
+#!/bin/sh
+
+. _project.sh
+
+echo "/nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn"
+echo "Specify the file path to be used as build-properties."
+echo "nnnnnnnnnn/"
+export MY_PROPERTIES_PATH=build-${MY_PROJECT_NAME}.properties
+
+echo "/nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn"
+echo "Execute {Generate}."
+echo "nnnnnnnnnn/"
+sh $DBFLUTE_HOME/etc/cmd/_df-generate.sh $MY_PROPERTIES_PATH
+
+
+


Property changes on: announcement/trunk/dbflute/generate.sh
___________________________________________________________________
Name: svn:executable
   + *
Name: svn:eol-style
   + native

Added: announcement/trunk/dbflute/jdbc.bat
===================================================================
--- announcement/trunk/dbflute/jdbc.bat	                        (rev 0)
+++ announcement/trunk/dbflute/jdbc.bat	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,19 @@
+ @ echo off
+
+%~d0
+cd %~p0
+call _project.bat
+
+rem /nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn
+rem Specify the file path to be used as build-properties.
+rem nnnnnnnnnn/
+set MY_PROPERTIES_PATH=build-%MY_PROJECT_NAME%.properties
+
+rem /nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn
+rem Execute {JDBC and Document}.
+rem nnnnnnnnnn/
+call %DBFLUTE_HOME%\etc\cmd\_df-jdbc.cmd %MY_PROPERTIES_PATH%
+
+pause
+
+


Property changes on: announcement/trunk/dbflute/jdbc.bat
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/dbflute/jdbc.sh
===================================================================
--- announcement/trunk/dbflute/jdbc.sh	                        (rev 0)
+++ announcement/trunk/dbflute/jdbc.sh	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,15 @@
+#!/bin/sh
+
+. _project.sh
+
+echo "/nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn"
+echo "Specify the file path to be used as build-properties."
+echo "nnnnnnnnnn/"
+export MY_PROPERTIES_PATH="build-${MY_PROJECT_NAME}.properties"
+
+echo "/nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn"
+echo "Execute {JDBC and Document}."
+echo "nnnnnnnnnn/"
+sh ${DBFLUTE_HOME}/etc/cmd/_df-jdbc.sh ${MY_PROPERTIES_PATH}
+
+


Property changes on: announcement/trunk/dbflute/jdbc.sh
___________________________________________________________________
Name: svn:executable
   + *
Name: svn:eol-style
   + native

Added: announcement/trunk/dbflute/log/readme.txt
===================================================================
--- announcement/trunk/dbflute/log/readme.txt	                        (rev 0)
+++ announcement/trunk/dbflute/log/readme.txt	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1 @@
+Directory for LogFile


Property changes on: announcement/trunk/dbflute/log/readme.txt
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/dbflute/output/doc/readme.txt
===================================================================
--- announcement/trunk/dbflute/output/doc/readme.txt	                        (rev 0)
+++ announcement/trunk/dbflute/output/doc/readme.txt	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1 @@
+Directory for Document


Property changes on: announcement/trunk/dbflute/output/doc/readme.txt
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/dbflute/outside-sql-test.bat
===================================================================
--- announcement/trunk/dbflute/outside-sql-test.bat	                        (rev 0)
+++ announcement/trunk/dbflute/outside-sql-test.bat	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,19 @@
+ @ echo off
+
+%~d0
+cd %~p0
+call _project.bat
+
+rem /nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn
+rem Specify the file path to be used as build-properties.
+rem nnnnnnnnnn/
+set MY_PROPERTIES_PATH=build-%MY_PROJECT_NAME%.properties
+
+rem /nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn
+rem Execute {Outsite-Sql-Test}.
+rem nnnnnnnnnn/
+call %DBFLUTE_HOME%\etc\cmd\_df-outside-sql-test.cmd %MY_PROPERTIES_PATH%
+
+pause
+
+


Property changes on: announcement/trunk/dbflute/outside-sql-test.bat
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/dbflute/outside-sql-test.sh
===================================================================
--- announcement/trunk/dbflute/outside-sql-test.sh	                        (rev 0)
+++ announcement/trunk/dbflute/outside-sql-test.sh	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,15 @@
+#!/bin/sh
+
+. _project.sh
+
+echo "/nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn"
+echo "Specify the file path to be used as build-properties."
+echo "nnnnnnnnnn/"
+export MY_PROPERTIES_PATH=build-${MY_PROJECT_NAME}.properties
+
+echo "/nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn"
+echo "Execute {Outsite-Sql-Test}."
+echo "nnnnnnnnnn/"
+sh $DBFLUTE_HOME/etc/cmd/_df-outside-sql-test.sh $MY_PROPERTIES_PATH
+
+


Property changes on: announcement/trunk/dbflute/outside-sql-test.sh
___________________________________________________________________
Name: svn:executable
   + *
Name: svn:eol-style
   + native

Added: announcement/trunk/dbflute/playsql/replace-schema.sql
===================================================================
--- announcement/trunk/dbflute/playsql/replace-schema.sql	                        (rev 0)
+++ announcement/trunk/dbflute/playsql/replace-schema.sql	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,418 @@
+ALTER TABLE BLACK_ACTION DROP CONSTRAINT FK_BLACK_ACTION_BLACK_LIST
+;
+
+ALTER TABLE BLACK_ACTION DROP CONSTRAINT FK_BLACK_ACTION_LOOKUP
+;
+
+ALTER TABLE BLACK_LIST DROP CONSTRAINT FK_BLACK_LIST_LB_USER
+;
+
+ALTER TABLE BOOK DROP CONSTRAINT FK_BOOK_AUTHOR
+;
+
+ALTER TABLE BOOK DROP CONSTRAINT FK_BOOK_PUBLISHER
+;
+
+ALTER TABLE BOOK DROP CONSTRAINT FK_BOOK_GENRE
+;
+
+ALTER TABLE COLLECTION DROP CONSTRAINT FK_COLLECTION_BOOK
+;
+
+ALTER TABLE COLLECTION DROP CONSTRAINT FK_COLLECTION_LIBRARY
+;
+
+ALTER TABLE COLLECTION_STATUS DROP CONSTRAINT FK_COLLECTION_STATUS_COLLECTION
+;
+
+ALTER TABLE COLLECTION_STATUS DROP CONSTRAINT FK_COLLECTION_STATUS_LOOKUP
+;
+
+ALTER TABLE GENRE DROP CONSTRAINT FK_GENRE_GENRE
+;
+
+ALTER TABLE LB_USER DROP CONSTRAINT FK_LB_USER_LIBRARY
+;
+
+ALTER TABLE LENDING DROP CONSTRAINT FK_LENDING_LIBRARY
+;
+
+ALTER TABLE LENDING DROP CONSTRAINT FK_LENDING_LB_USER
+;
+
+ALTER TABLE LENDING_COLLECTION DROP CONSTRAINT FK_LENDING_COLLECTION_LENDING
+;
+
+ALTER TABLE LENDING_COLLECTION DROP CONSTRAINT FK_LENDING_COLLECTION_COL
+;
+
+ALTER TABLE NEXT_LIBRARY DROP CONSTRAINT FK_NEXT_LIBRARY_LIBRARY_ID
+;
+
+ALTER TABLE NEXT_LIBRARY DROP CONSTRAINT FK_NEXT_LIBRARY_NEXT_LIBRARY_ID
+;
+
+
+DROP TABLE AUTHOR
+;
+DROP TABLE BLACK_ACTION
+;
+DROP TABLE BLACK_ACTION_LOOKUP
+;
+DROP TABLE BLACK_LIST
+;
+DROP TABLE BOOK
+;
+DROP TABLE COLLECTION
+;
+DROP TABLE COLLECTION_STATUS
+;
+DROP TABLE COLLECTION_STATUS_LOOKUP
+;
+DROP TABLE GARBAGE
+;
+DROP TABLE GENRE
+;
+DROP TABLE LB_USER
+;
+DROP TABLE LENDING
+;
+DROP TABLE LENDING_COLLECTION
+;
+DROP TABLE LIBRARY
+;
+DROP TABLE NEXT_LIBRARY
+;
+DROP TABLE PUBLISHER
+;
+
+CREATE TABLE AUTHOR ( 
+	AUTHOR_ID integer NOT NULL GENERATED BY DEFAULT AS IDENTITY (START WITH 1, INCREMENT BY 1),
+	AUTHOR_NAME varchar(80) NOT NULL,
+	R_TIME timestamp DEFAULT CURRENT_TIMESTAMP NOT NULL,
+	U_TIME timestamp DEFAULT CURRENT_TIMESTAMP NOT NULL,
+	R_STAFF varchar(50) DEFAULT 'DefaultStaff' NOT NULL,
+	U_STAFF varchar(50) DEFAULT 'DefaultStaff' NOT NULL
+)
+;
+
+CREATE TABLE BLACK_ACTION ( 
+	BLACK_ACTION_ID integer NOT NULL GENERATED BY DEFAULT AS IDENTITY (START WITH 1, INCREMENT BY 1),
+	BLACK_LIST_ID integer NOT NULL,
+	BLACK_ACTION_CODE char(3) NOT NULL,
+	BLACK_LEVEL smallint NOT NULL,
+	EVIDENCE_PHOTOGRAPH blob,
+	R_TIME timestamp DEFAULT CURRENT_TIMESTAMP NOT NULL,
+	U_TIME timestamp DEFAULT CURRENT_TIMESTAMP NOT NULL,
+	R_STAFF varchar(50) DEFAULT 'DefaultStaff' NOT NULL,
+	U_STAFF varchar(50) DEFAULT 'DefaultStaff' NOT NULL
+)
+;
+
+CREATE TABLE BLACK_ACTION_LOOKUP ( 
+	BLACK_ACTION_CODE char(3) NOT NULL,
+	BLACK_ACTION_NAME varchar(80) NOT NULL,
+	R_TIME timestamp DEFAULT CURRENT_TIMESTAMP NOT NULL,
+	U_TIME timestamp DEFAULT CURRENT_TIMESTAMP NOT NULL,
+	R_STAFF varchar(50) DEFAULT 'DefaultStaff' NOT NULL,
+	U_STAFF varchar(50) DEFAULT 'DefaultStaff' NOT NULL
+)
+;
+
+CREATE TABLE BLACK_LIST ( 
+	BLACK_LIST_ID integer NOT NULL GENERATED BY DEFAULT AS IDENTITY (START WITH 1, INCREMENT BY 1),
+	LB_USER_ID integer NOT NULL,
+	BLACK_RANK char(3) NOT NULL,
+	R_TIME timestamp DEFAULT CURRENT_TIMESTAMP NOT NULL,
+	U_TIME timestamp DEFAULT CURRENT_TIMESTAMP NOT NULL,
+	R_STAFF varchar(50) DEFAULT 'DefaultStaff' NOT NULL,
+	U_STAFF varchar(50) DEFAULT 'DefaultStaff' NOT NULL
+)
+;
+
+CREATE TABLE BOOK ( 
+	BOOK_ID integer NOT NULL GENERATED BY DEFAULT AS IDENTITY (START WITH 1, INCREMENT BY 1),
+	ISBN_NO varchar(20) NOT NULL,
+	BOOK_NAME varchar(80) NOT NULL,
+	AUTHOR_ID integer NOT NULL,
+	PUBLISHER_ID integer NOT NULL,
+	MAX_LENDING_DATE_COUNT smallint NOT NULL,
+	GENRE_CODE varchar(12),
+	OPENING_PART clob,
+	R_TIME timestamp DEFAULT CURRENT_TIMESTAMP NOT NULL,
+	U_TIME timestamp DEFAULT CURRENT_TIMESTAMP NOT NULL,
+	R_STAFF varchar(50) DEFAULT 'DefaultStaff' NOT NULL,
+	U_STAFF varchar(50) DEFAULT 'DefaultStaff' NOT NULL
+)
+;
+
+CREATE TABLE COLLECTION ( 
+	COLLECTION_ID integer NOT NULL,
+	LIBRARY_ID smallint NOT NULL,
+	BOOK_ID integer NOT NULL,
+	ARRIVAL_DATE timestamp NOT NULL,
+	R_TIME timestamp DEFAULT CURRENT_TIMESTAMP NOT NULL,
+	U_TIME timestamp DEFAULT CURRENT_TIMESTAMP NOT NULL,
+	R_STAFF varchar(50) DEFAULT 'DefaultStaff' NOT NULL,
+	U_STAFF varchar(50) DEFAULT 'DefaultStaff' NOT NULL
+)
+;
+
+CREATE TABLE COLLECTION_STATUS ( 
+	COLLECTION_ID integer NOT NULL,
+	COLLECTION_STATUS_CODE char(3) NOT NULL,
+	R_TIME timestamp DEFAULT CURRENT_TIMESTAMP NOT NULL,
+	U_TIME timestamp DEFAULT CURRENT_TIMESTAMP NOT NULL,
+	R_STAFF varchar(50) DEFAULT 'DefaultStaff' NOT NULL,
+	U_STAFF varchar(50) DEFAULT 'DefaultStaff' NOT NULL
+)
+;
+
+CREATE TABLE COLLECTION_STATUS_LOOKUP ( 
+	COLLECTION_STATUS_CODE char(3) NOT NULL,
+	COLLECTION_STATUS_NAME varchar(80) NOT NULL,
+	R_TIME timestamp DEFAULT CURRENT_TIMESTAMP NOT NULL,
+	U_TIME timestamp DEFAULT CURRENT_TIMESTAMP NOT NULL,
+	R_STAFF varchar(50) DEFAULT 'DefaultStaff' NOT NULL,
+	U_STAFF varchar(50) DEFAULT 'DefaultStaff' NOT NULL
+)
+;
+
+CREATE TABLE GARBAGE ( 
+	GARBAGE_MEMO varchar(50),
+	GARBAGE_TIME timestamp
+)
+;
+
+CREATE TABLE GENRE ( 
+	GENRE_CODE varchar(12) NOT NULL,
+	GENRE_NAME varchar(80) NOT NULL,
+	PARENT_GENRE_CODE varchar(12),
+	R_TIME timestamp DEFAULT CURRENT_TIMESTAMP NOT NULL,
+	U_TIME timestamp DEFAULT CURRENT_TIMESTAMP NOT NULL,
+	R_STAFF varchar(50) DEFAULT 'DefaultStaff' NOT NULL,
+	U_STAFF varchar(50) DEFAULT 'DefaultStaff' NOT NULL
+)
+;
+
+CREATE TABLE LB_USER ( 
+	LB_USER_ID integer NOT NULL GENERATED BY DEFAULT AS IDENTITY (START WITH 1, INCREMENT BY 1),
+	LB_USER_NAME varchar(80) NOT NULL,
+	LIBRARY_ID smallint NOT NULL,
+	USER_PASSWORD varchar(50) NOT NULL,
+	R_TIME timestamp DEFAULT CURRENT_TIMESTAMP NOT NULL,
+	U_TIME timestamp DEFAULT CURRENT_TIMESTAMP NOT NULL,
+	R_STAFF varchar(50) DEFAULT 'DefaultStaff' NOT NULL,
+	U_STAFF varchar(50) DEFAULT 'DefaultStaff' NOT NULL
+)
+;
+
+CREATE TABLE LENDING ( 
+	LENDING_ID integer NOT NULL GENERATED BY DEFAULT AS IDENTITY (START WITH 1, INCREMENT BY 1),
+	LIBRARY_ID smallint NOT NULL,
+	LB_USER_ID integer NOT NULL,
+	LENDING_DATE timestamp NOT NULL,
+	R_TIME timestamp DEFAULT CURRENT_TIMESTAMP NOT NULL,
+	U_TIME timestamp DEFAULT CURRENT_TIMESTAMP NOT NULL,
+	R_STAFF varchar(50) DEFAULT 'DefaultStaff' NOT NULL,
+	U_STAFF varchar(50) DEFAULT 'DefaultStaff' NOT NULL
+)
+;
+
+CREATE TABLE LENDING_COLLECTION ( 
+	LENDING_ID integer NOT NULL,
+	COLLECTION_ID integer NOT NULL,
+	RETURN_LIMIT_DATE timestamp NOT NULL,
+	R_TIME timestamp DEFAULT CURRENT_TIMESTAMP NOT NULL,
+	U_TIME timestamp DEFAULT CURRENT_TIMESTAMP NOT NULL,
+	R_STAFF varchar(50) DEFAULT 'DefaultStaff' NOT NULL,
+	U_STAFF varchar(50) DEFAULT 'DefaultStaff' NOT NULL
+)
+;
+
+CREATE TABLE LIBRARY ( 
+	LIBRARY_ID smallint NOT NULL GENERATED BY DEFAULT AS IDENTITY (START WITH 1, INCREMENT BY 1),
+	LIBRARY_NAME varchar(80) NOT NULL,
+	R_TIME timestamp DEFAULT CURRENT_TIMESTAMP NOT NULL,
+	U_TIME timestamp DEFAULT CURRENT_TIMESTAMP NOT NULL,
+	R_STAFF varchar(50) DEFAULT 'DefaultStaff' NOT NULL,
+	U_STAFF varchar(50) DEFAULT 'DefaultStaff' NOT NULL
+)
+;
+
+CREATE TABLE NEXT_LIBRARY ( 
+	LIBRARY_ID smallint NOT NULL,
+	NEXT_LIBRARY_ID smallint NOT NULL,
+	DISTANCE_KM integer NOT NULL,
+	R_TIME timestamp DEFAULT CURRENT_TIMESTAMP NOT NULL,
+	U_TIME timestamp DEFAULT CURRENT_TIMESTAMP NOT NULL,
+	R_STAFF varchar(50) DEFAULT 'DefaultStaff' NOT NULL,
+	U_STAFF varchar(50) DEFAULT 'DefaultStaff' NOT NULL
+)
+;
+
+CREATE TABLE PUBLISHER ( 
+	PUBLISHER_ID integer NOT NULL GENERATED BY DEFAULT AS IDENTITY (START WITH 1, INCREMENT BY 1),
+	PUBLISHER_NAME varchar(80) NOT NULL,
+	R_TIME timestamp DEFAULT CURRENT_TIMESTAMP NOT NULL,
+	U_TIME timestamp DEFAULT CURRENT_TIMESTAMP NOT NULL,
+	R_STAFF varchar(50) DEFAULT 'DefaultStaff' NOT NULL,
+	U_STAFF varchar(50) DEFAULT 'DefaultStaff' NOT NULL
+)
+;
+
+
+ALTER TABLE AUTHOR ADD CONSTRAINT PK_AUTHOR 
+	PRIMARY KEY (AUTHOR_ID)
+;
+
+ALTER TABLE BLACK_ACTION ADD CONSTRAINT PK_BLACK_ACTION 
+	PRIMARY KEY (BLACK_ACTION_ID)
+;
+
+ALTER TABLE BLACK_ACTION_LOOKUP ADD CONSTRAINT PK_BLACK_ACTION_LOOKUP 
+	PRIMARY KEY (BLACK_ACTION_CODE)
+;
+
+ALTER TABLE BLACK_LIST ADD CONSTRAINT PK_BLACK_LIST 
+	PRIMARY KEY (BLACK_LIST_ID)
+;
+
+ALTER TABLE BOOK ADD CONSTRAINT PK_BOOK 
+	PRIMARY KEY (BOOK_ID)
+;
+
+ALTER TABLE COLLECTION ADD CONSTRAINT PK_COLLECTION 
+	PRIMARY KEY (COLLECTION_ID)
+;
+
+ALTER TABLE COLLECTION_STATUS ADD CONSTRAINT PK_COLLECTION_STATUS 
+	PRIMARY KEY (COLLECTION_ID)
+;
+
+ALTER TABLE COLLECTION_STATUS_LOOKUP ADD CONSTRAINT PK_COLLECTION_STATUS_LOOKUP 
+	PRIMARY KEY (COLLECTION_STATUS_CODE)
+;
+
+ALTER TABLE GENRE ADD CONSTRAINT PK_GENRE 
+	PRIMARY KEY (GENRE_CODE)
+;
+
+ALTER TABLE LB_USER ADD CONSTRAINT PK_LB_USER 
+	PRIMARY KEY (LB_USER_ID)
+;
+
+ALTER TABLE LENDING ADD CONSTRAINT PK_LENDING 
+	PRIMARY KEY (LENDING_ID)
+;
+
+ALTER TABLE LENDING_COLLECTION ADD CONSTRAINT PK_LENDING_COLLECTION 
+	PRIMARY KEY (LENDING_ID, COLLECTION_ID)
+;
+
+ALTER TABLE LIBRARY ADD CONSTRAINT PK_LIBRARY 
+	PRIMARY KEY (LIBRARY_ID)
+;
+
+ALTER TABLE NEXT_LIBRARY ADD CONSTRAINT PK_NEXT_LIBRARY 
+	PRIMARY KEY (LIBRARY_ID, NEXT_LIBRARY_ID)
+;
+
+ALTER TABLE PUBLISHER ADD CONSTRAINT PK_PUBLISHER 
+	PRIMARY KEY (PUBLISHER_ID)
+;
+
+
+ALTER TABLE BOOK
+	ADD CONSTRAINT UQ_BOOK_ISBN_NO UNIQUE (ISBN_NO)
+;
+
+ALTER TABLE COLLECTION
+	ADD CONSTRAINT UQ_COLLECTION_Primary UNIQUE (LIBRARY_ID, BOOK_ID)
+;
+
+ALTER TABLE LENDING
+	ADD CONSTRAINT UQ_LENDING_Primary UNIQUE (LIBRARY_ID, LB_USER_ID)
+;
+
+ALTER TABLE BLACK_LIST
+	ADD CONSTRAINT UQ_BLACK_LIST_LB_USER_ID UNIQUE (LB_USER_ID)
+;
+
+ALTER TABLE LIBRARY
+	ADD CONSTRAINT UQ_LIBRARY_LIBRARY_NAME UNIQUE (LIBRARY_NAME)
+;
+
+
+
+ALTER TABLE BLACK_ACTION ADD CONSTRAINT FK_BLACK_ACTION_BLACK_LIST 
+	FOREIGN KEY (BLACK_LIST_ID) REFERENCES BLACK_LIST (BLACK_LIST_ID)
+;
+
+ALTER TABLE BLACK_ACTION ADD CONSTRAINT FK_BLACK_ACTION_LOOKUP 
+	FOREIGN KEY (BLACK_ACTION_CODE) REFERENCES BLACK_ACTION_LOOKUP (BLACK_ACTION_CODE)
+;
+
+ALTER TABLE BLACK_LIST ADD CONSTRAINT FK_BLACK_LIST_LB_USER 
+	FOREIGN KEY (LB_USER_ID) REFERENCES LB_USER (LB_USER_ID)
+;
+
+ALTER TABLE BOOK ADD CONSTRAINT FK_BOOK_AUTHOR 
+	FOREIGN KEY (AUTHOR_ID) REFERENCES AUTHOR (AUTHOR_ID)
+;
+
+ALTER TABLE BOOK ADD CONSTRAINT FK_BOOK_PUBLISHER 
+	FOREIGN KEY (PUBLISHER_ID) REFERENCES PUBLISHER (PUBLISHER_ID)
+;
+
+ALTER TABLE BOOK ADD CONSTRAINT FK_BOOK_GENRE 
+	FOREIGN KEY (GENRE_CODE) REFERENCES GENRE (GENRE_CODE)
+;
+
+ALTER TABLE COLLECTION ADD CONSTRAINT FK_COLLECTION_BOOK 
+	FOREIGN KEY (BOOK_ID) REFERENCES BOOK (BOOK_ID)
+;
+
+ALTER TABLE COLLECTION ADD CONSTRAINT FK_COLLECTION_LIBRARY 
+	FOREIGN KEY (LIBRARY_ID) REFERENCES LIBRARY (LIBRARY_ID)
+;
+
+ALTER TABLE COLLECTION_STATUS ADD CONSTRAINT FK_COLLECTION_STATUS_COLLECTION 
+	FOREIGN KEY (COLLECTION_ID) REFERENCES COLLECTION (COLLECTION_ID)
+;
+
+ALTER TABLE COLLECTION_STATUS ADD CONSTRAINT FK_COLLECTION_STATUS_LOOKUP 
+	FOREIGN KEY (COLLECTION_STATUS_CODE) REFERENCES COLLECTION_STATUS_LOOKUP (COLLECTION_STATUS_CODE)
+;
+
+ALTER TABLE GENRE ADD CONSTRAINT FK_GENRE_GENRE 
+	FOREIGN KEY (PARENT_GENRE_CODE) REFERENCES GENRE (GENRE_CODE)
+;
+
+ALTER TABLE LB_USER ADD CONSTRAINT FK_LB_USER_LIBRARY 
+	FOREIGN KEY (LIBRARY_ID) REFERENCES LIBRARY (LIBRARY_ID)
+;
+
+ALTER TABLE LENDING ADD CONSTRAINT FK_LENDING_LIBRARY 
+	FOREIGN KEY (LIBRARY_ID) REFERENCES LIBRARY (LIBRARY_ID)
+;
+
+ALTER TABLE LENDING ADD CONSTRAINT FK_LENDING_LB_USER 
+	FOREIGN KEY (LB_USER_ID) REFERENCES LB_USER (LB_USER_ID)
+;
+
+ALTER TABLE LENDING_COLLECTION ADD CONSTRAINT FK_LENDING_COLLECTION_LENDING 
+	FOREIGN KEY (LENDING_ID) REFERENCES LENDING (LENDING_ID)
+;
+
+ALTER TABLE LENDING_COLLECTION ADD CONSTRAINT FK_LENDING_COLLECTION_COL 
+	FOREIGN KEY (COLLECTION_ID) REFERENCES COLLECTION (COLLECTION_ID)
+;
+
+ALTER TABLE NEXT_LIBRARY ADD CONSTRAINT FK_NEXT_LIBRARY_LIBRARY_ID 
+	FOREIGN KEY (LIBRARY_ID) REFERENCES LIBRARY (LIBRARY_ID)
+;
+
+ALTER TABLE NEXT_LIBRARY ADD CONSTRAINT FK_NEXT_LIBRARY_NEXT_LIBRARY_ID 
+	FOREIGN KEY (NEXT_LIBRARY_ID) REFERENCES LIBRARY (LIBRARY_ID)
+;

Added: announcement/trunk/dbflute/replace-schema.bat
===================================================================
--- announcement/trunk/dbflute/replace-schema.bat	                        (rev 0)
+++ announcement/trunk/dbflute/replace-schema.bat	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,19 @@
+ @ echo off
+
+%~d0
+cd %~p0
+call _project.bat
+
+rem /nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn
+rem Specify the file path to be used as build-properties.
+rem nnnnnnnnnn/
+set MY_PROPERTIES_PATH=build-%MY_PROJECT_NAME%.properties
+
+rem /nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn
+rem Execute {Replace-Schema}.
+rem nnnnnnnnnn/
+call %DBFLUTE_HOME%\etc\cmd\_df-replace-schema.cmd %MY_PROPERTIES_PATH%
+
+pause
+
+


Property changes on: announcement/trunk/dbflute/replace-schema.bat
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/dbflute/replace-schema.sh
===================================================================
--- announcement/trunk/dbflute/replace-schema.sh	                        (rev 0)
+++ announcement/trunk/dbflute/replace-schema.sh	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,15 @@
+#!/bin/sh
+
+. _project.sh
+
+echo "/nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn"
+echo "Specify the file path to be used as build-properties."
+echo "nnnnnnnnnn/"
+export MY_PROPERTIES_PATH=build-${MY_PROJECT_NAME}.properties
+
+echo "/nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn"
+echo "Execute {Replace-Schema}."
+echo "nnnnnnnnnn/"
+sh $DBFLUTE_HOME/etc/cmd/_df-replace-schema.sh $MY_PROPERTIES_PATH
+
+


Property changes on: announcement/trunk/dbflute/replace-schema.sh
___________________________________________________________________
Name: svn:executable
   + *
Name: svn:eol-style
   + native

Added: announcement/trunk/dbflute/schema/readme.txt
===================================================================
--- announcement/trunk/dbflute/schema/readme.txt	                        (rev 0)
+++ announcement/trunk/dbflute/schema/readme.txt	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1 @@
+Directory for SchemaFile


Property changes on: announcement/trunk/dbflute/schema/readme.txt
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/dbflute/sql2entity.bat
===================================================================
--- announcement/trunk/dbflute/sql2entity.bat	                        (rev 0)
+++ announcement/trunk/dbflute/sql2entity.bat	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,19 @@
+ @ echo off
+
+%~d0
+cd %~p0
+call _project.bat
+
+rem /nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn
+rem Specify the file path to be used as build-properties.
+rem nnnnnnnnnn/
+set MY_PROPERTIES_PATH=build-%MY_PROJECT_NAME%.properties
+
+rem /nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn
+rem Execute {Invoke Sql Directory}.
+rem nnnnnnnnnn/
+call %DBFLUTE_HOME%\etc\cmd\_df-sql2entity.cmd %MY_PROPERTIES_PATH%
+
+pause
+
+


Property changes on: announcement/trunk/dbflute/sql2entity.bat
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/dbflute/sql2entity.sh
===================================================================
--- announcement/trunk/dbflute/sql2entity.sh	                        (rev 0)
+++ announcement/trunk/dbflute/sql2entity.sh	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,15 @@
+#!/bin/sh
+
+. _project.sh
+
+echo "/nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn"
+echo "Specify the file path to be used as build-properties."
+echo "nnnnnnnnnn/"
+export MY_PROPERTIES_PATH=build-${MY_PROJECT_NAME}.properties
+
+echo "/nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn"
+echo "Execute {Invoke Sql Directory}."
+echo "nnnnnnnnnn/"
+sh $DBFLUTE_HOME/etc/cmd/_df-sql2entity.sh $MY_PROPERTIES_PATH
+
+


Property changes on: announcement/trunk/dbflute/sql2entity.sh
___________________________________________________________________
Name: svn:executable
   + *
Name: svn:eol-style
   + native

Added: announcement/trunk/mydbflute/readme.txt
===================================================================
--- announcement/trunk/mydbflute/readme.txt	                        (rev 0)
+++ announcement/trunk/mydbflute/readme.txt	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,3 @@
+$ mkdir dbflute-0.7.0
+$ cd dbflute-0.7.0
+$ unzip <path>/dbflute-0.7.0.zip


Property changes on: announcement/trunk/mydbflute/readme.txt
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/pom.xml
===================================================================
--- announcement/trunk/pom.xml	                        (rev 0)
+++ announcement/trunk/pom.xml	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,252 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<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>jp.sf.pal</groupId>
+  <artifactId>announcement</artifactId>
+  <version>1.0-SNAPSHOT</version>
+  <packaging>war</packaging>
+  <name>Announcement Portlet</name>
+  <description/>
+  <url>http://pal.sourceforge.jp/</url>
+  <build>
+    <finalName>announcement</finalName>
+    <defaultGoal>validate</defaultGoal>
+    <pluginManagement>
+      <plugins>
+        <plugin>
+          <artifactId>maven-compiler-plugin</artifactId>
+          <configuration>
+            <source>1.5</source>
+            <target>1.5</target>
+            <encoding>UTF-8</encoding>
+          </configuration>
+        </plugin>
+        <plugin>
+          <artifactId>maven-surefire-plugin</artifactId>
+          <version>2.3</version>
+        </plugin>
+        <plugin>
+          <artifactId>maven-deploy-plugin</artifactId>
+          <configuration>
+            <updateReleaseInfo>true</updateReleaseInfo>
+          </configuration>
+        </plugin>
+        <plugin>
+          <groupId>org.codehaus.mojo</groupId>
+          <artifactId>cobertura-maven-plugin</artifactId>
+          <version>2.0-SNAPSHOT</version>
+          <executions>
+            <execution>
+              <goals>
+                <goal>clean</goal>
+              </goals>
+            </execution>
+          </executions>
+        </plugin>
+      </plugins>
+    </pluginManagement>
+    <plugins>
+      <plugin>
+        <artifactId>maven-source-plugin</artifactId>
+        <executions>
+          <execution>
+            <id>source-jar</id>
+            <phase>package</phase>
+            <goals>
+              <goal>jar</goal>
+            </goals>
+          </execution>
+        </executions>
+      </plugin>
+    </plugins>
+  </build>
+  <repositories>
+    <repository>
+      <id>maven.marevol.com</id>
+      <name>Maven2 Repository on marevol.com</name>
+      <url>http://maven2.marevol.com/</url>
+    </repository>
+    <repository>
+      <id>maven.seasar.org</id>
+      <name>The Seasar Foundation Maven2 Repository</name>
+      <url>http://maven.seasar.org/maven2</url>
+    </repository>
+  </repositories>
+  <dependencies>
+    <dependency>
+      <groupId>mysql</groupId>
+      <artifactId>mysql-connector-java</artifactId>
+      <version>5.0.4</version>
+    </dependency>
+    <dependency>
+      <groupId>junit</groupId>
+      <artifactId>junit</artifactId>
+      <version>4.4</version>
+      <scope>compile</scope>
+    </dependency>
+    <dependency>
+      <groupId>junit-addons</groupId>
+      <artifactId>junit-addons</artifactId>
+      <version>1.4</version>
+      <scope>compile</scope>
+    </dependency>
+<!-- SERVLET DEV: BEGIN @@@
+    <dependency>
+      <groupId>jp.sf.pal</groupId>
+      <artifactId>faces-dev-filter</artifactId>
+      <version>0.1</version>
+      <scope>compile</scope>
+    </dependency>
+@@@@ SERVLET DEV: END -->
+    <dependency>
+      <groupId>javax.servlet</groupId>
+      <artifactId>servlet-api</artifactId>
+      <version>2.3</version>
+      <scope>provided</scope>
+    </dependency>
+    <dependency>
+      <groupId>portlet-api</groupId>
+      <artifactId>portlet-api</artifactId>
+      <version>1.0</version>
+      <scope>provided</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.geronimo.specs</groupId>
+      <artifactId>geronimo-jsp_2.0_spec</artifactId>
+      <version>1.0</version>
+      <scope>provided</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.geronimo.specs</groupId>
+      <artifactId>geronimo-servlet_2.4_spec</artifactId>
+      <version>1.0</version>
+      <scope>provided</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.geronimo.specs</groupId>
+      <artifactId>geronimo-jta_1.1_spec</artifactId>
+      <version>1.0</version>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.geronimo.specs</groupId>
+      <artifactId>geronimo-ejb_3.0_spec</artifactId>
+      <version>1.0</version>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.geronimo.specs</groupId>
+      <artifactId>geronimo-jpa_3.0_spec</artifactId>
+      <version>1.0</version>
+      <scope>provided</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.seasar.container</groupId>
+      <artifactId>s2-framework</artifactId>
+      <version>2.4.25</version>
+    </dependency>
+    <dependency>
+      <groupId>org.seasar.container</groupId>
+      <artifactId>s2-extension</artifactId>
+      <version>2.4.25</version>
+      <exclusions>
+        <exclusion>
+          <groupId>log4j</groupId>
+          <artifactId>log4j</artifactId>
+        </exclusion>
+      </exclusions>
+    </dependency>
+    <dependency>
+      <groupId>org.seasar.container</groupId>
+      <artifactId>s2-tiger</artifactId>
+      <version>2.4.25</version>
+      <exclusions>
+        <exclusion>
+          <groupId>org.easymock</groupId>
+          <artifactId>easymock</artifactId>
+        </exclusion>
+      </exclusions>
+    </dependency>
+    <dependency>
+      <groupId>org.seasar.teeda</groupId>
+      <artifactId>teeda-extension</artifactId>
+      <version>1.0.13-sp2-20080605</version>
+    </dependency>
+    <dependency>
+      <groupId>org.seasar.teeda</groupId>
+      <artifactId>teeda-tiger</artifactId>
+      <version>1.0.13</version>
+    </dependency>
+    <dependency>
+      <groupId>org.seasar.portlet</groupId>
+      <artifactId>s2-portlet</artifactId>
+      <version>1.0.7</version>
+    </dependency>
+    <dependency>
+      <groupId>org.seasar.dao</groupId>
+      <artifactId>s2-dao</artifactId>
+      <version>1.0.48</version>
+    </dependency>
+    <dependency>
+      <groupId>org.seasar.dao</groupId>
+      <artifactId>s2-dao-tiger</artifactId>
+      <version>1.0.48</version>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.portals.bridges</groupId>
+      <artifactId>portals-bridges-portletfilter</artifactId>
+      <version>1.0.3</version>
+      <exclusions>
+        <exclusion>
+          <groupId>logkit</groupId>
+          <artifactId>logkit</artifactId>
+        </exclusion>
+        <exclusion>
+          <groupId>avalon-framework</groupId>
+          <artifactId>avalon-framework</artifactId>
+        </exclusion>
+        <exclusion>
+          <groupId>javax.servlet</groupId>
+          <artifactId>servlet-api</artifactId>
+        </exclusion>
+        <exclusion>
+          <groupId>log4j</groupId>
+          <artifactId>log4j</artifactId>
+        </exclusion>
+      </exclusions>
+    </dependency>
+    <dependency>
+      <groupId>jp.sf.pal</groupId>
+      <artifactId>faces-response-filter</artifactId>
+      <version>0.2</version>
+    </dependency>
+    <dependency>
+      <groupId>jp.sf.pal</groupId>
+      <artifactId>portlet-output-optimizer</artifactId>
+      <version>0.2</version>
+    </dependency>
+    <dependency>
+      <groupId>jp.sf.pal</groupId>
+      <artifactId>common-utils</artifactId>
+      <version>0.3</version>
+    </dependency>
+    <dependency>
+      <groupId>log4j</groupId>
+      <artifactId>log4j</artifactId>
+      <version>1.2.9</version>
+    </dependency>
+    <dependency>
+      <groupId>xerces</groupId>
+      <artifactId>xercesImpl</artifactId>
+      <version>2.6.2</version>
+    </dependency>
+    <dependency>
+      <groupId>xerces</groupId>
+      <artifactId>xmlParserAPIs</artifactId>
+      <version>2.6.2</version>
+    </dependency>
+    <dependency>
+      <groupId>commons-lang</groupId>
+      <artifactId>commons-lang</artifactId>
+      <version>2.4</version>
+    </dependency>
+  </dependencies>
+</project>


Property changes on: announcement/trunk/pom.xml
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/config/clay/announcement.clay
===================================================================
--- announcement/trunk/src/main/config/clay/announcement.clay	                        (rev 0)
+++ announcement/trunk/src/main/config/clay/announcement.clay	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,133 @@
+<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
+<clay-model clay-version="1.4.1">
+<database-model alias="" author="" begin-script="" end-script="" name="announcement" remarks="" sql-dialect-id="jp.azzurri.clay.dialect.MySQL_5_0_Dialect" uid="5dd26f:11acc05462b:-8000" version="1.0">
+<database-model-description></database-model-description>
+<schema-list>
+<schema alias="" name="DEFAULT_SCHEMA" remarks="" uid="5dd26f:11acc05462b:-7ffd">
+<schema-description></schema-description>
+<domain-list/>
+<table-list>
+<table alias="Announcement" name="ANNOUNCEMENT" remarks="" uid="5dd26f:11acc05462b:-7fff">
+<table-description></table-description>
+<table-figure-bounds height="-1" width="-1" x="128" y="179"/>
+<column-list>
+<column alias="Id" auto-increment="true" column-size="0" decimal-digits="0" default-value="" mandatory="true" name="ID" remarks="" uid="5dd26f:11acc05462b:-7ffa">
+<column-description></column-description>
+<data-type jdbc-type="4" name="INTEGER" selected-variant-pattern="INTEGER">
+<variant type-name-pattern="INTEGER"/>
+<variant precision-max="10" precision-min="0" precision-variable="%n" type-name-pattern="INTEGER(%n)"/>
+<variant precision-max="10" precision-min="0" precision-variable="%n" type-name-pattern="INTEGER(%n) UNSIGNED"/>
+<variant precision-max="10" precision-min="0" precision-variable="%n" type-name-pattern="INTEGER(%n) UNSIGNED ZEROFILL"/>
+<variant precision-max="10" precision-min="0" precision-variable="%n" type-name-pattern="INTEGER(%n) ZEROFILL"/>
+<variant type-name-pattern="INTEGER UNSIGNED"/>
+<variant type-name-pattern="INTEGER UNSIGNED ZEROFILL"/>
+<variant type-name-pattern="INTEGER ZEROFILL"/>
+</data-type>
+</column>
+<column alias="Scope" auto-increment="false" column-size="20" decimal-digits="0" default-value="" mandatory="true" name="SCOPE" remarks="" uid="5dd26f:11acc05462b:-7ff9">
+<column-description></column-description>
+<data-type jdbc-type="12" literal-prefix="'" literal-suffix="'" name="VARCHAR" selected-variant-pattern="VARCHAR(%n)">
+<variant precision-max="255" precision-min="1" precision-variable="%n" type-name-pattern="VARCHAR(%n)"/>
+<variant precision-max="255" precision-min="1" precision-variable="%n" type-name-pattern="VARCHAR(%n) BINARY"/>
+</data-type>
+</column>
+<column alias="Role" auto-increment="false" column-size="100" decimal-digits="0" default-value="" mandatory="false" name="ROLE" remarks="" uid="5dd26f:11acc05462b:-7ff8">
+<column-description></column-description>
+<data-type jdbc-type="12" literal-prefix="'" literal-suffix="'" name="VARCHAR" selected-variant-pattern="VARCHAR(%n)">
+<variant precision-max="255" precision-min="1" precision-variable="%n" type-name-pattern="VARCHAR(%n)"/>
+<variant precision-max="255" precision-min="1" precision-variable="%n" type-name-pattern="VARCHAR(%n) BINARY"/>
+</data-type>
+</column>
+<column alias="Start Date" auto-increment="false" column-size="0" decimal-digits="0" default-value="" mandatory="false" name="START_DATE" remarks="" uid="5dd26f:11acc05462b:-7ff7">
+<column-description></column-description>
+<data-type jdbc-type="93" literal-prefix="'" literal-suffix="'" name="DATETIME" selected-variant-pattern="DATETIME">
+<variant type-name-pattern="DATETIME"/>
+</data-type>
+</column>
+<column alias="End Date" auto-increment="false" column-size="0" decimal-digits="0" default-value="" mandatory="false" name="END_DATE" remarks="" uid="5dd26f:11acc05462b:-7ff6">
+<column-description></column-description>
+<data-type jdbc-type="93" literal-prefix="'" literal-suffix="'" name="DATETIME" selected-variant-pattern="DATETIME">
+<variant type-name-pattern="DATETIME"/>
+</data-type>
+</column>
+<column alias="Title" auto-increment="false" column-size="100" decimal-digits="0" default-value="" mandatory="true" name="TITLE" remarks="" uid="5dd26f:11acc05462b:-7ff3">
+<column-description></column-description>
+<data-type jdbc-type="12" literal-prefix="'" literal-suffix="'" name="VARCHAR" selected-variant-pattern="VARCHAR(%n)">
+<variant precision-max="255" precision-min="1" precision-variable="%n" type-name-pattern="VARCHAR(%n)"/>
+<variant precision-max="255" precision-min="1" precision-variable="%n" type-name-pattern="VARCHAR(%n) BINARY"/>
+</data-type>
+</column>
+<column alias="Sort Order" auto-increment="false" column-size="0" decimal-digits="0" default-value="" mandatory="true" name="SORT_ORDER" remarks="" uid="194b86d:11ad0db09a1:-7fc7">
+<column-description></column-description>
+<data-type jdbc-type="4" name="INTEGER" selected-variant-pattern="INTEGER">
+<variant type-name-pattern="INTEGER"/>
+<variant precision-max="10" precision-min="0" precision-variable="%n" type-name-pattern="INTEGER(%n)"/>
+<variant precision-max="10" precision-min="0" precision-variable="%n" type-name-pattern="INTEGER(%n) UNSIGNED"/>
+<variant precision-max="10" precision-min="0" precision-variable="%n" type-name-pattern="INTEGER(%n) UNSIGNED ZEROFILL"/>
+<variant precision-max="10" precision-min="0" precision-variable="%n" type-name-pattern="INTEGER(%n) ZEROFILL"/>
+<variant type-name-pattern="INTEGER UNSIGNED"/>
+<variant type-name-pattern="INTEGER UNSIGNED ZEROFILL"/>
+<variant type-name-pattern="INTEGER ZEROFILL"/>
+</data-type>
+</column>
+<column alias="Timestamp" auto-increment="false" column-size="0" decimal-digits="0" default-value="" mandatory="true" name="TIMESTAMP" remarks="" uid="194b86d:11ad0db09a1:-7fc0">
+<column-description></column-description>
+<data-type jdbc-type="93" literal-prefix="'" literal-suffix="'" name="TIMESTAMP" selected-variant-pattern="TIMESTAMP">
+<variant type-name-pattern="TIMESTAMP"/>
+<variant precision-max="14" precision-min="0" precision-variable="%n" type-name-pattern="TIMESTAMP(%n)"/>
+</data-type>
+</column>
+</column-list>
+<primary-key alias="" name="PK_ANNOUNCEMENT" remarks="" uid="5dd26f:11acc05462b:-7ffe">
+<primary-key-description></primary-key-description>
+<primary-key-column name="ID"/>
+</primary-key>
+<unique-key-list/>
+<foreign-key-list/>
+<index-list/>
+</table>
+<table alias="" name="ANNOUNCEMENT_BODY" remarks="" uid="194b86d:11ad0db09a1:-7fff">
+<table-description></table-description>
+<table-figure-bounds height="-1" width="-1" x="509" y="222"/>
+<column-list>
+<column alias="Id" auto-increment="false" column-size="0" decimal-digits="0" default-value="" mandatory="true" name="ID" remarks="" uid="194b86d:11ad0db09a1:-7ffb">
+<column-description></column-description>
+<data-type jdbc-type="4" name="INTEGER" selected-variant-pattern="INTEGER">
+<variant type-name-pattern="INTEGER"/>
+<variant precision-max="10" precision-min="0" precision-variable="%n" type-name-pattern="INTEGER(%n)"/>
+<variant precision-max="10" precision-min="0" precision-variable="%n" type-name-pattern="INTEGER(%n) UNSIGNED"/>
+<variant precision-max="10" precision-min="0" precision-variable="%n" type-name-pattern="INTEGER(%n) UNSIGNED ZEROFILL"/>
+<variant precision-max="10" precision-min="0" precision-variable="%n" type-name-pattern="INTEGER(%n) ZEROFILL"/>
+<variant type-name-pattern="INTEGER UNSIGNED"/>
+<variant type-name-pattern="INTEGER UNSIGNED ZEROFILL"/>
+<variant type-name-pattern="INTEGER ZEROFILL"/>
+</data-type>
+</column>
+<column alias="Content" auto-increment="false" column-size="0" decimal-digits="0" default-value="" mandatory="true" name="CONTENT" remarks="" uid="194b86d:11ad0db09a1:-7ffa">
+<column-description></column-description>
+<data-type jdbc-type="-1" literal-prefix="'" literal-suffix="'" name="TEXT" selected-variant-pattern="TEXT">
+<variant type-name-pattern="TEXT"/>
+</data-type>
+</column>
+</column-list>
+<primary-key alias="" name="PK_ANNOUNCEMENT_BODY" remarks="" uid="194b86d:11ad0db09a1:-7ffe">
+<primary-key-description></primary-key-description>
+<primary-key-column name="ID"/>
+</primary-key>
+<unique-key-list/>
+<foreign-key-list>
+<foreign-key alias="" name="FK_ANNOUNCEMENT_BODY" on-delete="CASCADE" on-update="" referenced-key="PK_ANNOUNCEMENT" referenced-table="ANNOUNCEMENT" referenced-table-schema="DEFAULT_SCHEMA" remarks="" source-entity-role="" source-multiplicity="1" source-relationship-type="" target-entity-role="" target-multiplicity="1" target-relationship-type="" uid="194b86d:11ad0db09a1:-7fea">
+<foreign-key-description></foreign-key-description>
+<foreign-key-figure>
+<fk-fig-bendpoint-list/>
+</foreign-key-figure>
+<foreign-key-column column-name="ID" referenced-key-column-name="ID"/>
+</foreign-key>
+</foreign-key-list>
+<index-list/>
+</table>
+</table-list>
+</schema>
+</schema-list>
+</database-model>
+</clay-model>

Added: announcement/trunk/src/main/config/sql/mysql/announcement.sql
===================================================================
--- announcement/trunk/src/main/config/sql/mysql/announcement.sql	                        (rev 0)
+++ announcement/trunk/src/main/config/sql/mysql/announcement.sql	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,29 @@
+DROP TABLE IF EXISTS ANNOUNCEMENT_BODY;
+DROP TABLE IF EXISTS ANNOUNCEMENT;
+
+CREATE TABLE ANNOUNCEMENT (
+       ID INTEGER NOT NULL AUTO_INCREMENT
+     , SCOPE VARCHAR(20) NOT NULL
+     , ROLE VARCHAR(100)
+     , START_DATE DATETIME
+     , END_DATE DATETIME
+     , TITLE VARCHAR(100) NOT NULL
+     , SORT_ORDER INTEGER NOT NULL
+     , TIMESTAMP TIMESTAMP NOT NULL
+     , PRIMARY KEY (ID)
+);
+
+CREATE TABLE ANNOUNCEMENT_BODY (
+       ID INTEGER NOT NULL
+     , CONTENT TEXT NOT NULL
+     , PRIMARY KEY (ID)
+);
+
+ALTER TABLE ANNOUNCEMENT_BODY
+  ADD CONSTRAINT FK_ANNOUNCEMENT_BODY
+      FOREIGN KEY (ID)
+      REFERENCES ANNOUNCEMENT (ID)
+   ON DELETE CASCADE;
+
+alter table ANNOUNCEMENT Type=InnoDB;
+

Added: announcement/trunk/src/main/java/jp/sf/pal/announcement/AnnouncementConstraints.java
===================================================================
--- announcement/trunk/src/main/java/jp/sf/pal/announcement/AnnouncementConstraints.java	                        (rev 0)
+++ announcement/trunk/src/main/java/jp/sf/pal/announcement/AnnouncementConstraints.java	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,13 @@
+package jp.sf.pal.announcement;
+
+public class AnnouncementConstraints {
+
+    public static final String DEFAULT_SCOPE = "DEFAULT";
+
+    public static final String SCOPE_KEY = "scope";
+
+    public static final long MIN_DATE = 0;
+
+    public static final long MAX_DATE = 92464556400000L;// 4900/02/01?
+
+}


Property changes on: announcement/trunk/src/main/java/jp/sf/pal/announcement/AnnouncementConstraints.java
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/AccessContext.java
===================================================================
--- announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/AccessContext.java	                        (rev 0)
+++ announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/AccessContext.java	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,267 @@
+package jp.sf.pal.announcement.db.allcommon;
+
+/**
+ * Access-Context.
+ * <p>
+ * This access-context on the thread should be initialized at the beginning of access.
+ * The access is various. Web-Access, Batch-Access, JUnit-Access and so on...
+ * </p>
+ * @author DBFlute(AutoGenerator)
+ */
+public class AccessContext {
+
+    // ===================================================================================
+    //                                                                        Thread Local
+    //                                                                        ============
+    /** The thread-local for this. */
+    private static final ThreadLocal<AccessContext> threadLocal = new ThreadLocal<AccessContext>();
+
+    /**
+     * Get access-context on thread.
+     * @return Access-context. (Nullable)
+     */
+    public static AccessContext getAccessContextOnThread() {
+        return (AccessContext) threadLocal.get();
+    }
+
+    /**
+     * Set access-context on thread.
+     * @param accessContext Access-context. (NotNull)
+     */
+    public static void setAccessContextOnThread(AccessContext accessContext) {
+        if (accessContext == null) {
+            String msg = "The argument[accessContext] must not be null.";
+            throw new IllegalArgumentException(msg);
+        }
+        threadLocal.set(accessContext);
+    }
+
+    /**
+     * Is existing access-context on thread?
+     * @return Determination.
+     */
+    public static boolean isExistAccessContextOnThread() {
+        return (threadLocal.get() != null);
+    }
+
+    /**
+     * Clear access-context on thread.
+     */
+    public static void clearAccessContextOnThread() {
+        threadLocal.set(null);
+    }
+
+    // ===================================================================================
+    //                                                                  Access Information
+    //                                                                  ==================
+    /**
+     * Get access user on thread.
+     * <p>
+     * If it can't get access user from access-context, 
+     * returns 'Anonymous' as default value!
+     * </p>
+     * @return Access user. (NotNull)
+     */
+    public static String getAccessUserOnThread() {
+        if (isExistAccessContextOnThread()) {
+            final AccessContext userContextOnThread = getAccessContextOnThread();
+            final String accessUser = userContextOnThread.getAccessUser();
+            if (accessUser != null) {
+                return accessUser;
+            }
+        }
+        return "Anonymous";// as Default
+    }
+
+    /**
+     * Get access process on thread.
+     * <p>
+     * If it can't get access process from access-context, 
+     * returns 'Anonymous' as default value!
+     * </p>
+     * @return Access process. (NotNull)
+     */
+    public static String getAccessProcessOnThread() {
+        if (isExistAccessContextOnThread()) {
+            final AccessContext userContextOnThread = getAccessContextOnThread();
+            final String accessProcess = userContextOnThread.getAccessProcess();
+            if (accessProcess != null) {
+                return accessProcess;
+            }
+        }
+        return "Anonymous";// as Default
+    }
+
+    /**
+     * Get access module on thread.
+     * <p>
+     * If it can't get access module from access-context, 
+     * returns 'Anonymous' as default value!
+     * </p>
+     * @return Access module. (NotNull)
+     */
+    public static String getAccessModuleOnThread() {
+        if (isExistAccessContextOnThread()) {
+            final AccessContext userContextOnThread = getAccessContextOnThread();
+            final String accessModule = userContextOnThread.getAccessModule();
+            if (accessModule != null) {
+                return accessModule;
+            }
+        }
+        return "Anonymous";// as Default
+    }
+
+    /**
+     * Get access date on thread.
+     * <p>
+     * If it can't get access date from access-context, 
+     * returns application current time as default value!
+     * </p>
+     * @return Access date. (NotNull)
+     */
+    public static java.util.Date getAccessDateOnThread() {
+        if (isExistAccessContextOnThread()) {
+            final AccessContext userContextOnThread = getAccessContextOnThread();
+            final java.util.Date accessDate = userContextOnThread
+                    .getAccessDate();
+            if (accessDate != null) {
+                return accessDate;
+            }
+            if (userContextOnThread.getAccessDateProvider() != null) {
+                return userContextOnThread.getAccessDateProvider()
+                        .getAccessDate();
+            }
+        }
+        return new java.util.Date();// as Default
+    }
+
+    /**
+     * Get access timestamp on thread.
+     * <p>
+     * If it can't get access timestamp from access-context, 
+     * returns application current time as default value!
+     * </p>
+     * @return Access timestamp. (NotNull)
+     */
+    public static java.sql.Timestamp getAccessTimestampOnThread() {
+        if (isExistAccessContextOnThread()) {
+            final AccessContext userContextOnThread = getAccessContextOnThread();
+            final java.sql.Timestamp accessTimestamp = userContextOnThread
+                    .getAccessTimestamp();
+            if (accessTimestamp != null) {
+                return accessTimestamp;
+            }
+            if (userContextOnThread.getAccessTimestampProvider() != null) {
+                return userContextOnThread.getAccessTimestampProvider()
+                        .getAccessTimestamp();
+            }
+        }
+        return new java.sql.Timestamp(System.currentTimeMillis());// as Default
+    }
+
+    // ===================================================================================
+    //                                                                           Attribute
+    //                                                                           =========
+    protected String accessUser;
+
+    protected String accessProcess;
+
+    protected String accessModule;
+
+    protected java.util.Date accessDate;
+
+    protected AccessDateProvider accessDateProvider;
+
+    protected java.sql.Timestamp accessTimestamp;
+
+    protected AccessTimestampProvider accessTimestampProvider;
+
+    // ===================================================================================
+    //                                                                            Accessor
+    //                                                                            ========
+    public String getAccessUser() {
+        return accessUser;
+    }
+
+    public void setAccessUser(String accessUser) {
+        this.accessUser = accessUser;
+    }
+
+    public String getAccessProcess() {
+        return accessProcess;
+    }
+
+    public void setAccessProcess(String accessProcess) {
+        this.accessProcess = accessProcess;
+    }
+
+    public String getAccessModule() {
+        return accessModule;
+    }
+
+    public void setAccessModule(String accessModule) {
+        this.accessModule = accessModule;
+    }
+
+    public java.util.Date getAccessDate() {
+        return accessDate;
+    }
+
+    public void setAccessDate(java.util.Date accessDate) {
+        this.accessDate = accessDate;
+    }
+
+    public AccessDateProvider getAccessDateProvider() {
+        return accessDateProvider;
+    }
+
+    public void setAccessDateProvider(AccessDateProvider accessDateProvider) {
+        this.accessDateProvider = accessDateProvider;
+    }
+
+    public java.sql.Timestamp getAccessTimestamp() {
+        return accessTimestamp;
+    }
+
+    public void setAccessTimestamp(java.sql.Timestamp accessTimestamp) {
+        this.accessTimestamp = accessTimestamp;
+    }
+
+    public AccessTimestampProvider getAccessTimestampProvider() {
+        return accessTimestampProvider;
+    }
+
+    public void setAccessTimestampProvider(
+            AccessTimestampProvider accessTimestampProvider) {
+        this.accessTimestampProvider = accessTimestampProvider;
+    }
+
+    // ===================================================================================
+    //                                                                  Provider Interface
+    //                                                                  ==================
+    /**
+     * The provider interface of access date.
+     */
+    public static interface AccessDateProvider {
+
+        /**
+         * Get access date.
+         * 
+         * @return Access date. (NotNull)
+         */
+        public java.util.Date getAccessDate();
+    }
+
+    /**
+     * The provider interface of access date.
+     */
+    public static interface AccessTimestampProvider {
+
+        /**
+         * Get access timestamp.
+         * 
+         * @return Access timestamp. (NotNull)
+         */
+        public java.sql.Timestamp getAccessTimestamp();
+    }
+}


Property changes on: announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/AccessContext.java
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/BFinder.java
===================================================================
--- announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/BFinder.java	                        (rev 0)
+++ announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/BFinder.java	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,102 @@
+package jp.sf.pal.announcement.db.allcommon;
+
+import jp.sf.pal.announcement.db.allcommon.bhv.BehaviorReadable;
+
+/**
+ * The entry of DBFlute.
+ * @author DBFlute(AutoGenerator)
+ */
+ @ SuppressWarnings("unchecked")
+public class BFinder {
+
+    // ===================================================================================
+    //                                                                          Definition
+    //                                                                          ==========
+    protected static String _dbfluteDiconName = "dbflute.dicon";
+
+    // ===================================================================================
+    //                                                                         Constructor
+    //                                                                         ===========
+    private BFinder() {
+    }
+
+    // ===================================================================================
+    //                                                                              Finder
+    //                                                                             ======
+    public static <BEHAVIOR_TYPE extends BehaviorReadable> BEHAVIOR_TYPE find(
+            Class<BEHAVIOR_TYPE> behaviorType) {
+        assertObjectNotNull("behaviorType", behaviorType);
+        if (!org.seasar.framework.container.factory.SingletonS2ContainerFactory
+                .hasContainer()) {
+            synchronized (BFinder.class) {
+                if (!org.seasar.framework.container.factory.SingletonS2ContainerFactory
+                        .hasContainer()) {
+                    final String configFile = _dbfluteDiconName;
+                    if (org.seasar.framework.util.ResourceUtil
+                            .isExist(configFile)) {
+                        org.seasar.framework.container.factory.SingletonS2ContainerFactory
+                                .setConfigPath(configFile);
+                        org.seasar.framework.container.factory.SingletonS2ContainerFactory
+                                .init();
+                    } else {
+                        String msg = "S2Container is not initialized! Confirm your initializer and your dicon files.";
+                        throw new IllegalStateException(msg);
+                    }
+                }
+            }
+        }
+        final org.seasar.framework.container.S2Container container = org.seasar.framework.container.factory.SingletonS2ContainerFactory
+                .getContainer();
+        final BEHAVIOR_TYPE behavior = (BEHAVIOR_TYPE) container
+                .getComponent(behaviorType);
+        return behavior;
+    }
+
+    // ===================================================================================
+    //                                                                            Accessor
+    //                                                                            ========
+    public static void setDBFluteDiconName(String dbfluteDiconName) {
+        _dbfluteDiconName = dbfluteDiconName;
+    }
+
+    // ===================================================================================
+    //                                                                      General Helper
+    //                                                                      ==============
+    /**
+     * Assert that the object is not null.
+     * @param variableName Variable name. (NotNull)
+     * @param value Value. (NotNull)
+     * @exception IllegalArgumentException
+     */
+    protected static void assertObjectNotNull(String variableName, Object value) {
+        if (variableName == null) {
+            String msg = "The value should not be null: variableName="
+                    + variableName + " value=" + value;
+            throw new IllegalArgumentException(msg);
+        }
+        if (value == null) {
+            String msg = "The value should not be null: variableName="
+                    + variableName;
+            throw new IllegalArgumentException(msg);
+        }
+    }
+
+    // ----------------------------------------------------------------
+    //                                                    Assert String
+    //                                                    -------------
+    /**
+     * Assert that the entity is not null and not trimmed empty.
+     * @param variableName Variable name. (NotNull)
+     * @param value Value. (NotNull)
+     */
+    protected void assertStringNotNullAndNotTrimmedEmpty(String variableName,
+            String value) {
+        assertObjectNotNull("variableName", variableName);
+        assertObjectNotNull("value", value);
+        if (value.trim().length() == 0) {
+            String msg = "The value should not be empty: variableName="
+                    + variableName + " value=" + value;
+            throw new IllegalArgumentException(msg);
+        }
+    }
+}


Property changes on: announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/BFinder.java
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/BehaviorSelector.java
===================================================================
--- announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/BehaviorSelector.java	                        (rev 0)
+++ announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/BehaviorSelector.java	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,32 @@
+package jp.sf.pal.announcement.db.allcommon;
+
+import jp.sf.pal.announcement.db.allcommon.bhv.BehaviorReadable;
+
+/**
+ * The interface of behavior-selector.
+ * @author DBFlute(AutoGenerator)
+ */
+public interface BehaviorSelector {
+
+    /**
+     * Initialize condition-bean meta data. <br />
+     * If you call this, Hot Deploy of OutsideSql becomes Cool!
+     */
+    public void initializeConditionBeanMetaData();
+
+    /**
+     * Select behavior.
+     * @param <BEHAVIOR_TYPE> The type of behavior.
+     * @param behaviorType Behavior type. (NotNull)
+     * @return Behavior. (NotNull)
+     */
+    public <BEHAVIOR_TYPE extends BehaviorReadable> BEHAVIOR_TYPE select(
+            Class<BEHAVIOR_TYPE> behaviorType);
+
+    /**
+     * Select behavior-readable.
+     * @param tableFlexibleName Table flexible-name. (NotNull)
+     * @return Behavior-readable. (NotNull)
+     */
+    public BehaviorReadable byName(String tableFlexibleName);
+}


Property changes on: announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/BehaviorSelector.java
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/CacheAbstractSelector.java
===================================================================
--- announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/CacheAbstractSelector.java	                        (rev 0)
+++ announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/CacheAbstractSelector.java	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,91 @@
+package jp.sf.pal.announcement.db.allcommon;
+
+import org.seasar.framework.container.S2Container;
+
+/**
+ * The abstract class of cache-selector.
+ * @author DBFlute(AutoGenerator)
+ */
+ @ SuppressWarnings("unchecked")
+public abstract class CacheAbstractSelector {
+
+    // ===================================================================================
+    //                                                                           Attribute
+    //                                                                           =========
+    /** The container of Seasar. */
+    protected S2Container _container;
+
+    // ===================================================================================
+    //                                                                           Component
+    //                                                                           =========
+    public <COMPONENT> COMPONENT getComponent(Class<COMPONENT> componentType) {
+        assertObjectNotNull("componentType", componentType);
+        assertObjectNotNull("_container", _container);
+        return (COMPONENT) _container.getComponent(componentType);
+    }
+
+    // ===================================================================================
+    //                                                                             Destroy
+    //                                                                             =======
+    public void destroy() {
+        _container = null;
+    }
+
+    // ===================================================================================
+    //                                                                              Helper
+    //                                                                              ======
+    protected String initUncap(String str) {
+        return str.substring(0, 1).toLowerCase() + str.substring(1);
+    }
+
+    // ===================================================================================
+    //                                                                              Assert
+    //                                                                              ======
+    // -----------------------------------------------------
+    //                                         Assert Object
+    //                                         -------------
+    /**
+     * Assert that the object is not null.
+     * @param variableName Variable name. (NotNull)
+     * @param value Value. (NotNull)
+     * @exception IllegalArgumentException
+     */
+    protected void assertObjectNotNull(String variableName, Object value) {
+        if (variableName == null) {
+            String msg = "The value should not be null: variableName="
+                    + variableName + " value=" + value;
+            throw new IllegalArgumentException(msg);
+        }
+        if (value == null) {
+            String msg = "The value should not be null: variableName="
+                    + variableName;
+            throw new IllegalArgumentException(msg);
+        }
+    }
+
+    // -----------------------------------------------------
+    //                                         Assert String
+    //                                         -------------
+    /**
+     * Assert that the entity is not null and not trimmed empty.
+     * @param variableName Variable name. (NotNull)
+     * @param value Value. (NotNull)
+     */
+    protected void assertStringNotNullAndNotTrimmedEmpty(String variableName,
+            String value) {
+        assertObjectNotNull("variableName", variableName);
+        assertObjectNotNull("value", value);
+        if (value.trim().length() == 0) {
+            String msg = "The value should not be empty: variableName="
+                    + variableName + " value=" + value;
+            throw new IllegalArgumentException(msg);
+        }
+    }
+
+    // ===================================================================================
+    //                                                                            Accessor
+    //                                                                            ========
+    public void setContainer(S2Container container) {
+        this._container = container;
+    }
+}


Property changes on: announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/CacheAbstractSelector.java
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/CacheBehaviorSelector.java
===================================================================
--- announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/CacheBehaviorSelector.java	                        (rev 0)
+++ announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/CacheBehaviorSelector.java	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,119 @@
+package jp.sf.pal.announcement.db.allcommon;
+
+import java.util.Collection;
+import java.util.Map;
+
+import jp.sf.pal.announcement.db.allcommon.bhv.BehaviorReadable;
+import jp.sf.pal.announcement.db.allcommon.dbmeta.DBMeta;
+import jp.sf.pal.announcement.db.allcommon.dbmeta.DBMetaInstanceHandler;
+import jp.sf.pal.announcement.db.allcommon.util.TraceViewUtil;
+
+/**
+ * The implementation of behavior-selector.
+ * @author DBFlute(AutoGenerator)
+ */
+ @ SuppressWarnings("unchecked")
+public class CacheBehaviorSelector extends CacheAbstractSelector implements
+        BehaviorSelector {
+
+    // ===================================================================================
+    //                                                                          Definition
+    //                                                                          ==========
+    /** Log-instance. */
+    private static final org.apache.commons.logging.Log _log = org.apache.commons.logging.LogFactory
+            .getLog(CacheBehaviorSelector.class);
+
+    // ===================================================================================
+    //                                                                           Attribute
+    //                                                                           =========
+    /** The cache of behavior. (It's the generic hell!) */
+    protected java.util.Map<Class<? extends BehaviorReadable>, BehaviorReadable> _behaviorCache = new java.util.LinkedHashMap<Class<? extends BehaviorReadable>, BehaviorReadable>();
+
+    // ===================================================================================
+    //                                                                          Initialize
+    //                                                                          ==========
+    /**
+     * Initialize condition-bean meta data. <br />
+     * If you call this, Hot Deploy of OutsideSql becomes Cool!
+     */
+    public void initializeConditionBeanMetaData() {
+        final Map<String, DBMeta> dbmetaMap = DBMetaInstanceHandler
+                .getDBMetaMap();
+        final Collection<DBMeta> dbmetas = dbmetaMap.values();
+        long before = 0;
+        if (_log.isDebugEnabled()) {
+            before = System.currentTimeMillis();
+            _log
+                    .debug("/= = = = = = = = = = = = = = = = = initializeConditionBeanMetaData()");
+        }
+        for (DBMeta dbmeta : dbmetas) {
+            BehaviorReadable bhv = byName(dbmeta.getTableDbName());
+            final DaoReadable dao = bhv.getDaoReadable();
+            if (_log.isDebugEnabled()) {
+                _log.debug("[" + dbmeta.getTableDbName() + "]");
+            }
+            dao.initializeDaoMetaData("selectList");
+        }
+        if (_log.isDebugEnabled()) {
+            long after = System.currentTimeMillis();
+            _log.debug("= = = = = = = = = =/ ["
+                    + TraceViewUtil.convertToPerformanceView(after - before)
+                    + "]");
+        }
+    }
+
+    // ===================================================================================
+    //                                                                            Selector
+    //                                                                            ========
+    /**
+     * Select behavior.
+     * @param <BEHAVIOR_TYPE> The type of behavior.
+     * @param behaviorType Behavior type. (NotNull)
+     * @return Behavior. (NotNull)
+     */
+    public <BEHAVIOR_TYPE extends BehaviorReadable> BEHAVIOR_TYPE select(
+            Class<BEHAVIOR_TYPE> behaviorType) {
+        if (_behaviorCache.containsKey(behaviorType)) {
+            return (BEHAVIOR_TYPE) _behaviorCache.get(behaviorType);
+        }
+        final BEHAVIOR_TYPE bhv = (BEHAVIOR_TYPE) getComponent(behaviorType);
+        _behaviorCache.put(behaviorType, bhv);
+        return bhv;
+    }
+
+    /**
+     * Select behavior-readable by name.
+     * @param tableFlexibleName Table flexible-name. (NotNull)
+     * @return Behavior-readable. (NotNull)
+     */
+    public BehaviorReadable byName(String tableFlexibleName) {
+        assertStringNotNullAndNotTrimmedEmpty("tableFlexibleName",
+                tableFlexibleName);
+        final DBMeta dbmeta = DBMetaInstanceHandler
+                .findDBMeta(tableFlexibleName);
+        return select(getBehaviorType(dbmeta));
+    }
+
+    /**
+     * Get behavior-type by dbmeta.
+     * @param dbmeta Dbmeta. (NotNull)
+     * @return Behavior-type. (NotNull)
+     */
+    protected Class<BehaviorReadable> getBehaviorType(DBMeta dbmeta) {
+        final String behaviorTypeName = dbmeta.getBehaviorTypeName();
+        if (behaviorTypeName == null) {
+            String msg = "The dbmeta.getBehaviorTypeName() should not return null: dbmeta="
+                    + dbmeta;
+            throw new IllegalStateException(msg);
+        }
+        final Class<BehaviorReadable> behaviorType;
+        try {
+            behaviorType = (Class<BehaviorReadable>) Class
+                    .forName(behaviorTypeName);
+        } catch (ClassNotFoundException e) {
+            throw new RuntimeException("The class does not exist: "
+                    + behaviorTypeName, e);
+        }
+        return behaviorType;
+    }
+}


Property changes on: announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/CacheBehaviorSelector.java
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/CacheDaoSelector.java
===================================================================
--- announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/CacheDaoSelector.java	                        (rev 0)
+++ announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/CacheDaoSelector.java	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,64 @@
+package jp.sf.pal.announcement.db.allcommon;
+
+import jp.sf.pal.announcement.db.allcommon.dbmeta.DBMeta;
+import jp.sf.pal.announcement.db.allcommon.dbmeta.DBMetaInstanceHandler;
+
+/**
+ * The implementation of dao-selector.
+ * <pre>
+ * Long long ago this object have cache of dao and bhv.
+ * But the cache cause wrong performance when this is initialized.
+ * So now this object don't have cache.
+ * </pre>
+ * @author DBFlute(AutoGenerator)
+ */
+ @ SuppressWarnings("unchecked")
+public class CacheDaoSelector extends CacheAbstractSelector implements
+        DaoSelector {
+
+    // ===================================================================================
+    //                                                                            Selector
+    //                                                                            ========
+    /**
+     * Select dao.
+     * 
+     * @param <DAO_TYPE> The type of behavior.
+     * @param daoType Dao type. (NotNull)
+     * @return Dao. (NotNull)
+     */
+    public <DAO_TYPE extends DaoReadable> DAO_TYPE select(
+            Class<DAO_TYPE> daoType) {
+        return (DAO_TYPE) getComponent(daoType);
+    }
+
+    /**
+     * Select dao-readable by name.
+     * 
+     * @param tableFlexibleName Table flexible name. (NotNull)
+     * @return Dao-readable. (NotNull)
+     */
+    public DaoReadable byName(String tableFlexibleName) {
+        assertStringNotNullAndNotTrimmedEmpty("tableFlexibleName",
+                tableFlexibleName);
+        final DBMeta dbmeta = DBMetaInstanceHandler
+                .findDBMeta(tableFlexibleName);
+        return select(getDaoType(dbmeta));
+    }
+
+    protected Class<DaoReadable> getDaoType(DBMeta dbmeta) {
+        final String daoTypeName = dbmeta.getDaoTypeName();
+        if (daoTypeName == null) {
+            String msg = "The dbmeta.getDaoTypeName() should not return null: dbmeta="
+                    + dbmeta;
+            throw new IllegalStateException(msg);
+        }
+        final Class<DaoReadable> daoType;
+        try {
+            daoType = (Class<DaoReadable>) Class.forName(daoTypeName);
+        } catch (ClassNotFoundException e) {
+            throw new RuntimeException("The class does not exist: "
+                    + daoTypeName, e);
+        }
+        return daoType;
+    }
+}


Property changes on: announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/CacheDaoSelector.java
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/DBFluteConfig.java
===================================================================
--- announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/DBFluteConfig.java	                        (rev 0)
+++ announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/DBFluteConfig.java	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,170 @@
+package jp.sf.pal.announcement.db.allcommon;
+
+import jp.sf.pal.announcement.db.allcommon.jdbc.StatementConfig;
+
+/**
+ * The sigleton class that has generate-meta-data(GenMetaData).
+ * @author DBFlute(AutoGenerator)
+ */
+public class DBFluteConfig {
+
+    // ===================================================================================
+    //                                                                          Definition
+    //                                                                          ==========
+    /** Log instance. */
+    private static final org.apache.commons.logging.Log _log = org.apache.commons.logging.LogFactory
+            .getLog(DBFluteConfig.class);
+
+    /** Singleton instance. */
+    private static final DBFluteConfig _instance = new DBFluteConfig();
+
+    // ===================================================================================
+    //                                                                           Attribute
+    //                                                                           =========
+    protected StatementConfig _defaultStatementConfig;
+
+    protected boolean _conditionBeanFormatSql = true;
+
+    protected boolean _queryLogLevelInfo;
+
+    protected boolean _executeStatusLogLevelInfo;
+
+    protected boolean _internalDebug;
+
+    protected boolean _locked = true;
+
+    // ===================================================================================
+    //                                                                         Constructor
+    //                                                                         ===========
+    /**
+     * Constructor.
+     */
+    private DBFluteConfig() {
+    }
+
+    // ===================================================================================
+    //                                                                           Singleton
+    //                                                                           =========
+    /**
+     * Get instance.
+     * @return Singleton instance. (NotNull)
+     */
+    public static DBFluteConfig getInstance() {
+        return _instance;
+    }
+
+    // ===================================================================================
+    //                                                            Default Statement Config
+    //                                                            ========================
+    public StatementConfig getDefaultStatementConfig() {
+        return _defaultStatementConfig;
+    }
+
+    public void setDefaultStatementConfig(StatementConfig defaultStatementConfig) {
+        assertNotLocked();
+        if (_log.isInfoEnabled()) {
+            _log.info("...Setting defaultStatementConfig: "
+                    + defaultStatementConfig);
+        }
+        _defaultStatementConfig = defaultStatementConfig;
+    }
+
+    // ===================================================================================
+    //                                                            ConditionBean Format Sql
+    //                                                            ========================
+    public boolean isConditionBeanFormatSql() {
+        return _conditionBeanFormatSql;
+    }
+
+    public void setConditionBeanFormatSql(boolean conditionBeanFormatSql) {
+        assertNotLocked();
+        if (_log.isInfoEnabled()) {
+            _log.info("...Setting conditionBeanFormatSql: "
+                    + conditionBeanFormatSql);
+        }
+        _conditionBeanFormatSql = conditionBeanFormatSql;
+    }
+
+    // ===================================================================================
+    //                                                                Query Log Level Info
+    //                                                                ====================
+    public boolean isQueryLogLevelInfo() {
+        return _queryLogLevelInfo;
+    }
+
+    public void setQueryLogLevelInfo(boolean queryLogLevelInfo) {
+        assertNotLocked();
+        if (_log.isInfoEnabled()) {
+            _log.info("...Setting queryLogLevelInfo: " + queryLogLevelInfo);
+        }
+        _queryLogLevelInfo = queryLogLevelInfo;
+    }
+
+    // ===================================================================================
+    //                                                       Execute Status Log Level Info
+    //                                                       =============================
+    public boolean isExecuteStatusLogLevelInfo() {
+        return _executeStatusLogLevelInfo;
+    }
+
+    public void setExecuteStatusLogLevelInfo(boolean executeStatusLogLevelInfo) {
+        assertNotLocked();
+        if (_log.isInfoEnabled()) {
+            _log.info("...Setting executeStatusLogLevelInfo: "
+                    + executeStatusLogLevelInfo);
+        }
+        _executeStatusLogLevelInfo = executeStatusLogLevelInfo;
+    }
+
+    // ===================================================================================
+    //                                                                      Internal Debug
+    //                                                                      ==============
+    public boolean isInternalDebug() {
+        return _internalDebug;
+    }
+
+    public void setInternalDebug(boolean internalDebug) {
+        assertNotLocked();
+        if (_log.isInfoEnabled()) {
+            _log.info("...Setting internalDebug: " + internalDebug);
+        }
+        _internalDebug = internalDebug;
+    }
+
+    // ===================================================================================
+    //                                                                         Config Lock
+    //                                                                         ===========
+    public boolean isLocked() {
+        return _locked;
+    }
+
+    public void lock() {
+        if (_log.isInfoEnabled()) {
+            _log.info("...Locking the config of dbflute!");
+        }
+        _locked = true;
+    }
+
+    public void unlock() {
+        if (_log.isInfoEnabled()) {
+            _log.info("...Unlocking the config of dbflute!");
+        }
+        _locked = false;
+    }
+
+    protected void assertNotLocked() {
+        if (!isLocked()) {
+            return;
+        }
+        String msg = "The config of dbflute is locked! Don't access at this timing!";
+        throw new IllegalStateException(msg);
+    }
+
+    // ===================================================================================
+    //                                                                        Config Clear
+    //                                                                        ============
+    public void clear() {
+        _defaultStatementConfig = null;
+        _internalDebug = false;
+    }
+}
\ No newline at end of file


Property changes on: announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/DBFluteConfig.java
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/DaoReadable.java
===================================================================
--- announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/DaoReadable.java	                        (rev 0)
+++ announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/DaoReadable.java	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,9 @@
+package jp.sf.pal.announcement.db.allcommon;
+
+/**
+ * The interface of dao-readable.
+ * @author DBFlute(AutoGenerator)
+ */
+public interface DaoReadable {
+    public void initializeDaoMetaData(String methodName);// Very Internal Method!
+}


Property changes on: announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/DaoReadable.java
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/DaoSelector.java
===================================================================
--- announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/DaoSelector.java	                        (rev 0)
+++ announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/DaoSelector.java	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,24 @@
+package jp.sf.pal.announcement.db.allcommon;
+
+/**
+ * The interface of dao-selector.
+ * @author DBFlute(AutoGenerator)
+ */
+public interface DaoSelector {
+
+    /**
+     * Select dao.
+     * @param <DAO_TYPE> The type of behavior.
+     * @param daoType Dao type. (NotNull)
+     * @return Dao. (NotNull)
+     */
+    public <DAO_TYPE extends DaoReadable> DAO_TYPE select(
+            Class<DAO_TYPE> daoType);
+
+    /**
+     * Select dao-readable by name.
+     * @param tableFlexibleName Table flexible name. (NotNull)
+     * @return Dao-readable. (NotNull)
+     */
+    public DaoReadable byName(String tableFlexibleName);
+}


Property changes on: announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/DaoSelector.java
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/DaoWritable.java
===================================================================
--- announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/DaoWritable.java	                        (rev 0)
+++ announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/DaoWritable.java	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,59 @@
+package jp.sf.pal.announcement.db.allcommon;
+
+import java.util.List;
+
+/**
+ * The interface of dao-writable.
+ * @author DBFlute(AutoGenerator)
+ */
+public interface DaoWritable extends DaoReadable {
+
+    /**
+     * Insert one entity that the type is entity-interface.
+     * @param entity Entity that the type is entity-interface. (NotNull)
+     * @return Inserted count.
+     */
+    public int create(Entity entity);
+
+    /**
+     * Update one entity that the type is entity-interface.
+     * @param entity Entity that the type is entity-interface. (NotNull)
+     * @return Updated count.
+     */
+    public int modify(Entity entity);
+
+    /**
+     * Update one entity that the type is entity-interface. (modified only)
+     * @param entity Entity that the type is entity-interface. (NotNull)
+     * @return Updated count.
+     */
+    public int modifyModifiedOnly(Entity entity);
+
+    /**
+     * Delete one entity that the type is entity-interface.
+     * @param entity Entity that the type is entity-interface. (NotNull)
+     * @return Deleted count.
+     */
+    public int remove(Entity entity);
+
+    /**
+     * Insert several entities that the type is entity-interface.
+     * @param entityList Entity-list that the type is entity-interface. (NotNull)
+     * @return The array of inserted count.
+     */
+    public int[] createList(List<Entity> entityList);
+
+    /**
+     * Update several entities that the type is entity-interface.
+     * @param entityList Entity-list that the type is entity-interface. (NotNull)
+     * @return The array of updated count.
+     */
+    public int[] modifyList(List<Entity> entityList);
+
+    /**
+     * Delete several entities that the type is entity-interface.
+     * @param entityList Entity-list that the type is entity-interface. (NotNull)
+     * @return The array of deleted count.
+     */
+    public int[] removeList(List<Entity> entityList);
+}


Property changes on: announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/DaoWritable.java
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/Entity.java
===================================================================
--- announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/Entity.java	                        (rev 0)
+++ announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/Entity.java	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,112 @@
+package jp.sf.pal.announcement.db.allcommon;
+
+import java.util.LinkedHashSet;
+import java.util.Set;
+
+import jp.sf.pal.announcement.db.allcommon.dbmeta.DBMeta;
+
+/**
+ * The interface of entity.
+ * @author DBFlute(AutoGenerator)
+ */
+public interface Entity {
+
+    // ===================================================================================
+    //                                                                              DBMeta
+    //                                                                              ======
+    /**
+     * Get the instance of target dbmeta.
+     * @return DBMeta. (NotNull)
+     */
+    public DBMeta getDBMeta();
+
+    // ===================================================================================
+    //                                                                          Table Name
+    //                                                                          ==========
+    /**
+     * Get table DB name.
+     * @return Table DB name. (NotNull)
+     */
+    public String getTableDbName();
+
+    /**
+     * Get table property name.
+     * @return Table property name. (NotNull)
+     */
+    public String getTablePropertyName();
+
+    // ===================================================================================
+    //                                                                       Determination
+    //                                                                       =============
+    /**
+     * Has the value of primary-key?
+     * @return Determination.
+     */
+    public boolean hasPrimaryKeyValue();
+
+    // ===================================================================================
+    //                                                                 Modified Properties
+    //                                                                 ===================
+    /**
+     * Get modified property names. (JavaBeansRule)
+     * @return Modified property names. (NotNull)
+     */
+    public Set<String> getModifiedPropertyNames();
+
+    /**
+     * Clear modified property names.
+     */
+    public void clearModifiedPropertyNames();
+
+    /**
+     * Entity modified properties.
+     */
+    public static class EntityModifiedProperties implements
+            java.io.Serializable {
+
+        /** Serial version UID. (Default) */
+        private static final long serialVersionUID = 1L;
+
+        /** Set of properties. */
+        protected Set<String> _propertiesSet = new LinkedHashSet<String>();
+
+        /**
+         * Add property name. (JavaBeansRule)
+         * @param propertyName Property name. (Nullable)
+         */
+        public void addPropertyName(String propertyName) {
+            _propertiesSet.add(propertyName);
+        }
+
+        /**
+         * Get the set of properties.
+         * @return The set of properties. (NotNull)
+         */
+        public Set<String> getPropertyNames() {
+            return _propertiesSet;
+        }
+
+        /**
+         * Is empty?
+         * @return Determination.
+         */
+        public boolean isEmpty() {
+            return _propertiesSet.isEmpty();
+        }
+
+        /**
+         * Clear the set of properties.
+         */
+        public void clear() {
+            _propertiesSet.clear();
+        }
+
+        /**
+         * Remove property name from the set. (JavaBeansRule)
+         * @param propertyName Property name. (Nullable)
+         */
+        public void remove(String propertyName) {
+            _propertiesSet.remove(propertyName);
+        }
+    }
+}


Property changes on: announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/Entity.java
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/EntityDefinedCommonColumn.java
===================================================================
--- announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/EntityDefinedCommonColumn.java	                        (rev 0)
+++ announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/EntityDefinedCommonColumn.java	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,19 @@
+package jp.sf.pal.announcement.db.allcommon;
+
+/**
+ * The interface of entity defined common column.
+ * @author DBFlute(AutoGenerator)
+ */
+public interface EntityDefinedCommonColumn extends Entity {
+
+    /**
+     * Disable common column auto set up.
+     */
+    public void disableCommonColumnAutoSetup();
+
+    /**
+     * Can the entity set up common column by auto?
+     * @return Determination.
+     */
+    public boolean canCommonColumnAutoSetup();
+}


Property changes on: announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/EntityDefinedCommonColumn.java
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/GenMetaData.java
===================================================================
--- announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/GenMetaData.java	                        (rev 0)
+++ announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/GenMetaData.java	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,252 @@
+package jp.sf.pal.announcement.db.allcommon;
+
+/**
+ * The sigleton class that has generate-meta-data(GenMetaData).
+ * 
+ * @author DBFlute(AutoGenerator)
+ */
+public class GenMetaData {
+
+    /** Singleton instance. */
+    private static final GenMetaData _instance = new GenMetaData();
+
+    /**
+     * Constructor.
+     */
+    private GenMetaData() {
+    }
+
+    /**
+     * Get instance.
+     *
+     * @return Singleton instance.
+     */
+    public static GenMetaData getInstance() {
+        return _instance;
+    }
+
+    // ===================================================================================
+    //                                                                               Basic
+    //                                                                               =====
+    /**
+     * Get the property-value of targetLanguage.
+     *
+     * @return The property-value.
+     */
+    public String getTargetLanguage() {
+        return "java";
+    }
+
+    /**
+     * Get the property-value of templateFileExtension.
+     *
+     * @return The property-value.
+     */
+    public String getTemplateFileExtension() {
+        return "vm";
+    }
+
+    /**
+     * Get the property-value of classFileExtension.
+     *
+     * @return The property-value.
+     */
+    public String getClassFileExtension() {
+        return "java";
+    }
+
+    /**
+     * Get the property-value of templateFileEncoding.
+     *
+     * @return The property-value.
+     */
+    public String getTemplateEncoding() {
+        return "UTF-8";
+    }
+
+    /**
+     * Get the property-value of classAuthor.
+     *
+     * @return The property-value.
+     */
+    public String getClassAuthor() {
+        return "DBFlute(AutoGenerator)";
+    }
+
+    // ===================================================================================
+    //                                                                              Naming
+    //                                                                              ======
+    /**
+     * Is java name of table same as db name? Answer is false!
+     *
+     * @return The property-value.
+     */
+    public boolean isJavaNameOfTableSameAsDbName() {
+        return false;
+    }
+
+    /**
+     * Is java name of column same as db name? Answer is false!
+     *
+     * @return The property-value.
+     */
+    public boolean isJavaNameOfColumnSameAsDbName() {
+        return false;
+    }
+
+    // ===================================================================================
+    //                                                                              Prefix
+    //                                                                              ======
+    /**
+     * Get the property-value of projectPrefix.
+     *
+     * @return The property-value.
+     */
+    public String getProjectPrefix() {
+        return "";
+    }
+
+    /**
+     * Get the property-value of basePrefix.
+     *
+     * @return The property-value.
+     */
+    public String getBasePrefix() {
+        return "Bs";
+    }
+
+    // ===================================================================================
+    //                                                                             Package
+    //                                                                             =======
+    /**
+     * Get the property-value of baseCommonPackage.
+     *
+     * @return The property-value.
+     */
+    public String getBaseCommonPackage() {
+        return "jp.sf.pal.announcement.db.allcommon";
+    }
+
+    /**
+     * Get the property-value of baseBehaviorPackage.
+     *
+     * @return The property-value.
+     */
+    public String getBaseBehaviorPackage() {
+        return "jp.sf.pal.announcement.db.bsbhv";
+    }
+
+    /**
+     * Get the property-value of baseDaoPackage.
+     *
+     * @return The property-value.
+     */
+    public String getBaseDaoPackage() {
+        return "jp.sf.pal.announcement.db.bsdao";
+    }
+
+    /**
+     * Get the property-value of baseEntityPackage.
+     *
+     * @return The property-value.
+     */
+    public String getBaseEntityPackage() {
+        return "jp.sf.pal.announcement.db.bsentity";
+    }
+
+    /**
+     * Get the property-value of conditionBeanPackage.
+     *
+     * @return The property-value.
+     */
+    public String getConditionBeanPackage() {
+        return "jp.sf.pal.announcement.db.cbean";
+    }
+
+    /**
+     * Get the property-value of extendedDaoPackage.
+     *
+     * @return The property-value.
+     */
+    public String getExtendedDaoPackage() {
+        return "jp.sf.pal.announcement.db.exdao";
+    }
+
+    /**
+     * Get the property-value of extendedBehaviorPackage.
+     *
+     * @return The property-value.
+     */
+    public String getExtendedBehaviorPackage() {
+        return "jp.sf.pal.announcement.db.exbhv";
+    }
+
+    /**
+     * Get the property-value of extendedEntityPackage.
+     *
+     * @return The property-value.
+     */
+    public String getExtendedEntityPackage() {
+        return "jp.sf.pal.announcement.db.exentity";
+    }
+
+    // ===================================================================================
+    //                                                                     Optimistic Lock
+    //                                                                     ===============
+    /**
+     * Get the property-value of updateDateFieldName.
+     *
+     * @return The property-value.
+     */
+    public String getUpdateDateFieldName() {
+        return "";
+    }
+
+    /**
+     * Get the property-value of versionNoFieldName.
+     *
+     * @return The property-value.
+     */
+    public String getVersionNoFieldName() {
+        return "";
+    }
+
+    // ===================================================================================
+    //                                                                             Extract
+    //                                                                             =======
+    /**
+     * Get the value of 'extractAcceptStartBrace'.
+     *
+     * @return The property-value. (NotNull)
+     */
+    public String getExtractAcceptStartBrace() {
+        return "@{";
+    }
+
+    /**
+     * Get the value of 'extractAcceptEndBrace'.
+     *
+     * @return The property-value. (NotNull)
+     */
+    public String getExtractAcceptEndBrace() {
+        return "@}";
+    }
+
+    /**
+     * Get the value of 'extractAcceptDelimiter'.
+     *
+     * @return The property-value. (NotNull)
+     */
+    public String getExtractAcceptDelimiter() {
+        return "@;";
+    }
+
+    /**
+     * Get the value of 'extractAcceptEqual'.
+     *
+     * @return The property-value. (NotNull)
+     */
+    public String getExtractAcceptEqual() {
+        return "@=";
+    }
+}


Property changes on: announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/GenMetaData.java
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/InternalMapContext.java
===================================================================
--- announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/InternalMapContext.java	                        (rev 0)
+++ announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/InternalMapContext.java	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,62 @@
+package jp.sf.pal.announcement.db.allcommon;
+
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ * The context of internal map.
+ * 
+ * @author DBFlute(AutoGenerator)
+ */
+public class InternalMapContext {
+
+    // ===================================================================================
+    //                                                                        Thread Local
+    //                                                                        ============
+    /** The thread-local for this. */
+    private static final ThreadLocal<Map<String, Object>> threadLocal = new ThreadLocal<Map<String, Object>>();
+
+    protected static void initialize() {
+        if (threadLocal.get() != null) {
+            return;
+        }
+        threadLocal.set(new HashMap<String, Object>());
+    }
+
+    /**
+     * Get the value of the object by the key.
+     * 
+     * @return The value of the object. (Nullable)
+     */
+    public static Object getObject(String key) {
+        initialize();
+        return threadLocal.get().get(key);
+    }
+
+    /**
+     * Set the value of the object.
+     * 
+     * @param key The key of the object. (NotNull)
+     * @param value The value of the object. (Nullable)
+     */
+    public static void setObject(String key, Object value) {
+        initialize();
+        threadLocal.get().put(key, value);
+    }
+
+    /**
+     * Is existing internal-map-context on thread?
+     * 
+     * @return Determination.
+     */
+    public static boolean isExistInternalMapContextOnThread() {
+        return (threadLocal.get() != null);
+    }
+
+    /**
+     * Clear internal-map-context on thread.
+     */
+    public static void clearInternalMapContextOnThread() {
+        threadLocal.set(null);
+    }
+}


Property changes on: announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/InternalMapContext.java
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/QLog.java
===================================================================
--- announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/QLog.java	                        (rev 0)
+++ announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/QLog.java	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,37 @@
+package jp.sf.pal.announcement.db.allcommon;
+
+/**
+ * @author DBFlute(AutoGenerator)
+ */
+public class QLog {
+
+    // ===================================================================================
+    //                                                                          Definition
+    //                                                                          ==========
+    /** Log instance. */
+    private static final org.apache.commons.logging.Log _log = org.apache.commons.logging.LogFactory
+            .getLog(QLog.class);
+
+    // ===================================================================================
+    //                                                                             Logging
+    //                                                                             =======
+    public static void log(String sql) {// Very Internal
+        if (isQueryLogLevelInfo()) {
+            _log.info(sql);
+        } else {
+            _log.debug(sql);
+        }
+    }
+
+    public static boolean isLogEnabled() {
+        if (isQueryLogLevelInfo()) {
+            return _log.isInfoEnabled();
+        } else {
+            return _log.isDebugEnabled();
+        }
+    }
+
+    protected static boolean isQueryLogLevelInfo() {
+        return DBFluteConfig.getInstance().isQueryLogLevelInfo();
+    }
+}


Property changes on: announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/QLog.java
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/XLog.java
===================================================================
--- announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/XLog.java	                        (rev 0)
+++ announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/XLog.java	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,37 @@
+package jp.sf.pal.announcement.db.allcommon;
+
+/**
+ * @author DBFlute(AutoGenerator)
+ */
+public class XLog {
+
+    // ===================================================================================
+    //                                                                          Definition
+    //                                                                          ==========
+    /** Log instance. */
+    private static final org.apache.commons.logging.Log _log = org.apache.commons.logging.LogFactory
+            .getLog(XLog.class);
+
+    // ===================================================================================
+    //                                                                             Logging
+    //                                                                             =======
+    public static void log(String msg) {// Very Internal
+        if (isExecuteStatusLogLevelInfo()) {
+            _log.info(msg);
+        } else {
+            _log.debug(msg);
+        }
+    }
+
+    public static boolean isLogEnabled() {// Very Internal
+        if (isExecuteStatusLogLevelInfo()) {
+            return _log.isInfoEnabled();
+        } else {
+            return _log.isDebugEnabled();
+        }
+    }
+
+    protected static boolean isExecuteStatusLogLevelInfo() {
+        return DBFluteConfig.getInstance().isExecuteStatusLogLevelInfo();
+    }
+}


Property changes on: announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/XLog.java
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/annotation/OutsideSql.java
===================================================================
--- announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/annotation/OutsideSql.java	                        (rev 0)
+++ announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/annotation/OutsideSql.java	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,18 @@
+package jp.sf.pal.announcement.db.allcommon.annotation;
+
+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;
+
+ @ Inherited
+ @ Retention(RetentionPolicy.RUNTIME)
+ @ Target(ElementType.METHOD)
+public @interface OutsideSql {
+    boolean dynamicBinding() default false;
+
+    boolean offsetByCursor() default false;
+
+    boolean limitByCursor() default false;
+}


Property changes on: announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/annotation/OutsideSql.java
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/bhv/AbstractBehaviorReadable.java
===================================================================
--- announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/bhv/AbstractBehaviorReadable.java	                        (rev 0)
+++ announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/bhv/AbstractBehaviorReadable.java	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,1071 @@
+package jp.sf.pal.announcement.db.allcommon.bhv;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import jp.sf.pal.announcement.db.allcommon.BehaviorSelector;
+import jp.sf.pal.announcement.db.allcommon.DaoSelector;
+import jp.sf.pal.announcement.db.allcommon.Entity;
+import jp.sf.pal.announcement.db.allcommon.bhv.batch.TokenFileOutputOption;
+import jp.sf.pal.announcement.db.allcommon.bhv.batch.TokenFileOutputResult;
+import jp.sf.pal.announcement.db.allcommon.bhv.setup.ValueLabelBox;
+import jp.sf.pal.announcement.db.allcommon.bhv.setup.ValueLabelSetupper;
+import jp.sf.pal.announcement.db.allcommon.cbean.ConditionBean;
+import jp.sf.pal.announcement.db.allcommon.cbean.ConditionBeanContext;
+import jp.sf.pal.announcement.db.allcommon.cbean.ListResultBean;
+import jp.sf.pal.announcement.db.allcommon.cbean.PagingBean;
+import jp.sf.pal.announcement.db.allcommon.cbean.PagingHandler;
+import jp.sf.pal.announcement.db.allcommon.cbean.PagingInvoker;
+import jp.sf.pal.announcement.db.allcommon.cbean.PagingResultBean;
+import jp.sf.pal.announcement.db.allcommon.cbean.outsidesql.OutsideSqlDao;
+import jp.sf.pal.announcement.db.allcommon.cbean.outsidesql.executor.OutsideSqlBasicExecutor;
+import jp.sf.pal.announcement.db.allcommon.dbmeta.info.ColumnInfo;
+import jp.sf.pal.announcement.db.allcommon.helper.token.file.FileMakingHeaderInfo;
+import jp.sf.pal.announcement.db.allcommon.helper.token.file.FileMakingOption;
+import jp.sf.pal.announcement.db.allcommon.helper.token.file.FileMakingSimpleFacade;
+import jp.sf.pal.announcement.db.allcommon.helper.token.file.impl.FileMakingSimpleFacadeImpl;
+
+/**
+ * The abstract class of behavior-readable.
+ * 
+ * @author DBFlute(AutoGenerator)
+ */
+ @ SuppressWarnings("unchecked")
+public abstract class AbstractBehaviorReadable implements BehaviorReadable {
+
+    // ===================================================================================
+    //                                                                           Attribute
+    //                                                                           =========
+    /** Behavior-selector instance. It's basically referred at loadReferrer. (Required for loadReferrer) */
+    protected BehaviorSelector _behaviorSelector;
+
+    /** Dao-selector instance. It's basically referred at loadReferrer. (Required for OutsideSql) */
+    protected DaoSelector _daoSelector;
+
+    // =====================================================================================
+    //                                                                         Basic Get All
+    //                                                                         =============
+    /**
+     * Get count all.
+     * 
+     * @return Count all.
+     */
+    public int getCountAll() {
+        return callGetCountAll();
+    }
+
+    // =====================================================================================
+    //                                                                      Basic Read Count
+    //                                                                      ================
+    /**
+     * The implementation.
+     * 
+     * @param cb Condition-bean. This condition-bean should not be set up about fetch-scope. (NotNull)
+     * @return Read count. (NotNull)
+     */
+    public int readCount(ConditionBean cb) {
+        assertConditionBeanNotNull(cb);
+        return callReadCount(cb);
+    }
+
+    // =====================================================================================
+    //                                                                     Basic Read Entity
+    //                                                                     =================
+    /**
+     * The implementation.
+     * 
+     * @param cb Condition-bean. (NotNull)
+     * @return Read entity. (Nullalble)
+     * @exception jp.sf.pal.announcement.db.allcommon.exception.EntityDuplicatedException When the entity has been duplicated.
+     */
+    public Entity readEntity(ConditionBean cb) {
+        assertConditionBeanNotNull(cb);
+        final java.util.List<Entity> ls = readList(cb);
+        if (ls.isEmpty()) {
+            return null;
+        }
+        assertEntitySelectedAsOne(ls, cb);
+        return (Entity) ls.get(0);
+    }
+
+    /**
+     * The implementation.
+     * 
+     * @param cb Condition-bean. (NotNull)
+     * @return Read entity. (NotNull)
+     * @exception jp.sf.pal.announcement.db.allcommon.exception.EntityAlreadyDeletedException When the entity has already been deleted.
+     * @exception jp.sf.pal.announcement.db.allcommon.exception.EntityDuplicatedException When the entity has been duplicated.
+     */
+    public Entity readEntityWithDeletedCheck(ConditionBean cb) {
+        assertConditionBeanNotNull(cb);
+        final java.util.List<Entity> ls = readList(cb);
+        assertEntityNotDeleted(ls, cb);
+        assertEntitySelectedAsOne(ls, cb);
+        return (Entity) ls.get(0);
+    }
+
+    // =====================================================================================
+    //                                                     Basic Read Entity Internal Helper
+    //                                                     =================================
+    protected <ENTITY_TYPE extends Entity, CB_TYPE extends ConditionBean> ENTITY_TYPE helpSelectEntityInternally(
+            CB_TYPE cb,
+            InternalSelectEntityCallback<ENTITY_TYPE, CB_TYPE> callback) {
+        assertConditionBeanNotNull(cb);
+        cb.checkSafetyResult(1);
+        java.util.List<ENTITY_TYPE> ls = null;
+        try {
+            ls = callback.callbackSelectList(cb);
+        } catch (jp.sf.pal.announcement.db.allcommon.exception.DangerousResultSizeException e) {
+            throwEntityDuplicatedException("{Over safetyMaxResultSize '1'}",
+                    cb, e);
+        }
+        if (ls.isEmpty()) {
+            return null;
+        }
+        assertEntitySelectedAsOne(ls, cb);
+        return (ENTITY_TYPE) ls.get(0);
+    }
+
+    protected static interface InternalSelectEntityCallback<ENTITY_TYPE extends Entity, CB_TYPE extends ConditionBean> {
+        public java.util.List<ENTITY_TYPE> callbackSelectList(CB_TYPE cb);
+    }
+
+    protected <ENTITY_TYPE extends Entity, CB_TYPE extends ConditionBean> ENTITY_TYPE helpSelectEntityWithDeletedCheckInternally(
+            CB_TYPE cb,
+            InternalSelectEntityWithDeletedCheckCallback<ENTITY_TYPE, CB_TYPE> callback) {
+        assertConditionBeanNotNull(cb);
+        cb.checkSafetyResult(1);
+        java.util.List<ENTITY_TYPE> ls = null;
+        try {
+            ls = callback.callbackSelectList(cb);
+        } catch (jp.sf.pal.announcement.db.allcommon.exception.DangerousResultSizeException e) {
+            throwEntityDuplicatedException("{Over safetyMaxResultSize '1'}",
+                    cb, e);
+        }
+        assertEntityNotDeleted(ls, cb);
+        assertEntitySelectedAsOne(ls, cb);
+        return (ENTITY_TYPE) ls.get(0);
+    }
+
+    protected static interface InternalSelectEntityWithDeletedCheckCallback<ENTITY_TYPE extends Entity, CB_TYPE extends ConditionBean> {
+        public java.util.List<ENTITY_TYPE> callbackSelectList(CB_TYPE cb);
+    }
+
+    // =====================================================================================
+    //                                                                       Basic Read List
+    //                                                                       ===============
+    /**
+     * The implementation.
+     * 
+     * @param cb Condition-bean.
+     * @return List-result-bean. If the select result is zero, it returns empty list. (NotNull)
+     */
+    public ListResultBean<Entity> readList(ConditionBean cb) {
+        assertConditionBeanNotNull(cb);
+        return new jp.sf.pal.announcement.db.allcommon.cbean.ResultBeanBuilder<Entity>(
+                getTableDbName()).buildListResultBean(cb, callReadList(cb));
+    }
+
+    /**
+     * The implementation.
+     * 
+     * @param cb Condition-bean. (NotNull)
+     * @return Read page. (NotNull)
+     */
+    public PagingResultBean<Entity> readPage(final ConditionBean cb) {
+        assertConditionBeanNotNull(cb);
+        final PagingInvoker<Entity> invoker = new PagingInvoker<Entity>(
+                getTableDbName());
+        final PagingHandler<Entity> handler = new PagingHandler<Entity>() {
+            public PagingBean getPagingBean() {
+                return cb;
+            }
+
+            public int count() {
+                return readCount(cb);
+            }
+
+            public List<Entity> paging() {
+                return readList(cb);
+            }
+        };
+        return invoker.invokePaging(handler);
+    }
+
+    /**
+     * Assert that record has not been deleted.
+     * 
+     * @param entity Selected entity.
+     * @param searchKey4log Search-key for Logging.
+     * @exception jp.sf.pal.announcement.db.allcommon.exception.EntityAlreadyDeletedException
+     * @deprecated Please use assertEntityNotDeleted().
+     */
+    protected void assertRecordHasNotBeenDeleted(
+            jp.sf.pal.announcement.db.allcommon.Entity entity,
+            Object searchKey4Log) {
+        assertEntityNotDeleted(entity, searchKey4Log);
+    }
+
+    /**
+     * Assert that record has not been deleted.
+     * 
+     * @param ls Selected list.
+     * @param searchKey4Log Search-key for Logging.
+     * @exception jp.sf.pal.announcement.db.allcommon.exception.EntityAlreadyDeletedException
+     * @deprecated Please use assertEntityNotDeleted().
+     */
+    protected void assertRecordHasNotBeenDeleted(java.util.List ls,
+            Object searchKey4Log) {
+        assertEntityNotDeleted(ls, searchKey4Log);
+    }
+
+    /**
+     * Assert that the entity is not deleted.
+     * 
+     * @param entity Selected entity. (Nullable)
+     * @param searchKey4log Search-key for Logging.
+     * @exception jp.sf.pal.announcement.db.allcommon.exception.EntityAlreadyDeletedException When the entity has already been deleted.
+     */
+    protected void assertEntityNotDeleted(
+            jp.sf.pal.announcement.db.allcommon.Entity entity,
+            Object searchKey4Log) {
+        if (entity == null) {
+            throwEntityAlreadyDeletedException(searchKey4Log);
+        }
+    }
+
+    /**
+     * Assert that the entity is not deleted.
+     * 
+     * @param ls Selected list. (Nullable)
+     * @param searchKey4Log Search-key for Logging. (NotNull)
+     * @exception jp.sf.pal.announcement.db.allcommon.exception.EntityAlreadyDeletedException
+     */
+    protected void assertEntityNotDeleted(java.util.List ls,
+            Object searchKey4Log) {
+        if (ls == null || ls.isEmpty()) {
+            throwEntityAlreadyDeletedException(searchKey4Log);
+        }
+    }
+
+    /**
+     * @param ls Selected list.
+     * @param searchKey4Log Search-key for Logging.
+     * @exception jp.sf.pal.announcement.db.allcommon.exception.EntityAlreadyDeletedException
+     * @exception jp.sf.pal.announcement.db.allcommon.exception.EntityDuplicatedException
+     * @deprecated Please use assertEntitySelectedAsOne.
+     */
+    protected void assertRecordHasBeenSelectedAsOne(java.util.List ls,
+            Object searchKey4Log) {
+        assertEntitySelectedAsOne(ls, searchKey4Log);
+    }
+
+    /**
+     * Assert that the entity is selected as one.
+     * 
+     * @param ls Selected list. (NotNull)
+     * @param searchKey4Log Search-key for Logging. (NotNull)
+     * @exception jp.sf.pal.announcement.db.allcommon.exception.EntityAlreadyDeletedException
+     * @exception jp.sf.pal.announcement.db.allcommon.exception.EntityDuplicatedException
+     */
+    protected void assertEntitySelectedAsOne(java.util.List ls,
+            Object searchKey4Log) {
+        if (ls == null || ls.isEmpty()) {
+            throwEntityAlreadyDeletedException(searchKey4Log);
+        }
+        if (ls.size() > 1) {
+            throwEntityDuplicatedException(ls.size() + "", searchKey4Log, null);
+        }
+    }
+
+    private void throwEntityAlreadyDeletedException(Object searchKey4Log) {
+        ConditionBeanContext.throwEntityAlreadyDeletedException(searchKey4Log);
+    }
+
+    private void throwEntityDuplicatedException(String resultCountString,
+            Object searchKey4Log, Throwable cause) {
+        ConditionBeanContext.throwEntityDuplicatedException(resultCountString,
+                searchKey4Log, cause);
+    }
+
+    // ===================================================================================
+    //                                                                      Various Select
+    //                                                                      ==============
+    public OutsideSqlBasicExecutor outsideSql() {
+        assertDaoSelectorNotNull("outsideSql");
+        final OutsideSqlDao outsideSqlDao = _daoSelector
+                .select(OutsideSqlDao.class);
+        return new OutsideSqlBasicExecutor(outsideSqlDao, getTableDbName());
+    }
+
+    private void assertDaoSelectorNotNull(String methodName) {
+        if (_daoSelector == null) {
+            String msg = "Look! Read the message below." + getLineSeparator();
+            msg = msg
+                    + "/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *"
+                    + getLineSeparator();
+            msg = msg
+                    + "Not found the selector of dao as behavior's attributed!"
+                    + getLineSeparator();
+            msg = msg + getLineSeparator();
+            msg = msg + "[Advice]" + getLineSeparator();
+            msg = msg
+                    + "Please confirm the definition of the selector at your 'dbflute.dicon'."
+                    + getLineSeparator();
+            msg = msg + "It is precondition that '" + methodName
+                    + "()' needs the selector instance." + getLineSeparator();
+            msg = msg + getLineSeparator();
+            msg = msg + "[Your Behavior's Attributes]" + getLineSeparator();
+            msg = msg + "  _behaviorSelector  : " + _behaviorSelector
+                    + getLineSeparator();
+            msg = msg + "  _daoSelector       : " + _daoSelector
+                    + getLineSeparator();
+            msg = msg + "* * * * * * * * * */" + getLineSeparator();
+            throw new IllegalStateException(msg);
+        }
+    }
+
+    /**
+     * Create value-label list.
+     * @param <ENTITY> The type of entity.
+     * @param cb Condition-bean. (NotNull)
+     * @param valueLabelSetupper Value-label-setupper. (NotNull)
+     * @return Value-label list. (NotNull)
+     */
+    public <ENTITY extends Entity> List<java.util.Map<String, Object>> createValueLabelList(
+            List<ENTITY> entityList,
+            ValueLabelSetupper<ENTITY> valueLabelSetupper) {
+        final List<Map<String, Object>> valueLabelList = new ArrayList<Map<String, Object>>();
+        final ValueLabelBox box = new ValueLabelBox();
+        for (ENTITY entity : entityList) {
+            final Map<String, Object> valueLabel = new HashMap<String, Object>();
+            valueLabelSetupper.setup(box, entity);
+            valueLabel.put("value", box.getValue());
+            valueLabel.put("label", box.getLabel());
+            valueLabelList.add(valueLabel);
+        }
+        return valueLabelList;
+    }
+
+    // ===================================================================================
+    //                                                                            Sequence
+    //                                                                            ========
+    /**
+     * The implementation.
+     * 
+     * @return The value of sequence. (NotNull)
+     */
+    public java.math.BigDecimal readNextVal() {
+        try {
+            final java.lang.reflect.Method method = getClass().getMethod(
+                    "selectNextVal", new Class[] {});
+            Object sequenceObject = method.invoke(this, new Object[] {});
+            if (sequenceObject instanceof java.math.BigDecimal) {
+                return (java.math.BigDecimal) sequenceObject;
+            }
+            return (java.math.BigDecimal) helpConvertingSequenceObject(
+                    java.math.BigDecimal.class, sequenceObject);
+        } catch (NoSuchMethodException e) {
+            throw new RuntimeException("The table does not have sequence: "
+                    + getTableDbName(), e);
+        } catch (Exception e) {
+            throw new RuntimeException(
+                    "The selectNextVal() of the table threw the exception: "
+                            + getTableDbName(), e);
+        }
+    }
+
+    protected Object helpConvertingSequenceObject(Class resultClass,
+            Object sequenceObject) {
+        try {
+            final java.lang.reflect.Constructor constructor = resultClass
+                    .getConstructor(new Class[] { String.class });
+            return constructor.newInstance(new Object[] { sequenceObject
+                    .toString() });
+        } catch (NoSuchMethodException e) {
+        } catch (Exception e) {
+            throw new RuntimeException(
+                    "The readNextVal() of the table threw the exception: "
+                            + getTableDbName(), e);
+        }
+        try {
+            final java.lang.reflect.Method method = resultClass.getMethod(
+                    "valueOf", new Class[] { long.class });
+            return method.invoke(null, new Object[] { Long
+                    .valueOf(sequenceObject.toString()) });
+        } catch (NoSuchMethodException e) {
+        } catch (Exception e) {
+            throw new RuntimeException(
+                    "The readNextVal() of the table threw the exception: "
+                            + getTableDbName(), e);
+        }
+        String msg = "Cannot convert sequenceObject to resultClass:";
+        msg = msg + " resultClass=" + resultClass + " sequenceObjectType="
+                + sequenceObject.getClass();
+        throw new IllegalStateException(msg);
+    }
+
+    // ===================================================================================
+    //                                                       Load Referrer Internal Helper
+    //                                                       =============================
+    /**
+     * @param <LOCAL_ENTITY_TYPE> The type of base entity.
+     * @param <PK_TYPE> The type of primary key.
+     * @param <REFERRER_CB_TYPE> The type of referrer condition-bean.
+     * @param <REFERRER_ENTITY_TYPE> The type of referrer entity.
+     * @param localEntityList The list of local entity. (NotNull)
+     * @param loadReferrerOption The option of loadReferrer. (NotNull)
+     * @param callback The internal call-back of loadReferrer. (NotNull) 
+     */
+    protected <LOCAL_ENTITY_TYPE extends Entity, PK_TYPE, REFERRER_CB_TYPE extends ConditionBean, REFERRER_ENTITY_TYPE extends Entity> void helpLoadRefererInternally(
+            java.util.List<LOCAL_ENTITY_TYPE> localEntityList,
+            jp.sf.pal.announcement.db.allcommon.bhv.load.LoadRefererOption<REFERRER_CB_TYPE, REFERRER_ENTITY_TYPE> loadReferrerOption,
+            InternalLoadRefererCallback<LOCAL_ENTITY_TYPE, PK_TYPE, REFERRER_CB_TYPE, REFERRER_ENTITY_TYPE> callback) {
+        doHelpLoadReferrerInternally(localEntityList, loadReferrerOption,
+                callback);
+    }// Cannot deprecated because someone who overrides this method exists.
+
+    /**
+     * Help load referrer internally. <br />
+     * About internal policy, the value of primary key(and others too) is treated as CaseInsensitive.
+     * 
+     * @param <LOCAL_ENTITY_TYPE> The type of base entity.
+     * @param <PK_TYPE> The type of primary key.
+     * @param <REFERRER_CB_TYPE> The type of referrer condition-bean.
+     * @param <REFERRER_ENTITY_TYPE> The type of referrer entity.
+     * @param localEntityList The list of local entity. (NotNull)
+     * @param loadReferrerOption The option of loadReferrer. (NotNull)
+     * @param callback The internal call-back of loadReferrer. (NotNull) 
+     */
+    protected <LOCAL_ENTITY_TYPE extends Entity, PK_TYPE, REFERRER_CB_TYPE extends ConditionBean, REFERRER_ENTITY_TYPE extends Entity> void helpLoadReferrerInternally(
+            java.util.List<LOCAL_ENTITY_TYPE> localEntityList,
+            jp.sf.pal.announcement.db.allcommon.bhv.load.LoadReferrerOption<REFERRER_CB_TYPE, REFERRER_ENTITY_TYPE> loadReferrerOption,
+            final InternalLoadReferrerCallback<LOCAL_ENTITY_TYPE, PK_TYPE, REFERRER_CB_TYPE, REFERRER_ENTITY_TYPE> callback) {
+        final InternalLoadRefererCallback<LOCAL_ENTITY_TYPE, PK_TYPE, REFERRER_CB_TYPE, REFERRER_ENTITY_TYPE> compatibleCallback = new InternalLoadRefererCallback<LOCAL_ENTITY_TYPE, PK_TYPE, REFERRER_CB_TYPE, REFERRER_ENTITY_TYPE>() {
+            public PK_TYPE callbackBase_getPrimaryKeyValue(
+                    LOCAL_ENTITY_TYPE entity) {
+                return callback.callbackBase_getPrimaryKeyValue(entity);
+            }
+
+            public void callbackBase_setReferrerList(LOCAL_ENTITY_TYPE entity,
+                    List<REFERRER_ENTITY_TYPE> referrerList) {
+                callback.callbackBase_setReferrerList(entity, referrerList);
+            }
+
+            public PK_TYPE callbackReferrer_getForeignKeyValue(
+                    REFERRER_ENTITY_TYPE entity) {
+                return callback.callbackReferrer_getForeignKeyValue(entity);
+            }
+
+            public REFERRER_CB_TYPE callbackReferrer_newMyConditionBean() {
+                return callback.callbackReferrer_newMyConditionBean();
+            }
+
+            public void callbackReferrer_queryAddOrderByForeignKeyAsc(
+                    REFERRER_CB_TYPE cb) {
+                callback.callbackReferrer_queryAddOrderByForeignKeyAsc(cb);
+            }
+
+            public void callbackReferrer_queryForeignKeyInScope(
+                    REFERRER_CB_TYPE cb, List<PK_TYPE> pkList) {
+                callback.callbackReferrer_queryForeignKeyInScope(cb, pkList);
+            }
+
+            public List<REFERRER_ENTITY_TYPE> callbackReferrer_selectList(
+                    REFERRER_CB_TYPE cb) {
+                return callback.callbackReferrer_selectList(cb);
+            }
+
+            public void callbackReferrer_setForeignEntity(
+                    REFERRER_ENTITY_TYPE referrerEntity,
+                    LOCAL_ENTITY_TYPE localEntity) {
+                callback.callbackReferrer_setForeignEntity(referrerEntity,
+                        localEntity);
+            }
+        };
+        helpLoadRefererInternally(
+                localEntityList,
+                new jp.sf.pal.announcement.db.allcommon.bhv.load.LoadRefererOption<REFERRER_CB_TYPE, REFERRER_ENTITY_TYPE>(
+                        loadReferrerOption), compatibleCallback);
+    }
+
+    /**
+     * Help load referrer internally. <br />
+     * About internal policy, the value of primary key(and others too) is treated as CaseInsensitive.
+     * 
+     * @param <LOCAL_ENTITY_TYPE> The type of base entity.
+     * @param <PK_TYPE> The type of primary key.
+     * @param <REFERRER_CB_TYPE> The type of referrer condition-bean.
+     * @param <REFERRER_ENTITY_TYPE> The type of referrer entity.
+     * @param localEntityList The list of local entity. (NotNull)
+     * @param loadReferrerOption The option of loadReferrer. (NotNull)
+     * @param callback The internal call-back of loadReferrer. (NotNull) 
+     */
+    protected <LOCAL_ENTITY_TYPE extends Entity, PK_TYPE, REFERRER_CB_TYPE extends ConditionBean, REFERRER_ENTITY_TYPE extends Entity> void doHelpLoadReferrerInternally(
+            java.util.List<LOCAL_ENTITY_TYPE> localEntityList,
+            jp.sf.pal.announcement.db.allcommon.bhv.load.LoadReferrerOption<REFERRER_CB_TYPE, REFERRER_ENTITY_TYPE> loadReferrerOption,
+            InternalLoadReferrerCallback<LOCAL_ENTITY_TYPE, PK_TYPE, REFERRER_CB_TYPE, REFERRER_ENTITY_TYPE> callback) {
+
+        // - - - - - - - - - - -
+        // Assert pre-condition
+        // - - - - - - - - - - -
+        assertBehaviorSelectorNotNull("loadReferrer");
+        assertObjectNotNull("localEntityList", localEntityList);
+        assertObjectNotNull("loadReferrerOption", loadReferrerOption);
+        if (localEntityList.isEmpty()) {
+            return;
+        }
+
+        // - - - - - - - - - - - - - -
+        // Prepare temporary container
+        // - - - - - - - - - - - - - -
+        final java.util.Map<PK_TYPE, LOCAL_ENTITY_TYPE> pkBaseEntityMap = new java.util.LinkedHashMap<PK_TYPE, LOCAL_ENTITY_TYPE>();
+        final java.util.List<PK_TYPE> pkList = new java.util.ArrayList<PK_TYPE>();
+        for (LOCAL_ENTITY_TYPE localEntity : localEntityList) {
+            final PK_TYPE primaryKeyValue = callback
+                    .callbackBase_getPrimaryKeyValue(localEntity);
+            pkList.add(callback.callbackBase_getPrimaryKeyValue(localEntity));
+            pkBaseEntityMap.put(toLowerCasePrimaryKeyIfString(primaryKeyValue),
+                    localEntity);
+        }
+
+        // - - - - - - - - - - - - - - - -
+        // Prepare referrer condition bean
+        // - - - - - - - - - - - - - - - -
+        final REFERRER_CB_TYPE cb;
+        if (loadReferrerOption.getReferrerConditionBean() != null) {
+            cb = loadReferrerOption.getReferrerConditionBean();
+        } else {
+            cb = callback.callbackReferrer_newMyConditionBean();
+        }
+
+        // - - - - - - - - - - - - - -
+        // Select the list of referrer
+        // - - - - - - - - - - - - - -
+        callback.callbackReferrer_queryForeignKeyInScope(cb, pkList);
+        loadReferrerOption
+                .delegateKeyConditionExchangingFirstWhereClauseForLastOne(cb);
+        if (!loadReferrerOption.isStopOrderByKey()) {
+            callback.callbackReferrer_queryAddOrderByForeignKeyAsc(cb);
+            cb.getSqlComponentOfOrderByClause()
+                    .exchangeFirstOrderByElementForLastOne();
+        }
+        loadReferrerOption.delegateConditionBeanSettingUp(cb);
+        final java.util.List<REFERRER_ENTITY_TYPE> referrerList = callback
+                .callbackReferrer_selectList(cb);
+        loadReferrerOption.delegateEntitySettingUp(referrerList);
+
+        // - - - - - - - - - - - - - - - - - - - - - - - -
+        // Create the map of {primary key / referrer list}
+        // - - - - - - - - - - - - - - - - - - - - - - - -
+        final java.util.Map<PK_TYPE, java.util.List<REFERRER_ENTITY_TYPE>> pkReffererListMap = new java.util.LinkedHashMap<PK_TYPE, java.util.List<REFERRER_ENTITY_TYPE>>();
+        for (REFERRER_ENTITY_TYPE referrerEntity : referrerList) {
+            final PK_TYPE referrerListKey;
+            {
+                final PK_TYPE foreignKeyValue = callback
+                        .callbackReferrer_getForeignKeyValue(referrerEntity);
+                referrerListKey = toLowerCasePrimaryKeyIfString(foreignKeyValue);
+            }
+            if (!pkReffererListMap.containsKey(referrerListKey)) {
+                pkReffererListMap.put(referrerListKey,
+                        new java.util.ArrayList<REFERRER_ENTITY_TYPE>());
+            }
+            (pkReffererListMap.get(referrerListKey)).add(referrerEntity);
+
+            // for Reverse Reference.
+            final LOCAL_ENTITY_TYPE localEntity = pkBaseEntityMap
+                    .get(referrerListKey);
+            callback.callbackReferrer_setForeignEntity(referrerEntity,
+                    localEntity);
+        }
+
+        // - - - - - - - - - - - - - - - - - -
+        // Relate referrer list to base entity
+        // - - - - - - - - - - - - - - - - - -
+        for (LOCAL_ENTITY_TYPE localEntity : localEntityList) {
+            final PK_TYPE referrerListKey;
+            {
+                final PK_TYPE primaryKey = callback
+                        .callbackBase_getPrimaryKeyValue(localEntity);
+                referrerListKey = toLowerCasePrimaryKeyIfString(primaryKey);
+            }
+            if (pkReffererListMap.containsKey(referrerListKey)) {
+                callback.callbackBase_setReferrerList(localEntity,
+                        pkReffererListMap.get(referrerListKey));
+            } else {
+                callback.callbackBase_setReferrerList(localEntity,
+                        new java.util.ArrayList<REFERRER_ENTITY_TYPE>());
+            }
+        }
+    }
+
+    /**
+     * To lower case for primary key if the value is string.
+     * 
+     * @param <PK_TYPE> The type of primary key.
+     * @param value The value of primary key. (Nullable)
+     * @return The value of primary key. (Nullable)
+     */
+    protected <PK_TYPE> PK_TYPE toLowerCasePrimaryKeyIfString(PK_TYPE value) {
+        return (PK_TYPE) toLowerCaseIfString(value);
+    }
+
+    /**
+     * @param <LOCAL_ENTITY_TYPE> The type of base entity.
+     * @param <PK_TYPE> The type of primary key.
+     * @param <REFERRER_CB_TYPE> The type of referrer condition-bean.
+     * @param <REFERRER_ENTITY_TYPE> The type of referrer entity.
+     */
+    protected static interface InternalLoadRefererCallback<LOCAL_ENTITY_TYPE extends Entity, PK_TYPE, REFERRER_CB_TYPE extends ConditionBean, REFERRER_ENTITY_TYPE extends Entity>
+            extends
+            InternalLoadReferrerCallback<LOCAL_ENTITY_TYPE, PK_TYPE, REFERRER_CB_TYPE, REFERRER_ENTITY_TYPE> {
+    }
+
+    /**
+     * @param <LOCAL_ENTITY_TYPE> The type of base entity.
+     * @param <PK_TYPE> The type of primary key.
+     * @param <REFERRER_CB_TYPE> The type of referrer conditionBean.
+     * @param <REFERRER_ENTITY_TYPE> The type of referrer entity.
+     */
+    protected static interface InternalLoadReferrerCallback<LOCAL_ENTITY_TYPE extends Entity, PK_TYPE, REFERRER_CB_TYPE extends ConditionBean, REFERRER_ENTITY_TYPE extends Entity> {
+        // For Base
+        public PK_TYPE callbackBase_getPrimaryKeyValue(LOCAL_ENTITY_TYPE entity);
+
+        public void callbackBase_setReferrerList(LOCAL_ENTITY_TYPE entity,
+                java.util.List<REFERRER_ENTITY_TYPE> referrerList);
+
+        // For Referrer
+        public REFERRER_CB_TYPE callbackReferrer_newMyConditionBean();
+
+        public void callbackReferrer_queryForeignKeyInScope(
+                REFERRER_CB_TYPE cb, java.util.List<PK_TYPE> pkList);
+
+        public void callbackReferrer_queryAddOrderByForeignKeyAsc(
+                REFERRER_CB_TYPE cb);
+
+        public java.util.List<REFERRER_ENTITY_TYPE> callbackReferrer_selectList(
+                REFERRER_CB_TYPE cb);
+
+        public PK_TYPE callbackReferrer_getForeignKeyValue(
+                REFERRER_ENTITY_TYPE entity);
+
+        public void callbackReferrer_setForeignEntity(
+                REFERRER_ENTITY_TYPE referrerEntity,
+                LOCAL_ENTITY_TYPE localEntity);
+    }
+
+    private void assertBehaviorSelectorNotNull(String methodName) {
+        if (_behaviorSelector == null) {
+            String msg = "Look! Read the message below." + getLineSeparator();
+            msg = msg
+                    + "/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *"
+                    + getLineSeparator();
+            msg = msg
+                    + "Not found the selector of behavior as behavior's attributed!"
+                    + getLineSeparator();
+            msg = msg + getLineSeparator();
+            msg = msg + "[Advice]" + getLineSeparator();
+            msg = msg
+                    + "Please confirm the definition of the selector at your 'dbflute.dicon'."
+                    + getLineSeparator();
+            msg = msg + "It is precondition that '" + methodName
+                    + "()' needs the selector instance." + getLineSeparator();
+            msg = msg + getLineSeparator();
+            msg = msg + "[Your Behavior's Attributes]" + getLineSeparator();
+            msg = msg + "  _behaviorSelector  : " + _behaviorSelector
+                    + getLineSeparator();
+            msg = msg + "  _daoSelector       : " + _daoSelector
+                    + getLineSeparator();
+            msg = msg + "* * * * * * * * * */" + getLineSeparator();
+            throw new IllegalStateException(msg);
+        }
+    }
+
+    // ===================================================================================
+    //                                                             Pullout Internal Helper
+    //                                                             =======================
+    protected <LOCAL_ENTITY_TYPE extends Entity, FOREIGN_ENTITY_TYPE extends Entity> java.util.List<FOREIGN_ENTITY_TYPE> helpPulloutInternally(
+            java.util.List<LOCAL_ENTITY_TYPE> localEntityList,
+            InternalPulloutCallback<LOCAL_ENTITY_TYPE, FOREIGN_ENTITY_TYPE> callback) {
+        assertObjectNotNull("localEntityList", localEntityList);
+        final java.util.Set<FOREIGN_ENTITY_TYPE> foreignSet = new java.util.LinkedHashSet<FOREIGN_ENTITY_TYPE>();
+        for (LOCAL_ENTITY_TYPE entity : localEntityList) {
+            final FOREIGN_ENTITY_TYPE foreignEntity = callback
+                    .callbackGetForeignEntity(entity);
+            if (foreignEntity == null || foreignSet.contains(foreignEntity)) {
+                continue;
+            }
+            foreignSet.add(foreignEntity);
+        }
+        return new java.util.ArrayList<FOREIGN_ENTITY_TYPE>(foreignSet);
+    }
+
+    protected static interface InternalPulloutCallback<LOCAL_ENTITY_TYPE extends Entity, FOREIGN_ENTITY_TYPE extends Entity> {
+        public FOREIGN_ENTITY_TYPE callbackGetForeignEntity(
+                LOCAL_ENTITY_TYPE entity);
+    }
+
+    // ===================================================================================
+    //                                                                          Token File
+    //                                                                          ==========
+    public TokenFileOutputExecutor tokenFileOutput()
+            throws java.io.FileNotFoundException, java.io.IOException {
+        return new TokenFileOutputExecutor();
+    }
+
+    public class TokenFileOutputExecutor {
+
+        /**
+         * Output token-file from this table records.
+         * 
+         * @param cb Condition-bean. (NotNull)
+         * @param filename Name of the file. (NotNull and NotEmpty)
+         * @param tokenFileOutputOption token-file-output-option. (NotNull and Required{delimiter and encoding})
+         * @return Token-file-output-result. (NotNull)
+         * @throws java.io.FileNotFoundException
+         * @throws java.io.IOException
+         */
+        public TokenFileOutputResult outputTokenFile(ConditionBean cb,
+                String filename, TokenFileOutputOption tokenFileOutputOption)
+                throws java.io.FileNotFoundException, java.io.IOException {
+            assertConditionBeanNotNull(cb);
+            assertStringNotNullAndNotTrimmedEmpty("filename", filename);
+            assertObjectNotNull("tokenFileOutputOption", tokenFileOutputOption);
+
+            final java.util.List<Entity> ls = readList(cb);
+            java.util.List<java.util.List<String>> rowList = new java.util.ArrayList<java.util.List<String>>();
+            for (java.util.Iterator ite = ls.iterator(); ite.hasNext();) {
+                final Entity entity = (Entity) ite.next();
+                final java.util.List<String> valueList = getDBMeta()
+                        .convertToColumnStringValueList(entity);
+                rowList.add(valueList);
+            }
+            final FileMakingSimpleFacade fileMakingSimpleFacade = new FileMakingSimpleFacadeImpl();
+            final FileMakingOption fileMakingOption = tokenFileOutputOption
+                    .getFileMakingOption();
+            final FileMakingHeaderInfo fileMakingHeaderInfo = new FileMakingHeaderInfo();
+            final java.util.List<String> columnDbNameList = new java.util.ArrayList<String>();
+            for (final java.util.Iterator ite = getDBMeta().getColumnInfoList()
+                    .iterator(); ite.hasNext();) {
+                final ColumnInfo columnInfo = (ColumnInfo) ite.next();
+                columnDbNameList.add(columnInfo.getColumnDbName());
+            }
+            fileMakingHeaderInfo.setColumnNameList(columnDbNameList);
+            fileMakingOption.setFileMakingHeaderInfo(fileMakingHeaderInfo);
+            fileMakingSimpleFacade.makeFromRowList(filename, rowList,
+                    fileMakingOption);
+            final TokenFileOutputResult tokeFileOutputResult = new TokenFileOutputResult();
+            tokeFileOutputResult.setSelectedList(ls);
+            return tokeFileOutputResult;
+        }
+    }
+
+    // ===================================================================================
+    //                                                                     Delegate Method
+    //                                                                     ===============
+    /**
+     * The implementation.
+     * 
+     * @return All count.
+     */
+    protected int callGetCountAll() {
+        final java.lang.reflect.Method mtd = getMethod(getDaoReadable()
+                .getClass(), "getCountAll", new Class[] {});
+        final Object result = invoke(mtd, getDaoReadable(), new Object[] {});
+        return ((Integer) result).intValue();
+    }
+
+    /**
+     * The implementation.
+     * 
+     * @return All list. (NotNull)
+     */
+    protected java.util.List<Entity> callGetListAll() {
+        final java.lang.reflect.Method mtd = getMethod(getDaoReadable()
+                .getClass(), "getListAll", new Class[] {});
+        final Object result = invoke(mtd, getDaoReadable(), new Object[] {});
+        return (java.util.List<Entity>) result;
+    }
+
+    /**
+     * The implementation.
+     * 
+     * @param cb Condition-bean that the type is condition-bean-interface. (NotNull)
+     * @return Read count. (NotNull)
+     */
+    protected int callReadCount(ConditionBean cb) {
+        assertConditionBeanNotNull(cb);
+        final Class[] types = new Class[] { cb.getClass() };
+        final java.lang.reflect.Method mtd = getMethod(getDaoReadable()
+                .getClass(), "selectCount", types);
+        final Object result = invoke(mtd, getDaoReadable(), new Object[] { cb });
+        return ((Integer) result).intValue();
+    }
+
+    /**
+     * The implementation.
+     * 
+     * @param cb Condition-bean that the type is condition-bean-interface. (NotNull)
+     * @return Read entity. If the select result is zero, it returns null. (Nullable)
+     */
+    protected Entity callReadEntity(ConditionBean cb) {
+        assertConditionBeanNotNull(cb);
+        final Class[] types = new Class[] { cb.getClass() };
+        final java.lang.reflect.Method mtd = getMethod(getDaoReadable()
+                .getClass(), "selectEntity", types);
+        final Object result = invoke(mtd, getDaoReadable(), new Object[] { cb });
+        return (Entity) result;
+    }
+
+    /**
+     * The implementation.
+     * 
+     * @param cb Condition-bean that the type is condition-bean-interface. (NotNull)
+     * @return Read list. If the select result is zero, it returns empty list. (NotNull)
+     */
+    protected java.util.List<Entity> callReadList(ConditionBean cb) {
+        assertConditionBeanNotNull(cb);
+        final Class[] types = new Class[] { cb.getClass() };
+        final java.lang.reflect.Method mtd = getMethod(getDaoReadable()
+                .getClass(), "selectList", types);
+        final Object result = invoke(mtd, getDaoReadable(), new Object[] { cb });
+        return (java.util.List<Entity>) result;
+    }
+
+    private java.lang.reflect.Method getMethod(Class clazz, String methodName,
+            Class[] argTypes) {
+        try {
+            return clazz.getMethod(methodName, argTypes);
+        } catch (NoSuchMethodException ex) {
+            String msg = "class=" + clazz + " method=" + methodName + "-"
+                    + java.util.Arrays.asList(argTypes);
+            throw new RuntimeException(msg, ex);
+        }
+    }
+
+    private Object invoke(java.lang.reflect.Method method, Object target,
+            Object[] args) {
+        try {
+            return method.invoke(target, args);
+        } catch (java.lang.reflect.InvocationTargetException ex) {
+            Throwable t = ex.getCause();
+            if (t instanceof RuntimeException) {
+                throw (RuntimeException) t;
+            }
+            if (t instanceof Error) {
+                throw (Error) t;
+            }
+            String msg = "target=" + target + " method=" + method + "-"
+                    + java.util.Arrays.asList(args);
+            throw new RuntimeException(msg, ex);
+        } catch (IllegalAccessException ex) {
+            String msg = "target=" + target + " method=" + method + "-"
+                    + java.util.Arrays.asList(args);
+            throw new RuntimeException(msg, ex);
+        }
+    }
+
+    // ===================================================================================
+    //                                                                Optimistic Lock Info
+    //                                                                ====================
+    protected abstract boolean hasVersionNoValue(Entity entity);
+
+    protected abstract boolean hasUpdateDateValue(Entity entity);
+
+    // ===================================================================================
+    //                                                                              Helper
+    //                                                                              ======
+    /**
+     * To lower case if the type is String.
+     * 
+     * @param obj Object. (Nullable)
+     * @return Lower object. (Nullable)
+     */
+    protected Object toLowerCaseIfString(Object obj) {
+        if (obj != null && obj instanceof String) {
+            return ((String) obj).toLowerCase();
+        }
+        return obj;
+    }
+
+    /**
+     * Get the value of line separator.
+     * 
+     * @return The value of line separator. (NotNull)
+     */
+    protected String getLineSeparator() {
+        return System.getProperty("line.separator");
+    }
+
+    protected <ENTITY_TYPE extends Entity> ENTITY_TYPE helpDowncastInternally(
+            Entity entity, Class<ENTITY_TYPE> clazz) {
+        assertObjectNotNull("entity", entity);
+        assertObjectNotNull("clazz", clazz);
+        try {
+            return (ENTITY_TYPE) entity;
+        } catch (ClassCastException e) {
+            String msg = "The entity should be " + clazz.getSimpleName()
+                    + " but it was: " + entity.getClass();
+            throw new RuntimeException(msg, e);
+        }
+    }
+
+    // ----------------------------------------------------------------
+    //                                                    Assert Object
+    //                                                    -------------
+    /**
+     * Assert that the object is not null.
+     * 
+     * @param variableName Variable name. (NotNull)
+     * @param value Value. (NotNull)
+     * @exception IllegalArgumentException
+     */
+    protected void assertObjectNotNull(String variableName, Object value) {
+        if (variableName == null) {
+            String msg = "The value should not be null: variableName="
+                    + variableName + " value=" + value;
+            throw new IllegalArgumentException(msg);
+        }
+        if (value == null) {
+            String msg = "The value should not be null: variableName="
+                    + variableName;
+            throw new IllegalArgumentException(msg);
+        }
+    }
+
+    /**
+     * Assert that the entity is not null.
+     * 
+     * @param entity Entity. (NotNull)
+     */
+    protected void assertEntityNotNull(Entity entity) {
+        assertObjectNotNull("entity", entity);
+    }
+
+    /**
+     * Assert that the condition-bean is not null.
+     * 
+     * @param cb Condition-bean. (NotNull)
+     */
+    protected void assertConditionBeanNotNull(
+            jp.sf.pal.announcement.db.allcommon.cbean.ConditionBean cb) {
+        assertObjectNotNull("cb", cb);
+    }
+
+    /**
+     * Assert that the entity has primary-key value.
+     * 
+     * @param entity Entity. (NotNull)
+     */
+    protected void assertEntityNotNullAndHasPrimaryKeyValue(Entity entity) {
+        assertEntityNotNull(entity);
+        if (!entity.hasPrimaryKeyValue()) {
+            String msg = "The entity must should primary-key: entity=" + entity;
+            throw new IllegalArgumentException(msg + entity);
+        }
+    }
+
+    // ----------------------------------------------------------------
+    //                                                    Assert String
+    //                                                    -------------
+    /**
+     * Assert that the entity is not null and not trimmed empty.
+     * 
+     * @param variableName Variable name. (NotNull)
+     * @param value Value. (NotNull)
+     */
+    protected void assertStringNotNullAndNotTrimmedEmpty(String variableName,
+            String value) {
+        assertObjectNotNull("variableName", variableName);
+        assertObjectNotNull(variableName, value);
+        if (value.trim().length() == 0) {
+            String msg = "The value should not be empty: variableName="
+                    + variableName + " value=" + value;
+            throw new IllegalArgumentException(msg);
+        }
+    }
+
+    // ----------------------------------------------------------------
+    //                                                      Assert List
+    //                                                      -----------
+    /**
+     * Assert that the list is empty.
+     * 
+     * @param ls List. (NotNull)
+     */
+    protected void assertListNotNullAndEmpty(java.util.List ls) {
+        assertObjectNotNull("ls", ls);
+        if (!ls.isEmpty()) {
+            String msg = "The list should be empty: ls=" + ls.toString();
+            throw new IllegalArgumentException(msg);
+        }
+    }
+
+    /**
+     * Assert that the list is not empty.
+     * 
+     * @param ls List. (NotNull)
+     */
+    protected void assertListNotNullAndNotEmpty(java.util.List ls) {
+        assertObjectNotNull("ls", ls);
+        if (ls.isEmpty()) {
+            String msg = "The list should not be empty: ls=" + ls.toString();
+            throw new IllegalArgumentException(msg);
+        }
+    }
+
+    /**
+     * Assert that the list having only one.
+     * 
+     * @param ls List. (NotNull)
+     */
+    protected void assertListNotNullAndHasOnlyOne(java.util.List ls) {
+        assertObjectNotNull("ls", ls);
+        if (ls.size() != 1) {
+            String msg = "The list should contain only one object: ls="
+                    + ls.toString();
+            throw new IllegalArgumentException(msg);
+        }
+    }
+
+    // ===================================================================================
+    //                                                                            Accessor
+    //                                                                            ========
+    /**
+     * Get the selector of behavior.
+     * 
+     * @return The select of behavior. (Nullable: But normally NotNull)
+     */
+    protected BehaviorSelector getBehaviorSelector() {
+        return _behaviorSelector;
+    }
+
+    /**
+     * Set the selector of behavior.
+     * 
+     * @param behaviorSelector The selector of behavior. (NotNull)
+     */
+    public void setBehaviorSelector(BehaviorSelector behaviorSelector) {
+        this._behaviorSelector = behaviorSelector;
+    }
+
+    /**
+     * Get the selector of dao.
+     * 
+     * @return The select of behavior. (Nullable: But normally NotNull)
+     */
+    protected DaoSelector getDaoSelector() {
+        return _daoSelector;
+    }
+
+    /**
+     * Set the selector of dao.
+     * 
+     * @param daoSelector The selector of dao. (NotNull)
+     */
+    public void setDaoSelector(DaoSelector daoSelector) {
+        _daoSelector = daoSelector;
+    }
+}


Property changes on: announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/bhv/AbstractBehaviorReadable.java
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/bhv/AbstractBehaviorWritable.java
===================================================================
--- announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/bhv/AbstractBehaviorWritable.java	                        (rev 0)
+++ announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/bhv/AbstractBehaviorWritable.java	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,904 @@
+package jp.sf.pal.announcement.db.allcommon.bhv;
+
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+
+import jp.sf.pal.announcement.db.allcommon.Entity;
+import jp.sf.pal.announcement.db.allcommon.bhv.batch.TokenFileReflectionFailure;
+import jp.sf.pal.announcement.db.allcommon.bhv.batch.TokenFileReflectionOption;
+import jp.sf.pal.announcement.db.allcommon.bhv.batch.TokenFileReflectionResult;
+import jp.sf.pal.announcement.db.allcommon.cbean.ConditionBean;
+import jp.sf.pal.announcement.db.allcommon.dbmeta.DBMeta;
+import jp.sf.pal.announcement.db.allcommon.helper.MapStringBuilder;
+import jp.sf.pal.announcement.db.allcommon.helper.MapStringBuilderImpl;
+import jp.sf.pal.announcement.db.allcommon.helper.token.file.FileToken;
+import jp.sf.pal.announcement.db.allcommon.helper.token.file.FileTokenizingCallback;
+import jp.sf.pal.announcement.db.allcommon.helper.token.file.FileTokenizingHeaderInfo;
+import jp.sf.pal.announcement.db.allcommon.helper.token.file.FileTokenizingOption;
+import jp.sf.pal.announcement.db.allcommon.helper.token.file.FileTokenizingRowResource;
+import jp.sf.pal.announcement.db.allcommon.helper.token.file.impl.FileTokenImpl;
+
+/**
+ * The abstract class of behavior-writable.
+ * @author DBFlute(AutoGenerator)
+ */
+public abstract class AbstractBehaviorWritable extends AbstractBehaviorReadable
+        implements BehaviorWritable {
+
+    // ===================================================================================
+    //                                                                 Basic Entity Update
+    //                                                                 ===================
+    // -----------------------------------------------------
+    //                                                Create
+    //                                                ------
+    /**
+     * Create.
+     * @param entity Entity. (NotNull)
+     */
+    public void create(Entity entity) {
+        doCreate(entity);
+    }
+
+    protected abstract void doCreate(Entity entity);
+
+    // -----------------------------------------------------
+    //                                                Modify
+    //                                                ------
+    /**
+     * Modify.
+     * @param entity Entity. (NotNull)
+     * @exception jp.sf.pal.announcement.db.allcommon.exception.EntityAlreadyUpdatedException When the entity has already been updated.
+     * @exception jp.sf.pal.announcement.db.allcommon.exception.EntityAlreadyDeletedException When the entity has already been deleted.
+     * @exception jp.sf.pal.announcement.db.allcommon.exception.EntityDuplicatedException When the entity has been duplicated.
+     */
+    public void modify(Entity entity) {
+        doModify(entity);
+    }
+
+    protected abstract void doModify(Entity entity);
+
+    /**
+     * Modify non strict.
+     * @param entity Entity. (NotNull)
+     * @exception jp.sf.pal.announcement.db.allcommon.exception.EntityAlreadyDeletedException When the entity has already been deleted.
+     * @exception jp.sf.pal.announcement.db.allcommon.exception.EntityDuplicatedException When the entity has been duplicated.
+     */
+    public void modifyNonstrict(Entity entity) {
+        doModifyNonstrict(entity);
+    }
+
+    protected abstract void doModifyNonstrict(Entity entity);
+
+    // -----------------------------------------------------
+    //                                      Create or Modify
+    //                                      ----------------
+    /**
+     * The implementation.
+     * @param entity Entity. This must contain primary-key value at least(Except use identity). (NotNull)
+     * @exception jp.sf.pal.announcement.db.allcommon.exception.EntityAlreadyUpdatedException When the entity has already been updated.
+     * @exception jp.sf.pal.announcement.db.allcommon.exception.EntityAlreadyDeletedException When the entity has already been deleted.
+     * @exception jp.sf.pal.announcement.db.allcommon.exception.EntityDuplicatedException When the entity has been duplicated.
+     */
+    public void createOrModify(jp.sf.pal.announcement.db.allcommon.Entity entity) {
+        assertEntityNotNull(entity);
+        doCreateOrUpdate(entity);
+    }
+
+    protected abstract void doCreateOrUpdate(Entity entity);
+
+    /**
+     * The implementation.
+     * @param entity Entity. This must contain primary-key value at least(Except use identity). (NotNull)
+     * @exception jp.sf.pal.announcement.db.allcommon.exception.EntityAlreadyDeletedException When the entity has already been deleted.
+     * @exception jp.sf.pal.announcement.db.allcommon.exception.EntityDuplicatedException When the entity has been duplicated.
+     */
+    public void createOrModifyNonstrict(
+            jp.sf.pal.announcement.db.allcommon.Entity entity) {
+        assertEntityNotNull(entity);
+        doCreateOrUpdateNonstrict(entity);
+    }
+
+    protected abstract void doCreateOrUpdateNonstrict(Entity entity);
+
+    // -----------------------------------------------------
+    //                                                Remove
+    //                                                ------
+    /**
+     * Remove.
+     * @param entity Entity. (NotNull)
+     * @exception jp.sf.pal.announcement.db.allcommon.exception.EntityAlreadyUpdatedException When the entity has already been updated.
+     * @exception jp.sf.pal.announcement.db.allcommon.exception.EntityAlreadyDeletedException When the entity has already been deleted.
+     * @exception jp.sf.pal.announcement.db.allcommon.exception.EntityDuplicatedException When the entity has been duplicated.
+     */
+    public void remove(jp.sf.pal.announcement.db.allcommon.Entity entity) {
+        assertEntityNotNull(entity);
+        callRemove(entity);
+    }
+
+    protected abstract void doRemove(Entity entity);
+
+    // ===================================================================================
+    //                                                 Basic Entity Update Internal Helper
+    //                                                 ===================================
+    // -----------------------------------------------------
+    //                                                Update
+    //                                                ------
+    protected <ENTITY_TYPE extends Entity> void helpUpdateInternally(
+            ENTITY_TYPE entity, InternalUpdateCallback<ENTITY_TYPE> callback) {
+        assertEntityNotNull(entity);
+        assertEntityHasVersionNoValue(entity);
+        assertEntityHasUpdateDateValue(entity);
+        final int updatedCount = callback.callbackDelegateUpdate(entity);
+        if (updatedCount == 0) {
+            String msg = "The entity was Not Found! it has already been deleted: entity="
+                    + entity;
+            throw new jp.sf.pal.announcement.db.allcommon.exception.EntityAlreadyDeletedException(
+                    msg);
+        } else if (updatedCount > 1) {
+            String msg = "The entity was Too Many! it has been duplicated. It should be the only one! But the updatedCount="
+                    + updatedCount;
+            msg = msg + ": entity=" + entity;
+            throw new jp.sf.pal.announcement.db.allcommon.exception.EntityDuplicatedException(
+                    msg);
+        }
+    }
+
+    protected static interface InternalUpdateCallback<ENTITY_TYPE extends Entity> {
+        public int callbackDelegateUpdate(ENTITY_TYPE entity);
+    }
+
+    protected <ENTITY_TYPE extends Entity> void helpUpdateNonstrictInternally(
+            ENTITY_TYPE entity,
+            InternalUpdateNonstrictCallback<ENTITY_TYPE> callback) {
+        assertEntityNotNull(entity);
+        final int updatedCount = callback
+                .callbackDelegateUpdateNonstrict(entity);
+        if (updatedCount == 0) {
+            String msg = "The entity was Not Found! it has already been deleted: entity="
+                    + entity;
+            throw new jp.sf.pal.announcement.db.allcommon.exception.EntityAlreadyDeletedException(
+                    msg);
+        } else if (updatedCount > 1) {
+            String msg = "The entity was Too Many! it has been duplicated. It should be the only one! But the updatedCount="
+                    + updatedCount;
+            msg = msg + ": entity=" + entity;
+        }
+    }
+
+    protected static interface InternalUpdateNonstrictCallback<ENTITY_TYPE extends Entity> {
+        public int callbackDelegateUpdateNonstrict(ENTITY_TYPE entity);
+    }
+
+    // -----------------------------------------------------
+    //                                        InsertOrUpdate
+    //                                        --------------
+    protected <ENTITY_TYPE extends Entity, CB_TYPE extends ConditionBean> void helpInsertOrUpdateInternally(
+            ENTITY_TYPE entity,
+            InternalInsertOrUpdateCallback<ENTITY_TYPE, CB_TYPE> callback) {
+        assertEntityNotNull(entity);
+        if (!entity.hasPrimaryKeyValue()) {
+            callback.callbackInsert(entity);
+        } else {
+            RuntimeException exception = null;
+            try {
+                callback.callbackUpdate(entity);
+            } catch (jp.sf.pal.announcement.db.allcommon.exception.EntityAlreadyUpdatedException e) {
+                if (e.getRows() == 0) {
+                    exception = e;
+                }
+            } catch (jp.sf.pal.announcement.db.allcommon.exception.EntityAlreadyDeletedException e) {
+                exception = e;
+            } catch (IllegalStateException e) {
+                exception = e;
+            }
+            if (exception != null) {
+                final CB_TYPE cb = callback.callbackNewMyConditionBean();
+                cb.acceptPrimaryKeyMapString(getDBMeta()
+                        .extractPrimaryKeyMapString(entity));
+                if (callback.callbackSelectCount(cb) == 0) {
+                    callback.callbackInsert(entity);
+                } else {
+                    throw exception;
+                }
+            }
+        }
+    }
+
+    protected static interface InternalInsertOrUpdateCallback<ENTITY_TYPE extends Entity, CB_TYPE extends ConditionBean> {
+        public void callbackInsert(ENTITY_TYPE entity);
+
+        public void callbackUpdate(ENTITY_TYPE entity);
+
+        public CB_TYPE callbackNewMyConditionBean();
+
+        public int callbackSelectCount(CB_TYPE cb);
+    }
+
+    protected <ENTITY_TYPE extends Entity> void helpInsertOrUpdateInternally(
+            ENTITY_TYPE entity,
+            InternalInsertOrUpdateNonstrictCallback<ENTITY_TYPE> callback) {
+        assertEntityNotNull(entity);
+        if (!entity.hasPrimaryKeyValue()) {
+            callback.callbackInsert(entity);
+        } else {
+            try {
+                callback.callbackUpdateNonstrict(entity);
+            } catch (jp.sf.pal.announcement.db.allcommon.exception.EntityAlreadyUpdatedException e) {
+                callback.callbackInsert(entity);
+            } catch (jp.sf.pal.announcement.db.allcommon.exception.EntityAlreadyDeletedException e) {
+                callback.callbackInsert(entity);
+            }
+        }
+    }
+
+    protected static interface InternalInsertOrUpdateNonstrictCallback<ENTITY_TYPE extends Entity> {
+        public void callbackInsert(ENTITY_TYPE entity);
+
+        public void callbackUpdateNonstrict(ENTITY_TYPE entity);
+    }
+
+    // -----------------------------------------------------
+    //                                                Delete
+    //                                                ------
+    protected <ENTITY_TYPE extends Entity> void helpDeleteInternally(
+            ENTITY_TYPE entity, InternalDeleteCallback<ENTITY_TYPE> callback) {
+        assertEntityNotNull(entity);
+        assertEntityHasVersionNoValue(entity);
+        assertEntityHasUpdateDateValue(entity);
+        final int deletedCount = callback.callbackDelegateDelete(entity);
+        if (deletedCount == 0) {
+            String msg = "The entity was Not Found! The entity has already been deleted: entity="
+                    + entity;
+            throw new jp.sf.pal.announcement.db.allcommon.exception.EntityAlreadyDeletedException(
+                    msg);
+        } else if (deletedCount > 1) {
+            String msg = "The deleted entity was duplicated. It should be the only one! But the deletedCount="
+                    + deletedCount;
+            msg = msg + ": entity=" + entity;
+        }
+    }
+
+    protected static interface InternalDeleteCallback<ENTITY_TYPE extends Entity> {
+        public int callbackDelegateDelete(ENTITY_TYPE entity);
+    }
+
+    protected <ENTITY_TYPE extends Entity> void helpDeleteNonstrictInternally(
+            ENTITY_TYPE entity,
+            InternalDeleteNonstrictCallback<ENTITY_TYPE> callback) {
+        assertEntityNotNull(entity);
+        final int deletedCount = callback
+                .callbackDelegateDeleteNonstrict(entity);
+        if (deletedCount == 0) {
+            String msg = "The entity was Not Found! The entity has already been deleted: entity="
+                    + entity;
+            throw new jp.sf.pal.announcement.db.allcommon.exception.EntityAlreadyDeletedException(
+                    msg);
+        } else if (deletedCount > 1) {
+            String msg = "The deleted entity was duplicated. It should be the only one! But the deletedCount="
+                    + deletedCount;
+            msg = msg + ": entity=" + entity;
+        }
+    }
+
+    protected static interface InternalDeleteNonstrictCallback<ENTITY_TYPE extends Entity> {
+        public int callbackDelegateDeleteNonstrict(ENTITY_TYPE entity);
+    }
+
+    protected <ENTITY_TYPE extends Entity> void helpDeleteNonstrictIgnoreDeletedInternally(
+            ENTITY_TYPE entity,
+            InternalDeleteNonstrictIgnoreDeletedCallback<ENTITY_TYPE> callback) {
+        assertEntityNotNull(entity);
+        final int deletedCount = callback
+                .callbackDelegateDeleteNonstrict(entity);
+        if (deletedCount == 0) {
+            return;
+        } else if (deletedCount > 1) {
+            String msg = "The deleted entity was duplicated. It should be the only one! But the deletedCount="
+                    + deletedCount;
+            msg = msg + ": entity=" + entity;
+        }
+    }
+
+    protected static interface InternalDeleteNonstrictIgnoreDeletedCallback<ENTITY_TYPE extends Entity> {
+        public int callbackDelegateDeleteNonstrict(ENTITY_TYPE entity);
+    }
+
+    // ===================================================================================
+    //                                                                   Basic Lump Update
+    //                                                                   =================
+    /**
+     * Lump create the list.
+     * @param entityList Entity list. (NotNull and NotEmpty)
+     * @return The array of created count.
+     */
+    public int[] lumpCreate(java.util.List<Entity> entityList) {
+        assertListNotNullAndNotEmpty(entityList);
+        return callCreateList(entityList);
+    }
+
+    /**
+     * Lump Modify the list.
+     * @param entityList Entity list. (NotNull and NotEmpty)
+     * @return Modified count.
+     * @exception jp.sf.pal.announcement.db.allcommon.exception.EntityAlreadyUpdatedException If s2dao's version is over 1.0.47 (contains 1.0.47).
+     */
+    public int[] lumpModify(java.util.List<Entity> entityList) {
+        assertListNotNullAndNotEmpty(entityList);
+        return callModifyList(entityList);
+    }
+
+    /**
+     * Lump remove the list.
+     * @param entityList Entity list. (NotNull and NotEmpty)
+     * @return Removed count.
+     * @exception jp.sf.pal.announcement.db.allcommon.exception.EntityAlreadyUpdatedException If s2dao's version is over 1.0.47 (contains 1.0.47).
+     */
+    public int[] lumpRemove(java.util.List<Entity> entityList) {
+        assertListNotNullAndNotEmpty(entityList);
+        return callRemoveList(entityList);
+    }
+
+    /**
+     * Inject sequence to primary key if it needs.
+     * @param entity Entity. (NotNull)
+     */
+    protected void injectSequenceToPrimaryKeyIfNeeds(Entity entity) {
+        final DBMeta dbmeta = entity.getDBMeta();
+        if (!dbmeta.hasSequence() || dbmeta.hasTwoOrMorePrimaryKeys()
+                || entity.hasPrimaryKeyValue()) {
+            return;
+        }
+        final java.math.BigDecimal sequenceValue = readNextVal();
+        final String columnDbName = dbmeta.getPrimaryUniqueInfo()
+                .getFirstColumn().getColumnDbName();
+        final java.util.Map<String, String> map = new java.util.HashMap<String, String>();
+        map.put(columnDbName, sequenceValue.toString());
+        dbmeta.acceptPrimaryKeyMap(entity, map);
+    }
+
+    // =====================================================================================
+    //                                                                            Token File
+    //                                                                            ==========
+    public TokenFileReflectionExecutor tokenFileReflection() {
+        return new TokenFileReflectionExecutor();
+    }
+
+    public class TokenFileReflectionExecutor {
+
+        /**
+         * Reflect(insert or update) token-file to this table.
+         * @param filename Name of the file. (NotNull and NotEmpty)
+         * @param tokenFileReflectionOption token-file-reflection-option. (NotNull and Required{delimiter and encoding})
+         * @return Token-file-reflection-result. (NotNull)
+         * @throws java.io.FileNotFoundException
+         * @throws java.io.IOException
+         */
+        public TokenFileReflectionResult reflectTokenFile(String filename,
+                TokenFileReflectionOption tokenFileReflectionOption)
+                throws java.io.FileNotFoundException, java.io.IOException {
+            assertStringNotNullAndNotTrimmedEmpty("filename", filename);
+            assertFileTokenReflectionOption(tokenFileReflectionOption);
+
+            final TokenFileReflectionResult result = buildTokenFileReflectionResult();
+            final FileTokenizingCallback fileTokenizingCallback = buildFileTokenReflectionFileTokenizingCallback(
+                    tokenFileReflectionOption, result);
+            final FileTokenizingOption fileTokenizingOption = buildFileTokenReflectionFileTokenizingOption(tokenFileReflectionOption);
+            final FileToken fileToken = new FileTokenImpl();
+            fileToken.tokenize(filename, fileTokenizingCallback,
+                    fileTokenizingOption);
+            return result;
+        }
+
+        /**
+         * Reflect(insert or update) token-file to this table.
+         * @param inputStream Input stream. (NotNull and NotClosed)
+         * @param tokenFileReflectionOption token-file-reflection-option. (NotNull and Required{delimiter and encoding})
+         * @return Token-file-reflection-result. (NotNull)
+         * @throws java.io.FileNotFoundException
+         * @throws java.io.IOException
+         */
+        public TokenFileReflectionResult reflectTokenFile(
+                java.io.InputStream inputStream,
+                TokenFileReflectionOption tokenFileReflectionOption)
+                throws java.io.FileNotFoundException, java.io.IOException {
+            assertObjectNotNull("inputStream", inputStream);
+            assertFileTokenReflectionOption(tokenFileReflectionOption);
+
+            final TokenFileReflectionResult result = buildTokenFileReflectionResult();
+            final FileTokenizingCallback fileTokenizingCallback = buildFileTokenReflectionFileTokenizingCallback(
+                    tokenFileReflectionOption, result);
+            final FileTokenizingOption fileTokenizingOption = buildFileTokenReflectionFileTokenizingOption(tokenFileReflectionOption);
+            final FileToken fileToken = new FileTokenImpl();
+            fileToken.tokenize(inputStream, fileTokenizingCallback,
+                    fileTokenizingOption);
+            return result;
+        }
+
+        protected void assertFileTokenReflectionOption(
+                TokenFileReflectionOption tokenFileReflectionOption) {
+            assertObjectNotNull("tokenFileReflectionOption",
+                    tokenFileReflectionOption);
+
+            final String encoding = tokenFileReflectionOption.getEncoding();
+            final String delimiter = tokenFileReflectionOption.getDelimiter();
+            assertStringNotNullAndNotTrimmedEmpty("encoding", encoding);
+            assertObjectNotNull("delimiter", delimiter);
+        }
+
+        protected TokenFileReflectionResult buildTokenFileReflectionResult() {
+            final TokenFileReflectionResult result = new TokenFileReflectionResult();
+            final java.util.List<TokenFileReflectionFailure> failureList = new java.util.ArrayList<TokenFileReflectionFailure>();
+            result.setFailureList(failureList);
+            return result;
+        }
+
+        protected FileTokenizingCallback buildFileTokenReflectionFileTokenizingCallback(
+                TokenFileReflectionOption tokenFileReflectionOption,
+                final TokenFileReflectionResult result)
+                throws java.io.FileNotFoundException, java.io.IOException {
+            assertObjectNotNull("tokenFileReflectionOption",
+                    tokenFileReflectionOption);
+
+            final String encoding = tokenFileReflectionOption.getEncoding();
+            final String delimiter = tokenFileReflectionOption.getDelimiter();
+            final boolean interruptIfError = tokenFileReflectionOption
+                    .isInterruptIfError();
+            assertStringNotNullAndNotTrimmedEmpty("encoding", encoding);
+            assertObjectNotNull("delimiter", delimiter);
+            final java.util.List<TokenFileReflectionFailure> failureList = result
+                    .getFailureList();
+            assertObjectNotNull("failureList", failureList);
+
+            final FileTokenizingCallback fileTokenizingCallback = new FileTokenizingCallback() {
+                public void handleRowResource(
+                        FileTokenizingRowResource fileTokenizingRowResource) {
+                    final FileTokenizingHeaderInfo fileTokenizingHeaderInfo = fileTokenizingRowResource
+                            .getFileTokenizingHeaderInfo();
+                    final java.util.List<String> columnNameList = fileTokenizingHeaderInfo
+                            .getColumnNameList();
+                    final java.util.List<String> valueList = fileTokenizingRowResource
+                            .getValueList();
+
+                    // Set up columnNameList of result object.
+                    if (result.getColumnNameList() == null) {
+                        result.setColumnNameList(columnNameList);
+                    }
+
+                    Entity entity = null;
+                    try {
+                        // Create entity by the list of value composed of String.
+                        entity = createEntityByStringValueList(columnNameList,
+                                valueList);
+
+                        // Create or modify as non-strict.
+                        doCreateOrUpdateNonstrict(entity);
+
+                        // Increment successCount of result object.
+                        result.incrementSuccessCount();
+                    } catch (RuntimeException e) {
+                        if (interruptIfError) {
+                            throw e;
+                        }
+                        final TokenFileReflectionFailure failure = new TokenFileReflectionFailure();
+                        failure.setColumnNameList(columnNameList);
+                        failure.setValueList(valueList);
+                        failure.setRowString(fileTokenizingRowResource
+                                .getRowString());
+                        failure.setRowNumber(fileTokenizingRowResource
+                                .getRowNumber());
+                        failure.setLineNumber(fileTokenizingRowResource
+                                .getLineNumber());
+                        if (entity != null) {
+                            failure.setEntity(entity);
+                        }
+                        failure.setException(e);
+                        failureList.add(failure);
+                    }
+                }
+            };
+            return fileTokenizingCallback;
+        }
+
+        protected Entity createEntityByStringValueList(
+                java.util.List<String> columnNameList,
+                java.util.List<String> valueList) {
+            final MapStringBuilder builder = new MapStringBuilderImpl();
+            builder.setMsMapMark(MAP_STRING_MAP_MARK);
+            builder.setMsStartBrace(MAP_STRING_START_BRACE);
+            builder.setMsEndBrace(MAP_STRING_END_BRACE);
+            builder.setMsDelimiter(MAP_STRING_DELIMITER);
+            builder.setMsEqual(MAP_STRING_EQUAL);
+            builder.setColumnNameList(columnNameList);
+            final String mapString = builder.buildFromList(valueList);
+
+            final Entity entity = getDBMeta().newEntity();
+            getDBMeta().acceptColumnValueMapString(entity, mapString);
+            return entity;
+        }
+
+        protected FileTokenizingOption buildFileTokenReflectionFileTokenizingOption(
+                TokenFileReflectionOption tokenFileReflectionOption)
+                throws java.io.FileNotFoundException, java.io.IOException {
+            assertObjectNotNull("tokenFileReflectionOption",
+                    tokenFileReflectionOption);
+
+            final String encoding = tokenFileReflectionOption.getEncoding();
+            final String delimiter = tokenFileReflectionOption.getDelimiter();
+            assertStringNotNullAndNotTrimmedEmpty("encoding", encoding);
+            assertObjectNotNull("delimiter", delimiter);
+
+            final FileTokenizingOption fileTokenizingOption = new FileTokenizingOption();
+            fileTokenizingOption.setEncoding(encoding);
+            fileTokenizingOption.setDelimiter(delimiter);
+            if (tokenFileReflectionOption.isHandleEmptyAsNull()) {
+                fileTokenizingOption.handleEmptyAsNull();
+            }
+            return fileTokenizingOption;
+        }
+    }
+
+    // =====================================================================================
+    //                                                                       Delegate Method
+    //                                                                       ===============
+    // -----------------------------------------------------
+    //                                                Insert
+    //                                                ------
+    /**
+     * The implementation.
+     * @param entity Entity that the type is entity interface. (NotNull)
+     * @return Inserted count.
+     */
+    protected int callCreate(Entity entity) {
+        if (!processBeforeInsert(entity)) {
+            return 1;/*as Normal End*/
+        }
+        return getDaoWritable().create(entity);
+    }
+
+    /**
+     * Process before insert.
+     * @param entity Entity that the type is entity interface. (NotNull)
+     * @return Execution Determination. (true: execute / false: non)
+     */
+    protected boolean processBeforeInsert(Entity entity) {
+        if (!determineExecuteInsert(entity)) {
+            return false;
+        }
+        assertEntityNotNull(entity);// If this table use identity, the entity does not have primary-key.
+        frameworkFilterEntityOfInsert(entity);
+        filterEntityOfInsert(entity);
+        assertEntityOfInsert(entity);
+        return true;
+    }
+
+    // -----------------------------------------------------
+    //                                                Update
+    //                                                ------
+    /**
+     * The implementation.
+     * {modified only}
+     * @param entity Entity that the type is entity interface. (NotNull)
+     * @return Updated count.
+     */
+    protected int callModify(Entity entity) {
+        if (!processBeforeUpdate(entity)) {
+            return 1;/*as Normal End*/
+        }
+        return getDaoWritable().modifyModifiedOnly(entity);
+    }
+
+    /**
+     * Process before update.
+     * @param entity Entity that the type is entity interface. (NotNull)
+     * @return Execution Determination. (true: execute / false: non)
+     */
+    protected boolean processBeforeUpdate(Entity entity) {
+        if (!determineExecuteUpdate(entity)) {
+            return false;
+        }
+        assertEntityNotNullAndHasPrimaryKeyValue(entity);
+        frameworkFilterEntityOfUpdate(entity);
+        filterEntityOfUpdate(entity);
+        assertEntityOfUpdate(entity);
+        return true;
+    }
+
+    // -----------------------------------------------------
+    //                                                Delete
+    //                                                ------
+    /**
+     * The implementation.
+     * @param entity Entity that the type is entity interface. (NotNull)
+     * @return Deleted count.
+     */
+    protected int callRemove(Entity entity) {
+        if (!processBeforeDelete(entity)) {
+            return 1;/*as Normal End*/
+        }
+        return getDaoWritable().remove(entity);
+    }
+
+    /**
+     * Process before delete.
+     * @param entity Entity that the type is entity interface. (NotNull)
+     * @return Execution Determination. (true: execute / false: non)
+     */
+    protected boolean processBeforeDelete(Entity entity) {
+        if (!determineExecuteDelete(entity)) {
+            return false;
+        }
+        assertEntityNotNullAndHasPrimaryKeyValue(entity);
+        frameworkFilterEntityOfDelete(entity);
+        filterEntityOfDelete(entity);
+        assertEntityOfDelete(entity);
+        return true;
+    }
+
+    // -----------------------------------------------------
+    //                                    Pre-Process Insert
+    //                                    ------------------
+    /**
+     * Determine execution of insert.
+     * @param entity Entity. (NotNull)
+     * @return Execution Determination. (true: execute / false: non)
+     */
+    protected boolean determineExecuteInsert(Entity entity) {
+        return true;
+    }
+
+    /**
+     * {Framework Method} Filter the entity of insert.
+     * @param targetEntity Target entity that the type is entity interface. (NotNull)
+     */
+    protected void frameworkFilterEntityOfInsert(Entity targetEntity) {
+        injectSequenceToPrimaryKeyIfNeeds(targetEntity);
+        setupCommonColumnOfInsertIfNeeds(targetEntity);
+    }
+
+    /**
+     * Set up common columns of insert if it needs.
+     * @param targetEntity Target entity that the type is entity interface. (NotNull)
+     */
+    protected void setupCommonColumnOfInsertIfNeeds(Entity targetEntity) {
+    }
+
+    /**
+     * Filter the entity of insert.
+     * @param targetEntity Target entity that the type is entity interface. (NotNull)
+     */
+    protected void filterEntityOfInsert(Entity targetEntity) {
+    }
+
+    /**
+     * Assert the entity of insert.
+     * @param entity Entity that the type is entity interface. (NotNull)
+     */
+    protected void assertEntityOfInsert(Entity entity) {
+    }
+
+    // -----------------------------------------------------
+    //                                    Pre-Process Update
+    //                                    ------------------
+    /**
+     * Determine execution of update.
+     * @param entity Entity. (NotNull)
+     * @return Execution Determination. (true: execute / false: non)
+     */
+    protected boolean determineExecuteUpdate(Entity entity) {
+        return true;
+    }
+
+    /**
+     * {Framework Method} Filter the entity of update.
+     * @param targetEntity Target entity that the type is entity interface. (NotNull)
+     */
+    protected void frameworkFilterEntityOfUpdate(Entity targetEntity) {
+        setupCommonColumnOfUpdateIfNeeds(targetEntity);
+    }
+
+    /**
+     * Set up common columns of update if it needs.
+     * @param targetEntity Target entity that the type is entity interface. (NotNull)
+     */
+    protected void setupCommonColumnOfUpdateIfNeeds(Entity targetEntity) {
+    }
+
+    /**
+     * Filter the entity of update.
+     * @param targetEntity Target entity that the type is entity interface. (NotNull)
+     */
+    protected void filterEntityOfUpdate(Entity targetEntity) {
+    }
+
+    /**
+     * Assert the entity of update.
+     * @param entity Entity that the type is entity interface. (NotNull)
+     */
+    protected void assertEntityOfUpdate(Entity entity) {
+    }
+
+    // -----------------------------------------------------
+    //                                    Pre-Process Delete
+    //                                    ------------------
+    /**
+     * Determine execution of delete.
+     * @param entity Entity. (NotNull)
+     * @return Execution Determination. (true: execute / false: non)
+     */
+    protected boolean determineExecuteDelete(Entity entity) {
+        return true;
+    }
+
+    /**
+     * {Framework Method} Filter the entity of delete.
+     * @param targetEntity Target entity that the type is entity interface. (NotNull)
+     */
+    protected void frameworkFilterEntityOfDelete(Entity targetEntity) {
+        setupCommonColumnOfDeleteIfNeeds(targetEntity);
+    }
+
+    /**
+     * Set up common columns of delete if it needs.
+     * @param targetEntity Target entity that the type is entity interface. (NotNull)
+     */
+    protected void setupCommonColumnOfDeleteIfNeeds(Entity targetEntity) {
+    }
+
+    /**
+     * Filter the entity of delete.
+     * @param targetEntity Target entity that the type is entity interface. (NotNull)
+     */
+    protected void filterEntityOfDelete(Entity targetEntity) {
+    }
+
+    /**
+     * Assert the entity of delete.
+     * @param entity Entity that the type is entity interface. (NotNull)
+     */
+    protected void assertEntityOfDelete(Entity entity) {
+    }
+
+    /**
+     * The implementation.
+     * @param entityList Entity list that the type is entity interface. (NotNull)
+     * @return Inserted count.
+     */
+    public int[] callCreateList(java.util.List<Entity> entityList) {
+        assertObjectNotNull("entityList", entityList);
+        helpFilterBeforeInsertInternally(entityList);
+        return getDaoWritable().createList(entityList);
+    }
+
+    /**
+     * The implementation.
+     * @param entityList Entity list that the type is entity interface. (NotNull)
+     * @return Updated count.
+     */
+    public int[] callModifyList(java.util.List<Entity> entityList) {
+        assertObjectNotNull("entityList", entityList);
+        helpFilterBeforeUpdateInternally(entityList);
+        return getDaoWritable().modifyList(entityList);
+    }
+
+    /**
+     * The implementation.
+     * @param entityList Entity list that the type is entity interface. (NotNull)
+     * @return Deleted count.
+     */
+    public int[] callRemoveList(java.util.List<Entity> entityList) {
+        assertObjectNotNull("entityList", entityList);
+        helpFilterBeforeDeleteInternally(entityList);
+        return getDaoWritable().removeList(entityList);
+    }
+
+    protected void assertEntityHasVersionNoValue(Entity entity) {
+        if (!getDBMeta().hasVersionNo()) {
+            return;
+        }
+        if (hasVersionNoValue(entity)) {
+            return;
+        }
+        String msg = "Look! Read the message below." + getLineSeparator();
+        msg = msg
+                + "/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *"
+                + getLineSeparator();
+        msg = msg + "The value of 'version no' on the entity was Not Found!"
+                + getLineSeparator() + getLineSeparator();
+        msg = msg + "[Advice]" + getLineSeparator();
+        msg = msg
+                + "Please confirm the existence of the value of 'version no' on the entity."
+                + getLineSeparator();
+        msg = msg
+                + "You called the method in which the check for optimistic lock is indispensable. "
+                + getLineSeparator();
+        msg = msg + "So 'version no' is required on the entity. "
+                + getLineSeparator();
+        msg = msg
+                + "In addition, please confirm the necessity of optimistic lock. It might possibly be unnecessary."
+                + getLineSeparator() + getLineSeparator();
+        msg = msg + "[Entity]" + getLineSeparator();
+        msg = msg + "entity to string = " + entity + getLineSeparator();
+        msg = msg + "entity to map    = "
+                + entity.getDBMeta().convertToColumnValueMap(entity)
+                + getLineSeparator();
+        msg = msg + "* * * * * * * * * */" + getLineSeparator();
+        throw new IllegalStateException(msg);
+    }
+
+    protected void assertEntityHasUpdateDateValue(Entity entity) {
+        if (!getDBMeta().hasUpdateDate()) {
+            return;
+        }
+        if (hasUpdateDateValue(entity)) {
+            return;
+        }
+        String msg = "Look! Read the message below." + getLineSeparator();
+        msg = msg
+                + "/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *"
+                + getLineSeparator();
+        msg = msg + "The value of 'update date' on the entity was Not Found!"
+                + getLineSeparator() + getLineSeparator();
+        msg = msg + "[Advice]" + getLineSeparator();
+        msg = msg
+                + "Please confirm the existence of the value of 'update date' on the entity."
+                + getLineSeparator();
+        msg = msg
+                + "You called the method in which the check for optimistic lock is indispensable. "
+                + getLineSeparator();
+        msg = msg + "So 'update date' is required on the entity. "
+                + getLineSeparator();
+        msg = msg
+                + "In addition, please confirm the necessity of optimistic lock. It might possibly be unnecessary."
+                + getLineSeparator() + getLineSeparator();
+        msg = msg + "[Entity]" + getLineSeparator();
+        msg = msg + "entity to string = " + entity + getLineSeparator();
+        msg = msg + "entity to map    = "
+                + entity.getDBMeta().convertToColumnValueMap(entity)
+                + getLineSeparator();
+        msg = msg + "* * * * * * * * * */" + getLineSeparator();
+        throw new IllegalStateException(msg);
+    }
+
+    // ===================================================================================
+    //                                                     Delegate Method Internal Helper
+    //                                                     ===============================
+    protected <ENTITY extends Entity> List<ENTITY> helpFilterBeforeInsertInternally(
+            List<ENTITY> entityList) {
+        final List<ENTITY> filteredList = new ArrayList<ENTITY>();
+        for (final Iterator<ENTITY> ite = entityList.iterator(); ite.hasNext();) {
+            final ENTITY entity = ite.next();
+            if (!processBeforeInsert(entity)) {
+                continue;
+            }
+            filteredList.add(entity);
+        }
+        return filteredList;
+    }
+
+    protected <ENTITY extends Entity> List<ENTITY> helpFilterBeforeUpdateInternally(
+            List<ENTITY> entityList) {
+        final List<ENTITY> filteredList = new ArrayList<ENTITY>();
+        for (final Iterator<ENTITY> ite = entityList.iterator(); ite.hasNext();) {
+            final ENTITY entity = ite.next();
+            if (!processBeforeUpdate(entity)) {
+                continue;
+            }
+            filteredList.add(entity);
+        }
+        return filteredList;
+    }
+
+    protected <ENTITY extends Entity> List<ENTITY> helpFilterBeforeDeleteInternally(
+            List<ENTITY> entityList) {
+        final List<ENTITY> filteredList = new ArrayList<ENTITY>();
+        for (final Iterator<ENTITY> ite = entityList.iterator(); ite.hasNext();) {
+            final ENTITY entity = ite.next();
+            if (!processBeforeDelete(entity)) {
+                continue;
+            }
+            filteredList.add(entity);
+        }
+        return filteredList;
+    }
+}


Property changes on: announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/bhv/AbstractBehaviorWritable.java
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/bhv/BehaviorReadable.java
===================================================================
--- announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/bhv/BehaviorReadable.java	                        (rev 0)
+++ announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/bhv/BehaviorReadable.java	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,221 @@
+package jp.sf.pal.announcement.db.allcommon.bhv;
+
+import jp.sf.pal.announcement.db.allcommon.DaoReadable;
+import jp.sf.pal.announcement.db.allcommon.Entity;
+import jp.sf.pal.announcement.db.allcommon.cbean.ConditionBean;
+import jp.sf.pal.announcement.db.allcommon.cbean.ListResultBean;
+import jp.sf.pal.announcement.db.allcommon.cbean.PagingBean;
+import jp.sf.pal.announcement.db.allcommon.cbean.PagingHandler;
+import jp.sf.pal.announcement.db.allcommon.cbean.PagingInvoker;
+import jp.sf.pal.announcement.db.allcommon.cbean.PagingResultBean;
+import jp.sf.pal.announcement.db.allcommon.dbmeta.DBMeta;
+
+/**
+ * The interface of behavior-readable.
+ * 
+ * @author DBFlute(AutoGenerator)
+ */
+public interface BehaviorReadable {
+
+    // ===================================================================================
+    //                                                                          Definition
+    //                                                                          ==========
+    /** Map-string map-mark. */
+    public static final String MAP_STRING_MAP_MARK = "map:";
+
+    /** Map-string list-mark. */
+    public static final String MAP_STRING_LIST_MARK = "list:";
+
+    /** Map-string start-brace. */
+    public static final String MAP_STRING_START_BRACE = "@{";
+
+    /** Map-string end-brace. */
+    public static final String MAP_STRING_END_BRACE = "@}";
+
+    /** Map-string delimiter. */
+    public static final String MAP_STRING_DELIMITER = "@;";
+
+    /** Map-string equal. */
+    public static final String MAP_STRING_EQUAL = "@=";
+
+    // ===================================================================================
+    //                                                                          Table name
+    //                                                                          ==========
+    /**
+     * Get table db-name.
+     * 
+     * @return Table db-name. (NotNull)
+     */
+    public String getTableDbName();
+
+    // ===================================================================================
+    //                                                                              DBMeta
+    //                                                                              ======
+    /**
+     * Get dbmeta.
+     * 
+     * @return DBMeta. (NotNull)
+     */
+    public DBMeta getDBMeta();
+
+    // ===================================================================================
+    //                                                                        Dao Accessor
+    //                                                                        ============
+    /**
+     * Get dao-readable.
+     * 
+     * @return Dao-readable. (NotNull)
+     */
+    public DaoReadable getDaoReadable();
+
+    // ===================================================================================
+    //                                                                        New Instance
+    //                                                                        ============
+    /**
+     * New entity.
+     * 
+     * @return Entity. (NotNull)
+     */
+    public Entity newEntity();
+
+    /**
+     * New condition-bean.
+     * 
+     * @return Condition-bean. (NotNull)
+     */
+    public ConditionBean newConditionBean();
+
+    // ===================================================================================
+    //                                                                       Basic Get All
+    //                                                                       =============
+    /**
+     * Get count all.
+     * 
+     * @return Count all.
+     */
+    public int getCountAll();
+
+    // ===================================================================================
+    //                                                                    Basic Read Count
+    //                                                                    ================
+    /**
+     * Read count by condition-bean.
+     * <pre>
+     * If the argument 'condition-bean' is effective about fetch-scope,
+     * this method invoke select count ignoring the fetch-scope.
+     * </pre>
+     * @param cb Condition-bean. This condition-bean should not be set up about fetch-scope. (NotNull)
+     * @return Read count. (NotNull)
+     */
+    public int readCount(ConditionBean cb);
+
+    // ===================================================================================
+    //                                                                   Basic Read Entity
+    //                                                                   =================
+    /**
+     * Read entity by condition-bean.
+     * 
+     * @param cb Condition-bean. (NotNull)
+     * @return Read entity. (Nullalble)
+     * @exception jp.sf.pal.announcement.db.allcommon.exception.EntityDuplicatedException When the entity has been duplicated.
+     */
+    public Entity readEntity(ConditionBean cb);
+
+    /**
+     * Read simple entity by condition-bean with deleted check.
+     * 
+     * @param cb Condition-bean. (NotNull)
+     * @return Read entity. (NotNull)
+     * @exception jp.sf.pal.announcement.db.allcommon.exception.EntityAlreadyDeletedException When the entity has already been deleted.
+     * @exception jp.sf.pal.announcement.db.allcommon.exception.EntityDuplicatedException When the entity has been duplicated.
+     */
+    public Entity readEntityWithDeletedCheck(ConditionBean cb);
+
+    // ===================================================================================
+    //                                                                     Basic Read List
+    //                                                                     ===============
+    /**
+     * Read list as result-bean.
+     * 
+     * @param cb Condition-bean. (NotNull)
+     * @return List-result-bean. If the select result is zero, it returns empty list. (NotNull)
+     */
+    public ListResultBean<Entity> readList(ConditionBean cb);
+
+    /**
+     * Read page as result-bean.
+     * 
+     * @param cb Condition-bean. (NotNull)
+     * @return Read page. (NotNull)
+     */
+    public PagingResultBean<Entity> readPage(final ConditionBean cb);
+
+    // ===================================================================================
+    //                                                                            Sequence
+    //                                                                            ========
+    /**
+     * The implementation.
+     * 
+     * @return The value of sequence. (NotNull)
+     */
+    public java.math.BigDecimal readNextVal();
+
+    // ===================================================================================
+    //                                                                        Static Class
+    //                                                                        ============
+    /**
+     * The interface of select-page callback.
+     * 
+     * @param <T> The generic template for 'selectedList'.
+     */
+    public static interface SelectPageCallback<ENTITY> {
+        public PagingBean getPagingBean();
+
+        public int selectCountIgnoreFetchScope();
+
+        public java.util.List<ENTITY> selectListWithFetchScope();
+    }
+
+    public static class ResultBeanBuilder<ENTITY> extends
+            jp.sf.pal.announcement.db.allcommon.cbean.ResultBeanBuilder<ENTITY> {
+        public ResultBeanBuilder(BehaviorReadable bhv) {
+            super(bhv.getTableDbName());
+        }
+    }
+
+    public static interface SelectPageInvoker<ENTITY> {
+        public PagingResultBean<ENTITY> invokeSelectPage(
+                SelectPageCallback<ENTITY> callback);
+    }
+
+    public static class SelectPageSimpleInvoker<ENTITY> implements
+            SelectPageInvoker<ENTITY> {
+        protected BehaviorReadable _bhv;
+
+        public SelectPageSimpleInvoker(BehaviorReadable bhv) {
+            _bhv = bhv;
+        }
+
+        public PagingResultBean<ENTITY> invokeSelectPage(
+                final SelectPageCallback<ENTITY> callback) {
+            final PagingHandler<ENTITY> handler = new PagingHandler<ENTITY>() {
+                public PagingBean getPagingBean() {
+                    return callback.getPagingBean();
+                }
+
+                public int count() {
+                    return callback.selectCountIgnoreFetchScope();
+                }
+
+                public java.util.List<ENTITY> paging() {
+                    return callback.selectListWithFetchScope();
+                }
+            };
+            return new PagingInvoker<ENTITY>(_bhv.getTableDbName())
+                    .invokePaging(handler);
+        }
+    }
+
+    public static interface SimpleCBSetupper {
+    }
+}


Property changes on: announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/bhv/BehaviorReadable.java
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/bhv/BehaviorWritable.java
===================================================================
--- announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/bhv/BehaviorWritable.java	                        (rev 0)
+++ announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/bhv/BehaviorWritable.java	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,113 @@
+package jp.sf.pal.announcement.db.allcommon.bhv;
+
+import jp.sf.pal.announcement.db.allcommon.DaoWritable;
+import jp.sf.pal.announcement.db.allcommon.Entity;
+
+/**
+ * The interface of behavior-writable.
+ * 
+ * @author DBFlute(AutoGenerator)
+ */
+public interface BehaviorWritable extends BehaviorReadable {
+
+    /**
+     * Get dao-writable.
+     * 
+     * @return Dao-writable. (NotNull)
+     */
+    public DaoWritable getDaoWritable();
+
+    // =====================================================================================
+    //                                                                   Basic Entity Update
+    //                                                                   ===================
+    /**
+     * Create.
+     * 
+     * @param entity Entity. (NotNull)
+     */
+    public void create(jp.sf.pal.announcement.db.allcommon.Entity entity);
+
+    /**
+     * Modify.
+     * 
+     * @param entity Entity. (NotNull)
+     * @exception jp.sf.pal.announcement.db.allcommon.exception.EntityAlreadyUpdatedException When the entity has already been updated.
+     * @exception jp.sf.pal.announcement.db.allcommon.exception.EntityAlreadyDeletedException When the entity has already been deleted.
+     * @exception jp.sf.pal.announcement.db.allcommon.exception.EntityDuplicatedException When the entity has been duplicated.
+     */
+    public void modify(jp.sf.pal.announcement.db.allcommon.Entity entity);
+
+    /**
+     * Modify non-strict.
+     * 
+     * @param entity Entity. (NotNull)
+     * @exception jp.sf.pal.announcement.db.allcommon.exception.EntityAlreadyDeletedException When the entity has already been deleted.
+     * @exception jp.sf.pal.announcement.db.allcommon.exception.EntityDuplicatedException When the entity has been duplicated.
+     */
+    public void modifyNonstrict(Entity entity);
+
+    /**
+     * Create or modify. <br />
+     * {modify: modified only} <br />
+     * This method is faster than createOrModifyAfterSelect().
+     * 
+     * @param entity Entity. This must contain primary-key value at least(Except use identity). (NotNull)
+     * @exception jp.sf.pal.announcement.db.allcommon.exception.EntityAlreadyUpdatedException When the entity has already been updated.
+     * @exception jp.sf.pal.announcement.db.allcommon.exception.EntityAlreadyDeletedException When the entity has already been deleted.
+     * @exception jp.sf.pal.announcement.db.allcommon.exception.EntityDuplicatedException When the entity has been duplicated.
+     */
+    public void createOrModify(jp.sf.pal.announcement.db.allcommon.Entity entity);
+
+    /**
+     * Create or modify non-strict. <br />
+     * {modify: modified only} <br />
+     * This method is faster than createOrModifyAfterSelect().
+     * 
+     * @param entity Entity. This must contain primary-key value at least(Except use identity). (NotNull)
+     * @exception jp.sf.pal.announcement.db.allcommon.exception.EntityAlreadyDeletedException When the entity has already been deleted.
+     * @exception jp.sf.pal.announcement.db.allcommon.exception.EntityDuplicatedException When the entity has been duplicated.
+     */
+    public void createOrModifyNonstrict(
+            jp.sf.pal.announcement.db.allcommon.Entity entity);
+
+    /**
+     * Remove.
+     * 
+     * @param entity Entity. (NotNull)
+     * @exception jp.sf.pal.announcement.db.allcommon.exception.EntityAlreadyUpdatedException When the entity has already been updated.
+     * @exception jp.sf.pal.announcement.db.allcommon.exception.EntityAlreadyDeletedException When the entity has already been deleted.
+     * @exception jp.sf.pal.announcement.db.allcommon.exception.EntityDuplicatedException When the entity has been duplicated.
+     */
+    public void remove(jp.sf.pal.announcement.db.allcommon.Entity entity);
+
+    // =====================================================================================
+    //                                                                    Basic Batch Update
+    //                                                                    ==================
+    /**
+     * Lump create the list.
+     * 
+     * @param entityList Entity-list. (NotNull and NotEmpty)
+     * @return The array of created count.
+     */
+    public int[] lumpCreate(java.util.List<Entity> entityList);
+
+    /**
+     * Lump Modify the list.
+     * 
+     * @param entityList Entity-list. (NotNull and NotEmpty)
+     * @return Modified count.
+     * @exception jp.sf.pal.announcement.db.allcommon.exception.EntityAlreadyUpdatedException When the entity has already been updated. And Only when s2dao's version is over 1.0.47 (contains 1.0.47).
+     * @exception jp.sf.pal.announcement.db.allcommon.exception.EntityDuplicatedException When the entity has been duplicated.
+     */
+    public int[] lumpModify(java.util.List<Entity> entityList);
+
+    /**
+     * Lump remove the list.
+     * 
+     * @param entityList Entity-list. (NotNull and NotEmpty)
+     * @return Removed count.
+     * @exception jp.sf.pal.announcement.db.allcommon.exception.EntityAlreadyUpdatedException When the entity has already been updated. And Only when s2dao's version is over 1.0.47 (contains 1.0.47).
+     * @exception jp.sf.pal.announcement.db.allcommon.exception.EntityDuplicatedException When the entity has been duplicated.
+     */
+    public int[] lumpRemove(java.util.List<Entity> entityList);
+}


Property changes on: announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/bhv/BehaviorWritable.java
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/bhv/batch/TokenFileOutputOption.java
===================================================================
--- announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/bhv/batch/TokenFileOutputOption.java	                        (rev 0)
+++ announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/bhv/batch/TokenFileOutputOption.java	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,87 @@
+package jp.sf.pal.announcement.db.allcommon.bhv.batch;
+
+import jp.sf.pal.announcement.db.allcommon.helper.token.file.FileMakingOption;
+
+/**
+ * @author DBFlute(AutoGenerator)
+ */
+public class TokenFileOutputOption {
+
+    // =====================================================================================
+    //                                                                             Attribute
+    //                                                                             =========
+    protected FileMakingOption _fileMakingOption = new FileMakingOption();
+
+    // =====================================================================================
+    //                                                                           Easy-to-Use
+    //                                                                           ===========
+    public TokenFileOutputOption delimitateByComma() {
+        _fileMakingOption.delimitateByComma();
+        return this;
+    }
+
+    public TokenFileOutputOption delimitateByTab() {
+        _fileMakingOption.delimitateByTab();
+        return this;
+    }
+
+    public TokenFileOutputOption encodeAsUTF8() {
+        _fileMakingOption.encodeAsUTF8();
+        return this;
+    }
+
+    public TokenFileOutputOption encodeAsWindows31J() {
+        _fileMakingOption.encodeAsWindows31J();
+        return this;
+    }
+
+    public TokenFileOutputOption separateCrLf() {
+        _fileMakingOption.separateCrLf();
+        return this;
+    }
+
+    public TokenFileOutputOption separateLf() {
+        _fileMakingOption.separateLf();
+        return this;
+    }
+
+    public TokenFileOutputOption goodByeDoubleQuotation() {
+        _fileMakingOption.goodByeDoubleQuotation();
+        return this;
+    }
+
+    // =====================================================================================
+    //                                                                              Accessor
+    //                                                                              ========
+    public String getEncoding() {
+        return _fileMakingOption.getEncoding();
+    }
+
+    public void setEncoding(String encoding) {
+        _fileMakingOption.setDelimiter(encoding);
+    }
+
+    public String getDelimiter() {
+        return _fileMakingOption.getDelimiter();
+    }
+
+    public void setDelimiter(String delimiter) {
+        _fileMakingOption.setDelimiter(delimiter);
+    }
+
+    public String getLineSeparator() {
+        return _fileMakingOption.getLineSeparator();
+    }
+
+    public void setLineSeparator(String lineSeparator) {
+        _fileMakingOption.setLineSeparator(lineSeparator);
+    }
+
+    public boolean isGoodByeDoubleQuotation() {
+        return _fileMakingOption.isGoodByeDoubleQuotation();
+    }
+
+    public FileMakingOption getFileMakingOption() {
+        return _fileMakingOption;
+    }
+}


Property changes on: announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/bhv/batch/TokenFileOutputOption.java
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/bhv/batch/TokenFileOutputResult.java
===================================================================
--- announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/bhv/batch/TokenFileOutputResult.java	                        (rev 0)
+++ announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/bhv/batch/TokenFileOutputResult.java	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,25 @@
+package jp.sf.pal.announcement.db.allcommon.bhv.batch;
+
+import jp.sf.pal.announcement.db.allcommon.Entity;
+
+/**
+ * @author DBFlute(AutoGenerator)
+ */
+public class TokenFileOutputResult {
+
+    // =====================================================================================
+    //                                                                             Attribute
+    //                                                                             =========
+    protected java.util.List<Entity> _selectedList;
+
+    // =====================================================================================
+    //                                                                              Accessor
+    //                                                                              ========
+    public java.util.List<Entity> getSelectedList() {
+        return _selectedList;
+    }
+
+    public void setSelectedList(java.util.List<Entity> selectedList) {
+        _selectedList = selectedList;
+    }
+}


Property changes on: announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/bhv/batch/TokenFileOutputResult.java
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/bhv/batch/TokenFileReflectionFailure.java
===================================================================
--- announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/bhv/batch/TokenFileReflectionFailure.java	                        (rev 0)
+++ announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/bhv/batch/TokenFileReflectionFailure.java	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,87 @@
+package jp.sf.pal.announcement.db.allcommon.bhv.batch;
+
+import jp.sf.pal.announcement.db.allcommon.Entity;
+
+/**
+ * @author DBFlute(AutoGenerator)
+ */
+public class TokenFileReflectionFailure {
+
+    // =====================================================================================
+    //                                                                             Attribute
+    //                                                                             =========
+    protected java.util.List<String> _columnNameList;
+
+    protected java.util.List<String> _valueList;
+
+    protected String rowString;
+
+    /** The row number. */
+    protected int _rowNumber;
+
+    /** The line number. */
+    protected int _lineNumber;
+
+    protected Entity _entity;
+
+    protected Exception _exception;
+
+    // =====================================================================================
+    //                                                                              Accessor
+    //                                                                              ========
+    public java.util.List<String> getColumnNameList() {
+        return _columnNameList;
+    }
+
+    public void setColumnNameList(java.util.List<String> columnNameList) {
+        this._columnNameList = columnNameList;
+    }
+
+    public java.util.List<String> getValueList() {
+        return _valueList;
+    }
+
+    public void setValueList(java.util.List<String> valueList) {
+        this._valueList = valueList;
+    }
+
+    public String getRowString() {
+        return rowString;
+    }
+
+    public void setRowString(String rowString) {
+        this.rowString = rowString;
+    }
+
+    public int getRowNumber() {
+        return _rowNumber;
+    }
+
+    public void setRowNumber(int rowNumber) {
+        _rowNumber = rowNumber;
+    }
+
+    public int getLineNumber() {
+        return _lineNumber;
+    }
+
+    public void setLineNumber(int lineNumber) {
+        _lineNumber = lineNumber;
+    }
+
+    public Entity getEntity() {
+        return _entity;
+    }
+
+    public void setEntity(Entity value) {
+        _entity = value;
+    }
+
+    public Exception getException() {
+        return _exception;
+    }
+
+    public void setException(Exception value) {
+        _exception = value;
+    }
+}


Property changes on: announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/bhv/batch/TokenFileReflectionFailure.java
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/bhv/batch/TokenFileReflectionOption.java
===================================================================
--- announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/bhv/batch/TokenFileReflectionOption.java	                        (rev 0)
+++ announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/bhv/batch/TokenFileReflectionOption.java	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,76 @@
+package jp.sf.pal.announcement.db.allcommon.bhv.batch;
+
+import jp.sf.pal.announcement.db.allcommon.helper.token.file.FileTokenizingOption;
+
+/**
+ * @author DBFlute(AutoGenerator)
+ */
+public class TokenFileReflectionOption {
+
+    // =====================================================================================
+    //                                                                             Attribute
+    //                                                                             =========
+    protected boolean _interruptIfError;
+
+    protected FileTokenizingOption _fileTokenizingOption = new FileTokenizingOption();
+
+    // =====================================================================================
+    //                                                                           Easy-to-Use
+    //                                                                           ===========
+    public TokenFileReflectionOption delimitateByComma() {
+        _fileTokenizingOption.delimitateByComma();
+        return this;
+    }
+
+    public TokenFileReflectionOption delimitateByTab() {
+        _fileTokenizingOption.delimitateByTab();
+        return this;
+    }
+
+    public TokenFileReflectionOption encodeAsUTF8() {
+        _fileTokenizingOption.encodeAsUTF8();
+        return this;
+    }
+
+    public TokenFileReflectionOption encodeAsWindows31J() {
+        _fileTokenizingOption.encodeAsWindows31J();
+        return this;
+    }
+
+    public TokenFileReflectionOption handleEmptyAsNull() {
+        _fileTokenizingOption.handleEmptyAsNull();
+        return this;
+    }
+
+    public TokenFileReflectionOption interruptIfError() {
+        _interruptIfError = true;
+        return this;
+    }
+
+    // =====================================================================================
+    //                                                                              Accessor
+    //                                                                              ========
+    public String getDelimiter() {
+        return _fileTokenizingOption.getDelimiter();
+    }
+
+    public void setDelimiter(String delimiter) {
+        _fileTokenizingOption.setDelimiter(delimiter);
+    }
+
+    public String getEncoding() {
+        return _fileTokenizingOption.getEncoding();
+    }
+
+    public void setEncoding(String encoding) {
+        _fileTokenizingOption.setDelimiter(encoding);
+    }
+
+    public boolean isHandleEmptyAsNull() {
+        return _fileTokenizingOption.isHandleEmptyAsNull();
+    }
+
+    public boolean isInterruptIfError() {
+        return _interruptIfError;
+    }
+}


Property changes on: announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/bhv/batch/TokenFileReflectionOption.java
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/bhv/batch/TokenFileReflectionResult.java
===================================================================
--- announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/bhv/batch/TokenFileReflectionResult.java	                        (rev 0)
+++ announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/bhv/batch/TokenFileReflectionResult.java	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,51 @@
+package jp.sf.pal.announcement.db.allcommon.bhv.batch;
+
+/**
+ * @author DBFlute(AutoGenerator)
+ */
+public class TokenFileReflectionResult {
+
+    // =====================================================================================
+    //                                                                             Attribute
+    //                                                                             =========
+    protected java.util.List<String> _columnNameList;
+
+    protected int _successCount;
+
+    protected java.util.List<TokenFileReflectionFailure> _failureList;
+
+    // =====================================================================================
+    //                                                                           Easy-to-Use
+    //                                                                           ===========
+    public void incrementSuccessCount() {
+        ++_successCount;
+    }
+
+    // =====================================================================================
+    //                                                                              Accessor
+    //                                                                              ========
+    public java.util.List<String> getColumnNameList() {
+        return _columnNameList;
+    }
+
+    public void setColumnNameList(java.util.List<String> columnNameList) {
+        this._columnNameList = columnNameList;
+    }
+
+    public int getSuccessCount() {
+        return _successCount;
+    }
+
+    public void setSuccessCount(int successCount) {
+        _successCount = successCount;
+    }
+
+    public java.util.List<TokenFileReflectionFailure> getFailureList() {
+        return _failureList;
+    }
+
+    public void setFailureList(
+            java.util.List<TokenFileReflectionFailure> failureList) {
+        this._failureList = failureList;
+    }
+}


Property changes on: announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/bhv/batch/TokenFileReflectionResult.java
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/bhv/load/LoadRefererOption.java
===================================================================
--- announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/bhv/load/LoadRefererOption.java	                        (rev 0)
+++ announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/bhv/load/LoadRefererOption.java	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,74 @@
+package jp.sf.pal.announcement.db.allcommon.bhv.load;
+
+import jp.sf.pal.announcement.db.allcommon.Entity;
+import jp.sf.pal.announcement.db.allcommon.bhv.setup.ConditionBeanSetupper;
+import jp.sf.pal.announcement.db.allcommon.bhv.setup.EntityListSetupper;
+import jp.sf.pal.announcement.db.allcommon.cbean.ConditionBean;
+
+/**
+ * The class of load referrer option.
+ * 
+ * @param <REFERRER_CONDITION_BEAN> The type of referrer condition-bean.
+ * @param <REFERRER_ENTITY> The type of referrer entity.
+ * @author DBFlute(AutoGenerator)
+ */
+public class LoadRefererOption<REFERRER_CONDITION_BEAN extends ConditionBean, REFERRER_ENTITY extends Entity>
+        extends LoadReferrerOption<REFERRER_CONDITION_BEAN, REFERRER_ENTITY> {
+
+    // ===================================================================================
+    //                                                                         Constructor
+    //                                                                         ===========
+    public LoadRefererOption() {
+    }
+
+    public LoadRefererOption(
+            ConditionBeanSetupper<REFERRER_CONDITION_BEAN> conditionBeanSetupper) {
+        super(conditionBeanSetupper);
+    }
+
+    public LoadRefererOption(
+            ConditionBeanSetupper<REFERRER_CONDITION_BEAN> conditionBeanSetupper,
+            EntityListSetupper<REFERRER_ENTITY> entityListSetupper) {
+        super(conditionBeanSetupper, entityListSetupper);
+    }
+
+    public LoadRefererOption(
+            LoadReferrerOption<REFERRER_CONDITION_BEAN, REFERRER_ENTITY> option) {
+        super(option);
+    }
+
+    // ===================================================================================
+    //                                                                            Accessor
+    //                                                                            ========
+    /**
+     * @return The condition-bean of referrer.
+     * @deprecated Sorry! This methid have typo! Please use getRefererConditionBean().
+     */
+    public REFERRER_CONDITION_BEAN getReffererConditionBean() {
+        return super.getReferrerConditionBean();
+    }
+
+    /**
+     * @param referrerConditionBean The condition-bean of referrer.
+     * @deprecated Sorry! This methid have typo! Please use setReferrerConditionBean().
+     */
+    public void setReffererConditionBean(
+            REFERRER_CONDITION_BEAN referrerConditionBean) {
+        super.setReferrerConditionBean(referrerConditionBean);
+    }
+
+    /**
+     * @return The condition-bean of referrer.
+     */
+    public REFERRER_CONDITION_BEAN getRefererConditionBean() {
+        return super.getReferrerConditionBean();
+    }
+
+    /**
+     * @param referrerConditionBean The condition-bean of referrer.
+     */
+    public void setRefererConditionBean(
+            REFERRER_CONDITION_BEAN referrerConditionBean) {
+        super.setReferrerConditionBean(referrerConditionBean);
+    }
+}


Property changes on: announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/bhv/load/LoadRefererOption.java
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/bhv/load/LoadReferrerOption.java
===================================================================
--- announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/bhv/load/LoadReferrerOption.java	                        (rev 0)
+++ announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/bhv/load/LoadReferrerOption.java	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,139 @@
+package jp.sf.pal.announcement.db.allcommon.bhv.load;
+
+import jp.sf.pal.announcement.db.allcommon.Entity;
+import jp.sf.pal.announcement.db.allcommon.bhv.setup.ConditionBeanSetupper;
+import jp.sf.pal.announcement.db.allcommon.bhv.setup.EntityListSetupper;
+import jp.sf.pal.announcement.db.allcommon.cbean.ConditionBean;
+
+/**
+ * The class of load referrer option.
+ * 
+ * @param <REFERRER_CONDITION_BEAN> The type of referrer condition-bean.
+ * @param <REFERRER_ENTITY> The type of referrer entity.
+ * @author DBFlute(AutoGenerator)
+ */
+public class LoadReferrerOption<REFERRER_CONDITION_BEAN extends ConditionBean, REFERRER_ENTITY extends Entity> {
+
+    // ===================================================================================
+    //                                                                           Attribute
+    //                                                                           =========
+    protected ConditionBeanSetupper<REFERRER_CONDITION_BEAN> _conditionBeanSetupper;
+
+    protected EntityListSetupper<REFERRER_ENTITY> _entityListSetupper;
+
+    protected REFERRER_CONDITION_BEAN _referrerConditionBean;
+
+    protected boolean _toLastKeyCondtion;
+
+    protected boolean _stopOrderByKey;
+
+    // ===================================================================================
+    //                                                                         Constructor
+    //                                                                         ===========
+    public LoadReferrerOption() {
+    }
+
+    public LoadReferrerOption(
+            ConditionBeanSetupper<REFERRER_CONDITION_BEAN> conditionBeanSetupper) {
+        this._conditionBeanSetupper = conditionBeanSetupper;
+    }
+
+    public LoadReferrerOption(
+            ConditionBeanSetupper<REFERRER_CONDITION_BEAN> conditionBeanSetupper,
+            EntityListSetupper<REFERRER_ENTITY> entityListSetupper) {
+        this._conditionBeanSetupper = conditionBeanSetupper;
+        this._entityListSetupper = entityListSetupper;
+    }
+
+    public LoadReferrerOption(
+            LoadReferrerOption<REFERRER_CONDITION_BEAN, REFERRER_ENTITY> option) {
+        this._conditionBeanSetupper = option._conditionBeanSetupper;
+        this._entityListSetupper = option._entityListSetupper;
+        this._referrerConditionBean = option._referrerConditionBean;
+        this._toLastKeyCondtion = option._toLastKeyCondtion;
+        this._stopOrderByKey = option._stopOrderByKey;
+    }
+
+    // ===================================================================================
+    //                                                                         Easy-to-Use
+    //                                                                         ===========
+    /**
+     * Specify that the key condition is added as last condition. <br />
+     * This method is valid only after you use reffererConditionBean and add your original condition to it. <br />
+     * 
+     * @return this. (NotNull)
+     */
+    public LoadReferrerOption<REFERRER_CONDITION_BEAN, REFERRER_ENTITY> toLastKeyCondtion() {
+        _toLastKeyCondtion = true;
+        return this;
+    }
+
+    /**
+     * Specify that it stops adding order-by of the key. <br />
+     * This method is valid only after you use reffererConditionBean and add your original order-by to it. <br />
+     * 
+     * @return this. (NotNull)
+     */
+    public LoadReferrerOption<REFERRER_CONDITION_BEAN, REFERRER_ENTITY> stopOrderByKey() {
+        _stopOrderByKey = true;
+        return this;
+    }
+
+    public void delegateKeyConditionExchangingFirstWhereClauseForLastOne(
+            REFERRER_CONDITION_BEAN cb) {// Internal
+        if (!_toLastKeyCondtion) {
+            cb.getSqlClause().exchangeFirstWhereClauseForLastOne();
+        }
+    }
+
+    public void delegateConditionBeanSettingUp(REFERRER_CONDITION_BEAN cb) {// Internal
+        if (_conditionBeanSetupper != null) {
+            _conditionBeanSetupper.setup(cb);
+        }
+    }
+
+    public void delegateEntitySettingUp(
+            java.util.List<REFERRER_ENTITY> entityList) {// Internal
+        if (_entityListSetupper != null) {
+            _entityListSetupper.setup(entityList);
+        }
+    }
+
+    // ===================================================================================
+    //                                                                            Accessor
+    //                                                                            ========
+    public ConditionBeanSetupper<REFERRER_CONDITION_BEAN> getConditionBeanSetupper() {
+        return _conditionBeanSetupper;
+    }
+
+    public void setConditionBeanSetupper(
+            ConditionBeanSetupper<REFERRER_CONDITION_BEAN> conditionBeanSetupper) {
+        this._conditionBeanSetupper = conditionBeanSetupper;
+    }
+
+    public EntityListSetupper<REFERRER_ENTITY> getEntityListSetupper() {
+        return _entityListSetupper;
+    }
+
+    public void setEntityListSetupper(
+            EntityListSetupper<REFERRER_ENTITY> entityListSetupper) {
+        this._entityListSetupper = entityListSetupper;
+    }
+
+    public REFERRER_CONDITION_BEAN getReferrerConditionBean() {
+        return _referrerConditionBean;
+    }
+
+    public void setReferrerConditionBean(
+            REFERRER_CONDITION_BEAN referrerConditionBean) {
+        this._referrerConditionBean = referrerConditionBean;
+    }
+
+    public boolean isToLastKeyCondtion() {
+        return _toLastKeyCondtion;
+    }
+
+    public boolean isStopOrderByKey() {
+        return _stopOrderByKey;
+    }
+}


Property changes on: announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/bhv/load/LoadReferrerOption.java
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/bhv/setup/ConditionBeanSetupper.java
===================================================================
--- announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/bhv/setup/ConditionBeanSetupper.java	                        (rev 0)
+++ announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/bhv/setup/ConditionBeanSetupper.java	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,19 @@
+package jp.sf.pal.announcement.db.allcommon.bhv.setup;
+
+import jp.sf.pal.announcement.db.allcommon.cbean.ConditionBean;
+
+/**
+ * The interface of condition-bean setupper.
+ * 
+ * @param <CONDITION_BEAN> The type of condition-bean.
+ * @author DBFlute(AutoGenerator)
+ */
+public interface ConditionBeanSetupper<CONDITION_BEAN extends ConditionBean> {
+
+    /**
+     * Set up condition.
+     * 
+     * @param cb Condition-bean. (NotNull)
+     */
+    public void setup(CONDITION_BEAN cb);
+}


Property changes on: announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/bhv/setup/ConditionBeanSetupper.java
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/bhv/setup/EntityListSetupper.java
===================================================================
--- announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/bhv/setup/EntityListSetupper.java	                        (rev 0)
+++ announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/bhv/setup/EntityListSetupper.java	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,19 @@
+package jp.sf.pal.announcement.db.allcommon.bhv.setup;
+
+import jp.sf.pal.announcement.db.allcommon.Entity;
+
+/**
+ * The interface of entity list setupper.
+ * 
+ * @param <ENTITY> The type of entity.
+ * @author DBFlute(AutoGenerator)
+ */
+public interface EntityListSetupper<ENTITY extends Entity> {
+
+    /**
+     * Set up entity list.
+     * 
+     * @param entityList Entity list. (NotNull)
+     */
+    public void setup(java.util.List<ENTITY> entityList);
+}


Property changes on: announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/bhv/setup/EntityListSetupper.java
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/bhv/setup/ValueLabelBox.java
===================================================================
--- announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/bhv/setup/ValueLabelBox.java	                        (rev 0)
+++ announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/bhv/setup/ValueLabelBox.java	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,25 @@
+package jp.sf.pal.announcement.db.allcommon.bhv.setup;
+
+/**
+ * The class of Value-Label Box.
+ * @author DBFlute(AutoGenerator)
+ */
+public class ValueLabelBox {
+
+    protected Object _value;
+
+    protected String _label;
+
+    public void setValueLabel(Object value, String label) {
+        this._value = value;
+        this._label = label;
+    }
+
+    public Object getValue() {
+        return _value;
+    }
+
+    public String getLabel() {
+        return _label;
+    }
+}


Property changes on: announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/bhv/setup/ValueLabelBox.java
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/bhv/setup/ValueLabelSetupper.java
===================================================================
--- announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/bhv/setup/ValueLabelSetupper.java	                        (rev 0)
+++ announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/bhv/setup/ValueLabelSetupper.java	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,18 @@
+package jp.sf.pal.announcement.db.allcommon.bhv.setup;
+
+import jp.sf.pal.announcement.db.allcommon.Entity;
+
+/**
+ * The interface of Value-Label Setupper.
+ * @param <ENTITY> The type of entity.
+ * @author DBFlute(AutoGenerator)
+ */
+public interface ValueLabelSetupper<ENTITY extends Entity> {
+
+    /**
+     * Set up value-label.
+     * @param box Value-label box. (NotNull)
+     * @param entity Entity. (NotNull)
+     */
+    public void setup(ValueLabelBox box, ENTITY entity);
+}


Property changes on: announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/bhv/setup/ValueLabelSetupper.java
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/cbean/AbstractConditionBean.java
===================================================================
--- announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/cbean/AbstractConditionBean.java	                        (rev 0)
+++ announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/cbean/AbstractConditionBean.java	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,626 @@
+package jp.sf.pal.announcement.db.allcommon.cbean;
+
+import jp.sf.pal.announcement.db.allcommon.cbean.sqlclause.OrderByClause;
+import jp.sf.pal.announcement.db.allcommon.cbean.sqlclause.SqlClause;
+import jp.sf.pal.announcement.db.allcommon.cbean.sqlclause.WhereClauseSimpleFilter;
+import jp.sf.pal.announcement.db.allcommon.helper.MapListString;
+import jp.sf.pal.announcement.db.allcommon.helper.MapListStringImpl;
+import jp.sf.pal.announcement.db.allcommon.jdbc.StatementConfig;
+import jp.sf.pal.announcement.db.allcommon.util.SimpleSystemUtil;
+
+/**
+ * The condition-bean as abstract.
+ * 
+ * @author DBFlute(AutoGenerator)
+ */
+public abstract class AbstractConditionBean implements ConditionBean {
+
+    // ===================================================================================
+    //                                                                           Attribute
+    //                                                                           =========
+    /** SQL clause instance. */
+    protected final SqlClause _sqlClause;
+    {
+        _sqlClause = ConditionBeanContext.createSqlClause(this);
+    }
+
+    /** Safety max result size. */
+    protected int _safetyMaxResultSize;
+
+    /** The config of statement. (Nullable) */
+    protected StatementConfig _statementConfig;
+
+    // ===================================================================================
+    //                                                                           SqlClause
+    //                                                                           =========
+    /**
+     * The implementation.
+     * 
+     * @return Sql clause. (NotNull)
+     */
+    public SqlClause getSqlClause() {
+        return _sqlClause;
+    }
+
+    // ===================================================================================
+    //                                                                 Where Clause Filter
+    //                                                                 ===================
+    public void addWhereClauseSimpleFilter(
+            WhereClauseSimpleFilter whereClauseSimpleFilter) {
+        this._sqlClause.addWhereClauseSimpleFilter(whereClauseSimpleFilter);
+    }
+
+    // ===================================================================================
+    //                                                                      ConditionQuery
+    //                                                                      ==============
+    /**
+     * Get condition query as interface. At the future, change public to protected.
+     * 
+     * @return Instance of query as interface. (NotNull)
+     */
+    abstract public ConditionQuery getConditionQueryAsInterface();
+
+    /**
+     * The implementation.
+     * 
+     * @return The conditionQuery of the local table as interface. (NotNull)
+     */
+    public ConditionQuery localCQ() {
+        return getConditionQueryAsInterface();
+    }
+
+    // ===================================================================================
+    //                                                                   Accept PrimaryKey
+    //                                                                   =================
+    /**
+     * The implementation.
+     * 
+     * @param primaryKeyMapString Primary-key map. (NotNull and NotEmpty)
+     */
+    public void acceptPrimaryKeyMapString(String primaryKeyMapString) {
+        if (primaryKeyMapString == null) {
+            String msg = "The argument[primaryKeyMapString] must not be null.";
+            throw new IllegalArgumentException(msg);
+        }
+        final String prefix = MAP_STRING_MAP_MARK + MAP_STRING_START_BRACE;
+        final String suffix = MAP_STRING_END_BRACE;
+        if (!primaryKeyMapString.trim().startsWith(prefix)) {
+            primaryKeyMapString = prefix + primaryKeyMapString;
+        }
+        if (!primaryKeyMapString.trim().endsWith(suffix)) {
+            primaryKeyMapString = primaryKeyMapString + suffix;
+        }
+        MapListString mapListString = new MapListStringImpl();
+        mapListString.setMapMark(MAP_STRING_MAP_MARK);
+        mapListString.setListMark(MAP_STRING_LIST_MARK);
+        mapListString.setDelimiter(MAP_STRING_DELIMITER);
+        mapListString.setStartBrace(MAP_STRING_START_BRACE);
+        mapListString.setEndBrace(MAP_STRING_END_BRACE);
+        mapListString.setEqual(MAP_STRING_EQUAL);
+        acceptPrimaryKeyMap(mapListString.generateMap(primaryKeyMapString));
+    }
+
+    protected void checkTypeString(Object value, String propertyName,
+            String typeName) {
+        if (value == null) {
+            throw new IllegalArgumentException("The value should not be null: "
+                    + propertyName);
+        }
+        if (!(value instanceof String)) {
+            String msg = "The value of " + propertyName + " should be "
+                    + typeName + " or String: ";
+            msg = msg + "valueType=" + value.getClass() + " value=" + value;
+            throw new IllegalArgumentException(msg);
+        }
+    }
+
+    protected long parseDateStringAsMillis(Object value, String propertyName,
+            String typeName) {
+        checkTypeString(value, propertyName, typeName);
+        try {
+            final String valueString = (String) value;
+            if (valueString.indexOf("-") >= 0
+                    && valueString.indexOf("-") != valueString.lastIndexOf("-")) {
+                return java.sql.Timestamp.valueOf(valueString).getTime();
+            } else {
+                return getParseDateFormat().parse((String) value).getTime();
+            }
+        } catch (java.text.ParseException e) {
+            String msg = "The value of " + propertyName + " should be "
+                    + typeName + ". but: " + value;
+            throw new RuntimeException(msg + " threw the exception: value=["
+                    + value + "]", e);
+        } catch (RuntimeException e) {
+            String msg = "The value of " + propertyName + " should be "
+                    + typeName + ". but: " + value;
+            throw new RuntimeException(msg + " threw the exception: value=["
+                    + value + "]", e);
+        }
+    }
+
+    private java.text.DateFormat getParseDateFormat() {
+        return java.text.DateFormat.getDateTimeInstance();
+    }
+
+    // ===================================================================================
+    //                                                        Implementation of PagingBean
+    //                                                        ============================
+    // -----------------------------------------------------
+    //                                  Paging Determination
+    //                                  --------------------
+    // * * * * * * * *
+    // For SQL Comment
+    // * * * * * * * *
+    /**
+     * The implementation.
+     * @return Determination.
+     */
+    public boolean isPaging() {
+        String msg = "This method is unsupported on ConditionBean!";
+        throw new UnsupportedOperationException(msg);
+    }
+
+    /**
+     * The implementation.
+     * @param paging Determination.
+     */
+    public void xsetPaging(boolean paging) {
+        String msg = "This method is unsupported on ConditionBean!";
+        throw new UnsupportedOperationException(msg);
+    }
+
+    // -----------------------------------------------------
+    //                                         Fetch Setting
+    //                                         -------------
+    /**
+     * The implementation.
+     * @param fetchSize Fetch-size. (NotMinus & NotZero)
+     * @return this. (NotNUll)
+     */
+    public PagingBean fetchFirst(int fetchSize) {
+        getSqlClause().fetchFirst(fetchSize);
+        return this;
+    }
+
+    /**
+     * The implementation.
+     * @param fetchStartIndex Fetch-start-index. 0 origin. (NotMinus)
+     * @param fetchSize Fetch-size. (NotMinus & NotZero)
+     * @return this. (NotNUll)
+     */
+    public PagingBean fetchScope(int fetchStartIndex, int fetchSize) {
+        getSqlClause().fetchScope(fetchStartIndex, fetchSize);
+        return this;
+    }
+
+    /**
+     * The implementation.
+     * @param fetchPageNumber Fetch-page-number. 1 origin. (NotMinus & NotZero: If minus or zero, set one.)
+     * @return this. (NotNull)
+     */
+    public PagingBean fetchPage(int fetchPageNumber) {
+        getSqlClause().fetchPage(fetchPageNumber);
+        return this;
+    }
+
+    // -----------------------------------------------------
+    //                                        Fetch Property
+    //                                        --------------
+    /**
+     * The implementation.
+     * @return Fetch-start-index.
+     */
+    public int getFetchStartIndex() {
+        return getSqlClause().getFetchStartIndex();
+    }
+
+    /**
+     * The implementation.
+     * @return Fetch-size.
+     */
+    public int getFetchSize() {
+        return getSqlClause().getFetchSize();
+    }
+
+    /**
+     * The implementation.
+     * @return Fetch-page-number.
+     */
+    public int getFetchPageNumber() {
+        return getSqlClause().getFetchPageNumber();
+    }
+
+    /**
+     * The implementation.
+     * @return Page start index. 0 origin. (NotMinus)
+     */
+    public int getPageStartIndex() {
+        return getSqlClause().getPageStartIndex();
+    }
+
+    /**
+     * The implementation.
+     * @return Page end index. 0 origin. (NotMinus)
+     */
+    public int getPageEndIndex() {
+        return getSqlClause().getPageEndIndex();
+    }
+
+    /**
+     * Is fetch scope effective?
+     * @return Determiantion.
+     */
+    public boolean isFetchScopeEffective() {
+        return getSqlClause().isFetchScopeEffective();
+    }
+
+    // -----------------------------------------------------
+    //                                         Hint Property
+    //                                         -------------
+    /**
+     * Get select-hint. {select [select-hint] * from table...}
+     * @return select-hint. (NotNull)
+     */
+    public String getSelectHint() {
+        return getSqlClause().getSelectHint();
+    }
+
+    /**
+     * Get from-base-table-hint. {select * from table [from-base-table-hint] where ...}
+     * @return from-base-table-hint. (NotNull)
+     */
+    public String getFromBaseTableHint() {
+        return getSqlClause().getFromBaseTableHint();
+    }
+
+    /**
+     * Get from-hint. {select * from table left outer join ... on ... [from-hint] where ...}
+     * @return from-hint. (NotNull)
+     */
+    public String getFromHint() {
+        return getSqlClause().getFromHint();
+    }
+
+    /**
+     * Get where clause.
+     * @return Where clause. (NotNull)
+     */
+    public String getWhereClause() {
+        return getSqlClause().getWhereClause();
+    }
+
+    /**
+     * Get sql-suffix. {select * from table where ... order by ... [sql-suffix]}
+     * @return Sql-suffix.  (NotNull)
+     */
+    public String getSqlSuffix() {
+        return getSqlClause().getSqlSuffix();
+    }
+
+    // ===================================================================================
+    //                                                Implementation of FetchNarrowingBean
+    //                                                ====================================
+    /**
+     * The implementation.
+     * @return Fetch start index.
+     */
+    public int getFetchNarrowingSkipStartIndex() {
+        return getSqlClause().getFetchNarrowingSkipStartIndex();
+    }
+
+    /**
+     * The implementation.
+     * @return Fetch size.
+     */
+    public int getFetchNarrowingLoopCount() {
+        return getSqlClause().getFetchNarrowingLoopCount();
+    }
+
+    /**
+     * The implementation.
+     * @return Determination.
+     */
+    public boolean isFetchNarrowingSkipStartIndexEffective() {
+        return !getSqlClause().isFetchStartIndexSupported();
+    }
+
+    /**
+     * The implementation.
+     * @return Determination.
+     */
+    public boolean isFetchNarrowingLoopCountEffective() {
+        return !getSqlClause().isFetchSizeSupported();
+    }
+
+    /**
+     * The implementation.
+     * @return Determiantion.
+     */
+    public boolean isFetchNarrowingEffective() {
+        return getSqlClause().isFetchNarrowingEffective();
+    }
+
+    /**
+     * Ignore fetch narrowing. Only checking safety result size is valid. {INTERNAL METHOD}
+     */
+    public void ignoreFetchNarrowing() {
+        String msg = "This method is unsupported on ConditionBean!";
+        throw new UnsupportedOperationException(msg);
+    }
+
+    /**
+     * Restore ignored fetch narrowing. {INTERNAL METHOD}
+     */
+    public void restoreIgnoredFetchNarrowing() {
+        // Do nothing!
+    }
+
+    /**
+     * Get safety max result size.
+     * @return Safety max result size.
+     */
+    public int getSafetyMaxResultSize() {
+        return _safetyMaxResultSize;
+    }
+
+    /**
+     * Check safety result.
+     * @param safetyMaxResultSize Safety max result size. (If zero or minus, ignore checking)
+     */
+    public void checkSafetyResult(int safetyMaxResultSize) {
+        this._safetyMaxResultSize = safetyMaxResultSize;
+    }
+
+    // ===================================================================================
+    //                                                       Implementation of OrderByBean
+    //                                                       =============================
+    /**
+     * The implementation.
+     * @return Sql component of order-by clause. (NotNull)
+     */
+    public OrderByClause getSqlComponentOfOrderByClause() {
+        return getSqlClause().getSqlComponentOfOrderByClause();
+    }
+
+    /**
+     * The implementation.
+     * @return Order-by clause. (NotNull)
+     */
+    public String getOrderByClause() {
+        return _sqlClause.getOrderByClause();
+    }
+
+    /**
+     * The implementation.
+     * @return this. (NotNull)
+     */
+    public OrderByBean clearOrderBy() {
+        getSqlClause().clearOrderBy();
+        return this;
+    }
+
+    /**
+     * The implementation.
+     * @return this. (NotNull)
+     */
+    public OrderByBean ignoreOrderBy() {
+        getSqlClause().ignoreOrderBy();
+        return this;
+    }
+
+    /**
+     * The implementation.
+     * @return this. (NotNull)
+     */
+    public OrderByBean makeOrderByEffective() {
+        getSqlClause().makeOrderByEffective();
+        return this;
+    }
+
+    // ===================================================================================
+    //                                                                        Limit Select
+    //                                                                        ============
+    /** Is limit-select PK only? */
+    protected boolean _isLimitSelectPKOnly;
+
+    /**
+     * Is limit-select PK only?
+     * @return Determination.
+     */
+    public boolean isLimitSelect_PKOnly() {
+        return _isLimitSelectPKOnly;
+    }
+
+    /**
+     * Limit select PK only.
+     * @return this. (NotNull)
+     */
+    public ConditionBean limitSelect_PKOnly() {
+        _isLimitSelectPKOnly = true;
+        return this;
+    }
+
+    /**
+     * Limit select off.
+     * @return this. (NotNull)
+     */
+    public ConditionBean limitSelect_Off() {
+        _isLimitSelectPKOnly = false;
+        return this;
+    }
+
+    // ===================================================================================
+    //                                                                        Lock Setting
+    //                                                                        ============
+    /**
+     * The implementation.
+     * @return this. (NotNull)
+     */
+    public ConditionBean lockForUpdate() {
+        getSqlClause().lockForUpdate();
+        return this;
+    }
+
+    // ===================================================================================
+    //                                                                        Select Count
+    //                                                                        ============
+    /**
+     * Set up various things for select-count-ignore-fetch-scope. {Internal}
+     * This method is for INTERNAL. Don't invoke this!
+     * @return this. (NotNull)
+     */
+    public ConditionBean xsetupSelectCountIgnoreFetchScope() {
+        _isSelectCountIgnoreFetchScope = true;
+
+        // If the query uses union query, it needs included-select-column.
+        if (!hasUnionQueryOrUnionAllQuery()) {
+            getSqlClause().ignoreIncludedSelectColumn();
+        }
+
+        getSqlClause().ignoreOrderBy();
+        getSqlClause().ignoreFetchScope();
+        return this;
+    }
+
+    /**
+     * Do after-care for select-count-ignore-fetch-scope. {Internal}
+     * This method is for INTERNAL. Don't invoke this!
+     * @return this. (NotNull)
+     */
+    public ConditionBean xafterCareSelectCountIgnoreFetchScope() {
+        _isSelectCountIgnoreFetchScope = false;
+
+        // If the query uses union query, it needs included-select-column.
+        if (!hasUnionQueryOrUnionAllQuery()) {
+            getSqlClause().makeIncludedSelectColumnEffective();
+        }
+
+        getSqlClause().makeOrderByEffective();
+        getSqlClause().makeFetchScopeEffective();
+        return this;
+    }
+
+    /** Is set up various things for select-count-ignore-fetch-scope? */
+    protected boolean _isSelectCountIgnoreFetchScope;
+
+    /**
+     * Is set up various things for select-count-ignore-fetch-scope?
+     * This method is for INTERNAL. Don't invoke this!
+     * @return Determination.
+     */
+    public boolean isSelectCountIgnoreFetchScope() {
+        return _isSelectCountIgnoreFetchScope;
+    }
+
+    // =====================================================================================
+    //                                                                      Statement Config
+    //                                                                      ================
+    /**
+     * @param statementConfig The config of statement. (Nullable)
+     */
+    public void configure(StatementConfig statementConfig) {
+        _statementConfig = statementConfig;
+    }
+
+    /**
+     * @return The config of statement. (Nullable)
+     */
+    public StatementConfig getStatementConfig() {
+        return _statementConfig;
+    }
+
+    // ===================================================================================
+    //                                                                          Format SQL
+    //                                                                          ==========
+    public void formatSql() {
+        getSqlClause().makeFormatClauseEffective();
+    }
+
+    public boolean isFormatSql() {
+        return getSqlClause().isFormatClauseEffective();
+    }
+
+    // ===================================================================================
+    //                                                                       Assert Helper
+    //                                                                       =============
+    protected void assertSetupSelectBeforeUnion(String methodName) {
+        if (hasUnionQueryOrUnionAllQuery()) {
+            throwSetupSelectAfterUnionException(
+                    this.getClass().getSimpleName(), methodName);
+        }
+    }
+
+    protected void throwSetupSelectAfterUnionException(String className,
+            String methodName) {
+        String msg = "Look! Read the message below." + getLineSeparator();
+        msg = msg
+                + "/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *"
+                + getLineSeparator();
+        msg = msg + "You should NOT call " + methodName
+                + " after calling union()!" + getLineSeparator();
+        msg = msg + getLineSeparator();
+        msg = msg + "[Advice]" + getLineSeparator();
+        msg = msg + methodName + " should be called before calling union()."
+                + getLineSeparator();
+        msg = msg + "  For example:" + getLineSeparator();
+        msg = msg + "    /- - - - - - - - - - - - - - - - - - - - "
+                + getLineSeparator();
+        msg = msg + "    " + className + " cb = new " + className + "();"
+                + getLineSeparator();
+        msg = msg + "    cb." + methodName + "; // You shuold call here!"
+                + getLineSeparator();
+        msg = msg + "    cb.query().setXxx...;" + getLineSeparator();
+        msg = msg + "    {" + getLineSeparator();
+        msg = msg + "        " + className + " unionCB = new " + className
+                + "();" + getLineSeparator();
+        msg = msg + "        unionCB.query().setXxx;" + getLineSeparator();
+        msg = msg + "        cb.union(unionCB);" + getLineSeparator();
+        msg = msg + "    }" + getLineSeparator();
+        msg = msg
+                + "    // You should not call setupSelect after calling union()!"
+                + getLineSeparator();
+        msg = msg + "    // cb." + methodName + ";" + getLineSeparator();
+        msg = msg + "    - - - - - - - - - -/" + getLineSeparator();
+        msg = msg + getLineSeparator();
+        msg = msg + "[SetupSelect Method]" + getLineSeparator() + methodName
+                + getLineSeparator();
+        msg = msg + getLineSeparator();
+        msg = msg + "[ConditionBean SQL]" + getLineSeparator() + toDisplaySql()
+                + getLineSeparator();
+        msg = msg + "* * * * * * * * * */" + getLineSeparator();
+        throw new IllegalStateException(msg);
+    }
+
+    // ===================================================================================
+    //                                                                      General Helper
+    //                                                                      ==============
+    protected String getLineSeparator() {
+        return SimpleSystemUtil.getLineSeparator();
+    }
+
+    // ===================================================================================
+    //                                                                         Display SQL
+    //                                                                         ===========
+    /**
+     * Convert this conditionBean to SQL for display.
+     * @return SQL for display. (NotNull and NotEmpty)
+     */
+    public String toDisplaySql() {
+        return ConditionBeanContext.convertConditionBean2DisplaySql(this);
+    }
+
+    // ===================================================================================
+    //                                                                      Basic Override
+    //                                                                      ==============
+    /**
+     * The override.
+     * @return SQL for display. (NotNull)
+     */
+    public String toString() {
+        try {
+            return toDisplaySql();
+        } catch (RuntimeException e) {
+            return getSqlClause().getClause();
+        }
+    }
+}


Property changes on: announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/cbean/AbstractConditionBean.java
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/cbean/AbstractConditionQuery.java
===================================================================
--- announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/cbean/AbstractConditionQuery.java	                        (rev 0)
+++ announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/cbean/AbstractConditionQuery.java	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,1152 @@
+package jp.sf.pal.announcement.db.allcommon.cbean;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Iterator;
+import java.util.LinkedHashMap;
+import java.util.List;
+import java.util.Map;
+
+import jp.sf.pal.announcement.db.allcommon.cbean.ckey.ConditionKey;
+import jp.sf.pal.announcement.db.allcommon.cbean.coption.ConditionOption;
+import jp.sf.pal.announcement.db.allcommon.cbean.coption.FromToOption;
+import jp.sf.pal.announcement.db.allcommon.cbean.coption.InScopeOption;
+import jp.sf.pal.announcement.db.allcommon.cbean.coption.LikeSearchOption;
+import jp.sf.pal.announcement.db.allcommon.cbean.cvalue.ConditionValue;
+import jp.sf.pal.announcement.db.allcommon.cbean.sqlclause.SqlClause;
+import jp.sf.pal.announcement.db.allcommon.dbmeta.DBMeta;
+import jp.sf.pal.announcement.db.allcommon.dbmeta.DBMetaInstanceHandler;
+import jp.sf.pal.announcement.db.allcommon.exception.RequiredOptionNotFoundException;
+import jp.sf.pal.announcement.db.allcommon.util.SimpleStringUtil;
+import jp.sf.pal.announcement.db.allcommon.util.SimpleSystemUtil;
+
+/**
+ * The abstract class of condition-query.
+ * @author DBFlute(AutoGenerator)
+ */
+public abstract class AbstractConditionQuery implements ConditionQuery {
+
+    // ===================================================================================
+    //                                                                           Attribute
+    //                                                                           =========
+    /** Condition value for DUMMY. */
+    protected static final ConditionValue DUMMY_CONDITION_VALUE = new ConditionValue();
+
+    /** Object for DUMMY. */
+    protected static final Object DUMMY_OBJECT = new Object();
+
+    /** The property of condition-query. */
+    protected static final String CQ_PROPERTY = "conditionQuery";
+
+    /** SQL clause. */
+    protected final SqlClause _sqlClause;
+
+    /** My alias name. */
+    protected final String _aliasName;
+
+    /** The level of nest. */
+    protected final int _nestLevel;
+
+    /** The level of subQuery. */
+    protected int _subQueryLevel;
+
+    // -----------------------------------------------------
+    //                                          Foreign Info
+    //                                          ------------
+    /** The property name of foreign. */
+    protected String _foreignPropertyName;
+
+    /** The path of relation. */
+    protected String _relationPath;
+
+    /** The query of child. */
+    protected final ConditionQuery _childQuery;
+
+    // -----------------------------------------------------
+    //                                                Inline
+    //                                                ------
+    /** Is it the inline for on-clause. (Property for Inline Only) */
+    protected boolean _onClauseInline;
+
+    // ===================================================================================
+    //                                                                         Constructor
+    //                                                                         ===========
+    /**
+     * Constructor.
+     * @param childQuery Child query. (Nullable: If null, this is base instance.)
+     * @param sqlClause SQL clause instance. (NotNull)
+     * @param aliasName My alias name. (NotNull)
+     * @param nestLevel Nest level.
+     */
+    public AbstractConditionQuery(ConditionQuery childQuery,
+            SqlClause sqlClause, String aliasName, int nestLevel) {
+        _childQuery = childQuery;
+        _sqlClause = sqlClause;
+        _aliasName = aliasName;
+        _nestLevel = nestLevel;
+    }
+
+    // ===================================================================================
+    //                                                                  Important Accessor
+    //                                                                  ==================
+    /**
+     * Get child query.
+     * @return Child query. (Nullable)
+     */
+    public ConditionQuery getChildQuery() {
+        return _childQuery;
+    }
+
+    /**
+     * Get sql clause.
+     * @return Sql clause. (NotNull)
+     */
+    public SqlClause getSqlClause() {
+        return _sqlClause;
+    }
+
+    /**
+     * Get alias name.
+     * @return Alias name. (NotNull)
+     */
+    public String getAliasName() {
+        return _aliasName;
+    }
+
+    /**
+     * Get nest level.
+     * @return Nest level.
+     */
+    public int getNestLevel() {
+        return _nestLevel;
+    }
+
+    /**
+     * Get next nest level.
+     * @return Next nest level.
+     */
+    public int getNextNestLevel() {
+        return _nestLevel + 1;
+    }
+
+    /**
+     * Is base query?
+     * @param query Condition query. (NotNull)
+     * @return Determination.
+     */
+    public boolean isBaseQuery(ConditionQuery query) {
+        return (query.getChildQuery() == null);
+    }
+
+    /**
+     * Get the level of subQuery.
+     * @return The level of subQuery.
+     */
+    public int getSubQueryLevel() {
+        return _subQueryLevel;
+    }
+
+    // -----------------------------------------------------
+    //                                             Real Name
+    //                                             ---------
+    /**
+     * Get real alias name(that has nest level mark).
+     * @return Real alias name.
+     */
+    public String getRealAliasName() {
+        return getAliasName();
+    }
+
+    /**
+     * Get real column name(with real alias name).
+     * @param columnName Column name without alias name. This should not contain comma. (NotNull)
+     * @return Real column name.
+     */
+    public String getRealColumnName(String columnName) {
+        assertColumnName(columnName);
+        return buildRealColumnName(getRealAliasName(), columnName);
+    }
+
+    /**
+     * Build real column name.
+     * @param aliasName Alias name. (NotNull)
+     * @param columnName Column name. (NotNull)
+     * @return Real column name. (NotNull)
+     */
+    protected String buildRealColumnName(String aliasName, String columnName) {
+        return aliasName + "." + columnName;
+    }
+
+    // -----------------------------------------------------
+    //                                          Foreign Info
+    //                                          ------------
+    public String getForeignPropertyName() {
+        return _foreignPropertyName;
+    }
+
+    public void xsetForeignPropertyName(String foreignPropertyName) {
+        this._foreignPropertyName = foreignPropertyName;
+    }
+
+    public String getRelationPath() {
+        return _relationPath;
+    }
+
+    public void xsetRelationPath(String relationPath) {
+        this._relationPath = relationPath;
+    }
+
+    // -----------------------------------------------------
+    //                                                Inline
+    //                                                ------
+    public void xsetOnClauseInline(boolean onClauseInline) {
+        _onClauseInline = onClauseInline;
+    }
+
+    // ===================================================================================
+    //                                                                            Location
+    //                                                                            ========
+    /**
+     * Get location.
+     * @param columnPropertyName Column property name.
+     * @param key Condition key.
+     * @return Next nest level.
+     */
+    protected String getLocation(String columnPropertyName, ConditionKey key) {
+        return getLocationBase(columnPropertyName) + "."
+                + key.getConditionKey();
+    }
+
+    protected String getLocationBase() {
+        final StringBuffer sb = new StringBuffer();
+        ConditionQuery query = this;
+        while (true) {
+            if (query.isBaseQuery(query)) {
+                sb.insert(0, CQ_PROPERTY + ".");
+                break;
+            } else {
+                final String foreignPropertyName = query
+                        .getForeignPropertyName();
+                if (foreignPropertyName == null) {
+                    String msg = "The foreignPropertyName of the query should not be null:";
+                    msg = msg + " query=" + query;
+                    throw new IllegalStateException(msg);
+                }
+                sb.insert(0, CQ_PROPERTY + initCap(foreignPropertyName) + ".");
+            }
+            query = query.getChildQuery();
+        }
+        return sb.toString();
+    }
+
+    protected String getLocationBase(String columnPropertyName) {
+        return getLocationBase() + columnPropertyName;
+    }
+
+    // ===================================================================================
+    //                                                                         Union Query
+    //                                                                         ===========
+    /** The map of union query. */
+    protected Map<String, ConditionQuery> _unionQueryMap;
+
+    /**
+     * Get the map of union query.
+     * 
+     * @return The map of union query. (NotNull)
+     */
+    public Map<String, ConditionQuery> getUnionQueryMap() {// for Internal
+        if (_unionQueryMap == null) {
+            _unionQueryMap = new LinkedHashMap<String, ConditionQuery>();
+        }
+        return _unionQueryMap;
+    }
+
+    /**
+     * Set union query. {Internal}
+     * <pre>
+     * Add union query to condition bean.
+     * </pre>
+     * @param unionQuery Union query. (NotNull)
+     */
+    public void xsetUnionQuery(ConditionQuery unionQuery) {
+        xsetupUnion(unionQuery, false, getUnionQueryMap());
+    }
+
+    /** The map of union all query. */
+    protected Map<String, ConditionQuery> _unionAllQueryMap;
+
+    /**
+     * Get the map of union all query.
+     * 
+     * @return The map of union all query. (NotNull)
+     */
+    public Map<String, ConditionQuery> getUnionAllQueryMap() {// for Internal
+        if (_unionAllQueryMap == null) {
+            _unionAllQueryMap = new LinkedHashMap<String, ConditionQuery>();
+        }
+        return _unionAllQueryMap;
+    }
+
+    /**
+     * Set union all query. {Internal}
+     * <pre>
+     * Add union all query to condition bean.
+     * </pre>
+     * @param unionAllQuery Union all query. (NotNull)
+     */
+    public void xsetUnionAllQuery(ConditionQuery unionAllQuery) {
+        xsetupUnion(unionAllQuery, true, getUnionAllQueryMap());
+    }
+
+    protected void xsetupUnion(ConditionQuery unionQuery, boolean unionAll,
+            Map<String, ConditionQuery> unionQueryMap) {
+        if (unionQuery == null) {
+            String msg = "The argument[unionQuery] should not be null.";
+            throw new IllegalArgumentException(msg);
+        }
+        reflectRelationOnUnionQuery(this, unionQuery);// Reflect Relation!
+        getSqlClause().copyIncludedSelectColumn(unionQuery.getSqlClause());// Reflect IncludedSelectColumn!
+        if (getSqlClause().isFormatClauseEffective()) {
+            unionQuery.getSqlClause().makeFormatClauseEffective();// Reflect FormatClause!
+        }
+        final String key = (unionAll ? "unionAllQuery" : "unionQuery")
+                + unionQueryMap.size();
+        unionQueryMap.put(key, unionQuery);
+        registerUnionQuery(unionQuery, unionAll, (unionAll ? "unionAllQueryMap"
+                : "unionQueryMap")
+                + "." + key);
+    }
+
+    /**
+     * Reflect relation on union query.
+     * 
+     * @param baseQueryAsSuper Base query as super. (NotNull)
+     * @param unionQueryAsSuper Union query as super. (NotNull)
+     */
+    abstract protected void reflectRelationOnUnionQuery(
+            ConditionQuery baseQueryAsSuper, ConditionQuery unionQueryAsSuper);
+
+    /**
+     * Has union query or union all query?
+     * 
+     * @return Determination.
+     */
+    public boolean hasUnionQueryOrUnionAllQuery() {
+        return (_unionQueryMap != null && !_unionQueryMap.isEmpty())
+                || (_unionAllQueryMap != null && !_unionAllQueryMap.isEmpty());
+    }
+
+    /**
+     * Get the list of union query.
+     * 
+     * @return The list of union query. (NotNull)
+     */
+    public List<ConditionQuery> getUnionQueryList() {
+        if (_unionQueryMap == null) {
+            return new ArrayList<ConditionQuery>();
+        }
+        return new ArrayList<ConditionQuery>(_unionQueryMap.values());
+    }
+
+    /**
+     * Get the list of union all query.
+     * 
+     * @return The list of union all query. (NotNull)
+     */
+    public List<ConditionQuery> getUnionAllQueryList() {
+        if (_unionAllQueryMap == null) {
+            return new ArrayList<ConditionQuery>();
+        }
+        return new ArrayList<ConditionQuery>(_unionAllQueryMap.values());
+    }
+
+    // ===================================================================================
+    //                                                                            Register
+    //                                                                            ========
+    // -----------------------------------------------------
+    //                                       Include-As-Mine
+    //                                       ---------------
+    /**
+     * Register included-select-column.
+     * 
+     * @param aliasName Alias name. This should not contain comma. (NotNull)
+     * @param realColumnName Real column name. This should not contain comma. (NotNull)
+     */
+    protected void registerIncludedSelectColumn(String aliasName,
+            String realColumnName) {
+        assertAliasName(aliasName);
+        assertColumnName(realColumnName);
+        getSqlClause().registerIncludedSelectColumn(aliasName, realColumnName);
+    }
+
+    // -----------------------------------------------------
+    //                                                 Query
+    //                                                 -----
+    protected void registerQuery(ConditionKey key, Object value,
+            ConditionValue cvalue, String colName, String capPropName,
+            String uncapPropName) {
+        if (key.isValidRegistration(cvalue, value, key.getConditionKey()
+                + " of " + getRealAliasName() + "." + colName)) {
+            setupConditionValueAndRegisterWhereClause(key, value, cvalue,
+                    colName, capPropName, uncapPropName);
+        }
+    }
+
+    protected void registerQuery(ConditionKey key, Object value,
+            ConditionValue cvalue, String colName, String capPropName,
+            String uncapPropName, ConditionOption option) {
+        if (key.isValidRegistration(cvalue, value, key.getConditionKey()
+                + " of " + getRealAliasName() + "." + colName)) {
+            setupConditionValueAndRegisterWhereClause(key, value, cvalue,
+                    colName, capPropName, uncapPropName, option);
+        }
+    }
+
+    // -----------------------------------------------------
+    //                                          FromTo Query
+    //                                          ------------
+    protected void registerFromToQuery(java.util.Date fromDate,
+            java.util.Date toDate, ConditionValue cvalue, String colName,
+            String capPropName, String uncapPropName, FromToOption option) {
+        {
+            final java.util.Date filteredFromDate = option
+                    .filterFromDate(fromDate);
+            final ConditionKey fromKey = option.getFromDateConditionKey();
+            if (fromKey.isValidRegistration(cvalue, filteredFromDate, fromKey
+                    .getConditionKey()
+                    + " of " + getRealAliasName() + "." + uncapPropName)) {
+                setupConditionValueAndRegisterWhereClause(fromKey,
+                        filteredFromDate, cvalue, colName, capPropName,
+                        uncapPropName);
+            }
+        }
+        {
+            final java.util.Date filteredToDate = option.filterToDate(toDate);
+            final ConditionKey toKey = option.getToDateConditionKey();
+            if (toKey.isValidRegistration(cvalue, filteredToDate, toKey
+                    .getConditionKey()
+                    + " of " + getRealAliasName() + "." + uncapPropName)) {
+                setupConditionValueAndRegisterWhereClause(toKey,
+                        filteredToDate, cvalue, colName, capPropName,
+                        uncapPropName);
+            }
+        }
+    }
+
+    // -----------------------------------------------------
+    //                                      LikeSearch Query
+    //                                      ----------------
+    protected void registerLikeSearchQuery(ConditionKey key, String value,
+            ConditionValue cvalue, String colName, String capPropName,
+            String uncapPropName, LikeSearchOption option) {
+        final String validationMsg = key.getConditionKey() + " of "
+                + getRealAliasName() + "." + colName;
+        if (!key.isValidRegistration(cvalue, value, validationMsg)) {
+            return;
+        }
+        if (option == null) {
+            throwLikeSearchOptionNotFoundException(capPropName, value);
+            return;// Unreachable!
+        }
+        if (value == null || !option.isSplit()) {
+            // As Normal Condition.
+            setupConditionValueAndRegisterWhereClause(key, value, cvalue,
+                    colName, capPropName, uncapPropName, option);
+            return;
+        }
+        // - - - - - - - - -
+        // Use splitByXxx().
+        // - - - - - - - - -
+        final String[] strArray = option.generateSplitValueArray(value);
+        if (!option.isAsOrSplit()) {
+            // As 'and' Condition
+            for (int i = 0; i < strArray.length; i++) {
+                final String currentValue = strArray[i];
+                setupConditionValueAndRegisterWhereClause(key, currentValue,
+                        cvalue, colName, capPropName, uncapPropName, option);
+
+                // Callback for LikeAsOr!
+                final List<LikeSearchOption.LikeAsOrCallback> callbackList = option
+                        .getLikeAsOrCallbackList();
+                if (!callbackList.isEmpty()) {
+                    getSqlClause().makeAdditionalConditionAsOrEffective();
+                    for (Iterator<LikeSearchOption.LikeAsOrCallback> ite = callbackList
+                            .iterator(); ite.hasNext();) {
+                        final LikeSearchOption.LikeAsOrCallback likeAsOrCallback = (LikeSearchOption.LikeAsOrCallback) ite
+                                .next();
+                        final String additionalTargetPropertyName = likeAsOrCallback
+                                .getAdditionalTargetPropertyName();
+                        final String filteredValue = likeAsOrCallback
+                                .filterValue(currentValue);
+                        final LikeSearchOption optionDeepCopy = (LikeSearchOption) option
+                                .createDeepCopy();
+                        optionDeepCopy.clearLikeAsOrCallback();
+                        final LikeSearchOption filteredOption = likeAsOrCallback
+                                .filterOption(optionDeepCopy);
+                        invokeSetterLikeSearch(additionalTargetPropertyName,
+                                filteredValue, filteredOption);
+                    }
+                    getSqlClause().ignoreAdditionalConditionAsOr();
+                }
+            }
+        } else {
+            // As 'or' Condition
+            for (int i = 0; i < strArray.length; i++) {
+                final String currentValue = strArray[i];
+                if (i == 0) {
+                    setupConditionValueAndRegisterWhereClause(key,
+                            currentValue, cvalue, colName, capPropName,
+                            uncapPropName, option);
+                } else {
+                    getSqlClause().makeAdditionalConditionAsOrEffective();
+                    invokeSetterLikeSearch(uncapPropName, currentValue, option);
+                }
+            }
+
+            // @jflute -- Callback for LikeAsOr!
+            // final List<LikeSearchOption.LikeAsOrCallback> callbackList = option.getLikeAsOrCallbackList();
+            // ...
+
+            getSqlClause().ignoreAdditionalConditionAsOr();
+        }
+    }
+
+    protected void throwLikeSearchOptionNotFoundException(String capPropName,
+            String value) {
+        String msg = "Look! Read the message below." + getLineSeparator();
+        msg = msg
+                + "/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *"
+                + getLineSeparator();
+        msg = msg + "The likeSearchOption was Not Found! (Should not be null!)"
+                + getLineSeparator();
+        msg = msg + getLineSeparator();
+        msg = msg + "[Advice]" + getLineSeparator();
+        msg = msg + "Please confirm your method call:" + getLineSeparator();
+        final String beanName = getClass().getSimpleName();
+        final String methodName = "set" + capPropName + "_LikeSearch('" + value
+                + "', likeSearchOption);";
+        msg = msg + "    " + beanName + "." + methodName + getLineSeparator();
+        msg = msg + "* * * * * * * * * */" + getLineSeparator();
+        throw new RequiredOptionNotFoundException(msg);
+    }
+
+    protected void invokeSetterLikeSearch(String columnFlexibleName,
+            Object value, LikeSearchOption option) {
+        if (value == null) {
+            return;
+        }
+        final DBMeta dbmeta = DBMetaInstanceHandler
+                .findDBMeta(getTableDbName());
+        final String columnCapPropName = initCap(dbmeta
+                .findPropertyName(columnFlexibleName));
+        String methodName = "set" + columnCapPropName + "_"
+                + "likeSearch".substring(0, 1).toUpperCase()
+                + "likeSearch".substring(1);
+        java.lang.reflect.Method method = null;
+        try {
+            method = this.getClass().getMethod(methodName,
+                    new Class[] { value.getClass(), LikeSearchOption.class });
+        } catch (NoSuchMethodException e) {
+            String msg = "The columnFlexibleName is not existing in this table: columnFlexibleName="
+                    + columnFlexibleName;
+            msg = msg + " tableName=" + getTableDbName() + " methodName="
+                    + methodName;
+            throw new RuntimeException(msg, e);
+        }
+        try {
+            method.invoke(this, new Object[] { value, option });
+        } catch (IllegalAccessException e) {
+            throw new RuntimeException(e);
+        } catch (java.lang.reflect.InvocationTargetException e) {
+            throw new RuntimeException(e.getCause());
+        }
+    }
+
+    // -----------------------------------------------------
+    //                                         InScope Query
+    //                                         -------------
+    protected void registerInScopeQuery(ConditionKey key, String value,
+            ConditionValue cvalue, String colName, String capPropName,
+            String uncapPropName, InScopeOption option) {
+        if (key.isValidRegistration(cvalue, value, key.getConditionKey()
+                + " of " + getRealAliasName() + "." + colName)) {
+            if (value != null && option.isSplit()) {
+                final String[] strArray = option.generateSplitValueArray(value);
+                final List<String> realValueList = new ArrayList<String>();
+                for (int i = 0; i < strArray.length; i++) {
+                    final String currentValue = strArray[i];
+                    realValueList.add(currentValue);
+                }
+                setupConditionValueAndRegisterWhereClause(key, realValueList,
+                        cvalue, colName, capPropName, uncapPropName, option);
+            } else {
+                setupConditionValueAndRegisterWhereClause(key, value, cvalue,
+                        colName, capPropName, uncapPropName, option);
+            }
+        }
+    }
+
+    // -----------------------------------------------------
+    //                                          Inline Query
+    //                                          ------------
+    protected void registerInlineQuery(ConditionKey key, Object value,
+            ConditionValue cvalue, String colName, String capPropName,
+            String uncapPropName) {
+        if (key.isValidRegistration(cvalue, value, key.getConditionKey()
+                + " of " + getRealAliasName() + "." + colName)) {
+            key.setupConditionValue(cvalue, value, getLocation(uncapPropName,
+                    key));// If Java, it is necessary to use uncapPropName!
+            if (isBaseQuery(this)) {
+                getSqlClause().registerBaseTableInlineWhereClause(colName, key,
+                        cvalue);
+            } else {
+                getSqlClause().registerOuterJoinInlineWhereClause(
+                        getRealAliasName(), colName, key, cvalue,
+                        _onClauseInline);
+            }
+        }
+    }
+
+    protected void registerInlineQuery(ConditionKey key, Object value,
+            ConditionValue cvalue, String colName, String capPropName,
+            String uncapPropName, ConditionOption option) {
+        if (key.isValidRegistration(cvalue, value, key.getConditionKey()
+                + " of " + getRealAliasName() + "." + colName)) {
+            key.setupConditionValue(cvalue, value, getLocation(uncapPropName,
+                    key), option);// If Java, it is necessary to use uncapPropName!
+            if (isBaseQuery(this)) {
+                getSqlClause().registerBaseTableInlineWhereClause(colName, key,
+                        cvalue, option);
+            } else {
+                getSqlClause().registerOuterJoinInlineWhereClause(
+                        getRealAliasName(), colName, key, cvalue, option,
+                        _onClauseInline);
+            }
+        }
+    }
+
+    // -----------------------------------------------------
+    //                                       InScopeSubQuery
+    //                                       ---------------
+    protected void registerInScopeSubQuery(ConditionQuery subQuery,
+            String columnName, String relatedColumnName, String propertyName) {
+        final String realColumnName = getInScopeSubQueryRealColumnName(columnName);
+        final String subQueryClause = getInScopeSubQuerySql(subQuery,
+                relatedColumnName, propertyName);
+        registerWhereClause(realColumnName + " in (" + subQueryClause + ")");
+    }
+
+    protected String getInScopeSubQueryRealColumnName(String columnName) {
+        return getRealColumnName(columnName);
+    }
+
+    protected String getInScopeSubQuerySql(ConditionQuery subQuery,
+            String relatedColumnName, String propertyName) {
+        final String selectClause = "select "
+                + getSqlClause().getLocalTableAliasName() + "."
+                + relatedColumnName;
+        String fromWhereClause = subQuery.getSqlClause()
+                .getClauseFromWhereWithUnionTemplate();
+        fromWhereClause = replaceString(fromWhereClause, ".conditionQuery.",
+                "." + getLocationBase(propertyName) + ".");// Very Important!
+
+        // Replace template marks. These are very important!
+        fromWhereClause = replaceString(fromWhereClause, getSqlClause()
+                .getUnionSelectClauseMark(), selectClause);
+        fromWhereClause = replaceString(fromWhereClause, getSqlClause()
+                .getUnionWhereClauseMark(), "");
+        fromWhereClause = replaceString(fromWhereClause, getSqlClause()
+                .getUnionWhereFirstConditionMark(), "");
+
+        return selectClause + " " + fromWhereClause;
+    }
+
+    // -----------------------------------------------------
+    //                                        ExistsSubQuery
+    //                                        --------------
+    protected void registerExistsSubQuery(ConditionQuery subQuery,
+            String columnName, String relatedColumnName, String propertyName) {
+        final String realColumnName = getExistsSubQueryRealColumnName(columnName);
+        final String subQueryClause = getExistsSubQuerySql(subQuery,
+                realColumnName, relatedColumnName, propertyName);
+        registerWhereClause("exists (" + subQueryClause + ")");
+    }
+
+    protected String getExistsSubQueryRealColumnName(String columnName) {
+        return getRealColumnName(columnName);
+    }
+
+    // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
+    // *Unsupport ExistsSubQuery as inline because it's so dangerous.
+    // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
+
+    protected String getExistsSubQuerySql(ConditionQuery subQuery,
+            String realColumnName, String relatedColumnName, String propertyName) {
+        final int subQueryLevel = subQuery.getSubQueryLevel();
+        if (_subQueryLevel <= subQueryLevel) {
+            _subQueryLevel = subQueryLevel + 1;
+        }
+        final String tableAliasName = "dfsublocal_" + subQueryLevel;
+        final String selectClause = "select " + tableAliasName + "."
+                + relatedColumnName;
+        String fromWhereClause = subQuery.getSqlClause()
+                .getClauseFromWhereWithWhereUnionTemplate();
+        fromWhereClause = replaceString(fromWhereClause, "dflocal",
+                tableAliasName);// Very Important!
+        fromWhereClause = replaceString(fromWhereClause, ".conditionQuery.",
+                "." + getLocationBase(propertyName) + ".");// Very Important!
+
+        final String joinCondition = tableAliasName + "." + relatedColumnName
+                + " = " + realColumnName;
+
+        // Replace template marks. These are very important!
+        fromWhereClause = replaceString(fromWhereClause, getSqlClause()
+                .getWhereClauseMark(), "where " + joinCondition);
+        fromWhereClause = replaceString(fromWhereClause, getSqlClause()
+                .getWhereFirstConditionMark(), joinCondition + " and ");
+        fromWhereClause = replaceString(fromWhereClause, getSqlClause()
+                .getUnionSelectClauseMark(), selectClause);
+        fromWhereClause = replaceString(fromWhereClause, getSqlClause()
+                .getUnionWhereClauseMark(), "where " + joinCondition);
+        fromWhereClause = replaceString(fromWhereClause, getSqlClause()
+                .getUnionWhereFirstConditionMark(), joinCondition + " and ");
+
+        return selectClause + " " + fromWhereClause;
+    }
+
+    // -----------------------------------------------------
+    //                                          Where Clause
+    //                                          ------------
+    protected void setupConditionValueAndRegisterWhereClause(ConditionKey key,
+            Object value, ConditionValue cvalue, String colName,
+            String capPropName, String uncapPropName) {
+        key.setupConditionValue(cvalue, value, getLocation(uncapPropName, key));// If Java, it is necessary to use uncapPropName!
+        getSqlClause().registerWhereClause(getRealColumnName(colName), key,
+                cvalue);
+    }
+
+    protected void setupConditionValueAndRegisterWhereClause(ConditionKey key,
+            Object value, ConditionValue cvalue, String colName,
+            String capPropName, String uncapPropName, ConditionOption option) {
+        key.setupConditionValue(cvalue, value, getLocation(uncapPropName, key),
+                option);// If Java, it is necessary to use uncapPropName!
+        getSqlClause().registerWhereClause(getRealColumnName(colName), key,
+                cvalue, option);
+    }
+
+    protected void registerWhereClause(String whereClause) {
+        getSqlClause().registerWhereClause(whereClause);
+    }
+
+    protected void registerInlineWhereClause(String whereClause) {
+        if (isBaseQuery(this)) {
+            getSqlClause().registerBaseTableInlineWhereClause(whereClause);
+        } else {
+            getSqlClause().registerOuterJoinInlineWhereClause(
+                    getRealAliasName(), whereClause, _onClauseInline);
+        }
+    }
+
+    // -----------------------------------------------------
+    //                                           Union Query
+    //                                           -----------
+    public void registerUnionQuery(ConditionQuery unionQuery, boolean unionAll,
+            String unionQueryPropertyName) {
+        final String unionQueryClause = getUnionQuerySql(unionQuery,
+                unionQueryPropertyName);
+
+        // At the future, building SQL will be moved to sqlClause.
+        getSqlClause().registerUnionQuery(unionQueryClause, unionAll);
+    }
+
+    protected String getUnionQuerySql(ConditionQuery unionQuery,
+            String unionQueryPropertyName) {
+        final String fromClause = unionQuery.getSqlClause().getFromClause();
+        final String whereClause = unionQuery.getSqlClause().getWhereClause();
+        final String unionQueryClause;
+        if (whereClause.trim().length() <= 0) {
+            unionQueryClause = fromClause + " "
+                    + getSqlClause().getUnionWhereClauseMark();
+        } else {
+            final int whereIndex = whereClause.indexOf("where ");
+            if (whereIndex < 0) {
+                String msg = "The whereClause should have 'where' string: "
+                        + whereClause;
+                throw new IllegalStateException(msg);
+            }
+            final int clauseIndex = whereIndex + "where ".length();
+            final String mark = getSqlClause()
+                    .getUnionWhereFirstConditionMark();
+            unionQueryClause = fromClause + " "
+                    + whereClause.substring(0, clauseIndex) + mark
+                    + whereClause.substring(clauseIndex);
+        }
+        final String oldStr = ".conditionQuery.";
+        final String newStr = ".conditionQuery." + unionQueryPropertyName + ".";
+        return replaceString(unionQueryClause, oldStr, newStr);// Very Important!
+    }
+
+    // -----------------------------------------------------
+    //                                               OrderBy
+    //                                               -------
+    public void withNullsFirst() {// is User Public!
+        getSqlClause().addNullsFirstToPreviousOrderBy();
+    }
+
+    public void withNullsLast() {// is User Public!
+        getSqlClause().addNullsLastToPreviousOrderBy();
+    }
+
+    protected void registerOrderBy(String columnName, boolean ascOrDesc) {
+        getSqlClause().registerOrderBy(getRealColumnName(columnName), null,
+                ascOrDesc);
+    }
+
+    // ===================================================================================
+    //                                                                       Name Resolver
+    //                                                                       =============
+    /**
+     * Resolve join alias name.
+     * @param relationPath Relation path. (NotNull)
+     * @param nestLevel Nest level.
+     * @return Resolved join alias name. (NotNull)
+     */
+    protected String resolveJoinAliasName(String relationPath, int nestLevel) {
+        return getSqlClause().resolveJoinAliasName(relationPath, nestLevel);
+    }
+
+    protected String resolveNestLevelExpression(String name) {
+        return getSqlClause().resolveNestLevelExpression(name, getNestLevel());
+    }
+
+    protected String resolveNextRelationPath(String tableName,
+            String relationPropertyName) {
+        final int relationNo = getSqlClause().resolveRelationNo(tableName,
+                relationPropertyName);
+        String nextRelationPath = "_" + relationNo;
+        if (_relationPath != null) {
+            nextRelationPath = _relationPath + nextRelationPath;
+        }
+        return nextRelationPath;
+    }
+
+    // ===================================================================================
+    //                                                                     Fixed Condition
+    //                                                                     ===============
+    protected String prepareFixedCondition(String fixedCondition,
+            String localAliasName, String foreignAliasName) {
+        fixedCondition = replaceString(fixedCondition, "$$alias$$",
+                foreignAliasName);
+        fixedCondition = replaceString(fixedCondition, "$$foreignAlias$$",
+                foreignAliasName);
+        fixedCondition = replaceString(fixedCondition, "$$localAlias$$",
+                localAliasName);
+        return fixedCondition;
+    }
+
+    // ===================================================================================
+    //                                                                              Invoke
+    //                                                                              ======
+    /**
+     * The implementation.
+     * 
+     * @param columnFlexibleName The flexible name of the column. (NotNull and NotEmpty)
+     * @return The conditionValue. (NotNull)
+     */
+    public ConditionValue invokeValue(String columnFlexibleName) {
+        final DBMeta dbmeta = DBMetaInstanceHandler
+                .findDBMeta(getTableDbName());
+        final String columnCapPropName = initCap(dbmeta
+                .findPropertyName(columnFlexibleName));
+        String methodName = "get" + columnCapPropName;
+        java.lang.reflect.Method method = null;
+        try {
+            method = this.getClass().getMethod(methodName, new Class[] {});
+        } catch (NoSuchMethodException e) {
+            String msg = "The columnFlexibleName is not existing in this table: columnFlexibleName="
+                    + columnFlexibleName;
+            msg = msg + " tableName=" + getTableDbName() + " methodName="
+                    + methodName;
+            throw new RuntimeException(msg, e);
+        }
+        try {
+            final Object result = method.invoke(this, new Object[] {});
+            return (ConditionValue) result;
+        } catch (IllegalAccessException e) {
+            throw new RuntimeException(e);
+        } catch (java.lang.reflect.InvocationTargetException e) {
+            throw new RuntimeException(e.getCause());
+        }
+    }
+
+    /**
+     * Invoke setting query.
+     * 
+     * @param columnFlexibleName The flexible name of the column. (NotNull and NotEmpty)
+     * @param conditionKeyName The name of the conditionKey. (NotNull)
+     * @param value The value of the condition. (NotNull)
+     */
+    public void invokeQuery(String columnFlexibleName, String conditionKeyName,
+            Object value) {
+        if (value == null) {
+            return;
+        }
+        final DBMeta dbmeta = DBMetaInstanceHandler
+                .findDBMeta(getTableDbName());
+        final String columnCapPropName = initCap(dbmeta
+                .findPropertyName(columnFlexibleName));
+        String methodName = "set" + columnCapPropName + "_"
+                + conditionKeyName.substring(0, 1).toUpperCase()
+                + conditionKeyName.substring(1);
+        java.lang.reflect.Method method = null;
+        try {
+            method = this.getClass().getMethod(methodName,
+                    new Class[] { value.getClass() });
+        } catch (NoSuchMethodException e) {
+            String msg = "The columnFlexibleName is not existing in this table: columnFlexibleName="
+                    + columnFlexibleName;
+            msg = msg + " tableName=" + getTableDbName() + " methodName="
+                    + methodName;
+            throw new RuntimeException(msg, e);
+        }
+        try {
+            method.invoke(this, new Object[] { value });
+        } catch (IllegalAccessException e) {
+            throw new RuntimeException(e);
+        } catch (java.lang.reflect.InvocationTargetException e) {
+            throw new RuntimeException(e.getCause());
+        }
+    }
+
+    /**
+     * The implementation.
+     * 
+     * @param columnFlexibleName The flexible name of a column. (NotNull and NotEmpty)
+     * @param isAsc Is it ascend?
+     */
+    public void invokeOrderBy(String columnFlexibleName, boolean isAsc) {
+        String ascDesc = null;
+        if (isAsc) {
+            ascDesc = "Asc";
+        } else {
+            ascDesc = "Desc";
+        }
+        final DBMeta dbmeta = DBMetaInstanceHandler
+                .findDBMeta(getTableDbName());
+        final String columnCapPropName = initCap(dbmeta
+                .findPropertyName(columnFlexibleName));
+        final String methodName = "addOrderBy_" + columnCapPropName + "_"
+                + ascDesc;
+
+        java.lang.reflect.Method method = null;
+        try {
+            method = this.getClass().getMethod(methodName, new Class[] {});
+        } catch (NoSuchMethodException e) {
+            String msg = "The columnFlexibleName is not existing in this table: columnFlexibleName="
+                    + columnFlexibleName;
+            msg = msg + " tableName=" + getTableDbName() + " methodName="
+                    + methodName;
+            throw new RuntimeException(msg, e);
+        }
+        try {
+            method.invoke(this, new Object[] {});
+        } catch (IllegalAccessException e) {
+            throw new RuntimeException(e);
+        } catch (java.lang.reflect.InvocationTargetException e) {
+            throw new RuntimeException(e.getCause());
+        }
+    }
+
+    /**
+     * The implementation.
+     * 
+     * @param foreignPropertyName The property name of foreign. (NotNull and NotEmpty)
+     * @return The conditionQuery of foreign as interface. (NotNull)
+     */
+    public ConditionQuery invokeForeignCQ(String foreignPropertyName) {
+        final String methodName = "query"
+                + foreignPropertyName.substring(0, 1).toUpperCase()
+                + foreignPropertyName.substring(1);
+        java.lang.reflect.Method method = null;
+        try {
+            method = this.getClass().getMethod(methodName, new Class[] {});
+        } catch (NoSuchMethodException e) {
+            String msg = "The foreignPropertyName is not existing in this table: foreignPropertyName="
+                    + foreignPropertyName;
+            msg = msg + " tableName=" + getTableDbName() + " methodName="
+                    + methodName;
+            throw new RuntimeException(msg, e);
+        }
+        try {
+            return (ConditionQuery) method.invoke(this, new Object[] {});
+        } catch (IllegalAccessException e) {
+            throw new RuntimeException(e);
+        } catch (java.lang.reflect.InvocationTargetException e) {
+            throw new RuntimeException(e.getCause());
+        }
+    }
+
+    // ===================================================================================
+    //                                                                       Assist Helper
+    //                                                                       =============
+    /**
+     * @param value Query-value-string. (Nullable)
+     * @return Filtered value. (Nullable)
+     */
+    protected String filterRemoveEmptyString(String value) {
+        return ((value != null && !"".equals(value)) ? value : null);
+    }
+
+    /**
+     * @param col Target collection. (Nullable)
+     * @param <PROPERTY_TYPE> The type of property.
+     * @return List. (Nullable: If the argument is null, returns null.)
+     */
+    protected <PROPERTY_TYPE> List<PROPERTY_TYPE> convertToList(
+            Collection<PROPERTY_TYPE> col) {
+        if (col == null) {
+            return null;
+        }
+        if (col instanceof List) {
+            return filterRemoveNullOrEmptyValueFromList((List<PROPERTY_TYPE>) col);
+        }
+        return filterRemoveNullOrEmptyValueFromList(new ArrayList<PROPERTY_TYPE>(
+                col));
+    }
+
+    private <PROPERTY_TYPE> List<PROPERTY_TYPE> filterRemoveNullOrEmptyValueFromList(
+            List<PROPERTY_TYPE> ls) {
+        if (ls == null) {
+            return null;
+        }
+        List<PROPERTY_TYPE> newList = new ArrayList<PROPERTY_TYPE>();
+        for (Iterator<PROPERTY_TYPE> ite = ls.iterator(); ite.hasNext();) {
+            final PROPERTY_TYPE element = ite.next();
+            if (element == null) {
+                continue;
+            }
+            if (element instanceof String) {
+                if (((String) element).length() == 0) {
+                    continue;
+                }
+            }
+            newList.add(element);
+        }
+        return newList;
+    }
+
+    // ===================================================================================
+    //                                                                      General Helper
+    //                                                                      ==============
+    protected final String replaceString(String text, String fromText,
+            String toText) {
+        return SimpleStringUtil.replace(text, fromText, toText);
+    }
+
+    protected String initCap(String str) {
+        return SimpleStringUtil.initCap(str);
+    }
+
+    protected String getLineSeparator() {
+        return SimpleSystemUtil.getLineSeparator();
+    }
+
+    // -----------------------------------------------------
+    //                                         Assert Object
+    //                                         -------------
+    /**
+     * Assert that the object is not null.
+     * 
+     * @param variableName Variable name. (NotNull)
+     * @param value Value. (NotNull)
+     * @exception IllegalArgumentException
+     */
+    protected void assertObjectNotNull(String variableName, Object value) {
+        if (variableName == null) {
+            String msg = "The value should not be null: variableName="
+                    + variableName + " value=" + value;
+            throw new IllegalArgumentException(msg);
+        }
+        if (value == null) {
+            String msg = "The value should not be null: variableName="
+                    + variableName;
+            throw new IllegalArgumentException(msg);
+        }
+    }
+
+    /**
+     * Assert that the column-name is not null and is not empty and does not contain comma.
+     * 
+     * @param columnName Column-name. (NotNull)
+     * @exception IllegalArgumentException
+     */
+    protected void assertColumnName(String columnName) {
+        if (columnName == null) {
+            String msg = "The columnName should not be null.";
+            throw new IllegalArgumentException(msg);
+        }
+        if (columnName.trim().length() == 0) {
+            String msg = "The columnName should not be empty-string.";
+            throw new IllegalArgumentException(msg);
+        }
+        if (columnName.indexOf(",") >= 0) {
+            String msg = "The columnName should not contain comma ',': "
+                    + columnName;
+            throw new IllegalArgumentException(msg);
+        }
+    }
+
+    /**
+     * Assert that the alias-name is not null and is not empty and does not contain comma.
+     * 
+     * @param aliasName Alias-name. (NotNull)
+     * @exception IllegalArgumentException
+     */
+    protected void assertAliasName(String aliasName) {
+        if (aliasName == null) {
+            String msg = "The aliasName should not be null.";
+            throw new IllegalArgumentException(msg);
+        }
+        if (aliasName.trim().length() == 0) {
+            String msg = "The aliasName should not be empty-string.";
+            throw new IllegalArgumentException(msg);
+        }
+        if (aliasName.indexOf(",") >= 0) {
+            String msg = "The aliasName should not contain comma ',': "
+                    + aliasName;
+            throw new IllegalArgumentException(msg);
+        }
+    }
+
+    // -----------------------------------------------------
+    //                                         Assert String
+    //                                         -------------
+    /**
+     * Assert that the entity is not null and not trimmed empty.
+     * 
+     * @param variableName Variable name. (NotNull)
+     * @param value Value. (NotNull)
+     */
+    protected void assertStringNotNullAndNotTrimmedEmpty(String variableName,
+            String value) {
+        assertObjectNotNull("variableName", variableName);
+        assertObjectNotNull("value", value);
+        if (value.trim().length() == 0) {
+            String msg = "The value should not be empty: variableName="
+                    + variableName + " value=" + value;
+            throw new IllegalArgumentException(msg);
+        }
+    }
+
+    // ===================================================================================
+    //                                                                      Basic Override
+    //                                                                      ==============
+    @Override
+    public String toString() {
+        return getClass().getSimpleName() + ":{aliasName=" + _aliasName
+                + ", nestLevel=" + _nestLevel + ", subQueryLevel="
+                + _subQueryLevel + ", foreignPropertyName="
+                + _foreignPropertyName + ", relationPath=" + _relationPath
+                + ", onClauseInline=" + _onClauseInline + "}";
+    }
+}


Property changes on: announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/cbean/AbstractConditionQuery.java
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/cbean/ConditionBean.java
===================================================================
--- announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/cbean/ConditionBean.java	                        (rev 0)
+++ announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/cbean/ConditionBean.java	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,200 @@
+package jp.sf.pal.announcement.db.allcommon.cbean;
+
+import jp.sf.pal.announcement.db.allcommon.cbean.sqlclause.SqlClause;
+import jp.sf.pal.announcement.db.allcommon.jdbc.StatementConfig;
+
+/**
+ * The interface of condition-bean.
+ * @author DBFlute(AutoGenerator)
+ */
+public interface ConditionBean extends PagingBean {
+
+    // =====================================================================================
+    //                                                                            Definition
+    //                                                                            ==========
+    /** Map-string map-mark. */
+    public static final String MAP_STRING_MAP_MARK = "map:";
+
+    /** Map-string list-mark. */
+    public static final String MAP_STRING_LIST_MARK = "list:";
+
+    /** Map-string start-brace. */
+    public static final String MAP_STRING_START_BRACE = "@{";
+
+    /** Map-string end-brace. */
+    public static final String MAP_STRING_END_BRACE = "@}";
+
+    /** Map-string delimiter. */
+    public static final String MAP_STRING_DELIMITER = "@;";
+
+    /** Map-string equal. */
+    public static final String MAP_STRING_EQUAL = "@=";
+
+    // ===================================================================================
+    //                                                                          Table Name
+    //                                                                          ==========
+    /**
+     * Get table DB-name.
+     * @return Table DB-name. (NotNull)
+     */
+    public String getTableDbName();
+
+    /**
+     * Get table SQL-name.
+     * @return Table SQL-name. (NotNull)
+     */
+    public String getTableSqlName();
+
+    // ===================================================================================
+    //                                                                           SqlClause
+    //                                                                           =========
+    /**
+     * Get SQL-clause instance.
+     * 
+     * @return SQL-clause. (NotNull)
+     */
+    public SqlClause getSqlClause();
+
+    // ===================================================================================
+    //                                                                      PrimaryKey Map
+    //                                                                      ==============
+    /**
+     * Accept primary-key map-string.
+     * @param primaryKeyMap Primary-key map. (NotNull and NotEmpty)
+     */
+    public void acceptPrimaryKeyMap(
+            java.util.Map<String, ? extends Object> primaryKeyMap);
+
+    /**
+     * Accept primary-key map-string. Delimiter is at-mark and semicolon.
+     * @param primaryKeyMapString Primary-key map. (NotNull and NotEmpty)
+     */
+    public void acceptPrimaryKeyMapString(String primaryKeyMapString);
+
+    // ===================================================================================
+    //                                                                     OrderBy Setting
+    //                                                                     ===============
+    /**
+     * Add order-by PrimaryKey asc. {order by primaryKey1 asc, primaryKey2 asc...}
+     * @return this. (NotNull)
+     */
+    public ConditionBean addOrderBy_PK_Asc();
+
+    /**
+     * Add order-by PrimaryKey desc. {order by primaryKey1 desc, primaryKey2 desc...}
+     * @return this. (NotNull)
+     */
+    public ConditionBean addOrderBy_PK_Desc();
+
+    // ===================================================================================
+    //                                                                               Query
+    //                                                                               =====
+    /**
+     * Get condition-query as interface.
+     * @return Instance of query as interface. (NotNull)
+     * @deprecated
+     */
+    public ConditionQuery getConditionQueryAsInterface();
+
+    /**
+     * Get the conditionQuery of the local table as interface.
+     * @return The conditionQuery of the local table as interface. (NotNull)
+     */
+    public ConditionQuery localCQ();
+
+    // ===================================================================================
+    //                                                                         Union Query
+    //                                                                         ===========
+    /**
+     * Has union query or union all query?
+     * @return Determination.
+     */
+    public boolean hasUnionQueryOrUnionAllQuery();
+
+    // ===================================================================================
+    //                                                                        Limit Select
+    //                                                                        ============
+    /**
+     * Limit select PK only.
+     * @return this. (NotNull)
+     */
+    public ConditionBean limitSelect_PKOnly();
+
+    /**
+     * Limit select off.
+     * @return this. (NotNull)
+     */
+    public ConditionBean limitSelect_Off();
+
+    /**
+     * Is limit-select PK only?
+     * @return Determination.
+     */
+    public boolean isLimitSelect_PKOnly();
+
+    // =====================================================================================
+    //                                                                          Lock Setting
+    //                                                                          ============
+    /**
+     * Lock for update.
+     * <p>
+     * If you invoke this, your SQL lock target records for update.
+     * It depends whether this method supports this on the database type.
+     * </p>
+     * @return this. (NotNull)
+     */
+    public ConditionBean lockForUpdate();
+
+    // =====================================================================================
+    //                                                                          Select Count
+    //                                                                          ============
+    /**
+     * Set up various things for select-count-ignore-fetch-scope. {Internal}
+     * This method is for INTERNAL. Don't invoke this!
+     * @return this. (NotNull)
+     */
+    public ConditionBean xsetupSelectCountIgnoreFetchScope();
+
+    /**
+     * Do after-care for select-count-ignore-fetch-scope. {Internal}
+     * This method is for INTERNAL. Don't invoke this!
+     * @return this. (NotNull)
+     */
+    public ConditionBean xafterCareSelectCountIgnoreFetchScope();
+
+    /**
+     * Is set up various things for select-count-ignore-fetch-scope? {Internal}
+     * This method is for INTERNAL. Don't invoke this!
+     * @return Determination.
+     */
+    public boolean isSelectCountIgnoreFetchScope();
+
+    // =====================================================================================
+    //                                                                      Statement Config
+    //                                                                      ================
+    /**
+     * @param statementConfig The config of statement. (Nullable)
+     */
+    public void configure(StatementConfig statementConfig);
+
+    /**
+     * @return The config of statement. (Nullable)
+     */
+    public StatementConfig getStatementConfig();
+
+    // ===================================================================================
+    //                                                                          Format SQL
+    //                                                                          ==========
+    public void formatSql();
+
+    public boolean isFormatSql();
+
+    // ===================================================================================
+    //                                                                         Display SQL
+    //                                                                         ===========
+    /**
+     * Convert this conditionBean to SQL for display.
+     * @return SQL for display. (NotNull and NotEmpty)
+     */
+    public String toDisplaySql();
+}


Property changes on: announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/cbean/ConditionBean.java
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/cbean/ConditionBeanContext.java
===================================================================
--- announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/cbean/ConditionBeanContext.java	                        (rev 0)
+++ announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/cbean/ConditionBeanContext.java	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,395 @@
+package jp.sf.pal.announcement.db.allcommon.cbean;
+
+import java.util.Collections;
+import java.util.LinkedHashMap;
+import java.util.Map;
+
+import jp.sf.pal.announcement.db.allcommon.DBFluteConfig;
+import jp.sf.pal.announcement.db.allcommon.cbean.sqlclause.SqlClause;
+import jp.sf.pal.announcement.db.allcommon.cbean.sqlclause.SqlClauseDb2;
+import jp.sf.pal.announcement.db.allcommon.cbean.sqlclause.SqlClauseDerby;
+import jp.sf.pal.announcement.db.allcommon.cbean.sqlclause.SqlClauseFirebird;
+import jp.sf.pal.announcement.db.allcommon.cbean.sqlclause.SqlClauseH2;
+import jp.sf.pal.announcement.db.allcommon.cbean.sqlclause.SqlClauseMySql;
+import jp.sf.pal.announcement.db.allcommon.cbean.sqlclause.SqlClauseOracle;
+import jp.sf.pal.announcement.db.allcommon.cbean.sqlclause.SqlClausePostgreSql;
+import jp.sf.pal.announcement.db.allcommon.cbean.sqlclause.SqlClauseSqlServer;
+import jp.sf.pal.announcement.db.allcommon.s2dao.internal.sqlparser.InternalSqlParser;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+
+/**
+ * Condition-Bean context.
+ * @author DBFlute(AutoGenerator)
+ */
+public class ConditionBeanContext {
+
+    /** Log instance. */
+    private static final Log _log = LogFactory
+            .getLog(ConditionBeanContext.class);
+
+    // ===================================================================================
+    //                                                                        Thread Local
+    //                                                                        ============
+    /** The thread-local for this. */
+    private static final ThreadLocal<ConditionBean> _threadLocal = new ThreadLocal<ConditionBean>();
+
+    /**
+     * Get condition-bean on thread.
+     * @return Condition-bean context. (Nullable)
+     */
+    public static ConditionBean getConditionBeanOnThread() {
+        return (ConditionBean) _threadLocal.get();
+    }
+
+    /**
+     * Set condition-bean on thread.
+     * @param cb Condition-bean. (NotNull)
+     */
+    public static void setConditionBeanOnThread(ConditionBean cb) {
+        if (cb == null) {
+            String msg = "The argument[cb] must not be null.";
+            throw new IllegalArgumentException(msg);
+        }
+        _threadLocal.set(cb);
+    }
+
+    /**
+     * Is existing condition-bean on thread?
+     * @return Determination.
+     */
+    public static boolean isExistConditionBeanOnThread() {
+        return (_threadLocal.get() != null);
+    }
+
+    /**
+     * Clear condition-bean on thread.
+     */
+    public static void clearConditionBeanOnThread() {
+        _threadLocal.set(null);
+    }
+
+    // ===================================================================================
+    //                                         Initialize against the ClassLoader Headache
+    //                                         ===========================================
+    @SuppressWarnings("unused")
+    public static void initialize() {
+        boolean debugEnabled = _log.isDebugEnabled();
+        // Against the ClassLoader Headache!
+        final StringBuilder sb = new StringBuilder();
+        {
+            final Class<?> clazz = jp.sf.pal.announcement.db.allcommon.cbean.SimplePagingBean.class;
+            if (debugEnabled) {
+                sb.append(
+                        "  ...Loading class of " + clazz.getName() + " by "
+                                + clazz.getClassLoader().getClass()).append(
+                        getLineSeparator());
+            }
+        }
+        {
+            Class<?> clazz = jp.sf.pal.announcement.db.allcommon.cbean.coption.FromToOption.class;
+            clazz = jp.sf.pal.announcement.db.allcommon.cbean.coption.LikeSearchOption.class;
+            clazz = jp.sf.pal.announcement.db.allcommon.cbean.coption.InScopeOption.class;
+            clazz = jp.sf.pal.announcement.db.allcommon.cbean.grouping.GroupingOption.class;
+            clazz = jp.sf.pal.announcement.db.allcommon.cbean.grouping.GroupingRowEndDeterminer.class;
+            clazz = jp.sf.pal.announcement.db.allcommon.cbean.grouping.GroupingRowResource.class;
+            clazz = jp.sf.pal.announcement.db.allcommon.cbean.grouping.GroupingRowSetupper.class;
+            clazz = jp.sf.pal.announcement.db.allcommon.cbean.pagenavi.PageNumberLink.class;
+            clazz = jp.sf.pal.announcement.db.allcommon.cbean.pagenavi.PageNumberLinkSetupper.class;
+            clazz = jp.sf.pal.announcement.db.allcommon.jdbc.CursorHandler.class;
+            if (debugEnabled) {
+                sb.append("  ...Loading class of ...and so on");
+            }
+        }
+        if (debugEnabled) {
+            _log.debug("{Initialize against the ClassLoader Headache}"
+                    + getLineSeparator() + sb);
+        }
+    }
+
+    // ===================================================================================
+    //                                                                  Type Determination
+    //                                                                  ==================
+    /**
+     * Is the argument condition-bean?
+     * @param dtoInstance DTO instance.
+     * @return Determination.
+     */
+    public static boolean isTheArgumentConditionBean(final Object dtoInstance) {
+        if (dtoInstance instanceof ConditionBean) {
+            return true;
+        } else {
+            return false;
+        }
+    }
+
+    /**
+     * Is the type condition-bean?
+     * @param dtoClass DtoClass.
+     * @return Determination.
+     */
+    public static boolean isTheTypeConditionBean(final Class<?> dtoClass) {
+        if (ConditionBean.class.isAssignableFrom(dtoClass)) {
+            return true;
+        } else {
+            return false;
+        }
+    }
+
+    // ===================================================================================
+    //                                                                        Product Name
+    //                                                                        ============
+    public static final String DB_NAME_DERBY = "derby";
+
+    public static final String DB_NAME_H2 = "h2";
+
+    public static final String DB_NAME_ORACLE = "oracle";
+
+    public static final String DB_NAME_MYSQL = "mysql";
+
+    public static final String DB_NAME_POSTGRESQL = "postgresql";
+
+    public static final String DB_NAME_FIREBIRD = "firebird";
+
+    public static final String DB_NAME_MSSQL = "mssql";
+
+    public static final String DB_NAME_SYBASE = "sybase";
+
+    public static final String DB_NAME_DB2 = "db2";
+
+    protected static final Map<String, String> _driverHintDatabaseProductNameMap;
+    static {
+        final Map<String, String> tmpMap = Collections
+                .synchronizedMap(new LinkedHashMap<String, String>());
+        tmpMap.put("org.apache.derby", DB_NAME_DERBY);
+        tmpMap.put("org.h2", DB_NAME_H2);
+        tmpMap.put("oracle", DB_NAME_ORACLE);
+        tmpMap.put("mysql", DB_NAME_MYSQL);
+        tmpMap.put("postgresql", DB_NAME_POSTGRESQL);
+        tmpMap.put("firebird", DB_NAME_FIREBIRD);
+        tmpMap.put("sqlserver", DB_NAME_MSSQL);
+        tmpMap.put("sybase", DB_NAME_SYBASE);
+        tmpMap.put("db2", DB_NAME_DB2);
+        _driverHintDatabaseProductNameMap = java.util.Collections
+                .unmodifiableMap(tmpMap);
+    }
+
+    public static boolean setupDatabaseProductNameByDriverClassName(
+            String driverClassName) {
+        final java.util.Set<String> keySet = _driverHintDatabaseProductNameMap
+                .keySet();
+        for (final java.util.Iterator<String> ite = keySet.iterator(); ite
+                .hasNext();) {
+            final String driverHint = (String) ite.next();
+            if (driverClassName.indexOf(driverHint) >= 0) {
+                final String databaseProductName = (String) _driverHintDatabaseProductNameMap
+                        .get(driverHint);
+                setDatabaseProductName(databaseProductName);
+                return true;
+            }
+        }
+        return false;
+    }
+
+    /** The database product name. */
+    private static String _databaseProductName;
+
+    /**
+     * Get database product name.
+     * @return Database product name.
+     */
+    public static String getDatabaseProductName() {
+        return _databaseProductName;
+    }
+
+    /**
+     * Set database product name.
+     * @param name Database product name. (NotNull)
+     */
+    public static void setDatabaseProductName(String name) {
+        if (_databaseProductName != null) {
+            String msg = "Already set up: current=" + _databaseProductName
+                    + " your=" + name;
+            throw new IllegalStateException(msg);
+        }
+        _databaseProductName = name;
+    }
+
+    // ===================================================================================
+    //                                                                   SqlClause Creator
+    //                                                                   =================
+    /**
+     * Create SQL-clause. {for condition-bean}
+     * @param cb Condition-bean. (NotNull) 
+     * @return SQL-clause. (NotNull)
+     */
+    public static SqlClause createSqlClause(ConditionBean cb) {
+        final String tableSqlName = cb.getTableSqlName();
+        final SqlClause sqlClause = createSqlClause(tableSqlName);
+        if (DBFluteConfig.getInstance().isConditionBeanFormatSql()) {
+            sqlClause.makeFormatClauseEffective();
+        }
+        return sqlClause;
+    }
+
+    /**
+     * Create SQL-clause. {for SimplePagingBean}
+     * @param tableDbName The DB name of table. (NotNull) 
+     * @return SQL-clause. (NotNull)
+     */
+    public static SqlClause createSqlClause(String tableDbName) {
+        final String databaseProductName = getDatabaseProductName();
+        if (databaseProductName == null) {
+            return new SqlClauseMySql(tableDbName);
+        }
+        final String name = databaseProductName.toLowerCase();
+        if (name.equalsIgnoreCase(DB_NAME_DERBY)) {
+            return new SqlClauseDerby(tableDbName);
+        } else if (name.equalsIgnoreCase(DB_NAME_H2)) {
+            return new SqlClauseH2(tableDbName);
+        } else if (name.equalsIgnoreCase(DB_NAME_ORACLE)) {
+            return new SqlClauseOracle(tableDbName);
+        } else if (name.equalsIgnoreCase(DB_NAME_FIREBIRD)) {
+            return new SqlClauseFirebird(tableDbName);
+        } else if (name.equalsIgnoreCase(DB_NAME_MYSQL)) {
+            return new SqlClauseMySql(tableDbName);
+        } else if (name.equalsIgnoreCase(DB_NAME_POSTGRESQL)) {
+            return new SqlClausePostgreSql(tableDbName);
+        } else if (name.equalsIgnoreCase(DB_NAME_MSSQL)) {
+            return new SqlClauseSqlServer(tableDbName);
+        } else if (name.equalsIgnoreCase(DB_NAME_DB2)) {
+            return new SqlClauseDb2(tableDbName);
+        } else {
+            return new SqlClauseMySql(tableDbName);
+        }
+    }
+
+    // ===================================================================================
+    //                                                                  Exception Handling
+    //                                                                  ==================
+    public static void throwEntityAlreadyDeletedException(Object searchKey4Log) {
+        String msg = "Look! Read the message below." + getLineSeparator();
+        msg = msg
+                + "/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *"
+                + getLineSeparator();
+        msg = msg + "The entity was Not Found! it has already been deleted!"
+                + getLineSeparator();
+        msg = msg + getLineSeparator();
+        msg = msg + "[Advice]" + getLineSeparator();
+        msg = msg
+                + "Please confirm the existence of your target record on your database."
+                + getLineSeparator();
+        msg = msg
+                + "Does the target record really created before this operation?"
+                + getLineSeparator();
+        msg = msg + "Has the target record been deleted by other thread?"
+                + getLineSeparator();
+        msg = msg
+                + "It is precondition that the record exists on your database."
+                + getLineSeparator();
+        msg = msg + getLineSeparator();
+        if (searchKey4Log != null && searchKey4Log instanceof ConditionBean) {
+            final ConditionBean cb = (ConditionBean) searchKey4Log;
+            final String dispalySql;
+            if (cb.isFormatSql()) {
+                dispalySql = cb.toDisplaySql();
+            } else {
+                dispalySql = filterDisplaySql(cb.toDisplaySql(), cb
+                        .getTableSqlName());
+            }
+            msg = msg + "[Executed SQL for Display]" + getLineSeparator()
+                    + dispalySql + getLineSeparator();
+        } else {
+            msg = msg + "[Search Condition]" + getLineSeparator()
+                    + searchKey4Log + getLineSeparator();
+        }
+        msg = msg + "* * * * * * * * * */";
+        throw new jp.sf.pal.announcement.db.allcommon.exception.EntityAlreadyDeletedException(
+                msg);
+    }
+
+    public static void throwEntityDuplicatedException(String resultCountString,
+            Object searchKey4Log, Throwable cause) {
+        String msg = "Look! Read the message below." + getLineSeparator();
+        msg = msg
+                + "/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *"
+                + getLineSeparator();
+        msg = msg
+                + "The entity was Too Many! it has been duplicated. It should be the only one! But the resultCount="
+                + resultCountString + getLineSeparator();
+        msg = msg + getLineSeparator();
+        msg = msg + "[Advice]" + getLineSeparator();
+        msg = msg
+                + "Please confirm your search condition. Does it really select the only one?"
+                + getLineSeparator();
+        msg = msg
+                + "Please confirm your database. Does it really exist the only one?"
+                + getLineSeparator();
+        msg = msg + getLineSeparator();
+        if (searchKey4Log != null && searchKey4Log instanceof ConditionBean) {
+            final ConditionBean cb = (ConditionBean) searchKey4Log;
+            final String dispalySql;
+            if (cb.isFormatSql()) {
+                dispalySql = cb.toDisplaySql();
+            } else {
+                dispalySql = filterDisplaySql(cb.toDisplaySql(), cb
+                        .getTableSqlName());
+            }
+            msg = msg + "[Executed SQL for Display]" + getLineSeparator()
+                    + dispalySql + getLineSeparator();
+        } else {
+            msg = msg + "[Search Condition]" + getLineSeparator()
+                    + searchKey4Log + getLineSeparator();
+        }
+        msg = msg + "* * * * * * * * * */";
+        if (cause != null) {
+            throw new jp.sf.pal.announcement.db.allcommon.exception.EntityDuplicatedException(
+                    msg, cause);
+        } else {
+            throw new jp.sf.pal.announcement.db.allcommon.exception.EntityDuplicatedException(
+                    msg);
+        }
+    }
+
+    protected static String filterDisplaySql(String displaySql,
+            String tableDbName) {
+        if (displaySql == null || displaySql.trim().length() == 0) {
+            return null;
+        }
+        if (displaySql.indexOf(getLineSeparator()) >= 0) {
+            return displaySql;
+        }
+        int basePointIndex = displaySql.indexOf(" from " + tableDbName);
+        if (basePointIndex < 0) {
+            return displaySql;
+        }
+        return displaySql.substring(0, basePointIndex) + getLineSeparator()
+                + " " + displaySql.substring(basePointIndex);
+    }
+
+    // ===================================================================================
+    //                                                                         Display SQL
+    //                                                                         ===========
+    public static String convertConditionBean2DisplaySql(ConditionBean cb) {
+        final String twoWaySql;
+        if (cb.isLimitSelect_PKOnly()) {
+            twoWaySql = cb.getSqlClause().getClausePKOnly();
+        } else {
+            twoWaySql = cb.getSqlClause().getClause();
+        }
+        return InternalSqlParser.convertTwoWaySql2DisplaySql(twoWaySql, cb);
+    }
+
+    // ===================================================================================
+    //                                                                              Helper
+    //                                                                              ======
+    /**
+     * Get the value of line separator.
+     * 
+     * @return The value of line separator. (NotNull)
+     */
+    protected static String getLineSeparator() {
+        return System.getProperty("line.separator");
+    }
+}


Property changes on: announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/cbean/ConditionBeanContext.java
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/cbean/ConditionQuery.java
===================================================================
--- announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/cbean/ConditionQuery.java	                        (rev 0)
+++ announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/cbean/ConditionQuery.java	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,122 @@
+package jp.sf.pal.announcement.db.allcommon.cbean;
+
+import jp.sf.pal.announcement.db.allcommon.cbean.cvalue.ConditionValue;
+import jp.sf.pal.announcement.db.allcommon.cbean.sqlclause.SqlClause;
+
+/**
+ * The condition-query as interface.
+ * @author DBFlute(AutoGenerator)
+ */
+ @ SuppressWarnings("unchecked")
+public interface ConditionQuery {
+
+    // ===================================================================================
+    //                                                                  Important Accessor
+    //                                                                  ==================
+    /**
+     * Get table DB-name.
+     * @return Table DB-name. (NotNull)
+     */
+    public String getTableDbName();
+
+    /**
+     * Get table SQL-name.
+     * @return Table SQL-name. (NotNull)
+     */
+    public String getTableSqlName();
+
+    /**
+     * Get real alias name(that has nest level mark).
+     * @return Real alias name. (NotNull)
+     */
+    public String getRealAliasName();
+
+    /**
+     * Get real column name(with real alias name).
+     * @param columnName Column name without alias name. (NotNull)
+     * @return Real column name. (NotNull)
+     */
+    public String getRealColumnName(String columnName);
+
+    /**
+     * Get child query.
+     * @return Child query. (Nullable)
+     */
+    public ConditionQuery getChildQuery();
+
+    /**
+     * Get sql clause.
+     * @return Sql clause. (NotNull)
+     */
+    public SqlClause getSqlClause();
+
+    /**
+     * Get alias name.
+     * @return Alias name. (NotNull)
+     */
+    public String getAliasName();
+
+    /**
+     * Get nest level.
+     * @return Nest level.
+     */
+    public int getNestLevel();
+
+    /**
+     * Get next nest level.
+     * @return Next nest level.
+     */
+    public int getNextNestLevel();
+
+    /**
+     * Is base query?
+     * @param query Condition query. (NotNull)
+     * @return Determination.
+     */
+    public boolean isBaseQuery(ConditionQuery query);
+
+    /**
+     * Get the level of subQuery.
+     * @return The level of subQuery.
+     */
+    public int getSubQueryLevel();
+
+    /**
+     * Get the property name of foreign relation.
+     * @return The property name of foreign relation. (NotNull)
+     */
+    public String getForeignPropertyName();
+
+    // ===================================================================================
+    //                                                                              Invoke
+    //                                                                              ======
+    /**
+     * Invoke getting value.
+     * @param columnFlexibleName The flexible name of the column. (NotNull and NotEmpty)
+     * @return The conditionValue. (NotNull)
+     */
+    public ConditionValue invokeValue(String columnFlexibleName);
+
+    /**
+     * Invoke setting query.
+     * @param columnFlexibleName The flexible name of the column. (NotNull and NotEmpty)
+     * @param conditionKeyName The name of the conditionKey. (NotNull)
+     * @param value The value of the condition. (NotNull)
+     */
+    public void invokeQuery(String columnFlexibleName, String conditionKeyName,
+            Object value);
+
+    /**
+     * Invoke adding orderBy.
+     * @param columnFlexibleName The flexible name of the column. (NotNull and NotEmpty)
+     * @param isAsc Is it ascend?
+     */
+    public void invokeOrderBy(String columnFlexibleName, boolean isAsc);
+
+    /**
+     * Invoke getting foreign conditionQuery.
+     * @param foreignPropertyName The property name of the foreign relation. (NotNull and NotEmpty)
+     * @return The conditionQuery of the foreign relation as interface. (NotNull)
+     */
+    public ConditionQuery invokeForeignCQ(String foreignPropertyName);
+}


Property changes on: announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/cbean/ConditionQuery.java
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/cbean/FetchNarrowingBean.java
===================================================================
--- announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/cbean/FetchNarrowingBean.java	                        (rev 0)
+++ announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/cbean/FetchNarrowingBean.java	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,61 @@
+package jp.sf.pal.announcement.db.allcommon.cbean;
+
+/**
+ * The bean of fetch narrowing.
+ * 
+ * @author DBFlute(AutoGenerator)
+ */
+public interface FetchNarrowingBean {
+
+    /**
+     * Get fetch start index.
+     * 
+     * @return Fetch start index.
+     */
+    public int getFetchNarrowingSkipStartIndex();
+
+    /**
+     * Get fetch size.
+     * 
+     * @return Fetch size.
+     */
+    public int getFetchNarrowingLoopCount();
+
+    /**
+     * Is fetch start index supported?
+     * 
+     * @return Determination.
+     */
+    public boolean isFetchNarrowingSkipStartIndexEffective();
+
+    /**
+     * Is fetch size supported?
+     * 
+     * @return Determination.
+     */
+    public boolean isFetchNarrowingLoopCountEffective();
+
+    /**
+     * Is fetch-narrowing effective?
+     * 
+     * @return Determination.
+     */
+    public boolean isFetchNarrowingEffective();
+
+    /**
+     * Ignore fetch narrowing. Only checking safety result size is valid. {INTERNAL METHOD}
+     */
+    public void ignoreFetchNarrowing();
+
+    /**
+     * Restore ignored fetch narrowing. {INTERNAL METHOD}
+     */
+    public void restoreIgnoredFetchNarrowing();
+
+    /**
+     * Get safety max result size.
+     * 
+     * @return Safety max result size.
+     */
+    public int getSafetyMaxResultSize();
+}


Property changes on: announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/cbean/FetchNarrowingBean.java
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/cbean/FetchNarrowingBeanContext.java
===================================================================
--- announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/cbean/FetchNarrowingBeanContext.java	                        (rev 0)
+++ announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/cbean/FetchNarrowingBeanContext.java	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,79 @@
+package jp.sf.pal.announcement.db.allcommon.cbean;
+
+/**
+ * Fetch-Narrowing-Bean context. (referring to s2pager)
+ * 
+ * @author DBFlute(AutoGenerator)
+ */
+public class FetchNarrowingBeanContext {
+
+    /** The thread-local for this. */
+    private static ThreadLocal<FetchNarrowingBean> _threadLocal = new ThreadLocal<FetchNarrowingBean>();
+
+    /**
+     * Get fetch-narrowing-bean on thread.
+     * 
+     * @return Condition-bean context. (Nullable)
+     */
+    public static FetchNarrowingBean getFetchNarrowingBeanOnThread() {
+        return (FetchNarrowingBean) _threadLocal.get();
+    }
+
+    /**
+     * Set fetch-narrowing-bean on thread.
+     * 
+     * @param cb Condition-bean. (NotNull)
+     */
+    public static void setFetchNarrowingBeanOnThread(FetchNarrowingBean cb) {
+        if (cb == null) {
+            String msg = "The argument[cb] must not be null.";
+            throw new IllegalArgumentException(msg);
+        }
+        _threadLocal.set(cb);
+    }
+
+    /**
+     * Is existing fetch-narrowing-bean on thread?
+     * 
+     * @return Determination.
+     */
+    public static boolean isExistFetchNarrowingBeanOnThread() {
+        return (_threadLocal.get() != null);
+    }
+
+    /**
+     * Clear fetch-narrowing-bean on thread.
+     */
+    public static void clearFetchNarrowingBeanOnThread() {
+        _threadLocal.set(null);
+    }
+
+    /**
+     * Is the argument fetch-narrowing-bean?
+     * 
+     * @param dtoInstance Dto instance.
+     * @return Determination.
+     */
+    public static boolean isTheArgumentFetchNarrowingBean(
+            final Object dtoInstance) {
+        if (dtoInstance instanceof FetchNarrowingBean) {
+            return true;
+        } else {
+            return false;
+        }
+    }
+
+    /**
+     * Is the type fetch-narrowing-bean?
+     * 
+     * @param dtoClass DtoClass.
+     * @return Determination.
+     */
+    public static boolean isTheTypeFetchNarrowingBean(final Class dtoClass) {
+        if (FetchNarrowingBean.class.isAssignableFrom(dtoClass)) {
+            return true;
+        } else {
+            return false;
+        }
+    }
+}


Property changes on: announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/cbean/FetchNarrowingBeanContext.java
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/cbean/ListResultBean.java
===================================================================
--- announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/cbean/ListResultBean.java	                        (rev 0)
+++ announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/cbean/ListResultBean.java	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,346 @@
+package jp.sf.pal.announcement.db.allcommon.cbean;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import jp.sf.pal.announcement.db.allcommon.cbean.grouping.GroupingOption;
+import jp.sf.pal.announcement.db.allcommon.cbean.grouping.GroupingRowEndDeterminer;
+import jp.sf.pal.announcement.db.allcommon.cbean.grouping.GroupingRowResource;
+import jp.sf.pal.announcement.db.allcommon.cbean.grouping.GroupingRowSetupper;
+import jp.sf.pal.announcement.db.allcommon.cbean.mapping.EntityDtoMapper;
+import jp.sf.pal.announcement.db.allcommon.cbean.sqlclause.OrderByClause;
+
+/**
+ * The list-result-bean for ListResultBean.
+ * @param <ENTITY> The type of entity for the element of selected list.
+ * @author DBFlute(AutoGenerator)
+ */
+public class ListResultBean<ENTITY> implements List<ENTITY>,
+        java.io.Serializable {
+
+    // ===================================================================================
+    //                                                                          Definition
+    //                                                                          ==========
+    /** Serial version UID. (Default) */
+    private static final long serialVersionUID = 1L;
+
+    // ===================================================================================
+    //                                                                           Attribute
+    //                                                                           =========
+    /** The value of table db-name. */
+    protected String _tableDbName;
+
+    /** The value of all record count. */
+    protected int _allRecordCount;
+
+    /** Selected list. */
+    protected List<ENTITY> _selectedList = new java.util.ArrayList<ENTITY>();
+
+    /** Order-by clause. */
+    protected OrderByClause _orderByClause = new OrderByClause();
+
+    // ===================================================================================
+    //                                                                         Constructor
+    //                                                                         ===========
+    /**
+     * Constructor.
+     */
+    public ListResultBean() {
+    }
+
+    // ===================================================================================
+    //                                                                            Grouping
+    //                                                                            ========
+    public <ROW> List<ROW> groupingList(
+            GroupingRowSetupper<ROW, ENTITY> groupingRowSetupper,
+            GroupingOption<ENTITY> groupingOption) {
+        final List<ROW> groupingList = new ArrayList<ROW>();
+        GroupingRowEndDeterminer<ENTITY> rowEndDeterminer = groupingOption
+                .getGroupingRowEndDeterminer();
+        if (rowEndDeterminer == null) {
+            rowEndDeterminer = new GroupingRowEndDeterminer<ENTITY>() {
+                public boolean determine(int columnIndex, int columnCount,
+                        GroupingRowResource<ENTITY> rowResource,
+                        ENTITY nextEntity) {
+                    return columnIndex == (columnCount - 1);
+                }
+            };// as Default
+        }
+        GroupingRowResource<ENTITY> rowResource = new GroupingRowResource<ENTITY>();
+        int columnCount = groupingOption.getColumnCount();
+        int columnIndex = 0;
+        int rowIndex = 0;
+        for (ENTITY entity : _selectedList) {
+            // Set up row resource.
+            rowResource.addGroupingRowList(entity);
+
+            if (_selectedList.size() == (rowIndex + 1)) {// Last Loop!
+                // Callback!
+                final ROW groupingRowObject = groupingRowSetupper
+                        .setup(rowResource);
+
+                // Register!
+                groupingList.add(groupingRowObject);
+                break;
+            }
+
+            ENTITY nextElement = null;
+            if (_selectedList.size() > (rowIndex + 1)) {
+                nextElement = _selectedList.get(rowIndex);
+            }
+
+            // Do at row end.
+            if (rowEndDeterminer.determine(columnIndex, columnCount,
+                    rowResource, nextElement)) {
+                // Callback!
+                final ROW groupingRowObject = groupingRowSetupper
+                        .setup(rowResource);
+
+                // Register!
+                groupingList.add(groupingRowObject);
+
+                // Initialize!
+                rowResource = new GroupingRowResource<ENTITY>();
+                columnIndex = 0;
+                ++rowIndex;
+                continue;
+            }
+            ++columnIndex;
+            ++rowIndex;
+        }
+        return groupingList;
+    }
+
+    // ===================================================================================
+    //                                                                             Mapping
+    //                                                                             =======
+    public <DTO> ListResultBean<DTO> mappingList(
+            EntityDtoMapper<ENTITY, DTO> entityDtoMapper) {
+        final ListResultBean<DTO> mappingList = new ListResultBean<DTO>();
+        for (ENTITY entity : _selectedList) {
+            mappingList.add(entityDtoMapper.map(entity));
+        }
+        mappingList.setTableDbName(getTableDbName());
+        mappingList.setAllRecordCount(getAllRecordCount());
+        mappingList.setOrderByClause(getOrderByClause());
+        return mappingList;
+    }
+
+    // ===================================================================================
+    //                                                                       Determination
+    //                                                                       =============
+    /**
+     * Has this result selected?
+     * @return Determination.
+     */
+    public boolean isSelectedResult() {
+        return _tableDbName != null;
+    }
+
+    // ===================================================================================
+    //                                                                      Basic Override
+    //                                                                      ==============
+    /**
+     * @return Hash-code from primary-keys.
+     */
+    public int hashCode() {
+        if (_selectedList == null) {
+            return super.hashCode();
+        }
+        return _selectedList.hashCode();
+    }
+
+    /**
+     * @param other Other entity. (Nullable)
+     * @return Comparing result. If other is null, returns false.
+     */
+    public boolean equals(Object other) {
+        if (_selectedList == null) {
+            return false;
+        }
+        if (other == null) {
+            return false;
+        }
+        if (!(other instanceof List)) {
+            return false;
+        }
+        return _selectedList.equals(other);
+    }
+
+    /**
+     * @return The view string of all attribute values. (NotNull)
+     */
+    @Override
+    public String toString() {
+        final StringBuilder sb = new StringBuilder();
+
+        sb.append(" tableDbName=").append(_tableDbName);
+        sb.append(" allRecordCount=").append(_allRecordCount);
+        sb.append(" selectedList.size()=").append(_selectedList.size());
+        sb.append(" orderByClause=").append(_orderByClause);
+
+        return sb.toString();
+    }
+
+    // ===================================================================================
+    //                                                                       List Elements
+    //                                                                       =============
+    public boolean add(ENTITY o) {
+        return _selectedList.add(o);
+    }
+
+    public boolean addAll(java.util.Collection<? extends ENTITY> c) {
+        return _selectedList.addAll(c);
+    }
+
+    public void clear() {
+        _selectedList.clear();
+    }
+
+    public boolean contains(Object o) {
+        return _selectedList.contains(o);
+    }
+
+    public boolean containsAll(java.util.Collection<?> c) {
+        return _selectedList.containsAll(c);
+    }
+
+    public boolean isEmpty() {
+        return _selectedList.isEmpty();
+    }
+
+    public java.util.Iterator<ENTITY> iterator() {
+        return _selectedList.iterator();
+    }
+
+    public boolean remove(Object o) {
+        return _selectedList.remove(o);
+    }
+
+    public boolean removeAll(java.util.Collection<?> c) {
+        return _selectedList.removeAll(c);
+    }
+
+    public boolean retainAll(java.util.Collection<?> c) {
+        return _selectedList.retainAll(c);
+    }
+
+    public int size() {
+        return _selectedList.size();
+    }
+
+    public Object[] toArray() {
+        return _selectedList.toArray();
+    }
+
+    public <TYPE> TYPE[] toArray(TYPE[] a) {
+        return _selectedList.toArray(a);
+    }
+
+    public void add(int index, ENTITY element) {
+        _selectedList.add(index, element);
+    }
+
+    public boolean addAll(int index, java.util.Collection<? extends ENTITY> c) {
+        return _selectedList.addAll(index, c);
+    }
+
+    public ENTITY get(int index) {
+        return _selectedList.get(index);
+    }
+
+    public int indexOf(Object o) {
+        return _selectedList.indexOf(o);
+    }
+
+    public int lastIndexOf(Object o) {
+        return _selectedList.lastIndexOf(o);
+    }
+
+    public java.util.ListIterator<ENTITY> listIterator() {
+        return _selectedList.listIterator();
+    }
+
+    public java.util.ListIterator<ENTITY> listIterator(int index) {
+        return _selectedList.listIterator(index);
+    }
+
+    public ENTITY remove(int index) {
+        return _selectedList.remove(index);
+    }
+
+    public ENTITY set(int index, ENTITY element) {
+        return _selectedList.set(index, element);
+    }
+
+    public java.util.List<ENTITY> subList(int fromIndex, int toIndex) {
+        return _selectedList.subList(fromIndex, toIndex);
+    }
+
+    // ===================================================================================
+    //                                                                            Accessor
+    //                                                                            ========
+    /**
+     * Get the value of tableDbName.
+     * @return The value of tableDbName. (Nullable: If it's null, it means 'Not Selected Yet'.)
+     */
+    public String getTableDbName() {
+        return _tableDbName;
+    }
+
+    /**
+     * Set the value of tableDbName.
+     * @param tableDbName The value of tableDbName. (NotNull)
+     */
+    public void setTableDbName(String tableDbName) {
+        _tableDbName = tableDbName;
+    }
+
+    /**
+     * Get the value of allRecordCount.
+     * @return The value of allRecordCount.
+     */
+    public int getAllRecordCount() {
+        return _allRecordCount;
+    }
+
+    /**
+     * Set the value of allRecordCount.
+     * @param allRecordCount The value of allRecordCount.
+     */
+    public void setAllRecordCount(int allRecordCount) {
+        _allRecordCount = allRecordCount;
+    }
+
+    /**
+     * Get the value of selectedList.
+     * @return Selected list. (Nullable: If it's null, it means 'Not Selected Yet'.)
+     */
+    public List<ENTITY> getSelectedList() {
+        return _selectedList;
+    }
+
+    /**
+     * Set the value of selectedList.
+     * @param selectedList Selected list. (NotNull)
+     */
+    public void setSelectedList(List<ENTITY> selectedList) {
+        _selectedList = selectedList;
+    }
+
+    /**
+     * Get the value of orderByClause.
+     * @return The value of orderByClause. (Nullable: If it's null, it means 'Not Selected Yet'.)
+     */
+    public OrderByClause getOrderByClause() {
+        return _orderByClause;
+    }
+
+    /**
+     * Set the value of orderByClause.
+     * @param orderByClause The value of orderByClause. (NotNull)
+     */
+    public void setOrderByClause(OrderByClause orderByClause) {
+        _orderByClause = orderByClause;
+    }
+}


Property changes on: announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/cbean/ListResultBean.java
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/cbean/MapParameterBean.java
===================================================================
--- announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/cbean/MapParameterBean.java	                        (rev 0)
+++ announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/cbean/MapParameterBean.java	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,16 @@
+package jp.sf.pal.announcement.db.allcommon.cbean;
+
+import java.util.Map;
+
+/**
+ * The bean of map parameter.
+ * @author DBFlute(AutoGenerator)
+ */
+public interface MapParameterBean {
+
+    /**
+     * Get the map of parameter.
+     * @return The map of parameter. (Nullable)
+     */
+    public Map<String, Object> getParameterMap();
+}


Property changes on: announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/cbean/MapParameterBean.java
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/cbean/OrderByBean.java
===================================================================
--- announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/cbean/OrderByBean.java	                        (rev 0)
+++ announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/cbean/OrderByBean.java	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,46 @@
+package jp.sf.pal.announcement.db.allcommon.cbean;
+
+import jp.sf.pal.announcement.db.allcommon.cbean.sqlclause.OrderByClause;
+
+/**
+ * The order-by-bean as interface.
+ * 
+ * @author DBFlute(AutoGenerator)
+ */
+public interface OrderByBean extends SelectResource {
+
+    /**
+     * Get sql component of order-by clause.
+     * 
+     * @return Sql component of order-by clause. (NotNull)
+     */
+    public OrderByClause getSqlComponentOfOrderByClause();
+
+    /**
+     * Get order-by clause.
+     * 
+     * @return Order-by clause. (NotNull)
+     */
+    public String getOrderByClause();
+
+    /**
+     * Clear order-by.
+     * 
+     * @return this. (NotNull)
+     */
+    public OrderByBean clearOrderBy();
+
+    /**
+     * Ignore order-by.
+     * 
+     * @return this. (NotNull)
+     */
+    public OrderByBean ignoreOrderBy();
+
+    /**
+     * Make order-by effective.
+     * 
+     * @return this. (NotNull)
+     */
+    public OrderByBean makeOrderByEffective();
+}


Property changes on: announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/cbean/OrderByBean.java
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/cbean/PagingBean.java
===================================================================
--- announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/cbean/PagingBean.java	                        (rev 0)
+++ announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/cbean/PagingBean.java	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,134 @@
+package jp.sf.pal.announcement.db.allcommon.cbean;
+
+/**
+ * The bean of paging.
+ * 
+ * @author DBFlute(AutoGenerator)
+ */
+public interface PagingBean extends FetchNarrowingBean, OrderByBean {
+
+    // ===================================================================================
+    //                                                                Paging Determination
+    //                                                                ====================
+    // * * * * * * * *
+    // For SQL Comment
+    // * * * * * * * *
+    /**
+     * Is the execution for paging(NOT count)?
+     * 
+     * @return Determination.
+     */
+    public boolean isPaging();
+
+    /**
+     * Set whether the execution for paging(NOT count). {INTERNAL METHOD}
+     * 
+     * @param paging Determination.
+     */
+    public void xsetPaging(boolean paging);
+
+    // ===================================================================================
+    //                                                                       Fetch Setting
+    //                                                                       =============
+    /**
+     * Fetch first. <br />
+     * If you invoke this, your SQL returns [fetch-size] records from first. <br />
+     * 
+     * @param fetchSize The size of fetch. (NotMinus & NotZero)
+     * @return this. (NotNull)
+     */
+    public PagingBean fetchFirst(int fetchSize);
+
+    /**
+     * Fetch scope. <br />
+     * If you invoke this, your SQL returns [fetch-size] records from [fetch-start-index]. <br />
+     * 
+     * @param fetchStartIndex The start index of fetch. 0 origin. (NotMinus)
+     * @param fetchSize The size of fetch. (NotMinus & NotZero)
+     * @return this. (NotNull)
+     */
+    public PagingBean fetchScope(int fetchStartIndex, int fetchSize);
+
+    /**
+     * Fetch page. <br />
+     * When you invoke this, it is normally necessary to invoke 'fetchFirst()' or 'fetchScope()' ahead of that. <br />
+     * But you also can use default-fetch-size without invoking 'fetchFirst()' or 'fetchScope()'. <br />
+     * If you invoke this, your SQL returns [fetch-size] records from [fetch-start-index] calculated by [fetch-page-number]. <br />
+     * 
+     * @param fetchPageNumber The page number of fetch. 1 origin. (NotMinus & NotZero: If minus or zero, set one.)
+     * @return this. (NotNull)
+     */
+    public PagingBean fetchPage(int fetchPageNumber);
+
+    // ===================================================================================
+    //                                                                      Fetch Property
+    //                                                                      ==============
+    /**
+     * Get fetch-start-index.
+     * 
+     * @return Fetch-start-index.
+     */
+    public int getFetchStartIndex();
+
+    /**
+     * Get fetch-size.
+     * 
+     * @return Fetch-size.
+     */
+    public int getFetchSize();
+
+    /**
+     * Get fetch-page-number.
+     * 
+     * @return Fetch-page-number.
+     */
+    public int getFetchPageNumber();
+
+    /**
+     * Get page start index.
+     * 
+     * @return Page start index. 0 origin. (NotMinus)
+     */
+    public int getPageStartIndex();
+
+    /**
+     * Get page end index.
+     * 
+     * @return Page end index. 0 origin. (NotMinus)
+     */
+    public int getPageEndIndex();
+
+    /**
+     * Is fetch scope effective?
+     * 
+     * @return Determination.
+     */
+    public boolean isFetchScopeEffective();
+
+    // ===================================================================================
+    //                                                                       Hint Property
+    //                                                                       =============
+    // * * * * * * * *
+    // For SQL Comment
+    // * * * * * * * *
+    /**
+     * Get select-hint. {select [select-hint] * from table...}
+     * 
+     * @return Select-hint. (NotNull)
+     */
+    public String getSelectHint();
+
+    /**
+     * Get from-hint. {select * from table [from-hint] where ...}
+     * 
+     * @return From-hint. (NotNull)
+     */
+    public String getFromHint();
+
+    /**
+     * Get sql-suffix. {select * from table where ... order by ... [sql-suffix]}
+     * 
+     * @return Sql-suffix. (NotNull)
+     */
+    public String getSqlSuffix();
+}


Property changes on: announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/cbean/PagingBean.java
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/cbean/PagingHandler.java
===================================================================
--- announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/cbean/PagingHandler.java	                        (rev 0)
+++ announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/cbean/PagingHandler.java	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,31 @@
+package jp.sf.pal.announcement.db.allcommon.cbean;
+
+/**
+ * The handler of paging.
+ * 
+ * @param <ENTITY> The type of entity.
+ * @author DBFlute(AutoGenerator)
+ */
+public interface PagingHandler<ENTITY> {
+
+    /**
+     * Get the bean of paging.
+     * 
+     * @return The bean of paging. (NotNull)
+     */
+    public PagingBean getPagingBean();
+
+    /**
+     * Execute SQL for count.
+     * 
+     * @return The count of execution.
+     */
+    public int count();
+
+    /**
+     * Execute SQL for paging.
+     * 
+     * @return The list of entity. (NotNull)
+     */
+    public java.util.List<ENTITY> paging();
+}


Property changes on: announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/cbean/PagingHandler.java
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/cbean/PagingInvoker.java
===================================================================
--- announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/cbean/PagingInvoker.java	                        (rev 0)
+++ announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/cbean/PagingInvoker.java	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,91 @@
+package jp.sf.pal.announcement.db.allcommon.cbean;
+
+/**
+ * The invoker of paging.
+ * 
+ * @author DBFlute(AutoGenerator)
+ */
+public class PagingInvoker<ENTITY> {
+
+    // ===================================================================================
+    //                                                                           Attribute
+    //                                                                           =========
+    protected String _tableDbName;
+
+    // ===================================================================================
+    //                                                                         Constructor
+    //                                                                         ===========
+    public PagingInvoker(String tableDbName) {
+        _tableDbName = tableDbName;
+    }
+
+    // ===================================================================================
+    //                                                                              Invoke
+    //                                                                              ======
+    /**
+     * Invoke select-page by handler.
+     * 
+     * @param handler The handler of paging. (NotNull)
+     * @return The result bean of paging. (NotNull)
+     */
+    public PagingResultBean<ENTITY> invokePaging(PagingHandler<ENTITY> handler) {
+        assertObjectNotNull("handler", handler);
+        final PagingBean pagingBean = handler.getPagingBean();
+        assertObjectNotNull("handler.getPagingBean()", pagingBean);
+        if (!pagingBean.isFetchScopeEffective()) {
+            String msg = "The paging bean is not effective about fetch-scope!";
+            msg = msg
+                    + " When you select page, you should set up fetch-scope of paging bean(Should invoke fetchFirst() and fetchPage()!).";
+            msg = msg + " The paging bean is: " + pagingBean;
+            throw new IllegalStateException(msg);
+        }
+        final int allRecordCount = handler.count();
+        final java.util.List<ENTITY> selectedList = handler.paging();
+        final PagingResultBean<ENTITY> rb = new ResultBeanBuilder<ENTITY>(
+                _tableDbName).buildPagingResultBean(pagingBean, allRecordCount,
+                selectedList);
+        if (isNecessaryToReadPageAgain(rb)) {
+            pagingBean.fetchPage(rb.getAllPageCount());
+            final int reAllRecordCount = handler.count();
+            final java.util.List<ENTITY> reSelectedList = handler.paging();
+            return new ResultBeanBuilder<ENTITY>(_tableDbName)
+                    .buildPagingResultBean(pagingBean, reAllRecordCount,
+                            reSelectedList);
+        } else {
+            return rb;
+        }
+    }
+
+    /**
+     * Is it necessary to read page again?
+     * 
+     * @param rb The result bean of paging. (NotNull)
+     * @return Determination.
+     */
+    protected boolean isNecessaryToReadPageAgain(PagingResultBean<ENTITY> rb) {
+        return rb.getAllRecordCount() > 0 && rb.getSelectedList().isEmpty();
+    }
+
+    // ===================================================================================
+    //                                                                              Helper
+    //                                                                              ======
+    /**
+     * Assert that the object is not null.
+     * 
+     * @param variableName Variable name. (NotNull)
+     * @param value Value. (NotNull)
+     * @exception IllegalArgumentException
+     */
+    protected void assertObjectNotNull(String variableName, Object value) {
+        if (variableName == null) {
+            String msg = "The value should not be null: variableName="
+                    + variableName + " value=" + value;
+            throw new IllegalArgumentException(msg);
+        }
+        if (value == null) {
+            String msg = "The value should not be null: variableName="
+                    + variableName;
+            throw new IllegalArgumentException(msg);
+        }
+    }
+}


Property changes on: announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/cbean/PagingInvoker.java
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/cbean/PagingResultBean.java
===================================================================
--- announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/cbean/PagingResultBean.java	                        (rev 0)
+++ announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/cbean/PagingResultBean.java	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,338 @@
+package jp.sf.pal.announcement.db.allcommon.cbean;
+
+import jp.sf.pal.announcement.db.allcommon.cbean.mapping.EntityDtoMapper;
+import jp.sf.pal.announcement.db.allcommon.cbean.pagenavi.group.PageGroupBean;
+import jp.sf.pal.announcement.db.allcommon.cbean.pagenavi.group.PageGroupOption;
+import jp.sf.pal.announcement.db.allcommon.cbean.pagenavi.range.PageRangeBean;
+import jp.sf.pal.announcement.db.allcommon.cbean.pagenavi.range.PageRangeOption;
+
+/**
+ * The paging-result-bean for specified entity.
+ * @param <ENTITY> The type of entity for the element of selected list.
+ * @author DBFlute(AutoGenerator)
+ */
+public class PagingResultBean<ENTITY> extends ListResultBean<ENTITY> {
+
+    // ===================================================================================
+    //                                                                          Definition
+    //                                                                          ==========
+    /** Serial version UID. (Default) */
+    private static final long serialVersionUID = 1L;
+
+    // ===================================================================================
+    //                                                                           Attribute
+    //                                                                           =========
+    // -----------------------------------------------------
+    //                                       Page Basic Info
+    //                                       ---------------
+    /** The value of current page number. */
+    protected int _pageSize;
+
+    /** The value of current page number. */
+    protected int _currentPageNumber;
+
+    // -----------------------------------------------------
+    //                                            Page Group
+    //                                            ----------
+    /** The value of page-group bean. */
+    protected PageGroupBean _pageGroupBean;
+
+    /** The value of page-group option. */
+    protected PageGroupOption _pageGroupOption;
+
+    // -----------------------------------------------------
+    //                                            Page Range
+    //                                            ----------
+    /** The value of page-range bean. */
+    protected PageRangeBean _pageRangeBean;
+
+    /** The value of page-range option. */
+    protected PageRangeOption _pageRangeOption;
+
+    // ===================================================================================
+    //                                                                         Constructor
+    //                                                                         ===========
+    /**
+     * Constructor.
+     */
+    public PagingResultBean() {
+    }
+
+    // ===================================================================================
+    //                                                                 Calculated Property
+    //                                                                 ===================
+    /**
+     * Get the value of allPageCount that is calculated.
+     * @return The value of allPageCount.
+     */
+    public int getAllPageCount() {
+        return calculateAllPageCount(_allRecordCount, _pageSize);
+    }
+
+    /**
+     * Get the value of currentStartRecordNumber that is calculated.
+     * @return The value of currentStartRecordNumber.
+     */
+    public int getCurrentStartRecordNumber() {
+        return calculateCurrentStartRecordNumber(_currentPageNumber, _pageSize);
+    }
+
+    /**
+     * Get the value of currentEndRecordNumber that is calculated.
+     * @return The value of currentEndRecordNumber.
+     */
+    public int getCurrentEndRecordNumber() {
+        return calculateCurrentEndRecordNumber(_currentPageNumber, _pageSize);
+    }
+
+    // ===================================================================================
+    //                                                                    Page Group/Range
+    //                                                                    ================
+    // -----------------------------------------------------
+    //                                            Page Group
+    //                                            ----------
+    /**
+     * Get the value of pageGroupSize.
+     * @return The value of pageGroupSize.
+     */
+    public int getPageGroupSize() {
+        return _pageGroupOption != null ? _pageGroupOption.getPageGroupSize()
+                : 0;
+    }
+
+    /**
+     * Set the value of pageGroupSize.
+     * @param pageGroupSize The value of pageGroupSize.
+     */
+    public void setPageGroupSize(int pageGroupSize) {
+        final PageGroupOption option = new PageGroupOption();
+        option.setPageGroupSize(pageGroupSize);
+        setPageGroupOption(option);
+    }
+
+    /**
+     * Set the value of pageGroupOption.
+     * @param pageGroupOption The value of pageGroupOption. (Nullable)
+     */
+    public void setPageGroupOption(PageGroupOption pageGroupOption) {
+        _pageGroupOption = pageGroupOption;
+    }
+
+    /**
+     * Get the value of pageGroupBean.
+     * @return The value of pageGroupBean. (NotNull)
+     */
+    public PageGroupBean pageGroup() {
+        assertPageGroupValid();
+        if (_pageGroupBean == null) {
+            _pageGroupBean = new PageGroupBean();
+        }
+        _pageGroupBean.setPageGroupOption(_pageGroupOption);
+        _pageGroupBean.setCurrentPageNumber(getCurrentPageNumber());
+        _pageGroupBean.setAllPageCount(getAllPageCount());
+        return _pageGroupBean;
+    }
+
+    protected void assertPageGroupValid() {
+        if (_pageGroupOption == null) {
+            String msg = "The pageGroupOption should not be null. Please invoke setPageGroupOption().";
+            throw new IllegalStateException(msg);
+        }
+        if (_pageGroupOption.getPageGroupSize() == 0) {
+            String msg = "The pageGroupSize should be greater than 1. But the value is zero.";
+            msg = msg + " pageGroupSize=" + _pageGroupOption.getPageGroupSize();
+            throw new IllegalStateException(msg);
+        }
+        if (_pageGroupOption.getPageGroupSize() == 1) {
+            String msg = "The pageGroupSize should be greater than 1. But the value is one.";
+            msg = msg + " pageGroupSize=" + _pageGroupOption.getPageGroupSize();
+            throw new IllegalStateException(msg);
+        }
+    }
+
+    // -----------------------------------------------------
+    //                                            Page Range
+    //                                            ----------
+    /**
+     * Get the value of pageRangeSize.
+     * @return The value of pageRangeSize.
+     */
+    public int getPageRangeSize() {
+        return _pageRangeOption != null ? _pageRangeOption.getPageRangeSize()
+                : 0;
+    }
+
+    /**
+     * Set the value of pageRangeSize.
+     * @param pageRangeSize The value of pageRangeSize.
+     */
+    public void setPageRangeSize(int pageRangeSize) {
+        final PageRangeOption option = new PageRangeOption();
+        option.setPageRangeSize(pageRangeSize);
+        setPageRangeOption(option);
+    }
+
+    /**
+     * Set the value of pageRangeOption.
+     * @param pageRangeOption The value of pageRangeOption. (Nullable)
+     */
+    public void setPageRangeOption(PageRangeOption pageRangeOption) {
+        this._pageRangeOption = pageRangeOption;
+    }
+
+    /**
+     * Get the value of pageRangeBean.
+     * @return The value of pageRangeBean. (NotNull)
+     */
+    public PageRangeBean pageRange() {
+        assertPageRangeValid();
+        if (_pageRangeBean == null) {
+            _pageRangeBean = new PageRangeBean();
+        }
+        _pageRangeBean.setPageRangeOption(_pageRangeOption);
+        _pageRangeBean.setCurrentPageNumber(getCurrentPageNumber());
+        _pageRangeBean.setAllPageCount(getAllPageCount());
+        return _pageRangeBean;
+    }
+
+    protected void assertPageRangeValid() {
+        if (_pageRangeOption == null) {
+            String msg = "The pageRangeOption should not be null. Please invoke setPageRangeOption().";
+            throw new IllegalStateException(msg);
+        }
+        final int pageRangeSize = _pageRangeOption.getPageRangeSize();
+        if (pageRangeSize == 0) {
+            String msg = "The pageRangeSize should be greater than 1. But the value is zero.";
+            throw new IllegalStateException(msg);
+        }
+    }
+
+    // ===================================================================================
+    //                                                                       Determination
+    //                                                                       =============
+    /**
+     * Is existing previous page?
+     * Using values are currentPageNumber.
+     * @return Determination.
+     */
+    public boolean isExistPrePage() {
+        return (_allRecordCount > 0 && _currentPageNumber > 1);
+    }
+
+    /**
+     * Is existing next page?
+     * Using values are currentPageNumber and allPageCount.
+     * @return Determination.
+     */
+    public boolean isExistNextPage() {
+        return (_allRecordCount > 0 && _currentPageNumber < getAllPageCount());
+    }
+
+    // ===================================================================================
+    //                                                                             Mapping
+    //                                                                             =======
+    public <DTO> PagingResultBean<DTO> mappingList(
+            EntityDtoMapper<ENTITY, DTO> entityDtoMapper) {
+        final ListResultBean<DTO> ls = super.mappingList(entityDtoMapper);
+        final PagingResultBean<DTO> mappingList = new PagingResultBean<DTO>();
+        mappingList.setSelectedList(ls.getSelectedList());
+        mappingList.setTableDbName(getTableDbName());
+        mappingList.setAllRecordCount(getAllRecordCount());
+        mappingList.setOrderByClause(getOrderByClause());
+        mappingList.setPageSize(getPageSize());
+        mappingList.setCurrentPageNumber(getCurrentPageNumber());
+        mappingList.setPageRangeOption(_pageRangeOption);
+        mappingList.setPageGroupOption(_pageGroupOption);
+        return mappingList;
+    }
+
+    // ===================================================================================
+    //                                                                 Calculate(Internal)
+    //                                                                 ===================
+    /**
+     * Calculate all page count.
+     * @param allRecordCount All record count.
+     * @param pageSize Fetch-size.
+     * @return All page count.
+     */
+    protected int calculateAllPageCount(int allRecordCount, int pageSize) {
+        if (allRecordCount == 0) {
+            return 1;
+        }
+        int pageCountBase = (allRecordCount / pageSize);
+        if (allRecordCount % pageSize > 0) {
+            pageCountBase++;
+        }
+        return pageCountBase;
+    }
+
+    protected int calculateCurrentStartRecordNumber(int currentPageNumber,
+            int pageSize) {
+        return ((currentPageNumber - 1) * pageSize) + 1;
+    }
+
+    protected int calculateCurrentEndRecordNumber(int currentPageNumber,
+            int pageSize) {
+        return calculateCurrentStartRecordNumber(currentPageNumber, pageSize)
+                + _selectedList.size() - 1;
+    }
+
+    // ===================================================================================
+    //                                                                      Basic Override
+    //                                                                      ==============
+    /**
+     * @return The view string of all attribute values. (NotNull)
+     */
+    @Override
+    public String toString() {
+        final StringBuilder sb = new StringBuilder();
+
+        sb.append(getCurrentPageNumber()).append("/").append(getAllPageCount());
+        sb.append(" of ").append(getAllRecordCount());
+        sb.append(" listSize=").append(
+                getSelectedList() != null ? new Integer(getSelectedList()
+                        .size()) : null);
+        sb.append(" pageSize=").append(getPageSize());
+        sb.append(" page:{").append(isExistPrePage()).append("/").append(
+                isExistNextPage()).append("}");
+        sb.append(" groupSize=").append(getPageGroupSize());
+        sb.append(" rangeSize=").append(getPageRangeSize());
+
+        return sb.toString();
+    }
+
+    // ===================================================================================
+    //                                                                            Accessor
+    //                                                                            ========
+    /**
+     * Get the value of pageSize.
+     * @return The value of pageSize.
+     */
+    public int getPageSize() {
+        return _pageSize;
+    }
+
+    /**
+     * Set the value of pageSize.
+     * @param pageSize The value of pageSize.
+     */
+    public void setPageSize(int pageSize) {
+        _pageSize = pageSize;
+    }
+
+    /**
+     * Get the value of currentPageNumber.
+     * @return The value of currentPageNumber.
+     */
+    public int getCurrentPageNumber() {
+        return _currentPageNumber;
+    }
+
+    /**
+     * Set the value of currentPageNumber.
+     * @param currentPageNumber The value of currentPageNumber.
+     */
+    public void setCurrentPageNumber(int currentPageNumber) {
+        _currentPageNumber = currentPageNumber;
+    }
+}


Property changes on: announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/cbean/PagingResultBean.java
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/cbean/ResultBeanBuilder.java
===================================================================
--- announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/cbean/ResultBeanBuilder.java	                        (rev 0)
+++ announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/cbean/ResultBeanBuilder.java	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,64 @@
+package jp.sf.pal.announcement.db.allcommon.cbean;
+
+import java.util.List;
+
+/**
+ * The list-result-bean for ${myClassName}.
+ * 
+ * @param <ENTITY> The type of entity.
+ * @author DBFlute(AutoGenerator)
+ */
+public class ResultBeanBuilder<ENTITY> {
+
+    // ===================================================================================
+    //                                                                           Attribute
+    //                                                                           =========
+    protected String _tableDbName;
+
+    // ===================================================================================
+    //                                                                         Constructor
+    //                                                                         ===========
+    public ResultBeanBuilder(String tableDbName) {
+        _tableDbName = tableDbName;
+    }
+
+    // ===================================================================================
+    //                                                                             Builder
+    //                                                                             =======
+    /**
+     * Build the result bean of list.
+     * 
+     * @param ob The bean of orderBy. (NotNull)
+     * @param selectedList Selected list. (NotNull)
+     * @return The result bean of list. (NotNull)
+     */
+    public ListResultBean<ENTITY> buildListResultBean(ConditionBean ob,
+            List<ENTITY> selectedList) {
+        ListResultBean<ENTITY> rb = new ListResultBean<ENTITY>();
+        rb.setTableDbName(_tableDbName);
+        rb.setAllRecordCount(selectedList.size());
+        rb.setSelectedList(selectedList);
+        rb.setOrderByClause(ob.getSqlComponentOfOrderByClause());
+        return rb;
+    }
+
+    /**
+     * Build the result bean of paging.
+     * 
+     * @param pb The bean of paging. (NotNull)
+     * @param allRecordCount All record count.
+     * @param selectedList The list of selected entity. (NotNull)
+     * @return The result bean of paging. (NotNull)
+     */
+    public PagingResultBean<ENTITY> buildPagingResultBean(PagingBean pb,
+            int allRecordCount, List<ENTITY> selectedList) {
+        PagingResultBean<ENTITY> rb = new PagingResultBean<ENTITY>();
+        rb.setTableDbName(_tableDbName);
+        rb.setAllRecordCount(allRecordCount);
+        rb.setSelectedList(selectedList);
+        rb.setOrderByClause(pb.getSqlComponentOfOrderByClause());
+        rb.setPageSize(pb.getFetchSize());
+        rb.setCurrentPageNumber(pb.getFetchPageNumber());
+        return rb;
+    }
+}


Property changes on: announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/cbean/ResultBeanBuilder.java
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/cbean/SelectResource.java
===================================================================
--- announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/cbean/SelectResource.java	                        (rev 0)
+++ announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/cbean/SelectResource.java	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,16 @@
+package jp.sf.pal.announcement.db.allcommon.cbean;
+
+/**
+ * The select-resource as marker-interface.
+ * 
+ * @author DBFlute(AutoGenerator)
+ */
+public interface SelectResource {
+
+    /**
+     * Check safety result.
+     * 
+     * @param safetyMaxResultSize Safety max result size. (If zero or minus, ignore checking)
+     */
+    public void checkSafetyResult(int safetyMaxResultSize);
+}


Property changes on: announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/cbean/SelectResource.java
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/cbean/SimpleOrderByBean.java
===================================================================
--- announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/cbean/SimpleOrderByBean.java	                        (rev 0)
+++ announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/cbean/SimpleOrderByBean.java	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,155 @@
+package jp.sf.pal.announcement.db.allcommon.cbean;
+
+import jp.sf.pal.announcement.db.allcommon.cbean.sqlclause.OrderByClause;
+import jp.sf.pal.announcement.db.allcommon.cbean.sqlclause.SqlClause;
+
+/**
+ * @deprecated
+ */
+public class SimpleOrderByBean implements OrderByBean {
+
+    // ===================================================================================
+    //                                                                           Attribute
+    //                                                                           =========
+    /** SQL clause instance. */
+    protected final SqlClause _sqlClause;
+    {
+        _sqlClause = ConditionBeanContext.createSqlClause("Dummy");
+    }
+
+    // ===================================================================================
+    //                                                                         Constructor
+    //                                                                         ===========
+    /**
+     * Constructor.
+     */
+    public SimpleOrderByBean() {
+    }
+
+    // ===================================================================================
+    //                                                                           SqlClause
+    //                                                                           =========
+    /**
+     * Get sql-clause.
+     * 
+     * @return Sql clause. (NotNull)
+     */
+    protected SqlClause getSqlClause() {
+        return _sqlClause;
+    }
+
+    // ===================================================================================
+    //                                                                     Select Resource
+    //                                                                     ===============
+    /**
+     * Check safety result.
+     * 
+     * @param safetyMaxResultSize Safety max result size. (If zero or minus, ignore checking)
+     */
+    public void checkSafetyResult(int safetyMaxResultSize) {
+        throw new UnsupportedOperationException();
+    }
+
+    // ===================================================================================
+    //                                                                             OrderBy
+    //                                                                             =======
+    /**
+     * The implementation.
+     * 
+     * @return Sql component of order-by clause. (NotNull)
+     */
+    public OrderByClause getSqlComponentOfOrderByClause() {
+        return getSqlClause().getSqlComponentOfOrderByClause();
+    }
+
+    /**
+     * The implementation.
+     * 
+     * @return Order-by clause. (NotNull)
+     */
+    public String getOrderByClause() {
+        return getSqlClause().getOrderByClause();
+    }
+
+    /**
+     * The implementation.
+     * 
+     * @return this. (NotNull)
+     */
+    public OrderByBean clearOrderBy() {
+        getSqlClause().clearOrderBy();
+        return this;
+    }
+
+    /**
+     * The implementation.
+     * 
+     * @return this. (NotNull)
+     */
+    public OrderByBean ignoreOrderBy() {
+        getSqlClause().ignoreOrderBy();
+        return this;
+    }
+
+    /**
+     * The implementation.
+     * 
+     * @return this. (NotNull)
+     */
+    public OrderByBean makeOrderByEffective() {
+        getSqlClause().makeOrderByEffective();
+        return this;
+    }
+
+    /**
+     * Register order-by-asc.
+     * 
+     * @param orderByProperty Order-by-property. 'aliasName.columnName/aliasName.columnName/...' (NotNull)
+     * @return this. (NotNull)
+     * @deprecated
+     */
+    public OrderByBean registerOrderByAsc(String orderByProperty) {
+        getSqlClause().registerOrderBy(orderByProperty, orderByProperty, true);
+        return this;
+    }
+
+    /**
+     * Register order-by-desc.
+     * 
+     * @param orderByProperty Order-by-property. 'aliasName.columnName/aliasName.columnName/...' (NotNull)
+     * @return this. (NotNull)
+     * @deprecated
+     */
+    public OrderByBean registerOrderByDesc(String orderByProperty) {
+        getSqlClause().registerOrderBy(orderByProperty, orderByProperty, false);
+        return this;
+    }
+
+    /**
+     * Reverse order-by or Override order-by asc.
+     * 
+     * @param orderByProperty Order-by-property. 'aliasName.columnName/aliasName.columnName/...' (NotNull)
+     * @return this. (NotNull)
+     * @deprecated
+     */
+    public OrderByBean reverseOrderBy_Or_OverrideOrderByAsc(
+            String orderByProperty) {
+        getSqlClause().reverseOrderBy_Or_OverrideOrderBy(orderByProperty,
+                orderByProperty, true);
+        return this;
+    }
+
+    /**
+     * Reverse order-by or Override order-by desc.
+     * 
+     * @param orderByProperty Order-by-property. 'aliasName.columnName/aliasName.columnName/...' (NotNull)
+     * @return this. (NotNull)
+     * @deprecated
+     */
+    public OrderByBean reverseOrderBy_Or_OverrideOrderByDesc(
+            String orderByProperty) {
+        getSqlClause().reverseOrderBy_Or_OverrideOrderBy(orderByProperty,
+                orderByProperty, false);
+        return this;
+    }
+}


Property changes on: announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/cbean/SimpleOrderByBean.java
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/cbean/SimplePagingBean.java
===================================================================
--- announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/cbean/SimplePagingBean.java	                        (rev 0)
+++ announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/cbean/SimplePagingBean.java	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,386 @@
+package jp.sf.pal.announcement.db.allcommon.cbean;
+
+import java.util.LinkedHashMap;
+import java.util.Map;
+
+import jp.sf.pal.announcement.db.allcommon.cbean.sqlclause.OrderByClause;
+import jp.sf.pal.announcement.db.allcommon.cbean.sqlclause.SqlClause;
+
+/**
+ * The simple pagingBean.
+ * 
+ * @author DBFlute(AutoGenerator)
+ */
+public class SimplePagingBean implements PagingBean, MapParameterBean {
+
+    // ===================================================================================
+    //                                                                           Attribute
+    //                                                                           =========
+    /** SQL clause instance. */
+    protected final SqlClause _sqlClause;
+    {
+        _sqlClause = ConditionBeanContext.createSqlClause("Dummy");
+    }
+
+    /** The map of parameter. (Nullable) */
+    protected Map<String, Object> _parameterMap;
+
+    /** Safety max result size. */
+    protected int _safetyMaxResultSize;
+
+    /** Is the execution for paging(NOT count)? */
+    protected boolean _paging = true;
+
+    /** Is fetch narrowing valid? */
+    protected boolean _fetchNarrowing = true;
+
+    /** The map for parameter. */
+    protected Map<String, Object> _map;
+
+    // ===================================================================================
+    //                                                        Implementation of PagingBean
+    //                                                        ============================
+    // -----------------------------------------------------
+    //                                  Paging Determination
+    //                                  --------------------
+    // * * * * * * * *
+    // For SQL Comment
+    // * * * * * * * *
+    /**
+     * The implementation.
+     * 
+     * @return Determination.
+     */
+    public boolean isPaging() {
+        return _paging;
+    }
+
+    /**
+     * The implementation. {INTERNAL METHOD: Don't Invoke This!}
+     * 
+     * @param paging Determination.
+     */
+    public void xsetPaging(boolean paging) {
+        if (paging) {
+            getSqlClause().makeFetchScopeEffective();
+        } else {
+            getSqlClause().ignoreFetchScope();
+        }
+        this._paging = paging;
+    }
+
+    // -----------------------------------------------------
+    //                                         Fetch Setting
+    //                                         -------------
+    /**
+     * Fetch first.
+     * <pre>
+     * If you invoke this, your SQL returns [fetch-size] records from first.
+     * </pre>
+     * @param fetchSize Fetch-size. (NotMinus & NotZero)
+     * @return this. (NotNull)
+     */
+    public PagingBean fetchFirst(int fetchSize) {
+        getSqlClause().fetchFirst(fetchSize);
+        return this;
+    }
+
+    /**
+     * Fetch scope.
+     * <pre>
+     * If you invoke this, your SQL returns [fetch-size] records from [fetch-start-index].
+     * </pre>
+     * @param fetchStartIndex Fetch-start-index. 0 origin. (NotMinus)
+     * @param fetchSize Fetch-size. (NotMinus & NotZero)
+     * @return this. (NotNull)
+     */
+    public PagingBean fetchScope(int fetchStartIndex, int fetchSize) {
+        getSqlClause().fetchScope(fetchStartIndex, fetchSize);
+        return this;
+    }
+
+    /**
+     * Fetch page.
+     * <pre>
+     * When you invoke this, it is normally necessary to invoke 'fetchFirst()' or 'fetchScope()' ahead of that.
+     *  But you also can use default-fetch-size without invoking 'fetchFirst()' or 'fetchScope()'.
+     *  If you invoke this, your SQL returns [fetch-size] records from [fetch-start-index] calculated by [fetch-page-number].
+     * </pre>
+     * @param fetchPageNumber Fetch-page-number. 1 origin. (NotMinus & NotZero: If minus or zero, set one.)
+     * @return this. (NotNull)
+     */
+    public PagingBean fetchPage(int fetchPageNumber) {
+        getSqlClause().fetchPage(fetchPageNumber);
+        return this;
+    }
+
+    // -----------------------------------------------------
+    //                                        Fetch Property
+    //                                        --------------
+    /**
+     * The implementation.
+     * 
+     * @return Fetch-start-index.
+     */
+    public int getFetchStartIndex() {
+        return getSqlClause().getFetchStartIndex();
+    }
+
+    /**
+     * The implementation.
+     * 
+     * @return Fetch-size.
+     */
+    public int getFetchSize() {
+        return getSqlClause().getFetchSize();
+    }
+
+    /**
+     * The implementation.
+     * 
+     * @return Fetch-page-number.
+     */
+    public int getFetchPageNumber() {
+        return getSqlClause().getFetchPageNumber();
+    }
+
+    /**
+     * The implementation.
+     * 
+     * @return Page start index. 0 origin. (NotMinus)
+     */
+    public int getPageStartIndex() {
+        return getSqlClause().getPageStartIndex();
+    }
+
+    /**
+     * The implementation.
+     * 
+     * @return Page end index. 0 origin. (NotMinus)
+     */
+    public int getPageEndIndex() {
+        return getSqlClause().getPageEndIndex();
+    }
+
+    /**
+     * Is fetch scope effective?
+     * 
+     * @return Determination.
+     */
+    public boolean isFetchScopeEffective() {
+        return getSqlClause().isFetchScopeEffective();
+    }
+
+    // -----------------------------------------------------
+    //                                         Hint Property
+    //                                         -------------
+    /**
+     * Get select-hint. {select [select-hint] * from table...}
+     * 
+     * @return Select-hint. (NotNull)
+     */
+    public String getSelectHint() {
+        return getSqlClause().getSelectHint();
+    }
+
+    /**
+     * Get from-base-table-hint. {select * from table [from-base-table-hint] where ...}
+     * 
+     * @return from-base-table-hint. (NotNull)
+     */
+    public String getFromBaseTableHint() {
+        return getSqlClause().getFromBaseTableHint();
+    }
+
+    /**
+     * Get from-hint. {select * from table [from-hint] where ...}
+     * 
+     * @return From-hint. (NotNull)
+     */
+    public String getFromHint() {
+        return getSqlClause().getFromHint();
+    }
+
+    /**
+     * Get sql-suffix. {select * from table where ... order by ... [sql-suffix]}
+     * 
+     * @return Sql-suffix. (NotNull)
+     */
+    public String getSqlSuffix() {
+        return getSqlClause().getSqlSuffix();
+    }
+
+    // ===================================================================================
+    //                                                Implementation of FetchNarrowingBean
+    //                                                ====================================
+    /**
+     * Get fetch-narrowing start-index.
+     * 
+     * @return Fetch-narrowing start-index.
+     */
+    public int getFetchNarrowingSkipStartIndex() {
+        return getSqlClause().getFetchNarrowingSkipStartIndex();
+    }
+
+    /**
+     * Get fetch-narrowing size.
+     * 
+     * @return Fetch-narrowing size.
+     */
+    public int getFetchNarrowingLoopCount() {
+        return getSqlClause().getFetchNarrowingLoopCount();
+    }
+
+    /**
+     * Is fetch start index supported?
+     * 
+     * @return Determination.
+     */
+    public boolean isFetchNarrowingSkipStartIndexEffective() {
+        return !getSqlClause().isFetchStartIndexSupported();
+    }
+
+    /**
+     * Is fetch size supported?
+     * 
+     * @return Determination.
+     */
+    public boolean isFetchNarrowingLoopCountEffective() {
+        return !getSqlClause().isFetchSizeSupported();
+    }
+
+    /**
+     * Is fetch-narrowing effective?
+     * 
+     * @return Determination.
+     */
+    public boolean isFetchNarrowingEffective() {
+        return _fetchNarrowing && getSqlClause().isFetchNarrowingEffective();
+    }
+
+    /**
+     * Ignore fetch narrowing. Only checking safety result size is valid. {INTERNAL METHOD}
+     */
+    public void ignoreFetchNarrowing() {
+        _fetchNarrowing = false;
+    }
+
+    /**
+     * Restore ignored fetch narrowing. {INTERNAL METHOD}
+     */
+    public void restoreIgnoredFetchNarrowing() {
+        _fetchNarrowing = true;
+    }
+
+    /**
+     * Get safety max result size.
+     * 
+     * @return Safety max result size.
+     */
+    public int getSafetyMaxResultSize() {
+        return _safetyMaxResultSize;
+    }
+
+    // ===================================================================================
+    //                                                       Implementation of OrderByBean
+    //                                                       =============================
+    /**
+     * The implementation.
+     * 
+     * @return Sql component of order-by clause. (NotNull)
+     */
+    public OrderByClause getSqlComponentOfOrderByClause() {
+        return getSqlClause().getSqlComponentOfOrderByClause();
+    }
+
+    /**
+     * The implementation.
+     * 
+     * @return Order-by clause. (NotNull)
+     */
+    public String getOrderByClause() {
+        return getSqlClause().getOrderByClause();
+    }
+
+    /**
+     * The implementation.
+     * 
+     * @return this. (NotNull)
+     */
+    public OrderByBean clearOrderBy() {
+        getSqlClause().clearOrderBy();
+        return this;
+    }
+
+    /**
+     * The implementation.
+     * 
+     * @return this. (NotNull)
+     */
+    public OrderByBean ignoreOrderBy() {
+        getSqlClause().ignoreOrderBy();
+        return this;
+    }
+
+    /**
+     * The implementation.
+     * 
+     * @return this. (NotNull)
+     */
+    public OrderByBean makeOrderByEffective() {
+        getSqlClause().makeOrderByEffective();
+        return this;
+    }
+
+    // ===================================================================================
+    //                                                    Implementation of SelectResource
+    //                                                    ================================
+    /**
+     * Check safety result.
+     * 
+     * @param safetyMaxResultSize Safety max result size. (If zero or minus, ignore checking)
+     */
+    public void checkSafetyResult(int safetyMaxResultSize) {
+        this._safetyMaxResultSize = safetyMaxResultSize;
+    }
+
+    // ===================================================================================
+    //                                                  Implementation of MapParameterBean
+    //                                                  ==================================
+    /**
+     * Get the map of parameter.
+     * 
+     * @return The map of parameter. (Nullable)
+     */
+    public Map<String, Object> getParameterMap() {
+        return _parameterMap;
+    }
+
+    /**
+     * Add the parameter to the map.
+     * 
+     * @param key The key of parameter. (NotNull)
+     * @param value The value of parameter. (Nullable)
+     */
+    public void addParameter(String key, Object value) {
+        if (_parameterMap == null) {
+            _parameterMap = new LinkedHashMap<String, Object>();
+        }
+        _parameterMap.put(key, value);
+    }
+
+    // ===================================================================================
+    //                                                                            Accessor
+    //                                                                            ========
+    // -----------------------------------------------------
+    //                                             SqlClause
+    //                                             ---------
+    /**
+     * Get sqlClause.
+     * 
+     * @return SqlClause. (NotNull)
+     */
+    protected SqlClause getSqlClause() {
+        return _sqlClause;
+    }
+}


Property changes on: announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/cbean/SimplePagingBean.java
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/cbean/ckey/ConditionKey.java
===================================================================
--- announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/cbean/ckey/ConditionKey.java	                        (rev 0)
+++ announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/cbean/ckey/ConditionKey.java	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,308 @@
+package jp.sf.pal.announcement.db.allcommon.cbean.ckey;
+
+import java.util.List;
+
+import jp.sf.pal.announcement.db.allcommon.cbean.coption.ConditionOption;
+import jp.sf.pal.announcement.db.allcommon.cbean.cvalue.ConditionValue;
+
+/**
+ * The abstract class of condition-key.
+ * 
+ * @author DBFlute(AutoGenerator)
+ */
+public abstract class ConditionKey {
+
+    /** Mark of replaced value. */
+    public static final String MARK_OF_REPLACED_VALUE = "ReplacedValue";
+
+    /** The condition key of equal. */
+    public static final ConditionKey CK_EQUAL = new ConditionKeyEqual();
+
+    /** The condition key of notEqual. */
+    public static final ConditionKey CK_NOT_EQUAL = new ConditionKeyNotEqual();
+
+    /** The condition key of greaterThan. */
+    public static final ConditionKey CK_GREATER_THAN = new ConditionKeyGreaterThan();
+
+    /** The condition key of lessrThan. */
+    public static final ConditionKey CK_LESS_THAN = new ConditionKeyLessThan();
+
+    /** The condition key of greaterEqual. */
+    public static final ConditionKey CK_GREATER_EQUAL = new ConditionKeyGreaterEqual();
+
+    /** The condition key of lessEqual. */
+    public static final ConditionKey CK_LESS_EQUAL = new ConditionKeyLessEqual();
+
+    /** The condition key of prefixSearch. */
+    public static final ConditionKey CK_PREFIX_SEARCH = new ConditionKeyPrefixSearch();
+
+    /** The condition key of likeSearch. */
+    public static final ConditionKey CK_LIKE_SEARCH = new ConditionKeyLikeSearch();
+
+    /** The condition key of inScope. */
+    public static final ConditionKey CK_IN_SCOPE = new ConditionKeyInScope();
+
+    /** The condition key of notInScope. */
+    public static final ConditionKey CK_NOT_IN_SCOPE = new ConditionKeyNotInScope();
+
+    /** The condition key of isNull. */
+    public static final ConditionKey CK_IS_NULL = new ConditionKeyIsNull();
+
+    /** The condition key of isNotNull. */
+    public static final ConditionKey CK_IS_NOT_NULL = new ConditionKeyIsNotNull();
+
+    /** Dummy-object for IsNull and IsNotNull and so on... */
+    protected static final Object DUMMY_OBJECT = new Object();
+
+    /** Condition-key. */
+    protected String _conditionKey;
+
+    /** Operand. */
+    protected String _operand;
+
+    /**
+     * Get condition-key.
+     * 
+     * @return Condition-key.
+     */
+    public String getConditionKey() {
+        return _conditionKey;
+    }
+
+    /**
+     * Get operand.
+     * 
+     * @return Operand.
+     */
+    public String getOperand() {
+        return _operand;
+    }
+
+    /**
+     * Is valid registration?
+     * 
+     * @param conditionValue Condition value. (NotNull)
+     * @param value Value. (NotNull)
+     * @param callerName Caller name. (NotNull)
+     * @return Determination.
+     */
+    abstract public boolean isValidRegistration(ConditionValue conditionValue,
+            Object value, String callerName);
+
+    /**
+     * Add where clause.
+     * 
+     * @param conditionList Condition list. (NotNull)
+     * @param columnName Column name. (NotNull)
+     * @param value Condition value. (NotNull)
+     * @return this.
+     */
+    public ConditionKey addWhereClause(java.util.List<String> conditionList,
+            String columnName, ConditionValue value) {
+        if (value == null) {
+            String msg = "Argument[value] must not be null:";
+            throw new IllegalArgumentException(msg + " value=" + value
+                    + " this.toString()=" + toString());
+        }
+        doAddWhereClause(conditionList, columnName, value);
+        return this;
+    }
+
+    /**
+     * Add where clause.
+     * 
+     * @param conditionList Condition list. (NotNull)
+     * @param columnName Column name. (NotNull)
+     * @param value Condition value. (NotNull)
+     * @param option Condition option. (NotNull)
+     * @return this.
+     */
+    public ConditionKey addWhereClause(java.util.List<String> conditionList,
+            String columnName, ConditionValue value, ConditionOption option) {
+        if (value == null) {
+            String msg = "Argument[value] must not be null:";
+            throw new IllegalArgumentException(msg + " value=" + value
+                    + " this.toString()=" + toString());
+        }
+        doAddWhereClause(conditionList, columnName, value, option);
+        return this;
+    }
+
+    /**
+     * Do add where clause.
+     * 
+     * @param conditionList Condition list. (NotNull)
+     * @param columnName Column name. (NotNull)
+     * @param value Condition value. (NotNull)
+     */
+    abstract protected void doAddWhereClause(List<String> conditionList,
+            String columnName, ConditionValue value);
+
+    /**
+     * Do add where clause.
+     * 
+     * @param conditionList Condition list. (NotNull)
+     * @param columnName Column name. (NotNull)
+     * @param value Condition value. (NotNull)
+     * @param option Condition option. (NotNull)
+     */
+    abstract protected void doAddWhereClause(List<String> conditionList,
+            String columnName, ConditionValue value, ConditionOption option);
+
+    /**
+     * Setup condition value.
+     * 
+     * @param conditionValue Condition value. (NotNull)
+     * @param value Value. (Nullable)
+     * @param location Location. (Nullable)
+     * @return Condition value. (The same as argument[conditionValue]) (NotNull)
+     */
+    public ConditionValue setupConditionValue(ConditionValue conditionValue,
+            Object value, String location) {
+        if (conditionValue == null) {
+            String msg = "Argument[conditionValue] must not be null:";
+            throw new IllegalArgumentException(msg + " value=" + value
+                    + " this.toString()=" + toString());
+        }
+        doSetupConditionValue(conditionValue, value, location);
+        return conditionValue;
+    }
+
+    /**
+     * Setup condition value.
+     * 
+     * @param conditionValue Condition value. (NotNull)
+     * @param value Value. (Nullable)
+     * @param location Location. (Nullable)
+     * @param option Condition option. (NotNull)
+     * @return Condition value. (The same as argument[conditionValue]) (NotNull)
+     */
+    public ConditionValue setupConditionValue(ConditionValue conditionValue,
+            Object value, String location, ConditionOption option) {
+        if (conditionValue == null) {
+            String msg = "Argument[conditionValue] must not be null:";
+            throw new IllegalArgumentException(msg + " value=" + value
+                    + " this.toString()=" + toString());
+        }
+        doSetupConditionValue(conditionValue, value, location, option);
+        return conditionValue;
+    }
+
+    /**
+     * Do setup condition value.
+     * 
+     * @param conditionValue Condition value. (NotNull)
+     * @param value Value. (NotNull)
+     * @param location Location. (NotNull)
+     */
+    abstract protected void doSetupConditionValue(
+            ConditionValue conditionValue, Object value, String location);
+
+    /**
+     * Do setup condition value.
+     * 
+     * @param conditionValue Condition value. (NotNull)
+     * @param value Value. (NotNull)
+     * @param location Location. (NotNull)
+     * @param option Condition option. (NotNull)
+     */
+    abstract protected void doSetupConditionValue(
+            ConditionValue conditionValue, Object value, String location,
+            ConditionOption option);
+
+    /**
+     * Build bind clause. (for s2dao)
+     * 
+     * @param columnName Column name. (NotNull)
+     * @param location Location. (NotNull)
+     * @return Bind clause. (NotNull)
+     */
+    protected String buildBindClause(String columnName, String location) {
+        return columnName + " " + getOperand() + " " + "/*dto." + location
+                + "*/null";
+    }
+
+    /**
+     * Build bind clause. (for s2dao)
+     * 
+     * @param columnName Column name. (NotNull)
+     * @param location Location. (NotNull)
+     * @param additionalOption Additional option. (NotNull)
+     * @return Bind clause. (NotNull)
+     */
+    protected String buildBindClauseWithRearOption(String columnName,
+            String location, String rearOption) {
+        return columnName + " " + getOperand() + " " + "/*dto." + location
+                + "*/null" + rearOption;
+    }
+
+    /**
+     * Build bind clause. (for s2dao)
+     * 
+     * @param columnName Column name. (NotNull)
+     * @param location Location. (NotNull)
+     * @param dummyValue Dummy value. (NotNull)
+     * @return Bind clause. (NotNull)
+     */
+    protected String buildBindClause(String columnName, String location,
+            String dummyValue) {
+        return columnName + " " + getOperand() + " " + "/*dto." + location
+                + "*/" + dummyValue;
+    }
+
+    /**
+     * Build clause without value.
+     * 
+     * @param columnName Column name. (NotNull)
+     * @return Clause without value. (NotNull)
+     */
+    protected String buildClauseWithoutValue(String columnName) {
+        return columnName + " " + getOperand();
+    }
+
+    /**
+     * Get wild-card.
+     * 
+     * @return Wild-card.
+     */
+    protected String getWildCard() {
+        return "%";
+    }
+
+    /**
+     * The override.
+     * Returns hash-code of this condition-key string.
+     * 
+     * @return HashCode.
+     */
+    public int hashCode() {
+        return getConditionKey().hashCode();
+    }
+
+    /**
+     * The override.
+     * If the condition-key of the other is same as this one, returns true.
+     * 
+     * @param other Other entity. (Nullable)
+     * @return Comparing result. If other is null, returns false.
+     */
+    public boolean equals(Object other) {
+        if (other instanceof ConditionKey) {
+            if (this.getConditionKey().equals(
+                    ((ConditionKey) other).getConditionKey())) {
+                return true;
+            }
+        }
+        return false;
+    }
+
+    /**
+     * The override.
+     * 
+     * @return View-string of condition key information.
+     */
+    public String toString() {
+        return "ConditionKey: " + getConditionKey() + " " + getOperand()
+                + " wild-card=[" + getWildCard() + "]";
+    }
+}


Property changes on: announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/cbean/ckey/ConditionKey.java
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/cbean/ckey/ConditionKeyEqual.java
===================================================================
--- announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/cbean/ckey/ConditionKeyEqual.java	                        (rev 0)
+++ announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/cbean/ckey/ConditionKeyEqual.java	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,108 @@
+package jp.sf.pal.announcement.db.allcommon.cbean.ckey;
+
+import jp.sf.pal.announcement.db.allcommon.cbean.coption.ConditionOption;
+import jp.sf.pal.announcement.db.allcommon.cbean.cvalue.ConditionValue;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+
+/**
+ * The condition-key of equal.
+ * 
+ * @author DBFlute(AutoGenerator)
+ */
+public class ConditionKeyEqual extends ConditionKey {
+
+    /** Log-instance. */
+    private static final Log _log = LogFactory.getLog(ConditionKeyEqual.class);
+
+    /**
+     * Constructor.
+     */
+    protected ConditionKeyEqual() {
+        _conditionKey = "equal";
+        _operand = "=";
+    }
+
+    /**
+     * Is valid registration?
+     * 
+     * @param conditionValue Condition value. (NotNull)
+     * @param value Value. (NotNull)
+     * @param callerName Caller name. (NotNull)
+     * @return Determination.
+     */
+    public boolean isValidRegistration(ConditionValue conditionValue,
+            Object value, String callerName) {
+        if (value == null) {
+            return false;
+        }
+        if (conditionValue.hasEqual()) {
+            if (conditionValue.equalEqual(value)) {
+                _log.warn("The value has already registered at " + callerName
+                        + ": value=" + value);
+                return false;
+            } else {
+                conditionValue.overrideEqual(value);
+                return false;
+            }
+        }
+        return true;
+    }
+
+    /**
+     * This method implements super#doAddWhereClause().
+     * 
+     * @param conditionList Condition list. (NotNull)
+     * @param columnName Column name. (NotNull)
+     * @param value Condition value. (NotNull)
+     */
+    protected void doAddWhereClause(java.util.List<String> conditionList,
+            String columnName, ConditionValue value) {
+        if (value.getEqual() == null) {
+            return;
+        }
+        conditionList
+                .add(buildBindClause(columnName, value.getEqualLocation()));
+    }
+
+    /**
+     * This method implements super#doAddWhereClause().
+     * 
+     * @param conditionList Condition list. (NotNull)
+     * @param columnName Column name. (NotNull)
+     * @param value Condition value. (NotNull)
+     * @param option Condition option. (NotNull)
+     */
+    protected void doAddWhereClause(java.util.List<String> conditionList,
+            String columnName, ConditionValue value, ConditionOption option) {
+        throw new UnsupportedOperationException(
+                "doAddWhereClause with condition-option is unsupported!!!");
+    }
+
+    /**
+     * This method implements super#doSetupConditionValue().
+     * 
+     * @param conditionValue Condition value. (NotNull)
+     * @param value Value. (NotNull)
+     * @param location Location. (NotNull)
+     */
+    protected void doSetupConditionValue(ConditionValue conditionValue,
+            Object value, String location) {
+        conditionValue.setEqual(value).setEqualLocation(location);
+    }
+
+    /**
+     * This method implements super#doSetupConditionValue().
+     * 
+     * @param conditionValue Condition value. (NotNull)
+     * @param value Value. (NotNull)
+     * @param location Location. (NotNull)
+     * @param option Condition option. (NotNull)
+     */
+    protected void doSetupConditionValue(ConditionValue conditionValue,
+            Object value, String location, ConditionOption option) {
+        throw new UnsupportedOperationException(
+                "doSetupConditionValue with condition-option is unsupported!!!");
+    }
+}


Property changes on: announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/cbean/ckey/ConditionKeyEqual.java
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/cbean/ckey/ConditionKeyGreaterEqual.java
===================================================================
--- announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/cbean/ckey/ConditionKeyGreaterEqual.java	                        (rev 0)
+++ announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/cbean/ckey/ConditionKeyGreaterEqual.java	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,109 @@
+package jp.sf.pal.announcement.db.allcommon.cbean.ckey;
+
+import jp.sf.pal.announcement.db.allcommon.cbean.coption.ConditionOption;
+import jp.sf.pal.announcement.db.allcommon.cbean.cvalue.ConditionValue;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+
+/**
+ * The condition-key of greaterEqual.
+ * 
+ * @author DBFlute(AutoGenerator)
+ */
+public class ConditionKeyGreaterEqual extends ConditionKey {
+
+    /** Log-instance. */
+    private static final Log _log = LogFactory
+            .getLog(ConditionKeyGreaterEqual.class);
+
+    /**
+     * Constructor.
+     */
+    protected ConditionKeyGreaterEqual() {
+        _conditionKey = "greaterEqual";
+        _operand = ">=";
+    }
+
+    /**
+     * Is valid registration?
+     * 
+     * @param conditionValue Condition value. (NotNull)
+     * @param value Value. (NotNull)
+     * @param callerName Caller name. (NotNull)
+     * @return Determination.
+     */
+    public boolean isValidRegistration(ConditionValue conditionValue,
+            Object value, String callerName) {
+        if (value == null) {
+            return false;
+        }
+        if (conditionValue.hasGreaterEqual()) {
+            if (conditionValue.equalGreaterEqual(value)) {
+                _log.warn("The value has already registered at " + callerName
+                        + ": value=" + value);
+                return false;
+            } else {
+                conditionValue.overrideGreaterEqual(value);
+                return false;
+            }
+        }
+        return true;
+    }
+
+    /**
+     * This method implements super#doAddWhereClause().
+     * 
+     * @param conditionList Condition list. (NotNull)
+     * @param columnName Column name. (NotNull)
+     * @param value Condition value. (NotNull)
+     */
+    protected void doAddWhereClause(java.util.List<String> conditionList,
+            String columnName, ConditionValue value) {
+        if (value.getGreaterEqual() == null) {
+            return;
+        }
+        conditionList.add(buildBindClause(columnName, value
+                .getGreaterEqualLocation()));
+    }
+
+    /**
+     * This method implements super#doAddWhereClause().
+     * 
+     * @param conditionList Condition list. (NotNull)
+     * @param columnName Column name. (NotNull)
+     * @param value Condition value. (NotNull)
+     * @param option Condition option. (NotNull)
+     */
+    protected void doAddWhereClause(java.util.List<String> conditionList,
+            String columnName, ConditionValue value, ConditionOption option) {
+        throw new UnsupportedOperationException(
+                "doAddWhereClause that has ConditionOption is unsupported!!!");
+    }
+
+    /**
+     * This method implements super#doSetupConditionValue().
+     * 
+     * @param conditionValue Condition value. (NotNull)
+     * @param value Value. (NotNull)
+     * @param location Location. (NotNull)
+     */
+    protected void doSetupConditionValue(ConditionValue conditionValue,
+            Object value, String location) {
+        conditionValue.setGreaterEqual(value).setGreaterEqualLocation(location);
+    }
+
+    /**
+     * This method implements super#doSetupConditionValue().
+     * 
+     * @param conditionValue Condition value. (NotNull)
+     * @param value Value. (NotNull)
+     * @param location Location. (NotNull)
+     * @param option Condition option. (NotNull)
+     */
+    protected void doSetupConditionValue(ConditionValue conditionValue,
+            Object value, String location, ConditionOption option) {
+        throw new UnsupportedOperationException(
+                "doSetupConditionValue with condition-option is unsupported!!!");
+    }
+}


Property changes on: announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/cbean/ckey/ConditionKeyGreaterEqual.java
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/cbean/ckey/ConditionKeyGreaterThan.java
===================================================================
--- announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/cbean/ckey/ConditionKeyGreaterThan.java	                        (rev 0)
+++ announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/cbean/ckey/ConditionKeyGreaterThan.java	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,109 @@
+package jp.sf.pal.announcement.db.allcommon.cbean.ckey;
+
+import jp.sf.pal.announcement.db.allcommon.cbean.coption.ConditionOption;
+import jp.sf.pal.announcement.db.allcommon.cbean.cvalue.ConditionValue;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+
+/**
+ * The condition-key of greaterThan.
+ * 
+ * @author DBFlute(AutoGenerator)
+ */
+public class ConditionKeyGreaterThan extends ConditionKey {
+
+    /** Log-instance. */
+    private static final Log _log = LogFactory
+            .getLog(ConditionKeyGreaterThan.class);
+
+    /**
+     * Constructor.
+     */
+    protected ConditionKeyGreaterThan() {
+        _conditionKey = "greaterThan";
+        _operand = ">";
+    }
+
+    /**
+     * Is valid registration?
+     * 
+     * @param conditionValue Condition value. (NotNull)
+     * @param value Value. (NotNull)
+     * @param callerName Caller name. (NotNull)
+     * @return Determination.
+     */
+    public boolean isValidRegistration(ConditionValue conditionValue,
+            Object value, String callerName) {
+        if (value == null) {
+            return false;
+        }
+        if (conditionValue.hasGreaterThan()) {
+            if (conditionValue.equalGreaterThan(value)) {
+                _log.warn("The value has already registered at " + callerName
+                        + ": value=" + value);
+                return false;
+            } else {
+                conditionValue.overrideGreaterThan(value);
+                return false;
+            }
+        }
+        return true;
+    }
+
+    /**
+     * This method implements super#doAddWhereClause().
+     * 
+     * @param conditionList Condition list. (NotNull)
+     * @param columnName Column name. (NotNull)
+     * @param value Condition value. (NotNull)
+     */
+    protected void doAddWhereClause(java.util.List<String> conditionList,
+            String columnName, ConditionValue value) {
+        if (value.getGreaterThan() == null) {
+            return;
+        }
+        conditionList.add(buildBindClause(columnName, value
+                .getGreaterThanLocation()));
+    }
+
+    /**
+     * This method implements super#doAddWhereClause().
+     * 
+     * @param conditionList Condition list. (NotNull)
+     * @param columnName Column name. (NotNull)
+     * @param value Condition value. (NotNull)
+     * @param option Condition option. (NotNull)
+     */
+    protected void doAddWhereClause(java.util.List<String> conditionList,
+            String columnName, ConditionValue value, ConditionOption option) {
+        throw new UnsupportedOperationException(
+                "doAddWhereClause that has ConditionOption is unsupported!!!");
+    }
+
+    /**
+     * This method implements super#doSetupConditionValue().
+     * 
+     * @param conditionValue Condition value. (NotNull)
+     * @param value Value. (NotNull)
+     * @param location Location. (NotNull)
+     */
+    protected void doSetupConditionValue(ConditionValue conditionValue,
+            Object value, String location) {
+        conditionValue.setGreaterThan(value).setGreaterThanLocation(location);
+    }
+
+    /**
+     * This method implements super#doSetupConditionValue().
+     * 
+     * @param conditionValue Condition value. (NotNull)
+     * @param value Value. (NotNull)
+     * @param location Location. (NotNull)
+     * @param option Condition option. (NotNull)
+     */
+    protected void doSetupConditionValue(ConditionValue conditionValue,
+            Object value, String location, ConditionOption option) {
+        throw new UnsupportedOperationException(
+                "doSetupConditionValue with condition-option is unsupported!!!");
+    }
+}


Property changes on: announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/cbean/ckey/ConditionKeyGreaterThan.java
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/cbean/ckey/ConditionKeyInScope.java
===================================================================
--- announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/cbean/ckey/ConditionKeyInScope.java	                        (rev 0)
+++ announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/cbean/ckey/ConditionKeyInScope.java	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,121 @@
+package jp.sf.pal.announcement.db.allcommon.cbean.ckey;
+
+import jp.sf.pal.announcement.db.allcommon.cbean.coption.ConditionOption;
+import jp.sf.pal.announcement.db.allcommon.cbean.coption.InScopeOption;
+import jp.sf.pal.announcement.db.allcommon.cbean.cvalue.ConditionValue;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+
+/**
+ * The condition-key of inScope.
+ * @author DBFlute(AutoGenerator)
+ */
+public class ConditionKeyInScope extends ConditionKey {
+
+    /** Log-instance. */
+    private static final Log _log = LogFactory
+            .getLog(ConditionKeyInScope.class);
+
+    /**
+     * Constructor.
+     */
+    protected ConditionKeyInScope() {
+        _conditionKey = "inScope";
+        _operand = "in";
+    }
+
+    /**
+     * Is valid registration?
+     * @param conditionValue Condition value. (NotNull)
+     * @param value Value. (NotNull)
+     * @param callerName Caller name. (NotNull)
+     * @return Determination.
+     */
+    public boolean isValidRegistration(ConditionValue conditionValue,
+            Object value, String callerName) {
+        if (value == null) {
+            return false;
+        }
+        if (value instanceof java.util.List
+                && ((java.util.List) value).isEmpty()) {
+            return false;
+        }
+        if (value instanceof java.util.List) {
+            if (conditionValue.hasInScope()) {
+                if (conditionValue.equalInScope(((java.util.List) value))) {
+                    _log.warn("The value has already registered at "
+                            + callerName + ": value=" + value);
+                    return false;
+                } else {
+                    conditionValue.overrideInScope(((java.util.List) value));
+                    return false;
+                }
+            }
+        }
+        return true;
+    }
+
+    /**
+     * This method implements super#doAddWhereClause().
+     * @param conditionList Condition list. (NotNull)
+     * @param columnName Column name. (NotNull)
+     * @param value Condition value. (NotNull)
+     */
+    protected void doAddWhereClause(java.util.List<String> conditionList,
+            String columnName, ConditionValue value) {
+        if (value.getInScope() == null) {
+            return;
+        }
+        conditionList.add(buildBindClause(columnName, value
+                .getInScopeLocation(), "('a1', 'a2')"));
+    }
+
+    /**
+     * This method implements super#doAddWhereClause().
+     * @param conditionList Condition list. (NotNull)
+     * @param columnName Column name. (NotNull)
+     * @param value Condition value. (NotNull)
+     * @param option Condition option. (NotNull)
+     */
+    protected void doAddWhereClause(java.util.List<String> conditionList,
+            String columnName, ConditionValue value, ConditionOption option) {
+        if (option == null) {
+            String msg = "The argument[option] should not be null: columnName="
+                    + columnName + " value=" + value;
+            throw new IllegalArgumentException(msg);
+        }
+        if (!(option instanceof InScopeOption)) {
+            String msg = "The argument[option] should be InScopeOption: columnName="
+                    + columnName + " value=" + value;
+            throw new IllegalArgumentException(msg);
+        }
+        conditionList.add(buildBindClause(columnName, value
+                .getInScopeLocation(), "('a1', 'a2')"));
+    }
+
+    /**
+     * This method implements super#doSetupConditionValue().
+     * @param conditionValue Condition value. (NotNull)
+     * @param value Value. (NotNull)
+     * @param location Location. (NotNull)
+     */
+    protected void doSetupConditionValue(ConditionValue conditionValue,
+            Object value, String location) {
+        conditionValue.setInScope((java.util.List) value).setInScopeLocation(
+                location);
+    }
+
+    /**
+     * This method implements super#doSetupConditionValue().
+     * @param conditionValue Condition value. (NotNull)
+     * @param value Value. (NotNull)
+     * @param location Location. (NotNull)
+     * @param option Condition option. (NotNull)
+     */
+    protected void doSetupConditionValue(ConditionValue conditionValue,
+            Object value, String location, ConditionOption option) {
+        conditionValue.setInScope((java.util.List) value,
+                (InScopeOption) option).setInScopeLocation(location);
+    }
+}


Property changes on: announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/cbean/ckey/ConditionKeyInScope.java
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/cbean/ckey/ConditionKeyIsNotNull.java
===================================================================
--- announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/cbean/ckey/ConditionKeyIsNotNull.java	                        (rev 0)
+++ announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/cbean/ckey/ConditionKeyIsNotNull.java	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,100 @@
+package jp.sf.pal.announcement.db.allcommon.cbean.ckey;
+
+import jp.sf.pal.announcement.db.allcommon.cbean.coption.ConditionOption;
+import jp.sf.pal.announcement.db.allcommon.cbean.cvalue.ConditionValue;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+
+/**
+ * The condition-key of isNotNull.
+ * 
+ * @author DBFlute(AutoGenerator)
+ */
+public class ConditionKeyIsNotNull extends ConditionKey {
+
+    /** Log-instance. */
+    private static final Log _log = LogFactory
+            .getLog(ConditionKeyIsNotNull.class);
+
+    /**
+     * Constructor.
+     */
+    protected ConditionKeyIsNotNull() {
+        _conditionKey = "isNotNull";
+        _operand = "is not null";
+    }
+
+    /**
+     * Is valid registration?
+     * 
+     * @param conditionValue Condition value. (NotNull)
+     * @param value Value. (NotNull)
+     * @param callerName Caller name. (NotNull)
+     * @return Determination.
+     */
+    public boolean isValidRegistration(ConditionValue conditionValue,
+            Object value, String callerName) {
+        if (conditionValue.hasIsNotNull()) {
+            _log.warn("The value has already registered at " + callerName);
+            return false;
+        }
+        return true;
+    }
+
+    /**
+     * This method implements super#doAddWhereClause().
+     * 
+     * @param conditionList Condition list. (NotNull)
+     * @param columnName Column name. (NotNull)
+     * @param value Condition value. (NotNull)
+     */
+    protected void doAddWhereClause(java.util.List<String> conditionList,
+            String columnName, ConditionValue value) {
+        if (value.getIsNotNull() == null) {
+            return;
+        }
+        conditionList.add(buildClauseWithoutValue(columnName));
+    }
+
+    /**
+     * This method implements super#doAddWhereClause().
+     * 
+     * @param conditionList Condition list. (NotNull)
+     * @param columnName Column name. (NotNull)
+     * @param value Condition value. (NotNull)
+     * @param option Condition option. (NotNull)
+     */
+    protected void doAddWhereClause(java.util.List<String> conditionList,
+            String columnName, ConditionValue value, ConditionOption option) {
+        throw new UnsupportedOperationException(
+                "doAddWhereClause that has ConditionOption is unsupported!!!");
+    }
+
+    /**
+     * This method implements super#doSetupConditionValue().
+     * 
+     * @param conditionValue Condition value. (NotNull)
+     * @param value Value. (NotNull)
+     * @param location Location. (NotNull)
+     */
+    protected void doSetupConditionValue(ConditionValue conditionValue,
+            Object value, String location) {
+        conditionValue.setIsNotNull(DUMMY_OBJECT)
+                .setIsNotNullLocation(location);
+    }
+
+    /**
+     * This method implements super#doSetupConditionValue().
+     * 
+     * @param conditionValue Condition value. (NotNull)
+     * @param value Value. (NotNull)
+     * @param location Location. (NotNull)
+     * @param option Condition option. (NotNull)
+     */
+    protected void doSetupConditionValue(ConditionValue conditionValue,
+            Object value, String location, ConditionOption option) {
+        throw new UnsupportedOperationException(
+                "doSetupConditionValue with condition-option is unsupported!!!");
+    }
+}


Property changes on: announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/cbean/ckey/ConditionKeyIsNotNull.java
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/cbean/ckey/ConditionKeyIsNull.java
===================================================================
--- announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/cbean/ckey/ConditionKeyIsNull.java	                        (rev 0)
+++ announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/cbean/ckey/ConditionKeyIsNull.java	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,98 @@
+package jp.sf.pal.announcement.db.allcommon.cbean.ckey;
+
+import jp.sf.pal.announcement.db.allcommon.cbean.coption.ConditionOption;
+import jp.sf.pal.announcement.db.allcommon.cbean.cvalue.ConditionValue;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+
+/**
+ * The condition-key of isNull.
+ * 
+ * @author DBFlute(AutoGenerator)
+ */
+public class ConditionKeyIsNull extends ConditionKey {
+
+    /** Log-instance. */
+    private static final Log _log = LogFactory.getLog(ConditionKeyIsNull.class);
+
+    /**
+     * Constructor.
+     */
+    protected ConditionKeyIsNull() {
+        _conditionKey = "isNull";
+        _operand = "is null";
+    }
+
+    /**
+     * Is valid registration?
+     * 
+     * @param conditionValue Condition value. (NotNull)
+     * @param value Value. (NotNull)
+     * @param callerName Caller name. (NotNull)
+     * @return Determination.
+     */
+    public boolean isValidRegistration(ConditionValue conditionValue,
+            Object value, String callerName) {
+        if (conditionValue.hasIsNull()) {
+            _log.warn("The value has already registered at " + callerName);
+            return false;
+        }
+        return true;
+    }
+
+    /**
+     * This method implements super#doAddWhereClause().
+     * 
+     * @param conditionList Condition list. (NotNull)
+     * @param columnName Column name. (NotNull)
+     * @param value Condition value. (NotNull)
+     */
+    protected void doAddWhereClause(java.util.List<String> conditionList,
+            String columnName, ConditionValue value) {
+        if (value.getIsNull() == null) {
+            return;
+        }
+        conditionList.add(buildClauseWithoutValue(columnName));
+    }
+
+    /**
+     * This method implements super#doAddWhereClause().
+     * 
+     * @param conditionList Condition list. (NotNull)
+     * @param columnName Column name. (NotNull)
+     * @param value Condition value. (NotNull)
+     * @param option Condition option. (NotNull)
+     */
+    protected void doAddWhereClause(java.util.List<String> conditionList,
+            String columnName, ConditionValue value, ConditionOption option) {
+        throw new UnsupportedOperationException(
+                "doAddWhereClause that has ConditionOption is unsupported!!!");
+    }
+
+    /**
+     * This method implements super#doSetupConditionValue().
+     * 
+     * @param conditionValue Condition value. (NotNull)
+     * @param value Value. (NotNull)
+     * @param location Location. (NotNull)
+     */
+    protected void doSetupConditionValue(ConditionValue conditionValue,
+            Object value, String location) {
+        conditionValue.setIsNull(DUMMY_OBJECT).setIsNullLocation(location);
+    }
+
+    /**
+     * This method implements super#doSetupConditionValue().
+     * 
+     * @param conditionValue Condition value. (NotNull)
+     * @param value Value. (NotNull)
+     * @param location Location. (NotNull)
+     * @param option Condition option. (NotNull)
+     */
+    protected void doSetupConditionValue(ConditionValue conditionValue,
+            Object value, String location, ConditionOption option) {
+        throw new UnsupportedOperationException(
+                "doSetupConditionValue with condition-option is unsupported!!!");
+    }
+}


Property changes on: announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/cbean/ckey/ConditionKeyIsNull.java
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/cbean/ckey/ConditionKeyLessEqual.java
===================================================================
--- announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/cbean/ckey/ConditionKeyLessEqual.java	                        (rev 0)
+++ announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/cbean/ckey/ConditionKeyLessEqual.java	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,109 @@
+package jp.sf.pal.announcement.db.allcommon.cbean.ckey;
+
+import jp.sf.pal.announcement.db.allcommon.cbean.coption.ConditionOption;
+import jp.sf.pal.announcement.db.allcommon.cbean.cvalue.ConditionValue;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+
+/**
+ * The condition-key of lessEqual.
+ * 
+ * @author DBFlute(AutoGenerator)
+ */
+public class ConditionKeyLessEqual extends ConditionKey {
+
+    /** Log-instance. */
+    private static final Log _log = LogFactory
+            .getLog(ConditionKeyLessEqual.class);
+
+    /**
+     * Constructor.
+     */
+    protected ConditionKeyLessEqual() {
+        _conditionKey = "lessEqual";
+        _operand = "<=";
+    }
+
+    /**
+     * Is valid registration?
+     * 
+     * @param conditionValue Condition value. (NotNull)
+     * @param value Value. (NotNull)
+     * @param callerName Caller name. (NotNull)
+     * @return Determination.
+     */
+    public boolean isValidRegistration(ConditionValue conditionValue,
+            Object value, String callerName) {
+        if (value == null) {
+            return false;
+        }
+        if (conditionValue.hasLessEqual()) {
+            if (conditionValue.equalLessEqual(value)) {
+                _log.warn("The value has already registered at " + callerName
+                        + ": value=" + value);
+                return false;
+            } else {
+                conditionValue.overrideLessEqual(value);
+                return false;
+            }
+        }
+        return true;
+    }
+
+    /**
+     * This method implements super#doAddWhereClause().
+     * 
+     * @param conditionList Condition list. (NotNull)
+     * @param columnName Column name. (NotNull)
+     * @param value Condition value. (NotNull)
+     */
+    protected void doAddWhereClause(java.util.List<String> conditionList,
+            String columnName, ConditionValue value) {
+        if (value.getLessEqual() == null) {
+            return;
+        }
+        conditionList.add(buildBindClause(columnName, value
+                .getLessEqualLocation()));
+    }
+
+    /**
+     * This method implements super#doAddWhereClause().
+     * 
+     * @param conditionList Condition list. (NotNull)
+     * @param columnName Column name. (NotNull)
+     * @param value Condition value. (NotNull)
+     * @param option Condition option. (NotNull)
+     */
+    protected void doAddWhereClause(java.util.List<String> conditionList,
+            String columnName, ConditionValue value, ConditionOption option) {
+        throw new UnsupportedOperationException(
+                "doAddWhereClause that has ConditionOption is unsupported!!!");
+    }
+
+    /**
+     * This method implements super#doSetupConditionValue().
+     * 
+     * @param conditionValue Condition value. (NotNull)
+     * @param value Value. (NotNull)
+     * @param location Location. (NotNull)
+     */
+    protected void doSetupConditionValue(ConditionValue conditionValue,
+            Object value, String location) {
+        conditionValue.setLessEqual(value).setLessEqualLocation(location);
+    }
+
+    /**
+     * This method implements super#doSetupConditionValue().
+     * 
+     * @param conditionValue Condition value. (NotNull)
+     * @param value Value. (NotNull)
+     * @param location Location. (NotNull)
+     * @param option Condition option. (NotNull)
+     */
+    protected void doSetupConditionValue(ConditionValue conditionValue,
+            Object value, String location, ConditionOption option) {
+        throw new UnsupportedOperationException(
+                "doSetupConditionValue with condition-option is unsupported!!!");
+    }
+}


Property changes on: announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/cbean/ckey/ConditionKeyLessEqual.java
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/cbean/ckey/ConditionKeyLessThan.java
===================================================================
--- announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/cbean/ckey/ConditionKeyLessThan.java	                        (rev 0)
+++ announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/cbean/ckey/ConditionKeyLessThan.java	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,109 @@
+package jp.sf.pal.announcement.db.allcommon.cbean.ckey;
+
+import jp.sf.pal.announcement.db.allcommon.cbean.coption.ConditionOption;
+import jp.sf.pal.announcement.db.allcommon.cbean.cvalue.ConditionValue;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+
+/**
+ * The condition-key of lessThan.
+ * 
+ * @author DBFlute(AutoGenerator)
+ */
+public class ConditionKeyLessThan extends ConditionKey {
+
+    /** Log-instance. */
+    private static final Log _log = LogFactory
+            .getLog(ConditionKeyLessThan.class);
+
+    /**
+     * Constructor.
+     */
+    protected ConditionKeyLessThan() {
+        _conditionKey = "lessThan";
+        _operand = "<";
+    }
+
+    /**
+     * Is valid registration?
+     * 
+     * @param conditionValue Condition value. (NotNull)
+     * @param value Value. (NotNull)
+     * @param callerName Caller name. (NotNull)
+     * @return Determination.
+     */
+    public boolean isValidRegistration(ConditionValue conditionValue,
+            Object value, String callerName) {
+        if (value == null) {
+            return false;
+        }
+        if (conditionValue.hasLessThan()) {
+            if (conditionValue.equalLessThan(value)) {
+                _log.warn("The value has already registered at " + callerName
+                        + ": value=" + value);
+                return false;
+            } else {
+                conditionValue.overrideLessThan(value);
+                return false;
+            }
+        }
+        return true;
+    }
+
+    /**
+     * This method implements super#doAddWhereClause().
+     * 
+     * @param conditionList Condition list. (NotNull)
+     * @param columnName Column name. (NotNull)
+     * @param value Condition value. (NotNull)
+     */
+    protected void doAddWhereClause(java.util.List<String> conditionList,
+            String columnName, ConditionValue value) {
+        if (value.getLessThan() == null) {
+            return;
+        }
+        conditionList.add(buildBindClause(columnName, value
+                .getLessThanLocation()));
+    }
+
+    /**
+     * This method implements super#doAddWhereClause().
+     * 
+     * @param conditionList Condition list. (NotNull)
+     * @param columnName Column name. (NotNull)
+     * @param value Condition value. (NotNull)
+     * @param option Condition option. (NotNull)
+     */
+    protected void doAddWhereClause(java.util.List<String> conditionList,
+            String columnName, ConditionValue value, ConditionOption option) {
+        throw new UnsupportedOperationException(
+                "doAddWhereClause that has ConditionOption is unsupported!!!");
+    }
+
+    /**
+     * This method implements super#doSetupConditionValue().
+     * 
+     * @param conditionValue Condition value. (NotNull)
+     * @param value Value. (NotNull)
+     * @param location Location. (NotNull)
+     */
+    protected void doSetupConditionValue(ConditionValue conditionValue,
+            Object value, String location) {
+        conditionValue.setLessThan(value).setLessThanLocation(location);
+    }
+
+    /**
+     * This method implements super#doSetupConditionValue().
+     * 
+     * @param conditionValue Condition value. (NotNull)
+     * @param value Value. (NotNull)
+     * @param location Location. (NotNull)
+     * @param option Condition option. (NotNull)
+     */
+    protected void doSetupConditionValue(ConditionValue conditionValue,
+            Object value, String location, ConditionOption option) {
+        throw new UnsupportedOperationException(
+                "doSetupConditionValue with condition-option is unsupported!!!");
+    }
+}


Property changes on: announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/cbean/ckey/ConditionKeyLessThan.java
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/cbean/ckey/ConditionKeyLikeSearch.java
===================================================================
--- announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/cbean/ckey/ConditionKeyLikeSearch.java	                        (rev 0)
+++ announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/cbean/ckey/ConditionKeyLikeSearch.java	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,102 @@
+package jp.sf.pal.announcement.db.allcommon.cbean.ckey;
+
+import jp.sf.pal.announcement.db.allcommon.cbean.coption.ConditionOption;
+import jp.sf.pal.announcement.db.allcommon.cbean.coption.LikeSearchOption;
+import jp.sf.pal.announcement.db.allcommon.cbean.cvalue.ConditionValue;
+
+/**
+ * The condition-key of likeSearch.
+ * 
+ * @author DBFlute(AutoGenerator)
+ */
+public class ConditionKeyLikeSearch extends ConditionKey {
+
+    /**
+     * Constructor.
+     */
+    protected ConditionKeyLikeSearch() {
+        _conditionKey = "likeSearch";
+        _operand = "like";
+    }
+
+    /**
+     * Is valid registration?
+     * 
+     * @param conditionValue Condition value. (NotNull)
+     * @param value Value. (NotNull)
+     * @param callerName Caller name. (NotNull)
+     * @return Determination.
+     */
+    public boolean isValidRegistration(ConditionValue conditionValue,
+            Object value, String callerName) {
+        if (value == null) {
+            return false;
+        }
+        return true;
+    }
+
+    /**
+     * This method implements super#doAddWhereClause().
+     * 
+     * @param conditionList Condition list. (NotNull)
+     * @param columnName Column name. (NotNull)
+     * @param value Condition value. (NotNull)
+     */
+    protected void doAddWhereClause(java.util.List<String> conditionList,
+            String columnName, ConditionValue value) {
+        throw new UnsupportedOperationException(
+                "doAddWhereClause without condition-option is unsupported!!!");
+    }
+
+    /**
+     * This method implements super#doAddWhereClause().
+     * 
+     * @param conditionList Condition list. (NotNull)
+     * @param columnName Column name. (NotNull)
+     * @param value Condition value. (NotNull)
+     * @param option Condition option. (NotNull)
+     */
+    protected void doAddWhereClause(java.util.List<String> conditionList,
+            String columnName, ConditionValue value, ConditionOption option) {
+        if (option == null) {
+            String msg = "The argument[option] should not be null: columnName="
+                    + columnName + " value=" + value;
+            throw new IllegalArgumentException(msg);
+        }
+        if (!(option instanceof LikeSearchOption)) {
+            String msg = "The argument[option] should be LikeSearchOption: columnName="
+                    + columnName + " value=" + value;
+            throw new IllegalArgumentException(msg);
+        }
+        final LikeSearchOption myOption = (LikeSearchOption) option;
+        conditionList.add(buildBindClauseWithRearOption(columnName, value
+                .getLikeSearchLocation(), myOption.getRearOption()));
+    }
+
+    /**
+     * This method implements super#doSetupConditionValue().
+     * 
+     * @param conditionValue Condition value. (NotNull)
+     * @param value Value. (NotNull)
+     * @param location Location. (NotNull)
+     */
+    protected void doSetupConditionValue(ConditionValue conditionValue,
+            Object value, String location) {
+        throw new UnsupportedOperationException(
+                "doSetupConditionValue without condition-option is unsupported!!!");
+    }
+
+    /**
+     * This method implements super#doSetupConditionValue().
+     * 
+     * @param conditionValue Condition value. (NotNull)
+     * @param value Value. (NotNull)
+     * @param location Location. (NotNull)
+     * @param option Condition option. (NotNull)
+     */
+    protected void doSetupConditionValue(ConditionValue conditionValue,
+            Object value, String location, ConditionOption option) {
+        conditionValue.setLikeSearch((String) value, (LikeSearchOption) option)
+                .setLikeSearchLocation(location);
+    }
+}


Property changes on: announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/cbean/ckey/ConditionKeyLikeSearch.java
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/cbean/ckey/ConditionKeyNotEqual.java
===================================================================
--- announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/cbean/ckey/ConditionKeyNotEqual.java	                        (rev 0)
+++ announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/cbean/ckey/ConditionKeyNotEqual.java	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,109 @@
+package jp.sf.pal.announcement.db.allcommon.cbean.ckey;
+
+import jp.sf.pal.announcement.db.allcommon.cbean.coption.ConditionOption;
+import jp.sf.pal.announcement.db.allcommon.cbean.cvalue.ConditionValue;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+
+/**
+ * The condition-key of notEqual.
+ * 
+ * @author DBFlute(AutoGenerator)
+ */
+public class ConditionKeyNotEqual extends ConditionKey {
+
+    /** Log-instance. */
+    private static final Log _log = LogFactory
+            .getLog(ConditionKeyNotEqual.class);
+
+    /**
+     * Constructor.
+     */
+    protected ConditionKeyNotEqual() {
+        _conditionKey = "notEqual";
+        _operand = "!=";
+    }
+
+    /**
+     * Is valid registration?
+     * 
+     * @param conditionValue Condition value. (NotNull)
+     * @param value Value. (NotNull)
+     * @param callerName Caller name. (NotNull)
+     * @return Determination.
+     */
+    public boolean isValidRegistration(ConditionValue conditionValue,
+            Object value, String callerName) {
+        if (value == null) {
+            return false;
+        }
+        if (conditionValue.hasNotEqual()) {
+            if (conditionValue.equalNotEqual(value)) {
+                _log.warn("The value has already registered at " + callerName
+                        + ": value=" + value);
+                return false;
+            } else {
+                conditionValue.overrideNotEqual(value);
+                return false;
+            }
+        }
+        return true;
+    }
+
+    /**
+     * This method implements super#doAddWhereClause().
+     * 
+     * @param conditionList Condition list. (NotNull)
+     * @param columnName Column name. (NotNull)
+     * @param value Condition value. (NotNull)
+     */
+    protected void doAddWhereClause(java.util.List<String> conditionList,
+            String columnName, ConditionValue value) {
+        if (value.getNotEqual() == null) {
+            return;
+        }
+        conditionList.add(buildBindClause(columnName, value
+                .getNotEqualLocation()));
+    }
+
+    /**
+     * This method implements super#doAddWhereClause().
+     * 
+     * @param conditionList Condition list. (NotNull)
+     * @param columnName Column name. (NotNull)
+     * @param value Condition value. (NotNull)
+     * @param option Condition option. (NotNull)
+     */
+    protected void doAddWhereClause(java.util.List<String> conditionList,
+            String columnName, ConditionValue value, ConditionOption option) {
+        throw new UnsupportedOperationException(
+                "doAddWhereClause with condition-option is unsupported!!!");
+    }
+
+    /**
+     * This method implements super#doSetupConditionValue().
+     * 
+     * @param conditionValue Condition value. (NotNull)
+     * @param value Value. (NotNull)
+     * @param location Location. (NotNull)
+     */
+    protected void doSetupConditionValue(ConditionValue conditionValue,
+            Object value, String location) {
+        conditionValue.setNotEqual(value).setNotEqualLocation(location);
+    }
+
+    /**
+     * This method implements super#doSetupConditionValue().
+     * 
+     * @param conditionValue Condition value. (NotNull)
+     * @param value Value. (NotNull)
+     * @param location Location. (NotNull)
+     * @param option Condition option. (NotNull)
+     */
+    protected void doSetupConditionValue(ConditionValue conditionValue,
+            Object value, String location, ConditionOption option) {
+        throw new UnsupportedOperationException(
+                "doSetupConditionValue with condition-option is unsupported!!!");
+    }
+}


Property changes on: announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/cbean/ckey/ConditionKeyNotEqual.java
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/cbean/ckey/ConditionKeyNotInScope.java
===================================================================
--- announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/cbean/ckey/ConditionKeyNotInScope.java	                        (rev 0)
+++ announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/cbean/ckey/ConditionKeyNotInScope.java	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,111 @@
+package jp.sf.pal.announcement.db.allcommon.cbean.ckey;
+
+import jp.sf.pal.announcement.db.allcommon.cbean.coption.ConditionOption;
+import jp.sf.pal.announcement.db.allcommon.cbean.cvalue.ConditionValue;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+
+/**
+ * The condition-key of notInScope.
+ * @author DBFlute(AutoGenerator)
+ */
+public class ConditionKeyNotInScope extends ConditionKey {
+
+    /** Log-instance. */
+    private static final Log _log = LogFactory
+            .getLog(ConditionKeyNotInScope.class);
+
+    /**
+     * Constructor.
+     */
+    protected ConditionKeyNotInScope() {
+        _conditionKey = "notInScope";
+        _operand = "not in";
+    }
+
+    /**
+     * Is valid registration?
+     * @param conditionValue Condition value. (NotNull)
+     * @param value Value. (NotNull)
+     * @param callerName Caller name. (NotNull)
+     * @return Determination.
+     */
+    public boolean isValidRegistration(ConditionValue conditionValue,
+            Object value, String callerName) {
+        if (value == null) {
+            return false;
+        }
+        if (value instanceof java.util.List
+                && ((java.util.List) value).isEmpty()) {
+            return false;
+        }
+        if (value instanceof java.util.List) {
+            if (conditionValue.hasNotInScope()) {
+                if (conditionValue.equalNotInScope(((java.util.List) value))) {
+                    _log.warn("The value has already registered at "
+                            + callerName + ": value=" + value);
+                    return false;
+                } else {
+                    conditionValue.overrideNotInScope(((java.util.List) value));
+                    return false;
+                }
+            }
+        }
+        return true;
+    }
+
+    /**
+     * This method implements super#doAddWhereClause().
+     * 
+     * @param conditionList Condition list. (NotNull)
+     * @param columnName Column name. (NotNull)
+     * @param value Condition value. (NotNull)
+     */
+    protected void doAddWhereClause(java.util.List<String> conditionList,
+            String columnName, ConditionValue value) {
+        if (value.getNotInScope() == null) {
+            return;
+        }
+        conditionList.add(buildBindClause(columnName, value
+                .getNotInScopeLocation(), "('a1', 'a2')"));
+    }
+
+    /**
+     * This method implements super#doAddWhereClause().
+     * @param conditionList Condition list. (NotNull)
+     * @param columnName Column name. (NotNull)
+     * @param value Condition value. (NotNull)
+     * @param option Condition option. (NotNull)
+     */
+    protected void doAddWhereClause(java.util.List<String> conditionList,
+            String columnName, ConditionValue value, ConditionOption option) {
+        throw new UnsupportedOperationException(
+                "doAddWhereClause that has ConditionOption is unsupported!!!");
+    }
+
+    /**
+     * This method implements super#doSetupConditionValue().
+     * @param conditionValue Condition value. (NotNull)
+     * @param value Value. (NotNull)
+     * @param location Location. (NotNull)
+     */
+    protected void doSetupConditionValue(ConditionValue conditionValue,
+            Object value, String location) {
+        conditionValue.setNotInScope((java.util.List) value)
+                .setNotInScopeLocation(location);
+    }
+
+    /**
+     * This method implements super#doSetupConditionValue().
+     * @param conditionValue Condition value. (NotNull)
+     * @param value Value. (NotNull)
+     * @param location Location. (NotNull)
+     * @param option Condition option. (NotNull)
+     */
+    protected void doSetupConditionValue(ConditionValue conditionValue,
+            Object value, String location, ConditionOption option) {
+        throw new UnsupportedOperationException(
+                "doSetupConditionValue with condition-option is unsupported!!!");
+    }
+}


Property changes on: announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/cbean/ckey/ConditionKeyNotInScope.java
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/cbean/ckey/ConditionKeyPrefixSearch.java
===================================================================
--- announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/cbean/ckey/ConditionKeyPrefixSearch.java	                        (rev 0)
+++ announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/cbean/ckey/ConditionKeyPrefixSearch.java	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,111 @@
+package jp.sf.pal.announcement.db.allcommon.cbean.ckey;
+
+import jp.sf.pal.announcement.db.allcommon.cbean.coption.ConditionOption;
+import jp.sf.pal.announcement.db.allcommon.cbean.cvalue.ConditionValue;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+
+/**
+ * The condition-key of prefixSearch.
+ * 
+ * @author DBFlute(AutoGenerator)
+ */
+public class ConditionKeyPrefixSearch extends ConditionKey {
+
+    /** Log-instance. */
+    private static final Log _log = LogFactory
+            .getLog(ConditionKeyPrefixSearch.class);
+
+    /**
+     * Constructor.
+     */
+    protected ConditionKeyPrefixSearch() {
+        _conditionKey = "prefixSearch";
+        _operand = "like";
+    }
+
+    /**
+     * Is valid registration?
+     * 
+     * @param conditionValue Condition value. (NotNull)
+     * @param value Value. (NotNull)
+     * @param callerName Caller name. (NotNull)
+     * @return Determination.
+     */
+    public boolean isValidRegistration(ConditionValue conditionValue,
+            Object value, String callerName) {
+        if (value == null) {
+            return false;
+        }
+        if (conditionValue.hasPrefixSearch()) {
+            if (conditionValue.equalPrefixSearch(value + getWildCard())) {
+                _log.warn("The value has already registered at " + callerName
+                        + ": value=" + value);
+                return false;
+            } else {
+                conditionValue.overridePrefixSearch(value);
+                return false;
+            }
+        }
+        return true;
+    }
+
+    /**
+     * This method implements super#doAddWhereClause().
+     * 
+     * @param conditionList Condition list. (NotNull)
+     * @param columnName Column name. (NotNull)
+     * @param value Condition value. (NotNull)
+     */
+    protected void doAddWhereClause(java.util.List<String> conditionList,
+            String columnName, ConditionValue value) {
+        if (value.getPrefixSearch() == null) {
+            return;
+        }
+        conditionList.add(buildBindClause(columnName, value
+                .getPrefixSearchLocation()));
+    }
+
+    /**
+     * This method implements super#doAddWhereClause().
+     * 
+     * @param conditionList Condition list. (NotNull)
+     * @param columnName Column name. (NotNull)
+     * @param value Condition value. (NotNull)
+     * @param option Condition option. (NotNull)
+     */
+    protected void doAddWhereClause(java.util.List<String> conditionList,
+            String columnName, ConditionValue value, ConditionOption option) {
+        throw new UnsupportedOperationException(
+                "doAddWhereClause that has ConditionOption is unsupported!!!");
+    }
+
+    /**
+     * This method implements super#doSetupConditionValue().
+     * 
+     * @param conditionValue Condition value. (NotNull)
+     * @param value Value. (NotNull)
+     * @param location Location. (NotNull)
+     */
+    protected void doSetupConditionValue(ConditionValue conditionValue,
+            Object value, String location) {
+        conditionValue.setPrefixSearch(
+                (value != null ? value + getWildCard() : null))
+                .setPrefixSearchLocation(location);
+    }
+
+    /**
+     * This method implements super#doSetupConditionValue().
+     * 
+     * @param conditionValue Condition value. (NotNull)
+     * @param value Value. (NotNull)
+     * @param location Location. (NotNull)
+     * @param option Condition option. (NotNull)
+     */
+    protected void doSetupConditionValue(ConditionValue conditionValue,
+            Object value, String location, ConditionOption option) {
+        throw new UnsupportedOperationException(
+                "doSetupConditionValue with condition-option is unsupported!!!");
+    }
+}


Property changes on: announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/cbean/ckey/ConditionKeyPrefixSearch.java
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/cbean/coption/ConditionOption.java
===================================================================
--- announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/cbean/coption/ConditionOption.java	                        (rev 0)
+++ announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/cbean/coption/ConditionOption.java	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,10 @@
+package jp.sf.pal.announcement.db.allcommon.cbean.coption;
+
+/**
+ * The interface of condition-option.
+ * 
+ * @author DBFlute(AutoGenerator)
+ */
+public interface ConditionOption {
+    public String getRearOption();
+}


Property changes on: announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/cbean/coption/ConditionOption.java
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/cbean/coption/DateFromToOption.java
===================================================================
--- announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/cbean/coption/DateFromToOption.java	                        (rev 0)
+++ announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/cbean/coption/DateFromToOption.java	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,24 @@
+package jp.sf.pal.announcement.db.allcommon.cbean.coption;
+
+/**
+ * The option of date-from-to.
+ * <pre>
+ * ex) fromDate:{2007/04/10 08:24:53} toDate:{2007/04/16 14:36:29}
+ *
+ *   - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
+ *   new DateFromToOption(); 
+ *     --&gt; column &gt;= '2007/04/10 00:00:00' and column &lt; '2007/04/17 00:00:00'
+ *   - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
+ * 
+ * </pre>
+ * @author DBFlute(AutoGenerator)
+ */
+public class DateFromToOption extends FromToOption {
+
+    // ===================================================================================
+    //                                                                         Constructor
+    //                                                                         ===========
+    public DateFromToOption() {
+        compareAsDate();
+    }
+}


Property changes on: announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/cbean/coption/DateFromToOption.java
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/cbean/coption/FromToOption.java
===================================================================
--- announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/cbean/coption/FromToOption.java	                        (rev 0)
+++ announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/cbean/coption/FromToOption.java	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,147 @@
+package jp.sf.pal.announcement.db.allcommon.cbean.coption;
+
+/**
+ * The option of from-to.
+ * <pre>
+ * ex) fromDate:{2007/04/10 08:24:53} toDate:{2007/04/16 14:36:29}
+ *
+ *   - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
+ *   new FromToOption().compareAsDate(); 
+ *     --&gt; column &gt;= '2007/04/10 00:00:00' and column &lt; '2007/04/17 00:00:00'
+ *   - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
+ *
+ *   new FromToOption(); 
+ *     --&gt; column &gt;= '2007/04/10 08:24:53' and column &lt;= '2007/04/16 14:36:29'
+ *
+ *   new FromToOption().greaterThan(); 
+ *     --&gt; column &gt; '2007/04/10 08:24:53' and column &lt;= '2007/04/16 14:36:29'
+ *
+ *   new FromToOption().lessThan(); 
+ *     --&gt; column &gt;= '2007/04/10 08:24:53' and column &lt; '2007/04/16 14:36:29'
+ *
+ *   new FromToOption().greaterThan().lessThan(); 
+ *     --&gt; column &gt; '2007/04/10 08:24:53' and column &lt; '2007/04/16 14:36:29'
+ * 
+ * </pre>
+ * @author DBFlute(AutoGenerator)
+ */
+public class FromToOption implements ConditionOption {
+
+    // ===================================================================================
+    //                                                                           Attribute
+    //                                                                           =========
+    protected boolean _fromDateGreaterThan;
+
+    protected boolean _toDateLessThan;
+
+    protected boolean _compareAsDate;
+
+    // ===================================================================================
+    //                                                            Interface Implementation
+    //                                                            ========================
+    public String getRearOption() {
+        String msg = "Thie option does not use getRearOption()!";
+        throw new UnsupportedOperationException(msg);
+    }
+
+    // ===================================================================================
+    //                                                                                Main
+    //                                                                                ====
+    public FromToOption greaterThan() {
+        _fromDateGreaterThan = true;
+        return this;
+    }
+
+    public FromToOption lessThan() {
+        _toDateLessThan = true;
+        return this;
+    }
+
+    /**
+     * Compare as date.
+     * <pre>
+     * ex) fromDate:{2007/04/10 08:24:53} toDate:{2007/04/16 14:36:29}
+     *
+     *   new FromToOption().compareAsDate();
+     *     --&gt; column &gt;= '2007/04/10 00:00:00' and column &lt; '2007/04/17 00:00:00'
+     * 
+     * This method ignore greaterThan() and lessThan().
+     * </pre>
+     * @return this. (NotNull)
+     */
+    public FromToOption compareAsDate() {
+        _compareAsDate = true;
+        return this;
+    }
+
+    // ===================================================================================
+    //                                                                       Internal Main
+    //                                                                       =============
+    public java.util.Date filterFromDate(java.util.Date fromDate) {
+        if (fromDate == null) {
+            return null;
+        }
+        if (_compareAsDate) {
+            final java.util.Calendar cal = java.util.Calendar.getInstance();
+            cal.setTimeInMillis(fromDate.getTime());
+            clearCalendarHourMinuteSecondMilli(cal);
+            final java.util.Date cloneDate = (java.util.Date) fromDate.clone();
+            cloneDate.setTime(cal.getTimeInMillis());
+            return cloneDate;
+        }
+        return fromDate;
+    }
+
+    public java.util.Date filterToDate(java.util.Date toDate) {
+        if (toDate == null) {
+            return null;
+        }
+        if (_compareAsDate) {
+            final java.util.Calendar cal = java.util.Calendar.getInstance();
+            cal.setTimeInMillis(toDate.getTime());
+            clearCalendarHourMinuteSecondMilli(cal);
+            addCalendarNextDay(cal);// Key Point!
+            final java.util.Date cloneDate = (java.util.Date) toDate.clone();
+            cloneDate.setTime(cal.getTimeInMillis());
+            return cloneDate;
+        }
+        return toDate;
+    }
+
+    public jp.sf.pal.announcement.db.allcommon.cbean.ckey.ConditionKey getFromDateConditionKey() {
+        if (_compareAsDate) {
+            return jp.sf.pal.announcement.db.allcommon.cbean.ckey.ConditionKey.CK_GREATER_EQUAL;
+        }
+        if (_fromDateGreaterThan) {
+            return jp.sf.pal.announcement.db.allcommon.cbean.ckey.ConditionKey.CK_GREATER_THAN;// Default!
+        } else {
+            return jp.sf.pal.announcement.db.allcommon.cbean.ckey.ConditionKey.CK_GREATER_EQUAL;// Default!
+        }
+    }
+
+    public jp.sf.pal.announcement.db.allcommon.cbean.ckey.ConditionKey getToDateConditionKey() {
+        if (_compareAsDate) {
+            return jp.sf.pal.announcement.db.allcommon.cbean.ckey.ConditionKey.CK_LESS_THAN;
+        }
+        if (_toDateLessThan) {
+            return jp.sf.pal.announcement.db.allcommon.cbean.ckey.ConditionKey.CK_LESS_THAN;// Default!
+        } else {
+            return jp.sf.pal.announcement.db.allcommon.cbean.ckey.ConditionKey.CK_LESS_EQUAL;// Default!
+        }
+    }
+
+    // ===================================================================================
+    //                                                                     Calendar Helper
+    //                                                                     ===============
+    protected void addCalendarNextDay(java.util.Calendar cal) {
+        cal.add(java.util.Calendar.DAY_OF_MONTH, 1);
+    }
+
+    protected void clearCalendarHourMinuteSecondMilli(java.util.Calendar cal) {
+        cal.clear(java.util.Calendar.MILLISECOND);
+        cal.clear(java.util.Calendar.SECOND);
+        cal.clear(java.util.Calendar.MINUTE);
+        cal.set(java.util.Calendar.HOUR_OF_DAY, cal
+                .getActualMinimum(java.util.Calendar.HOUR_OF_DAY));
+    }
+}


Property changes on: announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/cbean/coption/FromToOption.java
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/cbean/coption/InScopeOption.java
===================================================================
--- announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/cbean/coption/InScopeOption.java	                        (rev 0)
+++ announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/cbean/coption/InScopeOption.java	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,87 @@
+package jp.sf.pal.announcement.db.allcommon.cbean.coption;
+
+import jp.sf.pal.announcement.db.allcommon.cbean.coption.parts.local.JapaneseOptionPartsAgent;
+
+/**
+ * The class of in-scope-option.
+ * 
+ * @author DBFlute(AutoGenerator)
+ */
+public class InScopeOption extends SimpleStringOption {
+
+    // =====================================================================================
+    //                                                                                 Split
+    //                                                                                 =====
+    public InScopeOption splitBySpace() {
+        return (InScopeOption) doSplitBySpace();
+    }
+
+    public InScopeOption splitBySpace(int splitLimitCount) {
+        return (InScopeOption) doSplitBySpace(splitLimitCount);
+    }
+
+    public InScopeOption splitBySpaceContainsDoubleByte() {
+        return (InScopeOption) doSplitBySpaceContainsDoubleByte();
+    }
+
+    public InScopeOption splitBySpaceContainsDoubleByte(int splitLimitCount) {
+        return (InScopeOption) doSplitBySpaceContainsDoubleByte(splitLimitCount);
+    }
+
+    public InScopeOption splitByPipeLine() {
+        return (InScopeOption) doSplitByPipeLine();
+    }
+
+    public InScopeOption splitByPipeLine(int splitLimitCount) {
+        return (InScopeOption) doSplitByPipeLine(splitLimitCount);
+    }
+
+    // =====================================================================================
+    //                                                                   To Upper/Lower Case
+    //                                                                   ===================
+    public InScopeOption toUpperCase() {
+        return (InScopeOption) doToUpperCase();
+    }
+
+    public InScopeOption toLowerCase() {
+        return (InScopeOption) doToLowerCase();
+    }
+
+    // =====================================================================================
+    //                                                                        To Single Byte
+    //                                                                        ==============
+    public InScopeOption toSingleByteSpace() {
+        return (InScopeOption) doToSingleByteSpace();
+    }
+
+    public InScopeOption toSingleByteAlphabetNumber() {
+        return (InScopeOption) doToSingleByteAlphabetNumber();
+    }
+
+    public InScopeOption toSingleByteAlphabetNumberMark() {
+        return (InScopeOption) doToSingleByteAlphabetNumberMark();
+    }
+
+    // =====================================================================================
+    //                                                                        To Double Byte
+    //                                                                        ==============
+
+    // =====================================================================================
+    //                                                                              Japanese
+    //                                                                              ========
+    public JapaneseOptionPartsAgent localJapanese() {
+        return doLocalJapanese();
+    }
+
+    // =====================================================================================
+    //                                                                            Real Value
+    //                                                                            ==========
+    public java.util.List generateRealValueList(java.util.List valueList) {
+        final java.util.List<String> resultList = new java.util.ArrayList<String>();
+        for (final java.util.Iterator ite = valueList.iterator(); ite.hasNext();) {
+            final String value = (String) ite.next();
+            resultList.add(generateRealValue(value));
+        }
+        return resultList;
+    }
+}


Property changes on: announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/cbean/coption/InScopeOption.java
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/cbean/coption/LikeSearchOption.java
===================================================================
--- announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/cbean/coption/LikeSearchOption.java	                        (rev 0)
+++ announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/cbean/coption/LikeSearchOption.java	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,250 @@
+package jp.sf.pal.announcement.db.allcommon.cbean.coption;
+
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+
+import jp.sf.pal.announcement.db.allcommon.cbean.coption.parts.local.JapaneseOptionPartsAgent;
+
+/**
+ * The class of like-search-option.
+ * @author DBFlute(AutoGenerator)
+ */
+public class LikeSearchOption extends SimpleStringOption {
+
+    // ===================================================================================
+    //                                                                          Definition
+    //                                                                          ==========
+    protected static final String LIKE_PREFIX = "prefix";
+
+    protected static final String LIKE_SUFFIX = "suffix";
+
+    protected static final String LIKE_CONTAIN = "contain";
+
+    // ===================================================================================
+    //                                                                           Attribute
+    //                                                                           =========
+    protected String _like;
+
+    protected String _escape;
+
+    protected boolean _asOrSplit;
+
+    protected List<LikeAsOrCallback> _likeAsOrCallbackList;
+
+    // ===================================================================================
+    //                                                                         Rear Option
+    //                                                                         ===========
+    public String getRearOption() {
+        if (_escape == null || _escape.trim().length() == 0) {
+            return "";
+        }
+        return " escape '" + _escape + "'";
+    }
+
+    // ===================================================================================
+    //                                                                                AsOr
+    //                                                                                ====
+    public static interface LikeAsOrCallback {
+        public String getAdditionalTargetPropertyName();
+
+        public String filterValue(String currentValue);
+
+        public LikeSearchOption filterOption(
+                LikeSearchOption optionDeepCopyWithoutCallback);
+    }
+
+    public static abstract class DefaultLikeAsOrCallback implements
+            LikeAsOrCallback {
+        public String filterValue(String currentValue) {
+            return currentValue;
+        }
+
+        public LikeSearchOption filterOption(
+                LikeSearchOption optionDeepCopyWithoutCallback) {
+            return optionDeepCopyWithoutCallback;
+        }
+    }
+
+    public boolean hasLikeAsOrCallback() {
+        return _likeAsOrCallbackList != null
+                && !_likeAsOrCallbackList.isEmpty();
+    }
+
+    public List<LikeAsOrCallback> getLikeAsOrCallbackList() {
+        if (_likeAsOrCallbackList == null) {
+            _likeAsOrCallbackList = new ArrayList<LikeAsOrCallback>();
+        }
+        return _likeAsOrCallbackList;
+    }
+
+    public void addLikeAsOrCallback(LikeAsOrCallback likeAsOrCallback) {
+        getLikeAsOrCallbackList().add(likeAsOrCallback);
+    }
+
+    public void clearLikeAsOrCallback() {
+        getLikeAsOrCallbackList().clear();
+    }
+
+    // ===================================================================================
+    //                                                                                Like
+    //                                                                                ====
+    public LikeSearchOption likePrefix() {
+        _like = LIKE_PREFIX;
+        return this;
+    }
+
+    public LikeSearchOption likeSuffix() {
+        _like = LIKE_SUFFIX;
+        return this;
+    }
+
+    public LikeSearchOption likeContain() {
+        _like = LIKE_CONTAIN;
+        return this;
+    }
+
+    // ===================================================================================
+    //                                                                              Escape
+    //                                                                              ======
+    public LikeSearchOption escapeByPipeLine() {
+        _escape = "|";
+        return this;
+    }
+
+    public LikeSearchOption escapeByAtMark() {
+        _escape = "@";
+        return this;
+    }
+
+    public LikeSearchOption escapeBySlash() {
+        _escape = "/";
+        return this;
+    }
+
+    public LikeSearchOption escapeByBackSlash() {
+        _escape = "\\";
+        return this;
+    }
+
+    // ===================================================================================
+    //                                                                               Split
+    //                                                                               =====
+    public LikeSearchOption splitBySpace() {
+        return (LikeSearchOption) doSplitBySpace();
+    }
+
+    public LikeSearchOption splitBySpace(int splitLimitCount) {
+        return (LikeSearchOption) doSplitBySpace(splitLimitCount);
+    }
+
+    public LikeSearchOption splitBySpaceContainsDoubleByte() {
+        return (LikeSearchOption) doSplitBySpaceContainsDoubleByte();
+    }
+
+    public LikeSearchOption splitBySpaceContainsDoubleByte(int splitLimitCount) {
+        return (LikeSearchOption) doSplitBySpaceContainsDoubleByte(splitLimitCount);
+    }
+
+    public LikeSearchOption splitByPipeLine() {
+        return (LikeSearchOption) doSplitByPipeLine();
+    }
+
+    public LikeSearchOption splitByPipeLine(int splitLimitCount) {
+        return (LikeSearchOption) doSplitByPipeLine(splitLimitCount);
+    }
+
+    public LikeSearchOption asOrSplit() {
+        _asOrSplit = true;
+        return this;
+    }
+
+    public boolean isAsOrSplit() {
+        return _asOrSplit;
+    }
+
+    // ===================================================================================
+    //                                                                 To Upper/Lower Case
+    //                                                                 ===================
+    public LikeSearchOption toUpperCase() {
+        return (LikeSearchOption) doToUpperCase();
+    }
+
+    public LikeSearchOption toLowerCase() {
+        return (LikeSearchOption) doToLowerCase();
+    }
+
+    // ===================================================================================
+    //                                                                      To Single Byte
+    //                                                                      ==============
+    public LikeSearchOption toSingleByteSpace() {
+        return (LikeSearchOption) doToSingleByteSpace();
+    }
+
+    public LikeSearchOption toSingleByteAlphabetNumber() {
+        return (LikeSearchOption) doToSingleByteAlphabetNumber();
+    }
+
+    public LikeSearchOption toSingleByteAlphabetNumberMark() {
+        return (LikeSearchOption) doToSingleByteAlphabetNumberMark();
+    }
+
+    // ===================================================================================
+    //                                                                      To Double Byte
+    //                                                                      ==============
+
+    // ===================================================================================
+    //                                                                            Japanese
+    //                                                                            ========
+    public JapaneseOptionPartsAgent localJapanese() {
+        return doLocalJapanese();
+    }
+
+    // ===================================================================================
+    //                                                                          Real Value
+    //                                                                          ==========
+    public String generateRealValue(String value) {
+        value = super.generateRealValue(value);
+
+        // Escape
+        if (_escape != null && _escape.trim().length() != 0) {
+            String tmp = replace(value, _escape, _escape + _escape);
+            tmp = replace(tmp, "%", _escape + "%");
+            tmp = replace(tmp, "_", _escape + "_");
+            value = tmp;
+        }
+        final String wildCard = "%";
+        if (_like == null || _like.trim().length() == 0) {
+            return value;
+        } else if (_like.equals(LIKE_PREFIX)) {
+            return value + wildCard;
+        } else if (_like.equals(LIKE_SUFFIX)) {
+            return wildCard + value;
+        } else if (_like.equals(LIKE_CONTAIN)) {
+            return wildCard + value + wildCard;
+        } else {
+            String msg = "The like was wrong string: " + _like;
+            throw new IllegalStateException(msg);
+        }
+    }
+
+    // ===================================================================================
+    //                                                                            DeepCopy
+    //                                                                            ========
+    public Object createDeepCopy() {
+        final LikeSearchOption deepCopy = (LikeSearchOption) super
+                .createDeepCopy();
+        deepCopy._like = _like;
+        deepCopy._escape = _escape;
+        if (hasLikeAsOrCallback()) {
+            for (Iterator ite = _likeAsOrCallbackList.iterator(); ite.hasNext();) {
+                deepCopy.addLikeAsOrCallback((LikeAsOrCallback) ite.next());
+            }
+        }
+        return deepCopy;
+    }
+
+    protected SimpleStringOption newDeepCopyInstance() {
+        return new LikeSearchOption();
+    }
+}


Property changes on: announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/cbean/coption/LikeSearchOption.java
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/cbean/coption/SimpleStringOption.java
===================================================================
--- announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/cbean/coption/SimpleStringOption.java	                        (rev 0)
+++ announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/cbean/coption/SimpleStringOption.java	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,183 @@
+package jp.sf.pal.announcement.db.allcommon.cbean.coption;
+
+import jp.sf.pal.announcement.db.allcommon.cbean.coption.parts.SplitOptionParts;
+import jp.sf.pal.announcement.db.allcommon.cbean.coption.parts.ToSingleByteOptionParts;
+import jp.sf.pal.announcement.db.allcommon.cbean.coption.parts.ToUpperLowerCaseOptionParts;
+import jp.sf.pal.announcement.db.allcommon.cbean.coption.parts.local.JapaneseOptionPartsAgent;
+import jp.sf.pal.announcement.db.allcommon.util.SimpleStringUtil;
+
+/**
+ * The class of simple-string-option.
+ * 
+ * @author DBFlute(AutoGenerator)
+ */
+public class SimpleStringOption implements ConditionOption {
+
+    protected SplitOptionParts _splitOptionParts;
+
+    protected ToUpperLowerCaseOptionParts _toUpperLowerCaseOptionParts;
+
+    protected ToSingleByteOptionParts _toSingleByteCaseOptionParts;
+
+    protected JapaneseOptionPartsAgent _japaneseOptionPartsAgent;
+
+    // =====================================================================================
+    //                                                                           Rear Option
+    //                                                                           ===========
+    public String getRearOption() {
+        return "";
+    }
+
+    // =====================================================================================
+    //                                                                                 Split
+    //                                                                                 =====
+    protected SimpleStringOption doSplitBySpace() {
+        getSplitOptionParts().splitBySpace();
+        return this;
+    }
+
+    protected SimpleStringOption doSplitBySpace(int splitLimitCount) {
+        getSplitOptionParts().splitBySpace(splitLimitCount);
+        return this;
+    }
+
+    protected SimpleStringOption doSplitBySpaceContainsDoubleByte() {
+        getSplitOptionParts().splitBySpaceContainsDoubleByte();
+        return this;
+    }
+
+    protected SimpleStringOption doSplitBySpaceContainsDoubleByte(
+            int splitLimitCount) {
+        getSplitOptionParts().splitBySpaceContainsDoubleByte(splitLimitCount);
+        return this;
+    }
+
+    protected SimpleStringOption doSplitByPipeLine() {
+        getSplitOptionParts().splitByPipeLine();
+        return this;
+    }
+
+    protected SimpleStringOption doSplitByPipeLine(int splitLimitCount) {
+        getSplitOptionParts().splitByPipeLine(splitLimitCount);
+        return this;
+    }
+
+    protected SplitOptionParts getSplitOptionParts() {
+        if (_splitOptionParts == null) {
+            _splitOptionParts = new SplitOptionParts();
+        }
+        return _splitOptionParts;
+    }
+
+    public boolean isSplit() {
+        return getSplitOptionParts().isSplit();
+    }
+
+    public String[] generateSplitValueArray(String value) {
+        return getSplitOptionParts().generateSplitValueArray(value);
+    }
+
+    // =====================================================================================
+    //                                                                   To Upper/Lower Case
+    //                                                                   ===================
+    protected SimpleStringOption doToUpperCase() {
+        getToUpperLowerCaseOptionParts().toUpperCase();
+        return this;
+    }
+
+    protected SimpleStringOption doToLowerCase() {
+        getToUpperLowerCaseOptionParts().toLowerCase();
+        return this;
+    }
+
+    protected ToUpperLowerCaseOptionParts getToUpperLowerCaseOptionParts() {
+        if (_toUpperLowerCaseOptionParts == null) {
+            _toUpperLowerCaseOptionParts = new ToUpperLowerCaseOptionParts();
+        }
+        return _toUpperLowerCaseOptionParts;
+    }
+
+    // =====================================================================================
+    //                                                                        To Single Byte
+    //                                                                        ==============
+    protected SimpleStringOption doToSingleByteSpace() {
+        getToSingleByteOptionParts().toSingleByteSpace();
+        return this;
+    }
+
+    protected SimpleStringOption doToSingleByteAlphabetNumber() {
+        getToSingleByteOptionParts().toSingleByteAlphabetNumber();
+        return this;
+    }
+
+    protected SimpleStringOption doToSingleByteAlphabetNumberMark() {
+        getToSingleByteOptionParts().toSingleByteAlphabetNumberMark();
+        return this;
+    }
+
+    protected ToSingleByteOptionParts getToSingleByteOptionParts() {
+        if (_toSingleByteCaseOptionParts == null) {
+            _toSingleByteCaseOptionParts = new ToSingleByteOptionParts();
+        }
+        return _toSingleByteCaseOptionParts;
+    }
+
+    // =====================================================================================
+    //                                                                        To Double Byte
+    //                                                                        ==============
+
+    // =====================================================================================
+    //                                                                              Japanese
+    //                                                                              ========
+    protected JapaneseOptionPartsAgent doLocalJapanese() {
+        return getJapaneseOptionPartsAgent();
+    }
+
+    protected JapaneseOptionPartsAgent getJapaneseOptionPartsAgent() {
+        if (_japaneseOptionPartsAgent == null) {
+            _japaneseOptionPartsAgent = new JapaneseOptionPartsAgent();
+        }
+        return _japaneseOptionPartsAgent;
+    }
+
+    // =====================================================================================
+    //                                                                            Real Value
+    //                                                                            ==========
+    public String generateRealValue(String value) {
+        value = getToUpperLowerCaseOptionParts().generateRealValue(value);
+        value = getToSingleByteOptionParts().generateRealValue(value);
+        value = getJapaneseOptionPartsAgent().generateRealValue(value);
+        return value;
+    }
+
+    // =====================================================================================
+    //                                                                        General Helper
+    //                                                                        ==============
+    protected String replace(String text, String fromText, String toText) {
+        return SimpleStringUtil.replace(text, fromText, toText);
+    }
+
+    // =====================================================================================
+    //                                                                              DeepCopy
+    //                                                                              ========
+    public Object createDeepCopy() {
+        final SimpleStringOption deepCopy = newDeepCopyInstance();
+        deepCopy._splitOptionParts = _splitOptionParts != null ? (SplitOptionParts) _splitOptionParts
+                .createDeepCopy()
+                : null;
+        deepCopy._toUpperLowerCaseOptionParts = _toUpperLowerCaseOptionParts != null ? (ToUpperLowerCaseOptionParts) _toUpperLowerCaseOptionParts
+                .createDeepCopy()
+                : null;
+        deepCopy._toSingleByteCaseOptionParts = _toSingleByteCaseOptionParts != null ? (ToSingleByteOptionParts) _toSingleByteCaseOptionParts
+                .createDeepCopy()
+                : null;
+        deepCopy._japaneseOptionPartsAgent = _japaneseOptionPartsAgent != null ? (JapaneseOptionPartsAgent) _japaneseOptionPartsAgent
+                .createDeepCopy()
+                : null;
+        return deepCopy;
+    }
+
+    protected SimpleStringOption newDeepCopyInstance() {
+        return new SimpleStringOption();
+    }
+}


Property changes on: announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/cbean/coption/SimpleStringOption.java
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/cbean/coption/parts/SplitOptionParts.java
===================================================================
--- announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/cbean/coption/parts/SplitOptionParts.java	                        (rev 0)
+++ announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/cbean/coption/parts/SplitOptionParts.java	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,156 @@
+package jp.sf.pal.announcement.db.allcommon.cbean.coption.parts;
+
+/**
+ * The interface of condition-option.
+ * 
+ * @author DBFlute(AutoGenerator)
+ */
+public class SplitOptionParts {
+
+    // =====================================================================================
+    //                                                                             Attribute
+    //                                                                             =========
+    protected String _split;
+
+    protected String _splitContainedDelimiter;
+
+    protected int _splitLimitCount;
+
+    // =====================================================================================
+    //                                                                                  Main
+    //                                                                                  ====
+    public boolean isSplit() {
+        return _split != null;
+    }
+
+    public void splitBySpace() {
+        _split = " ";
+    }
+
+    public void splitBySpace(int splitLimitCount) {
+        _split = " ";
+        _splitLimitCount = splitLimitCount;
+    }
+
+    public void splitBySpaceContainsDoubleByte() {
+        _split = " ";
+        _splitContainedDelimiter = "\u3000";
+    }
+
+    public void splitBySpaceContainsDoubleByte(int splitLimitCount) {
+        _split = " ";
+        _splitContainedDelimiter = "\u3000";
+        _splitLimitCount = splitLimitCount;
+    }
+
+    public void splitByPipeLine() {
+        _split = "|";
+    }
+
+    public void splitByPipeLine(int splitLimitCount) {
+        _split = "|";
+        _splitLimitCount = splitLimitCount;
+    }
+
+    // =====================================================================================
+    //                                                                            Real Value
+    //                                                                            ==========
+    public String[] generateSplitValueArray(String value) {
+        if (value == null || value.trim().length() == 0) {
+            String msg = "The argument[value] should not be null of empty: "
+                    + value;
+            throw new IllegalArgumentException(msg);
+        }
+        value = repalceContainedDelimiterToRealDelimiter(value);
+        final java.util.StringTokenizer st = new java.util.StringTokenizer(
+                value, _split);
+        final String[] tokenizedValues = new String[st.countTokens()];
+        int count = 0;
+        while (st.hasMoreTokens()) {
+            tokenizedValues[count] = st.nextToken();
+            count++;
+        }
+        final String[] values = removeInvalidValue(tokenizedValues);
+        if (_splitLimitCount > 0 && values.length > _splitLimitCount) {
+            final String[] realValues = new String[_splitLimitCount];
+            for (int i = 0; i < values.length; i++) {
+                if (i == _splitLimitCount) {
+                    break;
+                }
+                realValues[i] = values[i];
+            }
+            return realValues;
+        } else {
+            return values;
+        }
+
+    }
+
+    protected String repalceContainedDelimiterToRealDelimiter(String value) {
+        if (value == null || value.trim().length() == 0) {
+            return value;
+        }
+        if (_splitContainedDelimiter == null) {
+            return value;
+        }
+        if (_split == null) {
+            return value;
+        }
+        return replace(value, _splitContainedDelimiter, _split);
+    }
+
+    protected String[] removeInvalidValue(String[] values) {
+        final java.util.List<String> ls = new java.util.ArrayList<String>();
+        for (int i = 0; i < values.length; i++) {
+            final String value = values[i];
+            if (value == null || value.equals("")) {// Don't trim!!!
+                continue;
+            }
+            ls.add(value);
+        }
+        final String[] resultArray = new String[ls.size()];
+        for (int i = 0; i < ls.size(); i++) {
+            resultArray[i] = (String) ls.get(i);
+        }
+        return resultArray;
+    }
+
+    // =====================================================================================
+    //                                                                                Helper
+    //                                                                                ======
+    protected final String replace(String text, String fromText, String toText) {
+
+        if (text == null || fromText == null || toText == null) {
+            return null;
+        }
+        StringBuffer buf = new StringBuffer(100);
+        int pos = 0;
+        int pos2 = 0;
+        while (true) {
+            pos = text.indexOf(fromText, pos2);
+            if (pos == 0) {
+                buf.append(toText);
+                pos2 = fromText.length();
+            } else if (pos > 0) {
+                buf.append(text.substring(pos2, pos));
+                buf.append(toText);
+                pos2 = pos + fromText.length();
+            } else {
+                buf.append(text.substring(pos2));
+                break;
+            }
+        }
+        return buf.toString();
+    }
+
+    // =====================================================================================
+    //                                                                              DeepCopy
+    //                                                                              ========
+    public Object createDeepCopy() {
+        final SplitOptionParts deepCopy = new SplitOptionParts();
+        deepCopy._split = _split;
+        deepCopy._splitContainedDelimiter = _splitContainedDelimiter;
+        deepCopy._splitLimitCount = _splitLimitCount;
+        return deepCopy;
+    }
+}


Property changes on: announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/cbean/coption/parts/SplitOptionParts.java
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/cbean/coption/parts/ToSingleByteOptionParts.java
===================================================================
--- announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/cbean/coption/parts/ToSingleByteOptionParts.java	                        (rev 0)
+++ announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/cbean/coption/parts/ToSingleByteOptionParts.java	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,84 @@
+package jp.sf.pal.announcement.db.allcommon.cbean.coption.parts;
+
+import jp.sf.pal.announcement.db.allcommon.helper.character.GeneralCharacter;
+import jp.sf.pal.announcement.db.allcommon.helper.character.impl.GeneralCharacterImpl;
+
+/**
+ * The interface of condition-option.
+ * 
+ * @author DBFlute(AutoGenerator)
+ */
+public class ToSingleByteOptionParts {
+
+    // =====================================================================================
+    //                                                                             Attribute
+    //                                                                             =========
+    protected boolean _toSingleByteSpace;
+
+    protected boolean _toSingleByteAlphabetNumber;
+
+    protected boolean _toSingleByteAlphabetNumberMark;
+
+    private GeneralCharacter _generalCharacter;
+
+    // =====================================================================================
+    //                                                                                  Main
+    //                                                                                  ====
+    public boolean isToSingleByteSpace() {
+        return _toSingleByteSpace;
+    }
+
+    public void toSingleByteSpace() {
+        _toSingleByteSpace = true;
+    }
+
+    public void toSingleByteAlphabetNumber() {
+        _toSingleByteAlphabetNumber = true;
+    }
+
+    public void toSingleByteAlphabetNumberMark() {
+        _toSingleByteAlphabetNumberMark = true;
+    }
+
+    // =====================================================================================
+    //                                                                            Real Value
+    //                                                                            ==========
+    public String generateRealValue(String value) {
+        if (value == null || value.trim().length() == 0) {
+            String msg = "The argument[value] should not be null.";
+            throw new IllegalArgumentException(msg);
+        }
+
+        // To Single Byte
+        if (_toSingleByteSpace) {
+            value = (value != null ? value.replaceAll("\u3000", " ") : value);
+        }
+        if (_toSingleByteAlphabetNumberMark) {
+            value = getGeneralCharacter().toSingleByteAlphabetNumberMark(value);
+        } else if (_toSingleByteAlphabetNumber) {
+            value = getGeneralCharacter().toSingleByteAlphabetNumber(value);
+        }
+        return value;
+    }
+
+    // =====================================================================================
+    //                                                                                Helper
+    //                                                                                ======
+    protected GeneralCharacter getGeneralCharacter() {
+        if (_generalCharacter == null) {
+            _generalCharacter = new GeneralCharacterImpl();
+        }
+        return _generalCharacter;
+    }
+
+    // =====================================================================================
+    //                                                                              DeepCopy
+    //                                                                              ========
+    public Object createDeepCopy() {
+        final ToSingleByteOptionParts deepCopy = new ToSingleByteOptionParts();
+        deepCopy._toSingleByteSpace = _toSingleByteSpace;
+        deepCopy._toSingleByteAlphabetNumber = _toSingleByteAlphabetNumber;
+        deepCopy._toSingleByteAlphabetNumberMark = _toSingleByteAlphabetNumberMark;
+        return deepCopy;
+    }
+}


Property changes on: announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/cbean/coption/parts/ToSingleByteOptionParts.java
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/cbean/coption/parts/ToUpperLowerCaseOptionParts.java
===================================================================
--- announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/cbean/coption/parts/ToUpperLowerCaseOptionParts.java	                        (rev 0)
+++ announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/cbean/coption/parts/ToUpperLowerCaseOptionParts.java	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,58 @@
+package jp.sf.pal.announcement.db.allcommon.cbean.coption.parts;
+
+/**
+ * The class of condition-option-parts about toUpperCase/toLowerCase.
+ * 
+ * @author DBFlute(AutoGenerator)
+ */
+public class ToUpperLowerCaseOptionParts {
+
+    // =====================================================================================
+    //                                                                             Attribute
+    //                                                                             =========
+    protected boolean _toUpperCase;
+
+    protected boolean _toLowerCase;
+
+    // =====================================================================================
+    //                                                                                  Main
+    //                                                                                  ====
+    public void toUpperCase() {
+        _toUpperCase = true;
+        _toLowerCase = false;
+    }
+
+    public void toLowerCase() {
+        _toUpperCase = false;
+        _toLowerCase = true;
+    }
+
+    // =====================================================================================
+    //                                                                            Real Value
+    //                                                                            ==========
+    public String generateRealValue(String value) {
+        if (value == null || value.trim().length() == 0) {
+            String msg = "The argument[value] should not be null.";
+            throw new IllegalArgumentException(msg);
+        }
+
+        // To Upper/Lower Case
+        if (_toUpperCase) {
+            value = (value != null ? value.toUpperCase() : value);
+        }
+        if (_toLowerCase) {
+            value = (value != null ? value.toLowerCase() : value);
+        }
+        return value;
+    }
+
+    // =====================================================================================
+    //                                                                              DeepCopy
+    //                                                                              ========
+    public Object createDeepCopy() {
+        final ToUpperLowerCaseOptionParts deepCopy = new ToUpperLowerCaseOptionParts();
+        deepCopy._toUpperCase = _toUpperCase;
+        deepCopy._toLowerCase = _toLowerCase;
+        return deepCopy;
+    }
+}


Property changes on: announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/cbean/coption/parts/ToUpperLowerCaseOptionParts.java
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/cbean/coption/parts/local/JapaneseOptionPartsAgent.java
===================================================================
--- announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/cbean/coption/parts/local/JapaneseOptionPartsAgent.java	                        (rev 0)
+++ announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/cbean/coption/parts/local/JapaneseOptionPartsAgent.java	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,83 @@
+package jp.sf.pal.announcement.db.allcommon.cbean.coption.parts.local;
+
+import jp.sf.pal.announcement.db.allcommon.helper.character.JapaneseCharacter;
+import jp.sf.pal.announcement.db.allcommon.helper.character.impl.JapaneseCharacterImpl;
+
+/**
+ * The class of condition-option-parts-agent.
+ * 
+ * @author DBFlute(AutoGenerator)
+ */
+public class JapaneseOptionPartsAgent {
+
+    // =====================================================================================
+    //                                                                             Attribute
+    //                                                                             =========
+    protected boolean _toDoubleByteKatakana;
+
+    protected boolean _removeLastLongVowel;
+
+    private JapaneseCharacter _japaneseCharacter;
+
+    // =====================================================================================
+    //                                                                                  Main
+    //                                                                                  ====
+    public boolean isToDoubleByteKatakana() {
+        return _toDoubleByteKatakana;
+    }
+
+    public void toDoubleByteKatakana() {
+        _toDoubleByteKatakana = true;
+    }
+
+    public boolean isRemoveLastLongVowel() {
+        return _removeLastLongVowel;
+    }
+
+    public void removeLastLongVowel() {
+        _removeLastLongVowel = true;
+    }
+
+    // =====================================================================================
+    //                                                                            Real Value
+    //                                                                            ==========
+    public String generateRealValue(String value) {
+        if (value == null || value.trim().length() == 0) {
+            String msg = "The argument[value] should not be null.";
+            throw new IllegalArgumentException(msg);
+        }
+
+        // To Double Byte
+        if (_toDoubleByteKatakana) {
+            value = getJapaneseCharacter().toDoubleByteKatakana(value);
+        }
+
+        // Remove
+        if (_removeLastLongVowel) {
+            if (value != null && value.endsWith("\u30fc")) {
+                value = value.substring(0, value.length() - "\u30fc".length());
+            }
+        }
+        return value;
+    }
+
+    // =====================================================================================
+    //                                                                                Helper
+    //                                                                                ======
+    protected JapaneseCharacter getJapaneseCharacter() {
+        if (_japaneseCharacter == null) {
+            _japaneseCharacter = new JapaneseCharacterImpl();
+        }
+        return _japaneseCharacter;
+    }
+
+    // =====================================================================================
+    //                                                                              DeepCopy
+    //                                                                              ========
+    public Object createDeepCopy() {
+        final JapaneseOptionPartsAgent deepCopy = new JapaneseOptionPartsAgent();
+        deepCopy._toDoubleByteKatakana = _toDoubleByteKatakana;
+        deepCopy._removeLastLongVowel = _removeLastLongVowel;
+        return deepCopy;
+    }
+}


Property changes on: announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/cbean/coption/parts/local/JapaneseOptionPartsAgent.java
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/cbean/cvalue/ConditionValue.java
===================================================================
--- announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/cbean/cvalue/ConditionValue.java	                        (rev 0)
+++ announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/cbean/cvalue/ConditionValue.java	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,1201 @@
+package jp.sf.pal.announcement.db.allcommon.cbean.cvalue;
+
+import java.util.List;
+
+import jp.sf.pal.announcement.db.allcommon.cbean.coption.InScopeOption;
+import jp.sf.pal.announcement.db.allcommon.cbean.coption.LikeSearchOption;
+
+/**
+ * Condition value.
+ * 
+ * @author DBFlute(AutoGenerator)
+ */
+public class ConditionValue {
+
+    // ===================================================================================
+    //                                                                               Equal
+    //                                                                               =====
+    /** Value of equal. */
+    protected Object _equalValue;
+
+    /**
+     * Get the value of equal.
+     * 
+     * @return The value of equal. (Nullable)
+     */
+    public Object getEqual() {
+        return filterValue(_equalValue);
+    }
+
+    /**
+     * Set the value of equal.
+     * 
+     * @param value The value of equal. (Nullable)
+     * @return this. (NotNull)
+     */
+    public ConditionValue setEqual(Object value) {
+        _equalValue = value;
+        return this;
+    }
+
+    /**
+     * Does it has the value of equal?
+     * 
+     * @return Determination. (NotNull)
+     */
+    public boolean hasEqual() {
+        return _equalValue != null;
+    }
+
+    /**
+     * Does the value equal the value of equal?
+     * 
+     * @param value The value of equal. (Nullable)
+     * @return Determination. (NotNull)
+     */
+    public boolean equalEqual(Object value) {
+        return hasEqual() ? _equalValue.equals(value) : value == null;
+    }
+
+    /**
+     * Override the value of equal.
+     * 
+     * @param value The value of equal. (Nullable)
+     * @return this. (NotNull)
+     */
+    public ConditionValue overrideEqual(Object value) {
+        _equalValue = value;
+        return this;
+    }
+
+    /** Location of equal. */
+    protected String _equalLocation;
+
+    /**
+     * Get the location of equal.
+     * 
+     * @return The location of equal. (Nullable)
+     */
+    public String getEqualLocation() {
+        return _equalLocation;
+    }
+
+    /**
+     * Set the location of equal.
+     * 
+     * @param location The location of equal. (Nullable)
+     * @return this. (NotNull)
+     */
+    public ConditionValue setEqualLocation(String location) {
+        _equalLocation = location;
+        return this;
+    }
+
+    // ===================================================================================
+    //                                                                           Not Equal
+    //                                                                           =========
+    /** Value of notEqual. */
+    protected Object _notEqualValue;
+
+    /**
+     * Get the value of notEqual.
+     * 
+     * @return The value of notEqual. (Nullable)
+     */
+    public Object getNotEqual() {
+        return filterValue(_notEqualValue);
+    }
+
+    /**
+     * Set the value of notEqual.
+     * 
+     * @param value The value of notEqual. (Nullable)
+     * @return this. (NotNull)
+     */
+    public ConditionValue setNotEqual(Object value) {
+        _notEqualValue = value;
+        return this;
+    }
+
+    /**
+     * Does it has the value of notEqual?
+     * 
+     * @return Determination. (NotNull)
+     */
+    public boolean hasNotEqual() {
+        return _notEqualValue != null;
+    }
+
+    /**
+     * Does the value equal the value of notEqual?
+     * 
+     * @param value The value of notEqual. (Nullable)
+     * @return Determination. (NotNull)
+     */
+    public boolean equalNotEqual(Object value) {
+        return hasNotEqual() ? _notEqualValue.equals(value) : value == null;
+    }
+
+    /**
+     * Override the value of notEqual.
+     * 
+     * @param value The value of notEqual. (Nullable)
+     * @return this. (NotNull)
+     */
+    public ConditionValue overrideNotEqual(Object value) {
+        _notEqualValue = value;
+        return this;
+    }
+
+    /** Location of notEqual. */
+    protected String _notEqualLocation;
+
+    /**
+     * Get the location of notEqual.
+     * 
+     * @return The location of notEqual. (Nullable)
+     */
+    public String getNotEqualLocation() {
+        return _notEqualLocation;
+    }
+
+    /**
+     * Set the location of notEqual.
+     * 
+     * @param location The location of notEqual. (Nullable)
+     * @return this. (NotNull)
+     */
+    public ConditionValue setNotEqualLocation(String location) {
+        _notEqualLocation = location;
+        return this;
+    }
+
+    // ===================================================================================
+    //                                                                        Greater Than
+    //                                                                        ============
+    /** Value of greaterThan. */
+    protected Object _greaterThanValue;
+
+    /**
+     * Get the value of greaterThan.
+     * 
+     * @return The value of greaterThan. (Nullable)
+     */
+    public Object getGreaterThan() {
+        return filterValue(_greaterThanValue);
+    }
+
+    /**
+     * Set the value of greaterThan.
+     * 
+     * @param value The value of greaterThan. (Nullable)
+     * @return this. (NotNull)
+     */
+    public ConditionValue setGreaterThan(Object value) {
+        _greaterThanValue = value;
+        return this;
+    }
+
+    /**
+     * Does it has the value of greaterThan?
+     * 
+     * @return Determination. (NotNull)
+     */
+    public boolean hasGreaterThan() {
+        return _greaterThanValue != null;
+    }
+
+    /**
+     * Does the value equal the value of greaterThan?
+     * 
+     * @param value The value of greaterThan. (Nullable)
+     * @return Determination. (NotNull)
+     */
+    public boolean equalGreaterThan(Object value) {
+        return hasGreaterThan() ? _greaterThanValue.equals(value)
+                : value == null;
+    }
+
+    /**
+     * Override the value of greaterThan.
+     * 
+     * @param value The value of greaterThan. (Nullable)
+     * @return this. (NotNull)
+     */
+    public ConditionValue overrideGreaterThan(Object value) {
+        _greaterThanValue = value;
+        return this;
+    }
+
+    /** Location of GreaterThan. */
+    protected String _greaterThanLocation;
+
+    /**
+     * Get the location of greaterThan.
+     * 
+     * @return The location of greaterThan. (Nullable)
+     */
+    public String getGreaterThanLocation() {
+        return _greaterThanLocation;
+    }
+
+    /**
+     * Set the location of greaterThan.
+     * 
+     * @param location The location of greaterThan. (Nullable)
+     * @return this. (NotNull)
+     */
+    public ConditionValue setGreaterThanLocation(String location) {
+        _greaterThanLocation = location;
+        return this;
+    }
+
+    // ===================================================================================
+    //                                                                           Less Than
+    //                                                                           =========
+    /** Value of lessThan. */
+    protected Object _lessThanValue;
+
+    /**
+     * Get the value of lessThan.
+     * 
+     * @return The value of lessThan. (Nullable)
+     */
+    public Object getLessThan() {
+        return filterValue(_lessThanValue);
+    }
+
+    /**
+     * Set the value of lessThan.
+     * 
+     * @param value The value of lessThan. (Nullable)
+     * @return this. (NotNull)
+     */
+    public ConditionValue setLessThan(Object value) {
+        _lessThanValue = value;
+        return this;
+    }
+
+    /**
+     * Does it has the value of lessThan?
+     * 
+     * @return Determination. (NotNull)
+     */
+    public boolean hasLessThan() {
+        return _lessThanValue != null;
+    }
+
+    /**
+     * Does the value equal the value of lessThan?
+     * 
+     * @param value The value of lessThan. (Nullable)
+     * @return Determination. (NotNull)
+     */
+    public boolean equalLessThan(Object value) {
+        return hasLessThan() ? _lessThanValue.equals(value) : value == null;
+    }
+
+    /**
+     * Override the value of lessThan.
+     * 
+     * @param value The value of lessThan. (Nullable)
+     * @return this. (NotNull)
+     */
+    public ConditionValue overrideLessThan(Object value) {
+        _lessThanValue = value;
+        return this;
+    }
+
+    /** Location of lessThan. */
+    protected String _lessThanLocation;
+
+    /**
+     * Get the location of lessThan.
+     * 
+     * @return The location of lessThan. (Nullable)
+     */
+    public String getLessThanLocation() {
+        return _lessThanLocation;
+    }
+
+    /**
+     * Set the location of lessThan.
+     * 
+     * @param location The location of lessThan. (Nullable)
+     * @return this. (NotNull)
+     */
+    public ConditionValue setLessThanLocation(String location) {
+        _lessThanLocation = location;
+        return this;
+    }
+
+    // ===================================================================================
+    //                                                                       Greater Equal
+    //                                                                       =============
+    /** Value of greaterEqual. */
+    protected Object _greaterEqualValue;
+
+    /**
+     * Get the value of greaterEqual.
+     * 
+     * @return The value of greaterEqual. (Nullable)
+     */
+    public Object getGreaterEqual() {
+        return filterValue(_greaterEqualValue);
+    }
+
+    /**
+     * Set the value of greaterEqual.
+     * 
+     * @param value The value of greaterEqual. (Nullable)
+     * @return this. (NotNull)
+     */
+    public ConditionValue setGreaterEqual(Object value) {
+        _greaterEqualValue = value;
+        return this;
+    }
+
+    /**
+     * Does it has the value of greaterEqual?
+     * 
+     * @return Determination. (NotNull)
+     */
+    public boolean hasGreaterEqual() {
+        return _greaterEqualValue != null;
+    }
+
+    /**
+     * Does the value equal the value of greaterEqual?
+     * 
+     * @param value The value of greaterEqual. (Nullable)
+     * @return Determination. (NotNull)
+     */
+    public boolean equalGreaterEqual(Object value) {
+        return hasGreaterEqual() ? _greaterEqualValue.equals(value)
+                : value == null;
+    }
+
+    /**
+     * Override the value of greaterEqual.
+     * 
+     * @param value The value of greaterEqual. (Nullable)
+     * @return this. (NotNull)
+     */
+    public ConditionValue overrideGreaterEqual(Object value) {
+        _greaterEqualValue = value;
+        return this;
+    }
+
+    /** Location of greaterEqual. */
+    protected String _greaterEqualLocation;
+
+    /**
+     * Get the location of greaterEqual.
+     * 
+     * @return The location of greaterEqual. (Nullable)
+     */
+    public String getGreaterEqualLocation() {
+        return _greaterEqualLocation;
+    }
+
+    /**
+     * Set the location of greaterEqual.
+     * 
+     * @param location The location of greaterEqual. (Nullable)
+     * @return this. (NotNull)
+     */
+    public ConditionValue setGreaterEqualLocation(String location) {
+        _greaterEqualLocation = location;
+        return this;
+    }
+
+    // ===================================================================================
+    //                                                                          Less Equal
+    //                                                                          ==========
+    /** Value of lessEqual. */
+    protected Object _lessEqualValue;
+
+    /**
+     * Get the value of lessEqual.
+     * 
+     * @return The value of lessEqual. (Nullable)
+     */
+    public Object getLessEqual() {
+        return filterValue(_lessEqualValue);
+    }
+
+    /**
+     * Set the value of lessEqual.
+     * 
+     * @param value The value of lessEqual. (Nullable)
+     * @return this. (NotNull)
+     */
+    public ConditionValue setLessEqual(Object value) {
+        _lessEqualValue = value;
+        return this;
+    }
+
+    /**
+     * Does it has the value of lessEqual?
+     * 
+     * @return Determination. (NotNull)
+     */
+    public boolean hasLessEqual() {
+        return _lessEqualValue != null;
+    }
+
+    /**
+     * Does the value equal the value of lessEqual?
+     * 
+     * @param value The value of lessEqual. (Nullable)
+     * @return Determination. (NotNull)
+     */
+    public boolean equalLessEqual(Object value) {
+        return hasLessEqual() ? _lessEqualValue.equals(value) : value == null;
+    }
+
+    /**
+     * Override the value of lessEqual.
+     * 
+     * @param value The value of lessEqual. (Nullable)
+     * @return this. (NotNull)
+     */
+    public ConditionValue overrideLessEqual(Object value) {
+        _lessEqualValue = value;
+        return this;
+    }
+
+    /** Location of lessEqual. */
+    protected String _lessEqualLocation;
+
+    /**
+     * Get the location of lessEqual.
+     * 
+     * @return The location of lessEqual. (Nullable)
+     */
+    public String getLessEqualLocation() {
+        return _lessEqualLocation;
+    }
+
+    /**
+     * Set the location of lessEqual.
+     * 
+     * @param location The location of lessEqual. (Nullable)
+     * @return this. (NotNull)
+     */
+    public ConditionValue setLessEqualLocation(String location) {
+        _lessEqualLocation = location;
+        return this;
+    }
+
+    // ===================================================================================
+    //                                                                       Prefix Search
+    //                                                                       =============
+    /** Value of prefixSearch. */
+    protected Object _prefixSearch;
+
+    /**
+     * Get the value of prefixSearch.
+     * 
+     * @return The value of prefixSearch. (Nullable)
+     */
+    public Object getPrefixSearch() {
+        return filterValue(_prefixSearch);
+    }
+
+    /**
+     * Set the value of prefixSearch.
+     * 
+     * @param value The value of prefixSearch. (Nullable)
+     * @return this. (NotNull)
+     */
+    public ConditionValue setPrefixSearch(Object value) {
+        _prefixSearch = value;
+        return this;
+    }
+
+    /**
+     * Does it has the value of prefixSearch?
+     * 
+     * @return Determination. (NotNull)
+     */
+    public boolean hasPrefixSearch() {
+        return _prefixSearch != null;
+    }
+
+    /**
+     * Does the value equal the value of prefixSearch?
+     * 
+     * @param value The value of prefixSearch. (Nullable)
+     * @return Determination. (NotNull)
+     */
+    public boolean equalPrefixSearch(Object value) {
+        return hasPrefixSearch() ? _prefixSearch.equals(value) : value == null;
+    }
+
+    /**
+     * Override the value of prefixSearch.
+     * 
+     * @param value The value of prefixSearch. (Nullable)
+     * @return this. (NotNull)
+     */
+    public ConditionValue overridePrefixSearch(Object value) {
+        _prefixSearch = value;
+        return this;
+    }
+
+    /** Location of prefixSearch. */
+    protected String _prefixSearchLocation;
+
+    /**
+     * Get the location of prefixSearch.
+     * 
+     * @return The location of prefixSearch. (Nullable)
+     */
+    public String getPrefixSearchLocation() {
+        return _prefixSearchLocation;
+    }
+
+    /**
+     * Set the location of prefixSearch.
+     * 
+     * @param location The location of prefixSearch. (Nullable)
+     * @return this. (NotNull)
+     */
+    public ConditionValue setPrefixSearchLocation(String location) {
+        _prefixSearchLocation = location;
+        return this;
+    }
+
+    // ===================================================================================
+    //                                                                         Like Search
+    //                                                                         ===========
+    /** Value of likeSearch. */
+    protected java.util.List<LikeSearchValue> _likeSearch;
+
+    /** Value of likeSearch for spare. */
+    protected java.util.List<LikeSearchValue> _likeSearch4Spare;
+
+    /**
+     * Get the value of likeSearch.
+     * 
+     * @return The value of likeSearch. (Nullable)
+     */
+    public String getLikeSearch() {
+        if (_likeSearch == null) {
+            return null;
+        }
+        if (_likeSearch.isEmpty() && !_likeSearch4Spare.isEmpty()) {
+            for (int index = 0; index < _likeSearch4Spare.size(); index++) {
+                _likeSearch.add(_likeSearch4Spare.get(index));
+            }
+        }
+        final LikeSearchValue likeSearchValue = (LikeSearchValue) _likeSearch
+                .remove(0);
+        return (String) filterValue(likeSearchValue.generateRealValue());
+    }
+
+    /**
+     * Set the value of likeSearch.
+     * 
+     * @param value The value of likeSearch. (Nullable)
+     * @param option The option of likeSearch. (Nullable)
+     * @return this. (NotNull)
+     */
+    public ConditionValue setLikeSearch(String value, LikeSearchOption option) {
+        if (_likeSearch == null) {
+            _likeSearch = new java.util.ArrayList<LikeSearchValue>();
+            _likeSearch4Spare = new java.util.ArrayList<LikeSearchValue>();
+        }
+        if (_likeSearch.isEmpty() && !_likeSearch4Spare.isEmpty()) {
+            for (int index = 0; index < _likeSearch4Spare.size(); index++) {
+                _likeSearch.add(_likeSearch4Spare.get(index));
+            }
+        }
+        final LikeSearchValue likeSearchValue = new LikeSearchValue(value,
+                option);
+        _likeSearch.add(likeSearchValue);
+        _likeSearch4Spare.add(likeSearchValue);
+        return this;
+    }
+
+    /** Location of likeSearch. */
+    protected String _likeSearchLocation;
+
+    /**
+     * Get the location of likeSearch.
+     * 
+     * @return The location of likeSearch. (Nullable)
+     */
+    public String getLikeSearchLocation() {
+        return _likeSearchLocation;
+    }
+
+    /**
+     * Set the location of likeSearch.
+     * 
+     * @param location The location of likeSearch. (Nullable)
+     * @return this. (NotNull)
+     */
+    public ConditionValue setLikeSearchLocation(String location) {
+        _likeSearchLocation = location;
+        return this;
+    }
+
+    protected static class LikeSearchValue {
+        protected String _value;
+
+        protected LikeSearchOption _option;
+
+        public LikeSearchValue(String value, LikeSearchOption option) {
+            _value = value;
+            _option = option;
+        }
+
+        public String getValue() {
+            return _value;
+        }
+
+        public LikeSearchOption getOption() {
+            return _option;
+        }
+
+        public String generateRealValue() {
+            if (_option == null) {
+                return _value;
+            }
+            return _option.generateRealValue(_value);
+        }
+    }
+
+    // ===================================================================================
+    //                                                                            In Scope
+    //                                                                            ========
+    /** Value of inScope. */
+    protected List _inScope;
+
+    protected InScopeOption _inScopeOption;
+
+    /**
+     * Get the value of inScope.
+     * 
+     * @return The value of inScope. (Nullable)
+     */
+    public List getInScope() {
+        if (_inScopeOption != null) {
+            return filterValue(_inScopeOption.generateRealValueList(_inScope));
+        }
+        return filterValue(_inScope);
+    }
+
+    /**
+     * Set the value of inScope.
+     * 
+     * @param value The value of inScope. (Nullable)
+     * @return this. (NotNull)
+     */
+    public ConditionValue setInScope(List value) {
+        _inScope = value;
+        return this;
+    }
+
+    public ConditionValue setInScope(List value, InScopeOption option) {
+        _inScope = value;
+        _inScopeOption = option;
+        return this;
+    }
+
+    /**
+     * Does it has the value of inScope?
+     * 
+     * @return Determination. (NotNull)
+     */
+    public boolean hasInScope() {
+        return _inScope != null;
+    }
+
+    /**
+     * Does the value equal the value of inScope?
+     * 
+     * @param value The value of inScope. (Nullable)
+     * @return Determination. (NotNull)
+     */
+    public boolean equalInScope(List value) {
+        return hasInScope() ? _inScope.equals(value) : value == null;
+    }
+
+    /**
+     * Override the value of inScope.
+     * 
+     * @param value The value of inScope. (Nullable)
+     * @return this. (NotNull)
+     */
+    public ConditionValue overrideInScope(List value) {
+        _inScope = value;
+        return this;
+    }
+
+    /** Location of InScope. */
+    protected String _inScopeLocation;
+
+    /**
+     * Get the location of inScope.
+     * 
+     * @return The location of inScope. (Nullable)
+     */
+    public String getInScopeLocation() {
+        return _inScopeLocation;
+    }
+
+    /**
+     * Set the location of inScope.
+     * 
+     * @param location The location of inScope. (Nullable)
+     * @return this. (NotNull)
+     */
+    public ConditionValue setInScopeLocation(String location) {
+        _inScopeLocation = location;
+        return this;
+    }
+
+    // ===================================================================================
+    //                                                                        Not In Scope
+    //                                                                        ============
+    /** Value of notInScope. */
+    protected List _notInScope;
+
+    /**
+     * Get the value of notInScope.
+     * 
+     * @return The value of notInScope. (Nullable)
+     */
+    public List getNotInScope() {
+        return filterValue(_notInScope);
+    }
+
+    /**
+     * Set the value of notInScope.
+     * 
+     * @param value The value of notInScope. (Nullable)
+     * @return this. (NotNull)
+     */
+    public ConditionValue setNotInScope(List value) {
+        _notInScope = value;
+        return this;
+    }
+
+    /**
+     * Does it has the value of inNotScope?
+     * 
+     * @return Determination. (NotNull)
+     */
+    public boolean hasNotInScope() {
+        return _notInScope != null;
+    }
+
+    /**
+     * Does the value equal the value of inNotScope?
+     * 
+     * @param value The value of inNotScope. (Nullable)
+     * @return Determination. (NotNull)
+     */
+    public boolean equalNotInScope(List value) {
+        return hasNotInScope() ? _notInScope.equals(value) : value == null;
+    }
+
+    /**
+     * Override the value of inNotScope.
+     * 
+     * @param value The value of inNotScope. (Nullable)
+     * @return this. (NotNull)
+     */
+    public ConditionValue overrideNotInScope(List value) {
+        _notInScope = value;
+        return this;
+    }
+
+    /** Location of notInScope. */
+    protected String _notInScopeLocation;
+
+    /**
+     * Get the location of notInScope.
+     * 
+     * @return The location of notInScope. (Nullable)
+     */
+    public String getNotInScopeLocation() {
+        return _notInScopeLocation;
+    }
+
+    /**
+     * Set the location of notInScope.
+     * 
+     * @param location The location of notInScope. (Nullable)
+     * @return this. (NotNull)
+     */
+    public ConditionValue setNotInScopeLocation(String location) {
+        _notInScopeLocation = location;
+        return this;
+    }
+
+    // ===================================================================================
+    //                                                                             Is Null
+    //                                                                             =======
+    /** Value of isNull. */
+    protected Object _isNullValue;
+
+    /**
+     * Get the value of isNull.
+     * 
+     * @return The value of isNull. (Nullable)
+     */
+    public Object getIsNull() {
+        return _isNullValue;
+    }
+
+    /**
+     * Set the value of isNull.
+     * 
+     * @param value The value of isNull. (Nullable)
+     * @return this. (NotNull)
+     */
+    public ConditionValue setIsNull(Object value) {
+        _isNullValue = value;
+        return this;
+    }
+
+    /**
+     * Does it has the value of isNull?
+     * 
+     * @return Determination. (NotNull)
+     */
+    public boolean hasIsNull() {
+        return _isNullValue != null;
+    }
+
+    /** Location of isNull. */
+    protected String _isNullLocation;
+
+    /**
+     * Get the location of isNull.
+     * 
+     * @return The location of isNull. (Nullable)
+     */
+    public String getIsNullLocation() {
+        return _isNullLocation;
+    }
+
+    /**
+     * Set the location of isNull.
+     * 
+     * @param location The location of isNull. (Nullable)
+     * @return this. (NotNull)
+     */
+    public ConditionValue setIsNullLocation(String location) {
+        _isNullLocation = location;
+        return this;
+    }
+
+    // ===================================================================================
+    //                                                                         Is Not Null
+    //                                                                         ===========
+    /** Value of isNotNull. */
+    protected Object _isNotNullValue;
+
+    /**
+     * Get the value of isNotNull.
+     * 
+     * @return The value of isNotNull. (Nullable)
+     */
+    public Object getIsNotNull() {
+        return _isNotNullValue;
+    }
+
+    /**
+     * Set the value of isNotNull.
+     * 
+     * @param value The value of isNotNull. (Nullable)
+     * @return this. (NotNull)
+     */
+    public ConditionValue setIsNotNull(Object value) {
+        _isNotNullValue = value;
+        return this;
+    }
+
+    /**
+     * Does it has the value of isNotNull?
+     * 
+     * @return Determination. (NotNull)
+     */
+    public boolean hasIsNotNull() {
+        return _isNotNullValue != null;
+    }
+
+    /** Location of isNotNull. */
+    protected String _isNotNullLocation;
+
+    /**
+     * Get the location of isNotNull.
+     * 
+     * @return The location of isNotNull. (Nullable)
+     */
+    public String getIsNotNullLocation() {
+        return _isNotNullLocation;
+    }
+
+    /**
+     * Set the location of isNotNull.
+     * 
+     * @param location The location of isNotNull. (Nullable)
+     * @return this. (NotNull)
+     */
+    public ConditionValue setIsNotNullLocation(String location) {
+        _isNotNullLocation = location;
+        return this;
+    }
+
+    // =====================================================================================
+    //                                                                                Filter
+    //                                                                                ======
+    /**
+     * Filter value.
+     * If the value is instance of java.util.Date or java.util.Calendar, returns value as java.sql.Date.
+     * 
+     * @param value Value. (Nullable)
+     * @return Filtered value. (Nullable)
+     */
+    protected Object filterValue(Object value) {
+        if (value == null) {
+            return value;
+        }
+        if (value instanceof java.sql.Timestamp) {
+            return value;
+        }
+        if (value instanceof java.util.Date
+                || value instanceof java.util.Calendar) {
+            return SqlDateConversionUtil.toDate(value);
+        } else {
+            return value;
+        }
+    }
+
+    /**
+     * Filter value.
+     * If the value is instance of java.util.Date or java.util.Calendar, returns value as java.sql.Date.
+     * 
+     * @param valueList Value-list. (Nullable)
+     * @return Filtered value-list. (Nullable)
+     */
+    protected java.util.List filterValue(java.util.List valueList) {
+        if (valueList == null || valueList.isEmpty()) {
+            return valueList;
+        }
+        final List<Object> resultList = new java.util.ArrayList<Object>();
+        for (final java.util.Iterator ite = valueList.iterator(); ite.hasNext();) {
+            Object value = ite.next();
+            resultList.add(filterValue(value));
+        }
+        return resultList;
+    }
+
+    protected static class SqlDateConversionUtil {
+
+        private SqlDateConversionUtil() {
+        }
+
+        public static java.sql.Date toDate(Object o) {
+            return toDate(o, null);
+        }
+
+        public static java.sql.Date toDate(Object o, String pattern) {
+            if (o instanceof java.sql.Date) {
+                return (java.sql.Date) o;
+            }
+            java.util.Date date = DateConversionUtil.toDate(o, pattern);
+            if (date != null) {
+                return new java.sql.Date(date.getTime());
+            }
+            return null;
+        }
+    }
+
+    protected static class DateConversionUtil {
+
+        private DateConversionUtil() {
+        }
+
+        public static java.util.Date toDate(Object o) {
+            return toDate(o, null);
+        }
+
+        public static java.util.Date toDate(Object o, String pattern) {
+            if (o == null) {
+                return null;
+            } else if (o instanceof String) {
+                return toDate((String) o, pattern);
+            } else if (o instanceof java.util.Date) {
+                return (java.util.Date) o;
+            } else if (o instanceof java.util.Calendar) {
+                return ((java.util.Calendar) o).getTime();
+            } else {
+                return toDate(o.toString(), pattern);
+            }
+        }
+
+        public static java.util.Date toDate(String s, String pattern) {
+            return toDate(s, pattern, java.util.Locale.getDefault());
+        }
+
+        public static java.util.Date toDate(String s, String pattern,
+                java.util.Locale locale) {
+            java.text.SimpleDateFormat sdf = getDateFormat(s, pattern, locale);
+            try {
+                return sdf.parse(s);
+            } catch (java.text.ParseException ex) {
+                throw new RuntimeException(ex);
+            }
+        }
+
+        public static java.text.SimpleDateFormat getDateFormat(String s,
+                String pattern, java.util.Locale locale) {
+            if (pattern != null) {
+                return new java.text.SimpleDateFormat(pattern);
+            }
+            return getDateFormat(s, locale);
+        }
+
+        public static java.text.SimpleDateFormat getDateFormat(String s,
+                java.util.Locale locale) {
+            String pattern = getPattern(locale);
+            String shortPattern = removeDelimiter(pattern);
+            String delimitor = findDelimiter(s);
+            if (delimitor == null) {
+                if (s.length() == shortPattern.length()) {
+                    return new java.text.SimpleDateFormat(shortPattern);
+                }
+                if (s.length() == shortPattern.length() + 2) {
+                    return new java.text.SimpleDateFormat(InternalStringUtil
+                            .replace(shortPattern, "yy", "yyyy"));
+                }
+            } else {
+                String[] array = InternalStringUtil.split(s, delimitor);
+                for (int i = 0; i < array.length; ++i) {
+                    if (array[i].length() == 4) {
+                        pattern = InternalStringUtil.replace(pattern, "yy",
+                                "yyyy");
+                        break;
+                    }
+                }
+                return new java.text.SimpleDateFormat(pattern);
+            }
+            return new java.text.SimpleDateFormat();
+        }
+
+        public static java.text.SimpleDateFormat getDateFormat(
+                java.util.Locale locale) {
+            return new java.text.SimpleDateFormat(getPattern(locale));
+        }
+
+        public static java.text.SimpleDateFormat getY4DateFormat(
+                java.util.Locale locale) {
+            return new java.text.SimpleDateFormat(getY4Pattern(locale));
+        }
+
+        public static String getY4Pattern(java.util.Locale locale) {
+            String pattern = getPattern(locale);
+            if (pattern.indexOf("yyyy") < 0) {
+                pattern = InternalStringUtil.replace(pattern, "yy", "yyyy");
+            }
+            return pattern;
+        }
+
+        public static String getPattern(java.util.Locale locale) {
+            java.text.SimpleDateFormat df = (java.text.SimpleDateFormat) java.text.DateFormat
+                    .getDateInstance(java.text.DateFormat.SHORT, locale);
+            String pattern = df.toPattern();
+            int index = pattern.indexOf(' ');
+            if (index > 0) {
+                pattern = pattern.substring(0, index);
+            }
+            if (pattern.indexOf("MM") < 0) {
+                pattern = InternalStringUtil.replace(pattern, "M", "MM");
+            }
+            if (pattern.indexOf("dd") < 0) {
+                pattern = InternalStringUtil.replace(pattern, "d", "dd");
+            }
+            return pattern;
+        }
+
+        public static String findDelimiter(String value) {
+            for (int i = 0; i < value.length(); ++i) {
+                char c = value.charAt(i);
+                if (Character.isDigit(c)) {
+                    continue;
+                }
+                return Character.toString(c);
+            }
+            return null;
+        }
+
+        public static String removeDelimiter(String pattern) {
+            StringBuffer buf = new StringBuffer();
+            for (int i = 0; i < pattern.length(); ++i) {
+                char c = pattern.charAt(i);
+                if (c == 'y' || c == 'M' || c == 'd') {
+                    buf.append(c);
+                }
+            }
+            return buf.toString();
+        }
+    }
+
+    protected static class InternalStringUtil {
+
+        public static final String[] EMPTY_STRINGS = new String[0];
+
+        private InternalStringUtil() {
+        }
+
+        public static final boolean isEmpty(String text) {
+            return text == null || text.length() == 0;
+        }
+
+        public static final String replace(String text, String fromText,
+                String toText) {
+
+            if (text == null || fromText == null || toText == null) {
+                return null;
+            }
+            StringBuffer buf = new StringBuffer(100);
+            int pos = 0;
+            int pos2 = 0;
+            while (true) {
+                pos = text.indexOf(fromText, pos2);
+                if (pos == 0) {
+                    buf.append(toText);
+                    pos2 = fromText.length();
+                } else if (pos > 0) {
+                    buf.append(text.substring(pos2, pos));
+                    buf.append(toText);
+                    pos2 = pos + fromText.length();
+                } else {
+                    buf.append(text.substring(pos2));
+                    break;
+                }
+            }
+            return buf.toString();
+        }
+
+        public static String[] split(String str, String delim) {
+            if (str == null) {
+                return EMPTY_STRINGS;
+            }
+            java.util.List<String> list = new java.util.ArrayList<String>();
+            java.util.StringTokenizer st = new java.util.StringTokenizer(str,
+                    delim);
+            while (st.hasMoreElements()) {
+                list.add(st.nextToken());
+            }
+            return (String[]) list.toArray(new String[list.size()]);
+        }
+    }
+}


Property changes on: announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/cbean/cvalue/ConditionValue.java
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/cbean/grouping/GroupingOption.java
===================================================================
--- announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/cbean/grouping/GroupingOption.java	                        (rev 0)
+++ announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/cbean/grouping/GroupingOption.java	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,44 @@
+package jp.sf.pal.announcement.db.allcommon.cbean.grouping;
+
+/**
+ * The class of option for grouping making.
+ * 
+ * @param <ENTITY> The type of entity.
+ * @author DBFlute(AutoGenerator)
+ */
+public class GroupingOption<ENTITY> {
+
+    // =====================================================================================
+    //                                                                             Attribute
+    //                                                                             =========
+    protected int _columnCount;
+
+    protected GroupingRowEndDeterminer<ENTITY> _groupingRowEndDeterminer;
+
+    // =====================================================================================
+    //                                                                           Constructor
+    //                                                                           ===========
+    public GroupingOption(int columnCount) {
+        _columnCount = columnCount;
+    }
+
+    // =====================================================================================
+    //                                                                           Easy-to-Use
+    //                                                                           ===========
+
+    // =====================================================================================
+    //                                                                              Accessor
+    //                                                                              ========
+    public int getColumnCount() {
+        return this._columnCount;
+    }
+
+    public GroupingRowEndDeterminer<ENTITY> getGroupingRowEndDeterminer() {
+        return this._groupingRowEndDeterminer;
+    }
+
+    public void setGroupingRowEndDeterminer(
+            GroupingRowEndDeterminer<ENTITY> groupingRowEndDeterminer) {
+        this._groupingRowEndDeterminer = groupingRowEndDeterminer;
+    }
+}


Property changes on: announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/cbean/grouping/GroupingOption.java
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/cbean/grouping/GroupingRowEndDeterminer.java
===================================================================
--- announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/cbean/grouping/GroupingRowEndDeterminer.java	                        (rev 0)
+++ announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/cbean/grouping/GroupingRowEndDeterminer.java	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,13 @@
+package jp.sf.pal.announcement.db.allcommon.cbean.grouping;
+
+/**
+ * The interface of grouping switch point determiner.
+ * 
+ * @param <ENTITY> The type of entity.
+ * @author DBFlute(AutoGenerator)
+ */
+public interface GroupingRowEndDeterminer<ENTITY> {
+
+    public boolean determine(int columnIndex, int columnCount,
+            GroupingRowResource<ENTITY> rowResource, ENTITY nextEntity);
+}


Property changes on: announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/cbean/grouping/GroupingRowEndDeterminer.java
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/cbean/grouping/GroupingRowResource.java
===================================================================
--- announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/cbean/grouping/GroupingRowResource.java	                        (rev 0)
+++ announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/cbean/grouping/GroupingRowResource.java	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,30 @@
+package jp.sf.pal.announcement.db.allcommon.cbean.grouping;
+
+/**
+ * The class of row resource for grouping making.
+ * 
+ * @param <ENTITY> The type of entity.
+ * @author DBFlute(AutoGenerator)
+ */
+public class GroupingRowResource<ENTITY> {
+
+    // =====================================================================================
+    //                                                                             Attribute
+    //                                                                             =========
+    protected java.util.List<ENTITY> _groupingRowList = new java.util.ArrayList<ENTITY>();
+
+    // =====================================================================================
+    //                                                                           Easy-to-Use
+    //                                                                           ===========
+
+    // =====================================================================================
+    //                                                                              Accessor
+    //                                                                              ========
+    public java.util.List<ENTITY> getGroupingRowList() {
+        return this._groupingRowList;
+    }
+
+    public void addGroupingRowList(ENTITY groupingRow) {
+        this._groupingRowList.add(groupingRow);
+    }
+}


Property changes on: announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/cbean/grouping/GroupingRowResource.java
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/cbean/grouping/GroupingRowSetupper.java
===================================================================
--- announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/cbean/grouping/GroupingRowSetupper.java	                        (rev 0)
+++ announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/cbean/grouping/GroupingRowSetupper.java	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,19 @@
+package jp.sf.pal.announcement.db.allcommon.cbean.grouping;
+
+/**
+ * The interface of grouping row setupper.
+ * 
+ * @param <ROW> The type of row.
+ * @param <ENTITY> The type of entity.
+ * @author DBFlute(AutoGenerator)
+ */
+public interface GroupingRowSetupper<ROW, ENTITY> {
+
+    /**
+     * Set up grouping row object.
+     * 
+     * @param groupingRowResource Grouping row resource. (NotNull)
+     * @return Grouping row object. (NotNull)
+     */
+    public ROW setup(GroupingRowResource<ENTITY> groupingRowResource);
+}


Property changes on: announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/cbean/grouping/GroupingRowSetupper.java
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/cbean/mapping/EntityDtoMapper.java
===================================================================
--- announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/cbean/mapping/EntityDtoMapper.java	                        (rev 0)
+++ announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/cbean/mapping/EntityDtoMapper.java	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,17 @@
+package jp.sf.pal.announcement.db.allcommon.cbean.mapping;
+
+/**
+ * The mapper of entity-to-dto.
+ * @param <ENTITY> The type of entity.
+ * @param <DTO> The type of dto.
+ * @author DBFlute(AutoGenerator)
+ */
+public interface EntityDtoMapper<ENTITY, DTO> {
+
+    /**
+     * Map entity to data transfer object.
+     * @param entity Entity. (NotNull)
+     * @return Data transfer object. (NotNull)
+     */
+    public DTO map(ENTITY entity);
+}


Property changes on: announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/cbean/mapping/EntityDtoMapper.java
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/cbean/outsidesql/OutsideSqlContext.java
===================================================================
--- announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/cbean/outsidesql/OutsideSqlContext.java	                        (rev 0)
+++ announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/cbean/outsidesql/OutsideSqlContext.java	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,328 @@
+package jp.sf.pal.announcement.db.allcommon.cbean.outsidesql;
+
+import jp.sf.pal.announcement.db.allcommon.jdbc.StatementConfig;
+import jp.sf.pal.announcement.db.allcommon.util.SimpleStringUtil;
+import jp.sf.pal.announcement.db.allcommon.util.SimpleSystemUtil;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.seasar.framework.util.InputStreamReaderUtil;
+import org.seasar.framework.util.ReaderUtil;
+import org.seasar.framework.util.ResourceUtil;
+
+/**
+ * The context of outside-sql.
+ * @author DBFlute(AutoGenerator)
+ */
+public class OutsideSqlContext {
+
+    /** Log-instance. */
+    private static final Log _log = LogFactory.getLog(OutsideSqlContext.class);
+
+    // ===================================================================================
+    //                                                                        Thread Local
+    //                                                                        ============
+    /** The thread-local for this. */
+    private static final ThreadLocal<OutsideSqlContext> _threadLocal = new ThreadLocal<OutsideSqlContext>();
+
+    /**
+     * Get outside-sql context on thread.
+     * 
+     * @return Outside-sql context. (Nullable)
+     */
+    public static OutsideSqlContext getOutsideSqlContextOnThread() {
+        return (OutsideSqlContext) _threadLocal.get();
+    }
+
+    /**
+     * Set outside-sql context on thread.
+     * 
+     * @param outsideSqlContext Outside-sql context. (NotNull)
+     */
+    public static void setOutsideSqlContextOnThread(
+            OutsideSqlContext outsideSqlContext) {
+        if (outsideSqlContext == null) {
+            String msg = "The argument[outsideSqlContext] must not be null.";
+            throw new IllegalArgumentException(msg);
+        }
+        _threadLocal.set(outsideSqlContext);
+    }
+
+    /**
+     * Is existing outside-sql context on thread?
+     * 
+     * @return Determination.
+     */
+    public static boolean isExistOutsideSqlContextOnThread() {
+        return (_threadLocal.get() != null);
+    }
+
+    /**
+     * Clear outside-sql context on thread.
+     */
+    public static void clearOutsideSqlContextOnThread() {
+        _threadLocal.set(null);
+    }
+
+    // ===================================================================================
+    //                                                                          Unique Key
+    //                                                                          ==========
+    public static String generateSpecifiedOutsideSqlUniqueKey(
+            String methodName, String path, Object pmb,
+            OutsideSqlOption option, Object resultTypeSpecification) {
+        final String pmbKey = (pmb != null ? pmb.getClass().getName() : "null");
+        final String resultKey = (resultTypeSpecification != null ? ":"
+                + resultTypeSpecification : "null");
+        return methodName + "():" + path + ":" + pmbKey + ":"
+                + option.generateUniqueKey() + resultKey;
+    }
+
+    // ===================================================================================
+    //                                                                  Exception Handling
+    //                                                                  ==================
+    public static void throwOutsideSqlNotFoundException(String path) {
+        String msg = "Look! Read the message below." + getLineSeparator();
+        msg = msg
+                + "/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *"
+                + getLineSeparator();
+        msg = msg + "The outsideSql was Not Found!" + getLineSeparator();
+        msg = msg + getLineSeparator();
+        msg = msg + "[Advice]" + getLineSeparator();
+        msg = msg
+                + "Please confirm the existence of your target file of outsideSql on your classpath."
+                + getLineSeparator();
+        msg = msg
+                + "And please confirm the file name and the file path STRICTLY!"
+                + getLineSeparator();
+        msg = msg + getLineSeparator();
+        msg = msg + "[Specified OutsideSql Path]" + getLineSeparator() + path
+                + getLineSeparator();
+        msg = msg + "* * * * * * * * * */" + getLineSeparator();
+        throw new jp.sf.pal.announcement.db.allcommon.exception.OutsideSqlNotFoundException(
+                msg);
+    }
+
+    // ===================================================================================
+    //                                                                           Attribute
+    //                                                                           =========
+    // -----------------------------------------------------
+    //                                  Common of OutsideSql
+    //                                  --------------------
+    protected boolean _dynamicBinding;
+
+    protected boolean _offsetByCursorForcedly;
+
+    protected boolean _limitByCursorForcedly;
+
+    // -----------------------------------------------------
+    //                                  Specified OutsideSql
+    //                                  --------------------
+    /** The path of outside-sql. (The mark of Specified-OutsideSql) */
+    protected String _outsideSqlPath;
+
+    protected Object _parameterBean;
+
+    protected Object _resultTypeSpecification;
+
+    protected String _methodName;
+
+    /** The config of statement. (Nullable) */
+    protected StatementConfig _statementConfig;
+
+    // ===================================================================================
+    //                                                                            Read SQL
+    //                                                                            ========
+    public String readFilteredOutsideSql(String sqlFileEncoding,
+            String dbmsSuffix) {
+        final String sql = readOutsideSql(sqlFileEncoding, dbmsSuffix);
+        return replaceOutsideSqlBindCharacterOnLineComment(sql);
+    }
+
+    protected String replaceOutsideSqlBindCharacterOnLineComment(String sql) {
+        final String bindCharacter = "?";
+        if (sql.indexOf(bindCharacter) < 0) {
+            return sql;
+        }
+        final String lineSeparator = "\n";
+        if (sql.indexOf(lineSeparator) < 0) {
+            return sql;
+        }
+        final String lineCommentMark = "--";
+        if (sql.indexOf(lineCommentMark) < 0) {
+            return sql;
+        }
+        final StringBuilder sb = new StringBuilder();
+        final String[] lines = sql.split(lineSeparator);
+        for (String line : lines) {
+            final int lineCommentIndex = line.indexOf("--");
+            if (lineCommentIndex < 0) {
+                sb.append(line).append(lineSeparator);
+                continue;
+            }
+            final String lineComment = line.substring(lineCommentIndex);
+            if (lineComment.contains("ELSE")
+                    || !lineComment.contains(bindCharacter)) {
+                sb.append(line).append(lineSeparator);
+                continue;
+            }
+
+            if (_log.isDebugEnabled()) {
+                _log.debug("...Replacing bind character on line comment: "
+                        + lineComment);
+            }
+            final String filteredLineComment = replaceString(lineComment,
+                    bindCharacter, "Q");
+            sb.append(line.substring(0, lineCommentIndex)).append(
+                    filteredLineComment).append(lineSeparator);
+        }
+        return sb.toString();
+    }
+
+    /**
+     * Read outside-sql path. Required attribute is 'outsideSqlPath'.
+     * @param sqlFileEncoding The encoding of SQL file. (NotNull)
+     * @param dbmsSuffix The suffix of DBMS. (NotNull)
+     * @return The text of SQL. (NotNull)
+     * @exception jp.sf.pal.announcement.db.allcommon.exception.OutsideSqlNotFoundException When the SQL is not found.
+     */
+    public String readOutsideSql(String sqlFileEncoding, String dbmsSuffix) {
+        final String standardPath = _outsideSqlPath;
+        final String dbmsPath = buildDbmsPath(standardPath, dbmsSuffix);
+        String sql;
+        if (isExistResource(dbmsPath)) {
+            sql = readText(dbmsPath, sqlFileEncoding);
+        } else if (isExistResource(standardPath)) {
+            sql = readText(standardPath, sqlFileEncoding);
+        } else {
+            throwOutsideSqlNotFoundException(standardPath);
+            return null; // Non Reachable.
+        }
+        return removeInitialUnicodeBomIfNeeds(sqlFileEncoding, sql);
+    }
+
+    protected String buildDbmsPath(String standardPath, String dbmsSuffix) {
+        final String dbmsPath;
+        final int lastIndexOfDot = standardPath.lastIndexOf(".");
+        if (lastIndexOfDot >= 0
+                && !standardPath.substring(lastIndexOfDot).contains("/")) {
+            final String base = standardPath.substring(0, lastIndexOfDot);
+            dbmsPath = base + dbmsSuffix
+                    + standardPath.substring(lastIndexOfDot);
+        } else {
+            dbmsPath = standardPath + dbmsSuffix;
+        }
+        return dbmsPath;
+    }
+
+    protected String removeInitialUnicodeBomIfNeeds(String sqlFileEncoding,
+            String sql) {
+        if ("UTF-8".equalsIgnoreCase(sqlFileEncoding) && sql.length() > 0
+                && sql.charAt(0) == '\uFEFF') {
+            sql = sql.substring(1);
+        }
+        return sql;
+    }
+
+    // ===================================================================================
+    //                                                                       Determination
+    //                                                                       =============
+    public boolean isSpecifiedOutsideSql() {
+        return _outsideSqlPath != null;
+    }
+
+    // ===================================================================================
+    //                                                                      General Helper
+    //                                                                      ==============
+    protected boolean isExistResource(String path) {
+        return ResourceUtil.isExist(path);
+    }
+
+    protected String readText(final String path, String sqlFileEncoding) {
+        final java.io.InputStream is = ResourceUtil.getResourceAsStream(path);
+        final java.io.Reader reader = InputStreamReaderUtil.create(is,
+                sqlFileEncoding);
+        return ReaderUtil.readText(reader);
+    }
+
+    protected static String replaceString(String text, String fromText,
+            String toText) {
+        return SimpleStringUtil.replace(text, fromText, toText);
+    }
+
+    protected static String getLineSeparator() {
+        return SimpleSystemUtil.getLineSeparator();
+    }
+
+    // ===================================================================================
+    //                                                                            Accessor
+    //                                                                            ========
+    // -----------------------------------------------------
+    //                                  Common of OutsideSql
+    //                                  --------------------
+    public boolean isDynamicBinding() {
+        return _dynamicBinding;
+    }
+
+    public void setDynamicBinding(boolean dynamicBinding) {
+        this._dynamicBinding = dynamicBinding;
+    }
+
+    public boolean isOffsetByCursorForcedly() {
+        return _offsetByCursorForcedly;
+    }
+
+    public void setOffsetByCursorForcedly(boolean offsetByCursorForcedly) {
+        this._offsetByCursorForcedly = offsetByCursorForcedly;
+    }
+
+    public boolean isLimitByCursorForcedly() {
+        return _limitByCursorForcedly;
+    }
+
+    public void setLimitByCursorForcedly(boolean limitByCursorForcedly) {
+        this._limitByCursorForcedly = limitByCursorForcedly;
+    }
+
+    // -----------------------------------------------------
+    //                                  Specified OutsideSql
+    //                                  --------------------
+    public String getOutsideSqlPath() {
+        return _outsideSqlPath;
+    }
+
+    public void setOutsideSqlPath(String outsideSqlPath) {
+        this._outsideSqlPath = outsideSqlPath;
+    }
+
+    public Object getParameterBean() {
+        return _parameterBean;
+    }
+
+    public void setParameterBean(Object parameterBean) {
+        this._parameterBean = parameterBean;
+    }
+
+    public Object getResultTypeSpecification() {
+        return _resultTypeSpecification;
+    }
+
+    public void setResultTypeSpecification(Object resultTypeSpecification) {
+        this._resultTypeSpecification = resultTypeSpecification;
+    }
+
+    public String getMethodName() {
+        return _methodName;
+    }
+
+    public void setMethodName(String methodName) {
+        this._methodName = methodName;
+    }
+
+    public StatementConfig getStatementConfig() {
+        return _statementConfig;
+    }
+
+    public void setStatementConfig(StatementConfig statementConfig) {
+        this._statementConfig = statementConfig;
+    }
+}


Property changes on: announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/cbean/outsidesql/OutsideSqlContext.java
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/cbean/outsidesql/OutsideSqlDao.java
===================================================================
--- announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/cbean/outsidesql/OutsideSqlDao.java	                        (rev 0)
+++ announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/cbean/outsidesql/OutsideSqlDao.java	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,29 @@
+package jp.sf.pal.announcement.db.allcommon.cbean.outsidesql;
+
+import java.util.List;
+
+import jp.sf.pal.announcement.db.allcommon.DaoReadable;
+import jp.sf.pal.announcement.db.allcommon.jdbc.CursorHandler;
+
+/**
+ * The dao of outside-sql.
+ * @author DBFlute(AutoGenerator)
+ */
+public interface OutsideSqlDao extends DaoReadable {
+
+    // ===================================================================================
+    //                                                                              Select
+    //                                                                              ======
+    <ENTITY> List<ENTITY> selectList(String path, Object pmb,
+            OutsideSqlOption option, Class<ENTITY> entityType);
+
+    <ENTITY> Object selectCursor(String path, Object pmb,
+            OutsideSqlOption option, CursorHandler handler);
+
+    // ===================================================================================
+    //                                                                             Execute
+    //                                                                             =======
+    int execute(String path, Object pmb, OutsideSqlOption option);
+
+    // int[] batchExecute(String path, List<Object> pmb, OutsideSqlOption option);
+}


Property changes on: announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/cbean/outsidesql/OutsideSqlDao.java
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/cbean/outsidesql/OutsideSqlOption.java
===================================================================
--- announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/cbean/outsidesql/OutsideSqlOption.java	                        (rev 0)
+++ announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/cbean/outsidesql/OutsideSqlOption.java	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,86 @@
+package jp.sf.pal.announcement.db.allcommon.cbean.outsidesql;
+
+import jp.sf.pal.announcement.db.allcommon.jdbc.StatementConfig;
+
+/**
+ * The option of outside-sql.
+ * 
+ * @author DBFlute(AutoGenerator)
+ */
+public class OutsideSqlOption {
+
+    // ===================================================================================
+    //                                                                           Attribute
+    //                                                                           =========
+    protected String _pagingRequestType = "non";
+
+    protected boolean _dynamicBinding;
+
+    /** The config of statement. (Nullable) */
+    protected StatementConfig _statementConfig;
+
+    // ===================================================================================
+    //                                                                         Easy-to-Use
+    //                                                                         ===========
+    public void autoPaging() {
+        _pagingRequestType = "auto";
+    }
+
+    public void manualPaging() {
+        _pagingRequestType = "manual";
+    }
+
+    public void dynamicBinding() {
+        _dynamicBinding = true;
+    }
+
+    // ===================================================================================
+    //                                                                          Unique Key
+    //                                                                          ==========
+    public String generateUniqueKey() {
+        return "{" + _pagingRequestType + "/" + _dynamicBinding + "}";
+    }
+
+    // ===================================================================================
+    //                                                                                Copy
+    //                                                                                ====
+    public OutsideSqlOption copyOptionWithoutPaging() {
+        final OutsideSqlOption copyOption = new OutsideSqlOption();
+        if (isDynamicBinding()) {
+            copyOption.dynamicBinding();
+        }
+        return copyOption;
+    }
+
+    // ===================================================================================
+    //                                                                      Basic Override
+    //                                                                      ==============
+    @Override
+    public String toString() {
+        return "{paging=" + _pagingRequestType + ", dynamic=" + _dynamicBinding
+                + "}";
+    }
+
+    // ===================================================================================
+    //                                                                            Accessor
+    //                                                                            ========
+    public boolean isAutoPaging() {
+        return "auto".equals(_pagingRequestType);
+    }
+
+    public boolean isManualPaging() {
+        return "manual".equals(_pagingRequestType);
+    }
+
+    public boolean isDynamicBinding() {
+        return _dynamicBinding;
+    }
+
+    public StatementConfig getStatementConfig() {
+        return _statementConfig;
+    }
+
+    public void setStatementConfig(StatementConfig statementConfig) {
+        this._statementConfig = statementConfig;
+    }
+}


Property changes on: announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/cbean/outsidesql/OutsideSqlOption.java
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/cbean/outsidesql/executor/OutsideSqlBasicExecutor.java
===================================================================
--- announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/cbean/outsidesql/executor/OutsideSqlBasicExecutor.java	                        (rev 0)
+++ announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/cbean/outsidesql/executor/OutsideSqlBasicExecutor.java	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,201 @@
+package jp.sf.pal.announcement.db.allcommon.cbean.outsidesql.executor;
+
+import java.util.List;
+
+import jp.sf.pal.announcement.db.allcommon.cbean.outsidesql.OutsideSqlDao;
+import jp.sf.pal.announcement.db.allcommon.cbean.outsidesql.OutsideSqlOption;
+import jp.sf.pal.announcement.db.allcommon.jdbc.StatementConfig;
+
+/**
+ * The executor of outside-sql. <br />
+ * <pre>
+ * {Basic}
+ *   o selectList()
+ * 
+ * {Entity}
+ *   o entityHandling().selectEntity()
+ *   o entityHandling().selectEntityWithDeletedCheck()
+ * 
+ * {Cursor}
+ *   o cursorHandling().selectCursor()
+ * 
+ * {Paging}
+ *   o autoPaging().selectList()
+ *   o autoPaging().selectPage()
+ *   o manualPaging().selectList()
+ *   o manualPaging().selectPage()
+ * 
+ * {Option -- Dynamic}
+ *   o dynamicBinding().selectList()
+ * 
+ * </pre>
+ * 
+ * @author DBFlute(AutoGenerator)
+ */
+public class OutsideSqlBasicExecutor {
+
+    // ===================================================================================
+    //                                                                           Attribute
+    //                                                                           =========
+    /** The dao of outsideSql. (NotNull) */
+    protected final OutsideSqlDao _outsideSqlDao;
+
+    /** Table db name. (NotNull) */
+    protected final String _tableDbName;
+
+    /** Is it dynamic binding? */
+    protected boolean _dynamicBinding;
+
+    /** The config of statement. (Nullable) */
+    protected StatementConfig _statementConfig;
+
+    // ===================================================================================
+    //                                                                         Constructor
+    //                                                                         ===========
+    public OutsideSqlBasicExecutor(OutsideSqlDao outsideSqlDao,
+            String tableDbName) {
+        this._outsideSqlDao = outsideSqlDao;
+        this._tableDbName = tableDbName;
+    }
+
+    // ===================================================================================
+    //                                                                              Select
+    //                                                                              ======
+    /**
+     * Select list.
+     * 
+     * @param <ENTITY> The type of entity for element.
+     * @param path The path of SQL file. (NotNull)
+     * @param pmb The parameter-bean. Allowed types are Bean object and Map object. (Nullable)
+     * @param entityType The element type of entity. (NotNull)
+     * @return The list of selected entity. (NotNull)
+     * @exception jp.sf.pal.announcement.db.allcommon.exception.OutsideSqlNotFoundException When the sql is not found.
+     */
+    public <ENTITY> List<ENTITY> selectList(String path, Object pmb,
+            Class<ENTITY> entityType) {
+        return _outsideSqlDao.selectList(path, pmb, createOutsideSqlOption(),
+                entityType);
+    }
+
+    // ===================================================================================
+    //                                                                             Execute
+    //                                                                             =======
+    /**
+     * Execute. {Insert/Update/Delete/Etc...}
+     * 
+     * @param path The path of SQL file. (NotNull)
+     * @param pmb The parameter-bean. Allowed types are Bean object and Map object. (Nullable)
+     * @return The count of execution.
+     * @exception jp.sf.pal.announcement.db.allcommon.exception.OutsideSqlNotFoundException When the sql is not found.
+     */
+    public int execute(String path, Object pmb) {
+        return _outsideSqlDao.execute(path, pmb, createOutsideSqlOption());
+    }
+
+    // Implements at the future!
+    //    public int batchExecute(String path, Object pmb) {
+    //        throw new UnsupportedOperationException("Sorry! The method of batchExecute() has not been implemented yet.");
+    //        // return _outsideSqlDao.batchExecute(path, pmb, createOutsideSqlOption());
+    //    }
+
+    // ===================================================================================
+    //                                                                              Option
+    //                                                                              ======
+    /**
+     * Specify cursor handling. <br />
+     * <pre>
+     * # ex) Your Program
+     * #
+     * # executor.cursorHandling().selectCursor(path, pmb, handler);
+     * #
+     * </pre>
+     * @return The cursor executor of outside-sql. (NotNull)
+     */
+    public OutsideSqlCursorExecutor<Object> cursorHandling() {
+        return new OutsideSqlCursorExecutor<Object>(_outsideSqlDao,
+                createOutsideSqlOption());
+    }
+
+    /**
+     * Specify entity handling. <br />
+     * <pre>
+     * # ex) Your Program
+     * #
+     * # executor.entityHandling().selectEntityWithDeletedCheck(path, pmb, Xxx.class);
+     * #
+     * </pre>
+     * @return The cursor executor of outside-sql. (NotNull)
+     */
+    public OutsideSqlEntityExecutor<Object> entityHandling() {
+        return new OutsideSqlEntityExecutor<Object>(_outsideSqlDao,
+                createOutsideSqlOption());
+    }
+
+    /**
+     * Option of autoPaging. <br />
+     * If you invoke this, you don't need to write paging condition on your SQL. <br />
+     * <pre>
+     * # ex) Your SQL {MySQL}
+     * #
+     * # select member.MEMBER_ID, member...
+     * #   from Member member
+     * #  where ...
+     * #  order by ...
+     * # -- limit 40, 20        *Here is unnecessary!
+     * #
+     * </pre>
+     * 
+     * @return The executor of paging that the paging mode is auto. (NotNull)
+     */
+    public OutsideSqlPagingExecutor autoPaging() {
+        final OutsideSqlOption option = createOutsideSqlOption();
+        option.autoPaging();
+        return new OutsideSqlPagingExecutor(_outsideSqlDao, option,
+                _tableDbName);
+    }
+
+    /**
+     * Option of manualPaging. <br />
+     * If you invoke this, you need to write paging condition on your SQL. <br />
+     * <pre>
+     * # ex) Your SQL {MySQL}
+     * #
+     * # select member.MEMBER_ID, member...
+     * #   from Member member
+     * #  where ...
+     * #  order by ...
+     * #  limit 40, 20        *Here is necessary!
+     * #
+     * </pre>
+     * 
+     * @return The executor of paging that the paging mode is manual. (NotNull)
+     */
+    public OutsideSqlPagingExecutor manualPaging() {
+        final OutsideSqlOption option = createOutsideSqlOption();
+        option.manualPaging();
+        return new OutsideSqlPagingExecutor(_outsideSqlDao, option,
+                _tableDbName);
+    }
+
+    public OutsideSqlBasicExecutor configure(StatementConfig statementConfig) {
+        _statementConfig = statementConfig;
+        return this;
+    }
+
+    public OutsideSqlBasicExecutor dynamicBinding() {
+        _dynamicBinding = true;
+        return this;
+    }
+
+    // -----------------------------------------------------
+    //                                                Helper
+    //                                                ------
+    protected OutsideSqlOption createOutsideSqlOption() {
+        final OutsideSqlOption option = new OutsideSqlOption();
+        option.setStatementConfig(_statementConfig);
+        if (_dynamicBinding) {
+            option.dynamicBinding();
+        }
+        return option;
+    }
+}


Property changes on: announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/cbean/outsidesql/executor/OutsideSqlBasicExecutor.java
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/cbean/outsidesql/executor/OutsideSqlCursorExecutor.java
===================================================================
--- announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/cbean/outsidesql/executor/OutsideSqlCursorExecutor.java	                        (rev 0)
+++ announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/cbean/outsidesql/executor/OutsideSqlCursorExecutor.java	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,54 @@
+package jp.sf.pal.announcement.db.allcommon.cbean.outsidesql.executor;
+
+import jp.sf.pal.announcement.db.allcommon.cbean.outsidesql.OutsideSqlDao;
+import jp.sf.pal.announcement.db.allcommon.cbean.outsidesql.OutsideSqlOption;
+import jp.sf.pal.announcement.db.allcommon.jdbc.CursorHandler;
+import jp.sf.pal.announcement.db.allcommon.jdbc.StatementConfig;
+
+/**
+ * The cursor executor of outside-sql.
+ * 
+ * @param <PARAMETER_BEAN> The type of parameter-bean.
+ * @author DBFlute(AutoGenerator)
+ */
+public class OutsideSqlCursorExecutor<PARAMETER_BEAN> {
+
+    // ===================================================================================
+    //                                                                           Attribute
+    //                                                                           =========
+    protected final OutsideSqlDao _outsideSqlDao;
+
+    protected final OutsideSqlOption _outsideSqlOption;
+
+    // ===================================================================================
+    //                                                                         Constructor
+    //                                                                         ===========
+    public OutsideSqlCursorExecutor(OutsideSqlDao outsideSqlDao,
+            OutsideSqlOption outsideSqlOption) {
+        this._outsideSqlDao = outsideSqlDao;
+        this._outsideSqlOption = outsideSqlOption;
+    }
+
+    // ===================================================================================
+    //                                                                              Select
+    //                                                                              ======
+    public Object selectCursor(String path, PARAMETER_BEAN pmb,
+            CursorHandler handler) {
+        return _outsideSqlDao.selectCursor(path, pmb, _outsideSqlOption,
+                handler);
+    }
+
+    // ===================================================================================
+    //                                                                              Option
+    //                                                                              ======
+    public OutsideSqlCursorExecutor<PARAMETER_BEAN> configure(
+            StatementConfig statementConfig) {
+        _outsideSqlOption.setStatementConfig(statementConfig);
+        return this;
+    }
+
+    public OutsideSqlCursorExecutor<PARAMETER_BEAN> dynamicBinding() {
+        _outsideSqlOption.dynamicBinding();
+        return this;
+    }
+}


Property changes on: announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/cbean/outsidesql/executor/OutsideSqlCursorExecutor.java
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/cbean/outsidesql/executor/OutsideSqlEntityExecutor.java
===================================================================
--- announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/cbean/outsidesql/executor/OutsideSqlEntityExecutor.java	                        (rev 0)
+++ announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/cbean/outsidesql/executor/OutsideSqlEntityExecutor.java	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,118 @@
+package jp.sf.pal.announcement.db.allcommon.cbean.outsidesql.executor;
+
+import java.util.List;
+
+import jp.sf.pal.announcement.db.allcommon.cbean.ConditionBeanContext;
+import jp.sf.pal.announcement.db.allcommon.cbean.outsidesql.OutsideSqlDao;
+import jp.sf.pal.announcement.db.allcommon.cbean.outsidesql.OutsideSqlOption;
+import jp.sf.pal.announcement.db.allcommon.jdbc.StatementConfig;
+
+/**
+ * The cursor executor of outside-sql.
+ * 
+ * @param <PARAMETER_BEAN> The type of parameter-bean.
+ * @author DBFlute(AutoGenerator)
+ */
+public class OutsideSqlEntityExecutor<PARAMETER_BEAN> {
+
+    // ===================================================================================
+    //                                                                           Attribute
+    //                                                                           =========
+    protected final OutsideSqlDao _outsideSqlDao;
+
+    protected final OutsideSqlOption _outsideSqlOption;
+
+    // ===================================================================================
+    //                                                                         Constructor
+    //                                                                         ===========
+    public OutsideSqlEntityExecutor(OutsideSqlDao outsideSqlDao,
+            OutsideSqlOption outsideSqlOption) {
+        this._outsideSqlDao = outsideSqlDao;
+        this._outsideSqlOption = outsideSqlOption;
+    }
+
+    // ===================================================================================
+    //                                                                              Select
+    //                                                                              ======
+    /**
+     * Select entity.
+     * 
+     * @param <ENTITY> The type of entity.
+     * @param path The path of SQL file. (NotNull)
+     * @param pmb The parameter-bean. Allowed types are Bean object and Map object. (Nullable)
+     * @param entityType The type of entity. (NotNull)
+     * @return The selected entity. (Nullable)
+     * @exception jp.sf.pal.announcement.db.allcommon.exception.OutsideSqlNotFoundException When the sql is not found.
+     * @exception jp.sf.pal.announcement.db.allcommon.exception.EntityDuplicatedException
+     */
+    public <ENTITY> ENTITY selectEntity(String path, PARAMETER_BEAN pmb,
+            Class<ENTITY> entityType) {
+        final List<ENTITY> ls = _outsideSqlDao.selectList(path, pmb,
+                _outsideSqlOption, entityType);
+        if (ls.isEmpty()) {
+            return null;
+        }
+        if (ls.size() > 1) {
+            String searchKey4Log = "The path of outside-sql is " + path
+                    + ". And the parameter bean is " + pmb;
+            throwEntityDuplicatedException(ls.size() + "", searchKey4Log, null);
+        }
+        return ls.get(0);
+    }
+
+    /**
+     * Select entity with deleted check.
+     * 
+     * @param <ENTITY> The type of entity.
+     * @param path The path of SQL file. (NotNull)
+     * @param pmb The parameter-bean. Allowed types are Bean object and Map object. (Nullable)
+     * @param entityType The type of entity. (NotNull)
+     * @return The selected entity. (Nullable)
+     * @exception jp.sf.pal.announcement.db.allcommon.exception.OutsideSqlNotFoundException When the sql is not found.
+     * @exception jp.sf.pal.announcement.db.allcommon.exception.EntityAlreadyDeletedException When the entity has already been deleted(not found).
+     * @exception jp.sf.pal.announcement.db.allcommon.exception.EntityDuplicatedException When the entity is duplicated.
+     */
+    public <ENTITY> ENTITY selectEntityWithDeletedCheck(String path,
+            PARAMETER_BEAN pmb, Class<ENTITY> entityType) {
+        final List<ENTITY> ls = _outsideSqlDao.selectList(path, pmb,
+                _outsideSqlOption, entityType);
+        if (ls == null || ls.isEmpty()) {
+            String searchKey4Log = "The path of outside-sql is " + path
+                    + ". And the parameter bean is " + pmb;
+            throwEntityAlreadyDeletedException(searchKey4Log);
+        }
+        if (ls.size() > 1) {
+            String searchKey4Log = "The path of outside-sql is " + path
+                    + ". And the parameter bean is " + pmb;
+            throwEntityDuplicatedException(ls.size() + "", searchKey4Log, null);
+        }
+        return ls.get(0);
+    }
+
+    // -----------------------------------------------------
+    //                                                Helper
+    //                                                ------
+    protected void throwEntityAlreadyDeletedException(Object searchKey4Log) {
+        ConditionBeanContext.throwEntityAlreadyDeletedException(searchKey4Log);
+    }
+
+    protected void throwEntityDuplicatedException(String resultCountString,
+            Object searchKey4Log, Throwable cause) {
+        ConditionBeanContext.throwEntityDuplicatedException(resultCountString,
+                searchKey4Log, cause);
+    }
+
+    // ===================================================================================
+    //                                                                              Option
+    //                                                                              ======
+    public OutsideSqlEntityExecutor<PARAMETER_BEAN> configure(
+            StatementConfig statementConfig) {
+        _outsideSqlOption.setStatementConfig(statementConfig);
+        return this;
+    }
+
+    public OutsideSqlEntityExecutor<PARAMETER_BEAN> dynamicBinding() {
+        _outsideSqlOption.dynamicBinding();
+        return this;
+    }
+}


Property changes on: announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/cbean/outsidesql/executor/OutsideSqlEntityExecutor.java
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/cbean/outsidesql/executor/OutsideSqlPagingExecutor.java
===================================================================
--- announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/cbean/outsidesql/executor/OutsideSqlPagingExecutor.java	                        (rev 0)
+++ announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/cbean/outsidesql/executor/OutsideSqlPagingExecutor.java	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,152 @@
+package jp.sf.pal.announcement.db.allcommon.cbean.outsidesql.executor;
+
+import java.util.List;
+
+import jp.sf.pal.announcement.db.allcommon.cbean.PagingBean;
+import jp.sf.pal.announcement.db.allcommon.cbean.PagingHandler;
+import jp.sf.pal.announcement.db.allcommon.cbean.PagingInvoker;
+import jp.sf.pal.announcement.db.allcommon.cbean.PagingResultBean;
+import jp.sf.pal.announcement.db.allcommon.cbean.outsidesql.OutsideSqlDao;
+import jp.sf.pal.announcement.db.allcommon.cbean.outsidesql.OutsideSqlOption;
+import jp.sf.pal.announcement.db.allcommon.jdbc.StatementConfig;
+
+/**
+ * The paging executor of outsideSql.
+ * 
+ * @author DBFlute(AutoGenerator)
+ */
+public class OutsideSqlPagingExecutor {
+
+    // ===================================================================================
+    //                                                                           Attribute
+    //                                                                           =========
+    /** The DAO of outsideSql. (NotNull) */
+    protected final OutsideSqlDao _outsideSqlDao;
+
+    /** The option of outsideSql. (NotNull) */
+    protected final OutsideSqlOption _outsideSqlOption;
+
+    /** The DB name of table. (NotNull) */
+    protected final String _tableDbName;
+
+    // ===================================================================================
+    //                                                                         Constructor
+    //                                                                         ===========
+    public OutsideSqlPagingExecutor(OutsideSqlDao outsideSqlDao,
+            OutsideSqlOption outsideSqlOption, String tableDbName) {
+        this._outsideSqlDao = outsideSqlDao;
+        this._outsideSqlOption = outsideSqlOption;
+        this._tableDbName = tableDbName;
+    }
+
+    // ===================================================================================
+    //                                                                              Select
+    //                                                                              ======
+    public <ENTITY> List<ENTITY> selectList(String path, PagingBean pmb,
+            Class<ENTITY> entityType) {
+        return _outsideSqlDao.selectList(path, pmb, _outsideSqlOption,
+                entityType);
+    }
+
+    /**
+     * Select page.
+     * <p>
+     * The SQL should have Count and Paging. <br />
+     * You can realize by pagingBean's isPaging() method on your 'SQL Comment'. For example, 'IF Comment'. <br />
+     * It returns false when it executes Count. And it returns true when it executes Paging. <br />
+     * <pre>
+     * - - - - - - - - - - - - - - - - - - - - - - -
+     * ex) Your Correct SQL {MySQL and manualPaging}
+     * - - - - - - - - - - - - - - - - - - - - - - -
+     * # /[*]IF pmb.isPaging()[*]/
+     * # select member.MEMBER_ID
+     * #      , member.MEMBER_NAME
+     * #      , memberStatus.MEMBER_STATUS_NAME
+     * # -- ELSE select count(*)
+     * # /[*]END[*]/
+     * #   from MEMBER member
+     * #     /[*]IF pmb.isPaging()[*]/
+     * #     left outer join MEMBER_STATUS memberStatus
+     * #       on member.MEMBER_STATUS_CODE = memberStatus.MEMBER_STATUS_CODE
+     * #     /[*]END[*]/
+     * #  /[*]BEGIN[*]/where
+     * #    /[*]IF pmb.memberId != null[*]/member.MEMBER_ID = /[*]pmb.memberId[*]/'123'/[*]END[*]/
+     * #    /[*]IF pmb.memberName != null[*]/and member.MEMBER_NAME like /[*]pmb.memberName[*]/'Billy' || '%'/[*]END[*]/
+     * #  /[*]END[*]/
+     * #  /[*]IF pmb.isPaging()[*]/
+     * #  order by member.UPDATE_DATETIME desc
+     * #  /[*]END[*]/
+     * #  /[*]IF pmb.isPaging()[*]/
+     * #  limit /[*]$pmb.pageStartIndex[*]/80, /[*]$pmb.fetchSize[*]/20
+     * #  /[*]END[*]/
+     * # 
+     * o [*] is easy escape to Java Doc Comment.
+     * o If it's autoPaging, the line of 'limit 80, 20' is unnecessary!
+     * 
+     * - - - - - - - - - - - - - - - - - - - - - - - - -
+     * ex) Wrong SQL {part 1}
+     *     -- Line comment before ELSE comment --
+     * - - - - - - - - - - - - - - - - - - - - - - - - -
+     * # /[*]IF pmb.isPaging()[*]/
+     * # select member.MEMBER_ID
+     * #      , member.MEMBER_NAME -- The name of member...    *NG
+     * #      -- The status name of member...                  *NG
+     * #      , memberStatus.MEMBER_STATUS_NAME
+     * # -- ELSE select count(*)
+     * # /[*]END[*]/
+     * # ...
+     * o It's S2Dao's restriction...Sorry
+     * </pre>
+     * 
+     * @param <ENTITY> The type of entity.
+     * @param path The path of SQL that executes count and paging. (NotNull)
+     * @param pagingPath The path of paging SQL. (NotNull)
+     * @param pmb The bean of paging parameter. (NotNull)
+     * @param entityType The type of result entity. (NotNull)
+     * @return The result bean of paging. (NotNull)
+     */
+    public <ENTITY> PagingResultBean<ENTITY> selectPage(final String path,
+            final PagingBean pmb, final Class<ENTITY> entityType) {
+        final OutsideSqlOption countOption = _outsideSqlOption
+                .copyOptionWithoutPaging();
+        final OutsideSqlEntityExecutor<PagingBean> countExecutor = new OutsideSqlEntityExecutor<PagingBean>(
+                _outsideSqlDao, countOption);
+        final PagingHandler<ENTITY> handler = new PagingHandler<ENTITY>() {
+            public PagingBean getPagingBean() {
+                return pmb;
+            }
+
+            public int count() {
+                pmb.xsetPaging(false);
+                return countExecutor.selectEntityWithDeletedCheck(path, pmb,
+                        Integer.class);
+            }
+
+            public java.util.List<ENTITY> paging() {
+                pmb.xsetPaging(true);
+                return selectList(path, pmb, entityType);
+            }
+        };
+        final PagingInvoker<ENTITY> invoker = new PagingInvoker<ENTITY>(
+                _tableDbName);
+        return invoker.invokePaging(handler);
+    }
+
+    // ===================================================================================
+    //                                                                              Option
+    //                                                                              ======
+    public OutsideSqlCursorExecutor<PagingBean> cursorHandling() {
+        return new OutsideSqlCursorExecutor<PagingBean>(_outsideSqlDao,
+                _outsideSqlOption);
+    }
+
+    public OutsideSqlPagingExecutor configure(StatementConfig statementConfig) {
+        _outsideSqlOption.setStatementConfig(statementConfig);
+        return this;
+    }
+
+    public OutsideSqlPagingExecutor dynamicBinding() {
+        _outsideSqlOption.dynamicBinding();
+        return this;
+    }
+}


Property changes on: announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/cbean/outsidesql/executor/OutsideSqlPagingExecutor.java
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/cbean/pagenavi/PageNumberLink.java
===================================================================
--- announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/cbean/pagenavi/PageNumberLink.java	                        (rev 0)
+++ announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/cbean/pagenavi/PageNumberLink.java	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,84 @@
+package jp.sf.pal.announcement.db.allcommon.cbean.pagenavi;
+
+/**
+ * The class of page number link.
+ * @author DBFlute(AutoGenerator)
+ */
+public class PageNumberLink implements java.io.Serializable {
+
+    // ===================================================================================
+    //                                                                          Definition
+    //                                                                          ==========
+    /** Serial version UID. (Default) */
+    private static final long serialVersionUID = 1L;
+
+    // ===================================================================================
+    //                                                                           Attribute
+    //                                                                           =========
+    protected int _pageNumberElement;
+
+    protected boolean _current;
+
+    protected String _pageNumberLinkHref;
+
+    // ===================================================================================
+    //                                                                         Constructor
+    //                                                                         ===========
+    public PageNumberLink() {
+    }
+
+    // ===================================================================================
+    //                                                                         Initializer
+    //                                                                         ===========
+    public PageNumberLink initialize(int pageNumberElement, boolean current,
+            String pageNumberLinkHref) {
+        setPageNumberElement(pageNumberElement);
+        setCurrent(current);
+        setPageNumberLinkHref(pageNumberLinkHref);
+        return this;
+    }
+
+    // ===================================================================================
+    //                                                                      Basic Override
+    //                                                                      ==============
+    /**
+     * @return The view string of all attribute values. (NotNull)
+     */
+    @Override
+    public String toString() {
+        final StringBuffer sb = new StringBuffer();
+
+        sb.append(" pageNumberElement=").append(_pageNumberElement);
+        sb.append(" pageNumberLinkHref=").append(_pageNumberLinkHref);
+        sb.append(" current=").append(_current);
+
+        return sb.toString();
+    }
+
+    // ===================================================================================
+    //                                                                            Accessor
+    //                                                                            ========
+    public int getPageNumberElement() {
+        return _pageNumberElement;
+    }
+
+    public void setPageNumberElement(int pageNumberElement) {
+        this._pageNumberElement = pageNumberElement;
+    }
+
+    public boolean isCurrent() {
+        return _current;
+    }
+
+    public void setCurrent(boolean current) {
+        this._current = current;
+    }
+
+    public String getPageNumberLinkHref() {
+        return _pageNumberLinkHref;
+    }
+
+    public void setPageNumberLinkHref(String pageNumberLinkHref) {
+        this._pageNumberLinkHref = pageNumberLinkHref;
+    }
+}


Property changes on: announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/cbean/pagenavi/PageNumberLink.java
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/cbean/pagenavi/PageNumberLinkSetupper.java
===================================================================
--- announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/cbean/pagenavi/PageNumberLinkSetupper.java	                        (rev 0)
+++ announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/cbean/pagenavi/PageNumberLinkSetupper.java	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,17 @@
+package jp.sf.pal.announcement.db.allcommon.cbean.pagenavi;
+
+/**
+ * The setupper of page number link.
+ * @param <LINK> The type of link.
+ * @author DBFlute(AutoGenerator)
+ */
+public interface PageNumberLinkSetupper<LINK extends PageNumberLink> {
+
+    /**
+     * Set up page number link.
+     * @param pageNumberElement Page number element.
+     * @param current Is current page?
+     * @return Page number link. (NotNull)
+     */
+    public LINK setup(int pageNumberElement, boolean current);
+}


Property changes on: announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/cbean/pagenavi/PageNumberLinkSetupper.java
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/cbean/pagenavi/group/PageGroupBean.java
===================================================================
--- announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/cbean/pagenavi/group/PageGroupBean.java	                        (rev 0)
+++ announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/cbean/pagenavi/group/PageGroupBean.java	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,203 @@
+package jp.sf.pal.announcement.db.allcommon.cbean.pagenavi.group;
+
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+
+import jp.sf.pal.announcement.db.allcommon.cbean.pagenavi.PageNumberLink;
+import jp.sf.pal.announcement.db.allcommon.cbean.pagenavi.PageNumberLinkSetupper;
+
+/**
+ * The bean of page group.
+ * @author DBFlute(AutoGenerator)
+ */
+public class PageGroupBean implements java.io.Serializable {
+
+    // ===================================================================================
+    //                                                                          Definition
+    //                                                                          ==========
+    /** Serial version UID. (Default) */
+    private static final long serialVersionUID = 1L;
+
+    // ===================================================================================
+    //                                                                           Attribute
+    //                                                                           =========
+    protected int _currentPageNumber;
+
+    protected int _allPageCount;
+
+    protected PageGroupOption _pageGroupOption;
+
+    // ===================================================================================
+    //                                                                                Main
+    //                                                                                ====
+    /**
+     * Build the list of page number link.
+     * @param <LINK> The type of link.
+     * @param pageNumberLinkSetupper Page number link setupper. (NotNull and Required LINK)
+     * @return The list of Page number link. (NotNull)
+     */
+    public <LINK extends PageNumberLink> List<LINK> buildPageNumberLinkList(
+            PageNumberLinkSetupper<LINK> pageNumberLinkSetupper) {
+        final List<Integer> pageNumberList = createPageNumberList();
+        final List<LINK> pageNumberLinkList = new ArrayList<LINK>();
+        for (Integer pageNumber : pageNumberList) {
+            pageNumberLinkList.add(pageNumberLinkSetupper.setup(pageNumber,
+                    pageNumber.equals(_currentPageNumber)));
+        }
+        return pageNumberLinkList;
+    }
+
+    /**
+     * Calculate start page number.
+     * @return Start page number.
+     */
+    public int calculateStartPageNumber() {
+        assertPageGroupValid();
+        final int pageGroupSize = _pageGroupOption.getPageGroupSize();
+        final int currentPageNumber = _currentPageNumber;
+
+        int currentPageGroupNumber = (currentPageNumber / pageGroupSize);
+        if ((currentPageNumber % pageGroupSize) == 0) {
+            currentPageGroupNumber--;
+        }
+        final int currentPageGroupStartPageNumber = (pageGroupSize * currentPageGroupNumber) + 1;
+        if (!(currentPageNumber >= currentPageGroupStartPageNumber)) {
+            String msg = "currentPageNumber should be greater equal currentPageGroupStartPageNumber. But:";
+            msg = msg + " currentPageNumber=" + currentPageNumber;
+            msg = msg + " currentPageGroupStartPageNumber="
+                    + currentPageGroupStartPageNumber;
+            throw new IllegalStateException(msg);
+        }
+        return currentPageGroupStartPageNumber;
+    }
+
+    /**
+     * Create the list of page number.
+     * @return The list of page number. (NotNull)
+     */
+    public List<Integer> createPageNumberList() {
+        assertPageGroupValid();
+        final int pageGroupSize = _pageGroupOption.getPageGroupSize();
+        final int allPageCount = _allPageCount;
+        final int currentPageGroupStartPageNumber = calculateStartPageNumber();
+        if (!(currentPageGroupStartPageNumber > 0)) {
+            String msg = "currentPageGroupStartPageNumber should be greater than 0. {> 0} But:";
+            msg = msg + " currentPageGroupStartPageNumber="
+                    + currentPageGroupStartPageNumber;
+            throw new IllegalStateException(msg);
+        }
+        final int nextPageGroupStartPageNumber = currentPageGroupStartPageNumber
+                + pageGroupSize;
+
+        final List<Integer> resultList = new ArrayList<Integer>();
+        for (int i = currentPageGroupStartPageNumber; i < nextPageGroupStartPageNumber
+                && i <= allPageCount; i++) {
+            resultList.add(new Integer(i));
+        }
+        return resultList;
+    }
+
+    /**
+     * Create the array of page number.
+     * @return The array of page number. (NotNUll)
+     */
+    public int[] createPageNumberArray() {
+        assertPageGroupValid();
+        return convertListToIntArray(createPageNumberList());
+    }
+
+    /**
+     * Is existing previous page-group?
+     * Using values are currentPageNumber and pageGroupSize.
+     * 
+     * @return Determination.
+     */
+    public boolean isExistPrePageGroup() {
+        assertPageGroupValid();
+        return (_currentPageNumber > _pageGroupOption.getPageGroupSize());
+    }
+
+    /**
+     * Is existing next page-group?
+     * Using values are currentPageNumber and pageGroupSize and allPageCount.
+     * 
+     * @return Determination.
+     */
+    public boolean isExistNextPageGroup() {
+        assertPageGroupValid();
+        int currentPageGroupStartPageNumber = calculateStartPageNumber();
+        if (!(currentPageGroupStartPageNumber > 0)) {
+            String msg = "currentPageGroupStartPageNumber should be greater than 0. {> 0} But:";
+            msg = msg + " currentPageGroupStartPageNumber="
+                    + currentPageGroupStartPageNumber;
+            throw new IllegalStateException(msg);
+        }
+        int nextPageGroupStartPageNumber = currentPageGroupStartPageNumber
+                + _pageGroupOption.getPageGroupSize();
+        return (nextPageGroupStartPageNumber <= _allPageCount);
+    }
+
+    // ===================================================================================
+    //                                                                       Assist Helper
+    //                                                                       =============
+    protected int[] convertListToIntArray(List<Integer> ls) {
+        final int[] resultArray = new int[ls.size()];
+        int arrayIndex = 0;
+        for (Iterator ite = ls.iterator(); ite.hasNext();) {
+            final Integer tmpPageNumber = (Integer) ite.next();
+            resultArray[arrayIndex] = tmpPageNumber.intValue();
+            arrayIndex++;
+        }
+        return resultArray;
+    }
+
+    protected void assertPageGroupValid() {
+        if (_pageGroupOption == null) {
+            String msg = "The pageGroupOption should not be null. Please invoke setPageGroupOption().";
+            throw new IllegalStateException(msg);
+        }
+        if (_pageGroupOption.getPageGroupSize() == 0) {
+            String msg = "The pageGroupSize should be greater than 1. But the value is zero.";
+            msg = msg + " pageGroupSize=" + _pageGroupOption.getPageGroupSize();
+            throw new IllegalStateException(msg);
+        }
+        if (_pageGroupOption.getPageGroupSize() == 1) {
+            String msg = "The pageGroupSize should be greater than 1. But the value is one.";
+            msg = msg + " pageGroupSize=" + _pageGroupOption.getPageGroupSize();
+            throw new IllegalStateException(msg);
+        }
+    }
+
+    // ===================================================================================
+    //                                                                      Basic Override
+    //                                                                      ==============
+    /**
+     * @return The view string of all attribute values. (NotNull)
+     */
+    @Override
+    public String toString() {
+        final StringBuilder sb = new StringBuilder();
+
+        sb.append(" currentPageNumber=").append(_currentPageNumber);
+        sb.append(" allPageCount=").append(_allPageCount);
+        sb.append(" pageGroupOption=").append(_pageGroupOption);
+
+        return sb.toString();
+    }
+
+    // ===================================================================================
+    //                                                                            Accessor
+    //                                                                            ========
+    public void setCurrentPageNumber(int currentPageNumber) {
+        this._currentPageNumber = currentPageNumber;
+    }
+
+    public void setAllPageCount(int allPageCount) {
+        this._allPageCount = allPageCount;
+    }
+
+    public void setPageGroupOption(PageGroupOption pageGroupOption) {
+        this._pageGroupOption = pageGroupOption;
+    }
+}


Property changes on: announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/cbean/pagenavi/group/PageGroupBean.java
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/cbean/pagenavi/group/PageGroupOption.java
===================================================================
--- announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/cbean/pagenavi/group/PageGroupOption.java	                        (rev 0)
+++ announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/cbean/pagenavi/group/PageGroupOption.java	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,45 @@
+package jp.sf.pal.announcement.db.allcommon.cbean.pagenavi.group;
+
+/**
+ * The option of page group.
+ * @author DBFlute(AutoGenerator)
+ */
+public class PageGroupOption implements java.io.Serializable {
+
+    // ===================================================================================
+    //                                                                          Definition
+    //                                                                          ==========
+    /** Serial version UID. (Default) */
+    private static final long serialVersionUID = 1L;
+
+    // ===================================================================================
+    //                                                                           Attribute
+    //                                                                           =========
+    protected int _pageGroupSize;
+
+    // ===================================================================================
+    //                                                                      Basic Override
+    //                                                                      ==============
+    /**
+     * @return The view string of all attribute values. (NotNull)
+     */
+    @Override
+    public String toString() {
+        final StringBuilder sb = new StringBuilder();
+
+        sb.append(" pageGroupSize=").append(_pageGroupSize);
+
+        return sb.toString();
+    }
+
+    // ===================================================================================
+    //                                                                            Accessor
+    //                                                                            ========
+    public int getPageGroupSize() {
+        return _pageGroupSize;
+    }
+
+    public void setPageGroupSize(int pageGroupSize) {
+        this._pageGroupSize = pageGroupSize;
+    }
+}


Property changes on: announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/cbean/pagenavi/group/PageGroupOption.java
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/cbean/pagenavi/range/PageRangeBean.java
===================================================================
--- announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/cbean/pagenavi/range/PageRangeBean.java	                        (rev 0)
+++ announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/cbean/pagenavi/range/PageRangeBean.java	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,189 @@
+package jp.sf.pal.announcement.db.allcommon.cbean.pagenavi.range;
+
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+
+import jp.sf.pal.announcement.db.allcommon.cbean.pagenavi.PageNumberLink;
+import jp.sf.pal.announcement.db.allcommon.cbean.pagenavi.PageNumberLinkSetupper;
+
+/**
+ * The bean of page range.
+ * @author DBFlute(AutoGenerator)
+ */
+public class PageRangeBean implements java.io.Serializable {
+
+    // ===================================================================================
+    //                                                                          Definition
+    //                                                                          ==========
+    /** Serial version UID. (Default) */
+    private static final long serialVersionUID = 1L;
+
+    // ===================================================================================
+    //                                                                           Attribute
+    //                                                                           =========
+    protected int _currentPageNumber;
+
+    protected int _allPageCount;
+
+    protected PageRangeOption _pageRangeOption;
+
+    // ===================================================================================
+    //                                                                                Main
+    //                                                                                ====
+    /**
+     * Build the list of page number link.
+     * @param <LINK> The type of link.
+     * @param pageNumberLinkSetupper Page number link setupper. (NotNull and Required LINK)
+     * @return The list of Page number link. (NotNull)
+     */
+    public <LINK extends PageNumberLink> List<LINK> buildPageNumberLinkList(
+            PageNumberLinkSetupper<LINK> pageNumberLinkSetupper) {
+        final List<Integer> pageNumberList = createPageNumberList();
+        final List<LINK> pageNumberLinkList = new ArrayList<LINK>();
+        for (Integer pageNumber : pageNumberList) {
+            pageNumberLinkList.add(pageNumberLinkSetupper.setup(pageNumber,
+                    pageNumber.equals(_currentPageNumber)));
+        }
+        return pageNumberLinkList;
+    }
+
+    /**
+     * Create the list of page number.
+     * @return The list of page number. (NotNull)
+     */
+    public List<Integer> createPageNumberList() {
+        assertPageRangeValid();
+        final int pageRangeSize = _pageRangeOption.getPageRangeSize();
+        final int allPageCount = _allPageCount;
+        final int currentPageNumber = _currentPageNumber;
+
+        final List<Integer> resultList = new ArrayList<Integer>();
+        for (int i = currentPageNumber - pageRangeSize; i < currentPageNumber; i++) {
+            if (i < 1) {
+                continue;
+            }
+            resultList.add(new Integer(i));
+        }
+
+        resultList.add(new Integer(currentPageNumber));
+
+        final int endPageNumber = (currentPageNumber + pageRangeSize);
+        for (int i = currentPageNumber + 1; i <= endPageNumber
+                && i <= allPageCount; i++) {
+            resultList.add(new Integer(i));
+        }
+
+        final boolean fillLimit = _pageRangeOption.isFillLimit();
+        final int limitSize = (pageRangeSize * 2) + 1;
+        if (fillLimit && !resultList.isEmpty() && resultList.size() < limitSize) {
+            final Integer firstElements = (Integer) resultList.get(0);
+            final Integer lastElements = (Integer) resultList.get(resultList
+                    .size() - 1);
+            if (firstElements.intValue() > 1) {
+                for (int i = firstElements.intValue() - 1; resultList.size() < limitSize
+                        && i > 0; i--) {
+                    resultList.add(0, new Integer(i));
+                }
+            }
+            for (int i = lastElements.intValue() + 1; resultList.size() < limitSize
+                    && i <= allPageCount; i++) {
+                resultList.add(new Integer(i));
+            }
+        }
+        return resultList;
+    }
+
+    /**
+     * Get the array of page number.
+     * @return The array of page number. (NotNull)
+     */
+    public int[] createPageNumberArray() {
+        assertPageRangeValid();
+        return convertListToIntArray(createPageNumberList());
+    }
+
+    /**
+     * Is existing previous page range?
+     * @return Determination.
+     */
+    public boolean isExistPrePageRange() {
+        assertPageRangeValid();
+        final int[] array = createPageNumberArray();
+        if (array.length == 0) {
+            return false;
+        }
+        return array[0] > 1;
+    }
+
+    /**
+     * Is existing next page range?
+     * @return Determination.
+     */
+    public boolean isExistNextPageRange() {
+        assertPageRangeValid();
+        final int[] array = createPageNumberArray();
+        if (array.length == 0) {
+            return false;
+        }
+        return array[array.length - 1] < _allPageCount;
+    }
+
+    // ===================================================================================
+    //                                                                       Assist Helper
+    //                                                                       =============
+    protected int[] convertListToIntArray(List<Integer> ls) {
+        final int[] resultArray = new int[ls.size()];
+        int arrayIndex = 0;
+        for (Iterator ite = ls.iterator(); ite.hasNext();) {
+            final Integer tmpPageNumber = (Integer) ite.next();
+            resultArray[arrayIndex] = tmpPageNumber.intValue();
+            arrayIndex++;
+        }
+        return resultArray;
+    }
+
+    protected void assertPageRangeValid() {
+        if (_pageRangeOption == null) {
+            String msg = "The pageRangeOption should not be null. Please invoke setPageRangeOption().";
+            throw new IllegalStateException(msg);
+        }
+        final int pageRangeSize = _pageRangeOption.getPageRangeSize();
+        if (pageRangeSize == 0) {
+            String msg = "The pageRangeSize should be greater than 1. But the value is zero.";
+            throw new IllegalStateException(msg);
+        }
+    }
+
+    // ===================================================================================
+    //                                                                            Accessor
+    //                                                                            ========
+    public void setCurrentPageNumber(int currentPageNumber) {
+        this._currentPageNumber = currentPageNumber;
+    }
+
+    public void setAllPageCount(int allPageCount) {
+        this._allPageCount = allPageCount;
+    }
+
+    public void setPageRangeOption(PageRangeOption pageRangeOption) {
+        this._pageRangeOption = pageRangeOption;
+    }
+
+    // ===================================================================================
+    //                                                                      Basic Override
+    //                                                                      ==============
+    /**
+     * @return The view string of all attribute values. (NotNull)
+     */
+    @Override
+    public String toString() {
+        final StringBuilder sb = new StringBuilder();
+
+        sb.append(" currentPageNumber=").append(_currentPageNumber);
+        sb.append(" allPageCount=").append(_allPageCount);
+        sb.append(" pageRangeOption=").append(_pageRangeOption);
+
+        return sb.toString();
+    }
+}


Property changes on: announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/cbean/pagenavi/range/PageRangeBean.java
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/cbean/pagenavi/range/PageRangeOption.java
===================================================================
--- announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/cbean/pagenavi/range/PageRangeOption.java	                        (rev 0)
+++ announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/cbean/pagenavi/range/PageRangeOption.java	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,56 @@
+package jp.sf.pal.announcement.db.allcommon.cbean.pagenavi.range;
+
+/**
+ * The option of page range.
+ * @author DBFlute(AutoGenerator)
+ */
+public class PageRangeOption implements java.io.Serializable {
+
+    // ===================================================================================
+    //                                                                          Definition
+    //                                                                          ==========
+    /** Serial version UID. (Default) */
+    private static final long serialVersionUID = 1L;
+
+    // ===================================================================================
+    //                                                                           Attribute
+    //                                                                           =========
+    protected int _pageRangeSize;
+
+    protected boolean _fillLimit;
+
+    // ===================================================================================
+    //                                                                      Basic Override
+    //                                                                      ==============
+    /**
+     * @return The view string of all attribute values. (NotNull)
+     */
+    @Override
+    public String toString() {
+        final StringBuilder sb = new StringBuilder();
+
+        sb.append(" pageRangeSize=").append(_pageRangeSize);
+        sb.append(" fillLimit=").append(_fillLimit);
+
+        return sb.toString();
+    }
+
+    // ===================================================================================
+    //                                                                            Accessor
+    //                                                                            ========
+    public int getPageRangeSize() {
+        return _pageRangeSize;
+    }
+
+    public void setPageRangeSize(int pageRangeSize) {
+        this._pageRangeSize = pageRangeSize;
+    }
+
+    public boolean isFillLimit() {
+        return _fillLimit;
+    }
+
+    public void setFillLimit(boolean fillLimit) {
+        this._fillLimit = fillLimit;
+    }
+}


Property changes on: announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/cbean/pagenavi/range/PageRangeOption.java
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/cbean/sqlclause/AbstractSqlClause.java
===================================================================
--- announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/cbean/sqlclause/AbstractSqlClause.java	                        (rev 0)
+++ announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/cbean/sqlclause/AbstractSqlClause.java	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,1343 @@
+package jp.sf.pal.announcement.db.allcommon.cbean.sqlclause;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.LinkedHashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+import java.util.StringTokenizer;
+
+import jp.sf.pal.announcement.db.allcommon.cbean.ckey.ConditionKey;
+import jp.sf.pal.announcement.db.allcommon.cbean.coption.ConditionOption;
+import jp.sf.pal.announcement.db.allcommon.cbean.cvalue.ConditionValue;
+import jp.sf.pal.announcement.db.allcommon.dbmeta.DBMeta;
+import jp.sf.pal.announcement.db.allcommon.dbmeta.DBMetaInstanceHandler;
+import jp.sf.pal.announcement.db.allcommon.dbmeta.info.ColumnInfo;
+import jp.sf.pal.announcement.db.allcommon.dbmeta.info.ForeignInfo;
+import jp.sf.pal.announcement.db.allcommon.dbmeta.info.UniqueInfo;
+import jp.sf.pal.announcement.db.allcommon.util.SimpleAssertUtil;
+import jp.sf.pal.announcement.db.allcommon.util.SimpleStringUtil;
+import jp.sf.pal.announcement.db.allcommon.util.SimpleSystemUtil;
+
+/**
+ * The abstract class of SqlClause.
+ * 
+ * @author DBFlute(AutoGenerator)
+ */
+ @ SuppressWarnings("unchecked")
+public abstract class AbstractSqlClause implements SqlClause {
+
+    // ===================================================================================
+    //                                                                          Definition
+    //                                                                          ==========
+    protected static final String SELECT_HINT = "/*$dto.selectHint*/";
+
+    // ===================================================================================
+    //                                                                           Attribute
+    //                                                                           =========
+    // -----------------------------------------------------
+    //                                                 Basic
+    //                                                 -----
+    /** Target table name. */
+    protected final String _tableName;
+
+    // -----------------------------------------------------
+    //                                       Clause Resource
+    //                                       ---------------
+    /** Selected select column map. map:{tableAliasName : map:{columnName : selectColumnInfo}}*/
+    protected Map<String, Map<String, SelectedSelectColumnInfo>> _selectedSelectColumnMap = new LinkedHashMap<String, Map<String, SelectedSelectColumnInfo>>();
+
+    /** Included select column map. */
+    protected Map<String, String> _includedSelectColumnMap = new LinkedHashMap<String, String>();
+
+    /** The map of real column and alias of select clause. map:{realColumnName : aliasName} */
+    protected Map<String, String> _selectClauseRealColumnAliasMap = new HashMap<String, String>();// Without linked!
+
+    /** Outer join map. */
+    protected Map<String, LeftOuterJoinInfo> _outerJoinMap = new LinkedHashMap<String, LeftOuterJoinInfo>();
+
+    /** Where list. */
+    protected List<String> _whereList = new ArrayList<String>();
+
+    /** Inline where list for BaseTable. */
+    protected List<String> _baseTableInlineWhereList = new ArrayList<String>();
+
+    /** Order-by clause. */
+    protected final OrderByClause _orderByClause = new OrderByClause();
+
+    /** Union clause list. */
+    protected List<UnionQueryInfo> _unionQueryInfoList = new ArrayList<UnionQueryInfo>();
+
+    /** Is included-select-column effective? Default value is false. */
+    protected boolean _isIncludedSelectColumnEffective = false;
+
+    /** Is order-by effective? Default value is false. */
+    protected boolean _isOrderByEffective = false;
+
+    // -----------------------------------------------------
+    //                                        Fetch Property
+    //                                        --------------
+    /** Fetch start index. (for fetchXxx()) */
+    protected int _fetchStartIndex = 0;
+
+    /** Fetch size. (for fetchXxx()) */
+    protected int _fetchSize = 0;
+
+    /** Fetch page number. (for fetchXxx()) This value should be plus. */
+    protected int _fetchPageNumber = 1;
+
+    /** Is fetch-narrowing effective? Default value is false. */
+    protected boolean _isFetchScopeEffective = false;
+
+    // -----------------------------------------------------
+    //                               AdditionalConditionAsOr
+    //                               -----------------------
+    /** Is additional condition as or effective?*/
+    protected boolean _isAdditionalConditionAsOrEffective = false;
+
+    // -----------------------------------------------------
+    //                               WhereClauseSimpleFilter
+    //                               -----------------------
+    /** The filter for where clause. */
+    protected List<WhereClauseSimpleFilter> _whereClauseSimpleFilterList;
+
+    // -----------------------------------------------------
+    //                                 Selected Foreign Info
+    //                                 ---------------------
+    /** The information of selected foreign table. */
+    protected Map<String, String> _selectedForeignInfo;
+
+    // -----------------------------------------------------
+    //                                         Optional Info
+    //                                         -------------
+    protected boolean _formatClause;
+
+    // ===================================================================================
+    //                                                                         Constructor
+    //                                                                         ===========
+    public AbstractSqlClause(String tableName) {
+        if (tableName == null) {
+            String msg = "Argument[tableName] must not be null.";
+            throw new IllegalArgumentException(msg);
+        }
+        _tableName = tableName;
+    }
+
+    // ===================================================================================
+    //                                                                              Clause
+    //                                                                              ======
+    public String getClause() {
+        final StringBuilder sb = new StringBuilder(512);
+        sb.append(getSelectClause());
+        sb.append(" ");
+        sb.append(buildClauseWithoutMainSelect(false));
+        return sb.toString();
+    }
+
+    public String getClausePKOnly() {
+        final StringBuilder sb = new StringBuilder(512);
+        sb.append(getSelectClausePKOnly());
+        sb.append(" ");
+        sb.append(buildClauseWithoutMainSelect(true));
+        return sb.toString();
+    }
+
+    protected String buildClauseWithoutMainSelect(boolean pkonly) {
+        final StringBuilder sb = new StringBuilder(512);
+        sb.append(getFromClause());
+        sb.append(getFromHint());
+        sb.append(" ");
+        sb.append(getWhereClause());
+        String unionClause = buildUnionClause(pkonly ? getSelectClausePKOnly()
+                : getSelectClause());
+
+        // Delete template mark! (At the future this will be unnecessary.)
+        unionClause = replaceString(unionClause, getUnionWhereClauseMark(), "");// Required!
+        unionClause = replaceString(unionClause,
+                getUnionWhereFirstConditionMark(), "");// Required!
+
+        sb.append(unionClause);
+        if (_isOrderByEffective && !_orderByClause.isEmpty()) {
+            sb.append(" ");
+            sb.append(getOrderByClause());
+        }
+        sb.append(" ");
+        sb.append(getSqlSuffix());
+        return sb.toString();
+    }
+
+    public String getClauseFromWhereWithUnionTemplate() {
+        return buildClauseFromWhereAsTemplate(false);
+    }
+
+    public String getClauseFromWhereWithWhereUnionTemplate() {
+        return buildClauseFromWhereAsTemplate(true);
+    }
+
+    protected String buildClauseFromWhereAsTemplate(boolean template) {
+        final StringBuilder sb = new StringBuilder(512);
+        sb.append(getFromClause());
+        sb.append(getFromHint());
+        sb.append(" ");
+        sb.append(buildWhereClause(template));
+        sb.append(buildUnionClause(getUnionSelectClauseMark()));
+        return sb.toString();
+    }
+
+    protected String buildUnionClause(String selectClause) {
+        final StringBuilder sb = new StringBuilder();
+        for (final Iterator<UnionQueryInfo> ite = _unionQueryInfoList
+                .iterator(); ite.hasNext();) {
+            final UnionQueryInfo unionQueryInfo = (UnionQueryInfo) ite.next();
+            final String unionQueryClause = unionQueryInfo
+                    .getUnionQueryClause();
+            final boolean unionAll = unionQueryInfo.isUnionAll();
+            if (isFormatClauseEffective()) {
+                sb.append(getLineSeparator());
+            }
+            sb.append(unionAll ? " union all " : " union ");
+            if (isFormatClauseEffective()) {
+                sb.append(getLineSeparator());
+            }
+            sb.append(selectClause).append(" ").append(unionQueryClause);
+        }
+        return sb.toString();
+    }
+
+    // ===================================================================================
+    //                                                                        Clause Parts
+    //                                                                        ============
+    public String getSelectClause() {
+        final StringBuilder sb = new StringBuilder();
+        final DBMeta dbmeta = DBMetaInstanceHandler.findDBMeta(_tableName);
+        final List<ColumnInfo> columnInfoList = dbmeta.getColumnInfoList();
+        for (ColumnInfo columnInfo : columnInfoList) {
+            final String columnName = columnInfo.getColumnDbName();
+            if (sb.length() > 0) {
+                sb.append(", ");
+            } else {
+                sb.append("select").append(SELECT_HINT).append(" ");
+            }
+            final String realColumnName = getLocalTableAliasName() + "."
+                    + columnName;
+            sb.append(realColumnName).append(" as ").append(columnName);
+            _selectClauseRealColumnAliasMap.put(realColumnName, columnName);
+        }
+        final Set<String> tableAliasNameSet = _selectedSelectColumnMap.keySet();
+        for (String tableAliasName : tableAliasNameSet) {
+            final Map<String, SelectedSelectColumnInfo> map = _selectedSelectColumnMap
+                    .get(tableAliasName);
+            final Collection<SelectedSelectColumnInfo> selectColumnInfoList = map
+                    .values();
+            for (SelectedSelectColumnInfo selectColumnInfo : selectColumnInfoList) {
+                final String realColumnName = selectColumnInfo
+                        .buildRealColumnName();
+                sb.append(", ").append(realColumnName).append(" as ").append(
+                        selectColumnInfo.getColumnAliasName());
+                _selectClauseRealColumnAliasMap.put(realColumnName,
+                        selectColumnInfo.getColumnAliasName());
+            }
+        }
+        if (_isIncludedSelectColumnEffective
+                && !_includedSelectColumnMap.isEmpty()) {
+            sb.append(getIncludedSelectColumnClause());
+        }
+        return sb.toString();
+    }
+
+    public String getSelectClausePKOnly() {
+        final StringBuilder sb = new StringBuilder();
+        final DBMeta dbmeta = DBMetaInstanceHandler.findDBMeta(_tableName);
+        final UniqueInfo uniqueInfo = dbmeta.getPrimaryUniqueInfo();
+        final List<ColumnInfo> columnInfoList = uniqueInfo
+                .getUniqueColumnList();
+        for (ColumnInfo columnInfo : columnInfoList) {
+            final String columnName = columnInfo.getColumnDbName();
+            if (sb.length() > 0) {
+                sb.append(", ");
+            } else {
+                sb.append("select").append(SELECT_HINT).append(" ");
+            }
+            final String realColumnName = getLocalTableAliasName() + "."
+                    + columnName;
+            sb.append(realColumnName).append(" as ").append(columnName);
+            _selectClauseRealColumnAliasMap.put(realColumnName, columnName);
+        }
+        if (_isIncludedSelectColumnEffective
+                && !_includedSelectColumnMap.isEmpty()) {
+            sb.append(getIncludedSelectColumnClause());
+        }
+        return sb.toString();
+    }
+
+    public String getSelectHint() {
+        return createSelectHint();
+    }
+
+    public String getIncludedSelectColumnClause() {
+        final StringBuilder sb = new StringBuilder();
+        int count = 0;
+        for (final Iterator<String> ite = _includedSelectColumnMap.keySet()
+                .iterator(); ite.hasNext(); count++) {
+            final String aliasName = ite.next();
+            final String realColumnName = (String) _includedSelectColumnMap
+                    .get(aliasName);
+            sb.append(", ").append(realColumnName).append(" as ").append(
+                    aliasName);
+            _selectClauseRealColumnAliasMap.put(realColumnName, aliasName);
+        }
+        return sb.toString();
+    }
+
+    public String getFromClause() {
+        final StringBuilder sb = new StringBuilder();
+        if (isFormatClauseEffective()) {
+            sb.append(getLineSeparator()).append("  ");
+        }
+        sb.append("from ");
+        if (_baseTableInlineWhereList.isEmpty()) {
+            sb.append(_tableName).append(" dflocal");
+        } else {
+            sb.append(
+                    getInlineViewClause(_tableName, _baseTableInlineWhereList))
+                    .append(" dflocal");
+        }
+        sb.append(getFromBaseTableHint());
+        sb.append(getLeftOuterJoinClause());
+        return sb.toString();
+    }
+
+    protected String getLeftOuterJoinClause() {
+        final StringBuilder sb = new StringBuilder();
+        for (final Iterator<String> ite = _outerJoinMap.keySet().iterator(); ite
+                .hasNext();) {
+            final String aliasName = ite.next();
+            final LeftOuterJoinInfo joinInfo = (LeftOuterJoinInfo) _outerJoinMap
+                    .get(aliasName);
+            final String joinTableName = joinInfo.getJoinTableName();
+            final List<String> inlineWhereClauseList = joinInfo
+                    .getInlineWhereClauseList();
+            final List<String> additionalOnClauseList = joinInfo
+                    .getAdditionalOnClauseList();
+            final Map<String, String> joinOnMap = joinInfo.getJoinOnMap();
+            assertJoinOnMapNotEmpty(joinOnMap, aliasName);
+
+            if (isFormatClauseEffective()) {
+                sb.append(getLineSeparator()).append("   ");
+            }
+            sb.append(" left outer join ");
+            if (inlineWhereClauseList.isEmpty()) {
+                sb.append(joinTableName);
+            } else {
+                sb.append(getInlineViewClause(joinTableName,
+                        inlineWhereClauseList));
+            }
+            sb.append(" ").append(aliasName).append(" on ");
+            int count = 0;
+            final Set<String> localColumnNameSet = joinOnMap.keySet();
+            for (String localColumnName : localColumnNameSet) {
+                final String foreignColumnName = (String) joinOnMap
+                        .get(localColumnName);
+                if (count > 0) {
+                    sb.append(" and ");
+                }
+                if (localColumnName.equals("$$fixedCondition$$")) {
+                    sb.append(foreignColumnName);
+                } else {
+                    sb.append(localColumnName).append(" = ").append(
+                            foreignColumnName);
+                }
+                ++count;
+            }
+            for (String additionalOnClause : additionalOnClauseList) {
+                sb.append(" and ").append(additionalOnClause);
+            }
+        }
+        return sb.toString();
+    }
+
+    protected String getInlineViewClause(String joinTableName,
+            List<String> inlineWhereClauseList) {
+        final StringBuilder sb = new StringBuilder();
+        sb.append("(select * from ").append(joinTableName).append(" where ");
+        int count = 0;
+        for (final Iterator<String> ite = inlineWhereClauseList.iterator(); ite
+                .hasNext();) {
+            String clauseElement = ite.next();
+            clauseElement = filterWhereClauseSimply(clauseElement);
+            if (count > 0) {
+                sb.append(" and ");
+            }
+            sb.append(clauseElement);
+            ++count;
+        }
+        sb.append(")");
+        return sb.toString();
+    }
+
+    public String getFromBaseTableHint() {
+        return createFromBaseTableHint();
+    }
+
+    public String getFromHint() {
+        return createFromHint();
+    }
+
+    public String getWhereClause() {
+        return buildWhereClause(false);
+    }
+
+    protected String buildWhereClause(boolean template) {
+        final StringBuilder sb = new StringBuilder();
+        int count = 0;
+        for (final Iterator<String> ite = _whereList.iterator(); ite.hasNext(); count++) {
+            String clauseElement = (String) ite.next();
+            clauseElement = filterWhereClauseSimply(clauseElement);
+            if (count == 0) {
+                if (isFormatClauseEffective()) {
+                    sb.append(getLineSeparator()).append(" ");
+                }
+                sb.append("where ").append(
+                        template ? getWhereFirstConditionMark() : "").append(
+                        clauseElement);
+            } else {
+                if (isFormatClauseEffective()) {
+                    sb.append(getLineSeparator()).append("  ");
+                }
+                sb.append(" and ").append(clauseElement);
+            }
+        }
+        if (template && sb.length() == 0) {
+            sb.append(getWhereClauseMark());
+        }
+        return sb.toString();
+    }
+
+    public String getOrderByClause() {
+        final String orderByClause;
+        if (!_unionQueryInfoList.isEmpty()) {
+            if (_selectClauseRealColumnAliasMap == null
+                    || _selectClauseRealColumnAliasMap.isEmpty()) {
+                String msg = "The selectClauseColumnAliasMap should not be null or empty when union query exists: "
+                        + toString();
+                throw new IllegalStateException(msg);
+            }
+            orderByClause = _orderByClause
+                    .getOrderByClause(_selectClauseRealColumnAliasMap);
+        } else {
+            orderByClause = _orderByClause.getOrderByClause();
+        }
+        if (isFormatClauseEffective() && orderByClause != null
+                && orderByClause.trim().length() > 0) {
+            return getLineSeparator() + " " + orderByClause;
+        } else {
+            return orderByClause;
+        }
+    }
+
+    public String getSqlSuffix() {
+        final String sqlSuffix = createSqlSuffix();
+        if (isFormatClauseEffective() && sqlSuffix != null
+                && sqlSuffix.trim().length() > 0) {
+            return getLineSeparator() + sqlSuffix;
+        } else {
+            return sqlSuffix;
+        }
+    }
+
+    // ===================================================================================
+    //                                                                          Copy Parts
+    //                                                                          ==========
+    public void copyIncludedSelectColumn(SqlClause sqlClause) {
+        final Set<String> keySet = _includedSelectColumnMap.keySet();
+        for (final Iterator<String> ite = keySet.iterator(); ite.hasNext();) {
+            final String aliasName = ite.next();
+            final String realColumnName = (String) _includedSelectColumnMap
+                    .get(aliasName);
+            sqlClause.registerIncludedSelectColumn(aliasName, realColumnName);
+        }
+    }
+
+    // ===================================================================================
+    //                                                                SelectedSelectColumn
+    //                                                                ====================
+    /**
+     * Register selected select column.
+     * 
+     * @param foreignTableAliasName The alias name of foreign table. (NotNull)
+     * @param localTableName The table name of local. (NotNull)
+     * @param foreignPropertyName The property name of foreign table. (NotNull)
+     * @param localRelationPath The path of local relation. (Nullable)
+     */
+    public void registerSelectedSelectColumn(String foreignTableAliasName,
+            String localTableName, String foreignPropertyName,
+            String localRelationPath) {
+        _selectedSelectColumnMap
+                .put(foreignTableAliasName, createSelectedSelectColumnInfo(
+                        foreignTableAliasName, localTableName,
+                        foreignPropertyName, localRelationPath));
+    }
+
+    protected Map<String, SelectedSelectColumnInfo> createSelectedSelectColumnInfo(
+            String foreignTableAliasName, String localTableName,
+            String foreignPropertyName, String localRelationPath) {
+        final DBMeta dbmeta = DBMetaInstanceHandler.findDBMeta(localTableName);
+        final ForeignInfo foreignInfo = dbmeta
+                .findForeignInfo(foreignPropertyName);
+        final int relationNo = foreignInfo.getRelationNo();
+        String nextRelationPath = "_" + relationNo;
+        if (localRelationPath != null) {
+            nextRelationPath = localRelationPath + nextRelationPath;
+        }
+        final Map<String, SelectedSelectColumnInfo> resultMap = new LinkedHashMap<String, SelectedSelectColumnInfo>();
+        final DBMeta foreignDBMeta = foreignInfo.getForeignDBMeta();
+        final List<ColumnInfo> columnInfoList = foreignDBMeta
+                .getColumnInfoList();
+        for (ColumnInfo columnInfo : columnInfoList) {
+            final String columnDbName = columnInfo.getColumnDbName();
+            final SelectedSelectColumnInfo selectColumnInfo = new SelectedSelectColumnInfo();
+            selectColumnInfo.setTableAliasName(foreignTableAliasName);
+            selectColumnInfo.setColumnName(columnDbName);
+            selectColumnInfo
+                    .setColumnAliasName(columnDbName + nextRelationPath);
+            resultMap.put(columnDbName, selectColumnInfo);
+        }
+        return resultMap;
+    }
+
+    public static class SelectedSelectColumnInfo {
+        protected String tableAliasName;
+
+        protected String columnName;
+
+        protected String columnAliasName;
+
+        public String buildRealColumnName() {
+            if (tableAliasName != null) {
+                return tableAliasName + "." + columnName;
+            } else {
+                return columnName;
+            }
+        }
+
+        public String getTableAliasName() {
+            return tableAliasName;
+        }
+
+        public void setTableAliasName(String tableAliasName) {
+            this.tableAliasName = tableAliasName;
+        }
+
+        public String getColumnName() {
+            return columnName;
+        }
+
+        public void setColumnName(String columnName) {
+            this.columnName = columnName;
+        }
+
+        public String getColumnAliasName() {
+            return columnAliasName;
+        }
+
+        public void setColumnAliasName(String columnAliasName) {
+            this.columnAliasName = columnAliasName;
+        }
+    }
+
+    // ===================================================================================
+    //                                                                IncludedSelectColumn
+    //                                                                ====================
+    public void ignoreIncludedSelectColumn() {
+        _isIncludedSelectColumnEffective = false;
+    }
+
+    public void makeIncludedSelectColumnEffective() {
+        if (!_includedSelectColumnMap.isEmpty()) {
+            _isIncludedSelectColumnEffective = true;
+        }
+    }
+
+    public void registerIncludedSelectColumn(String aliasName,
+            String realColumnName) {
+        _isIncludedSelectColumnEffective = true;
+        _includedSelectColumnMap.put(aliasName, realColumnName);
+    }
+
+    // ===================================================================================
+    //                                                                           OuterJoin
+    //                                                                           =========
+    public void registerOuterJoin(String joinTableName, String aliasName,
+            Map<String, String> joinOnMap) {
+        assertAlreadyOuterJoin(aliasName);
+        assertJoinOnMapNotEmpty(joinOnMap, aliasName);
+        final LeftOuterJoinInfo joinInfo = new LeftOuterJoinInfo();
+        joinInfo.setAliasName(aliasName);
+        joinInfo.setJoinTableName(joinTableName);
+        joinInfo.setJoinOnMap(joinOnMap);
+        _outerJoinMap.put(aliasName, joinInfo);
+    }
+
+    protected static class LeftOuterJoinInfo {
+        protected String _aliasName;
+
+        protected String _joinTableName;
+
+        protected List<String> _inlineWhereClauseList = new ArrayList<String>();
+
+        protected List<String> _additionalOnClauseList = new ArrayList<String>();
+
+        protected Map<String, String> _joinOnMap;
+
+        protected boolean _onClauseInline;
+
+        public String getAliasName() {
+            return _aliasName;
+        }
+
+        public void setAliasName(String value) {
+            _aliasName = value;
+        }
+
+        public String getJoinTableName() {
+            return _joinTableName;
+        }
+
+        public void setJoinTableName(String value) {
+            _joinTableName = value;
+        }
+
+        public List<String> getInlineWhereClauseList() {
+            return _inlineWhereClauseList;
+        }
+
+        public void addInlineWhereClause(String value) {
+            _inlineWhereClauseList.add(value);
+        }
+
+        public List<String> getAdditionalOnClauseList() {
+            return _additionalOnClauseList;
+        }
+
+        public void addAdditionalOnClause(String value) {
+            _additionalOnClauseList.add(value);
+        }
+
+        public Map<String, String> getJoinOnMap() {
+            return _joinOnMap;
+        }
+
+        public void setJoinOnMap(Map<String, String> value) {
+            _joinOnMap = value;
+        }
+
+        public boolean isOnClauseInline() {
+            return _onClauseInline;
+        }
+
+        public void setOnClauseInline(boolean value) {
+            _onClauseInline = value;
+        }
+    }
+
+    protected void assertAlreadyOuterJoin(String aliasName) {
+        if (_outerJoinMap.containsKey(aliasName)) {
+            String msg = "The alias name have already registered in outer join: "
+                    + aliasName;
+            throw new IllegalStateException(msg);
+        }
+    }
+
+    protected void assertJoinOnMapNotEmpty(Map<String, String> joinOnMap,
+            String aliasName) {
+        if (joinOnMap.isEmpty()) {
+            String msg = "The joinOnMap should not be empty: aliasName="
+                    + aliasName;
+            throw new IllegalStateException(msg);
+        }
+    }
+
+    // ===================================================================================
+    //                                                                               Where
+    //                                                                               =====
+    public void registerWhereClause(String columnFullName, ConditionKey key,
+            ConditionValue value) {
+        assertStringNotNullAndNotTrimmedEmpty("columnFullName", columnFullName);
+        key.addWhereClause(_whereList, columnFullName, value);
+        arrangeWhereListAdditionalConditionAsOr(_whereList);
+    }
+
+    public void registerWhereClause(String columnFullName, ConditionKey key,
+            ConditionValue value, ConditionOption option) {
+        assertStringNotNullAndNotTrimmedEmpty("columnFullName", columnFullName);
+        assertObjectNotNull("option of " + columnFullName, option);
+        key.addWhereClause(_whereList, columnFullName, value, option);
+        arrangeWhereListAdditionalConditionAsOr(_whereList);
+    }
+
+    public void registerWhereClause(String clause) {
+        assertStringNotNullAndNotTrimmedEmpty("clause", clause);
+        _whereList.add(clause);
+        arrangeWhereListAdditionalConditionAsOr(_whereList);
+    }
+
+    public void exchangeFirstWhereClauseForLastOne() {
+        if (_whereList.size() > 1) {
+            final String first = (String) _whereList.get(0);
+            final String last = (String) _whereList.get(_whereList.size() - 1);
+            _whereList.set(0, last);
+            _whereList.set(_whereList.size() - 1, first);
+        }
+    }
+
+    // ===================================================================================
+    //                                                                         InlineWhere
+    //                                                                         ===========
+    public void registerBaseTableInlineWhereClause(String columnName,
+            ConditionKey key, ConditionValue value) {
+        assertStringNotNullAndNotTrimmedEmpty("columnName", columnName);
+        key.addWhereClause(_baseTableInlineWhereList, columnName, value);
+        arrangeWhereListAdditionalConditionAsOr(_baseTableInlineWhereList);
+    }
+
+    public void registerBaseTableInlineWhereClause(String columnName,
+            ConditionKey key, ConditionValue value, ConditionOption option) {
+        assertStringNotNullAndNotTrimmedEmpty("columnName", columnName);
+        assertObjectNotNull("option of " + columnName, option);
+        key
+                .addWhereClause(_baseTableInlineWhereList, columnName, value,
+                        option);
+        arrangeWhereListAdditionalConditionAsOr(_baseTableInlineWhereList);
+    }
+
+    public void registerBaseTableInlineWhereClause(String value) {
+        _baseTableInlineWhereList.add(value);
+    }
+
+    public void registerOuterJoinInlineWhereClause(String aliasName,
+            String columnName, ConditionKey key, ConditionValue value,
+            boolean onClauseInline) {
+        assertNotYetOuterJoin(aliasName);
+        assertStringNotNullAndNotTrimmedEmpty("columnName", columnName);
+        final LeftOuterJoinInfo joinInfo = (LeftOuterJoinInfo) _outerJoinMap
+                .get(aliasName);
+        if (onClauseInline) {
+            key.addWhereClause(joinInfo.getAdditionalOnClauseList(), aliasName
+                    + "." + columnName, value);
+        } else {
+            key.addWhereClause(joinInfo.getInlineWhereClauseList(), columnName,
+                    value);
+        }
+        arrangeWhereListAdditionalConditionAsOr(joinInfo
+                .getInlineWhereClauseList());
+    }
+
+    public void registerOuterJoinInlineWhereClause(String aliasName,
+            String columnName, ConditionKey key, ConditionValue value,
+            ConditionOption option, boolean onClauseInline) {
+        assertNotYetOuterJoin(aliasName);
+        assertStringNotNullAndNotTrimmedEmpty("columnName", columnName);
+        final LeftOuterJoinInfo joinInfo = (LeftOuterJoinInfo) _outerJoinMap
+                .get(aliasName);
+        if (onClauseInline) {
+            key.addWhereClause(joinInfo.getAdditionalOnClauseList(), aliasName
+                    + "." + columnName, value, option);
+            arrangeWhereListAdditionalConditionAsOr(joinInfo
+                    .getAdditionalOnClauseList());
+        } else {
+            key.addWhereClause(joinInfo.getInlineWhereClauseList(), columnName,
+                    value, option);
+            arrangeWhereListAdditionalConditionAsOr(joinInfo
+                    .getInlineWhereClauseList());
+        }
+    }
+
+    public void registerOuterJoinInlineWhereClause(String aliasName,
+            String value, boolean onClauseInline) {
+        assertNotYetOuterJoin(aliasName);
+        final LeftOuterJoinInfo joinInfo = (LeftOuterJoinInfo) _outerJoinMap
+                .get(aliasName);
+        if (onClauseInline) {
+            joinInfo.addAdditionalOnClause(value);
+            arrangeWhereListAdditionalConditionAsOr(joinInfo
+                    .getAdditionalOnClauseList());
+        } else {
+            joinInfo.addInlineWhereClause(value);
+            arrangeWhereListAdditionalConditionAsOr(joinInfo
+                    .getInlineWhereClauseList());
+        }
+    }
+
+    protected void assertNotYetOuterJoin(String aliasName) {
+        if (!_outerJoinMap.containsKey(aliasName)) {
+            String msg = "The alias name have not registered in outer join yet: "
+                    + aliasName;
+            throw new IllegalStateException(msg);
+        }
+    }
+
+    // ===================================================================================
+    //                                                             AdditionalConditionAsOr
+    //                                                             =======================
+    public void makeAdditionalConditionAsOrEffective() {
+        _isAdditionalConditionAsOrEffective = true;
+    }
+
+    public void ignoreAdditionalConditionAsOr() {
+        _isAdditionalConditionAsOrEffective = false;
+    }
+
+    protected void arrangeWhereListAdditionalConditionAsOr(
+            List<String> whereList) {
+        if (_isAdditionalConditionAsOrEffective) {
+            if (whereList.size() < 2) {
+                String msg = "The whereList should have two more elements when the isAdditionalConditionAsOrEffective is true: "
+                        + toString();
+                throw new IllegalStateException(msg);
+            }
+            final String lastWhereClause = (String) whereList.remove(whereList
+                    .size() - 1);
+            final String preWhereClause = (String) whereList.remove(whereList
+                    .size() - 1);
+            if (preWhereClause.startsWith("(") && preWhereClause.endsWith(")")) {
+                final String plainClause = preWhereClause.substring("("
+                        .length(), preWhereClause.length() - ")".length());
+                whereList.add("(" + plainClause + " or " + lastWhereClause
+                        + ")");
+            } else {
+                whereList.add("(" + preWhereClause + " or " + lastWhereClause
+                        + ")");
+            }
+        }
+    }
+
+    // ===================================================================================
+    //                                                                             OrderBy
+    //                                                                             =======
+    public OrderByClause getSqlComponentOfOrderByClause() {
+        return _orderByClause;
+    }
+
+    public SqlClause clearOrderBy() {
+        _isOrderByEffective = false;
+        _orderByClause.clear();
+        return this;
+    }
+
+    public SqlClause ignoreOrderBy() {
+        _isOrderByEffective = false;
+        return this;
+    }
+
+    public SqlClause makeOrderByEffective() {
+        if (!_orderByClause.isEmpty()) {
+            _isOrderByEffective = true;
+        }
+        return this;
+    }
+
+    public void reverseOrderBy_Or_OverrideOrderBy(String orderByProperty,
+            String registeredOrderByProperty, boolean ascOrDesc) {
+        _isOrderByEffective = true;
+        if (!_orderByClause.isSameOrderByColumn(orderByProperty)) {
+            clearOrderBy();
+            registerOrderBy(orderByProperty, registeredOrderByProperty,
+                    ascOrDesc);
+        } else {
+            _orderByClause.reverseAll();
+        }
+    }
+
+    public void registerOrderBy(String orderByProperty,
+            String registeredOrderByProperty, boolean ascOrDesc) {
+        try {
+            _isOrderByEffective = true;
+            final List<String> orderByList = new ArrayList<String>();
+            {
+                final StringTokenizer st = new StringTokenizer(orderByProperty,
+                        "/");
+                while (st.hasMoreElements()) {
+                    orderByList.add(st.nextToken());
+                }
+            }
+
+            if (registeredOrderByProperty == null
+                    || registeredOrderByProperty.trim().length() == 0) {
+                registeredOrderByProperty = orderByProperty;
+            }
+
+            final List<String> registeredOrderByList = new ArrayList<String>();
+            {
+                final StringTokenizer st = new StringTokenizer(
+                        registeredOrderByProperty, "/");
+                while (st.hasMoreElements()) {
+                    registeredOrderByList.add(st.nextToken());
+                }
+            }
+
+            int count = 0;
+            for (final Iterator<String> ite = orderByList.iterator(); ite
+                    .hasNext();) {
+                String orderBy = ite.next();
+                String registeredOrderBy = (String) registeredOrderByList
+                        .get(count);
+
+                _isOrderByEffective = true;
+                String aliasName = null;
+                String columnName = null;
+                String registeredAliasName = null;
+                String registeredColumnName = null;
+
+                if (orderBy.indexOf(".") < 0) {
+                    columnName = orderBy;
+                } else {
+                    aliasName = orderBy.substring(0, orderBy.lastIndexOf("."));
+                    columnName = orderBy
+                            .substring(orderBy.lastIndexOf(".") + 1);
+                }
+
+                if (registeredOrderBy.indexOf(".") < 0) {
+                    registeredColumnName = registeredOrderBy;
+                } else {
+                    registeredAliasName = registeredOrderBy.substring(0,
+                            registeredOrderBy.lastIndexOf("."));
+                    registeredColumnName = registeredOrderBy
+                            .substring(registeredOrderBy.lastIndexOf(".") + 1);
+                }
+
+                OrderByElement element = new OrderByElement();
+                element.setAliasName(aliasName);
+                element.setColumnName(columnName);
+                element.setRegisteredAliasName(registeredAliasName);
+                element.setRegisteredColumnName(registeredColumnName);
+                if (ascOrDesc) {
+                    element.setupAsc();
+                } else {
+                    element.setupDesc();
+                }
+                _orderByClause.addOrderByElement(element);
+
+                count++;
+            }
+        } catch (RuntimeException e) {
+            String msg = "registerOrderBy() threw the exception: orderByProperty="
+                    + orderByProperty;
+            msg = msg + " registeredColumnFullName="
+                    + registeredOrderByProperty;
+            msg = msg + " ascOrDesc=" + ascOrDesc;
+            msg = msg + " sqlClause=" + this.toString();
+            throw new RuntimeException(msg, e);
+        }
+    }
+
+    public void addNullsFirstToPreviousOrderBy() {
+        _orderByClause
+                .addNullsFirstToPreviousOrderByElement(createOrderByNullsSetupper());
+    }
+
+    public void addNullsLastToPreviousOrderBy() {
+        _orderByClause
+                .addNullsLastToPreviousOrderByElement(createOrderByNullsSetupper());
+    }
+
+    protected OrderByClause.OrderByNullsSetupper createOrderByNullsSetupper() {// As Default
+        return new OrderByClause.OrderByNullsSetupper() {
+            public String setup(String columnName, String orderByElementClause,
+                    boolean nullsFirst) {
+                return orderByElementClause + " nulls "
+                        + (nullsFirst ? "first" : "last");
+            }
+        };
+    }
+
+    protected OrderByClause.OrderByNullsSetupper createOrderByNullsSetupperByCaseWhen() {// Helper For Nulls Unsupported Database
+        return new OrderByClause.OrderByNullsSetupper() {
+            public String setup(String columnName, String orderByElementClause,
+                    boolean nullsFirst) {
+                final String thenNumber = nullsFirst ? "1" : "0";
+                final String elseNumber = nullsFirst ? "0" : "1";
+                final String caseWhen = "case when " + columnName
+                        + " is not null then " + thenNumber + " else "
+                        + elseNumber + " end asc";
+                return caseWhen + ", " + orderByElementClause;
+            }
+        };
+    }
+
+    // ===================================================================================
+    //                                                                          UnionQuery
+    //                                                                          ==========
+    public void registerUnionQuery(String unionQueryClause, boolean unionAll) {
+        assertStringNotNullAndNotTrimmedEmpty("unionQueryClause",
+                unionQueryClause);
+        final UnionQueryInfo unionQueryInfo = new UnionQueryInfo();
+        unionQueryInfo.setUnionQueryClause(unionQueryClause);
+        unionQueryInfo.setUnionAll(unionAll);
+        _unionQueryInfoList.add(unionQueryInfo);
+    }
+
+    protected static class UnionQueryInfo {
+        protected String _unionQueryClause;
+
+        protected boolean _unionAll;
+
+        public String getUnionQueryClause() {
+            return _unionQueryClause;
+        }
+
+        public void setUnionQueryClause(String unionQueryClause) {
+            _unionQueryClause = unionQueryClause;
+        }
+
+        public boolean isUnionAll() {
+            return _unionAll;
+        }
+
+        public void setUnionAll(boolean unionAll) {
+            _unionAll = unionAll;
+        }
+    }
+
+    // ===================================================================================
+    //                                                                          FetchScope
+    //                                                                          ==========
+    /**
+     * @param fetchSize Fetch-size. (NotMinus & NotZero)
+     * @return this. (NotNull)
+     */
+    public SqlClause fetchFirst(int fetchSize) {
+        _isFetchScopeEffective = true;
+        if (fetchSize <= 0) {
+            String msg = "Argument[fetchSize] should be plus: " + fetchSize;
+            throw new IllegalArgumentException(msg);
+        }
+        _fetchStartIndex = 0;
+        _fetchSize = fetchSize;
+        _fetchPageNumber = 1;
+        doClearFetchPageClause();
+        doFetchFirst();
+        return this;
+    }
+
+    /**
+     * @param fetchStartIndex Fetch-start-index. 0 origin. (NotMinus)
+     * @param fetchSize Fetch size. (NotMinus)
+     * @return this. (NotNull)
+     */
+    public SqlClause fetchScope(int fetchStartIndex, int fetchSize) {
+        _isFetchScopeEffective = true;
+        if (fetchStartIndex < 0) {
+            String msg = "Argument[fetchStartIndex] must be plus or zero: "
+                    + fetchStartIndex;
+            throw new IllegalArgumentException(msg);
+        }
+        if (fetchSize <= 0) {
+            String msg = "Argument[fetchSize] should be plus: " + fetchSize;
+            throw new IllegalArgumentException(msg);
+        }
+        _fetchStartIndex = fetchStartIndex;
+        _fetchSize = fetchSize;
+        return fetchPage(1);
+    }
+
+    /**
+     * @param fetchPageNumber Page-number. 1 origin. (NotMinus & NotZero: If minus or zero, set one.)
+     * @return this. (NotNull)
+     */
+    public SqlClause fetchPage(int fetchPageNumber) {
+        _isFetchScopeEffective = true;
+        if (fetchPageNumber <= 0) {
+            fetchPageNumber = 1;
+        }
+        if (_fetchSize <= 0) {
+            String msg = "Look! Read the message below." + getLineSeparator();
+            msg = msg
+                    + "/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *"
+                    + getLineSeparator();
+            msg = msg + "Fetch size should not be minus or zero!"
+                    + getLineSeparator();
+            msg = msg + getLineSeparator();
+            msg = msg + "[Advice]" + getLineSeparator();
+            msg = msg
+                    + "When you invoke this method, it is necessary to invoke 'fetchFirst()' or 'fetchScope()' ahead of that. "
+                    + getLineSeparator();
+            msg = msg
+                    + "Please confirm your program. Does it really invoke 'fetchPage()' with 'fetchFirst()' or 'fetchScope()'?"
+                    + getLineSeparator();
+            msg = msg + "  For example:" + getLineSeparator();
+            msg = msg + "    before (x):" + getLineSeparator();
+            msg = msg + "      XxxCB cb = new XxxCB();" + getLineSeparator();
+            msg = msg + "      cb.fetchPage(3);" + getLineSeparator();
+            msg = msg + "    after  (o):" + getLineSeparator();
+            msg = msg + "      XxxCB cb = new XxxCB();" + getLineSeparator();
+            msg = msg + "      cb.fetchFirst(20); // The size of page"
+                    + getLineSeparator();
+            msg = msg + "      cb.fetchPage(3);   // The number of target page"
+                    + getLineSeparator();
+            msg = msg + getLineSeparator();
+            msg = msg + "[Actual Parameter Value]" + getLineSeparator();
+            msg = msg + "fetchSize=" + _fetchSize + getLineSeparator();
+            msg = msg + "fetchPageNumber=" + fetchPageNumber
+                    + getLineSeparator();
+            msg = msg + "* * * * * * * * * */" + getLineSeparator();
+            throw new IllegalStateException(msg);
+        }
+        _fetchPageNumber = fetchPageNumber;
+        if (_fetchPageNumber == 1 && _fetchStartIndex == 0) {
+            return fetchFirst(_fetchSize);
+        }
+        doClearFetchPageClause();
+        doFetchPage();
+        return this;
+    }
+
+    abstract protected void doFetchFirst();
+
+    abstract protected void doFetchPage();
+
+    abstract protected void doClearFetchPageClause();
+
+    public int getFetchStartIndex() {
+        return _fetchStartIndex;
+    }
+
+    public int getFetchSize() {
+        return _fetchSize;
+    }
+
+    public int getFetchPageNumber() {
+        return _fetchPageNumber;
+    }
+
+    /**
+     * @return Page start index. 0 origin. (NotMinus)
+     */
+    public int getPageStartIndex() {
+        if (_fetchPageNumber <= 0) {
+            String msg = "_fetchPageNumber must be plus: " + _fetchPageNumber;
+            throw new IllegalStateException(msg);
+        }
+        return _fetchStartIndex + (_fetchSize * (_fetchPageNumber - 1));
+    }
+
+    /**
+     * @return Page end index. 0 origin. (NotMinus)
+     */
+    public int getPageEndIndex() {
+        if (_fetchPageNumber <= 0) {
+            String msg = "_fetchPageNumber must be plus: " + _fetchPageNumber;
+            throw new IllegalStateException(msg);
+        }
+        return _fetchStartIndex + (_fetchSize * _fetchPageNumber);
+    }
+
+    public boolean isFetchScopeEffective() {
+        return _isFetchScopeEffective;
+    }
+
+    public SqlClause ignoreFetchScope() {
+        _isFetchScopeEffective = false;
+        doClearFetchPageClause();
+        return this;
+    }
+
+    public SqlClause makeFetchScopeEffective() {
+        if (getFetchSize() > 0 && getFetchPageNumber() > 0) {
+            fetchPage(getFetchPageNumber());
+        }
+        return this;
+    }
+
+    public boolean isFetchStartIndexSupported() {
+        return true; // Default
+    }
+
+    public boolean isFetchSizeSupported() {
+        return true; // Default
+    }
+
+    abstract protected String createSelectHint();
+
+    abstract protected String createFromBaseTableHint();
+
+    abstract protected String createFromHint();
+
+    abstract protected String createSqlSuffix();
+
+    // ===================================================================================
+    //                                                                     Fetch Narrowing
+    //                                                                     ===============
+    /**
+     * The implementation.
+     * 
+     * @return Fetch-narrowing start-index.
+     */
+    public int getFetchNarrowingSkipStartIndex() {
+        return getPageStartIndex();
+    }
+
+    /**
+     * The implementation.
+     * 
+     * @return Fetch-narrowing size.
+     */
+    public int getFetchNarrowingLoopCount() {
+        return getFetchSize();
+    }
+
+    /**
+     * The implementation.
+     * 
+     * @return Determiantion.
+     */
+    public boolean isFetchNarrowingEffective() {
+        return _isFetchScopeEffective;
+    }
+
+    // ===================================================================================
+    //                                                                            Resolver
+    //                                                                            ========
+    public String resolveJoinAliasName(String relationPath, int cqNestNo) {
+        return resolveNestLevelExpression("dfrelation" + relationPath, cqNestNo);
+    }
+
+    public String resolveNestLevelExpression(String name, int cqNestNo) {
+        // if (cqNestNo > 1) {
+        //     return name + "_n" + cqNestNo;
+        // } else {
+        //     return name;
+        // }
+        return name;
+    }
+
+    public int resolveRelationNo(String localTableName,
+            String foreignPropertyName) {
+        final DBMeta dbmeta = DBMetaInstanceHandler.findDBMeta(localTableName);
+        final ForeignInfo foreignInfo = dbmeta
+                .findForeignInfo(foreignPropertyName);
+        return foreignInfo.getRelationNo();
+    }
+
+    // ===================================================================================
+    //                                                                    Table Alias Info
+    //                                                                    ================
+    public String getLocalTableAliasName() {
+        return "dflocal";
+    }
+
+    public String getForeignTableAliasPrefix() {
+        return "dfrelation";
+    }
+
+    // ===================================================================================
+    //                                                                       Template Mark
+    //                                                                       =============
+    public String getWhereClauseMark() {
+        return "#df:whereClause#";
+    }
+
+    public String getWhereFirstConditionMark() {
+        return "#df:whereFirstCondition#";
+    }
+
+    public String getUnionSelectClauseMark() {
+        return "#df:unionSelectClause#";
+    }
+
+    public String getUnionWhereClauseMark() {
+        return "#df:unionWhereClause#";
+    }
+
+    public String getUnionWhereFirstConditionMark() {
+        return "#df:unionWhereFirstCondition#";
+    }
+
+    // =====================================================================================
+    //                                                            Where Clause Simple Filter
+    //                                                            ==========================
+    public void addWhereClauseSimpleFilter(
+            WhereClauseSimpleFilter whereClauseSimpleFilter) {
+        if (_whereClauseSimpleFilterList == null) {
+            _whereClauseSimpleFilterList = new ArrayList<WhereClauseSimpleFilter>();
+        }
+        _whereClauseSimpleFilterList.add(whereClauseSimpleFilter);
+    }
+
+    protected String filterWhereClauseSimply(String clauseElement) {
+        if (_whereClauseSimpleFilterList == null
+                || _whereClauseSimpleFilterList.isEmpty()) {
+            return clauseElement;
+        }
+        for (final Iterator<WhereClauseSimpleFilter> ite = _whereClauseSimpleFilterList
+                .iterator(); ite.hasNext();) {
+            final WhereClauseSimpleFilter filter = ite.next();
+            if (filter == null) {
+                String msg = "The list of filter should not have null: _whereClauseSimpleFilterList="
+                        + _whereClauseSimpleFilterList;
+                throw new IllegalStateException(msg);
+            }
+            clauseElement = filter.filterClauseElement(clauseElement);
+        }
+        return clauseElement;
+    }
+
+    // =====================================================================================
+    //                                                                 Selected Foreign Info
+    //                                                                 =====================
+    public boolean hasSelectedForeignInfo(String relationPath) {
+        if (_selectedForeignInfo == null) {
+            return false;
+        }
+        return _selectedForeignInfo.containsKey(relationPath);
+    }
+
+    public void registerSelectedForeignInfo(String relationPath,
+            String foreignPropertyName) {
+        if (_selectedForeignInfo == null) {
+            _selectedForeignInfo = new HashMap<String, String>();
+        }
+        _selectedForeignInfo.put(relationPath, foreignPropertyName);
+    }
+
+    // ===================================================================================
+    //                                                                       Format Clause
+    //                                                                       =============
+    public boolean isFormatClauseEffective() {
+        return _formatClause;
+    }
+
+    public void makeFormatClauseEffective() {
+        _formatClause = true;
+    }
+
+    // ===================================================================================
+    //                                                                              Helper
+    //                                                                              ======
+    protected final String replaceString(String text, String fromText,
+            String toText) {
+        return SimpleStringUtil.replace(text, fromText, toText);
+    }
+
+    protected String getLineSeparator() {
+        return SimpleSystemUtil.getLineSeparator();
+    }
+
+    // -----------------------------------------------------
+    //                                         Assert Object
+    //                                         -------------
+    protected void assertObjectNotNull(String variableName, Object value) {
+        SimpleAssertUtil.assertObjectNotNull(variableName, value);
+    }
+
+    // -----------------------------------------------------
+    //                                         Assert String
+    //                                         -------------
+    protected void assertStringNotNullAndNotTrimmedEmpty(String variableName,
+            String value) {
+        SimpleAssertUtil.assertStringNotNullAndNotTrimmedEmpty(variableName,
+                value);
+    }
+}


Property changes on: announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/cbean/sqlclause/AbstractSqlClause.java
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/cbean/sqlclause/OrderByClause.java
===================================================================
--- announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/cbean/sqlclause/OrderByClause.java	                        (rev 0)
+++ announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/cbean/sqlclause/OrderByClause.java	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,265 @@
+package jp.sf.pal.announcement.db.allcommon.cbean.sqlclause;
+
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+import java.util.StringTokenizer;
+
+/**
+ * @author DBFlute(AutoGenerator)
+ */
+public class OrderByClause implements java.io.Serializable {
+
+    /** Serial version UID. (Default) */
+    private static final long serialVersionUID = 1L;
+
+    // =====================================================================================
+    //                                                                             Attribute
+    //                                                                             =========
+    protected List<OrderByElement> _orderByList = new ArrayList<OrderByElement>();
+
+    // =====================================================================================
+    //                                                                           Constructor
+    //                                                                           ===========
+    /**
+     * Constructor.
+     */
+    public OrderByClause() {
+    }
+
+    // =====================================================================================
+    //                                                                              Behavior
+    //                                                                              ========
+    /**
+     * Add order-by element.
+     * @param orderByElement Order-by element. (NotNull)
+     */
+    public void addOrderByElement(OrderByElement orderByElement) {
+        _orderByList.add(orderByElement);
+    }
+
+    /**
+     * Insert first order-by element .
+     * @param orderByElement Order-by element. (NotNull)
+     */
+    public void insertFirstOrderByElement(OrderByElement orderByElement) {
+        _orderByList.add(0, orderByElement);
+    }
+
+    public void reverseAll() {
+        for (Iterator<OrderByElement> ite = _orderByList.iterator(); ite
+                .hasNext();) {
+            ite.next().reverse();
+        }
+    }
+
+    public void exchangeFirstOrderByElementForLastOne() {
+        if (_orderByList.size() > 1) {
+            final OrderByElement first = _orderByList.get(0);
+            final OrderByElement last = _orderByList
+                    .get(_orderByList.size() - 1);
+            _orderByList.set(0, last);
+            _orderByList.set(_orderByList.size() - 1, first);
+        }
+    }
+
+    public void addNullsFirstToPreviousOrderByElement(
+            OrderByNullsSetupper filter) {
+        if (_orderByList.isEmpty()) {
+            return;
+        }
+        final OrderByElement last = _orderByList.get(_orderByList.size() - 1);
+        last.setOrderByNullsSetupper(filter, true);
+    }
+
+    public void addNullsLastToPreviousOrderByElement(OrderByNullsSetupper filter) {
+        if (_orderByList.isEmpty()) {
+            return;
+        }
+        final OrderByElement last = _orderByList.get(_orderByList.size() - 1);
+        last.setOrderByNullsSetupper(filter, false);
+    }
+
+    public static interface OrderByNullsSetupper {
+        public String setup(String columnName, String orderByElementClause,
+                boolean nullsFirst);
+    }
+
+    public List<OrderByElement> getOrderByList() {
+        return _orderByList;
+    }
+
+    public String getOrderByClause() {
+        return getOrderByClause(null);
+    }
+
+    public String getOrderByClause(
+            Map<String, String> selectClauseRealColumnAliasMap) {
+        if (_orderByList.isEmpty()) {
+            return "";
+        }
+        final StringBuffer sb = new StringBuffer();
+        final String delimiter = ", ";
+        for (final Iterator<OrderByElement> ite = _orderByList.iterator(); ite
+                .hasNext();) {
+            final OrderByElement element = ite.next();
+            sb.append(delimiter);
+            if (selectClauseRealColumnAliasMap != null) {
+                sb.append(element
+                        .getElementClause(selectClauseRealColumnAliasMap));
+            } else {
+                sb.append(element.getElementClause());
+            }
+        }
+        sb.delete(0, delimiter.length()).insert(0, "order by ");
+        return sb.toString();
+    }
+
+    public boolean isSameOrderByColumn(String orderByProperty) {
+        final List<String> orderByList = new ArrayList<String>();
+        {
+            final StringTokenizer st = new StringTokenizer(orderByProperty, "/");
+            while (st.hasMoreElements()) {
+                orderByList.add(st.nextToken());
+            }
+        }
+        if (_orderByList.size() != orderByList.size()) {
+            return false;
+        }
+        int count = 0;
+        for (final Iterator<String> ite = orderByList.iterator(); ite.hasNext();) {
+            final String columnFullName = ite.next();
+            final OrderByElement element = (OrderByElement) _orderByList
+                    .get(count);
+            if (!element.getColumnFullName().equals(columnFullName)) {
+                return false;
+            }
+            count++;
+        }
+        return true;
+    }
+
+    // =====================================================================================
+    //                                                                         First Element
+    //                                                                         =============
+    public boolean isFirstElementAsc() {
+        if (isEmpty()) {
+            String msg = "This order-by clause is empty: " + toString();
+            throw new IllegalStateException(msg);
+        }
+        final OrderByElement element = (OrderByElement) _orderByList.get(0);
+        return element.isAsc();
+    }
+
+    public boolean isFirstElementDesc() {
+        return !isFirstElementAsc();
+    }
+
+    public boolean isSameAsFirstElementAliasName(String expectedAliasName) {
+        if (isEmpty()) {
+            String msg = "This order-by clause is empty: " + toString();
+            throw new RuntimeException(msg);
+        }
+        OrderByElement element = (OrderByElement) _orderByList.get(0);
+        String actualAliasName = element.getAliasName();
+        if (actualAliasName != null && expectedAliasName != null) {
+            return actualAliasName.equalsIgnoreCase(expectedAliasName);
+        } else {
+            return false;
+        }
+    }
+
+    /**
+     * @param expectedColumnName Expected column-name. (Nullable)
+     * @return Determination.
+     */
+    public boolean isSameAsFirstElementColumnName(String expectedColumnName) {
+        if (isEmpty()) {
+            String msg = "This order-by clause is empty: " + toString();
+            throw new RuntimeException(msg);
+        }
+        OrderByElement element = (OrderByElement) _orderByList.get(0);
+        String actualColumnName = element.getColumnName();
+        if (actualColumnName != null && expectedColumnName != null) {
+            return actualColumnName.equalsIgnoreCase(expectedColumnName);
+        } else {
+            return false;
+        }
+    }
+
+    /**
+     * @param expectedAliasName Expected alias-name. (Nullable)
+     * @return Determination.
+     */
+    public boolean isSameAsFirstElementRegisteredAliasName(
+            String expectedAliasName) {
+        if (isEmpty()) {
+            String msg = "This order-by clause is empty: " + toString();
+            throw new RuntimeException(msg);
+        }
+        OrderByElement element = (OrderByElement) _orderByList.get(0);
+        String actualAliasName = element.getRegisteredAliasName();
+        if (actualAliasName != null && expectedAliasName != null) {
+            return actualAliasName.equalsIgnoreCase(expectedAliasName);
+        } else {
+            return false;
+        }
+    }
+
+    /**
+     * @param expectedColumnName Expected column-name. (Nullable)
+     * @return Determination.
+     */
+    public boolean isSameAsFirstElementRegisteredColumnName(
+            String expectedColumnName) {
+        if (isEmpty()) {
+            String msg = "This order-by clause is empty: " + toString();
+            throw new RuntimeException(msg);
+        }
+        OrderByElement element = (OrderByElement) _orderByList.get(0);
+        String actualColumnName = element.getRegisteredColumnName();
+        if (actualColumnName != null && expectedColumnName != null) {
+            return actualColumnName.equalsIgnoreCase(expectedColumnName);
+        } else {
+            return false;
+        }
+    }
+
+    // =====================================================================================
+    //                                                                      Delegate of List
+    //                                                                      ================
+    /**
+     * Is empty?
+     * @return Determination.
+     */
+    public boolean isEmpty() {
+        return _orderByList.isEmpty();
+    }
+
+    /**
+     * Get iterator of order-by list.
+     * @return Determination.
+     */
+    public java.util.Iterator iterator() {
+        return _orderByList.iterator();
+    }
+
+    /**
+     * Clear order-by list.
+     */
+    public void clear() {
+        _orderByList.clear();
+    }
+
+    // =====================================================================================
+    //                                                                 Basic-Override Method
+    //                                                                 =====================
+    /**
+     * This method overrides the method that is declared at super.
+     * @return View-string of all-columns value.
+     */
+    public String toString() {
+        return _orderByList.toString();
+    }
+}


Property changes on: announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/cbean/sqlclause/OrderByClause.java
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/cbean/sqlclause/OrderByElement.java
===================================================================
--- announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/cbean/sqlclause/OrderByElement.java	                        (rev 0)
+++ announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/cbean/sqlclause/OrderByElement.java	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,263 @@
+package jp.sf.pal.announcement.db.allcommon.cbean.sqlclause;
+
+import java.util.Map;
+
+import jp.sf.pal.announcement.db.allcommon.util.SimpleSystemUtil;
+
+/**
+ * @author DBFlute(AutoGenerator)
+ */
+public class OrderByElement implements java.io.Serializable {
+
+    /** Serial version UID. (Default) */
+    private static final long serialVersionUID = 1L;
+
+    // =====================================================================================
+    //                                                                             Attribute
+    //                                                                             =========
+    /** The value of alias name. */
+    protected String _aliasName;
+
+    /** The value of column name. */
+    protected String _columnName;
+
+    /** The value of registered alias name. */
+    protected String _registeredAliasName;
+
+    /** The value of registered column name. */
+    protected String _registeredColumnName;
+
+    /** The value of ascDesc. */
+    protected String _ascDesc = "asc";
+
+    /** The setupper of order-by nulls. */
+    protected OrderByClause.OrderByNullsSetupper _orderByNullsSetupper;
+
+    /** Is nulls ordered first? */
+    protected boolean _nullsFirst;
+
+    // =====================================================================================
+    //                                                                              Accessor
+    //                                                                              ========
+    public String getAliasName() {
+        return _aliasName;
+    }
+
+    public String getColumnName() {
+        return _columnName;
+    }
+
+    public String getRegisteredAliasName() {
+        return _registeredAliasName;
+    }
+
+    public String getRegisteredColumnName() {
+        return _registeredColumnName;
+    }
+
+    public String getAscDesc() {
+        return _ascDesc;
+    }
+
+    public void setAliasName(String value) {
+        _aliasName = value;
+    }
+
+    public void setColumnName(String value) {
+        _columnName = value;
+    }
+
+    public void setRegisteredAliasName(String value) {
+        _registeredAliasName = value;
+    }
+
+    public void setRegisteredColumnName(String value) {
+        _registeredColumnName = value;
+    }
+
+    public void setAscDesc(String value) {
+        _ascDesc = value;
+    }
+
+    public void setOrderByNullsSetupper(
+            OrderByClause.OrderByNullsSetupper value, boolean nullsFirst) {
+        _orderByNullsSetupper = value;
+        _nullsFirst = nullsFirst;
+    }
+
+    // =====================================================================================
+    //                                                                              Behavior
+    //                                                                              ========
+    public void setupAsc() {
+        _ascDesc = "asc";
+    }
+
+    public void setupDesc() {
+        _ascDesc = "desc";
+    }
+
+    public void reverse() {
+        if (_ascDesc == null) {
+            String msg = "The attribute[ascDesc] should not be null.";
+            throw new IllegalStateException(msg);
+        }
+        if (_ascDesc.equals("asc")) {
+            _ascDesc = "desc";
+        } else if (_ascDesc.equals("desc")) {
+            _ascDesc = "asc";
+        } else {
+            String msg = "The attribute[ascDesc] should be asc or desc: but ascDesc="
+                    + _ascDesc;
+            throw new IllegalStateException(msg);
+        }
+    }
+
+    public boolean isAsc() {
+        if (_ascDesc == null) {
+            String msg = "The attribute[ascDesc] should not be null.";
+            throw new IllegalStateException(msg);
+        }
+        if (_ascDesc.equals("asc")) {
+            return true;
+        } else if (_ascDesc.equals("desc")) {
+            return false;
+        } else {
+            String msg = "The attribute[ascDesc] should be asc or desc: but ascDesc="
+                    + _ascDesc;
+            throw new IllegalStateException(msg);
+        }
+    }
+
+    public String getColumnFullName() {
+        final StringBuilder sb = new StringBuilder();
+        if (_aliasName != null) {
+            sb.append(_aliasName).append(".");
+        }
+        if (_columnName == null) {
+            String msg = "The attribute[columnName] should not be null.";
+            throw new IllegalStateException(msg);
+        }
+        sb.append(_columnName);
+        return sb.toString();
+    }
+
+    public String getElementClause() {
+        if (_ascDesc == null) {
+            String msg = "The attribute[ascDesc] should not be null.";
+            throw new IllegalStateException(msg);
+        }
+        final StringBuilder sb = new StringBuilder();
+        sb.append(getColumnFullName()).append(" ").append(_ascDesc);
+        if (_orderByNullsSetupper != null) {
+            return _orderByNullsSetupper.setup(getColumnFullName(), sb
+                    .toString(), _nullsFirst);
+        } else {
+            return sb.toString();
+        }
+    }
+
+    public String getElementClause(
+            Map<String, String> selectClauseRealColumnAliasMap) {
+        if (selectClauseRealColumnAliasMap == null) {
+            String msg = "The argument[selectClauseRealColumnAliasMap] should not be null.";
+            throw new IllegalArgumentException(msg);
+        }
+        if (_ascDesc == null) {
+            String msg = "The attribute[ascDesc] should not be null.";
+            throw new IllegalStateException(msg);
+        }
+        final StringBuilder sb = new StringBuilder();
+        final String columnAlias = selectClauseRealColumnAliasMap
+                .get(getColumnFullName());
+        if (columnAlias == null || columnAlias.trim().length() == 0) {
+            throwOrderByColumnNotFoundException(getColumnFullName(),
+                    selectClauseRealColumnAliasMap);
+        }
+        sb.append(columnAlias).append(" ").append(_ascDesc);
+        if (_orderByNullsSetupper != null) {
+            return _orderByNullsSetupper.setup(columnAlias, sb.toString(),
+                    _nullsFirst);
+        } else {
+            return sb.toString();
+        }
+    }
+
+    protected void throwOrderByColumnNotFoundException(String columnName,
+            Map<String, String> selectClauseRealColumnAliasMap) {
+        String msg = "Look! Read the message below." + getLineSeparator();
+        msg = msg
+                + "/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *"
+                + getLineSeparator();
+        msg = msg + "The column for order-by was Not Found in select-clause!"
+                + getLineSeparator();
+        msg = msg + getLineSeparator();
+        msg = msg + "[Advice]" + getLineSeparator();
+        msg = msg
+                + "If you use 'union()' or 'unionAll()', Check your condition-bean!"
+                + getLineSeparator();
+        msg = msg + "Order-by for union can use only columns on select-clause."
+                + getLineSeparator();
+        msg = msg
+                + "So the rule when using union is little difference from the one when NOT using."
+                + getLineSeparator();
+        msg = msg + "  For example:" + getLineSeparator();
+        msg = msg + "    [before (x)]" + getLineSeparator();
+        msg = msg + "    AaaCB cb = new AaaCB();" + getLineSeparator();
+        msg = msg + "    cb.query().setXxx...();" + getLineSeparator();
+        msg = msg + "    {" + getLineSeparator();
+        msg = msg + "        AaaCB unionCB = new AaaCB();" + getLineSeparator();
+        msg = msg + "        unionCB.query().setXxx...();" + getLineSeparator();
+        msg = msg + "        cb.union(unionCB.query());" + getLineSeparator();
+        msg = msg + "    }" + getLineSeparator();
+        msg = msg
+                + "    cb.query().queryBbb().addOrderBy_BbbName_Asc();// *NG!"
+                + getLineSeparator();
+        msg = msg + "    " + getLineSeparator();
+        msg = msg + "    [after (o)]" + getLineSeparator();
+        msg = msg + "    AaaCB cb = new AaaCB();" + getLineSeparator();
+        msg = msg + "    cb.setupSelect_Bbb();// *Point!" + getLineSeparator();
+        msg = msg + "    cb.query().setXxx...();" + getLineSeparator();
+        msg = msg + "    {" + getLineSeparator();
+        msg = msg + "        AaaCB unionCB = new AaaCB();" + getLineSeparator();
+        msg = msg + "        unionCB.query().setXxx...();" + getLineSeparator();
+        msg = msg + "        cb.union(unionCB.query());" + getLineSeparator();
+        msg = msg + "    }" + getLineSeparator();
+        msg = msg
+                + "    cb.query().queryBbb().addOrderBy_BbbName_Asc();// *OK!"
+                + getLineSeparator();
+        msg = msg + "    " + getLineSeparator();
+        msg = msg
+                + "Or else if you DON'T use 'union()' or 'unionAll()', This is the Framework Exception!"
+                + getLineSeparator();
+        msg = msg + getLineSeparator();
+        msg = msg + "[Target Column]" + getLineSeparator();
+        msg = msg + columnName + getLineSeparator();
+        msg = msg + getLineSeparator();
+        msg = msg + "[Internal Object]" + getLineSeparator();
+        msg = msg + "selectClauseRealColumnAliasMap="
+                + selectClauseRealColumnAliasMap + getLineSeparator();
+        msg = msg + "* * * * * * * * * */" + getLineSeparator();
+        throw new IllegalStateException(msg);
+    }
+
+    protected String getLineSeparator() {
+        return SimpleSystemUtil.getLineSeparator();
+    }
+
+    // =====================================================================================
+    //                                                                        Basic Override
+    //                                                                        ==============
+    /**
+     * This method overrides the method that is declared at super.
+     * @return View-string of all-columns value.
+     */
+    public String toString() {
+        final StringBuilder sb = new StringBuilder();
+        sb.append("[OrderByElement] aliasName=").append(_aliasName);
+        sb.append(" columnName=").append(_columnName);
+        sb.append(" registeredAliasName=").append(_registeredAliasName);
+        sb.append(" registeredColumnName=").append(_registeredColumnName);
+        sb.append(" ascDesc=").append(_ascDesc);
+        return sb.toString();
+    }
+}


Property changes on: announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/cbean/sqlclause/OrderByElement.java
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/cbean/sqlclause/SqlClause.java
===================================================================
--- announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/cbean/sqlclause/SqlClause.java	                        (rev 0)
+++ announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/cbean/sqlclause/SqlClause.java	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,475 @@
+package jp.sf.pal.announcement.db.allcommon.cbean.sqlclause;
+
+import java.util.Map;
+
+import jp.sf.pal.announcement.db.allcommon.cbean.ckey.ConditionKey;
+import jp.sf.pal.announcement.db.allcommon.cbean.coption.ConditionOption;
+import jp.sf.pal.announcement.db.allcommon.cbean.cvalue.ConditionValue;
+
+/**
+ * The interface of SQL-clause.
+ * 
+ * @author DBFlute(AutoGenerator)
+ */
+public interface SqlClause {
+
+    // =====================================================================================
+    //                                                                                Clause
+    //                                                                                ======
+    /**
+     * Get the clause of all parts.
+     * <pre>
+     * # select [base-table-columns], [join-table-columns]
+     * #   from [base-table] left outer join [join-table] [join-alias] on [join-condition]
+     * #  where [base-table].[column] = [value] and [join-alias].[column] is null
+     * #  order by [base-table].[column] asc, [join-alias].[column] desc
+     * #  for update
+     * </pre>
+     * @return The clause of all parts. (NotNull)
+     */
+    public String getClause();
+
+    /**
+     * Get clause of all parts as PK-only.
+     * <pre>
+     * # select [base-table-columns], [join-table-columns]
+     * #   from [base-table] left outer join [join-table] [join-alias] on [join-condition]
+     * #  where [base-table].[column] = [value] and [join-alias].[column] is null
+     * #  order by [base-table].[column] asc, [join-alias].[column] desc
+     * #  for update
+     * </pre>
+     * @return The clause of all parts as PK-Only. (NotNull)
+     */
+    public String getClausePKOnly();
+
+    /**
+     * Get from-where clause without select and orderBy and sqlSuffix. 
+     * For subQuery and selectCount.
+     * <p>
+     * You should handle UnionSelectClauseMark and UnionWhereClauseMark and UnionWhereFirstConditionMark in clause.
+     * </p>
+     * @return The 'from-where' clause(contains union) without 'select' and 'orderBy' and 'sqlSuffix'. (NotNull)
+     */
+    public String getClauseFromWhereWithUnionTemplate();
+
+    /**
+     * Get from-where clause without select and orderBy and sqlSuffix as template. 
+     * For subQuery and selectCount.
+     * <p>
+     * You should handle UnionSelectClauseMark and UnionWhereClauseMark and UnionWhereFirstConditionMark
+     * and WhereClauseMark and WhereFirstConditionMark in clause.
+     * </p>
+     * @return The 'from-where' clause(contains union) without 'select' and 'orderBy' and 'sqlSuffix'. (NotNull)
+     */
+    public String getClauseFromWhereWithWhereUnionTemplate();
+
+    // =====================================================================================
+    //                                                                          Clause Parts
+    //                                                                          ============
+    /**
+     * Get the clause of 'select'. This is an internal method.
+     * @return The clause of select. {[select ...] from table...} (NotNull)
+     */
+    public String getSelectClause();
+
+    /**
+     * Get The clause of 'select' as PK-only. This is an internal method.
+     * @return The clause of select PK-only. {[select ...] from table...} (NotNull)
+     */
+    public String getSelectClausePKOnly();
+
+    /**
+     * Get the hint of 'select'. This is an internal method.
+     * @return The hint of 'select'. {select [select-hint] * from table...} (NotNull)
+     */
+    public String getSelectHint();
+
+    /**
+     * Get the clause of included-select-column. This is an internal method.
+     * @return The clause of included-select-column. {select ... , [included-select-column clause] from table...} (NotNull)
+     */
+    public String getIncludedSelectColumnClause();
+
+    /**
+     * Get the clause of 'from'. This is an internal method.
+     * @return The clause of 'from'. (NotNull)
+     */
+    public String getFromClause();
+
+    /**
+     * Get the clause of from-base-table. This is an internal method.
+     * @return The hint of from-base-table. {select * from table [from-base-table-hint] where ...} (NotNull)
+     */
+    public String getFromBaseTableHint();
+
+    /**
+     * Get the hint of 'from'. This is an internal method.
+     * @return The hint of 'from'. {select * from table left outer join ... on ... [from-hint] where ...} (NotNull)
+     */
+    public String getFromHint();
+
+    /**
+     * Get the clause of 'where'. This is an internal method.
+     * @return The clause of 'where'. (NotNull)
+     */
+    public String getWhereClause();
+
+    /**
+     * Get the clause of 'order-by'. This is an internal method.
+     * @return The clause of 'order-by'. (NotNull)
+     */
+    public String getOrderByClause();
+
+    /**
+     * Get the suffix of SQL. This is an internal method.
+     * @return The suffix of SQL. {select * from table where ... order by ... [sql-suffix]} (NotNull)
+     */
+    public String getSqlSuffix();
+
+    // ===================================================================================
+    //                                                                          Copy Parts
+    //                                                                          ==========
+    /**
+     * Copy included-select-column.
+     * @param sqlClause SQL-clause. (NotNull)
+     */
+    public void copyIncludedSelectColumn(SqlClause sqlClause);
+
+    // ===================================================================================
+    //                                                                SelectedSelectColumn
+    //                                                                ====================
+    /**
+     * Register selected-select-column.
+     * @param foreignTableAliasName The alias name of foreign table. (NotNull)
+     * @param localTableName The table name of local. (NotNull)
+     * @param foreignPropertyName The property name of foreign table. (NotNull)
+     * @param localRelationPath The path of local relation. (Nullable)
+     */
+    public void registerSelectedSelectColumn(String foreignTableAliasName,
+            String localTableName, String foreignPropertyName,
+            String localRelationPath);
+
+    // ===================================================================================
+    //                                                                IncludedSelectColumn
+    //                                                                ====================
+    /**
+     * Ignore included-select-column.
+     */
+    public void ignoreIncludedSelectColumn();
+
+    /**
+     * Make included-select-column effective.
+     */
+    public void makeIncludedSelectColumnEffective();
+
+    /**
+     * Register included-select-column.
+     * @param aliasName The alias name of the included-select-column. (NotNull)
+     * @param realColumnName The real column name of the included-select-column. (NotNull)
+     */
+    public void registerIncludedSelectColumn(String aliasName,
+            String realColumnName);
+
+    // ===================================================================================
+    //                                                                           OuterJoin
+    //                                                                           =========
+    /**
+     * Register outer-join.
+     * @param joinTableName The name of join table. {left outer join [joinTableName]} (NotNull)
+     * @param aliasName The alias name of join table. {left outer join joinTableName [aliasName]} (NotNull and Unique per invoking method)
+     * @param joinOnMap Map that has conditions of on-clause. (NotNull)
+     */
+    public void registerOuterJoin(String joinTableName, String aliasName,
+            Map<String, String> joinOnMap);
+
+    // ===================================================================================
+    //                                                                               Where
+    //                                                                               =====
+    /**
+     * Register 'where' clause.
+     * @param columnFullName The full name of column. {[table-name].[column-name]}. (NotNull)
+     * @param key Condition-key. (NotNull)
+     * @param value Condition-value. (NotNull)
+     */
+    public void registerWhereClause(String columnFullName, ConditionKey key,
+            ConditionValue value);
+
+    /**
+     * Register 'where' clause.
+     * @param columnFullName The full name of column. {[table-name].[column-name]}. (NotNull)
+     * @param key Condition-key. (NotNull)
+     * @param value Condition-value. (NotNull)
+     * @param option Condition-option. (NotNull)
+     */
+    public void registerWhereClause(String columnFullName, ConditionKey key,
+            ConditionValue value, ConditionOption option);
+
+    /**
+     * Register 'where' clause.
+     * @param clause The clause of 'where'. (NotNull)
+     */
+    public void registerWhereClause(String clause);
+
+    /**
+     * Exchange first The clause of 'where' for last one.
+     */
+    public void exchangeFirstWhereClauseForLastOne();
+
+    // ===================================================================================
+    //                                                                         InlineWhere
+    //                                                                         ===========
+    public void registerBaseTableInlineWhereClause(String columnName,
+            ConditionKey key, ConditionValue value);
+
+    public void registerBaseTableInlineWhereClause(String columnName,
+            ConditionKey key, ConditionValue value, ConditionOption option);
+
+    public void registerBaseTableInlineWhereClause(String value);
+
+    public void registerOuterJoinInlineWhereClause(String aliasName,
+            String columnName, ConditionKey key, ConditionValue value,
+            boolean onClauseInline);
+
+    public void registerOuterJoinInlineWhereClause(String aliasName,
+            String columnName, ConditionKey key, ConditionValue value,
+            ConditionOption option, boolean onClauseInline);
+
+    public void registerOuterJoinInlineWhereClause(String aliasName,
+            String value, boolean onClauseInline);
+
+    // ===================================================================================
+    //                                                             AdditionalConditionAsOr
+    //                                                             =======================
+    public void makeAdditionalConditionAsOrEffective();
+
+    public void ignoreAdditionalConditionAsOr();
+
+    // ===================================================================================
+    //                                                                             OrderBy
+    //                                                                             =======
+    public OrderByClause getSqlComponentOfOrderByClause();
+
+    public SqlClause clearOrderBy();
+
+    public SqlClause ignoreOrderBy();
+
+    public SqlClause makeOrderByEffective();
+
+    /**
+     * @param orderByProperty Order-by-property. 'aliasName.columnName/aliasName.columnName/...' (NotNull)
+     * @param registeredOrderByProperty Registered-order-by-property. ([table-name].[column-name]) (Nullable)
+     * @param ascOrDesc Is it ascend or descend?
+     */
+    public void registerOrderBy(String orderByProperty,
+            String registeredOrderByProperty, boolean ascOrDesc);
+
+    /**
+     * @param orderByProperty Order-by-property. 'aliasName.columnName/aliasName.columnName/...' (NotNull)
+     * @param registeredOrderByProperty Registered-order-by-property. ([table-name].[column-name]) (Nullable)
+     * @param ascOrDesc Is it ascend or descend?
+     */
+    public void reverseOrderBy_Or_OverrideOrderBy(String orderByProperty,
+            String registeredOrderByProperty, boolean ascOrDesc);
+
+    public void addNullsFirstToPreviousOrderBy();
+
+    public void addNullsLastToPreviousOrderBy();
+
+    // ===================================================================================
+    //                                                                               Union
+    //                                                                               =====
+    public void registerUnionQuery(String unionClause, boolean unionAll);
+
+    // ===================================================================================
+    //                                                                          FetchScope
+    //                                                                          ==========
+    /**
+     * Fetch first.
+     * @param fetchSize Fetch-size. (NotMinus)
+     * @return this. (NotNull)
+     */
+    public SqlClause fetchFirst(int fetchSize);
+
+    /**
+     * Fetch scope.
+     * @param fetchStartIndex Fetch-start-index. 0 origin. (NotMinus)
+     * @param fetchSize Fetch-size. (NotMinus)
+     * @return this. (NotNull)
+     */
+    public SqlClause fetchScope(int fetchStartIndex, int fetchSize);
+
+    /**
+     * Fetch page.
+     * <p>
+     * When you invoke this, it is normally necessary to invoke 'fetchFirst()' or 'fetchScope()' ahead of that.
+     * But you also can use default-fetch-size without invoking 'fetchFirst()' or 'fetchScope()'.
+     * If you invoke this, your SQL returns [fetch-size] records from [fetch-start-index] calculated by [fetch-page-number].
+     * </p>
+     * @param fetchPageNumber Fetch-page-number. 1 origin. (NotMinus & NotZero: If minus or zero, set one.)
+     * @return this. (NotNull)
+     */
+    public SqlClause fetchPage(int fetchPageNumber);
+
+    /**
+     * Get fetch start index.
+     * @return Fetch start index.
+     */
+    public int getFetchStartIndex();
+
+    /**
+     * Get fetch size.
+     * @return Fetch size.
+     */
+    public int getFetchSize();
+
+    /**
+     * Get fetch page number.
+     * @return Fetch page number.
+     */
+    public int getFetchPageNumber();
+
+    /**
+     * Get page start index.
+     * @return Page start index. 0 origin. (NotMinus)
+     */
+    public int getPageStartIndex();
+
+    /**
+     * Get page end index.
+     * @return Page end index. 0 origin. (NotMinus)
+     */
+    public int getPageEndIndex();
+
+    /**
+     * Is fetch scope effective?
+     * @return Determiantion.
+     */
+    public boolean isFetchScopeEffective();
+
+    /**
+     * Ignore fetch-scope.
+     * @return this. (NotNull)
+     */
+    public SqlClause ignoreFetchScope();
+
+    /**
+     * Make fetch-scope effective.
+     * @return this. (NotNull)
+     */
+    public SqlClause makeFetchScopeEffective();
+
+    /**
+     * Is fetch start index supported?
+     * @return Determination.
+     */
+    public boolean isFetchStartIndexSupported();
+
+    /**
+     * Is fetch size supported?
+     * @return Determination.
+     */
+    public boolean isFetchSizeSupported();
+
+    // ===================================================================================
+    //                                                                     Fetch Narrowing
+    //                                                                     ===============
+    /**
+     * Is fetch-narrowing effective?
+     * @return Determiantion.
+     */
+    public boolean isFetchNarrowingEffective();
+
+    /**
+     * Get fetch-narrowing skip-start-index.
+     * @return Skip-start-index.
+     */
+    public int getFetchNarrowingSkipStartIndex();
+
+    /**
+     * Get fetch-narrowing loop-count.
+     * @return Loop-count.
+     */
+    public int getFetchNarrowingLoopCount();
+
+    // ===================================================================================
+    //                                                                                Lock
+    //                                                                                ====
+    /**
+     * Lock for update.
+     * <p>
+     * If you invoke this, your SQL lock target records for update.
+     * It depends whether this method supports this on the database type.
+     * </p>
+     * @return this. (NotNull)
+     */
+    public SqlClause lockForUpdate();
+
+    // ===================================================================================
+    //                                                                            Resolver
+    //                                                                            ========
+    /**
+     * Resolve join alias name.
+     * @param relationPath Relation path. (NotNull)
+     * @param cqNestNo The nest no of condition query.
+     * @return Resolved join alias name. (NotNull)
+     */
+    public String resolveJoinAliasName(String relationPath, int cqNestNo);
+
+    /**
+     * Resolve nest level expression.
+     * @param name Name. (NotNull)
+     * @param cqNestNo The nest no of condition query.
+     * @return Resolved name about nest level. (NotNull)
+     */
+    public String resolveNestLevelExpression(String name, int cqNestNo);
+
+    /**
+     * Resolve relation no.
+     * @param baseTableName The table name of base. (NotNull)
+     * @param foreignPropertyName The property name of foreign. (NotNull)
+     * @return Resolved relation no.
+     */
+    public int resolveRelationNo(String baseTableName,
+            String foreignPropertyName);
+
+    // ===================================================================================
+    //                                                                    Table Alias Info
+    //                                                                    ================
+    public String getLocalTableAliasName();
+
+    public String getForeignTableAliasPrefix();
+
+    // ===================================================================================
+    //                                                                       Template Mark
+    //                                                                       =============
+    public String getWhereClauseMark();
+
+    public String getWhereFirstConditionMark();
+
+    public String getUnionSelectClauseMark();
+
+    public String getUnionWhereClauseMark();
+
+    public String getUnionWhereFirstConditionMark();
+
+    // =====================================================================================
+    //                                                            Where Clause Simple Filter
+    //                                                            ==========================
+    public void addWhereClauseSimpleFilter(
+            WhereClauseSimpleFilter whereClauseSimpleFilter);
+
+    // =====================================================================================
+    //                                                                 Selected Foreign Info
+    //                                                                 =====================
+    public boolean hasSelectedForeignInfo(String relationPath);
+
+    public void registerSelectedForeignInfo(String relationPath,
+            String foreignPropertyName);
+
+    // ===================================================================================
+    //                                                                       Format Clause
+    //                                                                       =============
+    public boolean isFormatClauseEffective();
+
+    public void makeFormatClauseEffective();
+}


Property changes on: announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/cbean/sqlclause/SqlClause.java
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/cbean/sqlclause/SqlClauseDb2.java
===================================================================
--- announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/cbean/sqlclause/SqlClauseDb2.java	                        (rev 0)
+++ announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/cbean/sqlclause/SqlClauseDb2.java	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,126 @@
+package jp.sf.pal.announcement.db.allcommon.cbean.sqlclause;
+
+/**
+ * SqlClause for DB2.
+ * @author DBFlute(AutoGenerator)
+ */
+public class SqlClauseDb2 extends AbstractSqlClause {
+
+    // ===================================================================================
+    //                                                                           Attribute
+    //                                                                           =========
+    /** String of fetch-first as sql-suffix. */
+    protected String _fetchFirstSqlSuffix = "";
+
+    /** String of lock as from-hint. */
+    protected String _lockSqlSuffix = "";
+
+    // ===================================================================================
+    //                                                                         Constructor
+    //                                                                         ===========
+    /**
+     * Constructor.
+     * @param tableName Table name. (NotNull)
+     **/
+    public SqlClauseDb2(String tableName) {
+        super(tableName);
+    }
+
+    // ===================================================================================
+    //                                                                    OrderBy Override
+    //                                                                    ================
+    @Override
+    protected OrderByClause.OrderByNullsSetupper createOrderByNullsSetupper() {
+        return createOrderByNullsSetupperByCaseWhen();
+    }
+
+    // ===================================================================================
+    //                                                                 FetchScope Override
+    //                                                                 ===================
+    /**
+     * The implementation.
+     */
+    protected void doFetchFirst() {
+        if (isFetchSizeSupported()) {
+            _fetchFirstSqlSuffix = " fetch first " + getFetchSize()
+                    + " rows only";
+        }
+    }
+
+    /**
+     * The implementation. {Unsupported!}
+     */
+    protected void doFetchPage() {
+        if (isFetchSizeSupported()) {
+            if (isFetchStartIndexSupported()) {
+                _fetchFirstSqlSuffix = " fetch first " + getFetchSize()
+                        + " rows only";
+            } else {
+                _fetchFirstSqlSuffix = " fetch first " + getPageEndIndex()
+                        + " rows only";
+            }
+        }
+    }
+
+    /**
+     * The implementation. {Unsupported!}
+     */
+    protected void doClearFetchPageClause() {
+        _fetchFirstSqlSuffix = "";
+    }
+
+    /**
+     * The override.
+     * 
+     * @return Determination.
+     */
+    public boolean isFetchStartIndexSupported() {
+        return false;
+    }
+
+    /**
+     * The implementation.
+     * 
+     * @return this. (NotNull)
+     */
+    public SqlClause lockForUpdate() {
+        _lockSqlSuffix = " for update with RS";
+        return this;
+    }
+
+    /**
+     * The implementation.
+     * 
+     * @return Select-hint. (NotNull)
+     */
+    protected String createSelectHint() {
+        return "";
+    }
+
+    /**
+     * The implementation.
+     * 
+     * @return From-base-table-hint. {select * from table [from-base-table-hint] where ...} (NotNull)
+     */
+    protected String createFromBaseTableHint() {
+        return "";
+    }
+
+    /**
+     * The implementation.
+     * 
+     * @return From-hint. (NotNull)
+     */
+    protected String createFromHint() {
+        return "";
+    }
+
+    /**
+     * The implementation.
+     * 
+     * @return Sql-suffix. (NotNull)
+     */
+    protected String createSqlSuffix() {
+        return _fetchFirstSqlSuffix + _lockSqlSuffix;
+    }
+}


Property changes on: announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/cbean/sqlclause/SqlClauseDb2.java
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/cbean/sqlclause/SqlClauseDefault.java
===================================================================
--- announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/cbean/sqlclause/SqlClauseDefault.java	                        (rev 0)
+++ announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/cbean/sqlclause/SqlClauseDefault.java	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,109 @@
+package jp.sf.pal.announcement.db.allcommon.cbean.sqlclause;
+
+/**
+ * SqlClause for Default.
+ * @author DBFlute(AutoGenerator)
+ */
+public class SqlClauseDefault extends AbstractSqlClause {
+
+    // ===================================================================================
+    //                                                                         Constructor
+    //                                                                         ===========
+    /**
+     * @param tableName Table name. (NotNull)
+     **/
+    public SqlClauseDefault(String tableName) {
+        super(tableName);
+    }
+
+    // ===================================================================================
+    //                                                                    OrderBy Override
+    //                                                                    ================
+    @Override
+    protected OrderByClause.OrderByNullsSetupper createOrderByNullsSetupper() {
+        return createOrderByNullsSetupperByCaseWhen();
+    }
+
+    /**
+     * The implementation.
+     */
+    protected void doFetchFirst() {
+    }
+
+    /**
+     * The implementation.
+     */
+    protected void doFetchPage() {
+    }
+
+    /**
+     * The implementation.
+     */
+    protected void doClearFetchPageClause() {
+    }
+
+    /**
+     * The override.
+     * 
+     * @return Determination.
+     */
+    public boolean isFetchStartIndexSupported() {
+        return false; // Default
+    }
+
+    /**
+     * The override.
+     * 
+     * @return Determination.
+     */
+    public boolean isFetchSizeSupported() {
+        return false; // Default
+    }
+
+    /**
+     * The implementation.
+     * 
+     * @return this. (NotNull)
+     */
+    public SqlClause lockForUpdate() {
+        String msg = "LockForUpdate-SQL is unsupported in the database. Sorry...: "
+                + toString();
+        throw new UnsupportedOperationException(msg);
+    }
+
+    /**
+     * The implementation.
+     * 
+     * @return Select-hint. (NotNull)
+     */
+    protected String createSelectHint() {
+        return "";
+    }
+
+    /**
+     * The implementation.
+     * 
+     * @return From-base-table-hint. {select * from table [from-base-table-hint] where ...} (NotNull)
+     */
+    protected String createFromBaseTableHint() {
+        return "";
+    }
+
+    /**
+     * The implementation.
+     * 
+     * @return From-hint. (NotNull)
+     */
+    protected String createFromHint() {
+        return "";
+    }
+
+    /**
+     * The implementation.
+     * 
+     * @return Sql-suffix. (NotNull)
+     */
+    protected String createSqlSuffix() {
+        return "";
+    }
+}


Property changes on: announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/cbean/sqlclause/SqlClauseDefault.java
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/cbean/sqlclause/SqlClauseDerby.java
===================================================================
--- announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/cbean/sqlclause/SqlClauseDerby.java	                        (rev 0)
+++ announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/cbean/sqlclause/SqlClauseDerby.java	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,119 @@
+package jp.sf.pal.announcement.db.allcommon.cbean.sqlclause;
+
+/**
+ * SqlClause for Default.
+ * 
+ * @author DBFlute(AutoGenerator)
+ */
+public class SqlClauseDerby extends AbstractSqlClause {
+
+    // ===================================================================================
+    //                                                                           Attribute
+    //                                                                           =========
+    /** String of lock as sql-suffix. */
+    protected String _lockSqlSuffix = "";
+
+    // ===================================================================================
+    //                                                                         Constructor
+    //                                                                         ===========
+    /**
+     * Constructor.
+     * @param tableName Table name. (NotNull)
+     **/
+    public SqlClauseDerby(String tableName) {
+        super(tableName);
+    }
+
+    // ===================================================================================
+    //                                                                    OrderBy Override
+    //                                                                    ================
+    @Override
+    protected OrderByClause.OrderByNullsSetupper createOrderByNullsSetupper() {
+        return createOrderByNullsSetupperByCaseWhen();
+    }
+
+    // ===================================================================================
+    //                                                                 FetchScope Override
+    //                                                                 ===================
+    /**
+     * The implementation.
+     */
+    protected void doFetchFirst() {
+    }
+
+    /**
+     * The implementation.
+     */
+    protected void doFetchPage() {
+    }
+
+    /**
+     * The implementation.
+     */
+    protected void doClearFetchPageClause() {
+    }
+
+    /**
+     * The override.
+     * 
+     * @return Determination.
+     */
+    public boolean isFetchStartIndexSupported() {
+        return false; // Default
+    }
+
+    /**
+     * The override.
+     * 
+     * @return Determination.
+     */
+    public boolean isFetchSizeSupported() {
+        return false; // Default
+    }
+
+    /**
+     * The implementation.
+     * 
+     * @return this. (NotNull)
+     */
+    public SqlClause lockForUpdate() {
+        _lockSqlSuffix = " for update";
+        return this;
+    }
+
+    /**
+     * The implementation.
+     * 
+     * @return Select-hint. (NotNull)
+     */
+    protected String createSelectHint() {
+        return "";
+    }
+
+    /**
+     * The implementation.
+     * 
+     * @return From-base-table-hint. {select * from table [from-base-table-hint] where ...} (NotNull)
+     */
+    protected String createFromBaseTableHint() {
+        return "";
+    }
+
+    /**
+     * The implementation.
+     * 
+     * @return From-hint. (NotNull)
+     */
+    protected String createFromHint() {
+        return "";
+    }
+
+    /**
+     * The implementation.
+     * 
+     * @return Sql-suffix. (NotNull)
+     */
+    protected String createSqlSuffix() {
+        return _lockSqlSuffix;
+    }
+}


Property changes on: announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/cbean/sqlclause/SqlClauseDerby.java
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/cbean/sqlclause/SqlClauseFirebird.java
===================================================================
--- announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/cbean/sqlclause/SqlClauseFirebird.java	                        (rev 0)
+++ announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/cbean/sqlclause/SqlClauseFirebird.java	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,102 @@
+package jp.sf.pal.announcement.db.allcommon.cbean.sqlclause;
+
+/**
+ * SqlClause for Firebird.
+ * 
+ * @author DBFlute(AutoGenerator)
+ */
+public class SqlClauseFirebird extends AbstractSqlClause {
+
+    /** String of fetch-scope as select-hint. */
+    protected String _fetchScopeSelectHint = "";
+
+    /** String of lock as sql-suffix. */
+    protected String _lockSqlSuffix = "";
+
+    /**
+     * Constructor.
+     * 
+     * @param tableName Table name. (NotNull)
+     **/
+    public SqlClauseFirebird(String tableName) {
+        super(tableName);
+    }
+
+    /**
+     * The implementation.
+     */
+    protected void doFetchFirst() {
+        if (isFetchSizeSupported()) {
+            _fetchScopeSelectHint = " first " + getFetchSize();
+        }
+    }
+
+    /**
+     * The implementation.
+     */
+    protected void doFetchPage() {
+        if (isFetchStartIndexSupported() && isFetchSizeSupported()) {
+            _fetchScopeSelectHint = " first " + getFetchSize() + " skip "
+                    + getPageStartIndex();
+        }
+        if (isFetchStartIndexSupported() && !isFetchSizeSupported()) {
+            _fetchScopeSelectHint = " skip " + getPageStartIndex();
+        }
+        if (!isFetchStartIndexSupported() && isFetchSizeSupported()) {
+            _fetchScopeSelectHint = " first " + getPageEndIndex();
+        }
+    }
+
+    /**
+     * The implementation.
+     */
+    protected void doClearFetchPageClause() {
+        _fetchScopeSelectHint = "";
+    }
+
+    /**
+     * The implementation.
+     * 
+     * @return this. (NotNull)
+     */
+    public SqlClause lockForUpdate() {
+        _lockSqlSuffix = " for update with lock";
+        return this;
+    }
+
+    /**
+     * The implementation.
+     * 
+     * @return Select-hint. (NotNull)
+     */
+    protected String createSelectHint() {
+        return _fetchScopeSelectHint;
+    }
+
+    /**
+     * The implementation.
+     * 
+     * @return From-base-table-hint. {select * from table [from-base-table-hint] where ...} (NotNull)
+     */
+    protected String createFromBaseTableHint() {
+        return "";
+    }
+
+    /**
+     * The implementation.
+     * 
+     * @return From-hint. (NotNull)
+     */
+    protected String createFromHint() {
+        return "";
+    }
+
+    /**
+     * The implementation.
+     * 
+     * @return Sql-suffix. (NotNull)
+     */
+    protected String createSqlSuffix() {
+        return _lockSqlSuffix;
+    }
+}


Property changes on: announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/cbean/sqlclause/SqlClauseFirebird.java
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/cbean/sqlclause/SqlClauseH2.java
===================================================================
--- announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/cbean/sqlclause/SqlClauseH2.java	                        (rev 0)
+++ announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/cbean/sqlclause/SqlClauseH2.java	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,92 @@
+package jp.sf.pal.announcement.db.allcommon.cbean.sqlclause;
+
+/**
+ * SqlClause for H2.
+ * 
+ * @author DBFlute(AutoGenerator)
+ */
+public class SqlClauseH2 extends AbstractSqlClause {
+
+    /** String of fetch-scope as sql-suffix. */
+    protected String _fetchScopeSqlSuffix = "";
+
+    /** String of lock as sql-suffix. */
+    protected String _lockSqlSuffix = "";
+
+    /**
+     * Constructor.
+     * <p>
+     * @param tableName Table name. (NotNull)
+     **/
+    public SqlClauseH2(String tableName) {
+        super(tableName);
+    }
+
+    /**
+     * The implementation.
+     */
+    protected void doFetchFirst() {
+        doFetchPage();
+    }
+
+    /**
+     * The implementation.
+     */
+    protected void doFetchPage() {
+        _fetchScopeSqlSuffix = " limit " + getFetchSize() + " offset "
+                + getPageStartIndex();
+    }
+
+    /**
+     * The implementation.
+     */
+    protected void doClearFetchPageClause() {
+        _fetchScopeSqlSuffix = "";
+    }
+
+    /**
+     * The implementation.
+     * 
+     * @return this. (NotNull)
+     */
+    public SqlClause lockForUpdate() {
+        _lockSqlSuffix = " for update";
+        return this;
+    }
+
+    /**
+     * The implementation.
+     * 
+     * @return Select-hint. (NotNull)
+     */
+    protected String createSelectHint() {
+        return "";
+    }
+
+    /**
+     * The implementation.
+     * 
+     * @return From-base-table-hint. {select * from table [from-base-table-hint] where ...} (NotNull)
+     */
+    protected String createFromBaseTableHint() {
+        return "";
+    }
+
+    /**
+     * The implementation.
+     * 
+     * @return From-hint. (NotNull)
+     */
+    protected String createFromHint() {
+        return "";
+    }
+
+    /**
+     * The implementation.
+     * 
+     * @return Sql-suffix. (NotNull)
+     */
+    protected String createSqlSuffix() {
+        return _fetchScopeSqlSuffix + _lockSqlSuffix;
+    }
+}


Property changes on: announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/cbean/sqlclause/SqlClauseH2.java
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/cbean/sqlclause/SqlClauseInterbase.java
===================================================================
--- announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/cbean/sqlclause/SqlClauseInterbase.java	                        (rev 0)
+++ announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/cbean/sqlclause/SqlClauseInterbase.java	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,107 @@
+package jp.sf.pal.announcement.db.allcommon.cbean.sqlclause;
+
+/**
+ * SqlClause for Interbase.
+ * 
+ * @author DBFlute(AutoGenerator)
+ */
+public class SqlClauseInterbase extends AbstractSqlClause {
+
+    // ===================================================================================
+    //                                                                           Attribute
+    //                                                                           =========
+    /** String of fetch-scope as select-hint. */
+    protected String _fetchScopeSelectHint = "";
+
+    /** String of lock as sql-suffix. */
+    protected String _lockSqlSuffix = "";
+
+    // ===================================================================================
+    //                                                                         Constructor
+    //                                                                         ===========
+    /**
+     * Constructor.
+     * @param tableName Table name. (NotNull)
+     **/
+    public SqlClauseInterbase(String tableName) {
+        super(tableName);
+    }
+
+    /**
+     * The implementation.
+     */
+    protected void doFetchFirst() {
+        if (isFetchSizeSupported()) {
+            _fetchScopeSelectHint = " first " + getFetchSize();
+        }
+    }
+
+    /**
+     * The implementation.
+     */
+    protected void doFetchPage() {
+        if (isFetchStartIndexSupported() && isFetchSizeSupported()) {
+            _fetchScopeSelectHint = " first " + getFetchSize() + " skip "
+                    + getPageStartIndex();
+        }
+        if (isFetchStartIndexSupported() && !isFetchSizeSupported()) {
+            _fetchScopeSelectHint = " skip " + getPageStartIndex();
+        }
+        if (!isFetchStartIndexSupported() && isFetchSizeSupported()) {
+            _fetchScopeSelectHint = " first " + getPageEndIndex();
+        }
+    }
+
+    /**
+     * The implementation.
+     */
+    protected void doClearFetchPageClause() {
+        _fetchScopeSelectHint = "";
+    }
+
+    /**
+     * The implementation.
+     * 
+     * @return this. (NotNull)
+     */
+    public SqlClause lockForUpdate() {
+        _lockSqlSuffix = " for update with lock";
+        return this;
+    }
+
+    /**
+     * The implementation.
+     * 
+     * @return Select-hint. (NotNull)
+     */
+    protected String createSelectHint() {
+        return _fetchScopeSelectHint;
+    }
+
+    /**
+     * The implementation.
+     * 
+     * @return From-base-table-hint. {select * from table [from-base-table-hint] where ...} (NotNull)
+     */
+    protected String createFromBaseTableHint() {
+        return "";
+    }
+
+    /**
+     * The implementation.
+     * 
+     * @return From-hint. (NotNull)
+     */
+    protected String createFromHint() {
+        return "";
+    }
+
+    /**
+     * The implementation.
+     * 
+     * @return Sql-suffix. (NotNull)
+     */
+    protected String createSqlSuffix() {
+        return _lockSqlSuffix;
+    }
+}


Property changes on: announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/cbean/sqlclause/SqlClauseInterbase.java
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/cbean/sqlclause/SqlClauseMySql.java
===================================================================
--- announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/cbean/sqlclause/SqlClauseMySql.java	                        (rev 0)
+++ announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/cbean/sqlclause/SqlClauseMySql.java	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,107 @@
+package jp.sf.pal.announcement.db.allcommon.cbean.sqlclause;
+
+/**
+ * SqlClause for MySQL.
+ * @author DBFlute(AutoGenerator)
+ */
+public class SqlClauseMySql extends AbstractSqlClause {
+
+    // ===================================================================================
+    //                                                                           Attribute
+    //                                                                           =========
+    /** String of fetch-scope as sql-suffix. */
+    protected String _fetchScopeSqlSuffix = "";
+
+    /** String of lock as sql-suffix. */
+    protected String _lockSqlSuffix = "";
+
+    // ===================================================================================
+    //                                                                         Constructor
+    //                                                                         ===========
+    /**
+     * Constructor.
+     * @param tableName Table name. (NotNull)
+     **/
+    public SqlClauseMySql(String tableName) {
+        super(tableName);
+    }
+
+    // ===================================================================================
+    //                                                                    OrderBy Override
+    //                                                                    ================
+    @Override
+    protected OrderByClause.OrderByNullsSetupper createOrderByNullsSetupper() {
+        return createOrderByNullsSetupperByCaseWhen();
+    }
+
+    // ===================================================================================
+    //                                                                 FetchScope Override
+    //                                                                 ===================
+    /**
+     * The implementation.
+     */
+    protected void doFetchFirst() {
+        doFetchPage();
+    }
+
+    /**
+     * The implementation.
+     */
+    protected void doFetchPage() {
+        _fetchScopeSqlSuffix = " limit " + getPageStartIndex() + ", "
+                + getFetchSize();
+    }
+
+    /**
+     * The implementation.
+     */
+    protected void doClearFetchPageClause() {
+        _fetchScopeSqlSuffix = "";
+    }
+
+    /**
+     * The implementation.
+     * 
+     * @return this. (NotNull)
+     */
+    public SqlClause lockForUpdate() {
+        _lockSqlSuffix = " for update";
+        return this;
+    }
+
+    /**
+     * The implementation.
+     * 
+     * @return Select-hint. (NotNull)
+     */
+    protected String createSelectHint() {
+        return "";
+    }
+
+    /**
+     * The implementation.
+     * 
+     * @return From-base-table-hint. {select * from table [from-base-table-hint] where ...} (NotNull)
+     */
+    protected String createFromBaseTableHint() {
+        return "";
+    }
+
+    /**
+     * The implementation.
+     * 
+     * @return From-hint. (NotNull)
+     */
+    protected String createFromHint() {
+        return "";
+    }
+
+    /**
+     * The implementation.
+     * 
+     * @return Sql-suffix. (NotNull)
+     */
+    protected String createSqlSuffix() {
+        return _fetchScopeSqlSuffix + _lockSqlSuffix;
+    }
+}


Property changes on: announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/cbean/sqlclause/SqlClauseMySql.java
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/cbean/sqlclause/SqlClauseOracle.java
===================================================================
--- announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/cbean/sqlclause/SqlClauseOracle.java	                        (rev 0)
+++ announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/cbean/sqlclause/SqlClauseOracle.java	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,157 @@
+package jp.sf.pal.announcement.db.allcommon.cbean.sqlclause;
+
+import jp.sf.pal.announcement.db.allcommon.dbmeta.DBMeta;
+import jp.sf.pal.announcement.db.allcommon.dbmeta.DBMetaInstanceHandler;
+import jp.sf.pal.announcement.db.allcommon.dbmeta.info.ColumnInfo;
+
+/**
+ * SqlClause for Oracle.
+ * @author DBFlute(AutoGenerator)
+ */
+public class SqlClauseOracle extends AbstractSqlClause {
+
+    // ===================================================================================
+    //                                                                           Attribute
+    //                                                                           =========
+    /** String of fetch-scope as select-hint. */
+    protected String _fetchScopeSelectHint = "";
+
+    /** String of fetch-scope as sql-suffix. */
+    protected String _fetchScopeSqlSuffix = "";
+
+    /** String of lock as sql-suffix. */
+    protected String _lockSqlSuffix = "";
+
+    // ===================================================================================
+    //                                                                         Constructor
+    //                                                                         ===========
+    /**
+     * Constructor.
+     * @param tableName Table name. (NotNull)
+     **/
+    public SqlClauseOracle(String tableName) {
+        super(tableName);
+    }
+
+    // ===================================================================================
+    //                                                          Database Original Override
+    //                                                          ==========================
+    @Override
+    protected String buildUnionClause(String selectClause) {
+
+        // - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+        // Remove select-hint comment from select clause of union
+        // for fetch-scope with union().
+        // - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+
+        selectClause = replaceString(selectClause, SELECT_HINT, "");
+        return super.buildUnionClause(selectClause);
+    }
+
+    // ===================================================================================
+    //                                                                 FetchScope Override
+    //                                                                 ===================
+    /**
+     * The implementation.
+     */
+    protected void doFetchFirst() {
+        doFetchPage();
+    }
+
+    /**
+     * The implementation.
+     */
+    protected void doFetchPage() {
+        if (!isFetchStartIndexSupported() && !isFetchSizeSupported()) {
+            return;
+        }
+        final String ln;
+        if (isFormatClauseEffective()) {
+            ln = getLineSeparator();
+        } else {
+            ln = "";
+        }
+        _fetchScopeSelectHint = " * from (select base.*, rownum as rn from ("
+                + ln + "select";
+        _fetchScopeSqlSuffix = "";
+        if (isFetchStartIndexSupported()) {
+            _fetchScopeSqlSuffix = ") base )" + ln + " where rn > "
+                    + getPageStartIndex();
+        }
+        if (isFetchSizeSupported()) {
+            if (isFetchStartIndexSupported()) {
+                _fetchScopeSqlSuffix = _fetchScopeSqlSuffix + " and rn <= "
+                        + getPageEndIndex();
+            } else {
+                _fetchScopeSqlSuffix = ") base )" + ln + " where rn <= "
+                        + getPageEndIndex();
+            }
+        }
+    }
+
+    /**
+     * The implementation.
+     */
+    protected void doClearFetchPageClause() {
+        _fetchScopeSelectHint = "";
+        _fetchScopeSqlSuffix = "";
+    }
+
+    // ===================================================================================
+    //                                                                       Lock Override
+    //                                                                       =============
+    /**
+     * The implementation.
+     * @return this. (NotNull)
+     */
+    public SqlClause lockForUpdate() {
+        final DBMeta dbmeta = DBMetaInstanceHandler.findDBMeta(_tableName);
+        if (dbmeta.hasPrimaryKey()) {
+            final String primaryKeyColumnName = dbmeta.getPrimaryUniqueInfo()
+                    .getFirstColumn().getColumnDbName();
+            _lockSqlSuffix = " for update of " + getLocalTableAliasName() + "."
+                    + primaryKeyColumnName;
+        } else {
+            final String randomColumnName = ((ColumnInfo) dbmeta
+                    .getColumnInfoList().get(0)).getColumnDbName();
+            _lockSqlSuffix = " for update of " + getLocalTableAliasName() + "."
+                    + randomColumnName;
+        }
+        return this;
+    }
+
+    // ===================================================================================
+    //                                                                       Hint Override
+    //                                                                       =============
+    /**
+     * The implementation.
+     * @return Select-hint. (NotNull)
+     */
+    protected String createSelectHint() {
+        return _fetchScopeSelectHint;
+    }
+
+    /**
+     * The implementation.
+     * @return From-base-table-hint. {select * from table [from-base-table-hint] where ...} (NotNull)
+     */
+    protected String createFromBaseTableHint() {
+        return "";
+    }
+
+    /**
+     * The implementation.
+     * @return From-hint. (NotNull)
+     */
+    protected String createFromHint() {
+        return "";
+    }
+
+    /**
+     * The implementation.
+     * @return Sql-suffix. (NotNull)
+     */
+    protected String createSqlSuffix() {
+        return _fetchScopeSqlSuffix + _lockSqlSuffix;
+    }
+}


Property changes on: announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/cbean/sqlclause/SqlClauseOracle.java
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/cbean/sqlclause/SqlClausePostgreSql.java
===================================================================
--- announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/cbean/sqlclause/SqlClausePostgreSql.java	                        (rev 0)
+++ announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/cbean/sqlclause/SqlClausePostgreSql.java	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,92 @@
+package jp.sf.pal.announcement.db.allcommon.cbean.sqlclause;
+
+/**
+ * SqlClause for PostreSQL.
+ * 
+ * @author DBFlute(AutoGenerator)
+ */
+public class SqlClausePostgreSql extends AbstractSqlClause {
+
+    /** String of fetch-scope as sql-suffix. */
+    protected String _fetchScopeSqlSuffix = "";
+
+    /** String of lock as sql-suffix. */
+    protected String _lockSqlSuffix = "";
+
+    /**
+     * Constructor.
+     * 
+     * @param tableName Table name. (NotNull)
+     **/
+    public SqlClausePostgreSql(String tableName) {
+        super(tableName);
+    }
+
+    /**
+     * The implementation.
+     */
+    protected void doFetchFirst() {
+        doFetchPage();
+    }
+
+    /**
+     * The implementation.
+     */
+    protected void doFetchPage() {
+        _fetchScopeSqlSuffix = " offset " + getPageStartIndex() + " limit "
+                + getFetchSize();
+    }
+
+    /**
+     * The implementation.
+     */
+    protected void doClearFetchPageClause() {
+        _fetchScopeSqlSuffix = "";
+    }
+
+    /**
+     * The implementation.
+     * 
+     * @return this. (NotNull)
+     */
+    public SqlClause lockForUpdate() {
+        _lockSqlSuffix = " for update";
+        return this;
+    }
+
+    /**
+     * The implementation.
+     * 
+     * @return Select-hint. (NotNull)
+     */
+    protected String createSelectHint() {
+        return "";
+    }
+
+    /**
+     * The implementation.
+     * 
+     * @return From-base-table-hint. {select * from table [from-base-table-hint] where ...} (NotNull)
+     */
+    protected String createFromBaseTableHint() {
+        return "";
+    }
+
+    /**
+     * The implementation.
+     * 
+     * @return From-hint. (NotNull)
+     */
+    protected String createFromHint() {
+        return "";
+    }
+
+    /**
+     * The implementation.
+     * 
+     * @return Sql-suffix. (NotNull)
+     */
+    protected String createSqlSuffix() {
+        return _fetchScopeSqlSuffix + _lockSqlSuffix;
+    }
+}


Property changes on: announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/cbean/sqlclause/SqlClausePostgreSql.java
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/cbean/sqlclause/SqlClauseSqlServer.java
===================================================================
--- announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/cbean/sqlclause/SqlClauseSqlServer.java	                        (rev 0)
+++ announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/cbean/sqlclause/SqlClauseSqlServer.java	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,125 @@
+package jp.sf.pal.announcement.db.allcommon.cbean.sqlclause;
+
+/**
+ * SqlClause for MSSQL.
+ * @author DBFlute(AutoGenerator)
+ */
+public class SqlClauseSqlServer extends AbstractSqlClause {
+
+    // ===================================================================================
+    //                                                                           Attribute
+    //                                                                           =========
+    /** String of fetch-first as select-hint. */
+    protected String _fetchFirstSelectHint = "";
+
+    /** String of lock as from-hint. */
+    protected String _lockFromHint = "";
+
+    // ===================================================================================
+    //                                                                         Constructor
+    //                                                                         ===========
+    /**
+     * Constructor.
+     * @param tableName Table name. (NotNull)
+     **/
+    public SqlClauseSqlServer(String tableName) {
+        super(tableName);
+    }
+
+    // ===================================================================================
+    //                                                                    OrderBy Override
+    //                                                                    ================
+    @Override
+    protected OrderByClause.OrderByNullsSetupper createOrderByNullsSetupper() {
+        return createOrderByNullsSetupperByCaseWhen();
+    }
+
+    // ===================================================================================
+    //                                                                 FetchScope Override
+    //                                                                 ===================
+    /**
+     * The implementation.
+     */
+    protected void doFetchFirst() {
+        if (isFetchSizeSupported()) {
+            _fetchFirstSelectHint = " top " + getFetchSize();
+        }
+    }
+
+    /**
+     * The implementation.
+     */
+    protected void doFetchPage() {
+        if (isFetchSizeSupported()) {
+            if (isFetchStartIndexSupported()) {
+                _fetchFirstSelectHint = " top " + getFetchSize();
+            } else {
+                _fetchFirstSelectHint = " top " + getPageEndIndex();
+            }
+        }
+    }
+
+    /**
+     * The implementation.
+     */
+    protected void doClearFetchPageClause() {
+        _fetchFirstSelectHint = "";
+    }
+
+    /**
+     * @return Determination.
+     */
+    public boolean isFetchStartIndexSupported() {
+        return false;
+    }
+
+    // ===================================================================================
+    //                                                                       Lock Override
+    //                                                                       =============
+    /**
+     * The implementation. {Implement}
+     * @return this. (NotNull)
+     */
+    public SqlClause lockForUpdate() {
+        _lockFromHint = " with (updlock)";
+        return this;
+    }
+
+    // ===================================================================================
+    //                                                                       Hint Override
+    //                                                                       =============
+    /**
+     * The implementation.
+     * @return Select-hint. (NotNull)
+     */
+    protected String createSelectHint() {
+        return _fetchFirstSelectHint;
+    }
+
+    /**
+     * The implementation.
+     * 
+     * @return From-base-table-hint. {select * from table [from-base-table-hint] where ...} (NotNull)
+     */
+    protected String createFromBaseTableHint() {
+        return _lockFromHint;
+    }
+
+    /**
+     * The implementation.
+     * 
+     * @return From-hint. (NotNull)
+     */
+    protected String createFromHint() {
+        return "";
+    }
+
+    /**
+     * The implementation.
+     * 
+     * @return Sql-suffix. (NotNull)
+     */
+    protected String createSqlSuffix() {
+        return "";
+    }
+}


Property changes on: announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/cbean/sqlclause/SqlClauseSqlServer.java
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/cbean/sqlclause/WhereClauseSimpleFilter.java
===================================================================
--- announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/cbean/sqlclause/WhereClauseSimpleFilter.java	                        (rev 0)
+++ announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/cbean/sqlclause/WhereClauseSimpleFilter.java	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,144 @@
+package jp.sf.pal.announcement.db.allcommon.cbean.sqlclause;
+
+import jp.sf.pal.announcement.db.allcommon.dbmeta.info.ColumnInfo;
+
+/**
+ * The interface of simple filter for where clause.
+ * 
+ * @author DBFlute(AutoGenerator)
+ */
+public interface WhereClauseSimpleFilter {
+
+    public static final String BIND_COMMENT_BEGIN_PART = "/*dto";
+
+    public static final String BIND_COMMENT_END_PART = "*/null";
+
+    public static final String EMBEDDED_COMMENT_BEGIN_PART = "/*$dto";
+
+    public static final String EMBEDDED_COMMENT_END_PART = "*/null";
+
+    public static final String EMBEDDED_COMMENT_QUOTED_BEGIN_PART = "'/*$dto";
+
+    public static final String EMBEDDED_COMMENT_QUOTED_END_PART = "*/'dummy''";
+
+    /**
+     * Filter clause element.
+     * 
+     * @param clauseElement Clause element of where. (NotNull and NotEmpty)
+     * @return Filtered where clause. (NotNull and NotEmpty)
+     */
+    public String filterClauseElement(String clauseElement);
+
+    /**
+     * The simple filter for where clause to embedded. <br />
+     * *Attension -- Target column is not perfect. This class determines by column name only!
+     * So when the column name of base table is same as the column name of join table, both are target!
+     * 
+     * @author DBFlute(AutoGenerator)
+     */
+    public static class WhereClauseToEmbeddedSimpleFilter implements
+            WhereClauseSimpleFilter {
+
+        protected java.util.Set<ColumnInfo> _filterTargetColumnInfoSet;
+
+        public WhereClauseToEmbeddedSimpleFilter(
+                ColumnInfo filterTargetColumnInfo) {
+            this._filterTargetColumnInfoSet = new java.util.HashSet<ColumnInfo>();
+            this._filterTargetColumnInfoSet.add(filterTargetColumnInfo);
+        }
+
+        public WhereClauseToEmbeddedSimpleFilter(
+                java.util.Set<ColumnInfo> filterTargetColumnInfoSet) {
+            this._filterTargetColumnInfoSet = filterTargetColumnInfoSet;
+        }
+
+        /**
+         * Filter clause element.
+         * 
+         * @param clauseElement Clause element of where. (NotNull and NotEmpty)
+         * @return Filtered where clause. (NotNull and NotEmpty)
+         */
+        public String filterClauseElement(String clauseElement) {
+            if (_filterTargetColumnInfoSet == null
+                    || _filterTargetColumnInfoSet.isEmpty()) {
+                return toEmbedded(clauseElement);
+            }
+            for (final java.util.Iterator ite = _filterTargetColumnInfoSet
+                    .iterator(); ite.hasNext();) {
+                final ColumnInfo columnInfo = (ColumnInfo) ite.next();
+                if (isTargetClause(clauseElement, columnInfo.getColumnDbName())) {
+                    return toEmbedded(clauseElement);
+                }
+            }
+            return clauseElement;
+        }
+
+        protected boolean isTargetClause(String clauseElement,
+                final String columnDbName) {
+            return clauseElement.indexOf("." + columnDbName + " ") >= 0;
+        }
+
+        protected String toEmbedded(String clauseElement) {
+            clauseElement = replace(clauseElement, BIND_COMMENT_BEGIN_PART,
+                    EMBEDDED_COMMENT_BEGIN_PART);
+            clauseElement = replace(clauseElement, BIND_COMMENT_END_PART,
+                    EMBEDDED_COMMENT_END_PART);
+            return clauseElement;
+        }
+
+        protected final String replace(String text, String fromText,
+                String toText) {
+
+            if (text == null || fromText == null || toText == null) {
+                return null;
+            }
+            StringBuffer buf = new StringBuffer(100);
+            int pos = 0;
+            int pos2 = 0;
+            while (true) {
+                pos = text.indexOf(fromText, pos2);
+                if (pos == 0) {
+                    buf.append(toText);
+                    pos2 = fromText.length();
+                } else if (pos > 0) {
+                    buf.append(text.substring(pos2, pos));
+                    buf.append(toText);
+                    pos2 = pos + fromText.length();
+                } else {
+                    buf.append(text.substring(pos2));
+                    break;
+                }
+            }
+            return buf.toString();
+        }
+    }
+
+    /**
+     * The simple filter for where clause to embedded and quoted. <br />
+     * *Attension -- Target column is not perfect. This class determines by column name only!
+     * So when the column name of base table is same as the column name of join table, both are target!
+     * 
+     * @author DBFlute(AutoGenerator)
+     */
+    public static class WhereClauseToEmbeddedQuotedSimpleFilter extends
+            WhereClauseToEmbeddedSimpleFilter {
+
+        public WhereClauseToEmbeddedQuotedSimpleFilter(
+                ColumnInfo filterTargetColumnInfo) {
+            super(filterTargetColumnInfo);
+        }
+
+        public WhereClauseToEmbeddedQuotedSimpleFilter(
+                java.util.Set<ColumnInfo> filterTargetColumnInfoSet) {
+            super(filterTargetColumnInfoSet);
+        }
+
+        protected String toEmbedded(String clauseElement) {
+            clauseElement = replace(clauseElement, BIND_COMMENT_BEGIN_PART,
+                    EMBEDDED_COMMENT_QUOTED_BEGIN_PART);
+            clauseElement = replace(clauseElement, BIND_COMMENT_END_PART,
+                    EMBEDDED_COMMENT_QUOTED_END_PART);
+            return clauseElement;
+        }
+    }
+}


Property changes on: announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/cbean/sqlclause/WhereClauseSimpleFilter.java
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/dbmeta/AbstractDBMeta.java
===================================================================
--- announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/dbmeta/AbstractDBMeta.java	                        (rev 0)
+++ announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/dbmeta/AbstractDBMeta.java	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,883 @@
+package jp.sf.pal.announcement.db.allcommon.dbmeta;
+
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+
+import jp.sf.pal.announcement.db.allcommon.Entity;
+import jp.sf.pal.announcement.db.allcommon.dbmeta.info.ColumnInfo;
+import jp.sf.pal.announcement.db.allcommon.dbmeta.info.ForeignInfo;
+import jp.sf.pal.announcement.db.allcommon.dbmeta.info.ReferrerInfo;
+import jp.sf.pal.announcement.db.allcommon.dbmeta.info.RelationInfo;
+import jp.sf.pal.announcement.db.allcommon.helper.MapListString;
+import jp.sf.pal.announcement.db.allcommon.helper.MapListStringImpl;
+import jp.sf.pal.announcement.db.allcommon.helper.MapStringBuilder;
+import jp.sf.pal.announcement.db.allcommon.helper.MapStringBuilderImpl;
+import jp.sf.pal.announcement.db.allcommon.util.SimpleAssertUtil;
+import jp.sf.pal.announcement.db.allcommon.util.SimpleStringUtil;
+
+/**
+ * The abstract class of dbmeta.
+ * 
+ * @author DBFlute(AutoGenerator)
+ */
+ @ SuppressWarnings("unchecked")
+public abstract class AbstractDBMeta implements DBMeta {
+
+    // =====================================================================================
+    //                                                                         Name Handling
+    //                                                                         =============
+    /**
+     * The implementation.
+     * 
+     * @param flexibleName Flexible-name(IgnoreCase). (NotNull and NotEmpty)
+     * @return Determination.
+     */
+    public boolean hasFlexibleName(String flexibleName) {
+        final String key = flexibleName.toLowerCase();
+        if (getDbNamePropertyNameKeyToLowerMap().containsKey(key)) {
+            return true;
+        }
+        if (getPropertyNameDbNameKeyToLowerMap().containsKey(key)) {
+            return true;
+        }
+        return false;
+    }
+
+    /**
+     * The implementation.
+     * 
+     * @param flexibleName Flexible-name(IgnoreCase). (NotNull and NotEmpty)
+     * @return DB name. (NotNull and NotEmpty)
+     */
+    public String findDbName(String flexibleName) {
+        final String key = flexibleName.toLowerCase();
+        if (getPropertyNameDbNameKeyToLowerMap().containsKey(key)) {
+            return (String) getPropertyNameDbNameKeyToLowerMap().get(key);
+        }
+        if (getDbNamePropertyNameKeyToLowerMap().containsKey(key)) {
+            final String dbNameKeyToLower = ((String) getDbNamePropertyNameKeyToLowerMap()
+                    .get(key)).toLowerCase();
+            if (getPropertyNameDbNameKeyToLowerMap().containsKey(
+                    dbNameKeyToLower)) {
+                return (String) getPropertyNameDbNameKeyToLowerMap().get(
+                        dbNameKeyToLower);
+            }
+        }
+        String msg = "Not found object by the flexible name: flexibleName="
+                + flexibleName;
+        throw new IllegalStateException(msg);
+    }
+
+    /**
+     * The implementation.
+     * 
+     * @param flexibleName Flexible-name(IgnoreCase). (NotNull and NotEmpty)
+     * @return DB name. (NotNull and NotEmpty)
+     */
+    public String findPropertyName(String flexibleName) {
+        final String key = flexibleName.toLowerCase();
+        if (getDbNamePropertyNameKeyToLowerMap().containsKey(key)) {
+            return (String) getDbNamePropertyNameKeyToLowerMap().get(key);
+        }
+        if (getPropertyNameDbNameKeyToLowerMap().containsKey(key)) {
+            final String dbNameToLower = ((String) getPropertyNameDbNameKeyToLowerMap()
+                    .get(key)).toLowerCase();
+            if (getDbNamePropertyNameKeyToLowerMap().containsKey(dbNameToLower)) {
+                return (String) getDbNamePropertyNameKeyToLowerMap().get(
+                        dbNameToLower);
+            }
+        }
+        String msg = "Not found object by the flexible name: flexibleName="
+                + flexibleName;
+        throw new IllegalStateException(msg);
+    }
+
+    // ===================================================================================
+    //                                                                         Column Info
+    //                                                                         ===========
+    /**
+     * The implementation.
+     * 
+     * @param columnFlexibleName The flexible name of the column. (NotNull)
+     * @return Determination.
+     */
+    public boolean hasColumn(String columnFlexibleName) {
+        if (!hasFlexibleName(columnFlexibleName)) {
+            return false;
+        }
+        final String propertyName = findPropertyName(columnFlexibleName);
+        return hasMethod("column" + initCap(propertyName));
+    }
+
+    /**
+     * The implementation.
+     * 
+     * @param columnFlexibleName The flexible name of the column. (NotNull and NotEmpty)
+     * @return The information of the column. (NotNull)
+     */
+    public ColumnInfo findColumnInfo(String columnFlexibleName) {
+        assertStringNotNullAndNotTrimmedEmpty("columnFlexibleName",
+                columnFlexibleName);
+        if (!hasColumn(columnFlexibleName)) {
+            String msg = "Not found column by columnFlexibleName: "
+                    + columnFlexibleName;
+            msg = msg + " tableName=" + getTableDbName();
+            throw new IllegalArgumentException(msg);
+        }
+        final String propertyName = findPropertyName(columnFlexibleName);
+        final String methodName = "column" + initCap(propertyName);
+        java.lang.reflect.Method method = null;
+        try {
+            method = this.getClass().getMethod(methodName, new Class[] {});
+        } catch (NoSuchMethodException e) {
+            String msg = "Not found column by columnFlexibleName: "
+                    + columnFlexibleName;
+            msg = msg + " tableName=" + getTableDbName() + " methodName="
+                    + methodName;
+            throw new RuntimeException(msg, e);
+        }
+        try {
+            return (ColumnInfo) method.invoke(this, new Object[] {});
+        } catch (IllegalAccessException e) {
+            throw new RuntimeException(e);
+        } catch (java.lang.reflect.InvocationTargetException e) {
+            throw new RuntimeException(e.getCause());
+        }
+    }
+
+    // ===================================================================================
+    //                                                                       Relation Info
+    //                                                                       =============
+    /**
+     * The implementation.
+     * 
+     * @param relationPropertyName Relation property name. (Both OK - InitCap or not). (NotNull)
+     * @return The information of relation. (NotNull)
+     */
+    public RelationInfo findRelationInfo(String relationPropertyName) {
+        assertStringNotNullAndNotTrimmedEmpty("relationPropertyName",
+                relationPropertyName);
+        return hasForeign(relationPropertyName) ? (RelationInfo) findForeignInfo(relationPropertyName)
+                : (RelationInfo) findReferrerInfo(relationPropertyName);
+    }
+
+    // -----------------------------------------------------
+    //                                       Foreign Element
+    //                                       ---------------
+    /**
+     * The implementation.
+     * 
+     * @param foreignPropertyName The property name of foreign. (Both OK - InitCap or not). (NotNull)
+     * @return Determination. (NotNull)
+     */
+    public boolean hasForeign(String foreignPropertyName) {
+        assertStringNotNullAndNotTrimmedEmpty("foreignPropertyName",
+                foreignPropertyName);
+        final String methodName = buildRelationInfoGetterMethodNameInitCap(
+                "foreign", foreignPropertyName);
+        return hasMethod(methodName);
+    }
+
+    /**
+     * The implementation.
+     * 
+     * @param foreignPropertyName The property name of foreign. (Both OK - InitCap or not). (NotNull)
+     * @return Foreign DBMeta. (NotNull)
+     */
+    public DBMeta findForeignDBMeta(String foreignPropertyName) {
+        return findForeignInfo(foreignPropertyName).getForeignDBMeta();
+    }
+
+    /**
+     * Get foreign information.
+     * 
+     * @param foreignPropertyName The property name of foreign. (Both OK - InitCap or not). (NotNull)
+     * @return Foreign information. (NotNull)
+     */
+    public jp.sf.pal.announcement.db.allcommon.dbmeta.info.ForeignInfo findForeignInfo(
+            String foreignPropertyName) {
+        assertStringNotNullAndNotTrimmedEmpty("foreignPropertyName",
+                foreignPropertyName);
+        final String methodName = buildRelationInfoGetterMethodNameInitCap(
+                "foreign", foreignPropertyName);
+        java.lang.reflect.Method method = null;
+        try {
+            method = this.getClass().getMethod(methodName, new Class[] {});
+        } catch (NoSuchMethodException e) {
+            String msg = "Not found foreign by foreignPropertyName: foreignPropertyName="
+                    + foreignPropertyName;
+            msg = msg + " tableName=" + getTableDbName() + " methodName="
+                    + methodName;
+            throw new RuntimeException(msg, e);
+        }
+        try {
+            return (ForeignInfo) method.invoke(this, new Object[] {});
+        } catch (IllegalAccessException e) {
+            throw new RuntimeException(e);
+        } catch (java.lang.reflect.InvocationTargetException e) {
+            throw new RuntimeException(e.getCause());
+        }
+    }
+
+    // -----------------------------------------------------
+    //                                      Referrer Element
+    //                                      ----------------
+
+    /**
+     * The implementation.
+     * 
+     * @param referrerPropertyName The property name of referrer. (Both OK - InitCap or not). (NotNull)
+     * @return Determination. (NotNull)
+     */
+    public boolean hasReferrer(String referrerPropertyName) {
+        assertStringNotNullAndNotTrimmedEmpty("referrerPropertyName",
+                referrerPropertyName);
+        final String methodName = buildRelationInfoGetterMethodNameInitCap(
+                "referrer", referrerPropertyName);
+        return hasMethod(methodName);
+    }
+
+    /**
+     * The implementation.
+     * 
+     * @param referrerPropertyName The property name of referrer. (Both OK - InitCap or not). (NotNull)
+     * @return Referrer DBMeta. (NotNull)
+     */
+    public DBMeta findReferrerDBMeta(String referrerPropertyName) {
+        assertStringNotNullAndNotTrimmedEmpty("referrerPropertyName",
+                referrerPropertyName);
+        return findReferrerInfo(referrerPropertyName).getReferrerDBMeta();
+    }
+
+    /**
+     * The implementation.
+     * 
+     * @param referrerPropertyName The property name of referrer. (Both OK - InitCap or not). (NotNull)
+     * @return Referrer information. (NotNull)
+     */
+    public ReferrerInfo findReferrerInfo(String referrerPropertyName) {
+        assertStringNotNullAndNotTrimmedEmpty("referrerPropertyName",
+                referrerPropertyName);
+        final String methodName = buildRelationInfoGetterMethodNameInitCap(
+                "referrer", referrerPropertyName);
+        java.lang.reflect.Method method = null;
+        try {
+            method = this.getClass().getMethod(methodName, new Class[] {});
+        } catch (NoSuchMethodException e) {
+            String msg = "Not found referrer by referrerPropertyName: referrerPropertyName="
+                    + referrerPropertyName;
+            msg = msg + " tableName=" + getTableDbName() + " methodName="
+                    + methodName;
+            throw new RuntimeException(msg, e);
+        }
+        try {
+            return (ReferrerInfo) method.invoke(this, new Object[] {});
+        } catch (IllegalAccessException e) {
+            throw new RuntimeException(e);
+        } catch (java.lang.reflect.InvocationTargetException e) {
+            throw new RuntimeException(e.getCause());
+        }
+    }
+
+    protected String buildRelationInfoGetterMethodNameInitCap(
+            String targetName, String relationPropertyName) {
+        return targetName + relationPropertyName.substring(0, 1).toUpperCase()
+                + relationPropertyName.substring(1);
+    }
+
+    // -----------------------------------------------------
+    //                                        Relation Trace
+    //                                        --------------
+    /**
+     * Relation trace.
+     */
+    protected static abstract class AbstractRelationTrace implements
+            RelationTrace {
+
+        /** The list of relation. */
+        protected List<RelationInfo> _relationList;
+
+        /** The list of relation trace. */
+        protected List<AbstractRelationTrace> _relationTraceList;
+
+        /** The list of relation info as trace. */
+        protected List<RelationInfo> _traceRelationInfoList;
+
+        /** The column info as trace. */
+        protected ColumnInfo _traceColumnInfo;
+
+        /** The handler of fixed relation trace. */
+        protected RelationTraceFixHandler _relationTraceFixHandler;
+
+        /**
+         * Constructor for first step.
+         * 
+         * @param relationTraceFixHandler The handler of fixed relation trace. (Nullable)
+         */
+        public AbstractRelationTrace(
+                RelationTraceFixHandler relationTraceFixHandler) {
+            this(new ArrayList<RelationInfo>(),
+                    new ArrayList<AbstractRelationTrace>());
+            this._relationTraceFixHandler = relationTraceFixHandler;
+        }
+
+        /**
+         * Constructor for relation step.
+         * 
+         * @param relationList The list of relation. (NotNull)
+         * @param relationTraceList The list of relation trace. (NotNull)
+         */
+        public AbstractRelationTrace(List<RelationInfo> relationList,
+                List<AbstractRelationTrace> relationTraceList) {
+            this._relationList = relationList;
+            this._relationTraceList = relationTraceList;
+            this._relationTraceList.add(this);
+        }
+
+        /**
+         * The implementation.
+         * 
+         * @return The trace of relation as the list of relation info. (NotNull)
+         */
+        public List<RelationInfo> getTraceRelation() {
+            return _traceRelationInfoList;
+        }
+
+        /**
+         * The implementation.
+         * 
+         * @return The trace of column as column info. (Nullable)
+         */
+        public ColumnInfo getTraceColumn() {
+            return _traceColumnInfo;
+        }
+
+        /**
+         * Fix trace.
+         * 
+         * @param traceRelationInfoList The trace of relation as the list of relation info. (NotNull)
+         * @param traceColumnInfo The trace of column as column info. (Nullable)
+         * @return Relation trace(result). (NotNull)
+         */
+        protected RelationTrace fixTrace(
+                List<RelationInfo> traceRelationInfoList,
+                ColumnInfo traceColumnInfo) {
+            final AbstractRelationTrace localRelationTrace = (AbstractRelationTrace) _relationTraceList
+                    .get(0);
+            localRelationTrace.setTraceRelation(traceRelationInfoList);
+            localRelationTrace.setTraceColumn(traceColumnInfo);
+            localRelationTrace.recycle();
+            localRelationTrace.handleFixedRelationTrace();
+            return localRelationTrace;
+        }
+
+        protected void setTraceRelation(List<RelationInfo> traceRelationInfoList) {
+            this._traceRelationInfoList = traceRelationInfoList;
+        }
+
+        protected void setTraceColumn(ColumnInfo traceColumn) {
+            this._traceColumnInfo = traceColumn;
+        }
+
+        /**
+         * The implementation.
+         */
+        protected void recycle() {
+            this._relationList = new ArrayList<RelationInfo>();
+            this._relationTraceList = new ArrayList<AbstractRelationTrace>();
+            this._relationTraceList.add(this);
+        }
+
+        protected void handleFixedRelationTrace() {
+            if (_relationTraceFixHandler != null) {
+                _relationTraceFixHandler.handleFixedTrace(this);
+            }
+        }
+    }
+
+    // ===================================================================================
+    //                                                                        JDBC Support
+    //                                                                        ============
+    /**
+     * The implementation.
+     * 
+     * @param conn Connection. (NotNull)
+     * @param entity Entity. (NotNull)
+     * @return Prepared insert clause. (NotNull and NotEmpty)
+     */
+    public int insertEntity(java.sql.Connection conn, Entity entity) {
+        return insertEntity(conn, entity, new PreparedInsertClauseOption());
+    }
+
+    /**
+     * The implementation.
+     * 
+     * @param conn Connection. (NotNull)
+     * @param entity Entity. (NotNull)
+     * @param preparedInsertClauseOption Prepared insert clause option. (NotNull)
+     * @return Prepared insert clause. (NotNull and NotEmpty)
+     */
+    public int insertEntity(java.sql.Connection conn, Entity entity,
+            PreparedInsertClauseOption preparedInsertClauseOption) {
+        checkDowncast(entity);
+        final String sql = getPreparedInsertClause(preparedInsertClauseOption);
+        java.sql.PreparedStatement ps = null;
+        try {
+            ps = conn.prepareStatement(sql);
+            final List<Object> valueList = convertToColumnValueList(entity);
+            int settingIndex = 1;
+            for (final Iterator<Object> ite = valueList.iterator(); ite
+                    .hasNext();) {
+                Object value = ite.next();
+                if (value == null) {
+                    ps.setNull(settingIndex, java.sql.Types.VARCHAR);// Giving a clear-cut attitude!
+                } else {
+                    ps.setObject(settingIndex, value);
+                }
+                ++settingIndex;
+            }
+            return ps.executeUpdate();
+        } catch (java.sql.SQLException e) {
+            String msg = "The sql threw the exception: sql=" + sql;
+            throw new RuntimeException(msg, e);
+        } finally {
+            if (ps != null) {
+                try {
+                    ps.close();
+                } catch (java.sql.SQLException ignored) {
+                }
+            }
+        }
+    }
+
+    // ===================================================================================
+    //                                                                          Map String
+    //                                                                          ==========
+    /**
+     * The implementation.
+     * 
+     * @return Map list string that is prepared. (NotNull)
+     */
+    public MapListString createMapListString() {
+        return MapStringUtil.createMapListString();
+    }
+
+    /**
+     * The implementation.
+     * 
+     * @return Map string builder that is prepared. (NotNull)
+     */
+    public MapStringBuilder createMapStringBuilder() {
+        final List<String> columnDbNameList = new ArrayList<String>();
+        for (final Iterator<ColumnInfo> ite = getColumnInfoList().iterator(); ite
+                .hasNext();) {
+            final ColumnInfo columnInfo = (ColumnInfo) ite.next();
+            columnDbNameList.add(columnInfo.getColumnDbName());
+        }
+        return MapStringUtil.createMapStringBuilder(columnDbNameList);
+    }
+
+    // ===================================================================================
+    //                                                               Entity Property Setup
+    //                                                               =====================
+    // It's very INTERNAL!
+    protected <ENTITY extends Entity> void registerEntityPropertySetupper(
+            String columnName,
+            String propertyName,
+            EntityPropertySetupper<ENTITY> setupper,
+            Map<String, EntityPropertySetupper<ENTITY>> entityPropertySetupperMap) {
+        entityPropertySetupperMap.put(columnName, setupper);
+        entityPropertySetupperMap.put(propertyName, setupper);
+        entityPropertySetupperMap.put(columnName.toLowerCase(), setupper);
+        entityPropertySetupperMap.put(propertyName.toLowerCase(), setupper);
+    }
+
+    // ===================================================================================
+    //                                                                          Util Class
+    //                                                                          ==========
+    /**
+     * This class is for Internal. Don't use this!
+     */
+    protected static class MapStringUtil {
+        public static void acceptPrimaryKeyMapString(
+                String primaryKeyMapString, Entity entity) {
+            if (primaryKeyMapString == null) {
+                String msg = "The argument[primaryKeyMapString] should not be null.";
+                throw new IllegalArgumentException(msg);
+            }
+            final String prefix = MAP_STRING_MAP_MARK + MAP_STRING_START_BRACE;
+            final String suffix = MAP_STRING_END_BRACE;
+            if (!primaryKeyMapString.trim().startsWith(prefix)) {
+                primaryKeyMapString = prefix + primaryKeyMapString;
+            }
+            if (!primaryKeyMapString.trim().endsWith(suffix)) {
+                primaryKeyMapString = primaryKeyMapString + suffix;
+            }
+            MapListString mapListString = createMapListString();
+            entity.getDBMeta().acceptPrimaryKeyMap(entity,
+                    mapListString.generateMap(primaryKeyMapString));
+        }
+
+        public static void acceptColumnValueMapString(
+                String columnValueMapString, Entity entity) {
+            if (columnValueMapString == null) {
+                String msg = "The argument[columnValueMapString] should not be null.";
+                throw new IllegalArgumentException(msg);
+            }
+            final String prefix = MAP_STRING_MAP_MARK + MAP_STRING_START_BRACE;
+            final String suffix = MAP_STRING_END_BRACE;
+            if (!columnValueMapString.trim().startsWith(prefix)) {
+                columnValueMapString = prefix + columnValueMapString;
+            }
+            if (!columnValueMapString.trim().endsWith(suffix)) {
+                columnValueMapString = columnValueMapString + suffix;
+            }
+            MapListString mapListString = createMapListString();
+            entity.getDBMeta().acceptColumnValueMap(entity,
+                    mapListString.generateMap(columnValueMapString));
+        }
+
+        public static String extractPrimaryKeyMapString(Entity entity) {
+            final String startBrace = MAP_STRING_START_BRACE;
+            final String endBrace = MAP_STRING_END_BRACE;
+            final String delimiter = MAP_STRING_DELIMITER;
+            final String equal = MAP_STRING_EQUAL;
+            return entity.getDBMeta().extractPrimaryKeyMapString(entity,
+                    startBrace, endBrace, delimiter, equal);
+        }
+
+        public static String extractColumnValueMapString(Entity entity) {
+            final String startBrace = MAP_STRING_START_BRACE;
+            final String endBrace = MAP_STRING_END_BRACE;
+            final String delimiter = MAP_STRING_DELIMITER;
+            final String equal = MAP_STRING_EQUAL;
+            return entity.getDBMeta().extractColumnValueMapString(entity,
+                    startBrace, endBrace, delimiter, equal);
+        }
+
+        public static void checkTypeString(Object value, String propertyName,
+                String typeName) {
+            if (value == null) {
+                throw new IllegalArgumentException(
+                        "The value should not be null: " + propertyName);
+            }
+            if (!(value instanceof String)) {
+                String msg = "The value of " + propertyName + " should be "
+                        + typeName + " or String: ";
+                msg = msg + "valueType=" + value.getClass() + " value=" + value;
+                throw new IllegalArgumentException(msg);
+            }
+        }
+
+        public static long parseDateStringAsMillis(Object value,
+                String propertyName, String typeName) {
+            checkTypeString(value, propertyName, typeName);
+            try {
+                final String valueString = filterTimestampValue(((String) value)
+                        .trim());
+                return java.sql.Timestamp.valueOf(valueString).getTime();
+            } catch (RuntimeException e) {
+                String msg = "The value of " + propertyName + " should be "
+                        + typeName + ". but: " + value;
+                throw new RuntimeException(msg
+                        + " threw the exception: value=[" + value + "]", e);
+            }
+        }
+
+        public static String filterTimestampValue(String value) {
+            value = value.trim();
+            if (value.indexOf("/") == 4 && value.lastIndexOf("/") == 7) {
+                value = value.replaceAll("/", "-");
+            }
+            if (value.indexOf("-") == 4 && value.lastIndexOf("-") == 7) {
+                if (value.length() == "2007-07-09".length()) {
+                    value = value + " 00:00:00";
+                }
+            }
+            return value;
+        }
+
+        public static String formatDate(java.util.Date value) {
+            return getFormatDateFormat().format(value);
+        }
+
+        public static String formatTimestamp(java.sql.Timestamp value) {
+            return getFormatDateFormat().format(value);
+        }
+
+        public static java.text.DateFormat getParseDateFormat() {
+            return java.text.DateFormat.getDateInstance();
+        }
+
+        public static java.text.DateFormat getFormatDateFormat() {
+            return new java.text.SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS");
+        }
+
+        public static MapListString createMapListString() {
+            final MapListString mapListString = new MapListStringImpl();
+            mapListString.setMapMark(MAP_STRING_MAP_MARK);
+            mapListString.setListMark(MAP_STRING_LIST_MARK);
+            mapListString.setStartBrace(MAP_STRING_START_BRACE);
+            mapListString.setEndBrace(MAP_STRING_END_BRACE);
+            mapListString.setEqual(MAP_STRING_EQUAL);
+            mapListString.setDelimiter(MAP_STRING_DELIMITER);
+            return mapListString;
+        }
+
+        public static MapStringBuilder createMapStringBuilder(
+                List<String> columnNameList) {
+            MapStringBuilder mapStringBuilder = new MapStringBuilderImpl();
+            mapStringBuilder.setMsMapMark(MAP_STRING_MAP_MARK);
+            mapStringBuilder.setMsStartBrace(MAP_STRING_START_BRACE);
+            mapStringBuilder.setMsEndBrace(MAP_STRING_END_BRACE);
+            mapStringBuilder.setMsEqual(MAP_STRING_EQUAL);
+            mapStringBuilder.setMsDelimiter(MAP_STRING_DELIMITER);
+            mapStringBuilder.setColumnNameList(columnNameList);
+            return mapStringBuilder;
+        }
+    }
+
+    /**
+     * This class is for Internal. Don't use this!
+     */
+    protected static class MapAssertUtil {
+        public static void assertPrimaryKeyMapNotNullAndNotEmpty(
+                java.util.Map<String, ? extends Object> primaryKeyMap) {
+            if (primaryKeyMap == null) {
+                String msg = "The argument[primaryKeyMap] should not be null.";
+                throw new IllegalArgumentException(msg);
+            }
+            if (primaryKeyMap.isEmpty()) {
+                String msg = "The argument[primaryKeyMap] should not be empty.";
+                throw new IllegalArgumentException(msg);
+            }
+        }
+
+        public static void assertColumnExistingInPrimaryKeyMap(
+                java.util.Map<String, ? extends Object> primaryKeyMap,
+                String columnName) {
+            if (!primaryKeyMap.containsKey(columnName)) {
+                String msg = "The primaryKeyMap must have the value of "
+                        + columnName;
+                throw new IllegalStateException(msg + ": primaryKeyMap --> "
+                        + primaryKeyMap);
+            }
+        }
+
+        public static void assertColumnValueMapNotNullAndNotEmpty(
+                java.util.Map<String, ? extends Object> columnValueMap) {
+            if (columnValueMap == null) {
+                String msg = "The argument[columnValueMap] should not be null.";
+                throw new IllegalArgumentException(msg);
+            }
+            if (columnValueMap.isEmpty()) {
+                String msg = "The argument[columnValueMap] should not be empty.";
+                throw new IllegalArgumentException(msg);
+            }
+        }
+    }
+
+    /**
+     * This class is for Internal. Don't use this!
+     */
+    protected static class MapStringValueAnalyzer {
+        protected java.util.Map<String, ? extends Object> _valueMap;
+
+        protected java.util.Set<String> _modifiedPropertyNames;
+
+        protected String _columnName;
+
+        protected String _uncapPropName;
+
+        protected String _propertyName;
+
+        public MapStringValueAnalyzer(
+                java.util.Map<String, ? extends Object> valueMap,
+                java.util.Set<String> modifiedPropertyNames) {
+            this._valueMap = valueMap;
+            this._modifiedPropertyNames = modifiedPropertyNames;
+        }
+
+        public boolean init(String columnName, String uncapPropName,
+                String propertyName) {
+            this._columnName = columnName;
+            this._uncapPropName = uncapPropName;
+            this._propertyName = propertyName;
+            return _valueMap.containsKey(_columnName);
+        }
+
+        public <COLUMN_TYPE> COLUMN_TYPE analyzeString(
+                Class<COLUMN_TYPE> javaType) {
+            final Object obj = _valueMap.get(_columnName);
+            if (obj == null) {
+                _modifiedPropertyNames.remove(_propertyName);
+                return null;
+            }
+            helpCheckingTypeString(obj, _uncapPropName, javaType.getName());
+            return (COLUMN_TYPE) obj;
+        }
+
+        public <COLUMN_TYPE> COLUMN_TYPE analyzeNumber(
+                Class<COLUMN_TYPE> javaType) {
+            final Object obj = _valueMap.get(_columnName);
+            if (obj == null) {
+                _modifiedPropertyNames.remove(_propertyName);
+                return null;
+            }
+            if (javaType.isAssignableFrom(obj.getClass())) {
+                return (COLUMN_TYPE) obj;
+            }
+            return (COLUMN_TYPE) newInstanceByConstructor(javaType,
+                    String.class, obj.toString());
+        }
+
+        public <COLUMN_TYPE> COLUMN_TYPE analyzeDate(Class<COLUMN_TYPE> javaType) {
+            final Object obj = _valueMap.get(_columnName);
+            if (obj == null) {
+                _modifiedPropertyNames.remove(_propertyName);
+                return null;
+            }
+            if (javaType.isAssignableFrom(obj.getClass())) {
+                return (COLUMN_TYPE) obj;
+            }
+            return (COLUMN_TYPE) newInstanceByConstructor(javaType, long.class,
+                    helpParsingDateString(obj, _uncapPropName, javaType
+                            .getName()));
+        }
+
+        public <COLUMN_TYPE> COLUMN_TYPE analyzeOther(
+                Class<COLUMN_TYPE> javaType) {
+            final Object obj = _valueMap.get(_columnName);
+            if (obj == null) {
+                _modifiedPropertyNames.remove(_propertyName);
+                return null;
+            }
+            return (COLUMN_TYPE) obj;
+        }
+
+        private void helpCheckingTypeString(Object value, String uncapPropName,
+                String typeName) {
+            MapStringUtil.checkTypeString(value, uncapPropName, typeName);
+        }
+
+        private long helpParsingDateString(Object value, String uncapPropName,
+                String typeName) {
+            return MapStringUtil.parseDateStringAsMillis(value, uncapPropName,
+                    typeName);
+        }
+
+        protected Object newInstanceByConstructor(Class targetType,
+                Class argType, Object arg) {
+            java.lang.reflect.Constructor constructor;
+            try {
+                constructor = targetType
+                        .getConstructor(new Class[] { argType });
+            } catch (SecurityException e) {
+                String msg = "targetType=" + targetType + " argType=" + argType
+                        + " arg=" + arg;
+                throw new RuntimeException(msg, e);
+            } catch (NoSuchMethodException e) {
+                String msg = "targetType=" + targetType + " argType=" + argType
+                        + " arg=" + arg;
+                throw new RuntimeException(msg, e);
+            }
+            try {
+                return constructor.newInstance(new Object[] { arg });
+            } catch (IllegalArgumentException e) {
+                String msg = "targetType=" + targetType + " argType=" + argType
+                        + " arg=" + arg;
+                throw new RuntimeException(msg, e);
+            } catch (InstantiationException e) {
+                String msg = "targetType=" + targetType + " argType=" + argType
+                        + " arg=" + arg;
+                throw new RuntimeException(msg, e);
+            } catch (IllegalAccessException e) {
+                String msg = "targetType=" + targetType + " argType=" + argType
+                        + " arg=" + arg;
+                throw new RuntimeException(msg, e);
+            } catch (java.lang.reflect.InvocationTargetException e) {
+                String msg = "targetType=" + targetType + " argType=" + argType
+                        + " arg=" + arg;
+                throw new RuntimeException(msg, e);
+            }
+        }
+    }
+
+    // ===================================================================================
+    //                                                                       Assist Helper
+    //                                                                       =============
+    abstract protected void checkDowncast(Entity entity);
+
+    protected String helpGettingColumnStringValue(Object value) {
+        if (value instanceof java.sql.Timestamp) {
+            return (value != null ? helpFormatingTimestamp((java.sql.Timestamp) value)
+                    : "");
+        } else if (value instanceof java.util.Date) {
+            return (value != null ? helpFormatingDate((java.util.Date) value)
+                    : "");
+        } else {
+            return (value != null ? value.toString() : "");
+        }
+    }
+
+    protected String helpFormatingDate(java.util.Date date) {
+        return MapStringUtil.formatDate(date);
+    }
+
+    protected String helpFormatingTimestamp(java.sql.Timestamp timestamp) {
+        return MapStringUtil.formatTimestamp(timestamp);
+    }
+
+    // ===================================================================================
+    //                                                                      General Helper
+    //                                                                      ==============
+    // -----------------------------------------------------
+    //                                   Reflection Handling
+    //                                   -------------------
+    protected boolean hasMethod(String methodName) {
+        assertStringNotNullAndNotTrimmedEmpty("methodName", methodName);
+        try {
+            this.getClass().getMethod(methodName, new Class[] {});
+            return true;
+        } catch (NoSuchMethodException ignored) {
+            return false;
+        }
+    }
+
+    // -----------------------------------------------------
+    //                                       String Handling
+    //                                       ---------------
+    protected String initCap(String str) {
+        return SimpleStringUtil.initCap(str);
+    }
+
+    // -----------------------------------------------------
+    //                                         Assert Object
+    //                                         -------------
+    /**
+     * Assert that the argument is not null.
+     * 
+     * @param variableName Variable name. (NotNull)
+     * @param arg Argument. (NotNull)
+     */
+    protected void assertObjectNotNull(String variableName, Object value) {
+        SimpleAssertUtil.assertObjectNotNull(variableName, value);
+    }
+
+    // -----------------------------------------------------
+    //                                         Assert String
+    //                                         -------------
+    /**
+     * Assert that the string is not null and not trimmed empty.
+     * 
+     * @param variableName Variable name. (NotNull)
+     * @param value Value. (NotNull)
+     */
+    protected void assertStringNotNullAndNotTrimmedEmpty(String variableName,
+            String value) {
+        SimpleAssertUtil.assertStringNotNullAndNotTrimmedEmpty(variableName,
+                value);
+    }
+}


Property changes on: announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/dbmeta/AbstractDBMeta.java
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/dbmeta/DBMeta.java
===================================================================
--- announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/dbmeta/DBMeta.java	                        (rev 0)
+++ announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/dbmeta/DBMeta.java	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,626 @@
+package jp.sf.pal.announcement.db.allcommon.dbmeta;
+
+import java.sql.Connection;
+import java.util.List;
+import java.util.Map;
+
+import jp.sf.pal.announcement.db.allcommon.Entity;
+import jp.sf.pal.announcement.db.allcommon.dbmeta.info.ColumnInfo;
+import jp.sf.pal.announcement.db.allcommon.dbmeta.info.ForeignInfo;
+import jp.sf.pal.announcement.db.allcommon.dbmeta.info.ReferrerInfo;
+import jp.sf.pal.announcement.db.allcommon.dbmeta.info.RelationInfo;
+import jp.sf.pal.announcement.db.allcommon.dbmeta.info.UniqueInfo;
+import jp.sf.pal.announcement.db.allcommon.helper.MapListString;
+import jp.sf.pal.announcement.db.allcommon.helper.MapStringBuilder;
+
+/**
+ * The interface of dbmeta.
+ * 
+ * @author DBFlute(AutoGenerator)
+ */
+ @ SuppressWarnings("unchecked")
+public interface DBMeta {
+
+    // ===================================================================================
+    //                                                                          Definition
+    //                                                                          ==========
+    /** Map-string map-mark. */
+    public static final String MAP_STRING_MAP_MARK = "map:";
+
+    /** Map-string list-mark. */
+    public static final String MAP_STRING_LIST_MARK = "list:";
+
+    /** Map-string start-brace. */
+    public static final String MAP_STRING_START_BRACE = "@{";
+
+    /** Map-string end-brace. */
+    public static final String MAP_STRING_END_BRACE = "@}";
+
+    /** Map-string delimiter. */
+    public static final String MAP_STRING_DELIMITER = "@;";
+
+    /** Map-string equal. */
+    public static final String MAP_STRING_EQUAL = "@=";
+
+    // ===================================================================================
+    //                                                                          Table Name
+    //                                                                          ==========
+    /**
+     * Get table db-name.
+     * 
+     * @return Table db-name. (NotNull)
+     */
+    public String getTableDbName();
+
+    /**
+     * Get table prop-name(JavaBeansRule).
+     * 
+     * @return Table property-name(JavaBeansRule). (NotNull)
+     */
+    public String getTablePropertyName();
+
+    // ===================================================================================
+    //                                                                       Name Handling
+    //                                                                       =============
+    /**
+     * Has object of flexible name? {Target objects are TABLE and COLUMN}
+     * 
+     * @param flexibleName The flexible name. (NotNull and NotEmpty)
+     * @return Determination.
+     */
+    public boolean hasFlexibleName(String flexibleName);
+
+    /**
+     * Find db name by flexible name. {Target objects are TABLE and COLUMN}
+     * 
+     * @param flexibleName The flexible name. (NotNull and NotEmpty)
+     * @return Db name. (NotNull and NotEmpty)
+     */
+    public String findDbName(String flexibleName);
+
+    /**
+     * Find property name(JavaBeansRule) by flexible name. {Target objects are TABLE and COLUMN}
+     * 
+     * @param flexibleName The flexible name. (NotNull and NotEmpty)
+     * @return Db name. (NotNull and NotEmpty)
+     */
+    public String findPropertyName(String flexibleName);
+
+    // ===================================================================================
+    //                                                                            Name Map
+    //                                                                            ========
+    /**
+     * Get the key-to-lower map of DB name(lower) and property name.
+     * 
+     * @return The key-to-lower map of DB name(lower) and property name. (NotNull)
+     */
+    public Map<String, String> getDbNamePropertyNameKeyToLowerMap();
+
+    /**
+     * Get the key-to-lower map of property name(lower) and db name.
+     * 
+     * @return The key-to-lower map of property name(lower) and db name. (NotNull)
+     */
+    public Map<String, String> getPropertyNameDbNameKeyToLowerMap();
+
+    // ===================================================================================
+    //                                                                           Type Name
+    //                                                                           =========
+    /**
+     * Get the type-name of entity.
+     * 
+     * @return The type-name of entity. (NotNull)
+     */
+    public String getEntityTypeName();
+
+    /**
+     * Get the type-name of condition-bean.
+     * 
+     * @return The type-name of condition-bean. (Nullable: If the condition-bean does not exist)
+     */
+    public String getConditionBeanTypeName();
+
+    /**
+     * Get the type-name of dao.
+     * 
+     * @return The type-name of dao. (Nullable: If the dao does not exist)
+     */
+    public String getDaoTypeName();
+
+    /**
+     * Get the type-name of behavior.
+     * 
+     * @return The type-name of behavior. (Nullable: If the behavior does not exist)
+     */
+    public String getBehaviorTypeName();
+
+    // ===================================================================================
+    //                                                                         Object Type
+    //                                                                         ===========
+    /**
+     * Get the type of entity.
+     * 
+     * @return The type of entity. (NotNull)
+     */
+    public Class<? extends Entity> getEntityType();
+
+    // ===================================================================================
+    //                                                                     Object Instance
+    //                                                                     ===============
+    /**
+     * New the instance of entity.
+     * 
+     * @return The instance of entity. (NotNull)
+     */
+    public Entity newEntity();
+
+    // ===================================================================================
+    //                                                                         Column Info
+    //                                                                         ===========
+    /**
+     * The implementation.
+     * 
+     * @return The list of DB name of column. (NotNull and NotEmpty)
+     */
+    public List<ColumnInfo> getColumnInfoList();
+
+    /**
+     * Has column?
+     * 
+     * @param columnFlexibleName The flexible name of the column. (NotNull)
+     * @return Determination.
+     */
+    public boolean hasColumn(String columnFlexibleName);
+
+    /**
+     * Find the information of the column by the flexible name of the column.
+     * <pre>
+     * If the table name is 'BOOK_ID', you can find the dbmeta by ...(as follows)
+     *     'BOOK_ID', 'BOok_iD', 'book_id'
+     *     , 'BookId', 'bookid', 'bOoKiD'
+     * </pre>
+     * @param columnFlexibleName The flexible name of the column. (NotNull)
+     * @return The information of the column. (NotNull)
+     */
+    public ColumnInfo findColumnInfo(String columnFlexibleName);
+
+    // ===================================================================================
+    //                                                                         Unique Info
+    //                                                                         ===========
+    /**
+     * Get primary unique info.
+     * 
+     * @return Primary unique info. (NotNull)
+     */
+    public UniqueInfo getPrimaryUniqueInfo();
+
+    /**
+     * Has primary-key?
+     * 
+     * @return Determination.
+     */
+    public boolean hasPrimaryKey();
+
+    /**
+     * Has two or more primary-keys?
+     * 
+     * @return Determination.
+     */
+    public boolean hasTwoOrMorePrimaryKeys();
+
+    // ===================================================================================
+    //                                                                       Relation Info
+    //                                                                       =============
+    // -----------------------------------------------------
+    //                                      Relation Element
+    //                                      ----------------
+    /**
+     * Find relation info.
+     * 
+     * @param relationPropertyName Relation property name. (Both OK - InitCap or not). (NotNull)
+     * @return Relation info. (NotNull)
+     */
+    public RelationInfo findRelationInfo(String relationPropertyName);
+
+    // -----------------------------------------------------
+    //                                       Foreign Element
+    //                                       ---------------
+    /**
+     * Has foreign?
+     * 
+     * @param foreignPropName Foreign property name. (Both OK - InitCap or not). (NotNull)
+     * @return Determination. (NotNull)
+     */
+    public boolean hasForeign(String foreignPropName);
+
+    /**
+     * Find foreign dbmeta.
+     * 
+     * @param foreignPropName Foreign property name. (Both OK - InitCap or not). (NotNull)
+     * @return Foreign DBMeta. (NotNull)
+     */
+    public DBMeta findForeignDBMeta(String foreignPropName);
+
+    /**
+     * Find foreign info.
+     * 
+     * @param foreignPropName Foreign property name. (Both OK - InitCap or not). (NotNull)
+     * @return Foreign info. (NotNull)
+     */
+    public ForeignInfo findForeignInfo(String foreignPropName);
+
+    // -----------------------------------------------------
+    //                                      Referrer Element
+    //                                      ----------------
+
+    /**
+     * Has referrer?
+     * 
+     * @param referrerPropertyName The property name of referrer. (Both OK - InitCap or not). (NotNull)
+     * @return Determination. (NotNull)
+     */
+    public boolean hasReferrer(String referrerPropertyName);
+
+    /**
+     * Find referrer dbmeta.
+     * 
+     * @param referrerPropertyName The property name of referrer. (Both OK - InitCap or not). (NotNull)
+     * @return Referrer DBMeta. (NotNull)
+     */
+    public DBMeta findReferrerDBMeta(String referrerPropertyName);
+
+    /**
+     * Find referrer information.
+     * 
+     * @param referrerPropertyName The property name of referrer. (Both OK - InitCap or not). (NotNull)
+     * @return Referrer information. (NotNull)
+     */
+    public ReferrerInfo findReferrerInfo(String referrerPropertyName);
+
+    // -----------------------------------------------------
+    //                                        Relation Trace
+    //                                        --------------
+    /**
+     * Relation trace.
+     */
+    public static interface RelationTrace {
+
+        /**
+         * Get the trace of relation.
+         * 
+         * @return The trace of relation as the list of relation info. (NotNull)
+         */
+        public List<RelationInfo> getTraceRelation();
+
+        /**
+         * Get the trace of column.
+         * 
+         * @return The trace of column as column info. (Nullable)
+         */
+        public ColumnInfo getTraceColumn();
+    }
+
+    public static interface RelationTraceFixHandler {
+        public void handleFixedTrace(RelationTrace relationTrace);
+    }
+
+    // ===================================================================================
+    //                                                                       Sequence Info
+    //                                                                       =============
+    /**
+     * Has sequence?
+     * 
+     * @return Determination.
+     */
+    public boolean hasSequence();
+
+    // ===================================================================================
+    //                                                                Optimistic Lock Info
+    //                                                                ====================
+    /**
+     * Has version no?
+     * 
+     * @return Determination.
+     */
+    public boolean hasVersionNo();
+
+    /**
+     * Has update date?
+     * 
+     * @return Determination.
+     */
+    public boolean hasUpdateDate();
+
+    // ===================================================================================
+    //                                                                  Common Column Info
+    //                                                                  ==================
+    /**
+     * Has common column?
+     * 
+     * @return Determination.
+     */
+    public boolean hasCommonColumn();
+
+    // ===================================================================================
+    //                                                                     Entity Handling
+    //                                                                     ===============
+    // -----------------------------------------------------
+    //                                                Accept
+    //                                                ------
+    /**
+     * Accept primary-key map.
+     * 
+     * The column that column-value map-string doesn't have the value of is reflected as null.
+     * The column that column-value map-string doesn't have the key of is NOT updated nothing.
+     * 
+     * @param entity Target entity. (NotNull)
+     * @param primaryKeyMap Primary-key map. (NotNull and NotEmpty)
+     */
+    public void acceptPrimaryKeyMap(Entity entity,
+            Map<String, ? extends Object> primaryKeyMap);
+
+    /**
+     * Accept primary-key map-string.
+     * 
+     * The column that column-value map-string doesn't have the value of is reflected as null.
+     * The column that column-value map-string doesn't have the key of is NOT updated nothing.
+     * 
+     * @param entity Target entity. (NotNull)
+     * @param primaryKeyMapString Primary-key map-string. (NotNull)
+     */
+    public void acceptPrimaryKeyMapString(Entity entity,
+            String primaryKeyMapString);
+
+    /**
+     * Accept column-value map.
+     * 
+     * The column that column-value map-string doesn't have the value of is reflected as null.
+     * The column that column-value map-string doesn't have the key of is NOT updated nothing.
+     * 
+     * @param entity Target entity. (NotNull)
+     * @param columnValueMap Column-value map. (NotNull and NotEmpty)
+     */
+    public void acceptColumnValueMap(Entity entity,
+            Map<String, ? extends Object> columnValueMap);
+
+    /**
+     * Accept column-value map-string.
+     * 
+     * The column that column-value map-string doesn't have the value of is reflected as null.
+     * The column that column-value map-string doesn't have the key of is NOT updated nothing.
+     * 
+     * @param entity Target entity. (NotNull)
+     * @param columnValueMapString Column-value map-string. (NotNull)
+     */
+    public void acceptColumnValueMapString(Entity entity,
+            String columnValueMapString);
+
+    // -----------------------------------------------------
+    //                                               Extract
+    //                                               -------
+    /**
+     * Extract primary-key map-string. Delimiter is at-mark and semicolon.
+     * <p>
+     * <pre>
+     * ex) Uses that this method have.
+     *   final String primaryKeyMapString = LdBookDbm.extractPrimaryKeyMapString(entity);
+     *   final LdBook entity = dao.selectEntity(new LdBookCB().acceptPrimaryKeyMapString(primaryKeyMapString));
+     *   ... // as primary key for condition.
+     * </pre>
+     * 
+     * @param entity Target entity. (NotNull)
+     * @return Primary-key map-string. (NotNull)
+     */
+    public String extractPrimaryKeyMapString(Entity entity);
+
+    /**
+     * Extract primary-key map-string.
+     * 
+     * @param entity Target entity. (NotNull)
+     * @param startBrace Start-brace. (NotNull)
+     * @param endBrace End-brace. (NotNull)
+     * @param delimiter Delimiter. (NotNull)
+     * @param equal Equal. (NotNull)
+     * @return Primary-key map-string. (NotNull)
+     */
+    public String extractPrimaryKeyMapString(Entity entity, String startBrace,
+            String endBrace, String delimiter, String equal);
+
+    /**
+     * Extract column-value map-string. Delimiter is at-mark and semicolon.
+     * 
+     * @param entity Target entity. (NotNull)
+     * @return Column-value map-string. (NotNull)
+     */
+    public String extractColumnValueMapString(Entity entity);
+
+    /**
+     * Extract column-value map-string.
+     * 
+     * @param entity Target entity. (NotNull)
+     * @param startBrace Start-brace. (NotNull)
+     * @param endBrace End-brace. (NotNull)
+     * @param delimiter Delimiter. (NotNull)
+     * @param equal Equal. (NotNull)
+     * @return Column-value map-string. (NotNull)
+     */
+    public String extractColumnValueMapString(Entity entity, String startBrace,
+            String endBrace, String delimiter, String equal);
+
+    /**
+     * Extract common-column-value map-string.
+     * 
+     * @param entity Target entity. (NotNull)
+     * @return Common-column-value map-string. (NotNull)
+     */
+    public String extractCommonColumnValueMapString(Entity entity);
+
+    /**
+     * Extract common-column-value map-string.
+     * 
+     * @param entity Target entity. (NotNull)
+     * @param startBrace Start-brace. (NotNull)
+     * @param endBrace End-brace. (NotNull)
+     * @param delimiter Delimiter. (NotNull)
+     * @param equal Equal. (NotNull)
+     * @return Common-column-value map-string. (NotNull)
+     */
+    public String extractCommonColumnValueMapString(Entity entity,
+            String startBrace, String endBrace, String delimiter, String equal);
+
+    // -----------------------------------------------------
+    //                                               Convert
+    //                                               -------
+    /**
+     * Convert entity to column value as list.
+     * 
+     * @param entity Target entity. (NotNull)
+     * @return The list of column value. (NotNull)
+     */
+    public List<Object> convertToColumnValueList(Entity entity);
+
+    /**
+     * Convert entity to column value as map.
+     * 
+     * @param entity Target entity. (NotNull)
+     * @return The map of column value. (NotNull)
+     */
+    public Map<String, Object> convertToColumnValueMap(Entity entity);
+
+    /**
+     * Convert entity to column string-value as list.
+     * 
+     * @param entity Target entity. (NotNull)
+     * @return The list of column string-value. (NotNull)
+     */
+    public List<String> convertToColumnStringValueList(Entity entity);
+
+    /**
+     * Convert entity to column string-value as map.
+     * 
+     * @param entity Target entity. (NotNull)
+     * @return The map of column string-value. (NotNull)
+     */
+    public Map<String, String> convertToColumnStringValueMap(Entity entity);
+
+    // ===================================================================================
+    //                                                                        JDBC Support
+    //                                                                        ============
+    /**
+     * Insert entity using specified connection.
+     * 
+     * @param conn Connection. (NotNull)
+     * @param entity Entity. (NotNull)
+     * @return Prepared insert clause. (NotNull and NotEmpty)
+     */
+    public int insertEntity(Connection conn, Entity entity);
+
+    /**
+     * Insert entity using specified connection.
+     * 
+     * @param conn Connection. (NotNull)
+     * @param entity Entity. (NotNull)
+     * @param preparedInsertClauseOption Prepared insert clause option. (NotNull)
+     * @return Prepared insert clause. (NotNull and NotEmpty)
+     */
+    public int insertEntity(Connection conn, Entity entity,
+            PreparedInsertClauseOption preparedInsertClauseOption);
+
+    /**
+     * Get prepared insert clause.
+     * 
+     * @return Prepared insert clause. (NotNull and NotEmpty)
+     */
+    public String getPreparedInsertClause();
+
+    /**
+     * Get prepared insert clause.
+     * 
+     * @param preparedInsertClauseOption Prepared insert clause option. (NotNull)
+     * @return Prepared insert clause. (NotNull and NotEmpty)
+     */
+    public String getPreparedInsertClause(
+            PreparedInsertClauseOption preparedInsertClauseOption);
+
+    /**
+     * The option of prepared insert clause.
+     */
+    public static class PreparedInsertClauseOption {
+
+        /** Table prefix. */
+        protected String _tablePrefix;
+
+        /**
+         * Get table prefix.
+         * 
+         * @return Table prefix. (Nullable)
+         */
+        public String getTablePrefix() {
+            return this._tablePrefix;
+        }
+
+        /**
+         * Set table prefix.
+         * 
+         * @param tablePrefix Table prefix. (Nullable)
+         */
+        public void setTablePrefix(String tablePrefix) {
+            this._tablePrefix = tablePrefix;
+        }
+    }
+
+    // ===================================================================================
+    //                                                                          Map String
+    //                                                                          ==========
+    /**
+     * Create map list string that is prepared. (for INTERNAL)
+     * 
+     * @return Map list string that is prepared. (NotNull)
+     */
+    public MapListString createMapListString();
+
+    /**
+     * Create map string builder that is prepared. (for INTERNAL)
+     * 
+     * @return Map string builder that is prepared. (NotNull)
+     */
+    public MapStringBuilder createMapStringBuilder();
+
+    // ===================================================================================
+    //                                                               Entity Property Setup
+    //                                                               =====================
+    // It's very INTERNAL!
+
+    /**
+     * Has the setupper of entity property by the name of property? <br />
+     * Comparing is so flexible. {Ignore cases and underscore}
+     * 
+     * @param propertyName The name of the property. (NotNull)
+     * @return Determination.
+     */
+    public boolean hasEntityPropertySetupper(String propertyName);
+
+    /**
+     * Set up entity property. (for INTERNAL)
+     * 
+     * @param propertyName The name of the property. (NotNull)
+     * @param entity The entity for the property. (NotNull)
+     * @param value The value of the property. (Nullable)
+     */
+    public void setupEntityProperty(String propertyName, Object entity,
+            Object value);
+
+    /**
+     * The setupper of entity property. <br />
+     * This class is for Internal. Don't use this!
+     * @param <ENTITY_TYPE> The type of entity.
+     */
+    public interface EntityPropertySetupper<ENTITY_TYPE extends Entity> {
+
+        /**
+         * @param entity Entity. (NotNull)
+         * @param value Value. (Nullable)
+         */
+        void setup(ENTITY_TYPE entity, Object value);
+    }
+}


Property changes on: announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/dbmeta/DBMeta.java
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/dbmeta/DBMetaInstanceHandler.java
===================================================================
--- announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/dbmeta/DBMetaInstanceHandler.java	                        (rev 0)
+++ announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/dbmeta/DBMetaInstanceHandler.java	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,160 @@
+package jp.sf.pal.announcement.db.allcommon.dbmeta;
+
+import java.util.Collections;
+import java.util.LinkedHashMap;
+import java.util.Map;
+
+import jp.sf.pal.announcement.db.allcommon.util.SimpleAssertUtil;
+
+/**
+ * DBMeta instance handler.
+ * 
+ * @author DBFlute(AutoGenerator)
+ */
+ @ SuppressWarnings("unchecked")
+public class DBMetaInstanceHandler {
+
+    // ===================================================================================
+    //                                                                          Definition
+    //                                                                          ==========
+    /** The key-to-lower map of DB-name and property-name for table. */
+    protected static final Map<String, String> _tableDbNamePropertyNameKeyToLowerMap;
+    static {
+        Map<String, String> tmpMap = new LinkedHashMap<String, String>();
+
+        tmpMap.put("ANNOUNCEMENT".toLowerCase(), "announcement");
+        tmpMap.put("ANNOUNCEMENT_BODY".toLowerCase(), "announcementBody");
+
+        _tableDbNamePropertyNameKeyToLowerMap = Collections
+                .unmodifiableMap(tmpMap);
+    }
+
+    /** The key-to-lower map of property-name and DB-name for table. */
+    protected static final Map<String, String> _tablePropertyNameDbNameKeyToLowerMap;
+    static {
+        Map<String, String> tmpMap = new LinkedHashMap<String, String>();
+
+        tmpMap.put("announcement".toLowerCase(), "ANNOUNCEMENT");
+        tmpMap.put("announcementBody".toLowerCase(), "ANNOUNCEMENT_BODY");
+
+        _tablePropertyNameDbNameKeyToLowerMap = Collections
+                .unmodifiableMap(tmpMap);
+    }
+
+    /** Table db-name instance map. */
+    protected static final Map<String, DBMeta> _tableDbNameInstanceMap;
+    static {
+        Map<String, DBMeta> tmpMap = new LinkedHashMap<String, DBMeta>();
+
+        tmpMap
+                .put(
+                        "ANNOUNCEMENT",
+                        getDBMeta("jp.sf.pal.announcement.db.bsentity.dbmeta.AnnouncementDbm"));
+        tmpMap
+                .put(
+                        "ANNOUNCEMENT_BODY",
+                        getDBMeta("jp.sf.pal.announcement.db.bsentity.dbmeta.AnnouncementBodyDbm"));
+
+        _tableDbNameInstanceMap = Collections.unmodifiableMap(tmpMap);
+    }
+
+    protected static DBMeta getDBMeta(String className) {
+        try {
+            Class clazz = Class.forName(className);
+            java.lang.reflect.Method methoz = clazz.getMethod("getInstance",
+                    (Class[]) null);
+            Object result = methoz.invoke(null, (Object[]) null);
+            return (DBMeta) result;
+        } catch (Exception e) {
+            throw new RuntimeException(e);
+        }
+    }
+
+    /**
+     * @return The map that contains instances of dbmeta. (NotNull & NotEmpty)
+     */
+    public static Map<String, DBMeta> getDBMetaMap() {
+        return _tableDbNameInstanceMap;
+    }
+
+    // ===================================================================================
+    //                                                                         Main Method
+    //                                                                         ===========
+    /**
+     * Find dbmeta by table flexible-name.
+     * <pre>
+     * If the table name is 'ORDER_DETAIL', you can find the dbmeta by ...(as follows)
+     *     'ORDER_DETAIL', 'ORDer_DeTAiL', 'order_detail'
+     *     , 'OrderDetail', 'orderdetail', 'oRderDetaIl'
+     * </pre>
+     * @param tableFlexibleName Table flexible-name. (NotNull)
+     * @return Instance. (NotNull)
+     */
+    public static DBMeta findDBMeta(String tableFlexibleName) {
+        assertStringNotNullAndNotTrimmedEmpty("tableFlexibleName",
+                tableFlexibleName);
+        if (_tableDbNameInstanceMap.containsKey(tableFlexibleName)) {
+            return byTableDbName(tableFlexibleName);
+        }
+        String toLowerKey = tableFlexibleName.toLowerCase();
+        if (_tableDbNamePropertyNameKeyToLowerMap.containsKey(toLowerKey)) {
+            String propertyName = (String) _tableDbNamePropertyNameKeyToLowerMap
+                    .get(toLowerKey);
+            String dbName = (String) _tablePropertyNameDbNameKeyToLowerMap
+                    .get(propertyName.toLowerCase());
+            return byTableDbName(dbName);
+        }
+        if (_tablePropertyNameDbNameKeyToLowerMap.containsKey(toLowerKey)) {
+            String dbName = (String) _tablePropertyNameDbNameKeyToLowerMap
+                    .get(toLowerKey);
+            return byTableDbName(dbName);
+        }
+        final int dotLastIndex = tableFlexibleName.lastIndexOf(".");
+        if (dotLastIndex >= 0) {
+            try {
+                return findDBMeta(tableFlexibleName.substring(dotLastIndex + 1));
+            } catch (IllegalStateException e) {
+                // Nothing
+            }
+        }
+        String msg = "The instance map returned null by the key: key="
+                + tableFlexibleName + " instanceMap=" + _tableDbNameInstanceMap;
+        throw new IllegalStateException(msg);
+    }
+
+    /**
+     * Get instance by table db-name.
+     * 
+     * @param tableDbName Table db-name. (NotNull)
+     * @return Instance. (NotNull)
+     */
+    protected static DBMeta byTableDbName(String tableDbName) {
+        assertStringNotNullAndNotTrimmedEmpty("tableDbName", tableDbName);
+        DBMeta instance = (DBMeta) _tableDbNameInstanceMap.get(tableDbName);
+        if (instance == null) {
+            String msg = "The instance map returned null by the key: key="
+                    + tableDbName + " instanceMap=" + _tableDbNameInstanceMap;
+            throw new IllegalStateException(msg);
+        }
+        return instance;
+    }
+
+    // ===================================================================================
+    //                                                                      General Helper
+    //                                                                      ==============
+    // -----------------------------------------------------
+    //                                         Assert Object
+    //                                         -------------
+    protected static void assertObjectNotNull(String variableName, Object value) {
+        SimpleAssertUtil.assertObjectNotNull(variableName, value);
+    }
+
+    // -----------------------------------------------------
+    //                                         Assert String
+    //                                         -------------
+    protected static void assertStringNotNullAndNotTrimmedEmpty(
+            String variableName, String value) {
+        SimpleAssertUtil.assertStringNotNullAndNotTrimmedEmpty(variableName,
+                value);
+    }
+}


Property changes on: announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/dbmeta/DBMetaInstanceHandler.java
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/dbmeta/hierarchy/HierarchyArranger.java
===================================================================
--- announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/dbmeta/hierarchy/HierarchyArranger.java	                        (rev 0)
+++ announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/dbmeta/hierarchy/HierarchyArranger.java	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,874 @@
+package jp.sf.pal.announcement.db.allcommon.dbmeta.hierarchy;
+
+import java.lang.reflect.Method;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+
+import jp.sf.pal.announcement.db.allcommon.Entity;
+import jp.sf.pal.announcement.db.allcommon.dbmeta.DBMeta;
+import jp.sf.pal.announcement.db.allcommon.dbmeta.info.ColumnInfo;
+import jp.sf.pal.announcement.db.allcommon.dbmeta.info.ForeignInfo;
+import jp.sf.pal.announcement.db.allcommon.dbmeta.info.ReferrerInfo;
+import jp.sf.pal.announcement.db.allcommon.dbmeta.info.RelationInfo;
+
+/**
+ * The arranger of hierarchy.
+ * <pre>
+ * ex) LIBRARY Hierarchy
+ * 
+ * LIBRARY
+ *  |1
+ *  |--* NEXT_LIBRARY (Referrer)
+ *  |       |*
+ *  |       |--1 LIBRARY (Foreign)
+ *  |
+ *  |--* COLLECTION (Referrer)
+ *  |       |1 
+ *  |       |--1 COLLECTION_STATUS (Referrer)
+ *  |       |       |*
+ *  |       |       |--1 COLLECTION_STATUS_LOOKUP (Foreign)
+ *  |       |
+ *  |       |--1 BOOK (Foreign)
+ *  |       |     |*
+ *  |       |     |--1 AUTHOR (Foreign)
+ *  |       |     |--1 PUBLISER (Foreign)
+ *  |       |     |--1 GENRE (Foreign)
+ *  |       |           |*
+ *  |       |           |--1 GENRE (Foreign)
+ *  |       |
+ *  |       |--* LENDING_COLLECTION (Referrer)
+ *  |       |
+ *  |
+ *  |--* LIBRARY_USER (Referrer)
+ *         |*  |1
+ *         |   |--* LENDING (Referrer)
+ *         |         |1
+ *         |         |--* LENDING_COLLECTION (Referrer)
+ *         |
+ *         |--1 LB_USER (Foreign)
+ *                 |1
+ *                 |--* BLACK_LIST (Referrer)
+ *                         |1
+ *                         |--* BLACK_ACTION (Referrer)
+ *                                 |*
+ *                                 |--1 BLACK_ACTION_LOOKUP (Foreign)
+ *          
+ *          
+ * ex) The SQL of LIBRARY Hierarchy as FLAT
+ * 
+ * select library.LIBRARY_ID as LIBRARY_ID
+ *      , library.LIBRARY_NAME as LIBRARY_NAME
+ *      , library.R_USER as R_USER
+ *      , library.R_TIMESTAMP as R_TIMESTAMP
+ *      , nextBase.LIBRARY_ID as BASE_LIBRARY_ID
+ *      , nextBase.NEXT_LIBRARY_ID as NEXT_LIBRARY_ID
+ *      , nextBaseNextLibrary.LIBRARY_ID as NEXT_LIBRARY_NEXT_LIBRARY_ID
+ *      , nextBaseNextLibrary.LIBRARY_NAME as NEXT_LIBRARY_NEXT_LIBRARY_NAME
+ *      , collection.COLLECTION_ID as COLLECTION_ID
+ *      , collection.ARRIVAL_DATE as COLLECTION_ARRIVAL_DATE
+ *      , collectionStatus.COLLECTION_ID as COLLECTION_STATUS_ID
+ *      , collectionStatus.COLLECTION_STATUS_CODE as COLLECTION_STATUS_CODE
+ *      , collectionStatusLookup.COLLECTION_STATUS_CODE as COLLECTION_STATUS_CODE
+ *      , collectionStatusLookup.COLLECTION_STATUS_NAME as COLLECTION_STATUS_NAME
+ *      , book.BOOK_ID as COLLECTION_BOOK_ID
+ *      , book.BOOK_NAME as COLLECTION_BOOK_NAME
+ *      , author.AUTHOR_ID as COLLECTION_BOOK_AUTHOR_ID
+ *      , author.AUTHOR_NAME as COLLECTION_BOOK_AUTHOR_NAME
+ *      , libraryUser.LIBRARY_ID as LIBRARY_USER_LIBRARY_ID 
+ *      , libraryUser.LB_USER_ID as LIBRARY_USER_LB_USER_ID
+ *      , lending.LIBRARY_ID as LENDING_LIBRARY_ID
+ *      , lending.LB_USER_ID as LENDING_LB_USER_ID
+ *      , lending.LENDING_DATE as LENDING_DATE
+ *      , lending.U_USER as LENDING_U_USER
+ *      , lending.U_MODULE as LENDING_U_MODULE
+ *      , lbUser.LB_USER_ID as LB_USER_ID
+ *      , lbUser.LB_USER_NAME as LB_USER_NAME
+ *   from LIBRARY library
+ *     left outer join NEXT_LIBRARY nextBase on library.LIBRARY_ID = nextBase.LIBRARY_ID
+ *       left outer join LIBRARY nextBaseNextLibrary on nextBase.NEXT_LIBRARY_ID = nextBaseNextLibrary.LIBRARY_ID
+ *     left outer join COLLECTION collection on library.LIBRARY_ID = collection.LIBRARY_ID
+ *       left outer join COLLECTION_STATUS collectionStatus on collection.COLLECTION_ID = collectionStatus.COLLECTION_ID
+ *         left outer join COLLECTION_STATUS_LOOKUP collectionStatusLookup on collectionStatus.COLLECTION_STATUS_CODE = collectionStatusLookup.COLLECTION_STATUS_CODE
+ *       left outer join BOOK book on collection.BOOK_ID = book.BOOK_ID
+ *         left outer join AUTHOR author on book.AUTHOR_ID = author.AUTHOR_ID
+ *     left outer join LIBRARY_USER libraryUser on library.LIBRARY_ID = libraryUser.LIBRARY_ID
+ *       left outer join LENDING lending on libraryUser.LIBRARY_ID = lending.LIBRARY_ID and libraryUser.LB_USER_ID = lending.LB_USER_ID
+ *       left outer join LB_USER lbUser on libraryUser.LB_USER_ID = lbUser.LB_USER_ID
+ * 
+ * 
+ * ex) Invoking Hierarchy Arranger
+ * 
+ * private List&lt;Library&gt; makeLibraryList() {
+ *     final HierarchyRequest&lt;Library&gt; request = createHierarchyRequest(createFlatLibraryList());
+ *     return new HierarchyArranger&lt;Library&gt;().arrangeHierarchy(request);
+ * }
+ * 
+ * 
+ * ex) Creating Hierarchy Request
+ * 
+ * private HierarchyRequest&lt;Library&gt; createHierarchsyRequest(java.util.List&gt;HierarchyFlatLibrary&gt; flatLibraryList) {
+ * 
+ *     // Define dbmeta.
+ *     final HierarchyFlatLibraryDbm sourceDbm = HierarchyFlatLibraryDbm.getInstance();
+ *
+ *     // Define hierarychy request as library.
+ *     final HierarchyRequest&lt;Library&gt; request = new HierarchyRequest&lt;Library&gt;(Library.class);
+ * 
+ *     // Register the list of source iterator. (by calling creator for flat library list)
+ *     request.registerSourceList(flatLibraryList);
+ *
+ *     // Create relation trace.
+ *     final LibraryRelationTrace trace = LibraryDbm.getInstance().createRelationTrace(null);
+ *     
+ *     // Register column [libraryId]
+ *     request.mapping(sourceDbm.columnLibraryId(), trace.columnLibraryId());
+ *
+ *     // Register column [libraryName]
+ *     request.mapping(sourceDbm.columnLibraryName(), trace.columnLibraryName());
+ *
+ *     // Register column [RUser]
+ *     request.mapping(sourceDbm.columnRUser(), trace.columnRUser());
+ *
+ *     // Register column [RTimestamp]
+ *     request.mapping(sourceDbm.columnRTimestamp(), trace.columnRTimestamp());
+ *
+ *     // Register column [baseLibraryId]
+ *     request.mapping(sourceDbm.columnBaseLibraryId(), trace.referrerNextLibraryByBaseIdList().columnLibraryId());
+ *
+ *     // Register column [nextLibraryId]
+ *     request.mapping(sourceDbm.columnNextLibraryId(), trace.referrerNextLibraryByBaseIdList().columnNextLibraryId());
+ *
+ *     // Register column [nextLibraryNextLibraryId]
+ *     request.mapping(sourceDbm.columnNextLibraryNextLibraryId(), trace.referrerNextLibraryByBaseIdList().foreignLibraryByNextId().columnLibraryId());
+ *
+ *     // Register column [nextLibraryNextLibraryName]
+ *     request.mapping(sourceDbm.columnNextLibraryNextLibraryName(), trace.referrerNextLibraryByBaseIdList().foreignLibraryByNextId().columnLibraryName());
+ *
+ *     // Register column [collectionId]
+ *     request.mapping(sourceDbm.columnCollectionId(), trace.referrerCollectionList().columnCollectionId());
+ *
+ *     // Register column [arrivalDate]
+ *     request.mapping(sourceDbm.columnCollectionArrivalDate(), trace.referrerCollectionList().columnArrivalDate());
+ *
+ *     // Register column [collectionStatusId]
+ *     request.mapping(sourceDbm.columnCollectionStatusId(), trace.referrerCollectionList().foreignCollectionStatusAsOne().columnCollectionId());
+ *
+ *     // Register column [collectionStatusCode]
+ *     request.mapping(sourceDbm.columnCollectionStatusCode(), trace.referrerCollectionList().foreignCollectionStatusAsOne().foreignCollectionStatusLookup().columnCollectionStatusCode());
+ *
+ *     // Register column [collectionStatusName]
+ *     request.mapping(sourceDbm.columnCollectionStatusName(), trace.referrerCollectionList().foreignCollectionStatusAsOne().foreignCollectionStatusLookup().columnCollectionStatusName());
+ *
+ *     // Register column [collectionBookId]
+ *     request.mapping(sourceDbm.columnCollectionBookId(), trace.referrerCollectionList().foreignBook().columnBookId());
+ *
+ *     // Register column [collectionBookName]
+ *     request.mapping(sourceDbm.columnCollectionBookName(), trace.referrerCollectionList().foreignBook().columnBookName());
+ *
+ *     // Register column [collectionBookAuthorId]
+ *     request.mapping(sourceDbm.columnCollectionBookAuthorId(), trace.referrerCollectionList().foreignBook().foreignAuthor().columnAuthorId());
+ *
+ *     // Register column [collectionBookAuthorName]
+ *     request.mapping(sourceDbm.columnCollectionBookAuthorName(), trace.referrerCollectionList().foreignBook().foreignAuthor().columnAuthorName());
+ *
+ *     // Register column [libraryUserLibraryId]
+ *     request.mapping(sourceDbm.columnLibraryUserLibraryId(), trace.referrerLibraryUserList().columnLibraryId());
+ *
+ *     // Register column [libraryUserLbUserId]
+ *     request.mapping(sourceDbm.columnLibraryUserLbUserId(), trace.referrerLibraryUserList().columnLbUserId());
+ *
+ *     // Register column [lendingLibraryId]
+ *     request.mapping(sourceDbm.columnLendingLibraryId(), trace.referrerLibraryUserList().referrerLendingList().columnLibraryId());
+ *
+ *     // Register column [lendingLbUserId]
+ *     request.mapping(sourceDbm.columnLendingLbUserId(), trace.referrerLibraryUserList().referrerLendingList().columnLbUserId());
+ *
+ *     // Register column [lendingDate]
+ *     request.mapping(sourceDbm.columnLendingDate(), trace.referrerLibraryUserList().referrerLendingList().columnLendingDate());
+ *
+ *     // Register column [lendingUUser]
+ *     request.mapping(sourceDbm.columnLendingUUser(), trace.referrerLibraryUserList().referrerLendingList().columnUUser());
+ *
+ *     // Register column [lendingUModule]
+ *     request.mapping(sourceDbm.columnLendingUModule(), trace.referrerLibraryUserList().referrerLendingList().columnUModule());
+ *
+ *     // Register column [lbUserId]
+ *     request.mapping(sourceDbm.columnLbUserId(), trace.referrerLibraryUserList().foreignLbUser().columnLbUserId());
+ *
+ *     // Register column [lbUserName]
+ *     request.mapping(sourceDbm.columnLbUserName(), trace.referrerLibraryUserList().foreignLbUser().columnLbUserName());
+ *
+ *     return request;
+ * }
+ * 
+ * private java.util.List&gt;HierarchyFlatLibrary&gt; createFlatLibraryList() {
+ *     (...select and get list)
+ *     return flatLibraryList;
+ * }
+ * 
+ * 
+ * === Relation Trace Tips ===
+ * 
+ *   RelationTrace.f + [Code Assist] -- go to Foreign
+ *   RelationTrace.r + [Code Assist] -- go to Referrer
+ *   RelationTrace.c + [Code Assist] -- end relation by Column
+ *
+ * 
+ * <pre>
+ * @author DBFlute(AutoGenerator)
+ * @param <LOCAL_ENTITY> The type of local entity extends Entity
+ */
+ @ SuppressWarnings("unchecked")
+public class HierarchyArranger<LOCAL_ENTITY extends Entity> {
+
+    // ===================================================================================
+    //                                                                                Main
+    //                                                                                ====
+    /**
+     * Arrange hierarchy.
+     * 
+     * @param request Hierarchy request. (NotNull)
+     * @return The list of local entity. (NotNull)
+     */
+    public List<LOCAL_ENTITY> arrangeHierarchy(
+            HierarchyRequest<LOCAL_ENTITY> request) {
+        final List<LOCAL_ENTITY> localTableList = new ArrayList<LOCAL_ENTITY>();
+        final Map<String, Entity> alreadyRegisteredEntityMap = new HashMap<String, Entity>();
+
+        // ============
+        // Record Loop!
+        // ============
+        final HierarchySourceIterator sourceIterator = request
+                .getSourceIterator();
+        while (sourceIterator.hasNext()) {
+            final HierarchySourceRow sourceRow = sourceIterator.next();
+            final TopInfo<LOCAL_ENTITY> topInfo = new TopInfo<LOCAL_ENTITY>();
+            topInfo.setHierarchyRequest(request);
+            topInfo.setSourceRow(sourceRow);
+            topInfo.setAlreadyRegisteredEntityMap(alreadyRegisteredEntityMap);
+
+            final Map<String, Object> primaryKeyMap = extractTopPrimaryKeyMapFromSource(topInfo);
+            final String alreadyRegisteredKey = buildTopAlreadyRegisteredKey(primaryKeyMap);
+            if (alreadyRegisteredEntityMap.containsKey(alreadyRegisteredKey)) {
+                final Entity localEntity = alreadyRegisteredEntityMap
+                        .get(alreadyRegisteredKey);
+                topInfo.setLocalEntity(localEntity);
+            } else {
+                // Make local entity and register it to the result list.
+                final LOCAL_ENTITY localEntity = newLocalEntity(request
+                        .getDestinationDBMeta());
+                topInfo.setLocalEntity(localEntity);
+                localTableList.add(localEntity);
+                alreadyRegisteredEntityMap.put(alreadyRegisteredKey,
+                        localEntity);
+            }
+
+            // ============
+            // Column Loop!
+            // ============
+            doColumnLoop(topInfo);
+        }
+
+        // Clear modified properties.
+        final java.util.Set<String> alreadyRegisteredEntityKeySet = alreadyRegisteredEntityMap
+                .keySet();
+        for (String key : alreadyRegisteredEntityKeySet) {
+            final Entity currentRegisteredEntity = alreadyRegisteredEntityMap
+                    .get(key);
+            currentRegisteredEntity.clearModifiedPropertyNames();
+        }
+
+        return localTableList;
+    }
+
+    /**
+     * Build top already-registered key.
+     * 
+     * @param primaryKeyMap The map of primary key. (NotNull)
+     * @return Top already-registered key. (NotNull)
+     */
+    protected String buildTopAlreadyRegisteredKey(
+            Map<String, Object> primaryKeyMap) {
+        return HierarchyRequestElement.TOP_KEY + ":" + primaryKeyMap;
+    }
+
+    /**
+     * Do column loop.
+     * 
+     * @param topInfo The information object of top that has generics of the type of local entity. (NotNull)
+     */
+    protected void doColumnLoop(TopInfo<LOCAL_ENTITY> topInfo) {
+        final HierarchyRequest<LOCAL_ENTITY> request = topInfo
+                .getHierarchyRequest();
+        final Entity localEntity = topInfo.getLocalEntity();
+        final List<HierarchyRequestElement> requestElementList = request
+                .getRequestElementList();
+
+        // ============
+        // Column Loop!
+        // ============
+        for (HierarchyRequestElement requestElement : requestElementList) {
+            final List<String> relationPropertyNameList = requestElement
+                    .getRelationPropertyNameList();
+
+            // If the column belongs to local entity, inject the value to entity and continue loop.
+            if (relationPropertyNameList == null
+                    || relationPropertyNameList.isEmpty()) {
+                final HierarchySourceColumn sourceColumn = requestElement
+                        .getSourceColumnInfo();
+                final HierarchySourceRow sourceRow = topInfo.getSourceRow();
+                final Object sourceColumnValue = extractColumnValueFromSource(
+                        sourceRow, sourceColumn);
+                final ColumnInfo destinationColumnInfo = requestElement
+                        .getDestinationColumnInfo();
+                injectColumnValueToDestinationIfNotNull(localEntity,
+                        destinationColumnInfo, sourceColumnValue);
+                continue;
+            }
+
+            // ==============
+            // Relation Loop!
+            // ==============
+            doRelationLoop(topInfo, requestElement, relationPropertyNameList);
+        }
+    }
+
+    /**
+     * Do relation loop.
+     * 
+     * @param topInfo The information object of top that has generics of local entity. (NotNull)
+     * @param requestElement The element of request. This is relation loop resource. (NotNull)
+     * @param relationPropNameList The list of relation property name that has generics of string. (NotNull)
+     */
+    protected void doRelationLoop(TopInfo<LOCAL_ENTITY> topInfo,
+            HierarchyRequestElement requestElement,
+            java.util.List<String> relationPropNameList) {
+        final HierarchyRequest<LOCAL_ENTITY> request = topInfo
+                .getHierarchyRequest();
+        final Map<String, Entity> alreadyRegisteredEntityMap = topInfo
+                .getAlreadyRegisteredEntityMap();
+
+        // Temporary variables for local
+        Entity localEntity = topInfo.getLocalEntity();// as Default
+        DBMeta localDBMeta = request.getDestinationDBMeta();// as Default
+        String localRelationPath = HierarchyRequestElement.TOP_KEY;// as Default
+
+        // ==============
+        // Relation Loop!
+        // ==============
+        final StringBuilder relationPropKeyStringBuilder = new StringBuilder();
+        int relationLoopCount = 0;
+        for (String relationPropName : relationPropNameList) {
+            if (relationPropKeyStringBuilder.length() > 0) {
+                relationPropKeyStringBuilder.append("_");
+            }
+            relationPropKeyStringBuilder.append(relationPropName);
+            final String targetRelationPath = relationPropKeyStringBuilder
+                    .toString();
+            final RelationInfo relationInfo = localDBMeta
+                    .findRelationInfo(relationPropName);
+
+            final Map<String, Object> targetPrimaryKeyMap;
+            final String alreadyRegisteredEntityKey;
+            if (!relationInfo.isReferrer()) {
+                // =======
+                // Foreign
+                // =======
+                final ForeignInfo foreignInfo = localDBMeta
+                        .findForeignInfo(relationPropName);
+                final String foreignPropName = foreignInfo
+                        .getForeignPropertyName();
+
+                // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+                // If the value of primary key does not exist, break this relation path!
+                // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+                if (isNotExistPrimaryKey(topInfo, targetRelationPath)) {
+                    break;
+                }
+
+                targetPrimaryKeyMap = extractPrimaryKeyMapFromSource(topInfo,
+                        targetRelationPath);
+                alreadyRegisteredEntityKey = targetRelationPath + ":"
+                        + targetPrimaryKeyMap.toString();
+                if (!alreadyRegisteredEntityMap
+                        .containsKey(alreadyRegisteredEntityKey)) {
+                    // - - - - - - - - - - - - - - - - - - - - - - -
+                    // Initialize the foreign entity and inject it.
+                    // - - - - - - - - - - - - - - - - - - - - - - -
+                    final Entity foreignEntity = foreignInfo.getForeignDBMeta()
+                            .newEntity();
+                    injectForeignEntity(localEntity, foreignPropName,
+                            foreignEntity);
+
+                    // - - - - - - - - - - - - - - - - - -
+                    // Initialize primary key of foreign.
+                    // - - - - - - - - - - - - - - - - - -
+                    injectForeignPrimaryKey(foreignEntity, targetPrimaryKeyMap);
+
+                    // - - - - - - - - - - - - - - - - - -
+                    // Initialize foreign key of local.
+                    // - - - - - - - - - - - - - - - - - -
+                    injectLocalForeignKey(topInfo, localEntity, foreignInfo,
+                            targetRelationPath);
+
+                    // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+                    // Put foreign entity to the map of already-registered-entity.
+                    // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+                    alreadyRegisteredEntityMap.put(alreadyRegisteredEntityKey
+                            .toString(), foreignEntity);
+                } else {
+                    // - - - - - - - - - - - - - -
+                    // Inject the foreign entity.
+                    // - - - - - - - - - - - - - -
+                    final Entity foreignEntity = alreadyRegisteredEntityMap
+                            .get(alreadyRegisteredEntityKey);
+                    injectForeignEntity(localEntity, foreignPropName,
+                            foreignEntity);
+                }
+            } else {
+                // =======
+                // Referrer
+                // =======
+                final ReferrerInfo referrerInfo = localDBMeta
+                        .findReferrerInfo(relationPropName);
+
+                // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+                // Extract referrer list from current local entity and initialize it if needs.
+                // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+                List<Entity> referrerList = extractReferrerList(localEntity,
+                        referrerInfo);
+                if (referrerList == null) {
+                    String msg = "The referrer list should not be null: localEntity="
+                            + localEntity + " referrerInfo=" + referrerInfo;
+                    throw new IllegalStateException(msg);
+                }
+
+                // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+                // If the value of primary key does not exist, break this relation path!
+                // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+                if (isNotExistPrimaryKey(topInfo, targetRelationPath)) {
+                    break;
+                }
+
+                targetPrimaryKeyMap = extractPrimaryKeyMapFromSource(topInfo,
+                        targetRelationPath);
+                alreadyRegisteredEntityKey = targetRelationPath + ":"
+                        + targetPrimaryKeyMap.toString();
+                if (!alreadyRegisteredEntityMap
+                        .containsKey(alreadyRegisteredEntityKey)) {
+                    // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+                    // Initialize referrer entity and register it to the list of referrer with primary key value.
+                    // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+                    final Entity referrerEntity = relationInfo
+                            .getTargetDBMeta().newEntity();
+                    referrerList.add(referrerEntity);
+
+                    // - - - - - - - - - - - - - - - - - -
+                    // Initialize primary key of referrer.
+                    // - - - - - - - - - - - - - - - - - -
+                    injectReferrerPrimaryKey(referrerEntity,
+                            targetPrimaryKeyMap);
+
+                    // - - - - - - - - - - - - - - - - - -
+                    // Initialize foreign key of referrer.
+                    // - - - - - - - - - - - - - - - - - -
+                    injectReferrerForeignKey(topInfo, referrerEntity,
+                            referrerInfo, localRelationPath);
+
+                    // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+                    // Put referrer entity to the map of already-registered-entity.
+                    // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+                    alreadyRegisteredEntityMap.put(alreadyRegisteredEntityKey
+                            .toString(), referrerEntity);
+                }
+            }
+
+            // - - - - - - - - - - - - - - - - - -
+            // Set next value to current element.
+            // - - - - - - - - - - - - - - - - - -
+            localEntity = alreadyRegisteredEntityMap
+                    .get(alreadyRegisteredEntityKey);
+            localDBMeta = localEntity.getDBMeta();
+            localRelationPath = targetRelationPath;
+
+            if (relationLoopCount == (relationPropNameList.size() - 1)) {// The last loop!
+                // - - - - - - - - - - - -  
+                // Here is the last loop!
+                // - - - - - - - - - - - - 
+                doLastLoopInjection(topInfo, requestElement, localEntity,
+                        targetPrimaryKeyMap);
+            }
+            ++relationLoopCount;
+        }
+    }
+
+    /**
+     * Is not existing primary key at the relation path?.
+     * 
+     * @param topInfo The information object of top that has generics of local entity. (NotNull)
+     * @param relationPath The path of relation. (NotNull)
+     * @return Determination.
+     */
+    protected boolean isNotExistPrimaryKey(TopInfo<LOCAL_ENTITY> topInfo,
+            String relationPath) {
+        final Map<String, Object> primaryKeyMap = extractPrimaryKeyMapFromSource(
+                topInfo, relationPath);
+        final Set<String> keySet = primaryKeyMap.keySet();
+        for (String key : keySet) {
+            final Object value = primaryKeyMap.get(key);
+            if (value == null) {
+                return true;
+            }
+        }
+        return false;
+    }
+
+    /**
+     * Do last loop injection.
+     * 
+     * @param topInfo The information object of top that has generics of local entity. (NotNull)
+     * @param requestElement The element of request. This is relation loop resource. (NotNull)
+     * @param localEntity The interface of local entity. (NotNull)
+     * @param primaryKeyMap The map of primary key. (NotNull)
+     */
+    protected void doLastLoopInjection(TopInfo<LOCAL_ENTITY> topInfo,
+            HierarchyRequestElement requestElement, Entity localEntity,
+            Map<String, Object> primaryKeyMap) {
+        final ColumnInfo destinationColumnInfo = requestElement
+                .getDestinationColumnInfo();
+        if (!primaryKeyMap.containsKey(destinationColumnInfo.getColumnDbName())) {// The column is primary key!
+            final HierarchySourceRow sourceRow = topInfo.getSourceRow();
+            final HierarchySourceColumn sourceColumnInfo = requestElement
+                    .getSourceColumnInfo();
+            final Object sourceColumnValue = extractColumnValueFromSource(
+                    sourceRow, sourceColumnInfo);
+            if (sourceColumnValue != null) {
+                injectColumnValueToDestinationIfNotNull(localEntity,
+                        destinationColumnInfo, sourceColumnValue);
+            }
+        }
+    }
+
+    // ===================================================================================
+    //                                                                       Extract Logic
+    //                                                                       =============
+    protected Map<String, Object> extractTopPrimaryKeyMapFromSource(
+            TopInfo<LOCAL_ENTITY> topInfo) {
+        return extractPrimaryKeyMapFromSource(topInfo,
+                HierarchyRequestElement.TOP_KEY);
+    }
+
+    protected Map<String, Object> extractPrimaryKeyMapFromSource(
+            TopInfo<LOCAL_ENTITY> topInfo, String relationPath) {
+        final HierarchyRequest<LOCAL_ENTITY> request = topInfo
+                .getHierarchyRequest();
+        final HierarchySourceRow sourceRow = topInfo.getSourceRow();
+        final java.util.List<HierarchyRequestElement> primaryKeyElement = request
+                .findPrimaryKeyElement(relationPath);
+        final java.util.Map<String, Object> primaryKeyMap = new java.util.LinkedHashMap<String, Object>();
+        for (HierarchyRequestElement element : primaryKeyElement) {
+            final HierarchySourceColumn sourcePrimaryKey = element
+                    .getSourceColumnInfo();
+            final Object sourcePrimaryKeyValue = extractColumnValueFromSource(
+                    sourceRow, sourcePrimaryKey);
+            primaryKeyMap.put(element.getDestinationColumnInfo()
+                    .getColumnDbName(), sourcePrimaryKeyValue);
+        }
+        return primaryKeyMap;
+    }
+
+    protected Object extractColumnValueFromSource(HierarchySourceRow sourceRow,
+            HierarchySourceColumn sourceColumn) {
+        return sourceRow.extractColumnValue(sourceColumn);
+    }
+
+    @SuppressWarnings("unchecked")
+    protected java.util.List<Entity> extractReferrerList(Entity entity,
+            ReferrerInfo referrerInfo) {
+        return (java.util.List<Entity>) invoke(referrerInfo.findGetter(),
+                entity, new Object[] {});
+    }
+
+    // ===================================================================================
+    //                                                                        Inject Logic
+    //                                                                        ============
+    /**
+     * @param entity Entity. (NotNull)
+     * @param columnInfo Column info. (NotNull)
+     * @param columnValue Column value. (NotNull)
+     */
+    protected void injectColumnValueToDestinationIfNotNull(Entity entity,
+            ColumnInfo columnInfo, final Object columnValue) {
+        if (columnValue != null) {
+            injectColumnValueToDestination(entity,
+                    columnInfo.getColumnDbName(), columnValue);
+        }
+    }
+
+    protected void injectColumnValueToDestination(Entity entity,
+            String columnDbName, final Object columnValue) {
+        if (columnValue == null) {
+            String msg = "The argument[columnValue] should not be null: ";
+            msg = msg + " table=" + entity.getTableDbName() + " column="
+                    + columnDbName;
+            throw new IllegalStateException(msg);
+        }
+        invoke(entity.getDBMeta().findColumnInfo(columnDbName).findSetter(),
+                entity, new Object[] { columnValue });
+    }
+
+    protected void injectColumnValueMapToDestination(Entity entity,
+            final Map<String, Object> columnValueMap) {
+        final Set<String> columnNameSet = columnValueMap.keySet();
+        for (String columnName : columnNameSet) {
+            final Object columnValue = columnValueMap.get(columnName);
+            injectColumnValueToDestination(entity, columnName, columnValue);
+        }
+    }
+
+    protected void injectForeignEntity(Entity entity, String foreignPropName,
+            Entity foreignEntity) {
+        final String capPropReferrerName = initCap(foreignPropName);
+        final Method method = findMethod(entity.getClass(), "set"
+                + capPropReferrerName, new Class[] { foreignEntity.getDBMeta()
+                .getEntityType() });
+        invoke(method, entity, new Object[] { foreignEntity });
+    }
+
+    protected void injectReferrerList(Entity entity, ReferrerInfo referrerInfo,
+            java.util.List<Entity> referrerList) {
+        invoke(referrerInfo.findSetter(), entity, new Object[] { referrerList });
+    }
+
+    protected void injectForeignPrimaryKey(Entity foreignEntity,
+            Map<String, Object> foreigPrimaryKeyMap) {
+        injectColumnValueMapToDestination(foreignEntity, foreigPrimaryKeyMap);
+    }
+
+    protected void injectReferrerPrimaryKey(Entity referrerEntity,
+            Map<String, Object> referrerPrimaryKeyMap) {
+        injectColumnValueMapToDestination(referrerEntity, referrerPrimaryKeyMap);
+    }
+
+    protected void injectLocalForeignKey(TopInfo<LOCAL_ENTITY> topInfo,
+            Entity localEntity, ForeignInfo foreignInfo,
+            String foreignRelationPath) {
+        final HierarchyRequest<LOCAL_ENTITY> request = topInfo
+                .getHierarchyRequest();
+        final Map<String, Object> foreignPrimaryKeyMap = extractPrimaryKeyMapFromSource(
+                topInfo, foreignRelationPath);
+        final List<HierarchyRequestElement> primaryKeyElementList = request
+                .findPrimaryKeyElement(foreignRelationPath);
+        final Map<String, Object> localForeignKeyMap = new HashMap<String, Object>();
+        for (HierarchyRequestElement foreignElement : primaryKeyElementList) {
+            final String foreignPrimaryKeyColumnName = foreignElement
+                    .getDestinationColumnInfo().getColumnDbName();
+            final ColumnInfo localForeignKeyInfo = foreignInfo
+                    .findLocalByForeign(foreignPrimaryKeyColumnName);
+            final Object localForeignKeyValue = foreignPrimaryKeyMap
+                    .get(foreignPrimaryKeyColumnName);
+            localForeignKeyMap.put(localForeignKeyInfo.getColumnDbName(),
+                    localForeignKeyValue);
+        }
+        injectColumnValueMapToDestination(localEntity, localForeignKeyMap);
+    }
+
+    protected void injectReferrerForeignKey(TopInfo<LOCAL_ENTITY> topInfo,
+            Entity referrerEntity, ReferrerInfo referrerInfo,
+            String localRelationPath) {
+        final HierarchyRequest<LOCAL_ENTITY> request = topInfo
+                .getHierarchyRequest();
+        final Map<String, Object> localPrimaryKeyMap = extractPrimaryKeyMapFromSource(
+                topInfo, localRelationPath);
+        final List<HierarchyRequestElement> primaryKeyElementList = request
+                .findPrimaryKeyElement(localRelationPath);
+        final Map<String, Object> referrerForeignKeyMap = new HashMap<String, Object>();
+        for (HierarchyRequestElement localElement : primaryKeyElementList) {
+            final String localPrimaryKeyName = localElement
+                    .getDestinationColumnInfo().getColumnDbName();
+            final ColumnInfo referrerForeignKeyInfo = referrerInfo
+                    .findReferrerByLocal(localPrimaryKeyName);
+            final Object referrerForeignKeyValue = localPrimaryKeyMap
+                    .get(localPrimaryKeyName);
+            referrerForeignKeyMap.put(referrerForeignKeyInfo.getColumnDbName(),
+                    referrerForeignKeyValue);
+        }
+        injectColumnValueMapToDestination(referrerEntity, referrerForeignKeyMap);
+    }
+
+    // ===================================================================================
+    //                                                                         Other Logic
+    //                                                                         ===========
+    @SuppressWarnings("unchecked")
+    protected LOCAL_ENTITY newLocalEntity(final DBMeta destinationDBMeta) {
+        final LOCAL_ENTITY localEntity;
+        try {
+            localEntity = (LOCAL_ENTITY) destinationDBMeta.getEntityType()
+                    .newInstance();
+        } catch (InstantiationException e) {
+            throw new IllegalStateException(e);
+        } catch (IllegalAccessException e) {
+            throw new IllegalStateException(e);
+        }
+        return localEntity;
+    }
+
+    // ===================================================================================
+    //                                                                              Helper
+    //                                                                              ======
+    protected String initCap(final String name) {
+        final String capPropReferrerName = name.substring(0, 1).toUpperCase()
+                + name.substring(1);
+        return capPropReferrerName;
+    }
+
+    private java.lang.reflect.Method findMethod(Class clazz, String methodName,
+            Class[] argTypes) {
+        try {
+            return clazz.getMethod(methodName, argTypes);
+        } catch (NoSuchMethodException ex) {
+            String msg = "class=" + clazz + " method=" + methodName + "-"
+                    + java.util.Arrays.asList(argTypes);
+            throw new RuntimeException(msg, ex);
+        }
+    }
+
+    private Object invoke(java.lang.reflect.Method method, Object target,
+            Object[] args) {
+        try {
+            return method.invoke(target, args);
+        } catch (RuntimeException e) {
+            final String lineSeparator = System.getProperty("line.separator");
+            final Class<?>[] parameterTypes = method.getParameterTypes();
+            String msg = "Invoking method threw the exception:" + lineSeparator;
+            msg = msg
+                    + "/* * * * * * * * * * * * * * * * * * * * * * * * * * * *"
+                    + lineSeparator;
+            msg = msg + "[" + method.getDeclaringClass().getSimpleName() + "."
+                    + method.getName() + "()]" + lineSeparator;
+            msg = msg + " methodArgTypes     = {"
+                    + createTypeViewFromTypeArray(parameterTypes) + "}"
+                    + lineSeparator;
+            msg = msg + " specifiedArgValues = {"
+                    + createValueViewFromValueArray(args) + "}" + lineSeparator;
+            msg = msg + " specifiedArgTypes  = {"
+                    + createTypeViewFromValueArray(args) + "}" + lineSeparator;
+            if (parameterTypes.length > 0 && args.length > 0 && args[0] != null
+                    && !parameterTypes[0].equals(args[0].getClass())) {
+                msg = msg + " " + lineSeparator;
+                final String compareString = "{" + parameterTypes[0] + " -- "
+                        + args[0].getClass() + "}";
+                msg = msg + " *Warning! The argType is ummatched: "
+                        + compareString + lineSeparator;
+            }
+            msg = msg + "* * * * * * * * * */" + lineSeparator;
+            throw new RuntimeException(msg, e);
+        } catch (java.lang.reflect.InvocationTargetException ex) {
+            Throwable t = ex.getCause();
+            if (t instanceof RuntimeException) {
+                throw (RuntimeException) t;
+            }
+            if (t instanceof Error) {
+                throw (Error) t;
+            }
+            String msg = "target=" + target + " method=" + method + "-"
+                    + java.util.Arrays.asList(args);
+            throw new RuntimeException(msg, ex);
+        } catch (IllegalAccessException ex) {
+            String msg = "target=" + target + " method=" + method + "-"
+                    + java.util.Arrays.asList(args);
+            throw new RuntimeException(msg, ex);
+        }
+    }
+
+    private String createValueViewFromValueArray(Object[] array) {
+        final StringBuffer sb = new StringBuffer();
+        for (int i = 0; i < array.length; i++) {
+            final Object value = array[i];
+            if (sb.length() == 0) {
+                sb.append(value);
+            } else {
+                sb.append(", ").append(value);
+            }
+        }
+        return sb.toString();
+    }
+
+    private String createTypeViewFromValueArray(Object[] array) {
+        final StringBuffer sb = new StringBuffer();
+        for (int i = 0; i < array.length; i++) {
+            final Object value = array[i];
+            final String typeName = value != null ? value.getClass()
+                    .getSimpleName() : "null";
+            if (sb.length() == 0) {
+                sb.append(typeName);
+            } else {
+                sb.append(", ").append(typeName);
+            }
+        }
+        return sb.toString();
+    }
+
+    private String createTypeViewFromTypeArray(Class[] array) {
+        final StringBuffer sb = new StringBuffer();
+        for (int i = 0; i < array.length; i++) {
+            final Class type = array[i];
+            if (sb.length() == 0) {
+                sb.append(type.getSimpleName());
+            } else {
+                sb.append(", ").append(type.getSimpleName());
+            }
+        }
+        return sb.toString();
+    }
+
+    // ===================================================================================
+    //                                                                          Info Class
+    //                                                                          ==========
+    protected static class TopInfo<LOCAL_ENTITY extends Entity> {
+        private HierarchyRequest<LOCAL_ENTITY> hierarchyRequest;
+
+        private HierarchySourceRow sourceRow;
+
+        private Entity localEntity;
+
+        private Map<String, Entity> alreadyRegisteredEntityMap;
+
+        public HierarchySourceRow getSourceRow() {
+            return sourceRow;
+        }
+
+        public void setSourceRow(HierarchySourceRow sourceRow) {
+            this.sourceRow = sourceRow;
+        }
+
+        public Entity getLocalEntity() {
+            return localEntity;
+        }
+
+        public void setLocalEntity(Entity localEntity) {
+            this.localEntity = localEntity;
+        }
+
+        public Map<String, Entity> getAlreadyRegisteredEntityMap() {
+            return alreadyRegisteredEntityMap;
+        }
+
+        public void setAlreadyRegisteredEntityMap(
+                Map<String, Entity> alreadyRegisteredEntityMap) {
+            this.alreadyRegisteredEntityMap = alreadyRegisteredEntityMap;
+        }
+
+        public HierarchyRequest<LOCAL_ENTITY> getHierarchyRequest() {
+            return hierarchyRequest;
+        }
+
+        public void setHierarchyRequest(
+                HierarchyRequest<LOCAL_ENTITY> hierarchyRequest) {
+            this.hierarchyRequest = hierarchyRequest;
+        }
+    }
+}


Property changes on: announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/dbmeta/hierarchy/HierarchyArranger.java
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/dbmeta/hierarchy/HierarchyBasicRequest.java
===================================================================
--- announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/dbmeta/hierarchy/HierarchyBasicRequest.java	                        (rev 0)
+++ announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/dbmeta/hierarchy/HierarchyBasicRequest.java	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,91 @@
+package jp.sf.pal.announcement.db.allcommon.dbmeta.hierarchy;
+
+import jp.sf.pal.announcement.db.allcommon.Entity;
+import jp.sf.pal.announcement.db.allcommon.dbmeta.DBMeta;
+import jp.sf.pal.announcement.db.allcommon.dbmeta.info.ColumnInfo;
+
+/**
+ * The basic request of hierarchy.
+ * 
+ * @author DBFlute(AutoGenerator)
+ * @param <LOCAL_ENTITY> The type of local entity.
+ * @param <LOCAL_RELATION_TRACE> The type of local relation trace.
+ */
+ @ SuppressWarnings("unchecked")
+public class HierarchyBasicRequest<LOCAL_ENTITY extends Entity, LOCAL_RELATION_TRACE extends DBMeta.RelationTrace>
+        extends HierarchyRequest<LOCAL_ENTITY> {
+
+    // ===================================================================================
+    //                                                                           Attribute
+    //                                                                           =========
+    protected ColumnInfo _currentSourceColumnInfo;
+
+    // ===================================================================================
+    //                                                                         Constructor
+    //                                                                         ===========
+    /**
+     * Constructor.
+     * 
+     * @param localEntityType The type of local entity. (NotNull)
+     */
+    public HierarchyBasicRequest(Class<LOCAL_ENTITY> localEntityType) {
+        super(localEntityType);
+    }
+
+    // ===================================================================================
+    //                                                                         Easy-to-Use
+    //                                                                         ===========
+    // -----------------------------------------------------
+    //                                                public
+    //                                                ------
+    /**
+     * Set up source.
+     * 
+     * @param sourceColumnInfo The column info of source. (NotNull)
+     * @return Destination relation trace. (NotNull)
+     */
+    public DestinationRelationTrace<LOCAL_RELATION_TRACE> src(
+            ColumnInfo sourceColumnInfo) {
+        this._currentSourceColumnInfo = sourceColumnInfo;
+        final HierarchyBasicRequest<LOCAL_ENTITY, LOCAL_RELATION_TRACE> outer = this;
+        return new DestinationRelationTrace<LOCAL_RELATION_TRACE>() {
+            public LOCAL_RELATION_TRACE dst() {
+                return outer.dst();
+            }
+        };
+    }
+
+    /**
+     * Set up destination.
+     * 
+     * @return Local relation trace. (NotNull)
+     */
+    public LOCAL_RELATION_TRACE dst() {
+        final DBMeta.RelationTraceFixHandler handler = new DBMeta.RelationTraceFixHandler() {
+            public void handleFixedTrace(DBMeta.RelationTrace relationTrace) {
+                mapping(_currentSourceColumnInfo, relationTrace);
+            }
+        };
+        final Object target = destinationDBMeta;
+        java.lang.reflect.Method method = null;
+        try {
+            method = target.getClass().getMethod("createRelationTrace",
+                    new Class[] { DBMeta.RelationTraceFixHandler.class });
+        } catch (NoSuchMethodException e) {
+            String msg = "Not found method: method=createRelationTrace(DBMeta.RelationTraceFixHandler)";
+            throw new IllegalStateException(msg, e);
+        }
+        try {
+            return (LOCAL_RELATION_TRACE) method.invoke(target,
+                    new Object[] { handler });
+        } catch (IllegalAccessException e) {
+            throw new IllegalStateException(e);
+        } catch (java.lang.reflect.InvocationTargetException e) {
+            throw new IllegalStateException(e.getCause());
+        }
+    }
+
+    public static interface DestinationRelationTrace<LOCAL_RELATION_TRACE> {
+        public LOCAL_RELATION_TRACE dst();
+    }
+}


Property changes on: announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/dbmeta/hierarchy/HierarchyBasicRequest.java
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/dbmeta/hierarchy/HierarchyRequest.java
===================================================================
--- announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/dbmeta/hierarchy/HierarchyRequest.java	                        (rev 0)
+++ announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/dbmeta/hierarchy/HierarchyRequest.java	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,343 @@
+package jp.sf.pal.announcement.db.allcommon.dbmeta.hierarchy;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import jp.sf.pal.announcement.db.allcommon.Entity;
+import jp.sf.pal.announcement.db.allcommon.dbmeta.DBMeta;
+import jp.sf.pal.announcement.db.allcommon.dbmeta.hierarchy.basic.HierarchySourceEntityColumn;
+import jp.sf.pal.announcement.db.allcommon.dbmeta.hierarchy.basic.HierarchySourceEntityListIterator;
+import jp.sf.pal.announcement.db.allcommon.dbmeta.info.ColumnInfo;
+import jp.sf.pal.announcement.db.allcommon.dbmeta.info.RelationInfo;
+
+/**
+ * The request of hierarchy.
+ * 
+ * @author DBFlute(AutoGenerator)
+ * @param <LOCAL_ENTITY> The type of local entity.
+ */
+ @ SuppressWarnings("unchecked")
+public class HierarchyRequest<LOCAL_ENTITY extends Entity> {
+
+    // ===================================================================================
+    //                                                                           Attribute
+    //                                                                           =========
+    /** The dbmeta of desination. */
+    protected DBMeta destinationDBMeta;
+
+    /** The iterator of hierarychy source. */
+    protected HierarchySourceIterator sourceIterator;
+
+    /** The list of request element. */
+    protected List<HierarchyRequestElement> requestElementList = new ArrayList<HierarchyRequestElement>();
+
+    /** The set of already registered source column info for check. */
+    protected java.util.Set<ColumnInfo> alreadyRegisteredSourceColumnInfoSet4Check = new java.util.HashSet<ColumnInfo>();
+
+    /** First source column info for check. */
+    protected ColumnInfo firstSourceColumnInfo4Check;
+
+    // ===================================================================================
+    //                                                                         Constructor
+    //                                                                         ===========
+    /**
+     * Constructor.
+     * 
+     * @param localEntityType The type of local entity. (NotNull)
+     */
+    public HierarchyRequest(Class<LOCAL_ENTITY> localEntityType) {
+        LOCAL_ENTITY localEntity;
+        try {
+            localEntity = localEntityType.newInstance();
+        } catch (InstantiationException e) {
+            String msg = "localEntityType.newInstance() threw the InstantiationException:";
+            msg = msg + " localEntityType=" + localEntityType;
+            throw new IllegalStateException(msg, e);
+        } catch (IllegalAccessException e) {
+            String msg = "localEntityType.newInstance() threw the IllegalAccessException:";
+            msg = msg + " localEntityType=" + localEntityType;
+            throw new IllegalStateException(msg, e);
+        }
+        destinationDBMeta = localEntity.getDBMeta();
+    }
+
+    // ===================================================================================
+    //                                                                         Easy-to-Use
+    //                                                                         ===========
+    // -----------------------------------------------------
+    //                                                public
+    //                                                ------
+    /**
+     * Register the list of source. <br />
+     * This method uses the default source iterator.
+     * 
+     * @param sourceList The list of source. (NotNull)
+     * @param <SOURCE> The type of source. (NotNull)
+     */
+    public <SOURCE> void registerSourceList(java.util.List<SOURCE> sourceList) {
+        sourceIterator = createDefaultSourceIterator(sourceList);
+    }
+
+    /**
+     * Set up mapping between the source column and the destination relation.
+     * 
+     * @param sourceColumn The column of source. (NotNull)
+     * @param relationTrace The relation trace of destination. (NotNull)
+     */
+    public void mapping(HierarchySourceColumn sourceColumn,
+            DBMeta.RelationTrace relationTrace) {
+        setupElement(sourceColumn, relationTrace.getTraceColumn());
+        addRelationToLastElement(relationTrace.getTraceRelation());
+    }
+
+    /**
+     * Set up mapping between the source column and the destination relation.
+     * 
+     * @param sourceColumnInfo The column info of source. (NotNull)
+     * @param relationTrace The relation trace of destination. (NotNull)
+     */
+    public void mapping(ColumnInfo sourceColumnInfo,
+            DBMeta.RelationTrace relationTrace) {
+        setupElement(sourceColumnInfo, relationTrace.getTraceColumn());
+        addRelationToLastElement(relationTrace.getTraceRelation());
+    }
+
+    // -----------------------------------------------------
+    //                                               internal
+    //                                               -------
+    /**
+     * Set up element.
+     * 
+     * @param sourceColumn The column of source. (NotNull)
+     * @param destinationColumnInfo The column info of destination. (NotNull)
+     */
+    protected void setupElement(HierarchySourceColumn sourceColumn,
+            ColumnInfo destinationColumnInfo) {
+        assertSameLocalDestinationDBMeta(destinationColumnInfo);
+        final HierarchyRequestElement element = new HierarchyRequestElement();
+        requestElementList.add(element);
+        element.mapping(sourceColumn, destinationColumnInfo);
+        element.setDestinationDBMeta(destinationColumnInfo.getDBMeta());
+    }
+
+    /**
+     * Set up element. <br />
+     * This method uses the default source column.
+     * 
+     * @param sourceColumnInfo The column info of source. (NotNull)
+     * @param destinationColumnInfo The column info of destination. (NotNull)
+     */
+    protected void setupElement(ColumnInfo sourceColumnInfo,
+            ColumnInfo destinationColumnInfo) {
+        if (alreadyRegisteredSourceColumnInfoSet4Check
+                .contains(sourceColumnInfo)) {
+            String msg = "The wrong sourceColumnInfo!" + getLineSeparator();
+            msg = msg
+                    + "/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *"
+                    + getLineSeparator();
+            msg = msg + "The source column has already been registered:"
+                    + getLineSeparator();
+            msg = msg + "- - - - -" + getLineSeparator();
+            msg = msg + " sourceColumnInfo=" + sourceColumnInfo
+                    + getLineSeparator();
+            msg = msg + " registeredColumnInfo="
+                    + alreadyRegisteredSourceColumnInfoSet4Check
+                    + getLineSeparator();
+            msg = msg + "* * * * * * * * * */" + getLineSeparator();
+            throw new IllegalStateException(msg);
+        }
+        alreadyRegisteredSourceColumnInfoSet4Check.add(sourceColumnInfo);
+        assertSameSourceDBMeta(sourceColumnInfo);
+        assertSameLocalDestinationDBMeta(destinationColumnInfo);
+        final HierarchyRequestElement element = new HierarchyRequestElement();
+        requestElementList.add(element);
+        final HierarchySourceColumn sourceColumn = createDefaultSourceColumn(sourceColumnInfo);
+        element.mapping(sourceColumn, destinationColumnInfo);
+        element.setDestinationDBMeta(destinationColumnInfo.getDBMeta());
+    }
+
+    /**
+     * Make relatetion by the list of relation info.
+     * 
+     * @param relationInfoList The list of relation info. (NotNull)
+     */
+    protected void addRelationToLastElement(List<RelationInfo> relationInfoList) {
+        if (requestElementList.isEmpty()) {
+            String msg = "You shuold invoke mapping() before invoking relation()!";
+            throw new IllegalStateException(msg);
+        }
+        for (RelationInfo relationInfo : relationInfoList) {
+            final int lastIndex = requestElementList.size() - 1;
+            final HierarchyRequestElement element = (HierarchyRequestElement) requestElementList
+                    .get(lastIndex);
+            element.relation(relationInfo);
+        }
+    }
+
+    /**
+     * Assert same source dbmeta.
+     * 
+     * @param sourceColumnInfo The column info of source. (NotNull)
+     */
+    protected void assertSameSourceDBMeta(ColumnInfo sourceColumnInfo) {
+        if (firstSourceColumnInfo4Check == null) {
+            firstSourceColumnInfo4Check = sourceColumnInfo;
+            return;
+        }
+        final DBMeta expectedDBMeta = firstSourceColumnInfo4Check.getDBMeta();
+        final DBMeta actualDBMeta = sourceColumnInfo.getDBMeta();
+        if (!expectedDBMeta.equals(actualDBMeta)) {
+            String msg = "The wrong sourceColumnInfo!" + getLineSeparator();
+            msg = msg
+                    + "/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *"
+                    + getLineSeparator();
+            msg = msg + "The dbmeta of sourceColumnInfo is difference from";
+            msg = msg + " the one of Your First Source Column Info:"
+                    + getLineSeparator();
+            msg = msg + "- - - - -" + getLineSeparator();
+            msg = msg + "sourceColumnInfo=" + sourceColumnInfo
+                    + getLineSeparator();
+            msg = msg + "firstSourceColumnInfo4Check="
+                    + firstSourceColumnInfo4Check + getLineSeparator();
+            msg = msg + "* * * * * * * * * */" + getLineSeparator();
+            throw new IllegalStateException(msg);
+        }
+    }
+
+    /**
+     * Assert same source dbmeta.
+     * 
+     * @param sourceColumnInfo The column info of source. (NotNull)
+     */
+    protected void assertSameLocalDestinationDBMeta(
+            ColumnInfo destinationColumnInfo) {
+        if (!requestElementList.isEmpty()) {
+            final HierarchyRequestElement currentElement = currentElement();
+            final List<RelationInfo> relationInfoList = currentElement
+                    .getRelationInfoList();
+            if (relationInfoList.isEmpty()) {
+                final DBMeta actualDBMeta = currentElement()
+                        .getDestinationDBMeta();
+                final DBMeta expectedDBMeta = destinationDBMeta;
+                if (!expectedDBMeta.equals(actualDBMeta)) {
+                    String msg = "The wrong destinationColumnInfo!"
+                            + getLineSeparator();
+                    msg = msg
+                            + "/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *"
+                            + getLineSeparator();
+                    msg = msg
+                            + "The dbmeta of destinationColumnInfo is difference from";
+                    msg = msg + " the one of Your Local Entity:"
+                            + getLineSeparator();
+                    msg = msg + "- - - - -" + getLineSeparator();
+                    msg = msg + "destinationColumnInfo="
+                            + currentElement.getDestinationColumnInfo()
+                            + getLineSeparator();
+                    msg = msg + "localEntity="
+                            + destinationDBMeta.getEntityTypeName()
+                            + getLineSeparator();
+                    msg = msg + "* * * * * * * * * */" + getLineSeparator();
+                    throw new IllegalStateException(msg);
+                }
+            }
+        }
+    }
+
+    /**
+     * @param sourceList The list of source. (NotNull)
+     * @param <SOURCE> The type of source. (NotNull)
+     * @return Default source iterator. (NotNull)
+     */
+    protected <SOURCE> HierarchySourceIterator createDefaultSourceIterator(
+            java.util.List<SOURCE> sourceList) {
+        return new HierarchySourceEntityListIterator<SOURCE>(sourceList);
+    }
+
+    /**
+     * @param sourceColumnInfo The column info of source. (NotNull)
+     * @return Default source column. (NotNull)
+     */
+    protected HierarchySourceColumn createDefaultSourceColumn(
+            ColumnInfo sourceColumnInfo) {
+        return new HierarchySourceEntityColumn(sourceColumnInfo);
+    }
+
+    /**
+     * Get current element.
+     * 
+     * @return Current element. (NotNull)
+     */
+    protected HierarchyRequestElement currentElement() {
+        final int lastIndex = requestElementList.size() - 1;
+        return (HierarchyRequestElement) requestElementList.get(lastIndex);
+    }
+
+    // -----------------------------------------------------
+    //                                              Internal
+    //                                              --------
+    /**
+     * @param relationPropertyKey Relation Property key. (NotNull)
+     * @return The list of request element. (NotNull)
+     */
+    public List<HierarchyRequestElement> findPrimaryKeyElement(
+            String relationPropertyKey) {
+        final List<HierarchyRequestElement> resultList = new ArrayList<HierarchyRequestElement>();
+        for (HierarchyRequestElement element : requestElementList) {
+            if (!relationPropertyKey.equals(element.getRelationPropertyKey())) {
+                continue;
+            }
+            final ColumnInfo destinationColumnInfo = element
+                    .getDestinationColumnInfo();
+            if (!destinationColumnInfo.isPrimary()) {
+                continue;
+            }
+            resultList.add(element);
+        }
+        if (resultList.isEmpty()) {
+            String msg = "Not found primary key element by relationPropertyKey in requestElementList: ";
+            msg = msg + " relationPropertyKey=" + relationPropertyKey
+                    + " requestElementList=" + requestElementList;
+            throw new IllegalStateException(msg);
+        }
+        return resultList;
+    }
+
+    // ===================================================================================
+    //                                                                            Accessor
+    //                                                                            ========
+    public DBMeta getDestinationDBMeta() {
+        return destinationDBMeta;
+    }
+
+    public void setDestinationDBMeta(DBMeta destinationDBMeta) {
+        this.destinationDBMeta = destinationDBMeta;
+    }
+
+    public List<HierarchyRequestElement> getRequestElementList() {
+        return requestElementList;
+    }
+
+    public void addRequestElementList(HierarchyRequestElement element) {
+        this.requestElementList.add(element);
+    }
+
+    public HierarchySourceIterator getSourceIterator() {
+        return sourceIterator;
+    }
+
+    public void setSourceIterator(HierarchySourceIterator sourceIterator) {
+        this.sourceIterator = sourceIterator;
+    }
+
+    // ===================================================================================
+    //                                                                              Helper
+    //                                                                              ======
+    /**
+     * Get the value of line separator.
+     * 
+     * @return The value of line separator. (NotNull)
+     */
+    protected String getLineSeparator() {
+        return System.getProperty("line.separator");
+    }
+}


Property changes on: announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/dbmeta/hierarchy/HierarchyRequest.java
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/dbmeta/hierarchy/HierarchyRequestElement.java
===================================================================
--- announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/dbmeta/hierarchy/HierarchyRequestElement.java	                        (rev 0)
+++ announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/dbmeta/hierarchy/HierarchyRequestElement.java	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,128 @@
+package jp.sf.pal.announcement.db.allcommon.dbmeta.hierarchy;
+
+import java.util.List;
+
+import jp.sf.pal.announcement.db.allcommon.dbmeta.DBMeta;
+import jp.sf.pal.announcement.db.allcommon.dbmeta.info.ColumnInfo;
+import jp.sf.pal.announcement.db.allcommon.dbmeta.info.RelationInfo;
+
+/**
+ * @author DBFlute(AutoGenerator)
+ */
+ @ SuppressWarnings("unchecked")
+public class HierarchyRequestElement {
+
+    // ===================================================================================
+    //                                                                          Definition
+    //                                                                          ==========
+    /** Top key. */
+    public static final String TOP_KEY = "$top$";
+
+    // ===================================================================================
+    //                                                                           Attribute
+    //                                                                           =========
+    /** The column of source. */
+    protected HierarchySourceColumn sourceColumn;
+
+    /** The dbmeta of destination. */
+    protected DBMeta destinationDBMeta;
+
+    /** The column info of destination. */
+    protected ColumnInfo destinationColumnInfo;
+
+    /** The list of relation info. */
+    protected java.util.List<RelationInfo> relationInfoList = new java.util.ArrayList<RelationInfo>();
+
+    /** the list of relation property name. */
+    protected java.util.List<String> relationPropertyNameList = new java.util.ArrayList<String>();
+
+    /** Relation property key. Default value is TOP_KEY. */
+    protected String relationPropertyKey = TOP_KEY;
+
+    // ===================================================================================
+    //                                                                         Easy-to-Use
+    //                                                                         ===========
+    // -----------------------------------------------------
+    //                                              Internal
+    //                                              --------
+    /**
+     * Make mapping between the source column and the destination one.
+     * 
+     * @param sourceColumn The column of source. (NotNull)
+     * @param destinationColumnInfo The column info of destination. (NotNull)
+     */
+    public void mapping(HierarchySourceColumn sourceColumn,
+            ColumnInfo destinationColumnInfo) {
+        this.sourceColumn = sourceColumn;
+        this.destinationColumnInfo = destinationColumnInfo;
+    }
+
+    /**
+     * Make relatetion by relation info.
+     * 
+     * @param relationInfo Relation info. (NotNull)
+     */
+    public void relation(RelationInfo relationInfo) {
+        addRelationInfoList(relationInfo);
+    }
+
+    protected void addRelationInfoList(RelationInfo relationInfo) {
+        relationInfoList.add(relationInfo);
+        addRelationPropertyNameList(relationInfo.getRelationPropertyName());
+    }
+
+    protected void addRelationPropertyNameList(String relationPropertyName) {
+        relationPropertyNameList.add(relationPropertyName);
+        setupRelationPropertyKey();
+    }
+
+    protected void setupRelationPropertyKey() {
+        final StringBuilder sb = new StringBuilder();
+        for (String relationPropertyName : relationPropertyNameList) {
+            if (sb.length() > 0) {
+                sb.append("_");
+            }
+            sb.append(relationPropertyName);
+        }
+        this.relationPropertyKey = sb.toString();
+    }
+
+    // ===================================================================================
+    //                                                                            Accessor
+    //                                                                            ========
+    public HierarchySourceColumn getSourceColumnInfo() {
+        return sourceColumn;
+    }
+
+    public void setSourceColumnInfo(HierarchySourceColumn sourceColumn) {
+        this.sourceColumn = sourceColumn;
+    }
+
+    public void setDestinationDBMeta(DBMeta destinationDBMeta) {
+        this.destinationDBMeta = destinationDBMeta;
+    }
+
+    public DBMeta getDestinationDBMeta() {
+        return destinationDBMeta;
+    }
+
+    public ColumnInfo getDestinationColumnInfo() {
+        return destinationColumnInfo;
+    }
+
+    public java.util.List<RelationInfo> getRelationInfoList() {
+        return relationInfoList;
+    }
+
+    public List<String> getRelationPropertyNameList() {
+        return relationPropertyNameList;
+    }
+
+    public String getRelationPropertyKey() {
+        return relationPropertyKey;
+    }
+
+    public String toString() {
+        return sourceColumn + "," + destinationColumnInfo;
+    }
+}


Property changes on: announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/dbmeta/hierarchy/HierarchyRequestElement.java
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/dbmeta/hierarchy/HierarchySourceColumn.java
===================================================================
--- announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/dbmeta/hierarchy/HierarchySourceColumn.java	                        (rev 0)
+++ announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/dbmeta/hierarchy/HierarchySourceColumn.java	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,10 @@
+package jp.sf.pal.announcement.db.allcommon.dbmeta.hierarchy;
+
+/**
+ * @author DBFlute(AutoGenerator)
+ */
+ @ SuppressWarnings("unchecked")
+public interface HierarchySourceColumn {
+
+    public String getColumnName();
+}
\ No newline at end of file


Property changes on: announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/dbmeta/hierarchy/HierarchySourceColumn.java
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/dbmeta/hierarchy/HierarchySourceIterator.java
===================================================================
--- announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/dbmeta/hierarchy/HierarchySourceIterator.java	                        (rev 0)
+++ announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/dbmeta/hierarchy/HierarchySourceIterator.java	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,14 @@
+package jp.sf.pal.announcement.db.allcommon.dbmeta.hierarchy;
+
+/**
+ * @author DBFlute(AutoGenerator)
+ */
+ @ SuppressWarnings("unchecked")
+public interface HierarchySourceIterator {
+
+    public boolean hasNext();
+
+    public HierarchySourceRow next();
+
+    public HierarchySourceRow current();
+}
\ No newline at end of file


Property changes on: announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/dbmeta/hierarchy/HierarchySourceIterator.java
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/dbmeta/hierarchy/HierarchySourceRow.java
===================================================================
--- announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/dbmeta/hierarchy/HierarchySourceRow.java	                        (rev 0)
+++ announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/dbmeta/hierarchy/HierarchySourceRow.java	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,10 @@
+package jp.sf.pal.announcement.db.allcommon.dbmeta.hierarchy;
+
+/**
+ * @author DBFlute(AutoGenerator)
+ */
+ @ SuppressWarnings("unchecked")
+public interface HierarchySourceRow {
+
+    public Object extractColumnValue(HierarchySourceColumn columnInfo);
+}
\ No newline at end of file


Property changes on: announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/dbmeta/hierarchy/HierarchySourceRow.java
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/dbmeta/hierarchy/basic/HierarchySourceEntityColumn.java
===================================================================
--- announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/dbmeta/hierarchy/basic/HierarchySourceEntityColumn.java	                        (rev 0)
+++ announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/dbmeta/hierarchy/basic/HierarchySourceEntityColumn.java	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,24 @@
+package jp.sf.pal.announcement.db.allcommon.dbmeta.hierarchy.basic;
+
+import jp.sf.pal.announcement.db.allcommon.dbmeta.hierarchy.HierarchySourceColumn;
+import jp.sf.pal.announcement.db.allcommon.dbmeta.info.ColumnInfo;
+
+/**
+ * @author DBFlute(AutoGenerator)
+ */
+public class HierarchySourceEntityColumn implements HierarchySourceColumn {
+
+    protected ColumnInfo columnInfo;
+
+    public HierarchySourceEntityColumn(ColumnInfo columnInfo) {
+        this.columnInfo = columnInfo;
+    }
+
+    public String getColumnName() {
+        return columnInfo.getColumnDbName();
+    }
+
+    public java.lang.reflect.Method findGetter() {
+        return columnInfo.findGetter();
+    }
+}
\ No newline at end of file


Property changes on: announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/dbmeta/hierarchy/basic/HierarchySourceEntityColumn.java
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/dbmeta/hierarchy/basic/HierarchySourceEntityListIterator.java
===================================================================
--- announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/dbmeta/hierarchy/basic/HierarchySourceEntityListIterator.java	                        (rev 0)
+++ announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/dbmeta/hierarchy/basic/HierarchySourceEntityListIterator.java	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,24 @@
+package jp.sf.pal.announcement.db.allcommon.dbmeta.hierarchy.basic;
+
+/**
+ * @author DBFlute(AutoGenerator)
+ * @param <SOURCE_ROW> The type of source.
+ */
+public class HierarchySourceEntityListIterator<SOURCE_ROW> extends
+        HierarchySourceListIterator<SOURCE_ROW> {
+
+    /**
+     * Constructor.
+     * 
+     * @param sourceRowList The list of source row. (NotNull)
+     */
+    public HierarchySourceEntityListIterator(
+            java.util.List<SOURCE_ROW> sourceRowList) {
+        super(sourceRowList, new HierarchySourceRowSetupper<SOURCE_ROW>() {
+            public jp.sf.pal.announcement.db.allcommon.dbmeta.hierarchy.HierarchySourceRow setup(
+                    SOURCE_ROW source) {
+                return new HierarchySourceEntityRow(source);
+            }
+        });
+    }
+}
\ No newline at end of file


Property changes on: announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/dbmeta/hierarchy/basic/HierarchySourceEntityListIterator.java
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/dbmeta/hierarchy/basic/HierarchySourceEntityRow.java
===================================================================
--- announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/dbmeta/hierarchy/basic/HierarchySourceEntityRow.java	                        (rev 0)
+++ announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/dbmeta/hierarchy/basic/HierarchySourceEntityRow.java	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,48 @@
+package jp.sf.pal.announcement.db.allcommon.dbmeta.hierarchy.basic;
+
+/**
+ * @author DBFlute(AutoGenerator)
+ */
+public class HierarchySourceEntityRow implements
+        jp.sf.pal.announcement.db.allcommon.dbmeta.hierarchy.HierarchySourceRow {
+
+    protected Object sourceBean;
+
+    public HierarchySourceEntityRow(Object sourceBean) {
+        this.sourceBean = sourceBean;
+    }
+
+    public Object extractColumnValue(
+            jp.sf.pal.announcement.db.allcommon.dbmeta.hierarchy.HierarchySourceColumn columnInfo) {
+        if (!(columnInfo instanceof HierarchySourceEntityColumn)) {
+            String msg = "The column info should be HierarchySourceEntityColumn! but: "
+                    + columnInfo;
+            throw new IllegalStateException(msg);
+        }
+        final HierarchySourceEntityColumn sourceEntityColumn = (HierarchySourceEntityColumn) columnInfo;
+        return invoke(sourceEntityColumn.findGetter(), sourceBean,
+                new Object[] {});
+    }
+
+    private Object invoke(java.lang.reflect.Method method, Object target,
+            Object[] args) {
+        try {
+            return method.invoke(target, args);
+        } catch (java.lang.reflect.InvocationTargetException ex) {
+            Throwable t = ex.getCause();
+            if (t instanceof RuntimeException) {
+                throw (RuntimeException) t;
+            }
+            if (t instanceof Error) {
+                throw (Error) t;
+            }
+            String msg = "target=" + target + " method=" + method + "-"
+                    + java.util.Arrays.asList(args);
+            throw new RuntimeException(msg, ex);
+        } catch (IllegalAccessException ex) {
+            String msg = "target=" + target + " method=" + method + "-"
+                    + java.util.Arrays.asList(args);
+            throw new RuntimeException(msg, ex);
+        }
+    }
+}
\ No newline at end of file


Property changes on: announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/dbmeta/hierarchy/basic/HierarchySourceEntityRow.java
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/dbmeta/hierarchy/basic/HierarchySourceListIterator.java
===================================================================
--- announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/dbmeta/hierarchy/basic/HierarchySourceListIterator.java	                        (rev 0)
+++ announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/dbmeta/hierarchy/basic/HierarchySourceListIterator.java	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,40 @@
+package jp.sf.pal.announcement.db.allcommon.dbmeta.hierarchy.basic;
+
+/**
+ * @author DBFlute(AutoGenerator)
+ * @param <SOURCE_ROW> The type of source.
+ */
+public class HierarchySourceListIterator<SOURCE_ROW>
+        implements
+        jp.sf.pal.announcement.db.allcommon.dbmeta.hierarchy.HierarchySourceIterator {
+
+    protected java.util.List<? extends Object> sourceRowList;
+
+    protected HierarchySourceRowSetupper<SOURCE_ROW> sourceRowSetupper;
+
+    protected java.util.Iterator<SOURCE_ROW> sourceBeanListIterator;
+
+    protected jp.sf.pal.announcement.db.allcommon.dbmeta.hierarchy.HierarchySourceRow currentSourceEntity;
+
+    public HierarchySourceListIterator(
+            java.util.List<SOURCE_ROW> sourceRowList,
+            HierarchySourceRowSetupper<SOURCE_ROW> sourceRowSetupper) {
+        this.sourceRowList = sourceRowList;
+        this.sourceRowSetupper = sourceRowSetupper;
+        this.sourceBeanListIterator = sourceRowList.iterator();
+    }
+
+    public boolean hasNext() {
+        return this.sourceBeanListIterator.hasNext();
+    }
+
+    public jp.sf.pal.announcement.db.allcommon.dbmeta.hierarchy.HierarchySourceRow next() {
+        this.currentSourceEntity = this.sourceRowSetupper
+                .setup(this.sourceBeanListIterator.next());
+        return this.currentSourceEntity;
+    }
+
+    public jp.sf.pal.announcement.db.allcommon.dbmeta.hierarchy.HierarchySourceRow current() {
+        return this.currentSourceEntity;
+    }
+}
\ No newline at end of file


Property changes on: announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/dbmeta/hierarchy/basic/HierarchySourceListIterator.java
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/dbmeta/hierarchy/basic/HierarchySourceRowSetupper.java
===================================================================
--- announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/dbmeta/hierarchy/basic/HierarchySourceRowSetupper.java	                        (rev 0)
+++ announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/dbmeta/hierarchy/basic/HierarchySourceRowSetupper.java	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,11 @@
+package jp.sf.pal.announcement.db.allcommon.dbmeta.hierarchy.basic;
+
+/**
+ * @author DBFlute(AutoGenerator)
+ * @param <SOURCE_ROW> The type of source.
+ */
+public interface HierarchySourceRowSetupper<SOURCE_ROW> {
+
+    public jp.sf.pal.announcement.db.allcommon.dbmeta.hierarchy.HierarchySourceRow setup(
+            SOURCE_ROW source);
+}
\ No newline at end of file


Property changes on: announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/dbmeta/hierarchy/basic/HierarchySourceRowSetupper.java
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/dbmeta/info/ColumnInfo.java
===================================================================
--- announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/dbmeta/info/ColumnInfo.java	                        (rev 0)
+++ announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/dbmeta/info/ColumnInfo.java	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,183 @@
+package jp.sf.pal.announcement.db.allcommon.dbmeta.info;
+
+import jp.sf.pal.announcement.db.allcommon.dbmeta.DBMeta;
+
+/**
+ * The information of column.
+ * 
+ * @author DBFlute(AutoGenerator)
+ */
+ @ SuppressWarnings("unchecked")
+public class ColumnInfo {
+
+    // ===================================================================================
+    //                                                                           Attribute
+    //                                                                           =========
+    protected DBMeta dbmeta;
+
+    protected String columnDbName;
+
+    protected String propertyName;
+
+    protected Class<?> propertyType;
+
+    protected boolean primary;
+
+    protected Integer columnSize;
+
+    protected Integer columnDecimalDigits;
+
+    // ===================================================================================
+    //                                                                         Constructor
+    //                                                                         ===========
+    public ColumnInfo(DBMeta dbmeta, String columnDbName) {
+        this(dbmeta, columnDbName, null, null, false, null, null);
+    }
+
+    public ColumnInfo(DBMeta dbmeta, String columnDbName, String propertyName,
+            Class<?> propertyType, boolean primary, Integer columnSize) {
+        this(dbmeta, columnDbName, propertyName, propertyType, primary,
+                columnSize, null);
+    }
+
+    public ColumnInfo(DBMeta dbmeta, String columnDbName, String propertyName,
+            Class<?> propertyType, boolean primary, Integer columnSize,
+            Integer columnDecimalDigits) {
+        this.dbmeta = dbmeta;
+        this.columnDbName = columnDbName;
+        this.propertyName = propertyName;
+        this.propertyType = propertyType;
+        this.primary = primary;
+        this.columnSize = columnSize;
+        this.columnDecimalDigits = columnDecimalDigits;
+    }
+
+    // ===================================================================================
+    //                                                                             Builder
+    //                                                                             =======
+    public String buildInitCapPropertyName() {
+        return initCap(this.propertyName);
+    }
+
+    // ===================================================================================
+    //                                                                              Finder
+    //                                                                              ======
+    public java.lang.reflect.Method findSetter() {
+        return findMethod(dbmeta.getEntityType(), "set"
+                + buildInitCapPropertyName(),
+                new Class<?>[] { this.propertyType });
+    }
+
+    public java.lang.reflect.Method findGetter() {
+        return findMethod(dbmeta.getEntityType(), "get"
+                + buildInitCapPropertyName(), new Class<?>[] {});
+    }
+
+    // ===================================================================================
+    //                                                                     Internal Helper
+    //                                                                     ===============
+    protected String initCap(final String name) {
+        return name.substring(0, 1).toUpperCase() + name.substring(1);
+    }
+
+    protected java.lang.reflect.Method findMethod(Class<?> clazz,
+            String methodName, Class<?>[] argTypes) {
+        try {
+            return clazz.getMethod(methodName, argTypes);
+        } catch (NoSuchMethodException ex) {
+            String msg = "class=" + clazz + " method=" + methodName + "-"
+                    + java.util.Arrays.asList(argTypes);
+            throw new RuntimeException(msg, ex);
+        }
+    }
+
+    // ===================================================================================
+    //                                                                      Basic Override
+    //                                                                      ==============
+    public int hashCode() {
+        return dbmeta.hashCode() + columnDbName.hashCode();
+    }
+
+    public boolean equals(Object obj) {
+        if (!(obj instanceof ColumnInfo)) {
+            return false;
+        }
+        final ColumnInfo target = (ColumnInfo) obj;
+        if (this.dbmeta == null || target.getDBMeta() == null) {
+            return false;
+        }
+        if (!this.dbmeta.equals(target.getDBMeta())) {
+            return false;
+        }
+        if (this.columnDbName == null || target.getColumnDbName() == null) {
+            return false;
+        }
+        if (!this.columnDbName.equals(target.getColumnDbName())) {
+            return false;
+        }
+        return true;
+    }
+
+    public String toString() {
+        return dbmeta.getTableDbName() + "." + columnDbName;
+    }
+
+    // ===================================================================================
+    //                                                                            Accessor
+    //                                                                            ========
+    public DBMeta getDBMeta() {
+        return dbmeta;
+    }
+
+    public void setDBMeta(DBMeta dbmeta) {
+        this.dbmeta = dbmeta;
+    }
+
+    public String getColumnDbName() {
+        return this.columnDbName;
+    }
+
+    public void setColumnDbName(String columnDbName) {
+        this.columnDbName = columnDbName;
+    }
+
+    public String getPropertyName() {
+        return this.propertyName;
+    }
+
+    public void setPropertyName(String propertyName) {
+        this.propertyName = propertyName;
+    }
+
+    public Class<?> getPropertyType() {
+        return this.propertyType;
+    }
+
+    public void setPropertyType(Class<?> propertyType) {
+        this.propertyType = propertyType;
+    }
+
+    public boolean isPrimary() {
+        return this.primary;
+    }
+
+    public void setPrimary(boolean primary) {
+        this.primary = primary;
+    }
+
+    public Integer getColumnSize() {
+        return this.columnSize;
+    }
+
+    public void setColumnSize(Integer columnSize) {
+        this.columnSize = columnSize;
+    }
+
+    public Integer getColumnDecimalDigits() {
+        return this.columnDecimalDigits;
+    }
+
+    public void setColumnDecimalDigits(Integer columnDecimalDigits) {
+        this.columnDecimalDigits = columnDecimalDigits;
+    }
+}


Property changes on: announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/dbmeta/info/ColumnInfo.java
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/dbmeta/info/ForeignInfo.java
===================================================================
--- announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/dbmeta/info/ForeignInfo.java	                        (rev 0)
+++ announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/dbmeta/info/ForeignInfo.java	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,168 @@
+package jp.sf.pal.announcement.db.allcommon.dbmeta.info;
+
+import jp.sf.pal.announcement.db.allcommon.dbmeta.DBMeta;
+
+/**
+ * The class of foreign information.
+ * 
+ * @author DBFlute(AutoGenerator)
+ */
+ @ SuppressWarnings("unchecked")
+public class ForeignInfo implements RelationInfo {
+
+    // ===================================================================================
+    //                                                                           Attribute
+    //                                                                           =========
+    protected String foreignPropertyName;
+
+    protected DBMeta localDBMeta;
+
+    protected DBMeta foreignDBMeta;
+
+    protected java.util.Map<ColumnInfo, ColumnInfo> localForeignColumnInfoMap;
+
+    protected java.util.Map<ColumnInfo, ColumnInfo> foreignLocalColumnInfoMap;
+
+    protected int relationNo;
+
+    protected boolean oneToOne;
+
+    // ===================================================================================
+    //                                                                              Finder
+    //                                                                              ======
+    public ColumnInfo findLocalByForeign(String foreignColumnDbName) {
+        final ColumnInfo keyColumnInfo = new ColumnInfo(foreignDBMeta,
+                foreignColumnDbName);
+        final ColumnInfo resultColumnInfo = (ColumnInfo) foreignLocalColumnInfoMap
+                .get(keyColumnInfo);
+        if (resultColumnInfo == null) {
+            String msg = "Not found by foreignColumnDbName in foreignLocalColumnInfoMap:";
+            msg = msg + " foreignColumnDbName=" + foreignColumnDbName
+                    + " foreignLocalColumnInfoMap=" + foreignLocalColumnInfoMap;
+            throw new IllegalArgumentException(msg);
+        }
+        return resultColumnInfo;
+    }
+
+    // ===================================================================================
+    //                                                                             Builder
+    //                                                                             =======
+    public String buildInitCapPropertyName() {
+        return initCap(this.foreignPropertyName);
+    }
+
+    // ===================================================================================
+    //                                                                              Finder
+    //                                                                              ======
+    public java.lang.reflect.Method findSetter() {
+        return findMethod(localDBMeta.getEntityType(), "set"
+                + buildInitCapPropertyName(),
+                new Class[] { java.util.List.class });
+    }
+
+    public java.lang.reflect.Method findGetter() {
+        return findMethod(localDBMeta.getEntityType(), "get"
+                + buildInitCapPropertyName(), new Class[] {});
+    }
+
+    // ===================================================================================
+    //                                                                           Implement
+    //                                                                           =========
+    public String getRelationPropertyName() {
+        return getForeignPropertyName();
+    }
+
+    public DBMeta getTargetDBMeta() {
+        return getForeignDBMeta();
+    }
+
+    public java.util.Map<ColumnInfo, ColumnInfo> getLocalTargetColumnInfoMap() {
+        return getLocalForeignColumnInfoMap();
+    }
+
+    public boolean isReferrer() {
+        return false;
+    }
+
+    // ===================================================================================
+    //                                                                            Accessor
+    //                                                                            ========
+    public String getForeignPropertyName() {
+        return foreignPropertyName;
+    }
+
+    public void setForeignPropertyName(String foreignPropertyName) {
+        this.foreignPropertyName = foreignPropertyName;
+    }
+
+    public DBMeta getLocalDBMeta() {
+        return localDBMeta;
+    }
+
+    public void setLocalDBMeta(DBMeta localDBMeta) {
+        this.localDBMeta = localDBMeta;
+    }
+
+    public DBMeta getForeignDBMeta() {
+        return foreignDBMeta;
+    }
+
+    public void setForeignDBMeta(DBMeta foreignDBMeta) {
+        this.foreignDBMeta = foreignDBMeta;
+    }
+
+    public java.util.Map<ColumnInfo, ColumnInfo> getLocalForeignColumnInfoMap() {
+        return localForeignColumnInfoMap;
+    }
+
+    public void setLocalForeignColumnInfoMap(
+            java.util.Map<ColumnInfo, ColumnInfo> localForeignColumnInfoMap) {
+        this.localForeignColumnInfoMap = localForeignColumnInfoMap;
+        final java.util.Set keySet = localForeignColumnInfoMap.keySet();
+        foreignLocalColumnInfoMap = new java.util.LinkedHashMap<ColumnInfo, ColumnInfo>();
+        for (final java.util.Iterator ite = keySet.iterator(); ite.hasNext();) {
+            final ColumnInfo key = (ColumnInfo) ite.next();
+            final ColumnInfo value = (ColumnInfo) localForeignColumnInfoMap
+                    .get(key);
+            foreignLocalColumnInfoMap.put(value, key);
+        }
+    }
+
+    public java.util.Map<ColumnInfo, ColumnInfo> getForeignLocalColumnInfoMap() {
+        return foreignLocalColumnInfoMap;
+    }
+
+    public int getRelationNo() {
+        return relationNo;
+    }
+
+    public void setRelationNo(int relationNo) {
+        this.relationNo = relationNo;
+    }
+
+    public boolean isOneToOne() {
+        return oneToOne;
+    }
+
+    public void setOneToOne(boolean oneToOne) {
+        this.oneToOne = oneToOne;
+    }
+
+    // ===================================================================================
+    //                                                                      General Helper
+    //                                                                      ==============
+    protected java.lang.reflect.Method findMethod(Class clazz,
+            String methodName, Class[] argTypes) {
+        try {
+            return clazz.getMethod(methodName, argTypes);
+        } catch (NoSuchMethodException ex) {
+            String msg = "class=" + clazz + " method=" + methodName + "-"
+                    + java.util.Arrays.asList(argTypes);
+            throw new RuntimeException(msg, ex);
+        }
+    }
+
+    protected String initCap(final String name) {
+        return name.substring(0, 1).toUpperCase() + name.substring(1);
+    }
+}


Property changes on: announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/dbmeta/info/ForeignInfo.java
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/dbmeta/info/ReferrerInfo.java
===================================================================
--- announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/dbmeta/info/ReferrerInfo.java	                        (rev 0)
+++ announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/dbmeta/info/ReferrerInfo.java	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,174 @@
+package jp.sf.pal.announcement.db.allcommon.dbmeta.info;
+
+import jp.sf.pal.announcement.db.allcommon.dbmeta.DBMeta;
+
+/**
+ * The class of referrer information.
+ * 
+ * @author DBFlute(AutoGenerator)
+ */
+ @ SuppressWarnings("unchecked")
+public class ReferrerInfo implements RelationInfo {
+
+    // ===================================================================================
+    //                                                                           Attribute
+    //                                                                           =========
+    protected String referrerPropertyName;
+
+    protected DBMeta localDBMeta;
+
+    protected DBMeta referrerDBMeta;
+
+    protected java.util.Map<ColumnInfo, ColumnInfo> localReferrerColumnInfoMap;
+
+    protected java.util.Map<ColumnInfo, ColumnInfo> referrerLocalColumnInfoMap;
+
+    protected boolean oneToOne;
+
+    // ===================================================================================
+    //                                                                              Finder
+    //                                                                              ======
+    public ColumnInfo findLocalByReferrer(String referrerColumnDbName) {
+        final ColumnInfo keyColumnInfo = new ColumnInfo(referrerDBMeta,
+                referrerColumnDbName);
+        final ColumnInfo resultColumnInfo = (ColumnInfo) referrerLocalColumnInfoMap
+                .get(keyColumnInfo);
+        if (resultColumnInfo == null) {
+            String msg = "Not found by referrerColumnDbName in referrerLocalColumnInfoMap:";
+            msg = msg + " referrerColumnDbName=" + referrerColumnDbName
+                    + " referrerLocalColumnInfoMap="
+                    + referrerLocalColumnInfoMap;
+            throw new IllegalArgumentException(msg);
+        }
+        return resultColumnInfo;
+    }
+
+    public ColumnInfo findReferrerByLocal(String localColumnDbName) {
+        final ColumnInfo keyColumnInfo = new ColumnInfo(localDBMeta,
+                localColumnDbName);
+        final ColumnInfo resultColumnInfo = (ColumnInfo) localReferrerColumnInfoMap
+                .get(keyColumnInfo);
+        if (resultColumnInfo == null) {
+            String msg = "Not found by localColumnDbName in localReferrerColumnInfoMap:";
+            msg = msg + " localColumnDbName=" + localColumnDbName
+                    + " localReferrerColumnInfoMap="
+                    + localReferrerColumnInfoMap;
+            throw new IllegalArgumentException(msg);
+        }
+        return resultColumnInfo;
+    }
+
+    // ===================================================================================
+    //                                                                             Builder
+    //                                                                             =======
+    public String buildInitCapPropertyName() {
+        return initCap(this.referrerPropertyName);
+    }
+
+    // ===================================================================================
+    //                                                                              Finder
+    //                                                                              ======
+    public java.lang.reflect.Method findSetter() {
+        return findMethod(localDBMeta.getEntityType(), "set"
+                + buildInitCapPropertyName(),
+                new Class[] { java.util.List.class });
+    }
+
+    public java.lang.reflect.Method findGetter() {
+        return findMethod(localDBMeta.getEntityType(), "get"
+                + buildInitCapPropertyName(), new Class[] {});
+    }
+
+    // ===================================================================================
+    //                                                                           Implement
+    //                                                                           =========
+    public String getRelationPropertyName() {
+        return getReferrerPropertyName();
+    }
+
+    public DBMeta getTargetDBMeta() {
+        return getReferrerDBMeta();
+    }
+
+    public java.util.Map<ColumnInfo, ColumnInfo> getLocalTargetColumnInfoMap() {
+        return getLocalReferrerColumnInfoMap();
+    }
+
+    public boolean isReferrer() {
+        return true;
+    }
+
+    // ===================================================================================
+    //                                                                            Accessor
+    //                                                                            ========
+    public String getReferrerPropertyName() {
+        return referrerPropertyName;
+    }
+
+    public void setReferrerPropertyName(String referrerPropertyName) {
+        this.referrerPropertyName = referrerPropertyName;
+    }
+
+    public DBMeta getLocalDBMeta() {
+        return localDBMeta;
+    }
+
+    public void setLocalDBMeta(DBMeta localDBMeta) {
+        this.localDBMeta = localDBMeta;
+    }
+
+    public DBMeta getReferrerDBMeta() {
+        return referrerDBMeta;
+    }
+
+    public void setReferrerDBMeta(DBMeta referrerDBMeta) {
+        this.referrerDBMeta = referrerDBMeta;
+    }
+
+    public java.util.Map<ColumnInfo, ColumnInfo> getLocalReferrerColumnInfoMap() {
+        return localReferrerColumnInfoMap;
+    }
+
+    public void setLocalReferrerColumnInfoMap(
+            java.util.Map<ColumnInfo, ColumnInfo> localReferrerColumnInfoMap) {
+        this.localReferrerColumnInfoMap = localReferrerColumnInfoMap;
+        final java.util.Set keySet = localReferrerColumnInfoMap.keySet();
+        referrerLocalColumnInfoMap = new java.util.LinkedHashMap<ColumnInfo, ColumnInfo>();
+        for (final java.util.Iterator ite = keySet.iterator(); ite.hasNext();) {
+            final ColumnInfo key = (ColumnInfo) ite.next();
+            final ColumnInfo value = (ColumnInfo) localReferrerColumnInfoMap
+                    .get(key);
+            referrerLocalColumnInfoMap.put(value, key);
+        }
+    }
+
+    public java.util.Map<ColumnInfo, ColumnInfo> getReferrerLocalColumnInfoMap() {
+        return referrerLocalColumnInfoMap;
+    }
+
+    public boolean isOneToOne() {
+        return oneToOne;
+    }
+
+    public void setOneToOne(boolean oneToOne) {
+        this.oneToOne = oneToOne;
+    }
+
+    // ===================================================================================
+    //                                                                     Internal Helper
+    //                                                                     ===============
+    protected String initCap(final String name) {
+        return name.substring(0, 1).toUpperCase() + name.substring(1);
+    }
+
+    protected java.lang.reflect.Method findMethod(Class clazz,
+            String methodName, Class[] argTypes) {
+        try {
+            return clazz.getMethod(methodName, argTypes);
+        } catch (NoSuchMethodException ex) {
+            String msg = "class=" + clazz + " method=" + methodName + "-"
+                    + java.util.Arrays.asList(argTypes);
+            throw new RuntimeException(msg, ex);
+        }
+    }
+}


Property changes on: announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/dbmeta/info/ReferrerInfo.java
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/dbmeta/info/RelationInfo.java
===================================================================
--- announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/dbmeta/info/RelationInfo.java	                        (rev 0)
+++ announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/dbmeta/info/RelationInfo.java	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,24 @@
+package jp.sf.pal.announcement.db.allcommon.dbmeta.info;
+
+import jp.sf.pal.announcement.db.allcommon.dbmeta.DBMeta;
+
+/**
+ * The class of referer information.
+ * 
+ * @author DBFlute(AutoGenerator)
+ */
+ @ SuppressWarnings("unchecked")
+public interface RelationInfo {
+
+    public String getRelationPropertyName();
+
+    public DBMeta getLocalDBMeta();
+
+    public DBMeta getTargetDBMeta();
+
+    public java.util.Map<ColumnInfo, ColumnInfo> getLocalTargetColumnInfoMap();
+
+    public boolean isOneToOne();
+
+    public boolean isReferrer();
+}


Property changes on: announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/dbmeta/info/RelationInfo.java
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/dbmeta/info/UniqueInfo.java
===================================================================
--- announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/dbmeta/info/UniqueInfo.java	                        (rev 0)
+++ announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/dbmeta/info/UniqueInfo.java	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,74 @@
+package jp.sf.pal.announcement.db.allcommon.dbmeta.info;
+
+import jp.sf.pal.announcement.db.allcommon.dbmeta.DBMeta;
+
+/**
+ * The class of unique info.
+ * 
+ * @author DBFlute(AutoGenerator)
+ */
+ @ SuppressWarnings("unchecked")
+public class UniqueInfo {
+
+    // ===================================================================================
+    //                                                                           Attribute
+    //                                                                           =========
+    protected DBMeta dbmeta;
+
+    protected java.util.List<ColumnInfo> uniqueColumnList = new java.util.ArrayList<ColumnInfo>();
+
+    protected boolean primary;
+
+    // ===================================================================================
+    //                                                                         Easy-to-Use
+    //                                                                         ===========
+    public boolean containsColumn(String columnName) {
+        for (final java.util.Iterator ite = uniqueColumnList.iterator(); ite
+                .hasNext();) {
+            final ColumnInfo columnInfo = (ColumnInfo) ite.next();
+            if (columnInfo.getColumnDbName().equals(columnName)) {
+                return true;
+            }
+        }
+        return false;
+    }
+
+    public boolean containsColumn(ColumnInfo column) {
+        return containsColumn(column.getColumnDbName());
+    }
+
+    // ===================================================================================
+    //                                                                            Accessor
+    //                                                                            ========
+    public DBMeta getDBMeta() {
+        return dbmeta;
+    }
+
+    public void setDBMeta(DBMeta dbmeta) {
+        this.dbmeta = dbmeta;
+    }
+
+    public java.util.List<ColumnInfo> getUniqueColumnList() {
+        return uniqueColumnList;
+    }
+
+    public void addUniqueColumnList(ColumnInfo uniqueColumn) {
+        this.uniqueColumnList.add(uniqueColumn);
+    }
+
+    public ColumnInfo getFirstColumn() {
+        return (ColumnInfo) this.uniqueColumnList.get(0);
+    }
+
+    public boolean isTwoOrMore() {
+        return this.uniqueColumnList.size() > 1;
+    }
+
+    public boolean isPrimary() {
+        return this.primary;
+    }
+
+    public void setPrimary(boolean primary) {
+        this.primary = primary;
+    }
+}


Property changes on: announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/dbmeta/info/UniqueInfo.java
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/exception/BindVariableCommentNotFoundPropertyException.java
===================================================================
--- announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/exception/BindVariableCommentNotFoundPropertyException.java	                        (rev 0)
+++ announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/exception/BindVariableCommentNotFoundPropertyException.java	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,30 @@
+package jp.sf.pal.announcement.db.allcommon.exception;
+
+/**
+ * The exception of when the property on bind variable comment is not found about outsideSql.
+ * @author DBFlute(AutoGenerator)
+ */
+public class BindVariableCommentNotFoundPropertyException extends
+        RuntimeException {
+
+    /** Serial version UID. (Default) */
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * Constructor.
+     * @param msg Exception message. (NotNull)
+     */
+    public BindVariableCommentNotFoundPropertyException(String msg) {
+        super(msg);
+    }
+
+    /**
+     * Constructor.
+     * @param msg Exception message. (NotNull)
+     * @param cause Throwable.
+     */
+    public BindVariableCommentNotFoundPropertyException(String msg,
+            Throwable cause) {
+        super(msg, cause);
+    }
+}


Property changes on: announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/exception/BindVariableCommentNotFoundPropertyException.java
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/exception/BindVariableParameterNullValueException.java
===================================================================
--- announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/exception/BindVariableParameterNullValueException.java	                        (rev 0)
+++ announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/exception/BindVariableParameterNullValueException.java	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,19 @@
+package jp.sf.pal.announcement.db.allcommon.exception;
+
+/**
+ * The exception of when the value of bind variable is null about outsideSql.
+ * @author DBFlute(AutoGenerator)
+ */
+public class BindVariableParameterNullValueException extends RuntimeException {
+
+    /** Serial version UID. (Default) */
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * Constructor.
+     * @param msg Exception message. (NotNull)
+     */
+    public BindVariableParameterNullValueException(String msg) {
+        super(msg);
+    }
+}


Property changes on: announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/exception/BindVariableParameterNullValueException.java
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/exception/DangerousResultSizeException.java
===================================================================
--- announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/exception/DangerousResultSizeException.java	                        (rev 0)
+++ announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/exception/DangerousResultSizeException.java	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,36 @@
+package jp.sf.pal.announcement.db.allcommon.exception;
+
+/**
+ * The exception of when the result size is dangerous.
+ * 
+ * @author DBFlute(AutoGenerator)
+ */
+public class DangerousResultSizeException extends RuntimeException {
+
+    /** Serial version UID. (Default) */
+    private static final long serialVersionUID = 1L;
+
+    /** Safety max result size. */
+    protected int _safetyMaxResultSize;
+
+    /**
+     * Constructor.
+     * 
+     * @param msg Exception message.
+     * @param safetyMaxResultSize Safety max result size.
+     * @param selectedCount Selected count.
+     */
+    public DangerousResultSizeException(String msg, int safetyMaxResultSize) {
+        super(msg);
+        this._safetyMaxResultSize = safetyMaxResultSize;
+    }
+
+    /**
+     * Get safety max result size.
+     * 
+     * @return Safety max result size.
+     */
+    public int getSafetyMaxResultSize() {
+        return _safetyMaxResultSize;
+    }
+}


Property changes on: announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/exception/DangerousResultSizeException.java
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/exception/EmbeddedValueCommentNotFoundPropertyException.java
===================================================================
--- announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/exception/EmbeddedValueCommentNotFoundPropertyException.java	                        (rev 0)
+++ announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/exception/EmbeddedValueCommentNotFoundPropertyException.java	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,30 @@
+package jp.sf.pal.announcement.db.allcommon.exception;
+
+/**
+ * The exception of when the property on embedded value comment is not found about outsideSql.
+ * @author DBFlute(AutoGenerator)
+ */
+public class EmbeddedValueCommentNotFoundPropertyException extends
+        RuntimeException {
+
+    /** Serial version UID. (Default) */
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * Constructor.
+     * @param msg Exception message. (NotNull)
+     */
+    public EmbeddedValueCommentNotFoundPropertyException(String msg) {
+        super(msg);
+    }
+
+    /**
+     * Constructor.
+     * @param msg Exception message. (NotNull)
+     * @param cause Throwable.
+     */
+    public EmbeddedValueCommentNotFoundPropertyException(String msg,
+            Throwable cause) {
+        super(msg, cause);
+    }
+}


Property changes on: announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/exception/EmbeddedValueCommentNotFoundPropertyException.java
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/exception/EmbeddedValueParameterNullValueException.java
===================================================================
--- announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/exception/EmbeddedValueParameterNullValueException.java	                        (rev 0)
+++ announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/exception/EmbeddedValueParameterNullValueException.java	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,19 @@
+package jp.sf.pal.announcement.db.allcommon.exception;
+
+/**
+ * The exception of when the value of embedded value is null about outsideSql.
+ * @author DBFlute(AutoGenerator)
+ */
+public class EmbeddedValueParameterNullValueException extends RuntimeException {
+
+    /** Serial version UID. (Default) */
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * Constructor.
+     * @param msg Exception message. (NotNull)
+     */
+    public EmbeddedValueParameterNullValueException(String msg) {
+        super(msg);
+    }
+}


Property changes on: announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/exception/EmbeddedValueParameterNullValueException.java
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/exception/EndCommentNotFoundException.java
===================================================================
--- announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/exception/EndCommentNotFoundException.java	                        (rev 0)
+++ announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/exception/EndCommentNotFoundException.java	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,19 @@
+package jp.sf.pal.announcement.db.allcommon.exception;
+
+/**
+ * The exception of when the end comment is not found about outsideSql.
+ * @author DBFlute(AutoGenerator)
+ */
+public class EndCommentNotFoundException extends RuntimeException {
+
+    /** Serial version UID. (Default) */
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * Constructor.
+     * @param msg Exception message. (NotNull)
+     */
+    public EndCommentNotFoundException(String msg) {
+        super(msg);
+    }
+}


Property changes on: announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/exception/EndCommentNotFoundException.java
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/exception/EntityAlreadyDeletedException.java
===================================================================
--- announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/exception/EntityAlreadyDeletedException.java	                        (rev 0)
+++ announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/exception/EntityAlreadyDeletedException.java	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,22 @@
+package jp.sf.pal.announcement.db.allcommon.exception;
+
+/**
+ * The exception of when the entity has already been deleted by other thread.
+ * 
+ * @author DBFlute(AutoGenerator)
+ */
+public class EntityAlreadyDeletedException extends
+        RecordHasAlreadyBeenDeletedException {
+
+    /** Serial version UID. (Default) */
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * Constructor.
+     * 
+     * @param msg Exception message.
+     */
+    public EntityAlreadyDeletedException(String msg) {
+        super(msg);
+    }
+}


Property changes on: announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/exception/EntityAlreadyDeletedException.java
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/exception/EntityAlreadyUpdatedException.java
===================================================================
--- announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/exception/EntityAlreadyUpdatedException.java	                        (rev 0)
+++ announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/exception/EntityAlreadyUpdatedException.java	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,33 @@
+package jp.sf.pal.announcement.db.allcommon.exception;
+
+/**
+ * The exception of when the entity has already been updated by other thread.
+ * 
+ * @author DBFlute(AutoGenerator)
+ */
+public class EntityAlreadyUpdatedException extends
+        org.seasar.dao.NotSingleRowUpdatedRuntimeException {
+
+    /** Serial version UID. (Default) */
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * Constructor.
+     * 
+     * @param bean Bean. (NotNull)
+     * @param rows Rows.
+     */
+    public EntityAlreadyUpdatedException(Object bean, int rows) {
+        super(bean, rows);
+    }
+
+    /**
+     * Constructor.
+     * 
+     * @param e NotSingleRowUpdatedRuntimeException. (NotNull)
+     */
+    public EntityAlreadyUpdatedException(
+            org.seasar.dao.NotSingleRowUpdatedRuntimeException e) {
+        super(e.getBean(), e.getRows());
+    }
+}


Property changes on: announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/exception/EntityAlreadyUpdatedException.java
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/exception/EntityDuplicatedException.java
===================================================================
--- announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/exception/EntityDuplicatedException.java	                        (rev 0)
+++ announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/exception/EntityDuplicatedException.java	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,31 @@
+package jp.sf.pal.announcement.db.allcommon.exception;
+
+/**
+ * The exception of when the entity has been duplicated.
+ * 
+ * @author DBFlute(AutoGenerator)
+ */
+public class EntityDuplicatedException extends RecordHasOverlappedException {
+
+    /** Serial version UID. (Default) */
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * Constructor.
+     * 
+     * @param msg Exception message.
+     */
+    public EntityDuplicatedException(String msg) {
+        super(msg);
+    }
+
+    /**
+     * Constructor.
+     * 
+     * @param msg Exception message.
+     * @param cause Throwable.
+     */
+    public EntityDuplicatedException(String msg, Throwable cause) {
+        super(msg, cause);
+    }
+}


Property changes on: announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/exception/EntityDuplicatedException.java
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/exception/IfCommentConditionNotFoundException.java
===================================================================
--- announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/exception/IfCommentConditionNotFoundException.java	                        (rev 0)
+++ announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/exception/IfCommentConditionNotFoundException.java	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,20 @@
+package jp.sf.pal.announcement.db.allcommon.exception;
+
+/**
+ * The exception of when the condition of IF comment is not found about outsideSql.
+ * @author DBFlute(AutoGenerator)
+ */
+public class IfCommentConditionNotFoundException extends
+        IfCommentWrongExpressionException {
+
+    /** Serial version UID. (Default) */
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * Constructor.
+     * @param msg Exception message. (NotNull)
+     */
+    public IfCommentConditionNotFoundException(String msg) {
+        super(msg);
+    }
+}


Property changes on: announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/exception/IfCommentConditionNotFoundException.java
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/exception/IfCommentNotBooleanResultException.java
===================================================================
--- announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/exception/IfCommentNotBooleanResultException.java	                        (rev 0)
+++ announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/exception/IfCommentNotBooleanResultException.java	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,32 @@
+package jp.sf.pal.announcement.db.allcommon.exception;
+
+/**
+ * The exception of when the result of IF comment is not boolean about outsideSql.
+ * 
+ * @author DBFlute(AutoGenerator)
+ */
+public class IfCommentNotBooleanResultException extends
+        IfCommentWrongExpressionException {
+
+    /** Serial version UID. (Default) */
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * Constructor.
+     * 
+     * @param msg Exception message. (NotNull)
+     */
+    public IfCommentNotBooleanResultException(String msg) {
+        super(msg);
+    }
+
+    /**
+     * Constructor.
+     * 
+     * @param msg Exception message. (NotNull)
+     * @param cause Throwable.
+     */
+    public IfCommentNotBooleanResultException(String msg, Throwable cause) {
+        super(msg, cause);
+    }
+}


Property changes on: announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/exception/IfCommentNotBooleanResultException.java
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/exception/IfCommentWrongExpressionException.java
===================================================================
--- announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/exception/IfCommentWrongExpressionException.java	                        (rev 0)
+++ announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/exception/IfCommentWrongExpressionException.java	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,28 @@
+package jp.sf.pal.announcement.db.allcommon.exception;
+
+/**
+ * The exception of when the IF comment has a wrong expression about outsideSql.
+ * @author DBFlute(AutoGenerator)
+ */
+public class IfCommentWrongExpressionException extends RuntimeException {
+
+    /** Serial version UID. (Default) */
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * Constructor.
+     * @param msg Exception message. (NotNull)
+     */
+    public IfCommentWrongExpressionException(String msg) {
+        super(msg);
+    }
+
+    /**
+     * Constructor.
+     * @param msg Exception message. (NotNull)
+     * @param cause Throwable.
+     */
+    public IfCommentWrongExpressionException(String msg, Throwable cause) {
+        super(msg, cause);
+    }
+}


Property changes on: announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/exception/IfCommentWrongExpressionException.java
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/exception/OutsideSqlNotFoundException.java
===================================================================
--- announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/exception/OutsideSqlNotFoundException.java	                        (rev 0)
+++ announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/exception/OutsideSqlNotFoundException.java	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,31 @@
+package jp.sf.pal.announcement.db.allcommon.exception;
+
+/**
+ * The exception of when the outside-sql is not found.
+ * 
+ * @author DBFlute(AutoGenerator)
+ */
+public class OutsideSqlNotFoundException extends RuntimeException {
+
+    /** Serial version UID. (Default) */
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * Constructor.
+     * 
+     * @param msg Exception message.
+     */
+    public OutsideSqlNotFoundException(String msg) {
+        super(msg);
+    }
+
+    /**
+     * Constructor.
+     * 
+     * @param msg Exception message.
+     * @param cause Throwable.
+     */
+    public OutsideSqlNotFoundException(String msg, Throwable cause) {
+        super(msg, cause);
+    }
+}


Property changes on: announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/exception/OutsideSqlNotFoundException.java
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/exception/RecordHasAlreadyBeenDeletedException.java
===================================================================
--- announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/exception/RecordHasAlreadyBeenDeletedException.java	                        (rev 0)
+++ announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/exception/RecordHasAlreadyBeenDeletedException.java	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,22 @@
+package jp.sf.pal.announcement.db.allcommon.exception;
+
+/**
+ * The exception when the record has already been deleted (by other thread). <br />
+ * This class is old.
+ * 
+ * @author DBFlute(AutoGenerator)
+ */
+public class RecordHasAlreadyBeenDeletedException extends RuntimeException {
+
+    /** Serial version UID. (Default) */
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * Constructor.
+     * 
+     * @param msg Exception message.
+     */
+    public RecordHasAlreadyBeenDeletedException(String msg) {
+        super(msg);
+    }
+}


Property changes on: announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/exception/RecordHasAlreadyBeenDeletedException.java
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/exception/RecordHasOverlappedException.java
===================================================================
--- announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/exception/RecordHasOverlappedException.java	                        (rev 0)
+++ announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/exception/RecordHasOverlappedException.java	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,32 @@
+package jp.sf.pal.announcement.db.allcommon.exception;
+
+/**
+ * The exception when the record has overlapped.
+ * This class is old.
+ * 
+ * @author DBFlute(AutoGenerator)
+ */
+public class RecordHasOverlappedException extends RuntimeException {
+
+    /** Serial version UID. (Default) */
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * Constructor.
+     * 
+     * @param msg Exception message.
+     */
+    public RecordHasOverlappedException(String msg) {
+        super(msg);
+    }
+
+    /**
+     * Constructor.
+     * 
+     * @param msg Exception message.
+     * @param cause Throwable.
+     */
+    public RecordHasOverlappedException(String msg, Throwable cause) {
+        super(msg, cause);
+    }
+}


Property changes on: announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/exception/RecordHasOverlappedException.java
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/exception/RequiredOptionNotFoundException.java
===================================================================
--- announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/exception/RequiredOptionNotFoundException.java	                        (rev 0)
+++ announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/exception/RequiredOptionNotFoundException.java	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,31 @@
+package jp.sf.pal.announcement.db.allcommon.exception;
+
+/**
+ * The exception of when the required option is not found.
+ * 
+ * @author DBFlute(AutoGenerator)
+ */
+public class RequiredOptionNotFoundException extends RuntimeException {
+
+    /** Serial version UID. (Default) */
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * Constructor.
+     * 
+     * @param msg Exception message.
+     */
+    public RequiredOptionNotFoundException(String msg) {
+        super(msg);
+    }
+
+    /**
+     * Constructor.
+     * 
+     * @param msg Exception message.
+     * @param cause Throwable.
+     */
+    public RequiredOptionNotFoundException(String msg, Throwable cause) {
+        super(msg, cause);
+    }
+}


Property changes on: announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/exception/RequiredOptionNotFoundException.java
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/helper/MapListString.java
===================================================================
--- announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/helper/MapListString.java	                        (rev 0)
+++ announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/helper/MapListString.java	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,102 @@
+package jp.sf.pal.announcement.db.allcommon.helper;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * MapList-String.
+ * <p>
+ * <pre>
+ * # Interface that offers generation of map and list from the following character strings (map list string). 
+ * # 
+ * #   ex) map:{key1=value1,key2=list:{value21,value22,value23},key3=map:{key31=value31}}
+ * #   ex) list:{key1=value1,key2=list:{value21,value22,value23},key3=map:{key31=value31}}
+ * # 
+ * </pre>
+ *
+ * @author DBFlute(AutoGenerator)
+ */
+public interface MapListString {
+
+    /** Default of map-mark. */
+    public static final String DEFAULT_MAP_MARK = "map:";
+
+    /** Default of list-mark. */
+    public static final String DEFAULT_LIST_MARK = "list:";
+
+    /** Default of start-brace. */
+    public static final String DEFAULT_START_BRACE = "{";
+
+    /** Default of end-brace. */
+    public static final String DEFAULT_END_BRACE = "}";
+
+    /** Default of delimter. */
+    public static final String DEFAULT_DELIMITER = ";";
+
+    /** Default of equal. */
+    public static final String DEFAULT_EQUAL = "=";
+
+    // ==========================================================================================
+    //                                                                                     Setter
+    //                                                                                     ======
+    /**
+     * Set map-mark.
+     * 
+     * @param mapMark Map-mark. (NotNull)
+     */
+    public void setMapMark(String mapMark);
+
+    /**
+     * Set list-mark.
+     * 
+     * @param listMark List-mark. (NotNull)
+     */
+    public void setListMark(String listMark);
+
+    /**
+     * Set start brace.
+     * 
+     * @param startBrace Start brace. (NotNull)
+     */
+    public void setStartBrace(String startBrace);
+
+    /**
+     * Set end brace.
+     * 
+     * @param endBrace End brace. (NotNull)
+     */
+    public void setEndBrace(String endBrace);
+
+    /**
+     * Set delimiter.
+     * 
+     * @param delimiter Delimiter. (NotNull)
+     */
+    public void setDelimiter(String delimiter);
+
+    /**
+     * Set equal.
+     * 
+     * @param equal Equal. (NotNull)
+     */
+    public void setEqual(String equal);
+
+    // ==========================================================================================
+    //                                                                                   Generate
+    //                                                                                   ========
+    /**
+     * Generate map from map-string.
+     * 
+     * @param mapString Map-string (NotNull)
+     * @return Generated map. (NotNull)
+     */
+    public Map<String, Object> generateMap(String mapString);
+
+    /**
+     * Generate map from list-string. {Implement}
+     * 
+     * @param listString List-string (NotNull)
+     * @return Generated list. (NotNull)
+     */
+    public List<Object> generateList(String listString);
+}
\ No newline at end of file


Property changes on: announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/helper/MapListString.java
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/helper/MapListStringImpl.java
===================================================================
--- announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/helper/MapListStringImpl.java	                        (rev 0)
+++ announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/helper/MapListStringImpl.java	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,1054 @@
+package jp.sf.pal.announcement.db.allcommon.helper;
+
+import java.util.ArrayList;
+import java.util.LinkedHashMap;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * The implementation of MapList-String.
+ * 
+ * @author DBFlute(AutoGenerator)
+ */
+public class MapListStringImpl implements MapListString {
+
+    /** Line separator. */
+    public static final String NEW_LINE = System.getProperty("line.separator");
+
+    /** Map-mark. */
+    protected String _mapMark;
+
+    /** List-mark. */
+    protected String _listMark;
+
+    /** Start-brace. */
+    protected String _startBrace;
+
+    /** End-brace. */
+    protected String _endBrace;
+
+    /** Delimiter. */
+    protected String _delimiter;
+
+    /** Equal. */
+    protected String _equal;
+
+    /** Top string. */
+    protected String _topString;
+
+    /** Remainder string. */
+    protected String _remainderString;
+
+    /**
+     * Constructor.
+     */
+    public MapListStringImpl() {
+        _mapMark = DEFAULT_MAP_MARK;
+        _listMark = DEFAULT_LIST_MARK;
+        _startBrace = DEFAULT_START_BRACE;
+        _endBrace = DEFAULT_END_BRACE;
+        _delimiter = DEFAULT_DELIMITER;
+        _equal = DEFAULT_EQUAL;
+    }
+
+    // ==========================================================================================
+    //                                                                                     Setter
+    //                                                                                     ======
+    /**
+     * Set map-mark.
+     * 
+     * @param mapMark Map mark. (NotNull)
+     */
+    public void setMapMark(String mapMark) {
+        _mapMark = mapMark;
+    }
+
+    /**
+     * Set list-mark.
+     * 
+     * @param listMark List mark. (NotNull)
+     */
+    public void setListMark(String listMark) {
+        _listMark = listMark;
+    }
+
+    /**
+     * Set start-brace.
+     * 
+     * @param startBrace Start-brace. (NotNull)
+     */
+    public synchronized void setStartBrace(String startBrace) {
+        _startBrace = startBrace;
+    }
+
+    /**
+     * Set end-brace.
+     * 
+     * @param endBrace End-brace. (NotNull)
+     */
+    public synchronized void setEndBrace(String endBrace) {
+        _endBrace = endBrace;
+    }
+
+    /**
+     * Set delimiter.
+     * 
+     * @param delimiter Delimiter. (NotNull)
+     */
+    public synchronized void setDelimiter(String delimiter) {
+        _delimiter = delimiter;
+    }
+
+    /**
+     * Set equal.
+     * 
+     * @param equal Equal. (NotNull)
+     */
+    public void setEqual(String equal) {
+        _equal = equal;
+    }
+
+    // ****************************************************************************************************
+    //                                                                                          Main Method
+    //                                                                                          ***********
+
+    // ==========================================================================================
+    //                                                                                   Generate
+    //                                                                                   ========
+    /**
+     * Generate map from map-string. {Implement}
+     * 
+     * @param mapString Map-string (NotNull)
+     * @return Generated map. (NotNull)
+     */
+    public synchronized Map<String, Object> generateMap(String mapString) {
+        assertMapString(mapString);
+
+        _topString = mapString;
+        _remainderString = mapString;
+
+        removeBothSideSpaceAndTabAndNewLine();
+        removePrefixMapMarkAndStartBrace();
+
+        final Map<String, Object> generatedMap = newStringObjectMap();
+        parseRemainderMapString(generatedMap);
+        if (!"".equals(_remainderString)) {
+            String msg = "Final remainderString must be empty string:";
+            msg = msg + getNewLineAndIndent() + " # remainderString --> "
+                    + _remainderString;
+            msg = msg + getNewLineAndIndent() + " # mapString --> " + mapString;
+            msg = msg + getNewLineAndIndent() + " # generatedMap --> "
+                    + generatedMap;
+            throw new IllegalStateException(msg);
+        }
+        return generatedMap;
+    }
+
+    /**
+     * Generate map from list-string. {Implement}
+     * 
+     * @param listString List-string (NotNull)
+     * @return Generated list. (NotNull)
+     */
+    public synchronized List<Object> generateList(String listString) {
+        assertListString(listString);
+
+        _topString = listString;
+        _remainderString = listString;
+
+        removeBothSideSpaceAndTabAndNewLine();
+        removePrefixListMarkAndStartBrace();
+
+        final List<Object> generatedList = newObjectList();
+        parseRemainderListString(generatedList);
+        if (!"".equals(_remainderString)) {
+            String msg = "Final remainderString must be empty string:";
+            msg = msg + getNewLineAndIndent() + " # remainderString --> "
+                    + _remainderString;
+            msg = msg + getNewLineAndIndent() + " # listString --> "
+                    + listString;
+            msg = msg + getNewLineAndIndent() + " # generatedList --> "
+                    + generatedList;
+            throw new IllegalStateException(msg);
+        }
+        return generatedList;
+    }
+
+    // ==========================================================================================
+    //                                                                                      Parse
+    //                                                                                      =====
+    /**
+     * Parse remainder map string.
+     * 
+     * @param currentMap current map.
+     */
+    protected void parseRemainderMapString(final Map<String, Object> currentMap) {
+        while (true) {
+            if (initializeAtLoopBeginning()) {
+                return;
+            }
+
+            // *** Now, _remainderString should starts with the key of the map. ***
+
+            final int equalIndex = _remainderString.indexOf(_equal);
+            assertEqualIndex(_remainderString, equalIndex, _topString,
+                    currentMap);
+            final String mapKey = _remainderString.substring(0, equalIndex)
+                    .trim();
+            removePrefixTargetIndexPlus(equalIndex, _equal.length());
+            removeBothSideSpaceAndTabAndNewLine();
+
+            // *** Now, _remainderString should starts with the value of the map. ***
+
+            if (isStartsWithMapPrefix(_remainderString)) {
+                removePrefixMapMarkAndStartBrace();
+                parseRemainderMapString(setupNestMap(currentMap, mapKey));
+                if (closingAfterParseNestMapList()) {
+                    return;
+                }
+                continue;
+            }
+
+            if (isStartsWithListPrefix(_remainderString)) {
+                removePrefixListMarkAndStartBrace();
+                parseRemainderListString(setupNestList(currentMap, mapKey));
+                if (closingAfterParseNestMapList()) {
+                    return;
+                }
+                continue;
+            }
+
+            final int delimiterIndex = _remainderString.indexOf(_delimiter);
+            final int endBraceIndex = _remainderString.indexOf(_endBrace);
+            assertEndBracekIndex(_remainderString, endBraceIndex, _topString,
+                    currentMap);
+
+            // If delimiter exists and delimiter is closer than end brace, 
+            // Everything from the head of the present remainder string to the delimiter becomes map value.
+            //   ex) value1,key2=value2}
+            if (delimiterIndex >= 0 && delimiterIndex < endBraceIndex) {
+                final String mapValue = _remainderString.substring(0,
+                        delimiterIndex);
+                currentMap.put(mapKey, filterMapListValue(mapValue));
+
+                // Because the map element continues since the delimiter, skip the delimiter and continue the loop.
+                removePrefixTargetIndexPlus(delimiterIndex, _delimiter.length());
+                continue;
+            }
+
+            // Everything from the head of the present remainder string to the delimiter becomes map value.
+            //   ex) value1}, key2=value2}
+            final String mapValue = _remainderString
+                    .substring(0, endBraceIndex);
+            currentMap.put(mapKey, filterMapListValue(mapValue));
+
+            // Analyzing map is over. So closing and return.
+            closingByEndBraceIndex(endBraceIndex);
+            return;
+        }
+    }
+
+    /**
+     * Parse remainder list string.
+     * 
+     * @param currentList current list.
+     */
+    protected void parseRemainderListString(final List<Object> currentList) {
+        while (true) {
+            if (initializeAtLoopBeginning()) {
+                return;
+            }
+
+            // *** Now, _remainderString should starts with the value of the list. ***
+
+            if (isStartsWithMapPrefix(_remainderString)) {
+                removePrefixMapMarkAndStartBrace();
+                parseRemainderMapString(setupNestMap(currentList));
+                if (closingAfterParseNestMapList()) {
+                    return;
+                }
+                continue;
+            }
+
+            if (isStartsWithListPrefix(_remainderString)) {
+                removePrefixListMarkAndStartBrace();
+                parseRemainderListString(setupNestList(currentList));
+                if (closingAfterParseNestMapList()) {
+                    return;
+                }
+                continue;
+            }
+
+            final int delimiterIndex = _remainderString.indexOf(_delimiter);
+            final int endBraceIndex = _remainderString.indexOf(_endBrace);
+            assertEndBraceIndex(_remainderString, endBraceIndex, _topString,
+                    currentList);
+
+            // If delimiter exists and delimiter is closer than end brace, 
+            // Everything from the head of the present remainder string to the delimiter becomes list value.
+            //   ex) value1,value2,value3}
+            if (delimiterIndex >= 0 && delimiterIndex < endBraceIndex) {
+                final String listValue = _remainderString.substring(0,
+                        delimiterIndex);
+                currentList.add(filterMapListValue(listValue));
+
+                // Because the list element continues since the delimiter, skip the delimiter and continue the loop.
+                removePrefixTargetIndexPlus(delimiterIndex, _delimiter.length());
+                continue;
+            }
+
+            // Everything from the head of the present remainder string to the delimiter becomes list value.
+            //   ex) value1}, value2, }
+            final String listValue = _remainderString.substring(0,
+                    endBraceIndex);
+            currentList.add(filterMapListValue(listValue));
+
+            // Analyzing list is over. So closing and return.
+            closingByEndBraceIndex(endBraceIndex);
+            return;
+        }
+    }
+
+    /**
+     * Initialize at loop beginning.
+     * 
+     * @return Is return?
+     */
+    protected boolean initializeAtLoopBeginning() {
+        // Remove prefix delimiter. (Result string is always trimmed.)
+        removePrefixAllDelimiter();
+
+        // If the remainder string is empty-string, Analyzing is over!
+        if (_remainderString.equals("")) {
+            return true;
+        }
+
+        // If the remainder string starts with end-brace, Analyzing current map is over!
+        // And then remove the end-brace.
+        if (isStartsWithEndBrace(_remainderString)) {
+            removePrefixEndBrace();
+            return true;
+        }
+        return false;
+    }
+
+    /**
+     * Close after parse nest map list.
+     * 
+     * @return Is return?
+     */
+    protected boolean closingAfterParseNestMapList() {
+        // If the remainder string starts with end-brace, remove it and return true.
+        if (isStartsWithEndBrace(_remainderString)) {
+            removePrefixEndBrace();
+            return true;
+        }
+        return false;
+    }
+
+    /**
+     * Close by end-brace index.
+     * 
+     * @param endBraceIndex End-brace index.
+     */
+    protected void closingByEndBraceIndex(int endBraceIndex) {
+        // Remove the value that was finished analyzing and end-brace.
+        _remainderString = _remainderString.substring(endBraceIndex);
+        removePrefixEndBrace();
+    }
+
+    // ****************************************************************************************************
+    //                                                                                      StateFul Method
+    //                                                                                      ***************
+
+    // ==========================================================================================
+    //                                                                                     Remove
+    //                                                                                     ======
+    /**
+     * Remove prefix map-mark and start-brace.
+     */
+    protected void removePrefixMapMarkAndStartBrace() {
+        removePrefix(_mapMark + _startBrace);
+    }
+
+    /**
+     * Remove prefix list-mark and start-brace.
+     */
+    protected void removePrefixListMarkAndStartBrace() {
+        removePrefix(_listMark + _startBrace);
+    }
+
+    /**
+     * Remove prefix delimiter.
+     */
+    protected void removePrefixDelimiter() {
+        removePrefix(_delimiter);
+    }
+
+    /**
+     * Remove prefix end-brace.
+     */
+    protected void removePrefixEndBrace() {
+        removePrefix(_endBrace);
+    }
+
+    /**
+     * Remove prefix.
+     * 
+     * @param prefixString Prefix string. (NotNull)
+     */
+    protected void removePrefix(String prefixString) {
+        if (_remainderString == null) {
+            String msg = "Argument[remainderString] must not be null: "
+                    + _remainderString;
+            throw new IllegalArgumentException(msg);
+        }
+        if (prefixString == null) {
+            String msg = "Argument[prefixString] must not be null: "
+                    + prefixString;
+            throw new IllegalArgumentException(msg);
+        }
+
+        removeBothSideSpaceAndTabAndNewLine();
+
+        if (_remainderString.length() < prefixString.length()) {
+            String msg = "Argument[remainderString] length must be larger than Argument[prefixString] length:";
+            msg = msg + getNewLineAndIndent() + " # remainderString --> "
+                    + _remainderString;
+            msg = msg + getNewLineAndIndent() + " # prefixString="
+                    + prefixString;
+            throw new IllegalArgumentException(msg);
+        }
+        if (!_remainderString.startsWith(prefixString)) {
+            String msg = "Argument[remainderString] must start with Argument[prefixString:]";
+            msg = msg + getNewLineAndIndent() + " # remainderString --> "
+                    + _remainderString;
+            msg = msg + getNewLineAndIndent() + " # prefixString --> "
+                    + prefixString;
+            throw new IllegalArgumentException(msg);
+        }
+
+        _remainderString = _remainderString.substring(prefixString.length());
+        removeBothSideSpaceAndTabAndNewLine();
+    }
+
+    /**
+     * Remove prefix and delimiter.
+     */
+    protected void removePrefixAllDelimiter() {
+        removeBothSideSpaceAndTabAndNewLine();
+
+        while (true) {
+            if (!isStartsWithDelimiter(_remainderString)) {
+                break;
+            }
+
+            if (isStartsWithDelimiter(_remainderString)) {
+                removePrefixDelimiter();
+                removeBothSideSpaceAndTabAndNewLine();
+            }
+        }
+    }
+
+    /**
+     * Remove both side space and tab and new-line.
+     */
+    protected void removeBothSideSpaceAndTabAndNewLine() {
+        _remainderString = _remainderString.trim();
+    }
+
+    /**
+     * Remove prefix (target index plus one).
+     * 
+     * @param index Index.
+     * @param plusCount Plus count.
+     */
+    protected void removePrefixTargetIndexPlus(int index, int plusCount) {
+        _remainderString = _remainderString.substring(index + plusCount);
+    }
+
+    // ****************************************************************************************************
+    //                                                                                     StateLess Method
+    //                                                                                     ****************
+
+    // ==========================================================================================
+    //                                                                                     Assert
+    //                                                                                     ======
+    /**
+     * Assert map-string.
+     * 
+     * @param mapString Map-string. (NotNull)
+     */
+    protected void assertMapString(String mapString) {
+        if (mapString == null) {
+            String msg = "Argument[mapString] must not be null: ";
+            throw new IllegalArgumentException(msg + "mapString=" + mapString);
+        }
+        mapString = mapString.trim();
+        if (!isStartsWithMapPrefix(mapString)) {
+            String msg = "Argument[mapString] must start with '" + _mapMark
+                    + _startBrace + "': ";
+            throw new IllegalArgumentException(msg + "mapString=" + mapString);
+        }
+        if (!isEndsWithEndBrace(mapString)) {
+            String msg = "Argument[mapString] must end with '" + _endBrace
+                    + "': ";
+            throw new IllegalArgumentException(msg + "mapString=" + mapString);
+        }
+
+        final int startBraceCount = getDelimiterCount(mapString, _startBrace);
+        final int endBraceCount = getDelimiterCount(mapString, _endBrace);
+        if (startBraceCount != endBraceCount) {
+            String msg = "It is necessary to have braces of the same number on start and end:";
+            msg = msg + getNewLineAndIndent() + " # mapString --> " + mapString;
+            msg = msg + getNewLineAndIndent() + " # startBraceCount --> "
+                    + startBraceCount;
+            msg = msg + getNewLineAndIndent() + " # endBraceCount --> "
+                    + endBraceCount;
+            throw new IllegalArgumentException(msg);
+        }
+    }
+
+    /**
+     * Assert list-string.
+     * 
+     * @param listString List-string. (NotNull)
+     */
+    protected void assertListString(String listString) {
+        if (listString == null) {
+            String msg = "Argument[listString] must not be null: ";
+            throw new IllegalArgumentException(msg + "listString=" + listString);
+        }
+        listString = listString.trim();
+        if (!isStartsWithListPrefix(listString)) {
+            String msg = "Argument[listString] must start with '" + _mapMark
+                    + "': ";
+            throw new IllegalArgumentException(msg + "listString=" + listString);
+        }
+        if (!isEndsWithEndBrace(listString)) {
+            String msg = "Argument[listString] must end with '" + _endBrace
+                    + "': ";
+            throw new IllegalArgumentException(msg + "listString=" + listString);
+        }
+
+        final int startBraceCount = getDelimiterCount(listString, _startBrace);
+        final int endBraceCount = getDelimiterCount(listString, _endBrace);
+        if (startBraceCount != endBraceCount) {
+            String msg = "It is necessary to have braces of the same number on start and end:";
+            msg = msg + getNewLineAndIndent() + " # listString --> "
+                    + listString;
+            msg = msg + getNewLineAndIndent() + " # startBraceCount --> "
+                    + startBraceCount;
+            msg = msg + getNewLineAndIndent() + " # endBraceCount --> "
+                    + endBraceCount;
+            throw new IllegalArgumentException(msg);
+        }
+    }
+
+    /**
+     * Assert equal-index.
+     * 
+     * @param remainderMapString Remainder map-string. (NotNull)
+     * @param equalIndex Equal-index.
+     * @param mapString4Log Map-string for log. (NotNull)
+     * @param currentMap4Log Current-map for log. (NotNull)
+     */
+    protected void assertEqualIndex(String remainderMapString, int equalIndex,
+            String mapString4Log, Map<String, Object> currentMap4Log) {
+        if (remainderMapString == null) {
+            String msg = "Argument[remainderMapString] must not be null:";
+            msg = msg + getNewLineAndIndent() + " # remainderMapString --> "
+                    + remainderMapString;
+            msg = msg + getNewLineAndIndent() + " # equalIndex --> "
+                    + equalIndex;
+            msg = msg + getNewLineAndIndent() + " # mapString4Log --> "
+                    + mapString4Log;
+            msg = msg + getNewLineAndIndent() + " # currentMap4Log --> "
+                    + currentMap4Log;
+            msg = msg + getNewLineAndIndent() + " # _startBrace --> "
+                    + _startBrace;
+            msg = msg + getNewLineAndIndent() + " # _endBrace --> " + _endBrace;
+            msg = msg + getNewLineAndIndent() + " # _delimiter --> "
+                    + _delimiter;
+            msg = msg + getNewLineAndIndent() + " # _equal --> " + _equal;
+            throw new IllegalArgumentException(msg);
+        }
+
+        if (equalIndex < 0) {
+            String msg = "Argument[equalIndex] must be plus or zero:";
+            msg = msg + getNewLineAndIndent() + " # remainderMapString --> "
+                    + remainderMapString;
+            msg = msg + getNewLineAndIndent() + " # equalIndex --> "
+                    + equalIndex;
+            msg = msg + getNewLineAndIndent() + " # mapString4Log --> "
+                    + mapString4Log;
+            msg = msg + getNewLineAndIndent() + " # currentMap4Log --> "
+                    + currentMap4Log;
+            msg = msg + getNewLineAndIndent() + " # _startBrace --> "
+                    + _startBrace;
+            msg = msg + getNewLineAndIndent() + " # _endBrace --> " + _endBrace;
+            msg = msg + getNewLineAndIndent() + " # _delimiter --> "
+                    + _delimiter;
+            msg = msg + getNewLineAndIndent() + " # _equal --> " + _equal;
+            throw new IllegalArgumentException(msg);
+        }
+
+        if (remainderMapString.length() < equalIndex) {
+            String msg = "Argument[remainderMapString] length must be larger than equalIndex value:";
+            msg = msg + getNewLineAndIndent() + " # remainderMapString --> "
+                    + remainderMapString;
+            msg = msg + getNewLineAndIndent() + " # equalIndex --> "
+                    + equalIndex;
+            msg = msg + getNewLineAndIndent() + " # mapString4Log --> "
+                    + mapString4Log;
+            msg = msg + getNewLineAndIndent() + " # currentMap4Log --> "
+                    + currentMap4Log;
+            msg = msg + getNewLineAndIndent() + " # _startBrace --> "
+                    + _startBrace;
+            msg = msg + getNewLineAndIndent() + " # _endBrace --> " + _endBrace;
+            msg = msg + getNewLineAndIndent() + " # _delimiter --> "
+                    + _delimiter;
+            msg = msg + getNewLineAndIndent() + " # _equal --> " + _equal;
+            throw new IllegalArgumentException(msg);
+        }
+
+        final String expectedAsEndMark = remainderMapString.substring(
+                equalIndex, equalIndex + _equal.length());
+        if (!expectedAsEndMark.equals(_equal)) {
+            String msg = "Argument[remainderMapString] must have '" + _equal
+                    + "' at Argument[equalIndex]:";
+            msg = msg + getNewLineAndIndent() + " # remainderMapString --> "
+                    + remainderMapString;
+            msg = msg + getNewLineAndIndent() + " # equalIndex --> "
+                    + equalIndex;
+            msg = msg + getNewLineAndIndent() + " # expectedAsEndMark --> "
+                    + expectedAsEndMark;
+            msg = msg + getNewLineAndIndent() + " # mapString --> "
+                    + mapString4Log;
+            msg = msg + getNewLineAndIndent() + " # currentMap --> "
+                    + currentMap4Log;
+            msg = msg + getNewLineAndIndent() + " # _startBrace --> "
+                    + _startBrace;
+            msg = msg + getNewLineAndIndent() + " # _endBrace --> " + _endBrace;
+            msg = msg + getNewLineAndIndent() + " # _delimiter --> "
+                    + _delimiter;
+            msg = msg + getNewLineAndIndent() + " # _equal --> " + _equal;
+            throw new IllegalArgumentException(msg);
+        }
+    }
+
+    /**
+     * Assert end-brace-index.
+     * 
+     * @param remainderMapString Remainder map-string. (NotNull)
+     * @param endBraceIndex End-brace-index.
+     * @param mapString4Log Map-string for log. (NotNull)
+     * @param currentMap4Log Current-map for log. (NotNull)
+     */
+    protected void assertEndBracekIndex(String remainderMapString,
+            int endBraceIndex, String mapString4Log,
+            Map<String, Object> currentMap4Log) {
+        if (remainderMapString == null) {
+            String msg = "Argument[remainderMapString] must not be null:";
+            msg = msg + getNewLineAndIndent() + " # remainderMapString --> "
+                    + remainderMapString;
+            msg = msg + getNewLineAndIndent() + " # endBraceIndex --> "
+                    + endBraceIndex;
+            msg = msg + getNewLineAndIndent() + " # mapString --> "
+                    + mapString4Log;
+            msg = msg + getNewLineAndIndent() + " # currentMap --> "
+                    + currentMap4Log;
+            msg = msg + getNewLineAndIndent() + " # _startBrace --> "
+                    + _startBrace;
+            msg = msg + getNewLineAndIndent() + " # _endBrace --> " + _endBrace;
+            msg = msg + getNewLineAndIndent() + " # _delimiter --> "
+                    + _delimiter;
+            msg = msg + getNewLineAndIndent() + " # _equal --> " + _equal;
+            throw new IllegalArgumentException(msg);
+        }
+
+        if (endBraceIndex < 0) {
+            String msg = "Argument[endMarkIndex] must be plus or zero:";
+            msg = msg + getNewLineAndIndent() + " # remainderMapString --> "
+                    + remainderMapString;
+            msg = msg + getNewLineAndIndent() + " # endBraceIndex --> "
+                    + endBraceIndex;
+            msg = msg + getNewLineAndIndent() + " # mapString --> ="
+                    + mapString4Log;
+            msg = msg + getNewLineAndIndent() + " # currentMap --> "
+                    + currentMap4Log;
+            msg = msg + getNewLineAndIndent() + " # _startBrace --> "
+                    + _startBrace;
+            msg = msg + getNewLineAndIndent() + " # _endBrace --> " + _endBrace;
+            msg = msg + getNewLineAndIndent() + " # _delimiter --> "
+                    + _delimiter;
+            msg = msg + getNewLineAndIndent() + " # _equal --> " + _equal;
+            throw new IllegalArgumentException(msg);
+        }
+
+        if (remainderMapString.length() < endBraceIndex) {
+            String msg = "Argument[remainderMapString] length must be larger than endMarkIndex value:";
+            msg = msg + getNewLineAndIndent() + " # remainderMapString --> "
+                    + remainderMapString;
+            msg = msg + getNewLineAndIndent() + " # endBraceIndex --> "
+                    + endBraceIndex;
+            msg = msg + getNewLineAndIndent() + " # mapString --> "
+                    + mapString4Log;
+            msg = msg + getNewLineAndIndent() + " # currentMap --> "
+                    + currentMap4Log;
+            msg = msg + getNewLineAndIndent() + " # _startBrace --> "
+                    + _startBrace;
+            msg = msg + getNewLineAndIndent() + " # _endBrace --> " + _endBrace;
+            msg = msg + getNewLineAndIndent() + " # _delimiter --> "
+                    + _delimiter;
+            msg = msg + getNewLineAndIndent() + " # _equal --> " + _equal;
+            throw new IllegalArgumentException(msg);
+        }
+
+        final String expectedAsEndMark = remainderMapString.substring(
+                endBraceIndex, endBraceIndex + _endBrace.length());
+        if (!expectedAsEndMark.equals(_endBrace)) {
+            String msg = "Argument[remainderMapString] must have '" + _endBrace
+                    + "' at Argument[endBraceIndex]:";
+            msg = msg + getNewLineAndIndent() + " # remainderMapString --> "
+                    + remainderMapString;
+            msg = msg + getNewLineAndIndent() + " # endBraceIndex --> "
+                    + endBraceIndex;
+            msg = msg + getNewLineAndIndent() + " # expectedAsEndMark --> "
+                    + expectedAsEndMark;
+            msg = msg + getNewLineAndIndent() + " # mapString --> "
+                    + mapString4Log;
+            msg = msg + getNewLineAndIndent() + " # currentMap --> "
+                    + currentMap4Log;
+            msg = msg + getNewLineAndIndent() + " # _startBrace --> "
+                    + _startBrace;
+            msg = msg + getNewLineAndIndent() + " # _endBrace --> " + _endBrace;
+            msg = msg + getNewLineAndIndent() + " # _delimiter --> "
+                    + _delimiter;
+            msg = msg + getNewLineAndIndent() + " # _equal --> " + _equal;
+            throw new IllegalArgumentException(msg);
+        }
+    }
+
+    /**
+     * Assert end-brace-index.
+     * @param remainderListString Remainder list-string. (NotNull)
+     * @param endBraceIndex End-brace-index.
+     * @param listString4Log List-string for log. (NotNull)
+     * @param currentList4Log Current-list for log. (NotNull)
+     */
+    protected void assertEndBraceIndex(String remainderListString,
+            int endBraceIndex, String listString4Log, List<?> currentList4Log) {
+        if (remainderListString == null) {
+            String msg = "Argument[remainderListString] must not be null:";
+            msg = msg + getNewLineAndIndent() + " # remainderListString --> "
+                    + remainderListString;
+            msg = msg + getNewLineAndIndent() + " # endBraceIndex --> "
+                    + endBraceIndex;
+            msg = msg + getNewLineAndIndent() + " # listString --> "
+                    + listString4Log;
+            msg = msg + getNewLineAndIndent() + " # currentList --> "
+                    + currentList4Log;
+            msg = msg + getNewLineAndIndent() + " # _startBrace --> "
+                    + _startBrace;
+            msg = msg + getNewLineAndIndent() + " # _endBrace --> " + _endBrace;
+            msg = msg + getNewLineAndIndent() + " # _delimiter --> "
+                    + _delimiter;
+            msg = msg + getNewLineAndIndent() + " # _equal --> " + _equal;
+            throw new IllegalArgumentException(msg);
+        }
+
+        if (endBraceIndex < 0) {
+            String msg = "Argument[endMarkIndex] must be plus or zero:";
+            msg = msg + getNewLineAndIndent() + " # remainderListString --> "
+                    + remainderListString;
+            msg = msg + getNewLineAndIndent() + " # endBraceIndex --> "
+                    + endBraceIndex;
+            msg = msg + getNewLineAndIndent() + " # listString --> "
+                    + listString4Log;
+            msg = msg + getNewLineAndIndent() + " # currentList --> "
+                    + currentList4Log;
+            msg = msg + getNewLineAndIndent() + " # _startBrace --> "
+                    + _startBrace;
+            msg = msg + getNewLineAndIndent() + " # _endBrace --> " + _endBrace;
+            msg = msg + getNewLineAndIndent() + " # _delimiter --> "
+                    + _delimiter;
+            msg = msg + getNewLineAndIndent() + " # _equal --> " + _equal;
+            throw new IllegalArgumentException(msg);
+        }
+
+        if (remainderListString.length() < endBraceIndex) {
+            String msg = "Argument[remainderListString] length must be larger than endMarkIndex value:";
+            msg = msg + getNewLineAndIndent() + " # remainderListString --> "
+                    + remainderListString;
+            msg = msg + getNewLineAndIndent() + " # endBraceIndex --> "
+                    + endBraceIndex;
+            msg = msg + getNewLineAndIndent() + " # listString --> "
+                    + listString4Log;
+            msg = msg + getNewLineAndIndent() + " # currentList --> "
+                    + currentList4Log;
+            msg = msg + getNewLineAndIndent() + " # _startBrace --> "
+                    + _startBrace;
+            msg = msg + getNewLineAndIndent() + " # _endBrace --> " + _endBrace;
+            msg = msg + getNewLineAndIndent() + " # _delimiter --> "
+                    + _delimiter;
+            msg = msg + getNewLineAndIndent() + " # _equal --> " + _equal;
+            throw new IllegalArgumentException(msg);
+        }
+
+        final String expectedAsEndBrace = remainderListString.substring(
+                endBraceIndex, endBraceIndex + _endBrace.length());
+        if (!expectedAsEndBrace.equals(_endBrace)) {
+            String msg = "Argument[remainderListString] must have '"
+                    + _endBrace + "' at Argument[endBraceIndex]:";
+            msg = msg + getNewLineAndIndent() + " # remainderListString --> "
+                    + remainderListString;
+            msg = msg + getNewLineAndIndent() + " # endBraceIndex --> "
+                    + endBraceIndex;
+            msg = msg + getNewLineAndIndent() + " # expectedAsEndBrace --> "
+                    + expectedAsEndBrace;
+            msg = msg + getNewLineAndIndent() + " # listString --> "
+                    + listString4Log;
+            msg = msg + getNewLineAndIndent() + " # currentList --> "
+                    + currentList4Log;
+            msg = msg + getNewLineAndIndent() + " # _startBrace --> "
+                    + _startBrace;
+            msg = msg + getNewLineAndIndent() + " # _endBrace --> " + _endBrace;
+            msg = msg + getNewLineAndIndent() + " # _delimiter --> "
+                    + _delimiter;
+            msg = msg + getNewLineAndIndent() + " # _equal --> " + _equal;
+            throw new IllegalArgumentException(msg);
+        }
+    }
+
+    // ==========================================================================================
+    //                                                                                     Filter
+    //                                                                                     ======
+    /**
+     * Filter map or list value.
+     * <p>
+     * <pre>
+     * # The value is trimmed.
+     * # If the value is null, this returns null.
+     * # If the value is 'null', this returns null.
+     * # If the trimmed value is empty string, this returns null.
+     * </pre>
+     * @param value value. (Nullable)
+     * @return Filtered value. (Nullable)
+     */
+    protected String filterMapListValue(String value) {
+        if (value == null) {
+            return null;
+        }
+        value = value.trim();
+        return (("".equals(value) || "null".equals(value)) ? null : value);
+    }
+
+    // ==========================================================================================
+    //                                                                                  Judgement
+    //                                                                                  =========
+    /**
+     * Does it start with map-prefix?
+     * 
+     * @param targetString Target-string. (NotNull)
+     * @return Determination.
+     */
+    protected boolean isStartsWithMapPrefix(String targetString) {
+        if (targetString == null) {
+            String msg = "Argument[targetString] must not be null: "
+                    + targetString;
+            throw new IllegalArgumentException(msg);
+        }
+        targetString = targetString.trim();
+        if (targetString.startsWith(_mapMark + _startBrace)) {
+            return true;
+        } else {
+            return false;
+        }
+    }
+
+    /**
+     * Does it start with list-prefix?
+     * 
+     * @param targetString Target-string. (NotNull)
+     * @return Determination.
+     */
+    protected boolean isStartsWithListPrefix(String targetString) {
+        if (targetString == null) {
+            String msg = "Argument[targetString] must not be null: "
+                    + targetString;
+            throw new IllegalArgumentException(msg);
+        }
+        targetString = targetString.trim();
+        if (targetString.startsWith(_listMark + _startBrace)) {
+            return true;
+        } else {
+            return false;
+        }
+    }
+
+    /**
+     * Does it start with delimiter?
+     * 
+     * @param targetString Target-string. (NotNull)
+     * @return Determination.
+     */
+    protected boolean isStartsWithDelimiter(String targetString) {
+        if (targetString == null) {
+            String msg = "Argument[targetString] must not be null: "
+                    + targetString;
+            throw new IllegalArgumentException(msg);
+        }
+        targetString = targetString.trim();
+        if (targetString.startsWith(_delimiter)) {
+            return true;
+        } else {
+            return false;
+        }
+    }
+
+    /**
+     * Does it start with end-brace?
+     * 
+     * @param targetString Target-string. (NotNull)
+     * @return Determination.
+     */
+    protected boolean isStartsWithEndBrace(String targetString) {
+        if (targetString == null) {
+            String msg = "Argument[targetString] must not be null: "
+                    + targetString;
+            throw new IllegalArgumentException(msg);
+        }
+        targetString = targetString.trim();
+        if (targetString.startsWith(_endBrace)) {
+            return true;
+        } else {
+            return false;
+        }
+    }
+
+    /**
+     * Does it end with end-brace?
+     * 
+     * @param targetString Target-string. (NotNull)
+     * @return Determination.
+     */
+    protected boolean isEndsWithEndBrace(String targetString) {
+        if (targetString == null) {
+            String msg = "Argument[targetString] must not be null: "
+                    + targetString;
+            throw new IllegalArgumentException(msg);
+        }
+        targetString = targetString.trim();
+        if (targetString.endsWith(_endBrace)) {
+            return true;
+        } else {
+            return false;
+        }
+    }
+
+    // ==========================================================================================
+    //                                                                                      Other
+    //                                                                                      =====
+    /**
+     * Setup nest map.
+     * 
+     * @param currentMap Current-map. (NotNull)
+     * @param mapKey Map-key. (NotNull)
+     * @return Nest map. (NotNull)
+     */
+    protected Map<String, Object> setupNestMap(Map<String, Object> currentMap,
+            String mapKey) {
+        final Map<String, Object> nestMap = newStringObjectMap();
+        currentMap.put(mapKey, nestMap);
+        return nestMap;
+    }
+
+    /**
+     * Setup nest map.
+     * 
+     * @param currentList Current-list. (NotNull)
+     * @return Nest map. (NotNull)
+     */
+    protected Map<String, Object> setupNestMap(List<Object> currentList) {
+        final Map<String, Object> nestMap = newStringObjectMap();
+        currentList.add(nestMap);
+        return nestMap;
+    }
+
+    /**
+     * Setup nest list.
+     * 
+     * @param currentMap Current-map. (NotNull)
+     * @param mapKey Map-key. (NotNull)
+     * @return Nest list. (NotNull)
+     */
+    protected List<Object> setupNestList(Map<String, Object> currentMap,
+            String mapKey) {
+        final List<Object> nestList = newObjectList();
+        currentMap.put(mapKey, nestList);
+        return nestList;
+    }
+
+    /**
+     * Setup nest list.
+     * 
+     * @param currentList Current-list. (NotNull)
+     * @return Nest list. (NotNull)
+     */
+    protected List<Object> setupNestList(List<Object> currentList) {
+        final List<Object> nestList = newObjectList();
+        currentList.add(nestList);
+        return nestList;
+    }
+
+    /**
+     * New string-object-map.
+     * 
+     * @return String-object-map. (NotNull)
+     */
+    protected Map<String, Object> newStringObjectMap() {
+        return new LinkedHashMap<String, Object>();
+    }
+
+    /**
+     * New object-list.
+     * 
+     * @return String-object-list. (NotNull)
+     */
+    protected List<Object> newObjectList() {
+        return new ArrayList<Object>();
+    }
+
+    /**
+     * Get new-line and indent.
+     * 
+     * @return New-line and indent. (NotNull)
+     */
+    protected String getNewLineAndIndent() {
+        return NEW_LINE + "    ";
+    }
+
+    /**
+     * Get count that target string exist in the base string.
+     * 
+     * @param targetString Target string.
+     * @param delimiter Delimiter
+     * @return Delimiter count that _remainderString contains.
+     */
+    protected int getDelimiterCount(String targetString, String delimiter) {
+        int result = 0;
+        for (int i = 0;;) {
+            if (targetString.indexOf(delimiter, i) != -1) {
+                result++;
+                i = targetString.indexOf(delimiter, i) + 1;
+            } else {
+                break;
+            }
+        }
+        if (result == 0) {
+            result = -1;
+        }
+        return result;
+    }
+}
\ No newline at end of file


Property changes on: announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/helper/MapListStringImpl.java
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/helper/MapStringBuilder.java
===================================================================
--- announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/helper/MapStringBuilder.java	                        (rev 0)
+++ announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/helper/MapStringBuilder.java	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,72 @@
+package jp.sf.pal.announcement.db.allcommon.helper;
+
+/**
+ * The interface of map-string-builder.
+ *
+ * @author DBFlute(AutoGenerator)
+ */
+public interface MapStringBuilder {
+
+    // =====================================================================================
+    //                                                                                Setter
+    //                                                                                ======
+    public void setColumnNames(String[] columnNames);
+
+    public void setColumnNameList(java.util.List<String> columnNameList);
+
+    public void setMsMapMark(String value);
+
+    public void setMsStartBrace(String value);
+
+    public void setMsEndBrace(String value);
+
+    public void setMsDelimiter(String value);
+
+    public void setMsEqual(String value);
+
+    // =====================================================================================
+    //                                                                                  Main
+    //                                                                                  ====
+    public String buildByDelimiter(String values, String delimiter);
+
+    public String buildFromList(java.util.List<String> valueList);
+
+    // =====================================================================================
+    //                                                                Exception Static Class
+    //                                                                ======================
+    public static class DifferentDelimiterCountException extends
+            RuntimeException {
+
+        /** Serial version UID. (Default) */
+        private static final long serialVersionUID = 1L;
+
+        // =====================================================================================
+        //                                                                             Attribute
+        //                                                                             =========
+        protected java.util.List<String> _columnNameList;
+
+        protected java.util.List<String> _valueList;
+
+        // =====================================================================================
+        //                                                                           Constructor
+        //                                                                           ===========
+        public DifferentDelimiterCountException(String msg,
+                java.util.List<String> columnNameList,
+                java.util.List<String> valueList) {
+            super(msg);
+            _columnNameList = columnNameList;
+            _valueList = valueList;
+        }
+
+        // =====================================================================================
+        //                                                                              Accessor
+        //                                                                              ========
+        public java.util.List<String> getColumnNameList() {
+            return _columnNameList;
+        }
+
+        public java.util.List<String> getValueList() {
+            return _valueList;
+        }
+    }
+}


Property changes on: announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/helper/MapStringBuilder.java
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/helper/MapStringBuilderImpl.java
===================================================================
--- announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/helper/MapStringBuilderImpl.java	                        (rev 0)
+++ announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/helper/MapStringBuilderImpl.java	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,183 @@
+package jp.sf.pal.announcement.db.allcommon.helper;
+
+import jp.sf.pal.announcement.db.allcommon.helper.token.line.LineToken;
+import jp.sf.pal.announcement.db.allcommon.helper.token.line.LineTokenizingOption;
+import jp.sf.pal.announcement.db.allcommon.helper.token.line.impl.LineTokenImpl;
+
+/**
+ * The implementation of map-string-builder.
+ *
+ * @author DBFlute(AutoGenerator)
+ */
+public class MapStringBuilderImpl implements MapStringBuilder {
+
+    protected java.util.List<String> _columnNameList;
+
+    protected String _msMapMark;
+
+    protected String _msStartBrace;
+
+    protected String _msEndBrace;
+
+    protected String _msDelimiter;
+
+    protected String _msEqual;
+
+    protected boolean _trimDoubleQuotation;
+
+    public void setColumnNames(String[] columnNames) {
+        _columnNameList = java.util.Arrays.asList(columnNames);
+    }
+
+    public void setColumnNameList(java.util.List<String> columnNameList) {
+        _columnNameList = columnNameList;
+    }
+
+    public void setMsMapMark(String value) {
+        _msMapMark = value;
+    }
+
+    public void setMsStartBrace(String value) {
+        _msStartBrace = value;
+    }
+
+    public void setMsEndBrace(String value) {
+        _msEndBrace = value;
+    }
+
+    public void setMsDelimiter(String value) {
+        _msDelimiter = value;
+    }
+
+    public void setMsEqual(String value) {
+        _msEqual = value;
+    }
+
+    public void trimDoubleQuotation() {
+        _trimDoubleQuotation = true;
+    }
+
+    public String buildByDelimiter(String values, String delimiter) {
+        if (values == null) {
+            String msg = "The argument[values] should not be null.";
+            throw new IllegalArgumentException(msg);
+        }
+        if (delimiter == null) {
+            String msg = "The argument[delimiter] should not be null.";
+            throw new IllegalArgumentException(msg);
+        }
+        assertStringComponent();
+
+        final java.util.List<String> valueList = tokenize(values, delimiter);
+        assertColumnValueList(_columnNameList, valueList);
+
+        final StringBuffer sb = new StringBuffer();
+        sb.append(_msMapMark).append(_msStartBrace);
+        for (int i = 0; i < _columnNameList.size(); i++) {
+            sb.append(_columnNameList.get(i)).append(_msEqual).append(
+                    valueList.get(i)).append(_msDelimiter);
+        }
+
+        sb.delete(sb.length() - _msDelimiter.length(), sb.length());
+        sb.append(_msEndBrace);
+        return sb.toString();
+    }
+
+    public String buildFromList(java.util.List<String> valueList) {
+        if (valueList == null) {
+            String msg = "The argument[valueList] should not be null.";
+            throw new IllegalArgumentException(msg);
+        }
+        assertStringComponent();
+        assertColumnValueList(_columnNameList, valueList);
+
+        final StringBuffer sb = new StringBuffer();
+        sb.append(_msMapMark).append(_msStartBrace);
+        for (int i = 0; i < _columnNameList.size(); i++) {
+            sb.append(_columnNameList.get(i)).append(_msEqual).append(
+                    valueList.get(i)).append(_msDelimiter);
+        }
+
+        sb.delete(sb.length() - _msDelimiter.length(), sb.length());
+        sb.append(_msEndBrace);
+        return sb.toString();
+    }
+
+    protected java.util.List<String> tokenize(String value, String delimiter) {
+        final LineToken lineToken = new LineTokenImpl();
+        final LineTokenizingOption lineTokenizingOption = new LineTokenizingOption();
+        lineTokenizingOption.setDelimiter(delimiter);
+        if (_trimDoubleQuotation) {
+            lineTokenizingOption.trimDoubleQuotation();
+        }
+        return lineToken.tokenize(value, lineTokenizingOption);
+    }
+
+    protected void assertStringComponent() {
+        if (_columnNameList == null) {
+            String msg = "The columnNameList should not be null.";
+            throw new IllegalStateException(msg);
+        }
+        if (_columnNameList.isEmpty()) {
+            String msg = "The columnNameList should not be empty.";
+            throw new IllegalStateException(msg);
+        }
+        if (_msMapMark == null) {
+            String msg = "The msMapMark should not be null.";
+            throw new IllegalStateException(msg);
+        }
+        if (_msStartBrace == null) {
+            String msg = "The msStartBrace should not be null.";
+            throw new IllegalStateException(msg);
+        }
+        if (_msEndBrace == null) {
+            String msg = "The msEndBrace should not be null.";
+            throw new IllegalStateException(msg);
+        }
+        if (_msDelimiter == null) {
+            String msg = "The msDelimiter should not be null.";
+            throw new IllegalStateException(msg);
+        }
+        if (_msEqual == null) {
+            String msg = "The msEqual should not be null.";
+            throw new IllegalStateException(msg);
+        }
+    }
+
+    protected void assertColumnValueList(java.util.List<String> columnNameList,
+            java.util.List<String> valueList) {
+        if (columnNameList.size() != valueList.size()) {
+            String msg = "The length of columnNameList and valueList are difference. ("
+                    + columnNameList.size() + ", " + valueList.size() + ")";
+            msg = msg + " columnNameList=" + columnNameList;
+            msg = msg + " valueList=" + valueList;
+            throw new DifferentDelimiterCountException(msg, columnNameList,
+                    valueList);
+        }
+    }
+
+    protected static final String replace(String text, String fromText,
+            String toText) {
+        if (text == null || fromText == null || toText == null) {
+            return null;
+        }
+        final StringBuffer buf = new StringBuffer(100);
+        int pos = 0;
+        int pos2 = 0;
+        while (true) {
+            pos = text.indexOf(fromText, pos2);
+            if (pos == 0) {
+                buf.append(toText);
+                pos2 = fromText.length();
+            } else if (pos > 0) {
+                buf.append(text.substring(pos2, pos));
+                buf.append(toText);
+                pos2 = pos + fromText.length();
+            } else {
+                buf.append(text.substring(pos2));
+                break;
+            }
+        }
+        return buf.toString();
+    }
+}


Property changes on: announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/helper/MapStringBuilderImpl.java
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/helper/character/GeneralCharacter.java
===================================================================
--- announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/helper/character/GeneralCharacter.java	                        (rev 0)
+++ announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/helper/character/GeneralCharacter.java	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,17 @@
+package jp.sf.pal.announcement.db.allcommon.helper.character;
+
+/**
+ * The interface of general character.
+ *
+ * @author DBFlute(AutoGenerator)
+ */
+public interface GeneralCharacter {
+
+    public String toSingleByteAlphabet(String s);
+
+    public String toSingleByteNumber(String s);
+
+    public String toSingleByteAlphabetNumber(String target);
+
+    public String toSingleByteAlphabetNumberMark(String target);
+}


Property changes on: announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/helper/character/GeneralCharacter.java
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/helper/character/JapaneseCharacter.java
===================================================================
--- announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/helper/character/JapaneseCharacter.java	                        (rev 0)
+++ announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/helper/character/JapaneseCharacter.java	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,11 @@
+package jp.sf.pal.announcement.db.allcommon.helper.character;
+
+/**
+ * The interface of Japanese character.
+ *
+ * @author DBFlute(AutoGenerator)
+ */
+public interface JapaneseCharacter {
+
+    public String toDoubleByteKatakana(String target);
+}


Property changes on: announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/helper/character/JapaneseCharacter.java
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/helper/character/impl/GeneralCharacterImpl.java
===================================================================
--- announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/helper/character/impl/GeneralCharacterImpl.java	                        (rev 0)
+++ announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/helper/character/impl/GeneralCharacterImpl.java	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,102 @@
+package jp.sf.pal.announcement.db.allcommon.helper.character.impl;
+
+import jp.sf.pal.announcement.db.allcommon.helper.character.GeneralCharacter;
+
+/**
+ * The implementation of general character.
+ *
+ * @author DBFlute(AutoGenerator)
+ */
+public class GeneralCharacterImpl implements GeneralCharacter {
+
+    public String toSingleByteAlphabet(String target) {
+        if (target == null || target.trim().length() == 0) {
+            return target;
+        }
+        final StringBuffer sb = new StringBuffer();
+        for (int i = 0; i < target.length(); i++) {
+            final char currentChar = target.charAt(i);
+
+            if (currentChar >= 0xff21 && currentChar <= 0xff3a) {
+                sb.append(toSingleByteCharacter(currentChar));
+            } else if (currentChar >= 0xff41 && currentChar <= 0xff5a) {
+                sb.append(toSingleByteCharacter(currentChar));
+            } else {
+                sb.append(currentChar);
+            }
+        }
+        return sb.toString();
+    }
+
+    public String toSingleByteNumber(String target) {
+        if (target == null || target.trim().length() == 0) {
+            return target;
+        }
+        final StringBuffer sb = new StringBuffer();
+        for (int i = 0; i < target.length(); i++) {
+            final char currentChar = target.charAt(i);
+            if (currentChar >= 0xff10 && currentChar <= 0xff19) {
+                sb.append(toSingleByteCharacter(currentChar));
+            } else {
+                sb.append(currentChar);
+            }
+        }
+        return sb.toString();
+    }
+
+    public String toSingleByteAlphabetNumber(String target) {
+        if (target == null || target.trim().length() == 0) {
+            return target;
+        }
+        final StringBuffer sb = new StringBuffer();
+        for (int i = 0; i < target.length(); i++) {
+            final char currentChar = target.charAt(i);
+
+            if (currentChar >= 0xff10 && currentChar <= 0xff19) {
+                sb.append(toSingleByteCharacter(currentChar));
+            } else if (currentChar >= 0xff21 && currentChar <= 0xff3a) {
+                sb.append(toSingleByteCharacter(currentChar));
+            } else if (currentChar >= 0xff41 && currentChar <= 0xff5a) {
+                sb.append(toSingleByteCharacter(currentChar));
+            } else {
+                sb.append(currentChar);
+            }
+        }
+        return sb.toString();
+    }
+
+    public String toSingleByteAlphabetNumberMark(String target) {
+        if (target == null || target.trim().length() == 0) {
+            return target;
+        }
+        final StringBuffer sb = new StringBuffer(target.length());
+        for (int i = 0; i < target.length(); i++) {
+            final char currentChar = target.charAt(i);
+            if (currentChar >= 0xff01 && currentChar <= 0xff5e) {
+                sb.append(toSingleByteCharacter(currentChar));
+
+                // TODO: @jflute - I will append mark...
+            } else if (currentChar == '\u2019' || currentChar == '\u2018'
+                    || currentChar == '\u2032') {
+                sb.append('\'');
+            } else if (currentChar == '\u201d' || currentChar == '\u201c'
+                    || currentChar == '\u2033') {
+                sb.append('\"');
+            } else if (currentChar == '\uffe5') {
+                sb.append('\\');
+            } else if (currentChar == '\u2010') {
+                sb.append('-');
+            } else if (currentChar == '\uff5e') {
+                sb.append('~');
+
+            } else {
+                sb.append(currentChar);
+            }
+        }
+        return sb.toString();
+    }
+
+    protected char toSingleByteCharacter(final char currentChar) {
+        return (char) (currentChar - 0xfee0);
+    }
+}


Property changes on: announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/helper/character/impl/GeneralCharacterImpl.java
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/helper/character/impl/JapaneseCharacterImpl.java
===================================================================
--- announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/helper/character/impl/JapaneseCharacterImpl.java	                        (rev 0)
+++ announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/helper/character/impl/JapaneseCharacterImpl.java	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,90 @@
+package jp.sf.pal.announcement.db.allcommon.helper.character.impl;
+
+import jp.sf.pal.announcement.db.allcommon.helper.character.JapaneseCharacter;
+
+/**
+ * The implementation of Japanese character.
+ *
+ * @author DBFlute(AutoGenerator)
+ */
+public class JapaneseCharacterImpl implements JapaneseCharacter {
+
+    // Double-byte Katakana
+    protected static final String TABLE_ZENKANA = "\u3002\u300c\u300d\u3001\u30fb\u30f2\u30a1\u30a3\u30a5"
+            + "\u30a7\u30a9\u30e3\u30e5\u30e7\u30c3\u30fc\u30a2\u30a4"
+            + "\u30a6\u30a8\u30aa\u30ab\u30ad\u30af\u30b1\u30b3\u30b5"
+            + "\u30b7\u30b9\u30bb\u30bd\u30bf\u30c1\u30c4\u30c6\u30c8"
+            + "\u30ca\u30cb\u30cc\u30cd\u30ce\u30cf\u30d2\u30d5\u30d8"
+            + "\u30db\u30de\u30df\u30e0\u30e1\u30e2\u30e4\u30e6\u30e8"
+            + "\u30e9\u30ea\u30eb\u30ec\u30ed\u30ef\u30f3\u309b\u309c";
+
+    // (uff71 - uff9d)
+    protected static final String DEF_DOUBLE_BYTE_VOICED_SOUND_NORMAL_KATAKANA = "\u30a2\u30a4\u30f4\u30a8\u30aa"
+            + "\u30ac\u30ae\u30b0\u30b2\u30b4"
+            + "\u30b6\u30b8\u30ba\u30bc\u30be"
+            + "\u30c0\u30c2\u30c5\u30c7\u30c9"
+            + "\u30ca\u30cb\u30cc\u30cd\u30ce"
+            + "\u30d0\u30d3\u30d6\u30d9\u30dc"
+            + "\u30de\u30df\u30e0\u30e1\u30e2"
+            + "\u30e4\u30e6\u30e8"
+            + "\u30e9\u30ea\u30eb\u30ec\u30ed" + "\u30ef\u30f3";
+
+    // (uff66 - uff6f)
+    protected static final String DEF_DOUBLE_BYTE_VOICED_SOUND_SPECIAL_KATAKANA = "\u30fa\u30a1\u30a3\u30a5\u30a7\u30a9\u30e3\u30e5\u30e7";
+
+    // (u30cf - u30dd)
+    protected static final String DEF_DOUBLE_BYTE_SEMI_VOICED_SOUND_KATAKANA = "\u30d1\u30d4\u30d7\u30da\u30dd";
+
+    public String toDoubleByteKatakana(String target) {
+        if (target == null || target.trim().length() == 0) {
+            return target;
+        }
+
+        final StringBuffer sb = new StringBuffer();
+        for (int i = 0; i < target.length(); i++) {
+            final char currentChar = target.charAt(i);
+            final char nextChar;
+            if (i < target.length() - 1) {
+                nextChar = target.charAt(i + 1);
+            } else {
+                nextChar = ' ';
+            }
+
+            if (isVoicedSoundKatakana(currentChar, nextChar)) {
+                if (currentChar >= 0xff66 && currentChar <= 0xff6f) {// Voiced sound special Katakana
+                    sb.append(DEF_DOUBLE_BYTE_VOICED_SOUND_SPECIAL_KATAKANA
+                            .charAt(currentChar - 0xff66));
+                    i++;
+                } else if (currentChar >= 0xff71 && currentChar <= 0xff9d) {// Voiced sound normal Katakana
+                    sb.append(DEF_DOUBLE_BYTE_VOICED_SOUND_NORMAL_KATAKANA
+                            .charAt(currentChar - 0xff71));
+                    i++;
+                }
+
+            } else if (isSemiVoicedSoundKatakana(currentChar, nextChar)) {
+                sb.append(DEF_DOUBLE_BYTE_SEMI_VOICED_SOUND_KATAKANA
+                        .charAt(currentChar - 0xff8a));
+                i++;
+            } else if (currentChar != 0xff9e && currentChar != 0xff9f) {
+                if (currentChar >= 0xff61 && currentChar <= 0xff9f) {
+                    sb.append(TABLE_ZENKANA.charAt(currentChar - 0xff61));
+                } else {
+                    sb.append(currentChar);
+                }
+            }
+        }
+        return sb.toString();
+    }
+
+    protected boolean isVoicedSoundKatakana(final char currentChar,
+            final char nextChar) {
+        return ((currentChar >= 0xff66 && currentChar <= 0xff6f) || (currentChar >= 0xff71 && (currentChar <= 0xff9d)))
+                && (nextChar == 0xff9e);
+    }
+
+    protected boolean isSemiVoicedSoundKatakana(final char currentChar,
+            final char nextChar) {
+        return (currentChar >= 0xff8a && currentChar <= 0xff8e)
+                && (nextChar == 0xff9f);
+    }
+}


Property changes on: announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/helper/character/impl/JapaneseCharacterImpl.java
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/helper/collection/order/AccordingToOrder.java
===================================================================
--- announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/helper/collection/order/AccordingToOrder.java	                        (rev 0)
+++ announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/helper/collection/order/AccordingToOrder.java	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,20 @@
+package jp.sf.pal.announcement.db.allcommon.helper.collection.order;
+
+import java.util.List;
+
+/**
+ * @author DBFlute(AutoGenerator)
+ */
+public interface AccordingToOrder {
+
+    /**
+     * Order the unordered list.
+     * 
+     * @param option The option of according-to-order. (NotNull)
+     * @param unorderedList The unordered list. (NotNull)
+     * @param <ELEMENT_TYPE> The type of element.
+     * @param <ID_TYPE> The type of ID.
+     */
+    <ELEMENT_TYPE, ID_TYPE> void order(List<ELEMENT_TYPE> unorderedList,
+            AccordingToOrderOption<ELEMENT_TYPE, ID_TYPE> option);
+}


Property changes on: announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/helper/collection/order/AccordingToOrder.java
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/helper/collection/order/AccordingToOrderIdExtractor.java
===================================================================
--- announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/helper/collection/order/AccordingToOrderIdExtractor.java	                        (rev 0)
+++ announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/helper/collection/order/AccordingToOrderIdExtractor.java	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,17 @@
+package jp.sf.pal.announcement.db.allcommon.helper.collection.order;
+
+/**
+ * @author DBFlute(AutoGenerator)
+ * @param <ELEMENT_TYPE> The type of element.
+ * @param <ID_TYPE> The type of ID.
+ */
+public interface AccordingToOrderIdExtractor<ELEMENT_TYPE, ID_TYPE> {
+
+    /**
+     * Extract ID from the element instance.
+     * 
+     * @param element Element instance. (NotNull)
+     * @return Extracted ID. (NotNull)
+     */
+    ID_TYPE extractId(ELEMENT_TYPE element);
+}


Property changes on: announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/helper/collection/order/AccordingToOrderIdExtractor.java
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/helper/collection/order/AccordingToOrderOption.java
===================================================================
--- announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/helper/collection/order/AccordingToOrderOption.java	                        (rev 0)
+++ announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/helper/collection/order/AccordingToOrderOption.java	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,47 @@
+package jp.sf.pal.announcement.db.allcommon.helper.collection.order;
+
+import java.util.List;
+
+/**
+ * @author DBFlute(AutoGenerator)
+ * @param <ELEMENT_TYPE> The type of element.
+ * @param <ID_TYPE> The type of ID.
+ */
+public class AccordingToOrderOption<ELEMENT_TYPE, ID_TYPE> {
+
+    // ===================================================================================
+    //                                                                           Attribute
+    //                                                                           =========
+    protected List<ID_TYPE> _orderedUniqueIdList;
+
+    protected AccordingToOrderIdExtractor<ELEMENT_TYPE, ID_TYPE> _idExtractor;
+
+    // ===================================================================================
+    //                                                                         Easy-to-Use
+    //                                                                         ===========
+    public void setupOrderedResource(List<ID_TYPE> orderedUniqueIdList,
+            AccordingToOrderIdExtractor<ELEMENT_TYPE, ID_TYPE> idExtractor) {
+        setOrderedUniqueIdList(orderedUniqueIdList);
+        setIdExtractor(idExtractor);
+    }
+
+    // ===================================================================================
+    //                                                                            Accessor
+    //                                                                            ========
+    public List<ID_TYPE> getOrderedUniqueIdList() {
+        return _orderedUniqueIdList;
+    }
+
+    public void setOrderedUniqueIdList(List<ID_TYPE> orderedUniqueIdList) {
+        this._orderedUniqueIdList = orderedUniqueIdList;
+    }
+
+    public AccordingToOrderIdExtractor<ELEMENT_TYPE, ID_TYPE> getIdExtractor() {
+        return _idExtractor;
+    }
+
+    public void setIdExtractor(
+            AccordingToOrderIdExtractor<ELEMENT_TYPE, ID_TYPE> idExtractor) {
+        _idExtractor = idExtractor;
+    }
+}


Property changes on: announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/helper/collection/order/AccordingToOrderOption.java
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/helper/collection/order/impl/AccordingToOrderImpl.java
===================================================================
--- announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/helper/collection/order/impl/AccordingToOrderImpl.java	                        (rev 0)
+++ announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/helper/collection/order/impl/AccordingToOrderImpl.java	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,101 @@
+package jp.sf.pal.announcement.db.allcommon.helper.collection.order.impl;
+
+import java.util.Collections;
+import java.util.Comparator;
+import java.util.LinkedHashMap;
+import java.util.List;
+import java.util.Map;
+
+import jp.sf.pal.announcement.db.allcommon.helper.collection.order.AccordingToOrder;
+import jp.sf.pal.announcement.db.allcommon.helper.collection.order.AccordingToOrderIdExtractor;
+import jp.sf.pal.announcement.db.allcommon.helper.collection.order.AccordingToOrderOption;
+
+/**
+ * @author DBFlute(AutoGenerator)
+ */
+public class AccordingToOrderImpl implements AccordingToOrder {
+
+    // ===================================================================================
+    //                                                                                Main
+    //                                                                                ====
+    /**
+     * The implementation.
+     * 
+     * @param unorderedList The unordered list. (NotNull)
+     * @param option The option of according-to-order. (NotNull)
+     * @param <ELEMENT_TYPE> The type of element.
+     * @param <ID_TYPE> The type of ID.
+     */
+    public <ELEMENT_TYPE, ID_TYPE> void order(
+            final List<ELEMENT_TYPE> unorderedList,
+            final AccordingToOrderOption<ELEMENT_TYPE, ID_TYPE> option) {
+        assertObjectNotNull("unorderedList", unorderedList);
+        if (unorderedList.isEmpty()) {
+            return;
+        }
+        assertObjectNotNull("option", option);
+        final List<ID_TYPE> orderedUniqueIdList = option
+                .getOrderedUniqueIdList();
+        assertObjectNotNull("option.getOrderedUniqueIdList()",
+                orderedUniqueIdList);
+        if (orderedUniqueIdList.isEmpty()) {
+            return;
+        }
+        final AccordingToOrderIdExtractor<ELEMENT_TYPE, ID_TYPE> idExtractor = option
+                .getIdExtractor();
+        assertObjectNotNull("option.getIdExtractor()", idExtractor);
+
+        final Map<ID_TYPE, Integer> idIndexMap = new LinkedHashMap<ID_TYPE, Integer>();
+        int index = 0;
+        for (ID_TYPE id : orderedUniqueIdList) {
+            if (idIndexMap.containsKey(id)) {
+                String msg = "The id was duplicated: id=" + id
+                        + " orderedUniqueIdList=" + orderedUniqueIdList;
+                throw new IllegalStateException(msg);
+            }
+            idIndexMap.put(id, index);
+            ++index;
+        }
+        final Comparator<ELEMENT_TYPE> comp = new Comparator<ELEMENT_TYPE>() {
+            public int compare(ELEMENT_TYPE o1, ELEMENT_TYPE o2) {
+                final ID_TYPE id1 = idExtractor.extractId(o1);
+                final ID_TYPE id2 = idExtractor.extractId(o2);
+                assertObjectNotNull("id1 of " + o1, id1);
+                assertObjectNotNull("id2 of " + o2, id2);
+                final Integer index1 = idIndexMap.get(id1);
+                final Integer index2 = idIndexMap.get(id2);
+                if (index1 != null && index2 != null) {
+                    return index1.compareTo(index2);
+                }
+                if (index1 == null && index2 == null) {
+                    return 0;
+                }
+                return index1 == null ? 1 : -1;
+            }
+        };
+        Collections.sort(unorderedList, comp);
+    }
+
+    // ===================================================================================
+    //                                                                       Assert Helper
+    //                                                                       =============
+    /**
+     * Assert that the object is not null.
+     * 
+     * @param variableName Variable name. (NotNull)
+     * @param value Value. (NotNull)
+     * @exception IllegalArgumentException
+     */
+    protected void assertObjectNotNull(String variableName, Object value) {
+        if (variableName == null) {
+            String msg = "The value should not be null: variableName="
+                    + variableName + " value=" + value;
+            throw new IllegalArgumentException(msg);
+        }
+        if (value == null) {
+            String msg = "The value should not be null: variableName="
+                    + variableName;
+            throw new IllegalArgumentException(msg);
+        }
+    }
+}


Property changes on: announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/helper/collection/order/impl/AccordingToOrderImpl.java
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/helper/token/file/FileMakingCallback.java
===================================================================
--- announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/helper/token/file/FileMakingCallback.java	                        (rev 0)
+++ announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/helper/token/file/FileMakingCallback.java	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,17 @@
+package jp.sf.pal.announcement.db.allcommon.helper.token.file;
+
+/**
+ * @author DBFlute(AutoGenerator)
+ */
+public interface FileMakingCallback {
+
+    /**
+     * Get file-making header information.
+     * <pre>
+     * You should return your row resource for file-making.
+     * It continues invoking until this method returns null.
+     * </pre>
+     * @return File-making header information. (Nullable)
+     */
+    public FileMakingRowResource getRowResource();
+}


Property changes on: announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/helper/token/file/FileMakingCallback.java
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/helper/token/file/FileMakingHeaderInfo.java
===================================================================
--- announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/helper/token/file/FileMakingHeaderInfo.java	                        (rev 0)
+++ announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/helper/token/file/FileMakingHeaderInfo.java	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,23 @@
+package jp.sf.pal.announcement.db.allcommon.helper.token.file;
+
+import java.util.List;
+
+/**
+ * @author DBFlute(AutoGenerator)
+ */
+public class FileMakingHeaderInfo {
+
+    protected List<String> columnNameList = new java.util.ArrayList<String>();
+
+    public List<String> getColumnNameList() {
+        return columnNameList;
+    }
+
+    public void setColumnNameList(List<String> columnNameList) {
+        this.columnNameList = columnNameList;
+    }
+
+    public boolean isEmpty() {
+        return this.columnNameList.isEmpty();
+    }
+}


Property changes on: announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/helper/token/file/FileMakingHeaderInfo.java
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/helper/token/file/FileMakingOption.java
===================================================================
--- announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/helper/token/file/FileMakingOption.java	                        (rev 0)
+++ announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/helper/token/file/FileMakingOption.java	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,104 @@
+package jp.sf.pal.announcement.db.allcommon.helper.token.file;
+
+/**
+ * @author DBFlute(AutoGenerator)
+ */
+public class FileMakingOption {
+
+    // =====================================================================================
+    //                                                                             Attribute
+    //                                                                             =========
+    /** Encoding. (Required) */
+    protected String _encoding;
+
+    /** Delimiter. (Required) */
+    protected String _delimiter;
+
+    /** Line separator. (NotRequired) */
+    protected String _lineSeparator;
+
+    /** Good bye double quotation. (NotRequired) */
+    protected boolean _goodByeDoubleQuotation;
+
+    /** File-making header information. (NotRequired) */
+    protected FileMakingHeaderInfo _fileMakingHeaderInfo;
+
+    // =====================================================================================
+    //                                                                           Easy-to-Use
+    //                                                                           ===========
+    public FileMakingOption delimitateByComma() {
+        _delimiter = ",";
+        return this;
+    }
+
+    public FileMakingOption delimitateByTab() {
+        _delimiter = "\t";
+        return this;
+    }
+
+    public FileMakingOption encodeAsUTF8() {
+        _encoding = "UTF-8";
+        return this;
+    }
+
+    public FileMakingOption encodeAsWindows31J() {
+        _encoding = "Windows-31J";
+        return this;
+    }
+
+    public FileMakingOption separateCrLf() {
+        _lineSeparator = "\r\n";
+        return this;
+    }
+
+    public FileMakingOption separateLf() {
+        _lineSeparator = "\n";
+        return this;
+    }
+
+    public FileMakingOption goodByeDoubleQuotation() {
+        _goodByeDoubleQuotation = true;
+        return this;
+    }
+
+    // =====================================================================================
+    //                                                                              Accessor
+    //                                                                              ========
+    public String getEncoding() {
+        return _encoding;
+    }
+
+    public void setEncoding(String encoding) {
+        _encoding = encoding;
+    }
+
+    public String getDelimiter() {
+        return _delimiter;
+    }
+
+    public void setDelimiter(String delimiter) {
+        _delimiter = delimiter;
+    }
+
+    public String getLineSeparator() {
+        return _lineSeparator;
+    }
+
+    public void setLineSeparator(String lineSeparator) {
+        _lineSeparator = lineSeparator;
+    }
+
+    public boolean isGoodByeDoubleQuotation() {
+        return _goodByeDoubleQuotation;
+    }
+
+    public FileMakingHeaderInfo getFileMakingHeaderInfo() {
+        return _fileMakingHeaderInfo;
+    }
+
+    public void setFileMakingHeaderInfo(
+            FileMakingHeaderInfo fileMakingHeaderInfo) {
+        _fileMakingHeaderInfo = fileMakingHeaderInfo;
+    }
+
+}
\ No newline at end of file


Property changes on: announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/helper/token/file/FileMakingOption.java
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/helper/token/file/FileMakingRowResource.java
===================================================================
--- announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/helper/token/file/FileMakingRowResource.java	                        (rev 0)
+++ announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/helper/token/file/FileMakingRowResource.java	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,45 @@
+package jp.sf.pal.announcement.db.allcommon.helper.token.file;
+
+/**
+ * @author DBFlute(AutoGenerator)
+ */
+public class FileMakingRowResource {
+
+    // =====================================================================================
+    //                                                                             Attribute
+    //                                                                             =========
+    protected java.util.List<String> _valueList;
+
+    protected java.util.LinkedHashMap<String, String> _nameValueMap;
+
+    // =====================================================================================
+    //                                                                              Accessor
+    //                                                                              ========
+    public java.util.List<String> getValueList() {
+        return _valueList;
+    }
+
+    /**
+     * Set the list of value. {Priority One}
+     * 
+     * @param valueList The list of value. (NotNull and NotEmpty)
+     */
+    public void setValueList(java.util.List<String> valueList) {
+        this._valueList = valueList;
+    }
+
+    public java.util.LinkedHashMap<String, String> getNameValueMap() {
+        return _nameValueMap;
+    }
+
+    /**
+     * Set the map of name and value. {Priority Two} <br />
+     * If valueList is set, This nameValueMap is ignored.
+     * 
+     * @param nameValueMap The map of name and value. (NotNull and NotEmpty)
+     */
+    public void setNameValueMap(
+            java.util.LinkedHashMap<String, String> nameValueMap) {
+        this._nameValueMap = nameValueMap;
+    }
+}


Property changes on: announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/helper/token/file/FileMakingRowResource.java
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/helper/token/file/FileMakingSimpleFacade.java
===================================================================
--- announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/helper/token/file/FileMakingSimpleFacade.java	                        (rev 0)
+++ announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/helper/token/file/FileMakingSimpleFacade.java	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,35 @@
+package jp.sf.pal.announcement.db.allcommon.helper.token.file;
+
+/**
+ * @author DBFlute(AutoGenerator)
+ */
+public interface FileMakingSimpleFacade {
+
+    /**
+     * Make token-file from row-list.
+     * 
+     * @param filename Output target file name. (NotNull)
+     * @param rowList Row-list composed of value-list. (NotNull)
+     * @param fileMakingOption File-making option. (NotNull and Required{encoding and delimiter})
+     * @throws java.io.FileNotFoundException
+     * @throws java.io.IOException
+     */
+    public void makeFromRowList(final String filename,
+            final java.util.List<java.util.List<String>> rowList,
+            final FileMakingOption fileMakingOption)
+            throws java.io.FileNotFoundException, java.io.IOException;
+
+    /**
+     * Make bytes from row-list.
+     * 
+     * @param rowList Row-list composed of value-list. (NotNull)
+     * @param fileMakingOption File-making option. (NotNull and Required{encoding and delimiter})
+     * @return Result byte array. (NotNull)
+     * @throws java.io.FileNotFoundException
+     * @throws java.io.IOException
+     */
+    public byte[] makeFromRowList(
+            final java.util.List<java.util.List<String>> rowList,
+            final FileMakingOption fileMakingOption)
+            throws java.io.FileNotFoundException, java.io.IOException;
+}


Property changes on: announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/helper/token/file/FileMakingSimpleFacade.java
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/helper/token/file/FileToken.java
===================================================================
--- announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/helper/token/file/FileToken.java	                        (rev 0)
+++ announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/helper/token/file/FileToken.java	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,70 @@
+package jp.sf.pal.announcement.db.allcommon.helper.token.file;
+
+/**
+ * File-Token.
+ * 
+ * @author DBFlute(AutoGenerator)
+ */
+public interface FileToken {
+
+    /**
+     * Tokenize token-file data of a specified file.
+     * 
+     * @param filename Input target file name. (NotNull)
+     * @param fileTokenizingCallback File-tokenizing callback. (NotNull)
+     * @param fileTokenizingOption File-tokenizing option. (NotNull and Required{encoding and delimiter})
+     * @throws java.io.FileNotFoundException
+     * @throws java.io.IOException
+     */
+    public void tokenize(String filename,
+            FileTokenizingCallback fileTokenizingCallback,
+            FileTokenizingOption fileTokenizingOption)
+            throws java.io.FileNotFoundException, java.io.IOException;
+
+    /**
+     * Tokenize token-file data of a specified file.
+     * <pre>
+     * This method uses java.io.InputStreamReader and java.io.BufferedReader that wrap the argument[inputStream].
+     * These objects are closed. (Invoking close() at finally)
+     * </pre>
+     * @param inputStream Input target stream. (NotNull)
+     * @param fileTokenizingCallback File-tokenizing callback. (NotNull)
+     * @param fileTokenizingOption File-tokenizing option. (NotNull and Required{encoding and delimiter})
+     * @throws java.io.FileNotFoundException
+     * @throws java.io.IOException
+     */
+    public void tokenize(java.io.InputStream inputStream,
+            FileTokenizingCallback fileTokenizingCallback,
+            FileTokenizingOption fileTokenizingOption)
+            throws java.io.FileNotFoundException, java.io.IOException;
+
+    /**
+     * Make token-file from specified row resources.
+     * 
+     * @param filename Output target file name. (NotNull)
+     * @param fileMakingCallback File-making callback. (NotNull)
+     * @param fileMakingOption File-making option. (NotNull and Required{encoding and delimiter})
+     * @throws java.io.FileNotFoundException
+     * @throws java.io.IOException
+     */
+    public void make(String filename, FileMakingCallback fileMakingCallback,
+            FileMakingOption fileMakingOption)
+            throws java.io.FileNotFoundException, java.io.IOException;
+
+    /**
+     * Make token-file from specified row resources.
+     * <pre>
+     * This method uses java.io.BufferedOutputStream and java.io.OutputStreamWriter that wrap the argument[outputStream].
+     * These objects are closed. (Invoking close() at finally)
+     * </pre>
+     * @param outputStream Output target stream. (NotNull)
+     * @param fileMakingCallback File-making callback. (NotNull)
+     * @param fileMakingOption File-making option. (NotNull and Required{encoding and delimiter})
+     * @throws java.io.FileNotFoundException
+     * @throws java.io.IOException
+     */
+    public void make(java.io.OutputStream outputStream,
+            FileMakingCallback fileMakingCallback,
+            FileMakingOption fileMakingOption)
+            throws java.io.FileNotFoundException, java.io.IOException;
+}
\ No newline at end of file


Property changes on: announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/helper/token/file/FileToken.java
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/helper/token/file/FileTokenizingCallback.java
===================================================================
--- announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/helper/token/file/FileTokenizingCallback.java	                        (rev 0)
+++ announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/helper/token/file/FileTokenizingCallback.java	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,9 @@
+package jp.sf.pal.announcement.db.allcommon.helper.token.file;
+
+/**
+ * @author DBFlute(AutoGenerator)
+ */
+public interface FileTokenizingCallback {
+    public void handleRowResource(
+            FileTokenizingRowResource fileTokenizingRowResource);
+}


Property changes on: announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/helper/token/file/FileTokenizingCallback.java
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/helper/token/file/FileTokenizingHeaderInfo.java
===================================================================
--- announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/helper/token/file/FileTokenizingHeaderInfo.java	                        (rev 0)
+++ announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/helper/token/file/FileTokenizingHeaderInfo.java	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,42 @@
+package jp.sf.pal.announcement.db.allcommon.helper.token.file;
+
+import java.util.List;
+
+/**
+ * @author DBFlute(AutoGenerator)
+ */
+public class FileTokenizingHeaderInfo {
+
+    // =====================================================================================
+    //                                                                             Attribute
+    //                                                                             =========
+    protected List<String> _columnNameList = new java.util.ArrayList<String>();
+
+    // =====================================================================================
+    //                                                                           Easy-to-Use
+    //                                                                           ===========
+    protected String _columnNameRowString;
+
+    public boolean isEmpty() {
+        return this._columnNameList.isEmpty();
+    }
+
+    // =====================================================================================
+    //                                                                              Accessor
+    //                                                                              ========
+    public List<String> getColumnNameList() {
+        return _columnNameList;
+    }
+
+    public void setColumnNameList(List<String> columnNameList) {
+        this._columnNameList = columnNameList;
+    }
+
+    public String getColumnNameRowString() {
+        return _columnNameRowString;
+    }
+
+    public void setColumnNameRowString(String columnNameRowString) {
+        _columnNameRowString = columnNameRowString;
+    }
+}


Property changes on: announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/helper/token/file/FileTokenizingHeaderInfo.java
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/helper/token/file/FileTokenizingOption.java
===================================================================
--- announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/helper/token/file/FileTokenizingOption.java	                        (rev 0)
+++ announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/helper/token/file/FileTokenizingOption.java	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,78 @@
+package jp.sf.pal.announcement.db.allcommon.helper.token.file;
+
+/**
+ * @author DBFlute(AutoGenerator)
+ */
+public class FileTokenizingOption {
+
+    // =====================================================================================
+    //                                                                             Attribute
+    //                                                                             =========
+    protected String _encoding;
+
+    protected String _delimiter;
+
+    protected boolean _beginFirstLine;
+
+    protected boolean _handleEmptyAsNull;
+
+    // =====================================================================================
+    //                                                                           Easy-to-Use
+    //                                                                           ===========
+    public FileTokenizingOption delimitateByComma() {
+        _delimiter = ",";
+        return this;
+    }
+
+    public FileTokenizingOption delimitateByTab() {
+        _delimiter = "\t";
+        return this;
+    }
+
+    public FileTokenizingOption encodeAsUTF8() {
+        _encoding = "UTF-8";
+        return this;
+    }
+
+    public FileTokenizingOption encodeAsWindows31J() {
+        _encoding = "Windows-31J";
+        return this;
+    }
+
+    public FileTokenizingOption beginFirstLine() {
+        _beginFirstLine = true;
+        return this;
+    }
+
+    public FileTokenizingOption handleEmptyAsNull() {
+        _handleEmptyAsNull = true;
+        return this;
+    }
+
+    // =====================================================================================
+    //                                                                              Accessor
+    //                                                                              ========
+    public String getDelimiter() {
+        return _delimiter;
+    }
+
+    public void setDelimiter(String delimiter) {
+        _delimiter = delimiter;
+    }
+
+    public String getEncoding() {
+        return _encoding;
+    }
+
+    public void setEncoding(String encoding) {
+        _encoding = encoding;
+    }
+
+    public boolean isBeginFirstLine() {
+        return _beginFirstLine;
+    }
+
+    public boolean isHandleEmptyAsNull() {
+        return _handleEmptyAsNull;
+    }
+}
\ No newline at end of file


Property changes on: announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/helper/token/file/FileTokenizingOption.java
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/helper/token/file/FileTokenizingRowResource.java
===================================================================
--- announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/helper/token/file/FileTokenizingRowResource.java	                        (rev 0)
+++ announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/helper/token/file/FileTokenizingRowResource.java	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,66 @@
+package jp.sf.pal.announcement.db.allcommon.helper.token.file;
+
+/**
+ * @author DBFlute(AutoGenerator)
+ */
+public class FileTokenizingRowResource {
+
+    // =====================================================================================
+    //                                                                             Attribute
+    //                                                                             =========
+    protected FileTokenizingHeaderInfo fileTokenizingHeaderInfo;
+
+    protected java.util.List<String> valueList;
+
+    protected String rowString;
+
+    /** The row number. */
+    protected int _rowNumber;
+
+    /** The line number. */
+    protected int _lineNumber;
+
+    // =====================================================================================
+    //                                                                              Accessor
+    //                                                                              ========
+    public FileTokenizingHeaderInfo getFileTokenizingHeaderInfo() {
+        return fileTokenizingHeaderInfo;
+    }
+
+    public void setFirstLineInfo(
+            FileTokenizingHeaderInfo fileTokenizingHeaderInfo) {
+        this.fileTokenizingHeaderInfo = fileTokenizingHeaderInfo;
+    }
+
+    public java.util.List<String> getValueList() {
+        return valueList;
+    }
+
+    public void setValueList(java.util.List<String> valueList) {
+        this.valueList = valueList;
+    }
+
+    public String getRowString() {
+        return rowString;
+    }
+
+    public void setRowString(String rowString) {
+        this.rowString = rowString;
+    }
+
+    public int getRowNumber() {
+        return _rowNumber;
+    }
+
+    public void setRowNumber(int rowNumber) {
+        _rowNumber = rowNumber;
+    }
+
+    public int getLineNumber() {
+        return _lineNumber;
+    }
+
+    public void setLineNumber(int lineNumber) {
+        _lineNumber = lineNumber;
+    }
+}


Property changes on: announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/helper/token/file/FileTokenizingRowResource.java
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/helper/token/file/impl/FileMakingSimpleFacadeImpl.java
===================================================================
--- announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/helper/token/file/impl/FileMakingSimpleFacadeImpl.java	                        (rev 0)
+++ announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/helper/token/file/impl/FileMakingSimpleFacadeImpl.java	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,83 @@
+package jp.sf.pal.announcement.db.allcommon.helper.token.file.impl;
+
+import jp.sf.pal.announcement.db.allcommon.helper.token.file.FileMakingCallback;
+import jp.sf.pal.announcement.db.allcommon.helper.token.file.FileMakingOption;
+import jp.sf.pal.announcement.db.allcommon.helper.token.file.FileMakingRowResource;
+import jp.sf.pal.announcement.db.allcommon.helper.token.file.FileMakingSimpleFacade;
+import jp.sf.pal.announcement.db.allcommon.helper.token.file.FileToken;
+
+/**
+ * @author DBFlute(AutoGenerator)
+ */
+public class FileMakingSimpleFacadeImpl implements FileMakingSimpleFacade {
+
+    protected FileToken _fileToken = new FileTokenImpl();
+
+    public void setFileToken(FileToken fileToken) {
+        this._fileToken = fileToken;
+    }
+
+    /**
+     * Make token-file from row-list.
+     * 
+     * @param filename Output target file name. (NotNull)
+     * @param rowList Row-list composed of value-list. (NotNull)
+     * @param fileMakingOption File-making option. (NotNull and Required{encoding and delimiter})
+     * @throws java.io.FileNotFoundException
+     * @throws java.io.IOException
+     */
+    public void makeFromRowList(final String filename,
+            final java.util.List<java.util.List<String>> rowList,
+            final FileMakingOption fileMakingOption)
+            throws java.io.FileNotFoundException, java.io.IOException {
+        final FileMakingCallback fileMakingCallback = new FileMakingCallback() {
+            protected int rowCount = 0;
+
+            public FileMakingRowResource getRowResource() {
+                ++rowCount;
+                if (rowList.size() < rowCount) {
+                    return null;// The End!
+                }
+                final java.util.List<String> valueList = (java.util.List<String>) rowList
+                        .get(rowCount - 1);
+                final FileMakingRowResource fileMakingRowResource = new FileMakingRowResource();
+                fileMakingRowResource.setValueList(valueList);
+                return fileMakingRowResource;
+            }
+        };
+        _fileToken.make(filename, fileMakingCallback, fileMakingOption);
+    }
+
+    /**
+     * Make bytes from row-list.
+     * 
+     * @param rowList Row-list composed of value-list. (NotNull)
+     * @param fileMakingOption File-making option. (NotNull and Required{encoding and delimiter})
+     * @return Result byte array. (NotNull)
+     * @throws java.io.FileNotFoundException
+     * @throws java.io.IOException
+     */
+    public byte[] makeFromRowList(
+            final java.util.List<java.util.List<String>> rowList,
+            final FileMakingOption fileMakingOption)
+            throws java.io.FileNotFoundException, java.io.IOException {
+        final FileMakingCallback fileMakingCallback = new FileMakingCallback() {
+            protected int rowCount = 0;
+
+            public FileMakingRowResource getRowResource() {
+                ++rowCount;
+                if (rowList.size() < rowCount) {
+                    return null;// The End!
+                }
+                final java.util.List<String> valueList = (java.util.List<String>) rowList
+                        .get(rowCount - 1);
+                final FileMakingRowResource fileMakingRowResource = new FileMakingRowResource();
+                fileMakingRowResource.setValueList(valueList);
+                return fileMakingRowResource;
+            }
+        };
+        final java.io.ByteArrayOutputStream baos = new java.io.ByteArrayOutputStream();
+        _fileToken.make(baos, fileMakingCallback, fileMakingOption);
+        return baos.toByteArray();
+    }
+}


Property changes on: announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/helper/token/file/impl/FileMakingSimpleFacadeImpl.java
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/helper/token/file/impl/FileTokenImpl.java
===================================================================
--- announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/helper/token/file/impl/FileTokenImpl.java	                        (rev 0)
+++ announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/helper/token/file/impl/FileTokenImpl.java	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,554 @@
+package jp.sf.pal.announcement.db.allcommon.helper.token.file.impl;
+
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+
+import jp.sf.pal.announcement.db.allcommon.helper.token.file.FileMakingCallback;
+import jp.sf.pal.announcement.db.allcommon.helper.token.file.FileMakingHeaderInfo;
+import jp.sf.pal.announcement.db.allcommon.helper.token.file.FileMakingOption;
+import jp.sf.pal.announcement.db.allcommon.helper.token.file.FileMakingRowResource;
+import jp.sf.pal.announcement.db.allcommon.helper.token.file.FileToken;
+import jp.sf.pal.announcement.db.allcommon.helper.token.file.FileTokenizingCallback;
+import jp.sf.pal.announcement.db.allcommon.helper.token.file.FileTokenizingHeaderInfo;
+import jp.sf.pal.announcement.db.allcommon.helper.token.file.FileTokenizingOption;
+import jp.sf.pal.announcement.db.allcommon.helper.token.file.FileTokenizingRowResource;
+import jp.sf.pal.announcement.db.allcommon.helper.token.line.LineMakingOption;
+import jp.sf.pal.announcement.db.allcommon.helper.token.line.LineToken;
+import jp.sf.pal.announcement.db.allcommon.helper.token.line.LineTokenizingOption;
+import jp.sf.pal.announcement.db.allcommon.helper.token.line.impl.LineTokenImpl;
+
+/**
+ * @author DBFlute(AutoGenerator)
+ */
+public class FileTokenImpl implements FileToken {
+
+    // =====================================================================================
+    //                                                                             Attribute
+    //                                                                             =========
+    /** Line-token for help. */
+    protected final LineToken _lineToken = new LineTokenImpl();
+
+    // =====================================================================================
+    //                                                                                  Main
+    //                                                                                  ====
+    /**
+     * Tokenize token-file data of a specified file.
+     * 
+     * @param filename File name. (NotNull)
+     * @param fileTokenizingCallback File-tokenizing callback. (NotNull)
+     * @param fileTokenizingOption File-tokenizing option. (NotNull and Required{encoding and delimiter})
+     * @throws java.io.FileNotFoundException
+     * @throws java.io.IOException
+     */
+    public void tokenize(String filename,
+            FileTokenizingCallback fileTokenizingCallback,
+            FileTokenizingOption fileTokenizingOption)
+            throws java.io.FileNotFoundException, java.io.IOException {
+        assertStringNotNullAndNotTrimmedEmpty("filename", filename);
+
+        java.io.FileInputStream fis = null;
+        try {
+            fis = new java.io.FileInputStream(filename);
+            tokenize(fis, fileTokenizingCallback, fileTokenizingOption);
+        } catch (java.io.FileNotFoundException e) {
+            throw e;
+        } catch (java.io.IOException e) {
+            throw e;
+        } finally {
+            try {
+                if (fis != null) {
+                    fis.close();
+                }
+            } catch (java.io.IOException ignored) {
+            }
+        }
+    }
+
+    /**
+     * Tokenize token-file data of a specified file.
+     * <pre>
+     * This method uses java.io.InputStreamReader and java.io.BufferedReader that wrap the argument[inputStream].
+     * These objects are closed. (Invoking close() at finally)
+     * </pre>
+     * @param inputStream Input target stream. (NotNull)
+     * @param fileTokenizingCallback File-tokenizing callback. (NotNull)
+     * @param fileTokenizingOption File-tokenizing option. (NotNull and Required{encoding and delimiter})
+     * @throws java.io.FileNotFoundException
+     * @throws java.io.IOException
+     */
+    public void tokenize(java.io.InputStream inputStream,
+            FileTokenizingCallback fileTokenizingCallback,
+            FileTokenizingOption fileTokenizingOption)
+            throws java.io.FileNotFoundException, java.io.IOException {
+        assertObjectNotNull("inputStream", inputStream);
+        assertObjectNotNull("fileTokenizingCallback", fileTokenizingCallback);
+        assertObjectNotNull("fileTokenizingOption", fileTokenizingOption);
+        final String delimiter = fileTokenizingOption.getDelimiter();
+        final String encoding = fileTokenizingOption.getEncoding();
+        assertStringNotNullAndNotTrimmedEmpty("encoding", encoding);
+        assertObjectNotNull("delimiter", delimiter);
+
+        java.io.InputStreamReader ir = null;
+        java.io.BufferedReader br = null;
+
+        String lineString = null;
+        String preContinueString = "";
+        final List<String> temporaryValueList = new ArrayList<String>();
+        final List<String> filteredValueList = new ArrayList<String>();
+
+        try {
+            ir = new java.io.InputStreamReader(inputStream, encoding);
+            br = new java.io.BufferedReader(ir);
+
+            FileTokenizingHeaderInfo fileTokenizingHeaderInfo = null;
+            int count = -1;
+            int rowNumber = 1;
+            int lineNumber = 0;
+            while (true) {
+                ++count;
+                if ("".equals(preContinueString)) {
+                    lineNumber = count + 1;
+                }
+
+                lineString = br.readLine();
+                if (lineString == null) {
+                    break;
+                }
+                if (count == 0) {
+                    if (fileTokenizingOption.isBeginFirstLine()) {
+                        fileTokenizingHeaderInfo = new FileTokenizingHeaderInfo();// As empty
+                    } else {
+                        fileTokenizingHeaderInfo = analyzeHeaderInfo(delimiter,
+                                lineString);
+                        continue;
+                    }
+                }
+                final String rowString;
+                if (preContinueString.equals("")) {
+                    rowString = lineString;
+                } else {
+                    final String lineSeparator = System
+                            .getProperty("line.separator");
+                    rowString = preContinueString + lineSeparator + lineString;
+                }
+                final ValueLineInfo valueLineInfo = arrangeValueList(rowString,
+                        delimiter);
+                final List<String> ls = valueLineInfo.getValueList();
+                if (valueLineInfo.isContinueNextLine()) {
+                    preContinueString = (String) ls.remove(ls.size() - 1);
+                    temporaryValueList.addAll(ls);
+                    continue;
+                }
+                temporaryValueList.addAll(ls);
+
+                try {
+                    final FileTokenizingRowResource fileTokenizingRowResource = new FileTokenizingRowResource();
+                    fileTokenizingRowResource
+                            .setFirstLineInfo(fileTokenizingHeaderInfo);
+
+                    if (fileTokenizingOption.isHandleEmptyAsNull()) {
+                        for (final Iterator<String> ite = temporaryValueList
+                                .iterator(); ite.hasNext();) {
+                            final String value = (String) ite.next();
+                            if ("".equals(value)) {
+                                filteredValueList.add(null);
+                            } else {
+                                filteredValueList.add(value);
+                            }
+                        }
+                        fileTokenizingRowResource
+                                .setValueList(filteredValueList);
+                    } else {
+                        fileTokenizingRowResource
+                                .setValueList(temporaryValueList);
+                    }
+
+                    fileTokenizingRowResource.setRowString(rowString);
+                    fileTokenizingRowResource.setRowNumber(rowNumber);
+                    fileTokenizingRowResource.setLineNumber(lineNumber);
+                    fileTokenizingCallback
+                            .handleRowResource(fileTokenizingRowResource);
+                } finally {
+                    ++rowNumber;
+                    temporaryValueList.clear();
+                    filteredValueList.clear();
+                    preContinueString = "";
+                }
+            }
+        } catch (java.io.FileNotFoundException e) {
+            throw e;
+        } catch (java.io.IOException e) {
+            throw e;
+        } finally {
+            try {
+                if (ir != null) {
+                    ir.close();
+                }
+                if (br != null) {
+                    br.close();
+                }
+            } catch (java.io.IOException ignored) {
+            }
+        }
+    }
+
+    protected ValueLineInfo arrangeValueList(final String lineString,
+            String delimiter) {
+        final List<String> valueList = new ArrayList<String>();
+
+        // Don't use split!
+        //        final String[] values = lineString.split(delimiter);
+        final LineTokenizingOption tokenizingOption = new LineTokenizingOption();
+        tokenizingOption.setDelimiter(delimiter);
+        final List<String> list = _lineToken.tokenize(lineString,
+                tokenizingOption);
+        final String[] values = (String[]) list
+                .toArray(new String[list.size()]);
+        for (int i = 0; i < values.length; i++) {
+            valueList.add(values[i]);
+        }
+        return arrangeValueList(valueList, delimiter);
+    }
+
+    protected ValueLineInfo arrangeValueList(List<String> valueList,
+            String delimiter) {
+        final ValueLineInfo valueLineInfo = new ValueLineInfo();
+        final ArrayList<String> resultList = new ArrayList<String>();
+        String preString = "";
+        for (int i = 0; i < valueList.size(); i++) {
+            final String value = (String) valueList.get(i);
+            if (value == null) {
+                continue;
+            }
+            if (i == valueList.size() - 1) {// The last loop
+                if (preString.equals("")) {
+                    if (isFrontQOnly(value)) {
+                        valueLineInfo.setContinueNextLine(true);
+                        resultList.add(value);
+                        break;
+                    } else if (isRearQOnly(value)) {
+                        resultList.add(value);
+                        break;
+                    } else if (isNotBothQ(value)) {
+                        resultList.add(value);
+                        break;
+                    } else {
+                        resultList.add(removeDoubleQuotation(value));
+                        break;
+                    }
+                } else {
+                    if (isFrontQOnly(value)) {
+                        valueLineInfo.setContinueNextLine(true);
+                        resultList.add(connectPreString(preString, delimiter,
+                                value));
+                        break;
+                    } else if (isRearQOnly(value)) {
+                        resultList.add(removeDoubleQuotation(connectPreString(
+                                preString, delimiter, value)));
+                        break;
+                    } else if (isNotBothQ(value)) {
+                        valueLineInfo.setContinueNextLine(true);
+                        resultList.add(connectPreString(preString, delimiter,
+                                value));
+                        break;
+                    } else {
+                        resultList.add(removeDoubleQuotation(connectPreString(
+                                preString, delimiter, value)));
+                        break;
+                    }
+                }
+            }
+
+            if (preString.equals("")) {
+                if (isFrontQOnly(value)) {
+                    preString = value;
+                    continue;
+                } else if (isRearQOnly(value)) {
+                    preString = value;
+                    continue;
+                } else if (isNotBothQ(value)) {
+                    resultList.add(value);
+                } else {
+                    resultList.add(removeDoubleQuotation(value));
+                }
+            } else {
+                if (isFrontQOnly(value)) {
+                    preString = connectPreString(preString, delimiter, value);
+                    continue;
+                } else if (isRearQOnly(value)) {
+                    resultList.add(removeDoubleQuotation(connectPreString(
+                            preString, delimiter, value)));
+                } else if (isNotBothQ(value)) {
+                    preString = connectPreString(preString, delimiter, value);
+                    continue;
+                } else {
+                    resultList.add(removeDoubleQuotation(connectPreString(
+                            preString, delimiter, value)));
+                }
+            }
+            preString = "";
+        }
+        valueLineInfo.setValueList(resultList);
+        return valueLineInfo;
+    }
+
+    protected String connectPreString(String preString, String delimiter,
+            String value) {
+        if (preString.equals("")) {
+            return value;
+        } else {
+            return preString + delimiter + value;
+        }
+    }
+
+    protected boolean isNotBothQ(final String value) {
+        return !value.startsWith("\"") && !value.endsWith("\"");
+    }
+
+    protected boolean isRearQOnly(final String value) {
+        return !value.startsWith("\"") && value.endsWith("\"");
+    }
+
+    protected boolean isFrontQOnly(final String value) {
+        return value.startsWith("\"") && !value.endsWith("\"");
+    }
+
+    protected String removeDoubleQuotation(String value) {
+        if (!value.startsWith("\"") && !value.endsWith("\"")) {
+            return value;
+        }
+        if (value.startsWith("\"")) {
+            value = value.substring(1);
+        }
+        if (value.endsWith("\"")) {
+            value = value.substring(0, value.length() - 1);
+        }
+        return value;
+    }
+
+    protected String removeRightDoubleQuotation(String value) {
+        if (value.endsWith("\"")) {
+            value = value.substring(0, value.length() - 1);
+        }
+        return value;
+    }
+
+    protected FileTokenizingHeaderInfo analyzeHeaderInfo(String delimiter,
+            final String lineString) {
+        final java.util.List<String> columnNameList = new ArrayList<String>();
+        final String[] values = lineString.split(delimiter);
+        for (int i = 0; i < values.length; i++) {
+            final String value = values[i].trim();// Trimming is Header Only!;
+            if (value.startsWith("\"") && value.endsWith("\"")) {
+                columnNameList.add(value.substring(1, value.length() - 1));
+            } else {
+                columnNameList.add(value);
+            }
+        }
+        final FileTokenizingHeaderInfo fileTokenizingHeaderInfo = new FileTokenizingHeaderInfo();
+        fileTokenizingHeaderInfo.setColumnNameList(columnNameList);
+        fileTokenizingHeaderInfo.setColumnNameRowString(lineString);
+        return fileTokenizingHeaderInfo;
+    }
+
+    public static class ValueLineInfo {
+        protected java.util.List<String> valueList;
+
+        protected boolean continueNextLine;
+
+        public java.util.List<String> getValueList() {
+            return valueList;
+        }
+
+        public void setValueList(List<String> valueList) {
+            this.valueList = valueList;
+        }
+
+        public boolean isContinueNextLine() {
+            return continueNextLine;
+        }
+
+        public void setContinueNextLine(boolean continueNextLine) {
+            this.continueNextLine = continueNextLine;
+        }
+    }
+
+    /**
+     * Make token-file from specified row resources.
+     * 
+     * @param filename File name. (NotNull)
+     * @param fileMakingCallback File-making callback. (NotNull)
+     * @param fileMakingOption File-making option. (NotNull and Required{encoding and delimiter})
+     * @throws java.io.FileNotFoundException
+     * @throws java.io.IOException
+     */
+    public void make(String filename, FileMakingCallback fileMakingCallback,
+            FileMakingOption fileMakingOption)
+            throws java.io.FileNotFoundException, java.io.IOException {
+        assertStringNotNullAndNotTrimmedEmpty("filename", filename);
+
+        java.io.FileOutputStream fos = null;
+        try {
+            fos = new java.io.FileOutputStream(filename);
+            make(fos, fileMakingCallback, fileMakingOption);
+        } catch (java.io.FileNotFoundException e) {
+            throw e;
+        } catch (java.io.IOException e) {
+            throw e;
+        } finally {
+            if (fos != null) {
+                fos.close();
+            }
+        }
+    }
+
+    /**
+     * Make token-file from specified row resources.
+     * <pre>
+     * This method uses java.io.BufferedOutputStream and java.io.OutputStreamWriter that wrap the argument[outputStream].
+     * These objects are closed. (Invoking close() at finally)
+     * </pre>
+     * @param outputStream Output target stream. (NotNull)
+     * @param fileMakingCallback File-making callback. (NotNull)
+     * @param fileMakingOption File-making option. (NotNull and Required{encoding and delimiter})
+     * @throws java.io.FileNotFoundException
+     * @throws java.io.IOException
+     */
+    public void make(java.io.OutputStream outputStream,
+            FileMakingCallback fileMakingCallback,
+            FileMakingOption fileMakingOption)
+            throws java.io.FileNotFoundException, java.io.IOException {
+        assertObjectNotNull("outputStream", outputStream);
+        assertObjectNotNull("fileMakingCallback", fileMakingCallback);
+        assertObjectNotNull("fileMakingOption", fileMakingOption);
+        final String encoding = fileMakingOption.getEncoding();
+        final String delimiter = fileMakingOption.getDelimiter();
+        assertStringNotNullAndNotTrimmedEmpty("encoding", encoding);
+        assertObjectNotNull("delimiter", delimiter);
+        final String lineSeparator;
+        if (fileMakingOption.getLineSeparator() != null
+                && !fileMakingOption.getLineSeparator().equals("")) {
+            lineSeparator = fileMakingOption.getLineSeparator();
+        } else {
+            lineSeparator = System.getProperty("line.separator");// Default!
+        }
+
+        java.io.BufferedOutputStream bos = null;
+        java.io.Writer writer = null;
+        try {
+            bos = new java.io.BufferedOutputStream(outputStream);
+            writer = new java.io.OutputStreamWriter(bos, encoding);
+
+            boolean headerDone = false;
+
+            // Make header.
+            final FileMakingHeaderInfo fileMakingHeaderInfo = fileMakingOption
+                    .getFileMakingHeaderInfo();
+            if (fileMakingHeaderInfo != null) {
+                final List<String> columnNameList = fileMakingHeaderInfo
+                        .getColumnNameList();
+                if (columnNameList != null && !columnNameList.isEmpty()) {
+                    final LineMakingOption lineMakingOption = new LineMakingOption();
+                    lineMakingOption.setDelimiter(delimiter);
+                    lineMakingOption.trimSpace();// Trimming is Header Only!
+                    final String columnHeaderString = _lineToken.make(
+                            columnNameList, lineMakingOption);
+                    writer.write(columnHeaderString + lineSeparator);
+                    headerDone = true;
+                }
+            }
+
+            // Make row.
+            FileMakingRowResource rowResource = null;
+            while (true) {
+                rowResource = fileMakingCallback.getRowResource();
+                if (rowResource == null) {
+                    break;// The End!
+                }
+                final java.util.List<String> valueList;
+                if (rowResource.getValueList() != null) {
+                    valueList = rowResource.getValueList();
+                } else {
+                    final java.util.LinkedHashMap<String, String> nameValueMap = rowResource
+                            .getNameValueMap();
+                    if (!headerDone) {
+                        final java.util.List<String> columnNameList = new java.util.ArrayList<String>(
+                                nameValueMap.keySet());
+                        final LineMakingOption lineMakingOption = new LineMakingOption();
+                        lineMakingOption.setDelimiter(delimiter);
+                        lineMakingOption.trimSpace();// Trimming is Header Only!
+                        final String columnHeaderString = _lineToken.make(
+                                columnNameList, lineMakingOption);
+                        writer.write(columnHeaderString + lineSeparator);
+                        headerDone = true;
+                    }
+                    valueList = new ArrayList<String>(nameValueMap.values());
+                }
+                final LineMakingOption lineMakingOption = new LineMakingOption();
+                lineMakingOption.setDelimiter(delimiter);
+                if (!fileMakingOption.isGoodByeDoubleQuotation()) {
+                    lineMakingOption.quoteByDoubleQuotation();
+                }
+                final String lineString = _lineToken.make(valueList,
+                        lineMakingOption);
+                writer.write(lineString + lineSeparator);
+            }
+            writer.flush();
+        } catch (java.io.FileNotFoundException e) {
+            throw e;
+        } catch (java.io.IOException e) {
+            throw e;
+        } finally {
+            if (bos != null) {
+                bos.close();
+            }
+            if (writer != null) {
+                writer.close();
+            }
+        }
+    }
+
+    // ----------------------------------------------------------------
+    //                                                    Assert Object
+    //                                                    -------------
+    /**
+     * Assert that the object is not null.
+     * 
+     * @param variableName Variable name. (NotNull)
+     * @param value Value. (NotNull)
+     * @exception IllegalArgumentException
+     */
+    protected void assertObjectNotNull(String variableName, Object value) {
+        if (variableName == null) {
+            String msg = "The value should not be null: variableName="
+                    + variableName + " value=" + value;
+            throw new IllegalArgumentException(msg);
+        }
+        if (value == null) {
+            String msg = "The value should not be null: variableName="
+                    + variableName;
+            throw new IllegalArgumentException(msg);
+        }
+    }
+
+    // ----------------------------------------------------------------
+    //                                                    Assert String
+    //                                                    -------------
+    /**
+     * Assert that the entity is not null and not trimmed empty.
+     * 
+     * @param variableName Variable name. (NotNull)
+     * @param value Value. (NotNull)
+     */
+    protected void assertStringNotNullAndNotTrimmedEmpty(String variableName,
+            String value) {
+        assertObjectNotNull("variableName", variableName);
+        assertObjectNotNull(variableName, value);
+        if (value.trim().length() == 0) {
+            String msg = "The value should not be empty: variableName="
+                    + variableName + " value=" + value;
+            throw new IllegalArgumentException(msg);
+        }
+    }
+}
\ No newline at end of file


Property changes on: announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/helper/token/file/impl/FileTokenImpl.java
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/helper/token/line/LineMakingOption.java
===================================================================
--- announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/helper/token/line/LineMakingOption.java	                        (rev 0)
+++ announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/helper/token/line/LineMakingOption.java	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,49 @@
+package jp.sf.pal.announcement.db.allcommon.helper.token.line;
+
+/**
+ * @author DBFlute(AutoGenerator)
+ */
+public class LineMakingOption {
+
+    protected String _delimiter;
+
+    protected boolean _quoteByDoubleQuotation;
+
+    protected boolean _trimSpace;
+
+    public LineMakingOption delimitateByComma() {
+        _delimiter = ",";
+        return this;
+    }
+
+    public LineMakingOption delimitateByTab() {
+        _delimiter = "\t";
+        return this;
+    }
+
+    public String getDelimiter() {
+        return _delimiter;
+    }
+
+    public void setDelimiter(String delimiter) {
+        _delimiter = delimiter;
+    }
+
+    public LineMakingOption quoteByDoubleQuotation() {
+        _quoteByDoubleQuotation = true;
+        return this;
+    }
+
+    public boolean isQuoteByDoubleQuotation() {
+        return _quoteByDoubleQuotation;
+    }
+
+    public LineMakingOption trimSpace() {
+        _trimSpace = true;
+        return this;
+    }
+
+    public boolean isTrimSpace() {
+        return _trimSpace;
+    }
+}
\ No newline at end of file


Property changes on: announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/helper/token/line/LineMakingOption.java
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/helper/token/line/LineToken.java
===================================================================
--- announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/helper/token/line/LineToken.java	                        (rev 0)
+++ announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/helper/token/line/LineToken.java	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,13 @@
+package jp.sf.pal.announcement.db.allcommon.helper.token.line;
+
+/**
+ * @author DBFlute(AutoGenerator)
+ */
+public interface LineToken {
+
+    public java.util.List<String> tokenize(String lineString,
+            LineTokenizingOption lineTokenizingOption);
+
+    public String make(java.util.List<String> valueList,
+            LineMakingOption lineMakingOption);
+}
\ No newline at end of file


Property changes on: announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/helper/token/line/LineToken.java
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/helper/token/line/LineTokenizingOption.java
===================================================================
--- announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/helper/token/line/LineTokenizingOption.java	                        (rev 0)
+++ announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/helper/token/line/LineTokenizingOption.java	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,58 @@
+package jp.sf.pal.announcement.db.allcommon.helper.token.line;
+
+/**
+ * @author DBFlute(AutoGenerator)
+ */
+public class LineTokenizingOption {
+
+    // =====================================================================================
+    //                                                                             Attribute
+    //                                                                             =========
+    protected String _delimiter;
+
+    protected boolean _trimDoubleQuotation;
+
+    protected boolean _handleEmtpyAsNull;
+
+    // =====================================================================================
+    //                                                                           Easy-to-Use
+    //                                                                           ===========
+    public LineTokenizingOption delimitateByComma() {
+        _delimiter = ",";
+        return this;
+    }
+
+    public LineTokenizingOption delimitateByTab() {
+        _delimiter = "\t";
+        return this;
+    }
+
+    public LineTokenizingOption trimDoubleQuotation() {
+        _trimDoubleQuotation = true;
+        return this;
+    }
+
+    public LineTokenizingOption handleEmtpyAsNull() {
+        _handleEmtpyAsNull = true;
+        return this;
+    }
+
+    // =====================================================================================
+    //                                                                              Accessor
+    //                                                                              ========
+    public String getDelimiter() {
+        return _delimiter;
+    }
+
+    public void setDelimiter(String delimiter) {
+        _delimiter = delimiter;
+    }
+
+    public boolean isTrimDoubleQuotation() {
+        return _trimDoubleQuotation;
+    }
+
+    public boolean isHandleEmtpyAsNull() {
+        return _handleEmtpyAsNull;
+    }
+}
\ No newline at end of file


Property changes on: announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/helper/token/line/LineTokenizingOption.java
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/helper/token/line/impl/LineTokenImpl.java
===================================================================
--- announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/helper/token/line/impl/LineTokenImpl.java	                        (rev 0)
+++ announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/helper/token/line/impl/LineTokenImpl.java	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,130 @@
+package jp.sf.pal.announcement.db.allcommon.helper.token.line.impl;
+
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+
+import jp.sf.pal.announcement.db.allcommon.helper.token.line.LineMakingOption;
+import jp.sf.pal.announcement.db.allcommon.helper.token.line.LineToken;
+import jp.sf.pal.announcement.db.allcommon.helper.token.line.LineTokenizingOption;
+
+/**
+ * @author DBFlute(AutoGenerator)
+ */
+public class LineTokenImpl implements LineToken {
+
+    public List<String> tokenize(String lineString,
+            LineTokenizingOption lineTokenizingOption) {
+        final String delimiter = lineTokenizingOption.getDelimiter();
+        final List<String> list = new ArrayList<String>();
+        int i = 0;
+        int j = lineString.indexOf(delimiter);
+        for (int h = 0; j >= 0; h++) {
+            final String pureValue = lineString.substring(i, j);
+            if (lineTokenizingOption.isTrimDoubleQuotation()) {
+                final String before = pureValue;
+                if (before.length() > 1 && before.startsWith("\"")
+                        && before.endsWith("\"")) {
+                    final String after = before.substring(1,
+                            before.length() - 1);
+                    list.add(filterHandlingEmptyAsNull(after,
+                            lineTokenizingOption));
+                } else {
+                    list.add(filterHandlingEmptyAsNull(before,
+                            lineTokenizingOption));
+                }
+            } else {
+                list.add(filterHandlingEmptyAsNull(pureValue,
+                        lineTokenizingOption));
+            }
+            i = j + 1;
+            j = lineString.indexOf(delimiter, i);
+        }
+        list.add(filterHandlingEmptyAsNull(lineString.substring(i),
+                lineTokenizingOption));
+        return list;
+    }
+
+    protected String filterHandlingEmptyAsNull(String target,
+            LineTokenizingOption lineTokenizingOption) {
+        if (target == null) {
+            return null;
+        }
+        if (lineTokenizingOption.isHandleEmtpyAsNull() && "".equals(target)) {
+            return null;
+        }
+        return target;
+    }
+
+    public String make(java.util.List<String> valueList,
+            LineMakingOption lineMakingOption) {
+        assertObjectNotNull("valueList", valueList);
+        assertObjectNotNull("lineMakingOption", lineMakingOption);
+        final String delimiter = lineMakingOption.getDelimiter();
+        assertObjectNotNull("lineMakingOption.getDelimiter()", delimiter);
+        return createLineString(valueList, delimiter, lineMakingOption
+                .isQuoteByDoubleQuotation(), lineMakingOption.isTrimSpace());
+    }
+
+    protected String createLineString(List<String> valueList, String delimiter,
+            boolean quoteByDoubleQuotation, boolean trimSpace) {
+        final StringBuffer sb = new StringBuffer();
+        for (final Iterator<String> ite = valueList.iterator(); ite.hasNext();) {
+            String value = (String) ite.next();
+            value = (value != null ? value : "");
+            if (trimSpace) {
+                value = value.trim();
+            }
+            if (quoteByDoubleQuotation) {
+                sb.append(delimiter).append("\"").append(value).append("\"");
+            } else {
+                sb.append(delimiter).append(value);
+            }
+        }
+        sb.delete(0, delimiter.length());
+        return sb.toString();
+    }
+
+    // ----------------------------------------------------------------
+    //                                                    Assert Object
+    //                                                    -------------
+    /**
+     * Assert that the object is not null.
+     * 
+     * @param variableName Variable name. (NotNull)
+     * @param value Value. (NotNull)
+     * @exception IllegalArgumentException
+     */
+    protected void assertObjectNotNull(String variableName, Object value) {
+        if (variableName == null) {
+            String msg = "The value should not be null: variableName="
+                    + variableName + " value=" + value;
+            throw new IllegalArgumentException(msg);
+        }
+        if (value == null) {
+            String msg = "The value should not be null: variableName="
+                    + variableName;
+            throw new IllegalArgumentException(msg);
+        }
+    }
+
+    // ----------------------------------------------------------------
+    //                                                    Assert String
+    //                                                    -------------
+    /**
+     * Assert that the entity is not null and not trimmed empty.
+     * 
+     * @param variableName Variable name. (NotNull)
+     * @param value Value. (NotNull)
+     */
+    protected void assertStringNotNullAndNotTrimmedEmpty(String variableName,
+            String value) {
+        assertObjectNotNull("variableName", variableName);
+        assertObjectNotNull(variableName, value);
+        if (value.trim().length() == 0) {
+            String msg = "The value should not be empty: variableName="
+                    + variableName + " value=" + value;
+            throw new IllegalArgumentException(msg);
+        }
+    }
+}
\ No newline at end of file


Property changes on: announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/helper/token/line/impl/LineTokenImpl.java
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/jdbc/CursorHandler.java
===================================================================
--- announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/jdbc/CursorHandler.java	                        (rev 0)
+++ announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/jdbc/CursorHandler.java	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,15 @@
+package jp.sf.pal.announcement.db.allcommon.jdbc;
+
+/**
+ * The interface of statement history witness.
+ * @author DBFlute(AutoGenerator)
+ */
+public interface CursorHandler {
+
+    /**
+     * @param resultSet Result set. (NotNull)
+     * @return Result
+     * @throws java.sql.SQLException
+     */
+    Object handle(java.sql.ResultSet resultSet) throws java.sql.SQLException;
+}


Property changes on: announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/jdbc/CursorHandler.java
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/jdbc/LatestSqlProvider.java
===================================================================
--- announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/jdbc/LatestSqlProvider.java	                        (rev 0)
+++ announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/jdbc/LatestSqlProvider.java	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,19 @@
+package jp.sf.pal.announcement.db.allcommon.jdbc;
+
+/**
+ * The provider of latest SQL.
+ * @author DBFlute(AutoGenerator)
+ */
+public interface LatestSqlProvider {
+
+    /**
+     * Get display SQL.
+     * @return Display SQL. (Nullable: If it was not found, returns null.)
+     */
+    public String getDisplaySql();
+
+    /**
+     * Clear the cache of SQL.
+     */
+    public void clearSqlCache();
+}


Property changes on: announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/jdbc/LatestSqlProvider.java
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/jdbc/StatementConfig.java
===================================================================
--- announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/jdbc/StatementConfig.java	                        (rev 0)
+++ announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/jdbc/StatementConfig.java	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,129 @@
+package jp.sf.pal.announcement.db.allcommon.jdbc;
+
+import java.sql.ResultSet;
+
+/**
+ * The config of statement.
+ * @author DBFlute(AutoGenerator)
+ */
+public class StatementConfig {
+
+    // ===================================================================================
+    //                                                                           Attribute
+    //                                                                           =========
+    // -----------------------------------------------------
+    //                                        ResultSet TYPE
+    //                                        --------------
+    protected Integer _resultSetType;
+
+    // -----------------------------------------------------
+    //                                      Statement Option
+    //                                      ----------------
+    protected Integer _queryTimeout;
+
+    protected Integer _fetchSize;
+
+    protected Integer _maxRows;
+
+    // ===================================================================================
+    //                                                                   Setting Interface
+    //                                                                   =================
+    // -----------------------------------------------------
+    //                                        ResultSet TYPE
+    //                                        --------------
+    public StatementConfig typeForwardOnly() {
+        _resultSetType = ResultSet.TYPE_FORWARD_ONLY;
+        return this;
+    }
+
+    public StatementConfig typeScrollInsensitive() {
+        _resultSetType = ResultSet.TYPE_SCROLL_INSENSITIVE;
+        return this;
+    }
+
+    public StatementConfig typeScrollSensitive() {
+        _resultSetType = ResultSet.TYPE_SCROLL_SENSITIVE;
+        return this;
+    }
+
+    // -----------------------------------------------------
+    //                                      Statement Option
+    //                                      ----------------
+    public StatementConfig queryTimeout(int queryTimeout) {
+        this._queryTimeout = queryTimeout;
+        return this;
+    }
+
+    public StatementConfig fetchSize(int fetchSize) {
+        this._fetchSize = fetchSize;
+        return this;
+    }
+
+    public StatementConfig maxRows(int maxRows) {
+        this._maxRows = maxRows;
+        return this;
+    }
+
+    // ===================================================================================
+    //                                                                       Determination
+    //                                                                       =============
+    // -----------------------------------------------------
+    //                                        ResultSet TYPE
+    //                                        --------------
+    public boolean hasResultSetType() {
+        return _resultSetType != null;
+    }
+
+    // -----------------------------------------------------
+    //                                      Statement Option
+    //                                      ----------------
+    public boolean hasStatementOptions() {
+        return hasQueryTimeout() || hasFetchSize() || hasMaxRows();
+    }
+
+    public boolean hasQueryTimeout() {
+        return _queryTimeout != null;
+    }
+
+    public boolean hasFetchSize() {
+        return _fetchSize != null;
+    }
+
+    public boolean hasMaxRows() {
+        return _maxRows != null;
+    }
+
+    // ===================================================================================
+    //                                                                      Basic Override
+    //                                                                      ==============
+    @Override
+    public String toString() {
+        return "{" + _resultSetType + ", " + _queryTimeout + ", " + _fetchSize
+                + ", " + _maxRows + "}";
+    }
+
+    // ===================================================================================
+    //                                                                            Accessor
+    //                                                                            ========
+    // -----------------------------------------------------
+    //                                        ResultSet TYPE
+    //                                        --------------
+    public Integer getResultSetType() {
+        return _resultSetType;
+    }
+
+    // -----------------------------------------------------
+    //                                      Statement Option
+    //                                      ----------------
+    public Integer getQueryTimeout() {
+        return _queryTimeout;
+    }
+
+    public Integer getFetchSize() {
+        return _fetchSize;
+    }
+
+    public Integer getMaxRows() {
+        return _maxRows;
+    }
+}


Property changes on: announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/jdbc/StatementConfig.java
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/s2dao/FetchNarrowingResultSetFactory.java
===================================================================
--- announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/s2dao/FetchNarrowingResultSetFactory.java	                        (rev 0)
+++ announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/s2dao/FetchNarrowingResultSetFactory.java	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,100 @@
+package jp.sf.pal.announcement.db.allcommon.s2dao;
+
+import jp.sf.pal.announcement.db.allcommon.cbean.FetchNarrowingBean;
+import jp.sf.pal.announcement.db.allcommon.cbean.FetchNarrowingBeanContext;
+import jp.sf.pal.announcement.db.allcommon.cbean.outsidesql.OutsideSqlContext;
+
+import org.seasar.extension.jdbc.ResultSetFactory;
+import org.seasar.framework.util.PreparedStatementUtil;
+
+/**
+ * Fetch page result set factory.
+ * 
+ * @author DBFlute(AutoGenerator)
+ */
+public class FetchNarrowingResultSetFactory implements ResultSetFactory {
+
+    // ===================================================================================
+    //                                                                         Constructor
+    //                                                                         ===========
+    /**
+     * Constructor.
+     */
+    public FetchNarrowingResultSetFactory() {
+    }
+
+    // ===================================================================================
+    //                                                                                Main
+    //                                                                                ====
+    /**
+     * @param statement Statement. (NotNull)
+     * @return Result set for procedure executing of s2dao. (NotNull)
+     */
+    public java.sql.ResultSet getResultSet(java.sql.Statement statement) {
+        // return org.seasar.framework.util.StatementUtil.getResultSet(statement);
+        return doGetResultSet(statement);// This behavior is same as StatementUtil.getResultSet().
+    }
+
+    protected java.sql.ResultSet doGetResultSet(java.sql.Statement statement)
+            throws org.seasar.framework.exception.SQLRuntimeException {
+        try {
+            return statement.getResultSet();
+        } catch (java.sql.SQLException ex) {
+            throw new org.seasar.framework.exception.SQLRuntimeException(ex);
+        }
+    }
+
+    /**
+     * Create result set.
+     * 
+     * @param ps Prepared statement. (NotNull)
+     * @return Result set. (NotNull)
+     */
+    public java.sql.ResultSet createResultSet(java.sql.PreparedStatement ps) {
+        final java.sql.ResultSet resultSet = PreparedStatementUtil
+                .executeQuery(ps);
+
+        if (!FetchNarrowingBeanContext.isExistFetchNarrowingBeanOnThread()) {
+            return resultSet;
+        }
+        final FetchNarrowingBean cb = FetchNarrowingBeanContext
+                .getFetchNarrowingBeanOnThread();
+        if (!isUseFetchNarrowingResultSetWrapper(cb)) {
+            return resultSet;
+        }
+        final FetchNarrowingResultSetWrapper wrapper;
+        if (OutsideSqlContext.isExistOutsideSqlContextOnThread()) {
+            final OutsideSqlContext outsideSqlContext = OutsideSqlContext
+                    .getOutsideSqlContextOnThread();
+            wrapper = new FetchNarrowingResultSetWrapper(resultSet, cb,
+                    outsideSqlContext.isOffsetByCursorForcedly(),
+                    outsideSqlContext.isLimitByCursorForcedly());
+        } else {
+            wrapper = new FetchNarrowingResultSetWrapper(resultSet, cb, false,
+                    false);
+        }
+        return wrapper;
+    }
+
+    protected boolean isUseFetchNarrowingResultSetWrapper(FetchNarrowingBean cb) {
+        if (cb.getSafetyMaxResultSize() > 0) {
+            return true;
+        }
+        if (!cb.isFetchNarrowingEffective()) {
+            return false;// It is not necessary to control.
+        }
+        if (OutsideSqlContext.isExistOutsideSqlContextOnThread()) {
+            final OutsideSqlContext outsideSqlContext = OutsideSqlContext
+                    .getOutsideSqlContextOnThread();
+            if (outsideSqlContext.isOffsetByCursorForcedly()
+                    || outsideSqlContext.isLimitByCursorForcedly()) {
+                return true;
+            }
+        }
+        if (cb.isFetchNarrowingSkipStartIndexEffective()
+                || cb.isFetchNarrowingLoopCountEffective()) {
+            return true;
+        }
+        return false;
+    }
+}


Property changes on: announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/s2dao/FetchNarrowingResultSetFactory.java
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/s2dao/FetchNarrowingResultSetWrapper.java
===================================================================
--- announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/s2dao/FetchNarrowingResultSetWrapper.java	                        (rev 0)
+++ announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/s2dao/FetchNarrowingResultSetWrapper.java	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,235 @@
+package jp.sf.pal.announcement.db.allcommon.s2dao;
+
+import java.sql.ResultSet;
+import java.sql.SQLException;
+
+import jp.sf.pal.announcement.db.allcommon.cbean.FetchNarrowingBean;
+
+import org.seasar.extension.jdbc.impl.ResultSetWrapper;
+import org.seasar.framework.exception.SQLRuntimeException;
+
+/**
+ * The wrapper of fetch-narrowing result-set.
+ * @author DBFlute(AutoGenerator)
+ */
+public class FetchNarrowingResultSetWrapper extends ResultSetWrapper {
+
+    // ===================================================================================
+    //                                                                           Attribute
+    //                                                                           =========
+    /** The real result set. (NotNull) */
+    protected ResultSet _resultSet;
+
+    /** The bean of fetch narrowing. (NotNull) */
+    protected FetchNarrowingBean _fetchNarrowingBean;
+
+    /** The counter of fetch. */
+    protected long _fetchCounter;
+
+    /** the counter of request. */
+    protected long _requestCounter;
+
+    /** Does it offset by cursor forcedly? */
+    protected boolean _offsetByCursorForcedly;
+
+    /** Does it limit by cursor forcedly? */
+    protected boolean _limitByCursorForcedly;
+
+    /** Does it skip to cursor end? */
+    protected boolean _skipToCursorEnd;
+
+    // ===================================================================================
+    //                                                                         Constructor
+    //                                                                         ===========
+    /**
+     * Constructor.
+     * @param resultSet Original result set. (NotNull)
+     * @param fetchNarrowingBean FetchNarrowing-bean. (NotNull)
+     * @param offsetByCursorForcedly Offset by cursor forcedly.
+     * @param limitByCursorForcedly Limit by cursor forcedly.
+     */
+    public FetchNarrowingResultSetWrapper(ResultSet resultSet,
+            FetchNarrowingBean fetchNarrowingBean,
+            boolean offsetByCursorForcedly, boolean limitByCursorForcedly) {
+        super(resultSet);
+
+        _resultSet = resultSet;
+        _fetchNarrowingBean = fetchNarrowingBean;
+        _offsetByCursorForcedly = offsetByCursorForcedly;
+        _limitByCursorForcedly = limitByCursorForcedly;
+
+        skip();
+    }
+
+    // ===================================================================================
+    //                                                                                Skip
+    //                                                                                ====
+    /**
+     * Skip to start-index.
+     */
+    protected void skip() {
+        if (!isAvailableSkipRecord()) {
+            return;
+        }
+        final int skipStartIndex = getFetchNarrowingSkipStartIndex();
+        if (isCursorUsed()) {
+            try {
+                if (0 == skipStartIndex) {
+                    _resultSet.beforeFirst();
+                } else {
+                    _resultSet.absolute(skipStartIndex);
+                }
+                _fetchCounter = _resultSet.getRow();
+            } catch (SQLException e) {
+                throw new SQLRuntimeException(e);
+            }
+        } else {
+            try {
+                while (true) {
+                    if (_resultSet.getRow() >= skipStartIndex) {
+                        break;
+                    }
+                    if (!_resultSet.next()) {
+                        _skipToCursorEnd = true;// [DBFLUTE-243]
+                        break;
+                    }
+                    ++_fetchCounter;
+                }
+            } catch (SQLException e) {
+                throw new SQLRuntimeException(e);
+            }
+        }
+    }
+
+    protected boolean isAvailableSkipRecord() {
+        if (!isFetchNarrowingEffective()) {
+            return false;
+        }
+        if (isOffsetByCursorForcedly()) {
+            return true;
+        }
+        if (isFetchNarrowingSkipStartIndexEffective()) {
+            return true;
+        }
+        return false;
+    }
+
+    // ===================================================================================
+    //                                                                                Next
+    //                                                                                ====
+    /**
+     * Next.
+     * @return Does the result set have next record?
+     * @throws SQLException
+     */
+    public boolean next() throws SQLException {
+        final boolean hasNext = super.next();
+        ++_requestCounter;
+        if (!isAvailableLimitLoopCount()) {
+            checkSafetyResult(hasNext);
+            return hasNext;
+        }
+
+        if (hasNext
+                && _fetchCounter < getFetchNarrowingSkipStartIndex()
+                        + getFetchNarrowingLoopCount()) {
+            ++_fetchCounter;
+            checkSafetyResult(true);
+            return true;
+        } else {
+            return false;
+        }
+    }
+
+    protected boolean isAvailableLimitLoopCount() {
+        if (!isFetchNarrowingEffective()) {
+            return false;
+        }
+        if (isLimitByCursorForcedly()) {
+            return true;
+        }
+        if (isFetchNarrowingLoopCountEffective()) {
+            return true;
+        }
+        return false;
+    }
+
+    protected void checkSafetyResult(boolean hasNext) {
+        if (hasNext && getSafetyMaxResultSize() > 0
+                && _requestCounter > (getSafetyMaxResultSize() + 1)) {
+            String msg = "You have already been in Danger Zone!";
+            msg = msg
+                    + " Please confirm your query or data of table: safetyMaxResultSize="
+                    + getSafetyMaxResultSize();
+            throw new jp.sf.pal.announcement.db.allcommon.exception.DangerousResultSizeException(
+                    msg, getSafetyMaxResultSize());
+        }
+    }
+
+    // ===================================================================================
+    //                                                                        Fetch Option
+    //                                                                        ============
+    protected boolean isFetchNarrowingEffective() {
+        return _fetchNarrowingBean.isFetchNarrowingEffective();
+    }
+
+    protected boolean isFetchNarrowingSkipStartIndexEffective() {
+        return _fetchNarrowingBean.isFetchNarrowingSkipStartIndexEffective();
+    }
+
+    protected boolean isFetchNarrowingLoopCountEffective() {
+        return _fetchNarrowingBean.isFetchNarrowingLoopCountEffective();
+    }
+
+    protected int getFetchNarrowingSkipStartIndex() {
+        return _fetchNarrowingBean.getFetchNarrowingSkipStartIndex();
+    }
+
+    protected int getFetchNarrowingLoopCount() {
+        return _fetchNarrowingBean.getFetchNarrowingLoopCount();
+    }
+
+    /**
+     * Get safety max result size.
+     * @return Safety max result size.
+     */
+    public int getSafetyMaxResultSize() {
+        return _fetchNarrowingBean.getSafetyMaxResultSize();
+    }
+
+    /**
+     * Is cursor used?
+     * @return Determination.
+     */
+    protected boolean isCursorUsed() {
+        return isCursorSupported(_resultSet);
+    }
+
+    /**
+     * Is cursor supported?
+     * @param resultSet ResultSet
+     * @return Determation.
+     */
+    public static boolean isCursorSupported(ResultSet resultSet) {
+        try {
+            return !(resultSet.getType() == ResultSet.TYPE_FORWARD_ONLY);
+        } catch (SQLException e) {
+            throw new SQLRuntimeException(e);
+        }
+    }
+
+    // ===================================================================================
+    //                                                                            Accessor
+    //                                                                            ========
+    public boolean isOffsetByCursorForcedly() {
+        return _offsetByCursorForcedly;
+    }
+
+    public boolean isLimitByCursorForcedly() {
+        return _limitByCursorForcedly;
+    }
+
+    public boolean isSkipToCursorEnd() {
+        return _skipToCursorEnd;
+    }
+}


Property changes on: announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/s2dao/FetchNarrowingResultSetWrapper.java
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/s2dao/S2BeanMetaDataFactoryImpl.java
===================================================================
--- announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/s2dao/S2BeanMetaDataFactoryImpl.java	                        (rev 0)
+++ announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/s2dao/S2BeanMetaDataFactoryImpl.java	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,114 @@
+package jp.sf.pal.announcement.db.allcommon.s2dao;
+
+import java.sql.DatabaseMetaData;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.Map;
+
+import jp.sf.pal.announcement.db.allcommon.Entity;
+
+import org.seasar.dao.BeanMetaData;
+import org.seasar.dao.impl.BeanMetaDataFactoryImpl;
+import org.seasar.dao.impl.BeanMetaDataImpl;
+
+/**
+ * BeanMetaDataFactoryImpl for DBFlute.
+ * @author DBFlute(AutoGenerator)
+ */
+ @ SuppressWarnings("unchecked")
+public class S2BeanMetaDataFactoryImpl extends BeanMetaDataFactoryImpl {
+
+    protected Map<Class<? extends Entity>, BeanMetaData> _metaMap = Collections
+            .synchronizedMap(new HashMap<Class<? extends Entity>, BeanMetaData>());
+
+    @Override
+    public BeanMetaData createBeanMetaData(Class beanClass) {
+        final BeanMetaData cachedMeta = findCachedMeta(beanClass);
+        if (cachedMeta != null) {
+            return cachedMeta;
+        } else {
+            return super.createBeanMetaData(beanClass);
+        }
+    }
+
+    @Override
+    public BeanMetaData createBeanMetaData(Class beanClass,
+            int relationNestLevel) {
+        final BeanMetaData cachedMeta = findCachedMeta(beanClass);
+        if (cachedMeta != null) {
+            return cachedMeta;
+        } else {
+            return super.createBeanMetaData(beanClass, relationNestLevel);
+        }
+    }
+
+    @Override
+    public BeanMetaData createBeanMetaData(DatabaseMetaData dbMetaData,
+            Class beanClass, int relationNestLevel) {
+        final BeanMetaData cachedMeta = findOrCreateCachedMetaIfNeeds(
+                dbMetaData, beanClass, relationNestLevel);
+        if (cachedMeta != null) {
+            return cachedMeta;
+        } else {
+            return super.createBeanMetaData(dbMetaData, beanClass,
+                    relationNestLevel);
+        }
+    }
+
+    protected BeanMetaData findCachedMeta(Class beanClass) {
+        if (isDBFluteEntity(beanClass)) {
+            final BeanMetaData cachedMeta = getMetaFromCache(beanClass);
+            if (cachedMeta != null) {
+                return cachedMeta;
+            }
+        }
+        return null;
+    }
+
+    protected BeanMetaData findOrCreateCachedMetaIfNeeds(
+            DatabaseMetaData dbMetaData, Class beanClass, int relationNestLevel) {
+        if (isDBFluteEntity(beanClass)) {
+            final BeanMetaData cachedMeta = getMetaFromCache(beanClass);
+            if (cachedMeta != null) {
+                return cachedMeta;
+            } else {
+                return super.createBeanMetaData(dbMetaData, beanClass, 0);
+            }
+        }
+        return null;
+    }
+
+    @Override
+    protected BeanMetaDataImpl createBeanMetaDataImpl() {
+        return new BeanMetaDataImpl() {
+            @Override
+            public void initialize() {
+                final Class myBeanClass = getBeanClass();
+                if (isDBFluteEntity(myBeanClass)) {
+                    final BeanMetaData cachedMeta = getMetaFromCache(myBeanClass);
+                    if (cachedMeta == null) {
+                        _metaMap.put(myBeanClass, this);
+                    }
+                }
+                super.initialize();
+            }
+        };
+    }
+
+    protected boolean isDBFluteEntity(Class beanClass) {
+        return Entity.class.isAssignableFrom(beanClass);
+    }
+
+    protected BeanMetaData getMetaFromCache(Class beanClass) {
+        return _metaMap.get(beanClass);
+    }
+
+    /**
+     * Get the limit nest level of relation.
+     * @return The limit nest level of relation.
+     */
+    @Override
+    protected int getLimitRelationNestLevel() {
+        return 2;// for Compatible to old version DBFlute
+    }
+}
\ No newline at end of file


Property changes on: announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/s2dao/S2BeanMetaDataFactoryImpl.java
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/s2dao/S2DaoInterceptor.java
===================================================================
--- announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/s2dao/S2DaoInterceptor.java	                        (rev 0)
+++ announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/s2dao/S2DaoInterceptor.java	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,962 @@
+package jp.sf.pal.announcement.db.allcommon.s2dao;
+
+import java.lang.reflect.Method;
+import java.util.Arrays;
+import java.util.List;
+
+import jp.sf.pal.announcement.db.allcommon.Entity;
+import jp.sf.pal.announcement.db.allcommon.InternalMapContext;
+import jp.sf.pal.announcement.db.allcommon.XLog;
+import jp.sf.pal.announcement.db.allcommon.cbean.ConditionBean;
+import jp.sf.pal.announcement.db.allcommon.cbean.ConditionBeanContext;
+import jp.sf.pal.announcement.db.allcommon.cbean.FetchNarrowingBean;
+import jp.sf.pal.announcement.db.allcommon.cbean.FetchNarrowingBeanContext;
+import jp.sf.pal.announcement.db.allcommon.cbean.outsidesql.OutsideSqlContext;
+import jp.sf.pal.announcement.db.allcommon.cbean.outsidesql.OutsideSqlDao;
+import jp.sf.pal.announcement.db.allcommon.cbean.outsidesql.OutsideSqlOption;
+import jp.sf.pal.announcement.db.allcommon.util.TraceViewUtil;
+
+import org.aopalliance.intercept.MethodInvocation;
+import org.seasar.dao.DaoMetaData;
+import org.seasar.dao.DaoMetaDataFactory;
+import org.seasar.dao.SqlCommand;
+import org.seasar.framework.beans.MethodNotFoundRuntimeException;
+
+/**
+ * The interceptor of S2Dao for DBFlute.
+ * @author DBFlute(AutoGenerator)
+ */
+public class S2DaoInterceptor extends
+        org.seasar.framework.aop.interceptors.AbstractInterceptor {
+
+    // ===================================================================================
+    //                                                                          Definition
+    //                                                                          ==========
+    /** Serial version UID. (Default) */
+    private static final long serialVersionUID = 1L;
+
+    /** Log instance. */
+    private static final org.apache.commons.logging.Log _log = org.apache.commons.logging.LogFactory
+            .getLog(S2DaoInterceptor.class);
+
+    // ===================================================================================
+    //                                                                           Attribute
+    //                                                                           =========
+    /** The factory of dao meta data. */
+    private DaoMetaDataFactory daoMetaDataFactory_;
+
+    // ===================================================================================
+    //                                                                         Constructor
+    //                                                                         ===========
+    /**
+     * Constructor.
+     * @param daoMetaDataFactory The factory of dao meta data. (NotNull)
+     */
+    public S2DaoInterceptor(DaoMetaDataFactory daoMetaDataFactory) {
+        daoMetaDataFactory_ = daoMetaDataFactory;
+    }
+
+    // ===================================================================================
+    //                                                                  Execute Status Log
+    //                                                                  ==================
+    protected void log(String msg) {
+        XLog.log(msg);
+    }
+
+    protected boolean isLogEnabled() {
+        return XLog.isLogEnabled();
+    }
+
+    // ===================================================================================
+    //                                                                              Invoke
+    //                                                                              ======
+    /**
+     * Invoke the method.
+     * @param invocation The method invocation. (NotNull)
+     * @return The result of the method. (Nullable)
+     * @throws Throwable
+     */
+    public Object invoke(MethodInvocation invocation) throws Throwable {
+        clearThreadLocal();
+        try {
+            return dispatchInvoking(invocation);
+        } finally {
+            clearThreadLocal();
+        }
+    }
+
+    /**
+     * Dispatch invoking the method.
+     * @param invocation The method invocation. (NotNull)
+     * @return The result of the method. (Nullable)
+     * @throws Throwable
+     */
+    protected Object dispatchInvoking(MethodInvocation invocation)
+            throws Throwable {
+        final Method method = invocation.getMethod();
+        if (!org.seasar.framework.util.MethodUtil.isAbstract(method)) {
+            return invocation.proceed();
+        }
+
+        if (method.getName().equals("initializeDaoMetaData")) {
+            initializeSqlCommand(invocation);
+            return null;
+        }
+
+        if (isLogEnabled()) {
+            logInvocation(invocation);
+        }
+
+        long before = 0;
+        if (isLogEnabled()) {
+            before = System.currentTimeMillis();
+        }
+
+        // - - - - - - - - - - -
+        // Preprocess outsideSql
+        // - - - - - - - - - - -
+        preprocessOutsideSql(invocation);
+
+        // - - - - - - - - -
+        // Set up sqlCommand
+        // - - - - - - - - -
+        final SqlCommand cmd;
+        {
+            long beforeCmd = 0;
+            if (isLogEnabled()) {
+                beforeCmd = System.currentTimeMillis();
+            }
+            cmd = findSqlCommand(invocation);
+            if (isLogEnabled()) {
+                final long afterCmd = System.currentTimeMillis();
+                if (beforeCmd != afterCmd) {
+                    logSqlCommand(invocation, cmd, beforeCmd, afterCmd);
+                }
+            }
+        }
+
+        // - - - - - - - - - - - - -
+        // Preprocess conditionBean
+        // - - - - - - - - - - - - -
+        final ConditionBean cb = preprocessConditionBean(invocation, cmd);
+
+        // - - - - - - - - - -
+        // Execute sqlCommand!
+        // - - - - - - - - - -
+        Object ret = null;
+        try {
+            ret = cmd.execute(invocation.getArguments());
+        } catch (org.seasar.dao.NotSingleRowUpdatedRuntimeException notSingleRow) {
+            throw new jp.sf.pal.announcement.db.allcommon.exception.EntityAlreadyUpdatedException(
+                    notSingleRow);
+        } catch (Exception e) {
+            if (isLogEnabled()) {
+                final Class<?> targetType = getTargetClass(invocation);
+                final StringBuilder sb = new StringBuilder();
+                sb.append(
+                        targetType.getSimpleName() + " was interrupted by "
+                                + e.getClass().getSimpleName()).append(
+                        getLineSeparator());
+                sb.append("[Interrupted Target]").append(getLineSeparator());
+                sb.append("  dao    = " + targetType.getSimpleName()).append(
+                        getLineSeparator());
+                sb.append("  method = " + invocation.getMethod()).append(
+                        getLineSeparator());
+                sb.append("  args   = "
+                        + TraceViewUtil
+                                .convertObjectArrayToStringView(invocation
+                                        .getArguments()));
+                log(sb.toString());
+            }
+            throw e;
+        } finally {
+            postprocessConditionBean(invocation, cb);
+        }
+        final Class<?> retType = method.getReturnType();
+        assertRetType(retType, ret);
+
+        if (isLogEnabled()) {
+            final long after = System.currentTimeMillis();
+            logReturn(invocation, retType, ret, before, after);
+        }
+
+        // - - - - - - - - - -
+        // Convert and Return!
+        // - - - - - - - - - -
+        if (retType.isPrimitive()) {
+            return org.seasar.framework.util.NumberConversionUtil
+                    .convertPrimitiveWrapper(retType, ret);
+        } else if (Number.class.isAssignableFrom(retType)) {
+            return org.seasar.framework.util.NumberConversionUtil
+                    .convertNumber(retType, ret);
+        } else {
+            return ret;
+        }
+    }
+
+    // ===================================================================================
+    //                                                                          SqlCommand
+    //                                                                          ==========
+    protected void initializeSqlCommand(MethodInvocation invocation) {
+        final Class<?> targetType = getTargetClass(invocation);
+        final DaoMetaData dmd = daoMetaDataFactory_.getDaoMetaData(targetType);
+        if (OutsideSqlDao.class.isAssignableFrom(targetType)) {
+            return;// Do nothing!
+        } else {
+            final Object[] arguments = invocation.getArguments();
+            if (arguments != null && arguments.length > 0
+                    && arguments[0] instanceof String) {
+                final String methodName = (String) arguments[0];
+                try {
+                    dmd.getSqlCommand(methodName);
+                } catch (MethodNotFoundRuntimeException ignored) {
+                    // Do nothing!
+                    if (isLogEnabled()) {
+                        log("Not Found the method: " + methodName + " msg="
+                                + ignored.getMessage());
+                    }
+                }
+                return;
+            } else {
+                String msg = "The method should have one string argument as method name: "
+                        + invocation;
+                throw new IllegalStateException(msg);
+            }
+        }
+    }
+
+    protected SqlCommand findSqlCommand(MethodInvocation invocation) {
+        final SqlCommand cmd;
+        final Class<?> targetType = getTargetClass(invocation);
+        final DaoMetaData dmd = daoMetaDataFactory_.getDaoMetaData(targetType);
+        if (OutsideSqlDao.class.isAssignableFrom(targetType)) {
+            cmd = dmd
+                    .getSqlCommand(generateSpecifiedOutsideSqlUniqueKey(invocation));
+        } else {
+            cmd = dmd.getSqlCommand(invocation.getMethod().getName());
+        }
+        return cmd;
+    }
+
+    protected String generateSpecifiedOutsideSqlUniqueKey(
+            MethodInvocation invocation) {
+        final Object[] args = invocation.getArguments();
+        final String path = (String) args[0];
+        final Object pmb = args[1];
+        final OutsideSqlOption option = (OutsideSqlOption) args[2];
+        Object resultTypeSpecification = null;
+        if (args.length > 3) {
+            resultTypeSpecification = args[3];
+        }
+        return OutsideSqlContext.generateSpecifiedOutsideSqlUniqueKey(
+                invocation.getMethod().getName(), path, pmb, option,
+                resultTypeSpecification);
+    }
+
+    // ===================================================================================
+    //                                                                      Log Invocation
+    //                                                                      ==============
+    protected void logInvocation(MethodInvocation invocation) {
+        final Method method = invocation.getMethod();
+        final String invocationExpressionWithoutKakko = extractInvocationExpression(method)
+                + "." + method.getName();
+        final String equalBorder = buildFitBorder("", "=",
+                invocationExpressionWithoutKakko, false);
+        final String invocationExpression = invocationExpressionWithoutKakko
+                + "()";
+
+        log("/====================================================="
+                + equalBorder + "==");
+        log("                                                      "
+                + invocationExpression);
+        log("                                                      "
+                + equalBorder + "=/");
+
+        logPath();
+
+        // Specified OutsideSql
+        if (OutsideSqlDao.class.isAssignableFrom(getTargetClass(invocation))) {
+            Object[] args = invocation.getArguments();
+            if (args != null && args.length != 0 && args[0] instanceof String) {
+                log("OutsideSql: " + args[0]);
+            }
+        }
+    }
+
+    protected void logPath() {
+        final StackTraceElement[] stackTrace = new Exception().getStackTrace();
+        final InvokeNameExtractingResult behaviorResult = extractBehaviorInvokeName(stackTrace);
+        final int bhvNextIndex = behaviorResult.getNextStartIndex();
+        final InvokeNameExtractingResult clientResult = extractClientInvokeName(
+                stackTrace, bhvNextIndex);
+        final int clientFirstIndex = clientResult.getFoundFirstIndex();
+        final InvokeNameExtractingResult byPassResult = extractByPassInvokeName(
+                stackTrace, bhvNextIndex, clientFirstIndex - bhvNextIndex);
+
+        final String clientInvokeName = clientResult.getInvokeName();
+        final String byPassInvokeName = byPassResult.getInvokeName();
+        final String behaviorInvokeName = behaviorResult.getInvokeName();
+        if (clientInvokeName.trim().length() == 0
+                && byPassInvokeName.trim().length() == 0
+                && behaviorInvokeName.trim().length() == 0) {
+            return;
+        }
+        final String path = clientInvokeName + byPassInvokeName
+                + behaviorInvokeName + "...";
+        // *I will delete this at the future.
+        // final String hyphenBorder = buildFitBorder("/", "-", path, true);
+        // log(hyphenBorder);
+        log(path);
+        // log("- - - - - - - - - -/");
+    }
+
+    protected String buildFitBorder(String prefix, String element,
+            String lengthTargetString, boolean space) {
+        final int length = space ? lengthTargetString.length() / 2
+                : lengthTargetString.length();
+        final StringBuffer sb = new StringBuffer();
+        sb.append(prefix);
+        for (int i = 0; i < length; i++) {
+            sb.append(element);
+            if (space) {
+                sb.append(" ");
+            }
+        }
+        if (space) {
+            sb.append(element);
+        }
+        return sb.toString();
+    }
+
+    protected InvokeNameExtractingResult extractClientInvokeName(
+            StackTraceElement[] stackTrace, final int startIndex) {
+        final List<String> suffixList = Arrays.asList(new String[] { "Page",
+                "Action" });
+        final InvokeNameExtractingCallback callback = new InvokeNameExtractingCallback() {
+            public boolean isTargetElement(String className, String methodName) {
+                return isClassNameEndsWith(className, suffixList);
+            }
+
+            public String filterSimpleClassName(String simpleClassName) {
+                return simpleClassName;
+            }
+
+            public boolean isUseAdditionalInfo() {
+                return true;
+            }
+
+            public int getStartIndex() {
+                return startIndex;
+            }
+
+            public int getLoopSize() {
+                return 25;
+            }
+        };
+        return extractInvokeName(callback, stackTrace);
+    }
+
+    protected InvokeNameExtractingResult extractByPassInvokeName(
+            StackTraceElement[] stackTrace, final int startIndex,
+            final int loopSize) {
+        final List<String> suffixList = Arrays.asList(new String[] { "Service",
+                "ServiceImpl", "Facade", "FacadeImpl" });
+        final InvokeNameExtractingCallback callback = new InvokeNameExtractingCallback() {
+            public boolean isTargetElement(String className, String methodName) {
+                return isClassNameEndsWith(className, suffixList);
+            }
+
+            public String filterSimpleClassName(String simpleClassName) {
+                return simpleClassName;
+            }
+
+            public boolean isUseAdditionalInfo() {
+                return true;
+            }
+
+            public int getStartIndex() {
+                return startIndex;
+            }
+
+            public int getLoopSize() {
+                return loopSize >= 0 ? loopSize : 25;
+            }
+        };
+        return extractInvokeName(callback, stackTrace);
+    }
+
+    protected InvokeNameExtractingResult extractBehaviorInvokeName(
+            StackTraceElement[] stackTrace) {
+        final List<String> suffixList = Arrays.asList(new String[] { "Bhv",
+                "Bhv$", "BehaviorReadable", "BehaviorWritable" });
+        final InvokeNameExtractingCallback callback = new InvokeNameExtractingCallback() {
+            public boolean isTargetElement(String className, String methodName) {
+                return isClassNameEndsWith(className, suffixList);
+            }
+
+            public String filterSimpleClassName(String simpleClassName) {
+                return removeBasePrefixFromSimpleClassName(simpleClassName);
+            }
+
+            public boolean isUseAdditionalInfo() {
+                return false;
+            }
+
+            public int getStartIndex() {
+                return 0;
+            }
+
+            public int getLoopSize() {
+                return 25;
+            }
+        };
+        return extractInvokeName(callback, stackTrace);
+    }
+
+    protected boolean isClassNameEndsWith(String className,
+            List<String> suffixList) {
+        for (String suffix : suffixList) {
+            if (className.endsWith(suffix)) {
+                return true;
+            }
+        }
+        return false;
+    }
+
+    /**
+     * @param callback Callback. (NotNull)
+     * @param stackTrace Stack log. (NotNull)
+     * @return Invoke name. (NotNull: If not found, returns empty string.)
+     */
+    protected InvokeNameExtractingResult extractInvokeName(
+            InvokeNameExtractingCallback callback,
+            StackTraceElement[] stackTrace) {
+        String targetSimpleClassName = null;
+        String targetMethodName = null;
+        int lineNumber = 0;
+        int foundIndex = -1;// The minus one means 'not found'.
+        int foundFirstIndex = -1;// The minus one means 'not found'.
+        boolean onTarget = false;
+        for (int i = callback.getStartIndex(); i < stackTrace.length; i++) {
+            final StackTraceElement element = stackTrace[i];
+            if (i > callback.getStartIndex() + callback.getLoopSize()) {
+                break;
+            }
+            final String className = element.getClassName();
+            if (className.startsWith("sun.") || className.startsWith("java.")) {
+                if (onTarget) {
+                    break;
+                }
+                continue;
+            }
+            final String methodName = element.getMethodName();
+            if (callback.isTargetElement(className, methodName)) {
+                if (methodName.equals("invoke")) {
+                    continue;
+                }
+                targetSimpleClassName = className.substring(className
+                        .lastIndexOf(".") + 1);
+                targetMethodName = methodName;
+                if (callback.isUseAdditionalInfo()) {
+                    lineNumber = element.getLineNumber();
+                }
+                foundIndex = i;
+                if (foundFirstIndex == -1) {
+                    foundFirstIndex = i;
+                }
+                onTarget = true;
+                continue;
+            }
+            if (onTarget) {
+                break;
+            }
+        }
+        final InvokeNameExtractingResult result = new InvokeNameExtractingResult();
+        if (targetSimpleClassName == null) {
+            result.setInvokeName("");
+            return result;
+        }
+        if (lineNumber > 0) {
+            result.setInvokeName(callback
+                    .filterSimpleClassName(targetSimpleClassName)
+                    + "." + targetMethodName + "():" + lineNumber + " --> ");
+        } else {
+            result.setInvokeName(callback
+                    .filterSimpleClassName(targetSimpleClassName)
+                    + "." + targetMethodName + "() --> ");
+        }
+        result.setFoundIndex(foundIndex);
+        result.setFoundFirstIndex(foundFirstIndex);
+        return result;
+    }
+
+    protected static interface InvokeNameExtractingCallback {
+        public boolean isTargetElement(String className, String methodName);
+
+        public String filterSimpleClassName(String simpleClassName);
+
+        public boolean isUseAdditionalInfo();
+
+        public int getStartIndex();
+
+        public int getLoopSize();
+    }
+
+    protected static class InvokeNameExtractingResult {
+        protected String _invokeName;
+
+        protected int _foundIndex;
+
+        protected int _foundFirstIndex;
+
+        public int getNextStartIndex() {
+            return _foundIndex + 1;
+        }
+
+        public String getInvokeName() {
+            return _invokeName;
+        }
+
+        public void setInvokeName(String invokeName) {
+            this._invokeName = invokeName;
+        }
+
+        public int getFoundIndex() {
+            return _foundIndex;
+        }
+
+        public void setFoundIndex(int foundIndex) {
+            this._foundIndex = foundIndex;
+        }
+
+        public int getFoundFirstIndex() {
+            return _foundFirstIndex;
+        }
+
+        public void setFoundFirstIndex(int foundFirstIndex) {
+            this._foundFirstIndex = foundFirstIndex;
+        }
+    }
+
+    protected String extractInvocationExpression(Method method) {
+        final Class<?> declaringClass = method.getDeclaringClass();
+        return buildEntityExpressionFromDaoName(declaringClass.getSimpleName());
+
+        // Commented out because of still thinking. 
+        // final Field field;
+        // try {
+        //     field = declaringClass.getField("INVOCATION_NAME");
+        //     final String invocationExpression = (String)field.get(null);
+        //     return invocationExpression;
+        // } catch (Exception ignored) {
+        //     return buildEntityExpressionFromDaoName(declaringClass.getName());
+        // }
+    }
+
+    protected String buildEntityExpressionFromDaoName(String daoName) {
+        // Commented out because of still thinking.
+        // if (daoName.endsWith("Dao")) {
+        //     daoName = daoName.substring(0, daoName.length() - "Dao".length());
+        // }
+        return removeBasePrefixFromSimpleClassName(daoName);
+    }
+
+    protected String removeBasePrefixFromSimpleClassName(String simpleClassName) {
+        if (!simpleClassName.startsWith("Bs")) {
+            return simpleClassName;
+        }
+        final int prefixLength = "Bs".length();
+        if (!Character.isUpperCase(simpleClassName.substring(prefixLength)
+                .charAt(0))) {
+            return simpleClassName;
+        }
+        if (simpleClassName.length() <= prefixLength) {
+            return simpleClassName;
+        }
+        return "" + simpleClassName.substring(prefixLength);
+    }
+
+    // ===================================================================================
+    //                                                                      Log SqlCommand
+    //                                                                      ==============
+    protected void logSqlCommand(
+            org.aopalliance.intercept.MethodInvocation invocation,
+            org.seasar.dao.SqlCommand cmd, long beforeCmd, long afterCmd) {
+        log("SqlCommand Initialization Cost: ["
+                + TraceViewUtil.convertToPerformanceView(afterCmd - beforeCmd)
+                + "]");
+    }
+
+    protected void assertRetType(Class<?> retType, Object ret) {
+        if (java.util.List.class.isAssignableFrom(retType)) {
+            if (ret != null && !(ret instanceof java.util.List)) {
+                String msg = "The retType is difference from actual return: ";
+                msg = msg + "retType=" + retType + " ret.getClass()="
+                        + ret.getClass() + " ref=" + ret;
+                throw new IllegalStateException(msg);
+            }
+        } else if (Entity.class.isAssignableFrom(retType)) {
+            if (ret != null && !(ret instanceof Entity)) {
+                String msg = "The retType is difference from actual return: ";
+                msg = msg + "retType=" + retType + " ret.getClass()="
+                        + ret.getClass() + " ref=" + ret;
+                throw new IllegalStateException(msg);
+            }
+        }
+    }
+
+    // ===================================================================================
+    //                                                                          Log Return
+    //                                                                          ==========
+    protected void logReturn(
+            org.aopalliance.intercept.MethodInvocation invocation,
+            Class<?> retType, Object ret, long before, long after)
+            throws Throwable {
+        try {
+            final String daoResultPrefix = "===========/ ["
+                    + TraceViewUtil.convertToPerformanceView(after - before)
+                    + " - ";
+            if (java.util.List.class.isAssignableFrom(retType)) {
+                if (ret == null) {
+                    log(daoResultPrefix + "Selected list: null]");
+                } else {
+                    final java.util.List<?> ls = (java.util.List<?>) ret;
+                    if (ls.isEmpty()) {
+                        log(daoResultPrefix + "Selected list: 0]");
+                    } else if (ls.size() == 1 && ls.get(0) instanceof Number) {
+                        log(daoResultPrefix + "Selected count: " + ls.get(0)
+                                + "]");
+                    } else {
+                        log(daoResultPrefix + "Selected list: " + ls.size()
+                                + " first=" + ls.get(0) + "]");
+                    }
+                }
+            } else if (Entity.class.isAssignableFrom(retType)) {
+                if (ret == null) {
+                    log(daoResultPrefix + "Selected entity: null" + "]");
+                } else {
+                    final Entity entity = (Entity) ret;
+                    log(daoResultPrefix + "Selected entity: " + entity + "]");
+                }
+            } else if (Entity.class.isAssignableFrom(retType)) {
+                if (ret == null) {
+                    log(daoResultPrefix + "Selected entity: null" + "]");
+                } else {
+                    final Entity entity = (Entity) ret;
+                    log(daoResultPrefix + "Selected entity: " + entity + "]");
+                }
+            } else if (int[].class.isAssignableFrom(retType)) {
+                if (ret == null) {
+                    log(daoResultPrefix + "Selected entity: null" + "]");
+                } else {
+                    final int[] resultArray = (int[]) ret;
+                    if (resultArray.length == 0) {
+                        log(daoResultPrefix + "All updated count: 0]");
+                    } else {
+                        final StringBuilder sb = new StringBuilder();
+                        boolean resultExpressionScope = true;
+                        int resultCount = 0;
+                        int loopCount = 0;
+                        for (int element : resultArray) {
+                            resultCount = resultCount + element;
+                            if (resultExpressionScope) {
+                                if (loopCount <= 10) {
+                                    if (sb.length() == 0) {
+                                        sb.append(element);
+                                    } else {
+                                        sb.append(",").append(element);
+                                    }
+                                } else {
+                                    sb.append(",").append("...");
+                                    resultExpressionScope = false;
+                                }
+                            }
+                            ++loopCount;
+                        }
+                        sb.insert(0, "{").append("}");
+                        log(daoResultPrefix + "All updated count: "
+                                + resultCount + " result=" + sb + "]");
+                    }
+                }
+            } else {
+                if (isSelectCountIgnoreFetchScopeMethod(invocation)) {
+                    log(daoResultPrefix + "Selected count: " + ret + "]");
+                } else {
+                    log(daoResultPrefix + "Result: " + ret + "]");
+                }
+            }
+            log(" ");
+        } catch (Exception e) {
+            String msg = "Result object debug threw the exception: methodName=";
+            msg = msg + invocation.getMethod().getName() + " retType="
+                    + retType;
+            msg = msg + " ret=" + ret;
+            _log.warn(msg, e);
+            throw e;
+        }
+    }
+
+    // ===================================================================================
+    //                                                                    Pre Post Process
+    //                                                                    ================
+    // -----------------------------------------------------
+    //                                            OutsideSql
+    //                                            ----------
+    protected void preprocessOutsideSql(MethodInvocation invocation) {
+        final Class<jp.sf.pal.announcement.db.allcommon.annotation.OutsideSql> outsideSqlType = jp.sf.pal.announcement.db.allcommon.annotation.OutsideSql.class;
+        final jp.sf.pal.announcement.db.allcommon.annotation.OutsideSql outsideSql = invocation
+                .getMethod().getAnnotation(outsideSqlType);
+
+        // Traditional OutsideSql
+        if (outsideSql != null
+                && (outsideSql.dynamicBinding() || outsideSql.offsetByCursor()
+                        || outsideSql.offsetByCursor() || outsideSql
+                        .limitByCursor())) {
+            final OutsideSqlContext outsideSqlContext = new OutsideSqlContext();
+            outsideSqlContext.setDynamicBinding(outsideSql.dynamicBinding());
+            outsideSqlContext.setOffsetByCursorForcedly(outsideSql
+                    .offsetByCursor());
+            outsideSqlContext.setLimitByCursorForcedly(outsideSql
+                    .limitByCursor());
+            OutsideSqlContext.setOutsideSqlContextOnThread(outsideSqlContext);
+
+            // Set up fetchNarrowingBean.
+            final Object[] args = invocation.getArguments();
+            if (args == null || args.length == 0) {
+                return;
+            }
+            if (FetchNarrowingBeanContext.isTheTypeFetchNarrowingBean(args[0]
+                    .getClass())) {
+                FetchNarrowingBeanContext
+                        .setFetchNarrowingBeanOnThread((FetchNarrowingBean) args[0]);
+            }
+            return;
+        }
+
+        // Specified OutsideSql
+        if (OutsideSqlDao.class.isAssignableFrom(getTargetClass(invocation))) {
+            if (isOutsideSqlDaoMethodSelect(invocation)) {
+                setupOutsideSqlContextSelect(invocation);
+            } else {
+                setupOutsideSqlContextExecute(invocation);
+            }
+            return;
+        }
+    }
+
+    // - - - - - - - - - - - -
+    //                  Select
+    //                   - - -
+    protected boolean isOutsideSqlDaoMethodSelect(MethodInvocation invocation) {
+        return invocation.getMethod().getName().startsWith("select");
+    }
+
+    protected void setupOutsideSqlContextSelect(MethodInvocation invocation) {
+        final Object[] args = invocation.getArguments();
+        if (args.length != 4) {
+            String msg = "Internal Error! OutsideSqlDao.selectXxx() should have 4 arguements: args.length="
+                    + args.length;
+            throw new IllegalStateException(msg);
+        }
+        final String path = (String) args[0];
+        final Object pmb = args[1];
+        final OutsideSqlOption option = (OutsideSqlOption) args[2];
+        final Object resultTypeSpecification = args[3];
+        final OutsideSqlContext outsideSqlContext = new OutsideSqlContext();
+        outsideSqlContext.setDynamicBinding(option.isDynamicBinding());
+        outsideSqlContext.setOffsetByCursorForcedly(option.isAutoPaging());
+        outsideSqlContext.setLimitByCursorForcedly(option.isAutoPaging());
+        outsideSqlContext.setOutsideSqlPath(path);
+        outsideSqlContext.setParameterBean(pmb);
+        outsideSqlContext.setResultTypeSpecification(resultTypeSpecification);
+        outsideSqlContext.setMethodName(invocation.getMethod().getName());
+        outsideSqlContext.setStatementConfig(option.getStatementConfig());
+        OutsideSqlContext.setOutsideSqlContextOnThread(outsideSqlContext);
+
+        // Set up fetchNarrowingBean.
+        setupOutsideSqlFetchNarrowingBean(pmb, option);
+    }
+
+    // - - - - - - - - - - - -
+    //                 Execute
+    //                 - - - -
+    protected void setupOutsideSqlContextExecute(MethodInvocation invocation) {
+        final Object[] args = invocation.getArguments();
+        if (args.length != 3) {
+            String msg = "Internal Error! OutsideSqlDao.execute() should have 3 arguements: args.length="
+                    + args.length;
+            throw new IllegalStateException(msg);
+        }
+        final String path = (String) args[0];
+        final Object pmb = args[1];
+        final OutsideSqlOption option = (OutsideSqlOption) args[2];
+        final OutsideSqlContext outsideSqlContext = new OutsideSqlContext();
+        outsideSqlContext.setDynamicBinding(option.isDynamicBinding());
+        outsideSqlContext.setOffsetByCursorForcedly(option.isAutoPaging());
+        outsideSqlContext.setLimitByCursorForcedly(option.isAutoPaging());
+        outsideSqlContext.setOutsideSqlPath(path);
+        outsideSqlContext.setParameterBean(pmb);
+        outsideSqlContext.setMethodName(invocation.getMethod().getName());
+        outsideSqlContext.setStatementConfig(option.getStatementConfig());
+        OutsideSqlContext.setOutsideSqlContextOnThread(outsideSqlContext);
+
+        // Set up fetchNarrowingBean.
+        setupOutsideSqlFetchNarrowingBean(pmb, option);
+    }
+
+    // - - - - - - - - - - - -
+    //                  Common
+    //                   - - -
+    protected void setupOutsideSqlFetchNarrowingBean(Object pmb,
+            OutsideSqlOption option) {
+        if (pmb == null
+                || !FetchNarrowingBeanContext.isTheTypeFetchNarrowingBean(pmb
+                        .getClass())) {
+            return;
+        }
+        final FetchNarrowingBean fetchNarrowingBean = (FetchNarrowingBean) pmb;
+        if (option.isManualPaging()) {
+            fetchNarrowingBean.ignoreFetchNarrowing();
+        }
+        FetchNarrowingBeanContext
+                .setFetchNarrowingBeanOnThread(fetchNarrowingBean);
+    }
+
+    // -----------------------------------------------------
+    //                                         ConditionBean
+    //                                         -------------
+    /**
+     * Pre-process conditionBean.
+     * <p>
+     * If this method is condition bean select target, make dynamic SQL.
+     * Else nothing.
+     * @param invocation Method invocation. (NotNull)
+     * @param cmd SqlCommand. (NotNull)
+     * @return ConditionBean. (Nullable)
+     */
+    protected ConditionBean preprocessConditionBean(
+            org.aopalliance.intercept.MethodInvocation invocation,
+            org.seasar.dao.SqlCommand cmd) {
+        final OutsideSqlContext outsideSqlContext = getOutsideSqlContext();
+        if (outsideSqlContext != null) {
+            return null; // Because it has already finished setting up fetchNarrowingBean for outsideSql here.
+        }
+        final ConditionBean cb;
+        {
+            final Object[] args = invocation.getArguments();
+            if (args == null || args.length == 0) {
+                return null;
+            }
+            final Object arg0 = args[0];
+            if (arg0 == null) {
+                return null;
+            }
+            if (!ConditionBeanContext.isTheTypeConditionBean(arg0.getClass())) {// The argument is not condition-bean...
+                if (FetchNarrowingBeanContext.isTheTypeFetchNarrowingBean(arg0
+                        .getClass())
+                        && !isSelectCountIgnoreFetchScopeMethod(invocation)) {
+                    // Fetch-narrowing-bean and Not select count!
+                    FetchNarrowingBeanContext
+                            .setFetchNarrowingBeanOnThread((FetchNarrowingBean) arg0);
+                }
+                return null;
+            }
+            cb = (ConditionBean) arg0;
+        }
+
+        if (!(cmd instanceof S2DaoSelectDynamicCommand)) {// The argument is condition-bean, but this method use outer-sql-file...
+            FetchNarrowingBeanContext.setFetchNarrowingBeanOnThread(cb);
+            return null;
+        }
+
+        if (isSelectCountIgnoreFetchScopeMethod(invocation)) {
+            cb.xsetupSelectCountIgnoreFetchScope();
+        } else {
+            FetchNarrowingBeanContext.setFetchNarrowingBeanOnThread(cb);
+        }
+
+        ConditionBeanContext.setConditionBeanOnThread(cb);
+        return cb;
+    }
+
+    /**
+     * Post-process condition-bean.
+     * @param invocation Method invocation. (NotNull)
+     * @param cb Condition-bean. (Nullable)
+     */
+    protected void postprocessConditionBean(
+            org.aopalliance.intercept.MethodInvocation invocation,
+            ConditionBean cb) {
+        if (cb == null) {
+            return;
+        }
+        if (isSelectCountIgnoreFetchScopeMethod(invocation)) {
+            cb.xafterCareSelectCountIgnoreFetchScope();
+        }
+    }
+
+    // -----------------------------------------------------
+    //                                    Clear Thread Local
+    //                                    ------------------
+    protected void clearThreadLocal() {
+        if (OutsideSqlContext.isExistOutsideSqlContextOnThread()) {
+            OutsideSqlContext.clearOutsideSqlContextOnThread();
+        }
+        if (FetchNarrowingBeanContext.isExistFetchNarrowingBeanOnThread()) {
+            // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+            // Because there is possible that fetch narrowing has been ignored for manualPaging of outsideSql.
+            // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+            FetchNarrowingBeanContext.getFetchNarrowingBeanOnThread()
+                    .restoreIgnoredFetchNarrowing();
+
+            FetchNarrowingBeanContext.clearFetchNarrowingBeanOnThread();
+        }
+        if (ConditionBeanContext.isExistConditionBeanOnThread()) {
+            ConditionBeanContext.clearConditionBeanOnThread();
+        }
+        if (InternalMapContext.isExistInternalMapContextOnThread()) {
+            InternalMapContext.clearInternalMapContextOnThread();
+        }
+    }
+
+    // ===================================================================================
+    //                                                                      Context Helper
+    //                                                                      ==============
+    protected OutsideSqlContext getOutsideSqlContext() {
+        if (!OutsideSqlContext.isExistOutsideSqlContextOnThread()) {
+            return null;
+        }
+        return OutsideSqlContext.getOutsideSqlContextOnThread();
+    }
+
+    protected boolean isSpecifiedOutsideSql() {
+        final OutsideSqlContext outsideSqlContext = getOutsideSqlContext();
+        return outsideSqlContext != null
+                && outsideSqlContext.isSpecifiedOutsideSql();
+    }
+
+    // ===================================================================================
+    //                                                                       Determination
+    //                                                                       =============
+    /**
+     * Is select count ignore-fetch-scope method?
+     * @param invocation Method invocation. (NotNull)
+     * @return Determination.
+     */
+    protected boolean isSelectCountIgnoreFetchScopeMethod(
+            org.aopalliance.intercept.MethodInvocation invocation) {
+        final String name = invocation.getMethod().getName();
+        return name.startsWith("readCount") || name.startsWith("selectCount");
+    }
+
+    // ===================================================================================
+    //                                                                      General Helper
+    //                                                                      ==============
+    /**
+     * Get the value of line separator.
+     * @return The value of line separator. (NotNull)
+     */
+    protected String getLineSeparator() {
+        return System.getProperty("line.separator");
+    }
+}
\ No newline at end of file


Property changes on: announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/s2dao/S2DaoInterceptor.java
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/s2dao/S2DaoLatestSqlProvider.java
===================================================================
--- announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/s2dao/S2DaoLatestSqlProvider.java	                        (rev 0)
+++ announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/s2dao/S2DaoLatestSqlProvider.java	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,33 @@
+package jp.sf.pal.announcement.db.allcommon.s2dao;
+
+import jp.sf.pal.announcement.db.allcommon.jdbc.LatestSqlProvider;
+import jp.sf.pal.announcement.db.allcommon.s2dao.internal.sqllog.InternalSqlLogRegistry;
+
+/**
+ * The provider of latest SQL as S2Dao. <br />
+ * This instance should be singleton. <br />
+ * 
+ * @author DBFlute(AutoGenerator)
+ */
+public class S2DaoLatestSqlProvider implements LatestSqlProvider {
+
+    /**
+     * The implementation.
+     * 
+     * @return Display SQL. (Nullable: If it was not found, returns null.)
+     */
+    public String getDisplaySql() {
+        return getLastCompleteSql();
+    }
+
+    protected String getLastCompleteSql() {
+        try {
+            return InternalSqlLogRegistry.peekCompleteSql();
+        } catch (RuntimeException ignored) {
+            return null;
+        }
+    }
+
+    public void clearSqlCache() {
+    }
+}


Property changes on: announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/s2dao/S2DaoLatestSqlProvider.java
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/s2dao/S2DaoMetaDataExtension.java
===================================================================
--- announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/s2dao/S2DaoMetaDataExtension.java	                        (rev 0)
+++ announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/s2dao/S2DaoMetaDataExtension.java	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,1563 @@
+package jp.sf.pal.announcement.db.allcommon.s2dao;
+
+import java.lang.reflect.Method;
+import java.lang.reflect.ParameterizedType;
+import java.lang.reflect.Type;
+import java.sql.DatabaseMetaData;
+import java.sql.PreparedStatement;
+import java.sql.ResultSet;
+import java.sql.SQLException;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+import java.util.Stack;
+
+import jp.sf.pal.announcement.db.allcommon.Entity;
+import jp.sf.pal.announcement.db.allcommon.InternalMapContext;
+import jp.sf.pal.announcement.db.allcommon.annotation.OutsideSql;
+import jp.sf.pal.announcement.db.allcommon.cbean.ConditionBean;
+import jp.sf.pal.announcement.db.allcommon.cbean.ConditionBeanContext;
+import jp.sf.pal.announcement.db.allcommon.cbean.outsidesql.OutsideSqlContext;
+import jp.sf.pal.announcement.db.allcommon.dbmeta.DBMeta;
+import jp.sf.pal.announcement.db.allcommon.jdbc.CursorHandler;
+import jp.sf.pal.announcement.db.allcommon.jdbc.StatementConfig;
+import jp.sf.pal.announcement.db.allcommon.s2dao.internal.rshandler.InternalBeanArrayMetaDataResultSetHandler;
+import jp.sf.pal.announcement.db.allcommon.s2dao.internal.rshandler.InternalBeanListMetaDataResultSetHandler;
+import jp.sf.pal.announcement.db.allcommon.s2dao.internal.sqlcommand.InternalDeleteAutoStaticCommand;
+import jp.sf.pal.announcement.db.allcommon.s2dao.internal.sqlcommand.InternalDeleteBatchAutoStaticCommand;
+import jp.sf.pal.announcement.db.allcommon.s2dao.internal.sqlcommand.InternalDeleteQueryAutoDynamicCommand;
+import jp.sf.pal.announcement.db.allcommon.s2dao.internal.sqlcommand.InternalInsertAutoDynamicCommand;
+import jp.sf.pal.announcement.db.allcommon.s2dao.internal.sqlcommand.InternalInsertBatchAutoStaticCommand;
+import jp.sf.pal.announcement.db.allcommon.s2dao.internal.sqlcommand.InternalUpdateAutoDynamicCommand;
+import jp.sf.pal.announcement.db.allcommon.s2dao.internal.sqlcommand.InternalUpdateBatchAutoStaticCommand;
+import jp.sf.pal.announcement.db.allcommon.s2dao.internal.sqlcommand.InternalUpdateDynamicCommand;
+import jp.sf.pal.announcement.db.allcommon.s2dao.internal.sqlcommand.InternalUpdateModifiedOnlyCommand;
+
+import org.seasar.dao.BeanAnnotationReader;
+import org.seasar.dao.BeanEnhancer;
+import org.seasar.dao.BeanMetaData;
+import org.seasar.dao.BeanMetaDataFactory;
+import org.seasar.dao.ColumnNaming;
+import org.seasar.dao.Dbms;
+import org.seasar.dao.PropertyTypeFactory;
+import org.seasar.dao.PropertyTypeFactoryBuilder;
+import org.seasar.dao.RelationPropertyType;
+import org.seasar.dao.RelationPropertyTypeFactoryBuilder;
+import org.seasar.dao.RelationRowCreator;
+import org.seasar.dao.RowCreator;
+import org.seasar.dao.SqlCommand;
+import org.seasar.dao.TableNaming;
+import org.seasar.dao.impl.BeanMetaDataImpl;
+import org.seasar.dao.impl.DaoMetaDataImpl;
+import org.seasar.dao.impl.PropertyTypeFactoryBuilderImpl;
+import org.seasar.dao.impl.RelationRowCreationResource;
+import org.seasar.dao.impl.SelectDynamicCommand;
+import org.seasar.dao.impl.UpdateAutoStaticCommand;
+import org.seasar.extension.jdbc.PropertyType;
+import org.seasar.extension.jdbc.ResultSetFactory;
+import org.seasar.extension.jdbc.ResultSetHandler;
+import org.seasar.extension.jdbc.StatementFactory;
+import org.seasar.extension.jdbc.ValueType;
+import org.seasar.extension.jdbc.impl.ConfigurableStatementFactory;
+import org.seasar.extension.jdbc.types.ValueTypes;
+import org.seasar.framework.beans.MethodNotFoundRuntimeException;
+import org.seasar.framework.beans.PropertyDesc;
+
+/**
+ * The extension of DaoMetaDataImpl for DBFlute.
+ * @author DBFlute(AutoGenerator)
+ */
+ @ SuppressWarnings("unchecked")
+public class S2DaoMetaDataExtension extends DaoMetaDataImpl {
+
+    // ===================================================================================
+    //                                                                          Definition
+    //                                                                          ==========
+    /** Log instance. */
+    private static final org.apache.commons.logging.Log _log = org.apache.commons.logging.LogFactory
+            .getLog(S2DaoMetaDataExtension.class);
+
+    // ===================================================================================
+    //                                                                           Attribute
+    //                                                                           =========
+    /** Bean enhancer. */
+    protected BeanEnhancer beanEnhancer;
+
+    /** The factory of annotation reader. */
+    protected org.seasar.dao.AnnotationReaderFactory annotationReaderFactory;
+
+    /** The naming of column. {After S2Dao-1.0.47} */
+    protected ColumnNaming columnNaming;
+
+    /** The builder of property type factory. {After S2Dao-1.0.47} */
+    protected PropertyTypeFactoryBuilder propertyTypeFactoryBuilder;
+
+    /** The builder of relation property type factory. {After S2Dao-1.0.47} */
+    protected RelationPropertyTypeFactoryBuilder relationPropertyTypeFactoryBuilder;
+
+    /** The builder of table naming. {After S2Dao-1.0.47} */
+    protected TableNaming tableNaming;
+
+    // -----------------------------------------------------
+    //                                     DBFlute Extension
+    //                                     -----------------
+    /** The config of dbflute. {Since DBFlute-0.6.2} */
+    protected StatementConfig _defaultStatementConfig;
+
+    /** The lock monitor of method initialization. */
+    protected Object _methodInitializationLockMonitor = new Object();
+
+    /** The determination of internal debug. {Since DBFlute-0.6.2} */
+    protected boolean _internalDebug;
+
+    // ===================================================================================
+    //                                                                         Constructor
+    //                                                                         ===========
+    public S2DaoMetaDataExtension() {
+    }
+
+    // ===================================================================================
+    //                                                           OutsideSql Check Override
+    //                                                           =========================
+    protected void setupMethodByAuto(Method method) {
+        final OutsideSql outsideSql = method.getAnnotation(OutsideSql.class);
+        if (outsideSql != null) {
+            String msg = "This method '" + method.getName()
+                    + "()' should use Outside Sql but the file was not found!";
+            msg = msg + " Expected sql file name is '"
+                    + method.getDeclaringClass().getSimpleName() + "_"
+                    + method.getName() + ".sql'";
+            throw new IllegalStateException(msg);
+        }
+        super.setupMethodByAuto(method);
+    }
+
+    // ===================================================================================
+    //                                                           ResultSetHandler Override
+    //                                                           =========================
+    @Override
+    protected ResultSetHandler createResultSetHandler(Method method) {
+        return this.resultSetHandlerFactory.getResultSetHandler(
+                daoAnnotationReader, beanMetaData, method);
+    }
+
+    protected ResultSetHandler createResultSetHandler(
+            BeanMetaData specifiedBeanMetaData, Method method) {
+        return this.resultSetHandlerFactory.getResultSetHandler(
+                daoAnnotationReader, specifiedBeanMetaData, method);
+    }
+
+    // ===================================================================================
+    //                                                           SqlCommand Setup Override
+    //                                                           =========================
+    @Override
+    protected void setupSqlCommand() {
+        // Do nothing for lazy initializing!
+    }
+
+    @Override
+    public SqlCommand getSqlCommand(String methodName)
+            throws MethodNotFoundRuntimeException {
+        SqlCommand cmd = (SqlCommand) sqlCommands.get(methodName);
+        if (cmd != null) {
+            return cmd;
+        }
+        synchronized (_methodInitializationLockMonitor) {
+            cmd = (SqlCommand) sqlCommands.get(methodName);
+            if (cmd != null) {
+                if (_log.isDebugEnabled()) {
+                    _log
+                            .debug("...Getting sqlCommand as cache because the previous thread have already initilized.");
+                }
+                return cmd;
+            }
+            if (_log.isDebugEnabled()) {
+                _log.debug("...Initializing sqlCommand.");
+            }
+            cmd = initializeSqlCommand(methodName);
+        }
+        return cmd;
+    }
+
+    protected SqlCommand initializeSqlCommand(String methodName)
+            throws MethodNotFoundRuntimeException {
+        if (OutsideSqlContext.isExistOutsideSqlContextOnThread()) {
+            final OutsideSqlContext outsideSqlContext = OutsideSqlContext
+                    .getOutsideSqlContextOnThread();
+            if (outsideSqlContext != null
+                    && outsideSqlContext.isSpecifiedOutsideSql()) {
+                return initializeSpecifiedOutsideSqlCommand(methodName,
+                        outsideSqlContext);
+            }
+        }
+        final Method[] methods = daoBeanDesc.getMethods(methodName);
+        if (methods.length == 1
+                && org.seasar.framework.util.MethodUtil.isAbstract(methods[0])) {
+            setupMethod(methods[0]);
+        }
+        final SqlCommand cmd = (SqlCommand) sqlCommands.get(methodName);
+        if (cmd != null) {
+            return cmd;
+        }
+        throw new MethodNotFoundRuntimeException(daoClass, methodName, null);
+    }
+
+    protected SqlCommand initializeSpecifiedOutsideSqlCommand(
+            String sqlCommandKey, OutsideSqlContext outsideSqlContext)
+            throws MethodNotFoundRuntimeException {
+        final Method[] methods = daoBeanDesc.getMethods(outsideSqlContext
+                .getMethodName());// By real method name.
+        if (methods.length == 1
+                && org.seasar.framework.util.MethodUtil.isAbstract(methods[0])) {
+            final Method method = methods[0];
+            if (isOutsideSqlDaoMethodSelect(method)) {
+                setupSpecifiedOutsideSqlSelectCommand(sqlCommandKey, method,
+                        outsideSqlContext);
+            } else {
+                setupSpecifiedOutsideSqlExecuteCommand(sqlCommandKey, method,
+                        outsideSqlContext);
+            }
+        }
+        final SqlCommand cmd = (SqlCommand) sqlCommands.get(sqlCommandKey);
+        if (cmd != null) {
+            return cmd;
+        }
+        String msg = "Internal Error! The sql-command is not found:";
+        msg = msg + " sqlCommandKey=" + sqlCommandKey;
+        msg = msg + " sqlCommands=" + sqlCommands;
+        throw new IllegalStateException(msg);
+    }
+
+    protected boolean isOutsideSqlDaoMethodSelect(Method method) {
+        return method.getName().startsWith("select");
+    }
+
+    // ===================================================================================
+    //                                             Customize SelectDynamicCommand Creation
+    //                                             =======================================
+    protected S2DaoSelectDynamicCommand createCustomizeSelectDynamicCommand(
+            org.seasar.extension.jdbc.ResultSetHandler handler) {
+        final ResultSetFactory customizeResultSetFactory = createCustomizeResultSetFactory();
+        final StatementFactory customizeStatementFactory = createCustomizeStatememtFactory();
+        return new S2DaoSelectDynamicCommand(dataSource,
+                customizeStatementFactory, handler, customizeResultSetFactory);
+    }
+
+    protected ResultSetFactory createCustomizeResultSetFactory() {
+        return new jp.sf.pal.announcement.db.allcommon.s2dao.FetchNarrowingResultSetFactory();
+    }
+
+    protected StatementFactory createCustomizeStatememtFactory() {
+        return new StatementFactory() {
+            public PreparedStatement createPreparedStatement(
+                    java.sql.Connection con, String sql) {
+                try {
+                    final StatementConfig config = findStatementConfigOnThread();
+                    ;
+                    final int resultSetType;
+                    if (config != null && config.hasResultSetType()) {
+                        resultSetType = config.getResultSetType();
+                    } else if (_defaultStatementConfig != null
+                            && _defaultStatementConfig.hasResultSetType()) {
+                        resultSetType = _defaultStatementConfig
+                                .getResultSetType();
+                    } else {
+                        resultSetType = java.sql.ResultSet.TYPE_SCROLL_INSENSITIVE;
+                    }
+                    final int resultSetConcurrency = java.sql.ResultSet.CONCUR_READ_ONLY;
+                    if (_internalDebug) {
+                        _log.debug("...Creating prepareStatement(sql, "
+                                + resultSetType + ", " + resultSetConcurrency
+                                + ")");
+                    }
+                    final PreparedStatement ps = con.prepareStatement(sql,
+                            resultSetType, resultSetConcurrency);
+                    if (config != null && config.hasStatementOptions()) {
+                        if (_internalDebug) {
+                            _log
+                                    .debug("...Setting statement config as request:"
+                                            + config);
+                        }
+                        reflectStatementOptions(config, ps);
+                    } else {
+                        reflectDefaultOptionsToStatementIfNeeds(ps);
+                    }
+                    return ps;
+                } catch (java.sql.SQLException e) {
+                    throw new org.seasar.framework.exception.SQLRuntimeException(
+                            e);
+                }
+            }
+
+            public java.sql.CallableStatement createCallableStatement(
+                    java.sql.Connection con, String sql) {
+                return org.seasar.extension.jdbc.util.ConnectionUtil
+                        .prepareCall(con, sql);
+            }
+
+            protected StatementConfig findStatementConfigOnThread() {
+                final StatementConfig config;
+                if (ConditionBeanContext.isExistConditionBeanOnThread()) {
+                    final ConditionBean cb = ConditionBeanContext
+                            .getConditionBeanOnThread();
+                    config = cb.getStatementConfig();
+                } else if (OutsideSqlContext.isExistOutsideSqlContextOnThread()) {
+                    final OutsideSqlContext context = OutsideSqlContext
+                            .getOutsideSqlContextOnThread();
+                    config = context.getStatementConfig();
+                } else {
+                    config = null;
+                }
+                return config;
+            }
+
+            protected void reflectDefaultOptionsToStatementIfNeeds(
+                    PreparedStatement ps) {
+                if (_defaultStatementConfig != null
+                        && _defaultStatementConfig.hasStatementOptions()) {
+                    if (_internalDebug) {
+                        _log.debug("...Setting statement config as default:"
+                                + _defaultStatementConfig);
+                    }
+                    reflectStatementOptions(_defaultStatementConfig, ps);
+                    return;
+                }
+                if (!(statementFactory instanceof ConfigurableStatementFactory)) {
+                    return;
+                }
+                final ConfigurableStatementFactory confSf = (ConfigurableStatementFactory) statementFactory;
+                final Class confSfType = ConfigurableStatementFactory.class;
+                final String confMethodName = "configurePreparedStatement";
+                final Class[] confMethodParameterType = new Class[] { PreparedStatement.class };
+                try {
+                    final Method confMethod = confSfType.getDeclaredMethod(
+                            confMethodName, confMethodParameterType);
+                    confMethod.setAccessible(true);// Because the method is protected!
+                    if (_internalDebug) {
+                        _log.debug("...Invoking configurableStatementFactory."
+                                + confMethodName + "(ps)");
+                    }
+                    confMethod.invoke(confSf, new Object[] { ps });
+                    return;
+                } catch (Exception e) {
+                    String msg = "The configuration of statement factory threw exception:";
+                    msg = msg + " class=" + confSfType + " method="
+                            + confMethodName
+                            + " parameter=java.sql.PreparedStatement";
+                    throw new RuntimeException(msg, e);
+                }
+            }
+
+            protected void reflectStatementOptions(StatementConfig config,
+                    PreparedStatement ps) {
+                try {
+                    if (config.hasQueryTimeout()) {
+                        ps.setQueryTimeout(config.getQueryTimeout());
+                    }
+                    if (config.hasFetchSize()) {
+                        ps.setFetchSize(config.getFetchSize());
+                    }
+                    if (config.hasMaxRows()) {
+                        ps.setMaxRows(config.getMaxRows());
+                    }
+                } catch (SQLException e) {
+                    throw new org.seasar.framework.exception.SQLRuntimeException(
+                            e);
+                }
+            }
+        };
+    }
+
+    // ===================================================================================
+    //                                                              ConditionBean Override
+    //                                                              ======================
+    @Override
+    protected void setupSelectMethodByAuto(final Method method) {
+        final ResultSetHandler handler = createResultSetHandler(method);
+        final String[] argNames = daoAnnotationReader.getArgNames(method);
+        final String query = daoAnnotationReader.getQuery(method);
+        final SqlCommand cmd;
+        if (query != null && !startsWithOrderBy(query)) {
+            cmd = setupInternalQuerySelectMethodByAuto(method, handler,
+                    argNames, query);
+        } else {
+            cmd = setupInternalNonQuerySelectMethodByAuto(method, handler,
+                    argNames, query);
+        }
+        putSqlCommand(method.getName(), cmd);
+    }
+
+    protected SelectDynamicCommand setupInternalQuerySelectMethodByAuto(
+            final Method method, final ResultSetHandler handler,
+            final String[] argNames, final String query) {
+        final Class[] types = method.getParameterTypes();
+        final SelectDynamicCommand cmd = createSelectDynamicCommand(handler,
+                query);
+        cmd.setArgNames(argNames);
+        cmd.setArgTypes(types);
+        return cmd;
+    }
+
+    protected SqlCommand setupInternalNonQuerySelectMethodByAuto(
+            final Method method, final ResultSetHandler handler,
+            final String[] argNames, final String query) {
+        if (isAutoSelectSqlByDto(method, argNames)) {
+            return setupInternalNonQuerySelectMethodByDto(method, handler,
+                    argNames, query);
+        } else {
+            return setupNonQuerySelectMethodByArgs(method, handler, argNames,
+                    query);
+        }
+    }
+
+    protected SqlCommand setupInternalNonQuerySelectMethodByDto(Method method,
+            ResultSetHandler handler, String[] argNames, String query) {
+        Class[] types = method.getParameterTypes();
+        Class clazz = types[0];
+        // /----------------------------------------------------- [MyExtension]
+        if (!ConditionBeanContext.isTheTypeConditionBean(clazz)) {
+            return super.setupNonQuerySelectMethodByDto(method, handler,
+                    argNames, query);
+        }
+        argNames = new String[] { "dto" };
+        final S2DaoSelectDynamicCommand cmd = createCustomizeSelectDynamicCommand(handler);
+        cmd.setArgNames(argNames);
+        cmd.setArgTypes(types);
+        // -----------/
+        return cmd;
+    }
+
+    // ===================================================================================
+    //                                       Insert and Update and Delete By Auto Override
+    //                                       =============================================
+    // -----------------------------------------------------
+    //                                                Insert
+    //                                                ------
+    @Override
+    protected void setupInsertMethodByAuto(final Method method) {
+        checkAutoUpdateMethod(method);
+        final String[] propertyNames = getPersistentPropertyNames(method);
+        final SqlCommand command;
+        if (isUpdateSignatureForBean(method)) {
+            final InternalInsertAutoDynamicCommand cmd = new InternalInsertAutoDynamicCommand();
+            cmd.setBeanMetaData(getBeanMetaData());
+            cmd.setDataSource(dataSource);
+
+            // It is unnecessary for DBFlute!
+            // cmd.setNotSingleRowUpdatedExceptionClass(getNotSingleRowUpdatedExceptionClass(method));
+
+            cmd.setPropertyNames(propertyNames);
+            cmd.setStatementFactory(statementFactory);
+            cmd.setCheckSingleRowUpdate(isCheckSingleRowUpdate(method));
+            command = cmd;
+        } else {
+            boolean returningRows = false;
+            if (int[].class.isAssignableFrom(method.getReturnType())) {
+                returningRows = true;
+            }
+            final InternalInsertBatchAutoStaticCommand cmd = new InternalInsertBatchAutoStaticCommand(
+                    dataSource, statementFactory, getBeanMetaData(),
+                    propertyNames, returningRows);
+            command = cmd;
+        }
+        putSqlCommand(method.getName(), command);
+    }
+
+    // -----------------------------------------------------
+    //                                                Update
+    //                                                ------
+    @Override
+    protected void setupUpdateMethodByAuto(final Method method) {
+        checkAutoUpdateMethod(method);
+        final String[] propertyNames = getPersistentPropertyNames(method);
+        SqlCommand cmd;
+        if (isUpdateSignatureForBean(method)) {
+            if (isUnlessNull(method.getName())) {
+                cmd = createInternalUpdateAutoDynamicCommand(method,
+                        propertyNames);
+            } else if (isModifiedOnly(method.getName())) {
+                cmd = createInternalUpdateModifiedOnlyCommand(method,
+                        propertyNames);
+            } else {
+                cmd = createInternalUpdateAutoStaticCommand(method,
+                        propertyNames);
+            }
+        } else {
+            boolean returningRows = false;
+            if (int[].class.isAssignableFrom(method.getReturnType())) {
+                returningRows = true;
+            }
+            cmd = createInternalUpdateBatchAutoStaticCommand(method,
+                    propertyNames, returningRows);
+        }
+        putSqlCommand(method.getName(), cmd);
+    }
+
+    protected UpdateAutoStaticCommand createInternalUpdateAutoStaticCommand(
+            final Method method, final String[] propertyNames) {
+        final UpdateAutoStaticCommand cmd = new UpdateAutoStaticCommand(
+                dataSource, statementFactory, beanMetaData, propertyNames);
+        cmd.setCheckSingleRowUpdate(isCheckSingleRowUpdate(method));
+        return cmd;
+    }
+
+    protected InternalUpdateAutoDynamicCommand createInternalUpdateAutoDynamicCommand(
+            Method method, String[] propertyNames) {
+        final InternalUpdateAutoDynamicCommand cmd = newUpdateAutoDynamicCommand(
+                dataSource, statementFactory);
+        cmd.setBeanMetaData(createBeanMetaData4UpdateDeleteByAuto(method));// Extension Point!
+        cmd.setPropertyNames(propertyNames);
+        cmd.setCheckSingleRowUpdate(!isNonstrictMethod(method));
+
+        // It is unnecessary for DBFlute!
+        // cmd.setNotSingleRowUpdatedExceptionClass(getNotSingleRowUpdatedExceptionClass(method));
+
+        return cmd;
+    }
+
+    protected InternalUpdateAutoDynamicCommand newUpdateAutoDynamicCommand(
+            javax.sql.DataSource ds,
+            org.seasar.extension.jdbc.StatementFactory sf) {
+        return new InternalUpdateAutoDynamicCommand(ds, sf);
+    }
+
+    protected InternalUpdateModifiedOnlyCommand createInternalUpdateModifiedOnlyCommand(
+            final Method method, final String[] propertyNames) {
+        final InternalUpdateModifiedOnlyCommand cmd = newInternalUpdateModifiedOnlyCommand(
+                dataSource, statementFactory);
+        cmd.setBeanMetaData(createBeanMetaData4UpdateDeleteByAuto(method));// Extension Point!
+        cmd.setPropertyNames(propertyNames);
+        cmd.setCheckSingleRowUpdate(!isNonstrictMethod(method));
+
+        // It is unnecessary for DBFlute!
+        // cmd.setNotSingleRowUpdatedExceptionClass(getNotSingleRowUpdatedExceptionClass(method));
+
+        return cmd;
+    }
+
+    protected InternalUpdateModifiedOnlyCommand newInternalUpdateModifiedOnlyCommand(
+            javax.sql.DataSource ds,
+            org.seasar.extension.jdbc.StatementFactory sf) {
+        return new InternalUpdateModifiedOnlyCommand(ds, sf);
+    }
+
+    protected InternalUpdateBatchAutoStaticCommand createInternalUpdateBatchAutoStaticCommand(
+            final Method method, final String[] propertyNames,
+            boolean returningRows) {
+        return new InternalUpdateBatchAutoStaticCommand(dataSource,
+                statementFactory,
+                createBeanMetaData4UpdateDeleteByAuto(method), propertyNames,
+                returningRows) {
+            @Override
+            public Object execute(Object[] args) {
+                final Object result = super.execute(args);
+                handleBatchUpdateResultWithOptimisticLock(args, result, method);
+                return result;
+            }
+        };
+    }
+
+    protected void handleBatchUpdateResultWithOptimisticLock(Object[] args,
+            Object result, Method method) {
+        if (args.length == 0) {
+            return;// for Safety!
+        }
+        if (result instanceof int[]) {
+            final int[] updatedCountArray = (int[]) result;
+            int index = 0;
+            for (int updatedCount : updatedCountArray) {
+                if (updatedCount == 0) {
+                    if (args.length <= index) {
+                        return;// for Safety!
+                    }
+                    if (isNonstrictMethod(method)) {
+                        throw new jp.sf.pal.announcement.db.allcommon.exception.EntityAlreadyDeletedException(
+                                "The entity=" + args[index]);
+                    } else {
+                        throw new jp.sf.pal.announcement.db.allcommon.exception.EntityAlreadyUpdatedException(
+                                args[index], updatedCount);
+                    }
+                }
+            }
+        }
+    }
+
+    // -----------------------------------------------------
+    //                                                Delete
+    //                                                ------
+    @Override
+    protected void setupDeleteMethodByAuto(final Method method) {
+        if (isFirstArgumentConditionBean(method)) {
+            final SqlCommand cmd = new InternalDeleteQueryAutoDynamicCommand(
+                    dataSource, statementFactory);
+            putSqlCommand(method.getName(), cmd);
+            return;
+        }
+        checkAutoUpdateMethod(method);
+        final String[] propertyNames = getPersistentPropertyNames(method);
+        final SqlCommand cmd;
+        if (isUpdateSignatureForBean(method)) {
+            cmd = createInternalDeleteAutoStaticCommand(method, propertyNames);
+        } else {
+            boolean returningRows = false;
+            if (int[].class.isAssignableFrom(method.getReturnType())) {
+                returningRows = true;
+            }
+            cmd = createInternalDeleteBatchAutoStaticCommand(method,
+                    propertyNames, returningRows);
+        }
+        putSqlCommand(method.getName(), cmd);
+    }
+
+    protected InternalDeleteAutoStaticCommand createInternalDeleteAutoStaticCommand(
+            final Method method, final String[] propertyNames) {
+        final InternalDeleteAutoStaticCommand cmd = new InternalDeleteAutoStaticCommand(
+                dataSource, statementFactory,
+                createBeanMetaData4UpdateDeleteByAuto(method), propertyNames);
+        cmd.setCheckSingleRowUpdate(!isNonstrictMethod(method));
+        return cmd;
+    }
+
+    protected InternalDeleteBatchAutoStaticCommand createInternalDeleteBatchAutoStaticCommand(
+            final Method method, final String[] propertyNames,
+            boolean returningRows) {
+        return new InternalDeleteBatchAutoStaticCommand(dataSource,
+                statementFactory,
+                createBeanMetaData4UpdateDeleteByAuto(method), propertyNames,
+                returningRows) {
+            @Override
+            public Object execute(Object[] args) {
+                final Object result = super.execute(args);
+                handleBatchUpdateResultWithOptimisticLock(args, result, method);
+                return result;
+            }
+        };
+    }
+
+    // -----------------------------------------------------
+    //                                         Common Helper
+    //                                         -------------
+    protected BeanMetaData createBeanMetaData4UpdateDeleteByAuto(Method method) {
+        if (isNonstrictMethod(method)) {
+            return createNonConcurrencyBmdFactory().createBeanMetaData(
+                    getBeanClass());
+        } else {
+            return getBeanMetaData();
+        }
+    }
+
+    protected boolean isNonstrictMethod(Method method) {
+        return method.getName().contains("Nonstrict");
+    }
+
+    protected BeanMetaDataFactory createNonConcurrencyBmdFactory() {
+        final S2BeanMetaDataFactoryImpl nonConcurrencyBmdFactory = new S2BeanMetaDataFactoryImpl() {
+            protected BeanMetaDataImpl createBeanMetaDataImpl() {
+                return new BeanMetaDataImpl() {
+                    public boolean hasVersionNoPropertyType() {
+                        return false;
+                    }
+
+                    public boolean hasTimestampPropertyType() {
+                        return false;
+                    }
+                };
+            }
+        };
+        nonConcurrencyBmdFactory
+                .setAnnotationReaderFactory(this.annotationReaderFactory);
+        nonConcurrencyBmdFactory
+                .setPropertyTypeFactoryBuilder(this.propertyTypeFactoryBuilder);
+        nonConcurrencyBmdFactory
+                .setRelationPropertyTypeFactoryBuilder(this.relationPropertyTypeFactoryBuilder);
+        nonConcurrencyBmdFactory.setTableNaming(this.tableNaming);
+        nonConcurrencyBmdFactory.setDataSource(this.dataSource);
+        nonConcurrencyBmdFactory
+                .setDaoNamingConvention(this.daoNamingConvention);
+        nonConcurrencyBmdFactory.setBeanEnhancer(this.beanEnhancer);
+        return nonConcurrencyBmdFactory;
+    }
+
+    protected boolean isFirstArgumentConditionBean(final Method method) {
+        final Class<?>[] parameterTypes = method.getParameterTypes();
+        return parameterTypes.length > 0
+                && ConditionBean.class.isAssignableFrom(parameterTypes[0]);
+    }
+
+    // ===================================================================================
+    //                                                                 OutsideSql Override
+    //                                                                 ===================
+    // -----------------------------------------------------
+    //                                     Normal OutsideSql
+    //                                     -----------------
+    @Override
+    protected void setupSelectMethodByManual(Method method, String sql) {
+        final Class<?>[] parameterTypes = method.getParameterTypes();
+        final String[] argNames = this.daoAnnotationReader.getArgNames(method);
+        final Class<?>[] argTypes;
+        if (parameterTypes != null
+                && parameterTypes.length > 0
+                && CursorHandler.class
+                        .isAssignableFrom(parameterTypes[parameterTypes.length - 1])) {
+            argTypes = new Class<?>[parameterTypes.length - 1];
+            for (int i = 0; i < parameterTypes.length - 1; i++) {
+                argTypes[i] = parameterTypes[i];
+            }
+        } else {
+            argTypes = parameterTypes;
+        }
+        final BeanMetaData myBeanMetaData = getOutsideSqlBeanMetaData(method);
+        registerSqlCommand(method.getName(), method, sql, argNames, argTypes,
+                myBeanMetaData);
+    }
+
+    protected BeanMetaData getOutsideSqlBeanMetaData(Method method) {
+        final Class beanClass4SelectMethodByManual = getOutsideSqlDefaultBeanClass(method);
+        if (beanClass4SelectMethodByManual.equals(getBeanClass())) {
+            return getBeanMetaData();
+        }
+        return createOutsideSqlCustomizeBeanMetaDataFactory()
+                .createBeanMetaData(getOutsideSqlDefaultBeanClass(method));
+    }
+
+    // -----------------------------------------------------
+    //                                  Specified OutsideSql
+    //                                  --------------------
+    // - - - - - - - - - - - -
+    //                  Select
+    //                   - - -
+    protected void setupSpecifiedOutsideSqlSelectCommand(String sqlCommandKey,
+            Method method, OutsideSqlContext outsideSqlContext) {
+        // - - - - - - - - - - - - - - - - - - - - - - -
+        // The attribute of Specified-OutsideSqlContext.
+        // - - - - - - - - - - - - - - - - - - - - - - -
+        final String sql = outsideSqlContext.readFilteredOutsideSql(
+                getSqlFileEncoding(), dbms.getSuffix());
+        final Object pmb = outsideSqlContext.getParameterBean();
+        final Object resultTypeSpecification = outsideSqlContext
+                .getResultTypeSpecification();
+
+        // - - - - - - - - - - - - - - -
+        // The attribute of SqlCommand.
+        // - - - - - - - - - - - - - - -
+        final String[] argNames = (pmb != null ? new String[] { "pmb" }
+                : new String[] {});
+        final Class<?>[] argTypes = (pmb != null ? new Class<?>[] { pmb
+                .getClass() } : new Class<?>[] {});
+
+        // - - - - - - - - - - - - - - - -
+        // Create customized BeanMetaData.
+        // - - - - - - - - - - - - - - - -
+        final Class<?> lastestArguementType = method.getParameterTypes()[method
+                .getParameterTypes().length - 1];
+        final ResultSetHandler myResultSetHandler;
+        if (Class.class.isAssignableFrom(lastestArguementType)) {
+            // - - - - - - - -
+            // EntityHandling
+            // - - - - - - - -
+            final Class<?> customizeEntityType = (Class<?>) resultTypeSpecification;
+            final BeanMetaData myBeanMetaData = createSpecifiedOutsideSqlCustomizeBeanMetaData(customizeEntityType);
+            if (List.class.isAssignableFrom(method.getReturnType())) {
+                myResultSetHandler = createSpecifiedOutsideSqlCustomizeBeanListResultSetHandler(
+                        myBeanMetaData, customizeEntityType);
+            } else {
+                throw new UnsupportedOperationException(
+                        "The return type of method is unsupported: method.getReturnType()="
+                                + method.getReturnType());
+                // myResultSetHandler = createSpecifiedOutsideSqlCustomizeBeanResultSetHandler(myBeanMetaData, customizeEntityType);
+            }
+        } else if (CursorHandler.class.isAssignableFrom(lastestArguementType)) {
+            // - - - - - - - -
+            // CursorHandling
+            // - - - - - - - -
+            final BeanMetaData myBeanMetaData = createSpecifiedOutsideSqlCursorBeanMetaData(method);
+            myResultSetHandler = createSpecifiedOutsideSqlCursorResultSetHandler(myBeanMetaData);
+        } else {
+            String msg = "The lastestArguementType is unsupported:";
+            msg = msg + " lastestArguementType=" + lastestArguementType;
+            msg = msg + " method=" + method;
+            throw new IllegalStateException(msg);
+        }
+
+        // - - - - - - - - - - -
+        // Register Sql-Command.
+        // - - - - - - - - - - -
+        registerSqlCommand(sqlCommandKey, method, sql, argNames, argTypes,
+                myResultSetHandler);
+    }
+
+    protected BeanMetaData createSpecifiedOutsideSqlCustomizeBeanMetaData(
+            Class clazz) {
+        return createOutsideSqlCustomizeBeanMetaDataFactory()
+                .createBeanMetaData(clazz);
+    }
+
+    // [Unsupported]
+    // The return type of method is unsupported!
+    // Because the method of outside-sql that selects one entity is unnecessary!
+    //
+    //    /**
+    //     * Create the handler of result set of specified outside-sql for customize bean.
+    //     * 
+    //     * @param specifiedBeanMetaData Specified bean meta data. (NotNull)
+    //     * @param customizeEntityType The type of customize entity. (NotNull)
+    //     * @return The handler of result set. (NotNull)
+    //     */
+    //    protected ResultSetHandler createSpecifiedOutsideSqlCustomizeBeanResultSetHandler(BeanMetaData specifiedBeanMetaData, Class<?> customizeEntityType) {
+    //        final ValueType valueType = ValueTypes.getValueType(customizeEntityType);
+    //        if (valueType == null || !valueType.equals(ValueTypes.OBJECT)) {
+    //            return new org.seasar.extension.jdbc.impl.ObjectResultSetHandler();
+    //        }
+    //        return new org.seasar.dao.impl.BeanMetaDataResultSetHandler(specifiedBeanMetaData, new RowCreatorExtension(), new RelationRowCreatorExtension());
+    //    }
+
+    /**
+     * Create the handler of result set of specified outside-sql for the list of customize bean.
+     * @param specifiedBeanMetaData Specified bean meta data. (NotNull)
+     * @param customizeEntityType The type of customize entity. (NotNull)
+     * @return The handler of result set. (NotNull)
+     */
+    protected ResultSetHandler createSpecifiedOutsideSqlCustomizeBeanListResultSetHandler(
+            BeanMetaData specifiedBeanMetaData, Class<?> customizeEntityType) {
+        final ValueType valueType = ValueTypes
+                .getValueType(customizeEntityType);
+        if (valueType == null || !valueType.equals(ValueTypes.OBJECT)) {
+            return new InternalObjectListResultSetHandler(valueType);
+        }
+        return new InternalBeanListMetaDataResultSetHandler(
+                specifiedBeanMetaData, new RowCreatorExtension(),
+                new RelationRowCreatorExtension());
+    }
+
+    protected class InternalObjectListResultSetHandler implements
+            ResultSetHandler {
+        private ValueType valueType;
+
+        public InternalObjectListResultSetHandler(ValueType valueType) {
+            this.valueType = valueType;
+        }
+
+        public Object handle(ResultSet rs) throws SQLException {
+            final List<Object> ret = new ArrayList<Object>();
+            while (rs.next()) {
+                ret.add(valueType.getValue(rs, 1));
+            }
+            return ret;
+        }
+    }
+
+    protected BeanMetaData createSpecifiedOutsideSqlCursorBeanMetaData(
+            Method method) {
+        return createOutsideSqlCustomizeBeanMetaDataFactory()
+                .createBeanMetaData(getOutsideSqlDefaultBeanClass(method));
+    }
+
+    protected ResultSetHandler createSpecifiedOutsideSqlCursorResultSetHandler(
+            BeanMetaData specifiedBeanMetaData) {
+        return new org.seasar.extension.jdbc.impl.ObjectResultSetHandler();// This is dummy for cursor handling!
+    }
+
+    // - - - - - - - - - - - -
+    //                 Execute
+    //                 - - - -
+    protected void setupSpecifiedOutsideSqlExecuteCommand(String sqlCommandKey,
+            Method method, OutsideSqlContext outsideSqlContext) {
+        // - - - - - - - - - - - - - - - - - - - - - - -
+        // The attribute of Specified-OutsideSqlContext.
+        // - - - - - - - - - - - - - - - - - - - - - - -
+        final String sql = outsideSqlContext.readFilteredOutsideSql(
+                getSqlFileEncoding(), dbms.getSuffix());
+        final Object pmb = outsideSqlContext.getParameterBean();
+
+        // - - - - - - - - - - - - - - -
+        // The attribute of SqlCommand.
+        // - - - - - - - - - - - - - - -
+        final String[] argNames = (pmb != null ? new String[] { "pmb" }
+                : new String[] {});
+        final Class<?>[] argTypes = (pmb != null ? new Class<?>[] { pmb
+                .getClass() } : new Class<?>[] {});
+
+        final InternalUpdateDynamicCommand cmd = new InternalUpdateDynamicCommand(
+                dataSource, statementFactory) {
+            @Override
+            public Object execute(Object[] args) {
+                if (args.length != 3) {
+                    String msg = "Internal Error! OutsideSqlDao.execute() should have 3 arguements: args.length="
+                            + args.length;
+                    throw new IllegalStateException(msg);
+                }
+                Object arg = args[1];
+                return super.execute(new Object[] { arg });
+            }
+        };
+
+        // It is unnecessary for DBFlute!
+        // cmd.setNotSingleRowUpdatedExceptionClass(getNotSingleRowUpdatedExceptionClass(method));
+
+        registerSqlCommand(sqlCommandKey, method, sql, argNames, argTypes, cmd);
+    }
+
+    // -----------------------------------------------------
+    //                                  Common of OutsideSql
+    //                                  --------------------
+    protected BeanMetaDataFactory createOutsideSqlCustomizeBeanMetaDataFactory() {
+        final S2BeanMetaDataFactoryImpl originalBmdFactory = new S2BeanMetaDataFactoryImpl() {
+            protected BeanMetaDataImpl createBeanMetaDataImpl() {
+                return newOutsideSqlCustomizeBeanMetaDataImpl();
+            }
+        };
+        originalBmdFactory
+                .setAnnotationReaderFactory(this.annotationReaderFactory);
+        originalBmdFactory
+                .setPropertyTypeFactoryBuilder(newOutsideSqlPropertyTypeFactoryBuilderImpl());
+        originalBmdFactory
+                .setRelationPropertyTypeFactoryBuilder(this.relationPropertyTypeFactoryBuilder);
+        originalBmdFactory.setTableNaming(this.tableNaming);
+        originalBmdFactory.setDataSource(this.dataSource);
+        originalBmdFactory.setDaoNamingConvention(this.daoNamingConvention);
+        originalBmdFactory.setBeanEnhancer(this.beanEnhancer);
+        return originalBmdFactory;
+    }
+
+    protected BeanMetaDataImpl newOutsideSqlCustomizeBeanMetaDataImpl() {
+        return new OutsideSqlCustomizeBeanMetaDataImpl();
+    }
+
+    protected static class OutsideSqlCustomizeBeanMetaDataImpl extends
+            BeanMetaDataImpl {
+        // Though nothing to override, it uses original class just in case.
+    }
+
+    protected PropertyTypeFactoryBuilderImpl newOutsideSqlPropertyTypeFactoryBuilderImpl() {
+        final PropertyTypeFactoryBuilderImpl impl = new OutsideSqlPropertyTypeFactoryBuilderExtension();
+        if (columnNaming == null) {
+            String msg = "Internal Error! The columnNaming should not be null! {Failed to Injection!}";
+            throw new IllegalStateException(msg);
+        }
+        impl.setColumnNaming(columnNaming);
+        impl.setDaoNamingConvention(daoNamingConvention);
+        impl.setValueTypeFactory(valueTypeFactory);
+        return impl;
+    }
+
+    protected static class OutsideSqlPropertyTypeFactoryBuilderExtension extends
+            PropertyTypeFactoryBuilderImpl {
+        @Override
+        public PropertyTypeFactory build(Class beanClass,
+                BeanAnnotationReader beanAnnotationReader, Dbms dbms,
+                DatabaseMetaData databaseMetaData) {
+            return new S2DaoPropertyTypeFactoryBuilderExtension.FastPropertyTypeFactoryExtension(
+                    beanClass, beanAnnotationReader, valueTypeFactory,
+                    columnNaming, daoNamingConvention, dbms);
+        }
+    }
+
+    protected Class getOutsideSqlDefaultBeanClass(Method method) {
+        final Class retType = method.getReturnType();
+        if (java.util.List.class.isAssignableFrom(retType)) {
+            final Class elementType = InternalMethodUtil
+                    .getElementTypeOfListFromReturnMethod(method);
+            if (elementType != null) {
+                return elementType;
+            } else {
+                return getBeanClass();
+            }
+        } else if (retType.isArray()) {
+            return retType.getComponentType();
+        } else if (retType.isPrimitive()
+                || !ValueTypes.getValueType(retType).equals(ValueTypes.OBJECT)) {
+            return getBeanClass();
+        } else {
+            return retType;
+        }
+    }
+
+    protected void registerSqlCommand(String sqlCommandKey, Method method,
+            String sql, String[] argNames, Class[] argTypes,
+            BeanMetaData myBeanMetaData) {
+        registerSqlCommand(sqlCommandKey, method, sql, argNames, argTypes,
+                createResultSetHandler(myBeanMetaData, method));
+    }
+
+    protected void registerSqlCommand(String sqlCommandKey, Method method,
+            String sql, String[] argNames, Class[] argTypes,
+            ResultSetHandler myResultSetHandler) {
+        final S2DaoSelectDynamicCommand cmd = createCustomizeSelectDynamicCommand(myResultSetHandler);
+        registerSqlCommand(sqlCommandKey, method, sql, argNames, argTypes, cmd);
+    }
+
+    protected void registerSqlCommand(String sqlCommandKey, Method method,
+            String sql, String[] argNames, Class[] argTypes,
+            S2DaoSelectDynamicCommand cmd) {
+        cmd.setSql(sql);
+        cmd.setArgNames(argNames);
+        cmd.setArgTypes(argTypes);
+        this.sqlCommands.put(sqlCommandKey, cmd);
+    }
+
+    protected void registerSqlCommand(String sqlCommandKey, Method method,
+            String sql, String[] argNames, Class[] argTypes,
+            InternalUpdateDynamicCommand cmd) {
+        cmd.setSql(sql);
+        cmd.setArgNames(argNames);
+        cmd.setArgTypes(argTypes);
+        this.sqlCommands.put(sqlCommandKey, cmd);
+    }
+
+    // ===================================================================================
+    //                                                                     Common Handlnig
+    //                                                                     ===============
+    @Override
+    protected void putSqlCommand(String methodName, SqlCommand cmd) {
+        sqlCommands.put(methodName, cmd);
+    }
+
+    protected boolean isCheckSingleRowUpdate(Method method) {
+        return checkSingleRowUpdateForAll
+                & daoAnnotationReader.isCheckSingleRowUpdate(method);
+    }
+
+    // ===================================================================================
+    //                                                                       Vert Internal
+    //                                                                       =============
+    protected static class InternalMethodUtil {
+        public static Class getElementTypeOfListFromReturnMethod(Method method) {
+            return InternalReflectionUtil
+                    .getElementTypeOfListFromReturnType(method);
+        }
+    }
+
+    protected static class InternalReflectionUtil {
+        public static Class<?> getElementTypeOfList(final Type parameterizedList) {
+            if (!(parameterizedList instanceof ParameterizedType)) {
+                return null;
+            }
+
+            final ParameterizedType parameterizedType = ParameterizedType.class
+                    .cast(parameterizedList);
+            final Type rawType = parameterizedType.getRawType();
+            if (!(rawType instanceof Class)) {
+                return null;
+            }
+
+            final Class<?> rawClass = Class.class.cast(rawType);
+            if (!rawClass.isAssignableFrom(List.class)) {
+                return null;
+            }
+
+            final Type[] actualTypeArgument = parameterizedType
+                    .getActualTypeArguments();
+            if (actualTypeArgument == null || actualTypeArgument.length != 1) {
+                return null;
+            }
+            if (!(actualTypeArgument[0] instanceof Class)) {
+                return null;
+            }
+
+            return Class.class.cast(actualTypeArgument[0]);
+        }
+
+        public static Class<?> getElementTypeOfListFromParameterType(
+                final Method method, final int parameterPosition) {
+            final Type[] parameterTypes = method.getGenericParameterTypes();
+            return getElementTypeOfList(parameterTypes[parameterPosition]);
+        }
+
+        public static Class<?> getElementTypeOfListFromReturnType(
+                final Method method) {
+            return getElementTypeOfList(method.getGenericReturnType());
+        }
+    }
+
+    // ===================================================================================
+    //                                               ResultSetHandlerFactoryImpl Extension
+    //                                               =====================================
+    public static class ResultSetHandlerFactoryExtension extends
+            org.seasar.dao.impl.ResultSetHandlerFactoryImpl {
+        public ResultSetHandlerFactoryExtension() {
+            super();
+        }
+
+        @Override
+        protected RowCreator createRowCreator() {// [DAO-118] (2007/08/25)
+            return new RowCreatorExtension();
+        }
+
+        @Override
+        protected RelationRowCreator createRelationRowCreator() {
+            return new RelationRowCreatorExtension();
+        }
+
+        @Override
+        protected ResultSetHandler createBeanListMetaDataResultSetHandler(
+                BeanMetaData beanMetaData) {
+            return new InternalBeanListMetaDataResultSetHandler(beanMetaData,
+                    createRowCreator(), createRelationRowCreator());
+        }
+
+        @Override
+        protected ResultSetHandler createBeanArrayMetaDataResultSetHandler(
+                BeanMetaData beanMetaData) {
+            return new InternalBeanArrayMetaDataResultSetHandler(beanMetaData,
+                    createRowCreator(), createRelationRowCreator());
+        }
+    }
+
+    // ===================================================================================
+    //                                                            RowCreatorImpl Extension
+    //                                                            ========================
+    protected static class RowCreatorExtension extends
+            org.seasar.dao.impl.RowCreatorImpl {
+
+        /** The key of DBMeta cache. */
+        protected static final String DBMETA_CACHE_KEY = "df:DBMetaCache";
+
+        @Override
+        public Object createRow(ResultSet rs, Map propertyCache, Class beanClass)
+                throws SQLException {
+            final Object row = newBean(beanClass);
+            final DBMeta dbmeta = findDBMeta(row);
+            final Set columnNameSet = propertyCache.keySet();
+            String columnName = null;
+            PropertyType pt = null;
+            String propertyName = null;
+            try {
+                for (final Iterator ite = columnNameSet.iterator(); ite
+                        .hasNext();) {
+                    columnName = (String) ite.next();
+                    pt = (PropertyType) propertyCache.get(columnName);
+                    propertyName = pt.getPropertyName();
+                    if (dbmeta != null
+                            && dbmeta.hasEntityPropertySetupper(propertyName)) {
+                        final ValueType valueType = pt.getValueType();
+                        final Object value = valueType.getValue(rs, columnName);
+                        dbmeta.setupEntityProperty(propertyName, row, value);
+                    } else {
+                        registerValue(rs, row, pt, columnName);
+                    }
+                }
+            } catch (SQLException e) {
+                if (_log.isWarnEnabled()) {
+                    String msg = SQLException.class.getSimpleName()
+                            + " occurred while ResultSet Handling:";
+                    _log.warn(msg + " target=" + beanClass.getSimpleName()
+                            + "." + propertyName);
+                }
+                throw e;
+            }
+            return row;
+        }
+
+        /**
+         * @param row The object of row. (NotNull)
+         * @return The interface of DBMeta. (Nullable: If it's null, it means NotFound.)
+         */
+        protected DBMeta findDBMeta(Object row) {
+            return EntityPropertySetupperHandler.findCachedDBMeta(row);
+        }
+    }
+
+    /**
+     * The handler of setupper of entity property.
+     */
+    protected static class EntityPropertySetupperHandler {
+
+        /** The key of DBMeta cache. */
+        protected static final String DBMETA_CACHE_KEY = "df:DBMetaCache";
+
+        public static DBMeta findCachedDBMeta(Object row) {
+            if (!(row instanceof Entity)) {
+                return null;
+            }
+            final Entity entity = (Entity) row;
+            Map<Class<?>, DBMeta> dbmetaCache = (Map<Class<?>, DBMeta>) InternalMapContext
+                    .getObject(DBMETA_CACHE_KEY);
+            if (dbmetaCache == null) {
+                dbmetaCache = new HashMap<Class<?>, DBMeta>();
+                InternalMapContext.setObject(DBMETA_CACHE_KEY, dbmetaCache);
+            }
+            DBMeta dbmeta = dbmetaCache.get(entity.getClass());
+            if (dbmeta != null) {
+                return dbmeta;
+            }
+            dbmeta = entity.getDBMeta();
+            dbmetaCache.put(entity.getClass(), dbmeta);
+            return dbmeta;
+        }
+    }
+
+    // ===================================================================================
+    //                                                    RelationRowCreatorImpl Extension
+    //                                                    ================================
+    protected static class RelationRowCreatorExtension extends
+            org.seasar.dao.impl.RelationRowCreatorImpl {
+
+        @Override
+        protected Object createRelationRow(RelationRowCreationResource res)
+                throws SQLException {
+            // - - - - - - - - - - - 
+            // Recursive Call Point!
+            // - - - - - - - - - - -
+            if (!res.hasPropertyCacheElement()) {
+                return null;
+            }
+            setupRelationKeyValue(res);
+            setupRelationAllValue(res);
+            return res.getRow();
+        }
+
+        @Override
+        protected void setupRelationKeyValue(RelationRowCreationResource res) {
+            final RelationPropertyType rpt = res.getRelationPropertyType();
+            final BeanMetaData bmd = rpt.getBeanMetaData();
+            for (int i = 0; i < rpt.getKeySize(); ++i) {
+                final String columnName = rpt.getMyKey(i) + res.getBaseSuffix();
+
+                if (!res.containsColumnName(columnName)) {
+                    continue;
+                }
+                if (!res.hasRowInstance()) {
+                    res.setRow(newRelationRow(rpt));
+                }
+                if (!res.containsRelKeyValueIfExists(columnName)) {
+                    continue;
+                }
+                final Object value = res.extractRelKeyValue(columnName);
+                if (value == null) {
+                    continue;
+                }
+
+                final String yourKey = rpt.getYourKey(i);
+                final PropertyType pt = bmd
+                        .getPropertyTypeByColumnName(yourKey);
+                final PropertyDesc pd = pt.getPropertyDesc();
+                pd.setValue(res.getRow(), value);
+                continue;
+            }
+        }
+
+        @Override
+        protected void setupRelationAllValue(RelationRowCreationResource res)
+                throws SQLException {
+            final Map propertyCacheElement = res.extractPropertyCacheElement();
+            final Set columnNameCacheElementKeySet = propertyCacheElement
+                    .keySet();
+            for (final Iterator ite = columnNameCacheElementKeySet.iterator(); ite
+                    .hasNext();) {
+                final String columnName = (String) ite.next();
+                final PropertyType pt = (PropertyType) propertyCacheElement
+                        .get(columnName);
+                res.setCurrentPropertyType(pt);
+                if (!isValidRelationPerPropertyLoop(res)) {
+                    res.clearRowInstance();
+                    return;
+                }
+                setupRelationProperty(res);
+            }
+            if (!isValidRelationAfterPropertyLoop(res)) {
+                res.clearRowInstance();
+                return;
+            }
+            res.clearValidValueCount();
+            if (res.hasNextRelationProperty()
+                    && (hasConditionBean(res) || res.hasNextRelationLevel())) {
+                setupNextRelationRow(res);
+            }
+        }
+
+        @Override
+        protected void registerRelationValue(RelationRowCreationResource res,
+                String columnName) throws SQLException {
+            final PropertyType pt = res.getCurrentPropertyType();
+            Object value = null;
+            if (res.containsRelKeyValueIfExists(columnName)) {
+                value = res.extractRelKeyValue(columnName);
+            } else {
+                final ValueType valueType = pt.getValueType();
+                value = valueType.getValue(res.getResultSet(), columnName);
+            }
+
+            if (value != null) {
+                res.incrementValidValueCount();
+                final DBMeta dbmeta = findDBMeta(res.getRow());
+                final String propertyName = pt.getPropertyName();
+                if (dbmeta != null
+                        && dbmeta.hasEntityPropertySetupper(propertyName)) {
+                    dbmeta.setupEntityProperty(propertyName, res.getRow(),
+                            value);
+                } else {
+                    final PropertyDesc pd = pt.getPropertyDesc();
+                    pd.setValue(res.getRow(), value);
+                }
+            }
+        }
+
+        /**
+         * @param row The object of row. (NotNull)
+         * @return The interface of DBMeta. (Nullable: If it's null, it means NotFound.)
+         */
+        protected DBMeta findDBMeta(Object row) {
+            return EntityPropertySetupperHandler.findCachedDBMeta(row);
+        }
+
+        @Override
+        protected void setupPropertyCache(RelationRowCreationResource res)
+                throws SQLException {
+            // - - - - - - - - - - - 
+            // Recursive Call Point!
+            // - - - - - - - - - - -
+            res.initializePropertyCacheElement();
+
+            // Do only selected foreign property for performance if condition-bean exists.
+            if (hasConditionBean(res)) {
+                final ConditionBean cb = ConditionBeanContext
+                        .getConditionBeanOnThread();
+                if (!cb.getSqlClause().hasSelectedForeignInfo(
+                        res.getRelationNoSuffix())) {
+                    return;
+                }
+            }
+
+            // Set up property cache about current beanMetaData.
+            final BeanMetaData nextBmd = res.getRelationBeanMetaData();
+            for (int i = 0; i < nextBmd.getPropertyTypeSize(); ++i) {
+                final PropertyType pt = nextBmd.getPropertyType(i);
+                res.setCurrentPropertyType(pt);
+                if (!isTargetProperty(res)) {
+                    continue;
+                }
+                setupPropertyCacheElement(res);
+            }
+
+            // Set up next relation.
+            if (res.hasNextRelationProperty()
+                    && (hasConditionBean(res) || res.hasNextRelationLevel())) {
+                res.backupRelationPropertyType();
+                res.incrementCurrentRelationNestLevel();
+                try {
+                    setupNextPropertyCache(res, nextBmd);
+                } finally {
+                    res.restoreRelationPropertyType();
+                    res.decrementCurrentRelationNestLevel();
+                }
+            }
+        }
+
+        @Override
+        protected boolean isTargetProperty(
+                org.seasar.dao.impl.RelationRowCreationResource res)
+                throws java.sql.SQLException {
+            final PropertyType pt = res.getCurrentPropertyType();
+            if (!pt.getPropertyDesc().hasWriteMethod()) {
+                return false;
+            }
+            if (java.util.List.class.isAssignableFrom(pt.getPropertyDesc()
+                    .getPropertyType())) {
+                return false;
+            }
+            return true;
+        }
+
+        @Override
+        protected boolean isCreateDeadLink() {
+            return false;
+        }
+
+        @Override
+        protected int getLimitRelationNestLevel() {
+            return 2;// for Compatible
+        }
+
+        @Override
+        protected RelationRowCreationResource createResourceForRow(
+                ResultSet rs, RelationPropertyType rpt, Set columnNames,
+                Map relKeyValues, Map relationPropertyCache)
+                throws SQLException {
+            final RelationRowCreationResource res = new RelationRowCreationResourceExtension();
+            res.setResultSet(rs);
+            res.setRelationPropertyType(rpt);
+            res.setColumnNames(columnNames);
+            res.setRelKeyValues(relKeyValues);
+            res.setRelationPropertyCache(relationPropertyCache);
+            res.setBaseSuffix("");// as Default
+            res.setRelationNoSuffix(buildRelationNoSuffix(rpt));
+            res.setLimitRelationNestLevel(getLimitRelationNestLevel());
+            res.setCurrentRelationNestLevel(1);// as Default
+            res.setCreateDeadLink(isCreateDeadLink());
+            return res;
+        }
+
+        @Override
+        protected RelationRowCreationResource createResourceForPropertyCache(
+                RelationPropertyType rpt, Set columnNames,
+                Map relationPropertyCache, String baseSuffix,
+                String relationNoSuffix, int limitRelationNestLevel)
+                throws SQLException {
+            final RelationRowCreationResource res = new RelationRowCreationResourceExtension();
+            res.setRelationPropertyType(rpt);
+            res.setColumnNames(columnNames);
+            res.setRelationPropertyCache(relationPropertyCache);
+            res.setBaseSuffix(baseSuffix);
+            res.setRelationNoSuffix(relationNoSuffix);
+            res.setLimitRelationNestLevel(limitRelationNestLevel);
+            res.setCurrentRelationNestLevel(1);// as Default
+            return res;
+        }
+
+        protected boolean isConditionBeanSelectedRelation(
+                RelationRowCreationResource res) {
+            if (hasConditionBean(res)) {
+                final ConditionBean cb = ConditionBeanContext
+                        .getConditionBeanOnThread();
+                if (cb.getSqlClause().hasSelectedForeignInfo(
+                        res.getRelationNoSuffix())) {
+                    return true;
+                }
+            }
+            return false;
+        }
+
+        protected boolean hasConditionBean(RelationRowCreationResource res) {
+            return ConditionBeanContext.isExistConditionBeanOnThread();
+        }
+    }
+
+    protected static class RelationRowCreationResourceExtension extends
+            RelationRowCreationResource {
+        protected Stack<RelationPropertyType> backupRelationPropertyType = new Stack<RelationPropertyType>();
+
+        protected Stack<String> backupBaseSuffix = new Stack<String>();
+
+        protected Stack<String> backupRelationSuffix = new Stack<String>();
+
+        @Override
+        public void backupRelationPropertyType() {
+            backupRelationPropertyType.push(getRelationPropertyType());
+        }
+
+        @Override
+        public void restoreRelationPropertyType() {
+            setRelationPropertyType(backupRelationPropertyType.pop());
+        }
+
+        @Override
+        public void backupSuffixAndPrepare(String baseSuffix,
+                String additionalRelationNoSuffix) {
+            backupBaseSuffixExtension();
+            backupRelationNoSuffixExtension();
+            setBaseSuffix(baseSuffix);
+            addRelationNoSuffix(additionalRelationNoSuffix);
+        }
+
+        @Override
+        public void restoreSuffix() {
+            restoreBaseSuffixExtension();
+            restoreRelationNoSuffixExtension();
+        }
+
+        protected void backupBaseSuffixExtension() {
+            backupBaseSuffix.push(getBaseSuffix());
+        }
+
+        protected void restoreBaseSuffixExtension() {
+            setBaseSuffix(backupBaseSuffix.pop());
+        }
+
+        protected void backupRelationNoSuffixExtension() {
+            backupRelationSuffix.push(getRelationNoSuffix());
+        }
+
+        protected void restoreRelationNoSuffixExtension() {
+            setRelationNoSuffix(backupRelationSuffix.pop());
+        }
+    }
+
+    // ===================================================================================
+    //                                                                            Accessor
+    //                                                                            ========
+    // -----------------------------------------------------
+    //                                     Sql File Encoding
+    //                                     -----------------
+    public String getSqlFileEncoding() {
+        return sqlFileEncoding;
+    }
+
+    // -----------------------------------------------------
+    //                                         Bean Enhancer
+    //                                         -------------
+    public BeanEnhancer getBeanEnhancer() {
+        return beanEnhancer;
+    }
+
+    public void setBeanEnhancer(final BeanEnhancer beanEnhancer) {
+        this.beanEnhancer = beanEnhancer;
+    }
+
+    // -----------------------------------------------------
+    //                             Annotation Reader Factory
+    //                             -------------------------
+    public void setAnnotationReaderFactory(
+            org.seasar.dao.AnnotationReaderFactory annotationReaderFactory) {
+        this.annotationReaderFactory = annotationReaderFactory;
+    }
+
+    // -----------------------------------------------------
+    //                                  Version After 1.0.47
+    //                                  --------------------
+    public ColumnNaming getColumnNaming() {
+        return columnNaming;
+    }
+
+    public void setColumnNaming(final ColumnNaming columnNaming) {
+        this.columnNaming = columnNaming;
+    }
+
+    public PropertyTypeFactoryBuilder getPropertyTypeFactoryBuilder() {
+        return propertyTypeFactoryBuilder;
+    }
+
+    public void setPropertyTypeFactoryBuilder(
+            final PropertyTypeFactoryBuilder propertyTypeFactoryBuilder) {
+        this.propertyTypeFactoryBuilder = propertyTypeFactoryBuilder;
+    }
+
+    public RelationPropertyTypeFactoryBuilder getRelationPropertyTypeFactoryBuilder() {
+        return relationPropertyTypeFactoryBuilder;
+    }
+
+    public void setRelationPropertyTypeFactoryBuilder(
+            final RelationPropertyTypeFactoryBuilder relationPropertyTypeFactoryBuilder) {
+        this.relationPropertyTypeFactoryBuilder = relationPropertyTypeFactoryBuilder;
+    }
+
+    public TableNaming getTableNaming() {
+        return tableNaming;
+    }
+
+    public void setTableNaming(final TableNaming tableNaming) {
+        this.tableNaming = tableNaming;
+    }
+
+    // -----------------------------------------------------
+    //                                     DBFlute Extension
+    //                                     -----------------
+    public StatementConfig getDefaultStatementConfig() {
+        return _defaultStatementConfig;
+    }
+
+    public void setDefaultStatementConfig(
+            final StatementConfig defaultStatementConfig) {
+        this._defaultStatementConfig = defaultStatementConfig;
+    }
+
+    public boolean isInternalDebug() {
+        return _internalDebug;
+    }
+
+    public void setInternalDebug(final boolean internalDebug) {
+        this._internalDebug = internalDebug;
+    }
+}


Property changes on: announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/s2dao/S2DaoMetaDataExtension.java
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/s2dao/S2DaoMetaDataFactoryImpl.java
===================================================================
--- announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/s2dao/S2DaoMetaDataFactoryImpl.java	                        (rev 0)
+++ announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/s2dao/S2DaoMetaDataFactoryImpl.java	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,522 @@
+package jp.sf.pal.announcement.db.allcommon.s2dao;
+
+import java.util.HashMap;
+import java.util.Map;
+
+import javax.sql.DataSource;
+
+import jp.sf.pal.announcement.db.allcommon.DBFluteConfig;
+import jp.sf.pal.announcement.db.allcommon.cbean.ConditionBeanContext;
+import jp.sf.pal.announcement.db.allcommon.s2dao.internal.sqllog.InternalSqlLogRegistry;
+
+import org.seasar.dao.AnnotationReaderFactory;
+import org.seasar.dao.BeanEnhancer;
+import org.seasar.dao.BeanMetaDataFactory;
+import org.seasar.dao.ColumnNaming;
+import org.seasar.dao.DaoAnnotationReader;
+import org.seasar.dao.DaoMetaData;
+import org.seasar.dao.DaoMetaDataFactory;
+import org.seasar.dao.DaoNamingConvention;
+import org.seasar.dao.DtoMetaDataFactory;
+import org.seasar.dao.ProcedureMetaDataFactory;
+import org.seasar.dao.PropertyTypeFactoryBuilder;
+import org.seasar.dao.RelationPropertyTypeFactoryBuilder;
+import org.seasar.dao.ResultSetHandlerFactory;
+import org.seasar.dao.TableNaming;
+import org.seasar.dao.ValueTypeFactory;
+import org.seasar.dao.impl.DaoMetaDataImpl;
+import org.seasar.dao.pager.PagingSqlRewriter;
+import org.seasar.extension.jdbc.ResultSetFactory;
+import org.seasar.extension.jdbc.StatementFactory;
+import org.seasar.framework.beans.BeanDesc;
+import org.seasar.framework.beans.factory.BeanDescFactory;
+import org.seasar.framework.util.Disposable;
+import org.seasar.framework.util.DisposableUtil;
+
+/**
+ * The implementation of DaoMetaDataFactory for DBFlute.
+ * @author DBFlute(AutoGenerator)
+ */
+public class S2DaoMetaDataFactoryImpl implements DaoMetaDataFactory, Disposable {
+
+    // ===================================================================================
+    //                                                                          Definition
+    //                                                                          ==========
+    /** Log-instance. */
+    private static final org.apache.commons.logging.Log _log = org.apache.commons.logging.LogFactory
+            .getLog(S2DaoMetaDataFactoryImpl.class);
+
+    // -----------------------------------------------------
+    //                                           For Logging
+    //                                           -----------
+    /** The binding annotation for xaDataSource. {bindingType=may} */
+    public static final String xaDataSource_BINDING = "bindingType=may";
+
+    // -----------------------------------------------------
+    //                                         Factory Basic
+    //                                         -------------
+    public static final String dataSource_BINDING = "bindingType=must";
+
+    public static final String statementFactory_BINDING = "bindingType=must";
+
+    public static final String resultSetFactory_BINDING = "bindingType=must";
+
+    public static final String annotationReaderFactory_BINDING = "bindingType=must";
+
+    public static final String valueTypeFactory_BINDING = "bindingType=must";
+
+    public static final String beanMetaDataFactory_BINDING = "bindingType=must";
+
+    public static final String daoNamingConvention_BINDING = "bindingType=must";
+
+    public static final String resultSetHandlerFactory_BINDING = "bindingType=must";
+
+    public static final String dtoMetaDataFactory_BINDING = "bindingType=must";
+
+    public static final String procedureMetaDataFactory_BINDING = "bindingType=must";
+
+    public static final String pagingSQLRewriter_BINDING = "bindingType=may";
+
+    // ===================================================================================
+    //                                                                           Attribute
+    //                                                                           =========
+    // -----------------------------------------------------
+    //                                         Factory Basic
+    //                                         -------------
+    protected DataSource dataSource;
+
+    protected StatementFactory statementFactory;
+
+    protected ResultSetFactory resultSetFactory;
+
+    protected AnnotationReaderFactory annotationReaderFactory;
+
+    protected ValueTypeFactory valueTypeFactory;
+
+    protected BeanMetaDataFactory beanMetaDataFactory;
+
+    protected DaoNamingConvention daoNamingConvention;
+
+    protected ResultSetHandlerFactory resultSetHandlerFactory;
+
+    protected DtoMetaDataFactory dtoMetaDataFactory;
+
+    protected ProcedureMetaDataFactory procedureMetaDataFactory;
+
+    protected PagingSqlRewriter pagingSqlRewriter;
+
+    protected Map<String, DaoMetaData> daoMetaDataCache = new HashMap<String, DaoMetaData>();
+
+    protected boolean initialized;
+
+    protected boolean useDaoClassForLog;
+
+    protected String sqlFileEncoding;
+
+    protected BeanEnhancer beanEnhancer;
+
+    // -----------------------------------------------------
+    //                                  Version After 1.0.47
+    //                                  --------------------
+    /** The naming of column. {After S2Dao-1.0.47} */
+    protected ColumnNaming columnNaming;
+
+    /** The builder of property type factory. {After S2Dao-1.0.47} */
+    protected PropertyTypeFactoryBuilder propertyTypeFactoryBuilder;
+
+    /** The builder of relation property type factory. {After S2Dao-1.0.47} */
+    protected RelationPropertyTypeFactoryBuilder relationPropertyTypeFactoryBuilder;
+
+    /** The builder of table naming. {After S2Dao-1.0.47} */
+    protected TableNaming tableNaming;
+
+    // -----------------------------------------------------
+    //                                     DBFlute Extension
+    //                                     -----------------
+    /** The lock monitor of DAO meta data initialization. */
+    protected Object _daoMetaDataInitializationLockMonitor = new Object();
+
+    // ===================================================================================
+    //                                                                         Constructor
+    //                                                                         ===========
+    public S2DaoMetaDataFactoryImpl(javax.sql.DataSource dataSource,
+            StatementFactory statementFactory,
+            ResultSetFactory resultSetFactory,
+            AnnotationReaderFactory annotationReaderFactory,
+            javax.sql.XADataSource xaDataSource) {
+        this.dataSource = dataSource;
+        this.statementFactory = statementFactory;
+        this.resultSetFactory = resultSetFactory;
+        this.annotationReaderFactory = annotationReaderFactory;
+
+        _log
+                .info("/* * * * * * * * * * * * * * * * * * * * * * * * * * * * {DBFlute}");
+        showInformation(dataSource, xaDataSource);
+
+        // Stop the LinkageError!
+        ConditionBeanContext.initialize();
+
+        initializeDatabaseProductNameOfContext(xaDataSource);
+
+        final StringBuilder sb = new StringBuilder();
+        sb.append("{SqlLog Information}").append(getLineSeparator());
+        sb.append("  [SqlLogRegistry]").append(getLineSeparator());
+        final Object sqlLogRegistry = InternalSqlLogRegistry
+                .findContainerSqlLogRegistry();
+        if (sqlLogRegistry != null) {
+            InternalSqlLogRegistry.closeRegistration();
+            sb
+                    .append(
+                            "    SqlLogRegistry(org.seasar.extension.jdbc) is close! It's default for DBFlute.")
+                    .append(getLineSeparator());
+            sb
+                    .append("    If you want to use this, set SqlLogRegistry to SqlLogRegistryLocator at yourself.");
+        } else {
+            sb
+                    .append("    SqlLogRegistry(org.seasar.extension.jdbc) was not found!");
+        }
+        _log.info(sb);
+
+        DBFluteConfig.getInstance().lock();
+        _log.info("* * * * */");
+    }
+
+    protected void showInformation(javax.sql.DataSource dataSource,
+            javax.sql.XADataSource xaDataSource) {
+        final StringBuilder sb = new StringBuilder();
+        if (xaDataSource != null
+                && xaDataSource instanceof org.seasar.extension.dbcp.impl.XADataSourceImpl) {
+            final org.seasar.extension.dbcp.impl.XADataSourceImpl xaDataSourceImpl = (org.seasar.extension.dbcp.impl.XADataSourceImpl) xaDataSource;
+            final String driverClassName = xaDataSourceImpl
+                    .getDriverClassName();
+            final String url = xaDataSourceImpl.getURL();
+            final String user = xaDataSourceImpl.getUser();
+            sb.append("  [XADataSource]:").append(getLineSeparator());
+            sb.append("    driver = " + driverClassName).append(
+                    getLineSeparator());
+            sb.append("    url    = " + url).append(getLineSeparator());
+            sb.append("    user   = " + user).append(getLineSeparator());
+        }
+        final String statementFactoryExpression = statementFactory != null ? statementFactory
+                .getClass().getSimpleName()
+                : "null";
+        final String resultSetFactoryExpression = resultSetFactory != null ? resultSetFactory
+                .getClass().getSimpleName()
+                : "null";
+        sb.append("  [StatementFactory]:").append(getLineSeparator());
+        sb.append(
+                "    Injected statementFactory is "
+                        + statementFactoryExpression
+                        + ". But DBFlute uses original statementFactory.")
+                .append(getLineSeparator());
+        sb
+                .append(
+                        "    If the injected statementFactory is ConfigurableStatementFactory, the config is inherited to the original statementFactory.")
+                .append(getLineSeparator());
+        sb.append("  [ResultSetFactory]:").append(getLineSeparator());
+        sb.append("    Injected resultSetFactory is "
+                + resultSetFactoryExpression
+                + ". But DBFlute uses original resultSetFactory.");
+        _log.info("{Injection Information}" + getLineSeparator() + sb);
+    }
+
+    // -----------------------------------------------------
+    //                                 Database Product Name
+    //                                 ---------------------
+    protected void initializeDatabaseProductNameOfContext(
+            javax.sql.XADataSource xaDataSource) {
+        if (getDatabaseProductNameFromContext() != null) {
+            return;
+        }
+
+        // From JDBC Driver!
+        if (xaDataSource != null
+                && xaDataSource instanceof org.seasar.extension.dbcp.impl.XADataSourceImpl) {
+            final org.seasar.extension.dbcp.impl.XADataSourceImpl xaDataSourceImpl = (org.seasar.extension.dbcp.impl.XADataSourceImpl) xaDataSource;
+            final String driverClassName = xaDataSourceImpl
+                    .getDriverClassName();
+            if (driverClassName != null) {
+                if (setupDatabaseProductNameByDriverClassName(driverClassName)) {
+                    _log
+                            .info("...Initializing database product name from driverClassName: "
+                                    + getDatabaseProductNameFromContext());
+                    return;
+                }
+            }
+        }
+
+        _log.info("...Initializing database product name as default: MySql");
+        setDatabaseProductNameToContext("MySql");
+    }
+
+    protected String getDatabaseProductNameFromContext() {
+        return ConditionBeanContext.getDatabaseProductName();
+    }
+
+    protected void setDatabaseProductNameToContext(String name) {
+        ConditionBeanContext.setDatabaseProductName(name);
+    }
+
+    protected boolean setupDatabaseProductNameByDriverClassName(
+            String driverClassName) {
+        return ConditionBeanContext
+                .setupDatabaseProductNameByDriverClassName(driverClassName);
+    }
+
+    // ===================================================================================
+    //                                                                      Implementation
+    //                                                                      ==============
+    @SuppressWarnings("unchecked")
+    public DaoMetaData getDaoMetaData(final Class daoClass) {
+        if (!initialized) {
+            DisposableUtil.add(this);
+            initialized = true;
+        }
+        final String key = daoClass.getName();
+
+        // [A]
+        DaoMetaData dmd = getSynchronizedDaoMetaDataCache(key);
+
+        // [B]
+        if (dmd != null) {
+            return dmd;
+        }
+
+        // [C]
+        synchronized (_daoMetaDataInitializationLockMonitor) {// One Thread Only Entered
+            // [D]
+            dmd = getSynchronizedDaoMetaDataCache(key);
+            // [E]
+            if (dmd != null) {
+                // The second thread that stops at [C] can find
+                // because the first thread have already initialized.
+                if (_log.isDebugEnabled()) {
+                    _log
+                            .debug("...Getting daoMetaData as cache because the previous thread have already initilized.");
+                }
+                return dmd;
+            }
+            // [F]
+            if (_log.isDebugEnabled()) {
+                _log.debug("...Creating daoMetaData.");
+            }
+            final DaoMetaData dmdi = createDaoMetaData(daoClass);
+            putSynchronizedDaoMetaDataCache(key, dmdi);
+        }
+        // [G]
+        dmd = getSynchronizedDaoMetaDataCache(key);
+        if (dmd != null) {
+            return dmd;
+        }
+        String msg = "The cache should have data meta data here: key=" + key
+                + " cache=" + daoMetaDataCache;
+        throw new IllegalStateException(msg);
+    }
+
+    @SuppressWarnings("unchecked")
+    protected void putSynchronizedDaoMetaDataCache(String key, DaoMetaData dmd) {
+        synchronized (daoMetaDataCache) {
+            daoMetaDataCache.put(key, dmd);
+        }
+    }
+
+    protected DaoMetaData getSynchronizedDaoMetaDataCache(String key) {
+        DaoMetaData dmd = null;
+        synchronized (daoMetaDataCache) {
+            dmd = (DaoMetaData) daoMetaDataCache.get(key);
+        }
+        return dmd;
+    }
+
+    // ===================================================================================
+    //                                                               DataMetaData Creation
+    //                                                               =====================
+    protected DaoMetaData createDaoMetaData(final Class<?> daoClass) {
+        final BeanDesc daoBeanDesc = BeanDescFactory.getBeanDesc(daoClass);
+        final DaoAnnotationReader daoAnnotationReader = annotationReaderFactory
+                .createDaoAnnotationReader(daoBeanDesc);
+
+        final DaoMetaDataImpl daoMetaData = createDaoMetaDataExtension();
+        daoMetaData.setDaoClass(daoClass);
+        daoMetaData.setDataSource(dataSource);
+        daoMetaData.setStatementFactory(statementFactory);
+        daoMetaData.setResultSetFactory(resultSetFactory);
+        daoMetaData.setValueTypeFactory(valueTypeFactory);
+        daoMetaData.setBeanMetaDataFactory(getBeanMetaDataFactory());
+        daoMetaData.setDaoNamingConvention(getDaoNamingConvention());
+        daoMetaData.setUseDaoClassForLog(useDaoClassForLog);
+        daoMetaData.setDaoAnnotationReader(daoAnnotationReader);
+        daoMetaData.setProcedureMetaDataFactory(procedureMetaDataFactory);
+        daoMetaData.setDtoMetaDataFactory(dtoMetaDataFactory);
+        daoMetaData.setResultSetHandlerFactory(resultSetHandlerFactory);
+        if (sqlFileEncoding != null) {
+            daoMetaData.setSqlFileEncoding(sqlFileEncoding);
+        }
+        if (pagingSqlRewriter != null) {
+            daoMetaData.setPagingSQLRewriter(pagingSqlRewriter);
+        }
+        daoMetaData.initialize();
+        return daoMetaData;
+    }
+
+    protected S2DaoMetaDataExtension createDaoMetaDataExtension() {// Override!
+        final S2DaoMetaDataExtension dmdExtension = newDaoMetaDataExtension();
+        dmdExtension.setBeanEnhancer(beanEnhancer);
+        dmdExtension.setAnnotationReaderFactory(this.annotationReaderFactory);
+        dmdExtension.setColumnNaming(this.columnNaming);
+        dmdExtension
+                .setPropertyTypeFactoryBuilder(this.propertyTypeFactoryBuilder);
+        dmdExtension
+                .setRelationPropertyTypeFactoryBuilder(this.relationPropertyTypeFactoryBuilder);
+        dmdExtension.setTableNaming(tableNaming);
+        dmdExtension.setDefaultStatementConfig(DBFluteConfig.getInstance()
+                .getDefaultStatementConfig());
+        dmdExtension.setInternalDebug(DBFluteConfig.getInstance()
+                .isInternalDebug());
+        return dmdExtension;
+    }
+
+    protected S2DaoMetaDataExtension newDaoMetaDataExtension() {
+        return new S2DaoMetaDataExtension();
+    }
+
+    // ===================================================================================
+    //                                                                             Dispose
+    //                                                                             =======
+    public synchronized void dispose() {
+        daoMetaDataCache.clear();
+        initialized = false;
+    }
+
+    // ===================================================================================
+    //                                                                              Helper
+    //                                                                              ======
+    /**
+     * Get the value of line separator.
+     * @return The value of line separator. (NotNull)
+     */
+    protected static String getLineSeparator() {
+        return System.getProperty("line.separator");
+    }
+
+    // ===================================================================================
+    //                                                                            Accessor
+    //                                                                            ========
+    // -----------------------------------------------------
+    //                                         Factory Basic
+    //                                         -------------
+    public void setValueTypeFactory(final ValueTypeFactory valueTypeFactory) {
+        this.valueTypeFactory = valueTypeFactory;
+    }
+
+    protected BeanMetaDataFactory getBeanMetaDataFactory() {
+        return beanMetaDataFactory;
+    }
+
+    public void setBeanMetaDataFactory(
+            final BeanMetaDataFactory beanMetaDataFactory) {
+        this.beanMetaDataFactory = beanMetaDataFactory;
+    }
+
+    public DaoNamingConvention getDaoNamingConvention() {
+        return daoNamingConvention;
+    }
+
+    public void setDaoNamingConvention(
+            final DaoNamingConvention daoNamingConvention) {
+        this.daoNamingConvention = daoNamingConvention;
+    }
+
+    public void setAnnotationReaderFactory(
+            final AnnotationReaderFactory annotationReaderFactory) {
+        this.annotationReaderFactory = annotationReaderFactory;
+    }
+
+    public void setDataSource(final DataSource dataSource) {
+        this.dataSource = dataSource;
+    }
+
+    public void setResultSetFactory(final ResultSetFactory resultSetFactory) {
+        this.resultSetFactory = resultSetFactory;
+    }
+
+    public void setStatementFactory(final StatementFactory statementFactory) {
+        this.statementFactory = statementFactory;
+    }
+
+    public void setUseDaoClassForLog(final boolean userDaoClassForLog) {
+        useDaoClassForLog = userDaoClassForLog;
+    }
+
+    public void setResultSetHandlerFactory(
+            final ResultSetHandlerFactory resultSetHandlerFactory) {
+        this.resultSetHandlerFactory = resultSetHandlerFactory;
+    }
+
+    public void setDtoMetaDataFactory(
+            final DtoMetaDataFactory dtoMetaDataFactory) {
+        this.dtoMetaDataFactory = dtoMetaDataFactory;
+    }
+
+    public void setProcedureMetaDataFactory(
+            ProcedureMetaDataFactory procedureMetaDataFactory) {
+        this.procedureMetaDataFactory = procedureMetaDataFactory;
+    }
+
+    public void setPagingSQLRewriter(final PagingSqlRewriter pagingSqlRewriter) {
+        this.pagingSqlRewriter = pagingSqlRewriter;
+    }
+
+    public String getSqlFileEncoding() {
+        return sqlFileEncoding;
+    }
+
+    public void setSqlFileEncoding(final String encoding) {
+        sqlFileEncoding = encoding;
+    }
+
+    public BeanEnhancer getBeanEnhancer() {
+        return beanEnhancer;
+    }
+
+    public void setBeanEnhancer(final BeanEnhancer beanEnhancer) {
+        this.beanEnhancer = beanEnhancer;
+    }
+
+    // -----------------------------------------------------
+    //                                  Version After 1.0.47
+    //                                  --------------------
+    public ColumnNaming getColumnNaming() {
+        return columnNaming;
+    }
+
+    public void setColumnNaming(final ColumnNaming columnNaming) {
+        this.columnNaming = columnNaming;
+    }
+
+    public PropertyTypeFactoryBuilder getPropertyTypeFactoryBuilder() {
+        return propertyTypeFactoryBuilder;
+    }
+
+    public void setPropertyTypeFactoryBuilder(
+            final PropertyTypeFactoryBuilder propertyTypeFactoryBuilder) {
+        this.propertyTypeFactoryBuilder = propertyTypeFactoryBuilder;
+    }
+
+    public RelationPropertyTypeFactoryBuilder getRelationPropertyTypeFactoryBuilder() {
+        return relationPropertyTypeFactoryBuilder;
+    }
+
+    public void setRelationPropertyTypeFactoryBuilder(
+            final RelationPropertyTypeFactoryBuilder relationPropertyTypeFactoryBuilder) {
+        this.relationPropertyTypeFactoryBuilder = relationPropertyTypeFactoryBuilder;
+    }
+
+    public TableNaming getTableNaming() {
+        return tableNaming;
+    }
+
+    public void setTableNaming(final TableNaming tableNaming) {
+        this.tableNaming = tableNaming;
+    }
+}
\ No newline at end of file


Property changes on: announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/s2dao/S2DaoMetaDataFactoryImpl.java
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/s2dao/S2DaoPropertyTypeFactoryBuilderExtension.java
===================================================================
--- announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/s2dao/S2DaoPropertyTypeFactoryBuilderExtension.java	                        (rev 0)
+++ announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/s2dao/S2DaoPropertyTypeFactoryBuilderExtension.java	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,136 @@
+package jp.sf.pal.announcement.db.allcommon.s2dao;
+
+import java.sql.DatabaseMetaData;
+import java.util.ArrayList;
+import java.util.List;
+
+import jp.sf.pal.announcement.db.allcommon.Entity;
+import jp.sf.pal.announcement.db.allcommon.dbmeta.DBMeta;
+
+import org.seasar.dao.BeanAnnotationReader;
+import org.seasar.dao.ColumnNaming;
+import org.seasar.dao.DaoNamingConvention;
+import org.seasar.dao.Dbms;
+import org.seasar.dao.PropertyTypeFactory;
+import org.seasar.dao.ValueTypeFactory;
+import org.seasar.dao.impl.FastPropertyTypeFactory;
+import org.seasar.dao.impl.FastPropertyTypeFactoryBuilder;
+import org.seasar.extension.jdbc.PropertyType;
+import org.seasar.framework.beans.BeanDesc;
+import org.seasar.framework.beans.PropertyDesc;
+
+/**
+ * The factory builder of property type for S2Dao. {Since S2Dao-1.0.47} <br />
+ * 
+ * @author DBFlute(AutoGenerator)
+ */
+ @ SuppressWarnings("unchecked")
+public class S2DaoPropertyTypeFactoryBuilderExtension extends
+        FastPropertyTypeFactoryBuilder {
+
+    @Override
+    public PropertyTypeFactory build(Class beanClass,
+            BeanAnnotationReader beanAnnotationReader) {
+        return new FastPropertyTypeFactoryExtension(beanClass,
+                beanAnnotationReader, valueTypeFactory, columnNaming);
+    }
+
+    @Override
+    public PropertyTypeFactory build(Class beanClass,
+            BeanAnnotationReader beanAnnotationReader, Dbms dbms,
+            DatabaseMetaData databaseMetaData) {
+        return new FastPropertyTypeFactoryExtension(beanClass,
+                beanAnnotationReader, valueTypeFactory, columnNaming,
+                daoNamingConvention, dbms);
+    }
+
+    protected static class FastPropertyTypeFactoryExtension extends
+            FastPropertyTypeFactory {
+
+        protected DBMeta _dbmeta;
+
+        public FastPropertyTypeFactoryExtension(Class beanClass,
+                BeanAnnotationReader beanAnnotationReader,
+                ValueTypeFactory valueTypeFactory, ColumnNaming columnNaming) {
+            super(beanClass, beanAnnotationReader, valueTypeFactory,
+                    columnNaming);
+            if (isEntity()) {
+                _dbmeta = findDBMeta();
+            }
+        }
+
+        public FastPropertyTypeFactoryExtension(Class beanClass,
+                BeanAnnotationReader beanAnnotationReader,
+                ValueTypeFactory valueTypeFactory, ColumnNaming columnNaming,
+                DaoNamingConvention daoNamingConvention, Dbms dbms) {
+            super(beanClass, beanAnnotationReader, valueTypeFactory,
+                    columnNaming, daoNamingConvention, dbms);
+            if (isEntity()) {
+                _dbmeta = findDBMeta();
+            }
+        }
+
+        protected boolean isEntity() {
+            return Entity.class.isAssignableFrom(beanClass);
+        }
+
+        protected DBMeta findDBMeta() {
+            try {
+                final Entity entity = (Entity) beanClass.newInstance();
+                return entity.getDBMeta();
+            } catch (Exception e) {
+                String msg = "beanClass.newInstance() threw the exception: beanClass="
+                        + beanClass;
+                throw new RuntimeException(msg, e);
+            }
+        }
+
+        @Override
+        protected boolean isPrimaryKey(PropertyDesc propertyDesc) {
+            if (isEntity() && _dbmeta.hasPrimaryKey()
+                    && _dbmeta.hasColumn(propertyDesc.getPropertyName())) {
+                if (_dbmeta.findColumnInfo(propertyDesc.getPropertyName())
+                        .isPrimary()) {
+                    return true;
+                }
+            }
+            return super.isPrimaryKey(propertyDesc);
+        }
+
+        @Override
+        public PropertyType[] createBeanPropertyTypes(String tableName) {
+            final List<PropertyType> list = new ArrayList<PropertyType>();
+            final BeanDesc beanDesc = getBeanDesc();
+            for (int i = 0; i < beanDesc.getPropertyDescSize(); ++i) {
+                final PropertyDesc pd = beanDesc.getPropertyDesc(i);
+
+                // Read-only property is unnecessary! {Extension of S2Dao}
+                if (!pd.hasWriteMethod()) {
+                    continue;
+                }
+
+                if (isRelation(pd)) {
+                    continue;
+                }
+                final PropertyType pt = createPropertyType(pd);
+                pt.setPrimaryKey(isPrimaryKey(pd));
+                pt.setPersistent(isPersistent(pt));
+                list.add(pt);
+            }
+            return list.toArray(new PropertyType[list.size()]);
+        }
+
+        @Override
+        protected boolean isPersistent(PropertyType propertyType) {
+            // - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+            // The columns that has column annotation are persistent.
+            // - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+            if (beanAnnotationReader.getColumnAnnotation(propertyType
+                    .getPropertyDesc()) == null) {
+                return false;
+            }
+
+            return super.isPersistent(propertyType);
+        }
+    }
+}


Property changes on: announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/s2dao/S2DaoPropertyTypeFactoryBuilderExtension.java
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/s2dao/S2DaoSelectDynamicCommand.java
===================================================================
--- announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/s2dao/S2DaoSelectDynamicCommand.java	                        (rev 0)
+++ announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/s2dao/S2DaoSelectDynamicCommand.java	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,545 @@
+package jp.sf.pal.announcement.db.allcommon.s2dao;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import javax.sql.DataSource;
+
+import jp.sf.pal.announcement.db.allcommon.cbean.ConditionBean;
+import jp.sf.pal.announcement.db.allcommon.cbean.ConditionBeanContext;
+import jp.sf.pal.announcement.db.allcommon.cbean.outsidesql.OutsideSqlContext;
+import jp.sf.pal.announcement.db.allcommon.s2dao.internal.sqlcommand.InternalAbstractDynamicCommand;
+import jp.sf.pal.announcement.db.allcommon.s2dao.internal.sqlhandler.InternalBasicSelectHandler;
+
+import org.seasar.dao.CommandContext;
+import org.seasar.extension.jdbc.ResultSetFactory;
+import org.seasar.extension.jdbc.ResultSetHandler;
+import org.seasar.extension.jdbc.StatementFactory;
+import org.seasar.extension.jdbc.ValueType;
+import org.seasar.extension.jdbc.types.ValueTypes;
+import org.seasar.framework.beans.BeanDesc;
+import org.seasar.framework.beans.PropertyDesc;
+import org.seasar.framework.beans.factory.BeanDescFactory;
+import org.seasar.framework.exception.SQLRuntimeException;
+
+/**
+ * SelectDynamicCommand for DBFlute.
+ * 
+ * @author DBFlute(AutoGenerator)
+ */
+ @ SuppressWarnings("unchecked")
+public class S2DaoSelectDynamicCommand extends InternalAbstractDynamicCommand {
+
+    // ===================================================================================
+    //                                                                           Attribute
+    //                                                                           =========
+    /** The handler of resultSet. */
+    protected ResultSetHandler resultSetHandler;
+
+    /** The factory of resultSet. */
+    protected ResultSetFactory resultSetFactory;
+
+    // ===================================================================================
+    //                                                                         Constructor
+    //                                                                         ===========
+    /**
+     * Constructor.
+     * 
+     * @param dataSource Data source.
+     * @param statementFactory The factory of statement.
+     * @param resultSetHandler The handler of resultSet.
+     * @param resultSetFactory The factory of resultSet.
+     */
+    public S2DaoSelectDynamicCommand(DataSource dataSource,
+            StatementFactory statementFactory,
+            ResultSetHandler resultSetHandler, ResultSetFactory resultSetFactory) {
+        super(dataSource, statementFactory);
+        this.resultSetHandler = resultSetHandler;
+        this.resultSetFactory = resultSetFactory;
+    }
+
+    // ===================================================================================
+    //                                                            Very Important Extension
+    //                                                            ========================
+    // -----------------------------------------------------
+    //                         SelectDynamicCommand Creation
+    //                         -----------------------------
+    protected S2DaoSelectDynamicCommand createMySelectDynamicCommand() {
+        return new S2DaoSelectDynamicCommand(getDataSource(),
+                getStatementFactory(), resultSetHandler, resultSetFactory);
+    }
+
+    // ===================================================================================
+    //                                                                             Execute
+    //                                                                             =======
+    // -----------------------------------------------------
+    //                                           Top Execute
+    //                                           -----------
+    /**
+     * The override for extension.
+     * 
+     * @param args The array of argument. (Nullable)
+     * @return Result. (Nullable)
+     */
+    public Object execute(Object[] args) {
+        // - - - - - - - - - - - -
+        // This is top execution.
+        // - - - - - - - - - - - -
+
+        if (!ConditionBeanContext.isExistConditionBeanOnThread()) {
+            // - - - - - - - - - -
+            // Execute outsideSql.
+            // - - - - - - - - - -
+            if (OutsideSqlContext.isExistOutsideSqlContextOnThread()) {
+                final OutsideSqlContext outsideSqlContext = OutsideSqlContext
+                        .getOutsideSqlContextOnThread();
+                if (outsideSqlContext.isDynamicBinding()) {
+                    return executeOutsideSqlAsDynamic(args, outsideSqlContext);
+                } else {
+                    return executeOutsideSqlAsStatic(args, outsideSqlContext);
+                }
+            }
+
+            // - - - - - - - - -
+            // Execute default.
+            // - - - - - - - - -
+            return executeDefault(args);
+        }
+
+        // - - - - - - - - - - - -
+        // Execute conditionBean.
+        // - - - - - - - - - - - -
+        final List<Object> bindVariableList = new ArrayList<Object>(4);
+        final List<Class> bindVariableTypeList = new ArrayList<Class>(4);
+
+        final ConditionBean cb = ConditionBeanContext
+                .getConditionBeanOnThread();
+        final String finalClause;
+        if (cb.hasUnionQueryOrUnionAllQuery()) {
+            final String realClause = setupRealClause(args, bindVariableList,
+                    bindVariableTypeList);
+            if (cb.isSelectCountIgnoreFetchScope()) {
+                // If the query uses union and it selects count, the way of select-count is as follows.
+                finalClause = "select count(*) from (" + realClause
+                        + ") dfmain";
+            } else {
+                finalClause = realClause;
+            }
+        } else {
+            if (cb.isSelectCountIgnoreFetchScope()) {
+                finalClause = setupRealSelectCountClause(args,
+                        bindVariableList, bindVariableTypeList);
+            } else {
+                finalClause = setupRealClause(args, bindVariableList,
+                        bindVariableTypeList);
+            }
+        }
+
+        final InternalBasicSelectHandler selectHandler = createBasicSelectHandler(
+                finalClause, this.resultSetHandler);
+        return selectHandler.execute(bindVariableList.toArray(),
+                toClassArray(bindVariableTypeList));
+    }
+
+    // -----------------------------------------------------
+    //                                       Default Execute
+    //                                       ---------------
+    /**
+     * Execute default.
+     * 
+     * @param args The array of argument. (Nullable)
+     * @return Result. (Nullable)
+     */
+    protected Object executeDefault(Object args[]) {
+        // - - - - - - - - - - - - - - - - -
+        // Find specified resultSetHandler.
+        // - - - - - - - - - - - - - - - - -
+        final ResultSetHandler specifiedResultSetHandler = findSpecifiedResultSetHandler(args);
+
+        // - - - - - - - - -
+        // Filter arguments.
+        // - - - - - - - - -
+        final Object[] filteredArgs = filterArgumentsForResultSetHandler(args);
+
+        final org.seasar.dao.CommandContext ctx = apply(filteredArgs);
+        final InternalBasicSelectHandler selectHandler = createBasicSelectHandler(
+                ctx.getSql(), specifiedResultSetHandler);
+        return selectHandler.execute(ctx.getBindVariables(), ctx
+                .getBindVariableTypes());
+    }
+
+    // -----------------------------------------------------
+    //                                    OutsideSql Execute
+    //                                    ------------------
+    /**
+     * Execute outsideSql as static.
+     * 
+     * @param args The array of argument. (Nullable)
+     * @param outsideSqlContext The context of outsideSql. (NotNull)
+     * @return Result. (Nullable)
+     */
+    protected Object executeOutsideSqlAsStatic(Object[] args,
+            OutsideSqlContext outsideSqlContext) {
+        // - - - - - - - - - - - - - - - - -
+        // Find specified resultSetHandler.
+        // - - - - - - - - - - - - - - - - -
+        final ResultSetHandler specifiedResultSetHandler = findSpecifiedResultSetHandler(args);
+
+        // - - - - - - - - -
+        // Filter arguments.
+        // - - - - - - - - -
+        final Object[] filteredArgs;
+        if (outsideSqlContext.isSpecifiedOutsideSql()) {
+            final Object parameterBean = outsideSqlContext.getParameterBean();
+            filteredArgs = new Object[] { parameterBean };
+        } else {
+            filteredArgs = filterArgumentsForResultSetHandler(args);
+        }
+
+        final org.seasar.dao.CommandContext ctx = apply(filteredArgs);
+        final InternalBasicSelectHandler selectHandler = createBasicSelectHandler(
+                ctx.getSql(), specifiedResultSetHandler);
+        return selectHandler.execute(ctx.getBindVariables(), ctx
+                .getBindVariableTypes());
+    }
+
+    /**
+     * Execute outsideSql as Dynamic.
+     * 
+     * @param args The array of argument. (Nullable)
+     * @param outsideSqlContext The context of outsideSql. (NotNull)
+     * @return Result. (Nullable)
+     */
+    protected Object executeOutsideSqlAsDynamic(Object[] args,
+            OutsideSqlContext outsideSqlContext) {
+        final Object firstArg = args[0];
+        final BeanDesc beanDesc = BeanDescFactory.getBeanDesc(firstArg
+                .getClass());
+        String filteredSql = getSql();
+
+        // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+        // Resolve embedded comment for parsing bind variable comment in embedded comment.
+        // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+        for (int i = 0; i < beanDesc.getPropertyDescSize(); i++) {
+            final PropertyDesc propertyDesc = beanDesc.getPropertyDesc(i);
+            final Class propertyType = propertyDesc.getPropertyType();
+            if (!propertyType.equals(String.class)) {
+                continue;
+            }
+            final String outsideSqlPiece = (String) propertyDesc
+                    .getValue(firstArg);
+            if (outsideSqlPiece == null) {
+                continue;
+            }
+            final String embeddedComment = "/*$pmb."
+                    + propertyDesc.getPropertyName() + "*/";
+            filteredSql = InternalStringUtil.replace(filteredSql,
+                    embeddedComment, outsideSqlPiece);
+        }
+        final S2DaoSelectDynamicCommand outsideSqlCommand = createMySelectDynamicCommand();
+        outsideSqlCommand.setArgNames(getArgNames());
+        outsideSqlCommand.setArgTypes(getArgTypes());
+        outsideSqlCommand.setSql(filteredSql);
+
+        // - - - - - - - - - - - - - - - - -
+        // Find specified resultSetHandler.
+        // - - - - - - - - - - - - - - - - -
+        final ResultSetHandler specifiedResultSetHandler = findSpecifiedResultSetHandler(args);
+
+        // - - - - - - - - -
+        // Filter arguments.
+        // - - - - - - - - -
+        final Object[] filteredArgs;
+        if (outsideSqlContext.isSpecifiedOutsideSql()) {
+            final Object parameterBean = outsideSqlContext.getParameterBean();
+            filteredArgs = new Object[] { parameterBean };
+        } else {
+            filteredArgs = filterArgumentsForResultSetHandler(args);
+        }
+
+        final org.seasar.dao.CommandContext ctx = outsideSqlCommand
+                .apply(filteredArgs);
+        final java.util.List<Object> bindVariableList = new java.util.ArrayList<Object>();
+        final java.util.List<Class> bindVariableTypeList = new java.util.ArrayList<Class>();
+        addBindVariableInfo(ctx, bindVariableList, bindVariableTypeList);
+        final InternalBasicSelectHandler selectHandler = createBasicSelectHandler(
+                ctx.getSql(), specifiedResultSetHandler);
+        return selectHandler.execute(bindVariableList.toArray(),
+                toClassArray(bindVariableTypeList));
+    }
+
+    protected Object[] filterArgumentsForResultSetHandler(Object[] args) {
+        if (args == null || args.length == 0) {
+            return args;
+        }
+        final Object[] filteredArgs;
+        if (args[args.length - 1] instanceof jp.sf.pal.announcement.db.allcommon.jdbc.CursorHandler) {
+            filteredArgs = new Object[args.length - 1];
+            for (int i = 0; i < args.length - 1; i++) {
+                filteredArgs[i] = args[i];
+            }
+        } else {
+            filteredArgs = args;
+        }
+        return filteredArgs;
+    }
+
+    protected ResultSetHandler findSpecifiedResultSetHandler(Object[] args) {
+        if (args == null || args.length == 0) {
+            return this.resultSetHandler;
+        }
+        if (args[args.length - 1] instanceof jp.sf.pal.announcement.db.allcommon.jdbc.CursorHandler) {
+            final jp.sf.pal.announcement.db.allcommon.jdbc.CursorHandler cursorHandler = (jp.sf.pal.announcement.db.allcommon.jdbc.CursorHandler) args[args.length - 1];
+            return new ResultSetHandler() {
+                public Object handle(java.sql.ResultSet rs)
+                        throws java.sql.SQLException {
+                    return cursorHandler.handle(rs);
+                }
+            };
+        }
+        if (getArgTypes().length + 1 == args.length
+                && args[args.length - 1] == null) {
+            String msg = "System Level Exception!" + getLineSeparator();
+            msg = msg
+                    + "/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *"
+                    + getLineSeparator();
+            msg = msg
+                    + "The size of arg types have not been same as the size of arg objects:";
+            msg = msg + " argTypes=" + getArgTypes().length + " args="
+                    + args.length + getLineSeparator();
+            msg = msg
+                    + "If the arguments contain ResultSetHandler, the argument value should not be null!"
+                    + getLineSeparator();
+            for (int i = 0; i < args.length - 1; i++) {
+                msg = msg + "  args[" + i + "] -- " + args[i]
+                        + getLineSeparator();
+            }
+            msg = msg + "* * * * * * * * * */" + getLineSeparator();
+            throw new IllegalStateException(msg);
+        }
+        return this.resultSetHandler;
+    }
+
+    // -----------------------------------------------------
+    //                                          Setup Clause
+    //                                          ------------
+    protected String setupRealClause(Object[] args,
+            List<Object> bindVariableList, List<Class> bindVariableTypeList) {
+        final ConditionBean cb = ConditionBeanContext
+                .getConditionBeanOnThread();
+        final String realClause;
+        {
+            final S2DaoSelectDynamicCommand dynamicCommand = createMySelectDynamicCommand();
+            dynamicCommand.setArgNames(getArgNames());
+            dynamicCommand.setArgTypes(getArgTypes());
+            if (cb.isLimitSelect_PKOnly()) {
+                dynamicCommand.setSql(cb.getSqlClause().getClausePKOnly());
+            } else {
+                dynamicCommand.setSql(cb.getSqlClause().getClause());
+            }
+            final CommandContext ctx = dynamicCommand.apply(args);
+            realClause = ctx.getSql();
+            addBindVariableInfo(ctx, bindVariableList, bindVariableTypeList);
+        }
+        return realClause;
+    }
+
+    protected String setupRealSelectCountClause(Object[] args,
+            List<Object> bindVariableList, List<Class> bindVariableTypeList) {
+        final ConditionBean cb = ConditionBeanContext
+                .getConditionBeanOnThread();
+        final String realSelectCountClause;
+        {
+            final S2DaoSelectDynamicCommand selectCountCommand = createMySelectDynamicCommand();
+            selectCountCommand.setArgNames(getArgNames());
+            selectCountCommand.setArgTypes(getArgTypes());
+            final String selectClause = "select count(*)";
+            String fromWhereClause = cb.getSqlClause()
+                    .getClauseFromWhereWithUnionTemplate();
+
+            // Replace template marks. These are very important!
+            fromWhereClause = replaceString(fromWhereClause, cb.getSqlClause()
+                    .getUnionSelectClauseMark(), selectClause);
+            fromWhereClause = replaceString(fromWhereClause, cb.getSqlClause()
+                    .getUnionWhereClauseMark(), "");
+            fromWhereClause = replaceString(fromWhereClause, cb.getSqlClause()
+                    .getUnionWhereFirstConditionMark(), "");
+
+            selectCountCommand.setSql(selectClause + " " + fromWhereClause);
+
+            final CommandContext ctx = selectCountCommand.apply(args);
+            realSelectCountClause = ctx.getSql();
+            addBindVariableInfo(ctx, bindVariableList, bindVariableTypeList);
+        }
+        return realSelectCountClause;
+    }
+
+    protected InternalBasicSelectHandler createBasicSelectHandler(
+            String realSql, ResultSetHandler specifiedResultSetHandler) {
+        final InternalBasicSelectHandler selectHandler = newBasicSelectHandler(
+                realSql, specifiedResultSetHandler, getStatementFactory(),
+                resultSetFactory);
+        selectHandler.setFetchSize(-1);
+        return selectHandler;
+    }
+
+    protected InternalBasicSelectHandler newBasicSelectHandler(String sql,
+            ResultSetHandler resultSetHandler,
+            StatementFactory statementFactory, ResultSetFactory resultSetFactory) {
+        return new InternalBasicSelectHandler(getDataSource(), sql,
+                resultSetHandler, statementFactory, resultSetFactory) {
+            @Override
+            protected void bindArgs(java.sql.PreparedStatement ps,
+                    Object[] args, Class[] argTypes) {
+                if (args == null) {
+                    return;
+                }
+                for (int i = 0; i < args.length; ++i) {
+                    final ValueType valueType = findValueType(argTypes[i],
+                            args[i]);
+                    try {
+                        valueType.bindValue(ps, i + 1, args[i]);
+                    } catch (java.sql.SQLException ex) {
+                        throw new SQLRuntimeException(ex);
+                    }
+                }
+            }
+
+            protected ValueType findValueType(Class argType, Object arg) {
+                ValueType valueType = ValueTypes.getValueType(arg);
+                if (valueType != null) {
+                    return valueType;
+                }
+                valueType = ValueTypes.getValueType(argType);
+                if (valueType != null) {
+                    return valueType;
+                }
+                String msg = "Unknown type:argType=" + argType + " args=" + arg;
+                throw new IllegalStateException(msg);
+            }
+        };
+    }
+
+    // -----------------------------------------------------
+    //                                          Setup Helper
+    //                                          ------------
+    protected Class[] toClassArray(List<Class> bindVariableTypeList) {
+        final Class[] bindVariableTypesArray = new Class[bindVariableTypeList
+                .size()];
+        for (int i = 0; i < bindVariableTypeList.size(); i++) {
+            final Class bindVariableType = (Class) bindVariableTypeList.get(i);
+            bindVariableTypesArray[i] = bindVariableType;
+        }
+        return bindVariableTypesArray;
+    }
+
+    protected void addBindVariableInfo(CommandContext ctx,
+            List<Object> bindVariableList, List<Class> bindVariableTypeList) {
+        final Object[] bindVariables = ctx.getBindVariables();
+        addBindVariableList(bindVariableList, bindVariables);
+        final Class[] bindVariableTypes = ctx.getBindVariableTypes();
+        addBindVariableTypeList(bindVariableTypeList, bindVariableTypes);
+    }
+
+    protected void addBindVariableList(List<Object> bindVariableList,
+            Object[] bindVariables) {
+        for (int i = 0; i < bindVariables.length; i++) {
+            bindVariableList.add(bindVariables[i]);
+        }
+    }
+
+    protected void addBindVariableTypeList(List<Class> bindVariableTypeList,
+            Class[] bindVariableTypes) {
+        for (int i = 0; i < bindVariableTypes.length; i++) {
+            bindVariableTypeList.add(bindVariableTypes[i]);
+        }
+    }
+
+    // ===================================================================================
+    //                                                                              Helper
+    //                                                                              ======
+    /**
+     * Get the value of line separator.
+     * 
+     * @return The value of line separator. (NotNull)
+     */
+    protected String getLineSeparator() {
+        return System.getProperty("line.separator");
+    }
+
+    protected final String replaceString(String text, String fromText,
+            String toText) {
+        if (text == null || fromText == null || toText == null)
+            return null;
+        StringBuffer buf = new StringBuffer(100);
+        int pos = 0;
+        int pos2 = 0;
+        do {
+            pos = text.indexOf(fromText, pos2);
+            if (pos == 0) {
+                buf.append(toText);
+                pos2 = fromText.length();
+            } else if (pos > 0) {
+                buf.append(text.substring(pos2, pos));
+                buf.append(toText);
+                pos2 = pos + fromText.length();
+            } else {
+                buf.append(text.substring(pos2));
+                return buf.toString();
+            }
+        } while (true);
+    }
+
+    // -----------------------------------------------------
+    //                                            StringUtil
+    //                                            ----------
+    protected static class InternalStringUtil {
+
+        public static final String[] EMPTY_STRINGS = new String[0];
+
+        private InternalStringUtil() {
+        }
+
+        public static final boolean isEmpty(String text) {
+            return text == null || text.length() == 0;
+        }
+
+        public static final String replace(String text, String fromText,
+                String toText) {
+            if (text == null || fromText == null || toText == null) {
+                return null;
+            }
+            StringBuffer buf = new StringBuffer(100);
+            int pos = 0;
+            int pos2 = 0;
+            while (true) {
+                pos = text.indexOf(fromText, pos2);
+                if (pos == 0) {
+                    buf.append(toText);
+                    pos2 = fromText.length();
+                } else if (pos > 0) {
+                    buf.append(text.substring(pos2, pos));
+                    buf.append(toText);
+                    pos2 = pos + fromText.length();
+                } else {
+                    buf.append(text.substring(pos2));
+                    break;
+                }
+            }
+            return buf.toString();
+        }
+
+        public static String[] split(String str, String delim) {
+            if (str == null) {
+                return EMPTY_STRINGS;
+            }
+            java.util.List<String> list = new java.util.ArrayList<String>();
+            java.util.StringTokenizer st = new java.util.StringTokenizer(str,
+                    delim);
+            while (st.hasMoreElements()) {
+                list.add(st.nextToken());
+            }
+            return (String[]) list.toArray(new String[list.size()]);
+        }
+    }
+}
\ No newline at end of file


Property changes on: announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/s2dao/S2DaoSelectDynamicCommand.java
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/s2dao/internal/rshandler/InternalBeanArrayMetaDataResultSetHandler.java
===================================================================
--- announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/s2dao/internal/rshandler/InternalBeanArrayMetaDataResultSetHandler.java	                        (rev 0)
+++ announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/s2dao/internal/rshandler/InternalBeanArrayMetaDataResultSetHandler.java	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,40 @@
+package jp.sf.pal.announcement.db.allcommon.s2dao.internal.rshandler;
+
+import java.lang.reflect.Array;
+import java.sql.ResultSet;
+import java.sql.SQLException;
+import java.util.List;
+
+import org.seasar.dao.BeanMetaData;
+import org.seasar.dao.RelationRowCreator;
+import org.seasar.dao.RowCreator;
+
+/**
+ * @author DBFlute(AutoGenerator)
+ */
+ @ SuppressWarnings("unchecked")
+public class InternalBeanArrayMetaDataResultSetHandler extends
+        InternalBeanListMetaDataResultSetHandler {
+
+    // ===================================================================================
+    //                                                                         Constructor
+    //                                                                         ===========
+    /**
+     * @param beanMetaData Bean meta data. (NotNull)
+     * @param rowCreator Row creator. (NotNull)
+     * @param relationRowCreator Relation row creator. (NotNul)
+     */
+    public InternalBeanArrayMetaDataResultSetHandler(BeanMetaData beanMetaData,
+            RowCreator rowCreator, RelationRowCreator relationRowCreator) {
+        super(beanMetaData, rowCreator, relationRowCreator);
+    }
+
+    // ===================================================================================
+    //                                                                              Handle
+    //                                                                              ======
+    public Object handle(ResultSet rs) throws SQLException {
+        List list = (List) super.handle(rs);
+        return list.toArray((Object[]) Array.newInstance(getBeanMetaData()
+                .getBeanClass(), list.size()));
+    }
+}


Property changes on: announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/s2dao/internal/rshandler/InternalBeanArrayMetaDataResultSetHandler.java
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/s2dao/internal/rshandler/InternalBeanListMetaDataResultSetHandler.java
===================================================================
--- announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/s2dao/internal/rshandler/InternalBeanListMetaDataResultSetHandler.java	                        (rev 0)
+++ announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/s2dao/internal/rshandler/InternalBeanListMetaDataResultSetHandler.java	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,149 @@
+package jp.sf.pal.announcement.db.allcommon.s2dao.internal.rshandler;
+
+import java.sql.ResultSet;
+import java.sql.SQLException;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+
+import org.seasar.dao.BeanMetaData;
+import org.seasar.dao.RelationPropertyType;
+import org.seasar.dao.RelationRowCreator;
+import org.seasar.dao.RowCreator;
+import org.seasar.dao.impl.AbstractBeanMetaDataResultSetHandler;
+import org.seasar.dao.impl.RelationKey;
+import org.seasar.dao.impl.RelationRowCache;
+import org.seasar.extension.jdbc.PropertyType;
+import org.seasar.extension.jdbc.ValueType;
+import org.seasar.framework.beans.PropertyDesc;
+
+/**
+ * @author DBFlute(AutoGenerator)
+ */
+ @ SuppressWarnings("unchecked")
+public class InternalBeanListMetaDataResultSetHandler extends
+        AbstractBeanMetaDataResultSetHandler {
+
+    // ===================================================================================
+    //                                                                         Constructor
+    //                                                                         ===========
+    /**
+     * @param beanMetaData Bean meta data. (NotNull)
+     * @param rowCreator Row creator. (NotNull)
+     * @param relationRowCreator Relation row creator. (NotNul)
+     */
+    public InternalBeanListMetaDataResultSetHandler(BeanMetaData beanMetaData,
+            RowCreator rowCreator, RelationRowCreator relationRowCreator) {
+        super(beanMetaData, rowCreator, relationRowCreator);
+    }
+
+    // ===================================================================================
+    //                                                                              Handle
+    //                                                                              ======
+    public Object handle(ResultSet rs) throws SQLException {
+        // Set<String(columnName)>
+        Set columnNames = null;
+
+        // Map<String(columnName), PropertyType>
+        Map propertyCache = null;// [DAO-118] (2007/08/26)
+
+        // Map<String(relationNoSuffix), Map<String(columnName), PropertyType>>
+        Map relationPropertyCache = null;// [DAO-118] (2007/08/25)
+
+        final List list = new ArrayList();
+        final int relSize = getBeanMetaData().getRelationPropertyTypeSize();
+        final RelationRowCache relRowCache = new RelationRowCache(relSize);
+
+        while (rs.next()) {
+            // Lazy initialization because if the result is zero, the cache is unused.
+            if (columnNames == null) {
+                columnNames = createColumnNames(rs.getMetaData());
+            }
+            if (propertyCache == null) {
+                propertyCache = createPropertyCache(columnNames);
+            }
+            if (relationPropertyCache == null) {
+                relationPropertyCache = createRelationPropertyCache(columnNames);
+            }
+
+            // Create row instance of base table by row property cache.
+            final Object row = createRow(rs, propertyCache);
+
+            for (int i = 0; i < relSize; ++i) {
+                RelationPropertyType rpt = getBeanMetaData()
+                        .getRelationPropertyType(i);
+                if (rpt == null) {
+                    continue;
+                }
+                Object relationRow = null;
+                Map relKeyValues = new HashMap();
+                // /- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
+                // If it returns null at first record, may it be unnecessary after second records?
+                // - - - - - - - - - -/
+                RelationKey relKey = createRelationKey(rs, rpt, columnNames,
+                        relKeyValues);
+                if (relKey != null) {
+                    relationRow = relRowCache.getRelationRow(i, relKey);
+                    if (relationRow == null) {
+                        relationRow = createRelationRow(rs, rpt, columnNames,
+                                relKeyValues, relationPropertyCache);
+                        relRowCache.addRelationRow(i, relKey, relationRow);
+                    }
+                }
+                if (relationRow != null) {
+                    PropertyDesc pd = rpt.getPropertyDesc();
+                    pd.setValue(row, relationRow);
+                    postCreateRow(relationRow);
+                }
+            }
+            postCreateRow(row);
+            list.add(row);
+        }
+        return list;
+    }
+
+    protected RelationKey createRelationKey(ResultSet rs,
+            RelationPropertyType rpt, Set columnNames, Map relKeyValues)
+            throws SQLException {
+        List keyList = new ArrayList();
+        BeanMetaData bmd = rpt.getBeanMetaData();
+        for (int i = 0; i < rpt.getKeySize(); ++i) {
+            /*
+             * PropertyType pt = bmd
+             * .getPropertyTypeByColumnName(rpt.getYourKey(i)); ValueType
+             * valueType = pt.getValueType(); String columnName =
+             * pt.getColumnName() + "_" + rpt.getRelationNo();
+             */
+            ValueType valueType = null;
+            String columnName = rpt.getMyKey(i);
+            if (columnNames.contains(columnName)) {
+                PropertyType pt = getBeanMetaData()
+                        .getPropertyTypeByColumnName(columnName);
+                valueType = pt.getValueType();
+            } else {
+                PropertyType pt = bmd.getPropertyTypeByColumnName(rpt
+                        .getYourKey(i));
+                columnName = pt.getColumnName() + "_" + rpt.getRelationNo();
+                if (columnNames.contains(columnName)) {
+                    valueType = pt.getValueType();
+                } else {
+                    return null;
+                }
+            }
+            Object value = valueType.getValue(rs, columnName);
+            if (value == null) {
+                return null;
+            }
+            relKeyValues.put(columnName, value);
+            keyList.add(value);
+        }
+        if (keyList.size() > 0) {
+            Object[] keys = keyList.toArray();
+            return new RelationKey(keys);
+        } else {
+            return null;
+        }
+    }
+}


Property changes on: announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/s2dao/internal/rshandler/InternalBeanListMetaDataResultSetHandler.java
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/s2dao/internal/sqlcommand/InternalAbstractAutoStaticCommand.java
===================================================================
--- announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/s2dao/internal/sqlcommand/InternalAbstractAutoStaticCommand.java	                        (rev 0)
+++ announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/s2dao/internal/sqlcommand/InternalAbstractAutoStaticCommand.java	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,209 @@
+package jp.sf.pal.announcement.db.allcommon.s2dao.internal.sqlcommand;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import javax.sql.DataSource;
+
+import jp.sf.pal.announcement.db.allcommon.s2dao.internal.sqlhandler.InternalAbstractAutoHandler;
+
+import org.seasar.dao.BeanMetaData;
+import org.seasar.dao.IdentifierGenerator;
+import org.seasar.dao.NotSingleRowUpdatedRuntimeException;
+import org.seasar.dao.PrimaryKeyNotFoundRuntimeException;
+import org.seasar.extension.jdbc.PropertyType;
+import org.seasar.extension.jdbc.StatementFactory;
+import org.seasar.framework.exception.SRuntimeException;
+
+/**
+ * @author DBFlute(AutoGenerator)
+ */
+public abstract class InternalAbstractAutoStaticCommand extends
+        InternalAbstractStaticCommand {
+
+    // ===================================================================================
+    //                                                                           Attribute
+    //                                                                           =========
+    private PropertyType[] propertyTypes;
+
+    private boolean checkSingleRowUpdate = true;
+
+    // ===================================================================================
+    //                                                                         Constructor
+    //                                                                         ===========
+    public InternalAbstractAutoStaticCommand(DataSource dataSource,
+            StatementFactory statementFactory, BeanMetaData beanMetaData,
+            String[] propertyNames) {
+        super(dataSource, statementFactory, beanMetaData);
+        setupPropertyTypes(propertyNames);
+        setupSql();
+    }
+
+    // ===================================================================================
+    //                                                                             Execute
+    //                                                                             =======
+    public Object execute(Object[] args) {
+        InternalAbstractAutoHandler handler = createAutoHandler();
+        handler.setSql(getSql());
+
+        // It is unnecessary for DBFlute!
+        // injectDaoClass(handler);
+
+        int rows = handler.execute(args);
+        if (isCheckSingleRowUpdate() && rows != 1) {
+            throw createNotSingleRowUpdatedRuntimeException(args[0], rows);
+        }
+        return new Integer(rows);
+    }
+
+    public boolean isCheckSingleRowUpdate() {
+        return checkSingleRowUpdate;
+    }
+
+    public void setCheckSingleRowUpdate(boolean checkSingleRowUpdate) {
+        this.checkSingleRowUpdate = checkSingleRowUpdate;
+    }
+
+    protected NotSingleRowUpdatedRuntimeException createNotSingleRowUpdatedRuntimeException(
+            Object bean, int rows) {
+        return new jp.sf.pal.announcement.db.allcommon.exception.EntityAlreadyUpdatedException(
+                bean, rows);
+    }
+
+    protected PropertyType[] getPropertyTypes() {
+        return propertyTypes;
+    }
+
+    protected void setPropertyTypes(PropertyType[] propertyTypes) {
+        this.propertyTypes = propertyTypes;
+    }
+
+    protected abstract InternalAbstractAutoHandler createAutoHandler();
+
+    protected abstract void setupPropertyTypes(String[] propertyNames);
+
+    protected void setupInsertPropertyTypes(String[] propertyNames) {
+        List types = new ArrayList();
+        for (int i = 0; i < propertyNames.length; ++i) {
+            PropertyType pt = getBeanMetaData().getPropertyType(
+                    propertyNames[i]);
+            if (isInsertTarget(pt)) {
+                types.add(pt);
+            }
+        }
+        propertyTypes = (PropertyType[]) types.toArray(new PropertyType[types
+                .size()]);
+    }
+
+    protected boolean isInsertTarget(PropertyType propertyType) {
+        if (propertyType.isPrimaryKey()) {
+            String name = propertyType.getPropertyName();
+            final IdentifierGenerator generator = getBeanMetaData()
+                    .getIdentifierGenerator(name);
+            return generator.isSelfGenerate();
+        }
+        return true;
+    }
+
+    protected void setupUpdatePropertyTypes(String[] propertyNames) {
+        List types = new ArrayList();
+        for (int i = 0; i < propertyNames.length; ++i) {
+            PropertyType pt = getBeanMetaData().getPropertyType(
+                    propertyNames[i]);
+            if (pt.isPrimaryKey()) {
+                continue;
+            }
+            types.add(pt);
+        }
+        if (types.size() == 0) {
+            throw new SRuntimeException("EDAO0020");
+        }
+        propertyTypes = (PropertyType[]) types.toArray(new PropertyType[types
+                .size()]);
+    }
+
+    protected void setupDeletePropertyTypes(String[] propertyNames) {
+    }
+
+    protected abstract void setupSql();
+
+    protected void setupInsertSql() {
+        BeanMetaData bmd = getBeanMetaData();
+        StringBuffer buf = new StringBuffer(100);
+        buf.append("INSERT INTO ");
+        buf.append(bmd.getTableName());
+        buf.append(" (");
+        for (int i = 0; i < propertyTypes.length; ++i) {
+            PropertyType pt = propertyTypes[i];
+            if (isInsertTarget(pt)) {
+                buf.append(pt.getColumnName());
+                buf.append(", ");
+            }
+        }
+        buf.setLength(buf.length() - 2);
+        buf.append(") VALUES (");
+        for (int i = 0; i < propertyTypes.length; ++i) {
+            PropertyType pt = propertyTypes[i];
+            if (isInsertTarget(pt)) {
+                buf.append("?, ");
+            }
+        }
+        buf.setLength(buf.length() - 2);
+        buf.append(")");
+        setSql(buf.toString());
+    }
+
+    protected void setupUpdateSql() {
+        checkPrimaryKey();
+        StringBuffer buf = new StringBuffer(100);
+        buf.append("UPDATE ");
+        buf.append(getBeanMetaData().getTableName());
+        buf.append(" SET ");
+        for (int i = 0; i < propertyTypes.length; ++i) {
+            PropertyType pt = propertyTypes[i];
+            buf.append(pt.getColumnName());
+            buf.append(" = ?, ");
+        }
+        buf.setLength(buf.length() - 2);
+        setupUpdateWhere(buf);
+        setSql(buf.toString());
+    }
+
+    protected void setupDeleteSql() {
+        checkPrimaryKey();
+        StringBuffer buf = new StringBuffer(100);
+        buf.append("DELETE FROM ");
+        buf.append(getBeanMetaData().getTableName());
+        setupUpdateWhere(buf);
+        setSql(buf.toString());
+    }
+
+    protected void checkPrimaryKey() {
+        BeanMetaData bmd = getBeanMetaData();
+        if (bmd.getPrimaryKeySize() == 0) {
+            throw new PrimaryKeyNotFoundRuntimeException(bmd.getBeanClass());
+        }
+    }
+
+    protected void setupUpdateWhere(StringBuffer buf) {
+        BeanMetaData bmd = getBeanMetaData();
+        buf.append(" WHERE ");
+        for (int i = 0; i < bmd.getPrimaryKeySize(); ++i) {
+            buf.append(bmd.getPrimaryKey(i));
+            buf.append(" = ? AND ");
+        }
+        buf.setLength(buf.length() - 5);
+        if (bmd.hasVersionNoPropertyType()) {
+            PropertyType pt = bmd.getVersionNoPropertyType();
+            buf.append(" AND ");
+            buf.append(pt.getColumnName());
+            buf.append(" = ?");
+        }
+        if (bmd.hasTimestampPropertyType()) {
+            PropertyType pt = bmd.getTimestampPropertyType();
+            buf.append(" AND ");
+            buf.append(pt.getColumnName());
+            buf.append(" = ?");
+        }
+    }
+}


Property changes on: announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/s2dao/internal/sqlcommand/InternalAbstractAutoStaticCommand.java
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/s2dao/internal/sqlcommand/InternalAbstractBatchAutoStaticCommand.java
===================================================================
--- announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/s2dao/internal/sqlcommand/InternalAbstractBatchAutoStaticCommand.java	                        (rev 0)
+++ announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/s2dao/internal/sqlcommand/InternalAbstractBatchAutoStaticCommand.java	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,50 @@
+package jp.sf.pal.announcement.db.allcommon.s2dao.internal.sqlcommand;
+
+import javax.sql.DataSource;
+
+import jp.sf.pal.announcement.db.allcommon.s2dao.internal.sqlhandler.InternalAbstractBatchAutoHandler;
+
+import org.seasar.dao.BeanMetaData;
+import org.seasar.extension.jdbc.StatementFactory;
+
+/**
+ * @author DBFlute(AutoGenerator)
+ */
+public abstract class InternalAbstractBatchAutoStaticCommand extends
+        InternalAbstractAutoStaticCommand {
+
+    // ===================================================================================
+    //                                                                           Attribute
+    //                                                                           =========
+    protected final boolean returningRows;
+
+    // ===================================================================================
+    //                                                                         Constructor
+    //                                                                         ===========
+    public InternalAbstractBatchAutoStaticCommand(DataSource dataSource,
+            StatementFactory statementFactory, BeanMetaData beanMetaData,
+            String[] propertyNames, boolean returningRows) {
+        super(dataSource, statementFactory, beanMetaData, propertyNames);
+        this.returningRows = returningRows;
+    }
+
+    // ===================================================================================
+    //                                                                             Execute
+    //                                                                             =======
+    public Object execute(Object[] args) {
+        final InternalAbstractBatchAutoHandler handler = createBatchAutoHandler();
+
+        // It is unnecessary!
+        // injectDaoClass(handler);
+
+        handler.setSql(getSql());
+        if (this.returningRows) {
+            return handler.executeBatch(args);
+        } else {
+            final int updatedRows = handler.execute(args);
+            return new Integer(updatedRows);
+        }
+    }
+
+    protected abstract InternalAbstractBatchAutoHandler createBatchAutoHandler();
+}


Property changes on: announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/s2dao/internal/sqlcommand/InternalAbstractBatchAutoStaticCommand.java
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/s2dao/internal/sqlcommand/InternalAbstractDynamicCommand.java
===================================================================
--- announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/s2dao/internal/sqlcommand/InternalAbstractDynamicCommand.java	                        (rev 0)
+++ announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/s2dao/internal/sqlcommand/InternalAbstractDynamicCommand.java	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,79 @@
+package jp.sf.pal.announcement.db.allcommon.s2dao.internal.sqlcommand;
+
+import javax.sql.DataSource;
+
+import jp.sf.pal.announcement.db.allcommon.s2dao.internal.sqlparser.InternalCommandContextCreator;
+import jp.sf.pal.announcement.db.allcommon.s2dao.internal.sqlparser.InternalSqlParser;
+
+import org.seasar.dao.CommandContext;
+import org.seasar.dao.Node;
+import org.seasar.extension.jdbc.StatementFactory;
+
+/**
+ * @author DBFlute(AutoGenerator)
+ */
+public abstract class InternalAbstractDynamicCommand extends
+        InternalAbstractSqlCommand {
+
+    // ===================================================================================
+    //                                                                           Attribute
+    //                                                                           =========
+    protected Node rootNode;
+
+    protected String[] argNames = new String[0];
+
+    protected Class[] argTypes = new Class[0];
+
+    // ===================================================================================
+    //                                                                         Constructor
+    //                                                                         ===========
+    public InternalAbstractDynamicCommand(DataSource dataSource,
+            StatementFactory statementFactory) {
+        super(dataSource, statementFactory);
+    }
+
+    // ===================================================================================
+    //                                                                        Sql Handling
+    //                                                                        ============
+    public void setSql(String sql) {
+        super.setSql(sql);
+        this.rootNode = createInternalSqlParser(sql).parse();
+    }
+
+    protected InternalSqlParser createInternalSqlParser(String sql) {
+        return new InternalSqlParser(sql);
+    }
+
+    public CommandContext apply(Object[] args) {// It is necessary to be public!
+        final CommandContext ctx = createCommandContext(args);
+        rootNode.accept(ctx);
+        return ctx;
+    }
+
+    protected CommandContext createCommandContext(Object[] args) {
+        return createCommandContextCreator().createCommandContext(args);
+    }
+
+    protected InternalCommandContextCreator createCommandContextCreator() {
+        return new InternalCommandContextCreator(argNames, argTypes);
+    }
+
+    // ===================================================================================
+    //                                                                            Accessor
+    //                                                                            ========
+    public String[] getArgNames() {
+        return argNames;
+    }
+
+    public void setArgNames(String[] argNames) {
+        this.argNames = argNames;
+    }
+
+    public Class[] getArgTypes() {
+        return argTypes;
+    }
+
+    public void setArgTypes(Class[] argTypes) {
+        this.argTypes = argTypes;
+    }
+}


Property changes on: announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/s2dao/internal/sqlcommand/InternalAbstractDynamicCommand.java
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/s2dao/internal/sqlcommand/InternalAbstractSqlCommand.java
===================================================================
--- announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/s2dao/internal/sqlcommand/InternalAbstractSqlCommand.java	                        (rev 0)
+++ announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/s2dao/internal/sqlcommand/InternalAbstractSqlCommand.java	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,49 @@
+package jp.sf.pal.announcement.db.allcommon.s2dao.internal.sqlcommand;
+
+import javax.sql.DataSource;
+
+import org.seasar.dao.SqlCommand;
+import org.seasar.extension.jdbc.StatementFactory;
+
+/**
+ * @author DBFlute(AutoGenerator)
+ */
+public abstract class InternalAbstractSqlCommand implements SqlCommand {
+
+    // ===================================================================================
+    //                                                                           Attribute
+    //                                                                           =========
+    private DataSource dataSource;
+
+    private StatementFactory statementFactory;
+
+    private String sql;
+
+    // ===================================================================================
+    //                                                                         Constructor
+    //                                                                         ===========
+    public InternalAbstractSqlCommand(DataSource dataSource,
+            StatementFactory statementFactory) {
+        this.dataSource = dataSource;
+        this.statementFactory = statementFactory;
+    }
+
+    // ===================================================================================
+    //                                                                            Accessor
+    //                                                                            ========
+    public DataSource getDataSource() {
+        return dataSource;
+    }
+
+    public StatementFactory getStatementFactory() {
+        return statementFactory;
+    }
+
+    public String getSql() {
+        return sql;
+    }
+
+    public void setSql(String sql) {
+        this.sql = sql;
+    }
+}


Property changes on: announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/s2dao/internal/sqlcommand/InternalAbstractSqlCommand.java
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/s2dao/internal/sqlcommand/InternalAbstractStaticCommand.java
===================================================================
--- announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/s2dao/internal/sqlcommand/InternalAbstractStaticCommand.java	                        (rev 0)
+++ announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/s2dao/internal/sqlcommand/InternalAbstractStaticCommand.java	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,34 @@
+package jp.sf.pal.announcement.db.allcommon.s2dao.internal.sqlcommand;
+
+import javax.sql.DataSource;
+
+import org.seasar.dao.BeanMetaData;
+import org.seasar.extension.jdbc.StatementFactory;
+
+/**
+ * @author DBFlute(AutoGenerator)
+ */
+public abstract class InternalAbstractStaticCommand extends
+        InternalAbstractSqlCommand {
+
+    // ===================================================================================
+    //                                                                           Attribute
+    //                                                                           =========
+    private BeanMetaData beanMetaData;
+
+    // ===================================================================================
+    //                                                                         Constructor
+    //                                                                         ===========
+    public InternalAbstractStaticCommand(DataSource dataSource,
+            StatementFactory statementFactory, BeanMetaData beanMetaData) {
+        super(dataSource, statementFactory);
+        this.beanMetaData = beanMetaData;
+    }
+
+    // ===================================================================================
+    //                                                                            Accessor
+    //                                                                            ========
+    public BeanMetaData getBeanMetaData() {
+        return beanMetaData;
+    }
+}


Property changes on: announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/s2dao/internal/sqlcommand/InternalAbstractStaticCommand.java
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/s2dao/internal/sqlcommand/InternalDeleteAutoStaticCommand.java
===================================================================
--- announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/s2dao/internal/sqlcommand/InternalDeleteAutoStaticCommand.java	                        (rev 0)
+++ announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/s2dao/internal/sqlcommand/InternalDeleteAutoStaticCommand.java	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,44 @@
+package jp.sf.pal.announcement.db.allcommon.s2dao.internal.sqlcommand;
+
+import javax.sql.DataSource;
+
+import jp.sf.pal.announcement.db.allcommon.s2dao.internal.sqlhandler.InternalAbstractAutoHandler;
+import jp.sf.pal.announcement.db.allcommon.s2dao.internal.sqlhandler.InternalDeleteAutoHandler;
+
+import org.seasar.dao.BeanMetaData;
+import org.seasar.extension.jdbc.StatementFactory;
+
+/**
+ * @author DBFlute(AutoGenerator)
+ */
+public class InternalDeleteAutoStaticCommand extends
+        InternalAbstractAutoStaticCommand {
+
+    // ===================================================================================
+    //                                                                         Constructor
+    //                                                                         ===========
+    public InternalDeleteAutoStaticCommand(DataSource dataSource,
+            StatementFactory statementFactory, BeanMetaData beanMetaData,
+            String[] propertyNames) {
+        super(dataSource, statementFactory, beanMetaData, propertyNames);
+    }
+
+    // ===================================================================================
+    //                                                                            Override
+    //                                                                            ========
+    @Override
+    protected InternalAbstractAutoHandler createAutoHandler() {
+        return new InternalDeleteAutoHandler(getDataSource(),
+                getStatementFactory(), getBeanMetaData(), getPropertyTypes());
+    }
+
+    @Override
+    protected void setupSql() {
+        setupDeleteSql();
+    }
+
+    @Override
+    protected void setupPropertyTypes(String[] propertyNames) {
+        setupDeletePropertyTypes(propertyNames);
+    }
+}


Property changes on: announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/s2dao/internal/sqlcommand/InternalDeleteAutoStaticCommand.java
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/s2dao/internal/sqlcommand/InternalDeleteBatchAutoStaticCommand.java
===================================================================
--- announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/s2dao/internal/sqlcommand/InternalDeleteBatchAutoStaticCommand.java	                        (rev 0)
+++ announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/s2dao/internal/sqlcommand/InternalDeleteBatchAutoStaticCommand.java	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,51 @@
+package jp.sf.pal.announcement.db.allcommon.s2dao.internal.sqlcommand;
+
+import javax.sql.DataSource;
+
+import jp.sf.pal.announcement.db.allcommon.s2dao.internal.sqlhandler.InternalAbstractAutoHandler;
+import jp.sf.pal.announcement.db.allcommon.s2dao.internal.sqlhandler.InternalAbstractBatchAutoHandler;
+import jp.sf.pal.announcement.db.allcommon.s2dao.internal.sqlhandler.InternalDeleteBatchAutoHandler;
+
+import org.seasar.dao.BeanMetaData;
+import org.seasar.extension.jdbc.StatementFactory;
+
+/**
+ * @author DBFlute(AutoGenerator)
+ */
+public class InternalDeleteBatchAutoStaticCommand extends
+        InternalAbstractBatchAutoStaticCommand {
+
+    // ===================================================================================
+    //                                                                         Constructor
+    //                                                                         ===========
+    public InternalDeleteBatchAutoStaticCommand(DataSource dataSource,
+            StatementFactory statementFactory, BeanMetaData beanMetaData,
+            String[] propertyNames, boolean returningRows) {
+        super(dataSource, statementFactory, beanMetaData, propertyNames,
+                returningRows);
+    }
+
+    // ===================================================================================
+    //                                                                            Override
+    //                                                                            ========
+    @Override
+    protected InternalAbstractAutoHandler createAutoHandler() {
+        return createBatchAutoHandler();
+    }
+
+    @Override
+    protected InternalAbstractBatchAutoHandler createBatchAutoHandler() {
+        return new InternalDeleteBatchAutoHandler(getDataSource(),
+                getStatementFactory(), getBeanMetaData(), getPropertyTypes());
+    }
+
+    @Override
+    protected void setupSql() {
+        setupDeleteSql();
+    }
+
+    @Override
+    protected void setupPropertyTypes(String[] propertyNames) {
+        setupDeletePropertyTypes(propertyNames);
+    }
+}


Property changes on: announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/s2dao/internal/sqlcommand/InternalDeleteBatchAutoStaticCommand.java
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/s2dao/internal/sqlcommand/InternalDeleteQueryAutoDynamicCommand.java
===================================================================
--- announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/s2dao/internal/sqlcommand/InternalDeleteQueryAutoDynamicCommand.java	                        (rev 0)
+++ announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/s2dao/internal/sqlcommand/InternalDeleteQueryAutoDynamicCommand.java	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,145 @@
+package jp.sf.pal.announcement.db.allcommon.s2dao.internal.sqlcommand;
+
+import javax.sql.DataSource;
+
+import jp.sf.pal.announcement.db.allcommon.cbean.ConditionBean;
+import jp.sf.pal.announcement.db.allcommon.dbmeta.DBMeta;
+import jp.sf.pal.announcement.db.allcommon.dbmeta.DBMetaInstanceHandler;
+import jp.sf.pal.announcement.db.allcommon.s2dao.internal.sqlhandler.InternalCommandContextHandler;
+import jp.sf.pal.announcement.db.allcommon.s2dao.internal.sqlparser.InternalCommandContextCreator;
+import jp.sf.pal.announcement.db.allcommon.s2dao.internal.sqlparser.InternalSqlParser;
+
+import org.seasar.dao.CommandContext;
+import org.seasar.dao.Node;
+import org.seasar.dao.SqlCommand;
+import org.seasar.extension.jdbc.StatementFactory;
+
+/**
+ * @author DBFlute(AutoGenerator)
+ */
+public class InternalDeleteQueryAutoDynamicCommand implements SqlCommand {
+
+    // ===================================================================================
+    //                                                                           Attribute
+    //                                                                           =========
+    protected DataSource dataSource;
+
+    protected StatementFactory statementFactory;
+
+    // ===================================================================================
+    //                                                                         Constructor
+    //                                                                         ===========
+    public InternalDeleteQueryAutoDynamicCommand(DataSource dataSource,
+            StatementFactory statementFactory) {
+        this.dataSource = dataSource;
+        this.statementFactory = statementFactory;
+    }
+
+    // ===================================================================================
+    //                                                                             Execute
+    //                                                                             =======
+    public Object execute(Object[] args) {
+        final ConditionBean cb = extractConditionBeanWithCheck(args);
+        final String[] argNames = new String[] { "dto" };
+        final Class<?>[] argTypes = new Class<?>[] { cb.getClass() };
+        final String twoWaySql = buildQueryDeleteTwoWaySql(cb);
+        final CommandContext context = createCommandContext(twoWaySql,
+                argNames, argTypes, args);
+        final InternalCommandContextHandler handler = createCommandContextHandler(context);
+        int rows = handler.execute(args);
+        return new Integer(rows);
+    }
+
+    protected ConditionBean extractConditionBeanWithCheck(Object[] args) {
+        if (args == null || args.length == 0) {
+            String msg = "The arguments should have one argument! But:";
+            msg = msg + " args=" + (args != null ? args.length : null);
+            throw new IllegalArgumentException(msg);
+        }
+        final Object fisrtArg = args[0];
+        if (!(fisrtArg instanceof ConditionBean)) {
+            String msg = "The type of argument should be "
+                    + ConditionBean.class + "! But:";
+            msg = msg + " type=" + fisrtArg.getClass();
+            throw new IllegalArgumentException(msg);
+        }
+        return (ConditionBean) fisrtArg;
+    }
+
+    protected InternalCommandContextHandler createCommandContextHandler(
+            CommandContext context) {
+        return new InternalCommandContextHandler(dataSource, statementFactory,
+                context);
+    }
+
+    protected String buildQueryDeleteTwoWaySql(ConditionBean cb) {
+        final String tableSqlName = cb.getTableSqlName();
+        final String aliasName = cb.getSqlClause().getLocalTableAliasName();
+        final DBMeta dbmeta = DBMetaInstanceHandler.findDBMeta(cb
+                .getTableDbName());
+        if (dbmeta.hasTwoOrMorePrimaryKeys()) {
+            String msg = "The target table of queryDelete() should have only one primary key:";
+            msg = msg + " primaryKeys="
+                    + dbmeta.getPrimaryUniqueInfo().getUniqueColumnList();
+            throw new IllegalStateException(msg);
+        }
+        final String primaryKeyName = dbmeta.getPrimaryUniqueInfo()
+                .getFirstColumn().getColumnDbName();
+        final String selectClause = "select " + aliasName + "."
+                + primaryKeyName;
+        String fromWhereClause = cb.getSqlClause()
+                .getClauseFromWhereWithUnionTemplate();
+
+        // Replace template marks. These are very important!
+        fromWhereClause = replaceString(fromWhereClause, cb.getSqlClause()
+                .getUnionSelectClauseMark(), selectClause);
+        fromWhereClause = replaceString(fromWhereClause, cb.getSqlClause()
+                .getUnionWhereClauseMark(), "");
+        fromWhereClause = replaceString(fromWhereClause, cb.getSqlClause()
+                .getUnionWhereFirstConditionMark(), "");
+
+        final StringBuilder sb = new StringBuilder();
+        sb.append("delete from ").append(tableSqlName);
+        sb.append(" where ").append(primaryKeyName);
+        sb.append(" in (").append(selectClause).append(" ").append(
+                fromWhereClause).append(")");
+        return sb.toString();
+    }
+
+    protected CommandContext createCommandContext(String twoWaySql,
+            String[] argNames, Class<?>[] argTypes, Object[] args) {
+        final CommandContext context;
+        {
+            final InternalSqlParser parser = new InternalSqlParser(twoWaySql);
+            final Node node = parser.parse();
+            final InternalCommandContextCreator creator = new InternalCommandContextCreator(
+                    argNames, argTypes);
+            context = creator.createCommandContext(args);
+            node.accept(context);
+        }
+        return context;
+    }
+
+    protected final String replaceString(String text, String fromText,
+            String toText) {
+        if (text == null || fromText == null || toText == null)
+            return null;
+        StringBuffer buf = new StringBuffer(100);
+        int pos = 0;
+        int pos2 = 0;
+        do {
+            pos = text.indexOf(fromText, pos2);
+            if (pos == 0) {
+                buf.append(toText);
+                pos2 = fromText.length();
+            } else if (pos > 0) {
+                buf.append(text.substring(pos2, pos));
+                buf.append(toText);
+                pos2 = pos + fromText.length();
+            } else {
+                buf.append(text.substring(pos2));
+                return buf.toString();
+            }
+        } while (true);
+    }
+}


Property changes on: announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/s2dao/internal/sqlcommand/InternalDeleteQueryAutoDynamicCommand.java
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/s2dao/internal/sqlcommand/InternalInsertAutoDynamicCommand.java
===================================================================
--- announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/s2dao/internal/sqlcommand/InternalInsertAutoDynamicCommand.java	                        (rev 0)
+++ announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/s2dao/internal/sqlcommand/InternalInsertAutoDynamicCommand.java	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,167 @@
+package jp.sf.pal.announcement.db.allcommon.s2dao.internal.sqlcommand;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import javax.sql.DataSource;
+
+import jp.sf.pal.announcement.db.allcommon.s2dao.internal.sqlhandler.InternalInsertAutoHandler;
+
+import org.seasar.dao.BeanMetaData;
+import org.seasar.dao.IdentifierGenerator;
+import org.seasar.dao.NotSingleRowUpdatedRuntimeException;
+import org.seasar.dao.SqlCommand;
+import org.seasar.extension.jdbc.PropertyType;
+import org.seasar.extension.jdbc.StatementFactory;
+import org.seasar.framework.exception.SRuntimeException;
+
+/**
+ * @author DBFlute(AutoGenerator)
+ */
+public class InternalInsertAutoDynamicCommand implements SqlCommand {
+
+    // ===================================================================================
+    //                                                                         Constructor
+    //                                                                         ===========
+    protected DataSource dataSource;
+
+    protected StatementFactory statementFactory;
+
+    protected BeanMetaData beanMetaData;
+
+    protected String[] propertyNames;
+
+    protected boolean checkSingleRowUpdate = true;
+
+    // ===================================================================================
+    //                                                                         Constructor
+    //                                                                         ===========
+    public InternalInsertAutoDynamicCommand() {
+    }
+
+    // ===================================================================================
+    //                                                                             Execute
+    //                                                                             =======
+    public Object execute(Object[] args) {
+        final Object bean = args[0];
+        final BeanMetaData bmd = getBeanMetaData();
+        final PropertyType[] propertyTypes = createInsertPropertyTypes(bmd,
+                bean, getPropertyNames());
+        final String sql = createInsertSql(bmd, propertyTypes);
+        final InternalInsertAutoHandler handler = new InternalInsertAutoHandler(
+                getDataSource(), getStatementFactory(), bmd, propertyTypes);
+        handler.setSql(sql);
+        final int rows = handler.execute(args);
+        if (isCheckSingleRowUpdate() && rows != 1) {
+            throw new NotSingleRowUpdatedRuntimeException(args[0], rows);
+        }
+        return new Integer(rows);
+    }
+
+    protected String createInsertSql(BeanMetaData bmd,
+            PropertyType[] propertyTypes) {
+        StringBuffer buf = new StringBuffer(100);
+        buf.append("INSERT INTO ");
+        buf.append(bmd.getTableName());
+        buf.append(" (");
+        for (int i = 0; i < propertyTypes.length; ++i) {
+            PropertyType pt = propertyTypes[i];
+            final String columnName = pt.getColumnName();
+            if (i > 0) {
+                buf.append(", ");
+            }
+            buf.append(columnName);
+        }
+        buf.append(") VALUES (");
+        for (int i = 0; i < propertyTypes.length; ++i) {
+            if (i > 0) {
+                buf.append(", ");
+            }
+            buf.append("?");
+        }
+        buf.append(")");
+        return buf.toString();
+    }
+
+    protected PropertyType[] createInsertPropertyTypes(BeanMetaData bmd,
+            Object bean, String[] propertyNames) {
+
+        if (0 == propertyNames.length) {
+            throw new SRuntimeException("EDAO0024", new Object[] { bean
+                    .getClass().getName() });
+        }
+        List types = new ArrayList();
+        final String timestampPropertyName = bmd.getTimestampPropertyName();
+        final String versionNoPropertyName = bmd.getVersionNoPropertyName();
+
+        for (int i = 0; i < propertyNames.length; ++i) {
+            PropertyType pt = bmd.getPropertyType(propertyNames[i]);
+            if (pt.isPrimaryKey()) {
+                final IdentifierGenerator generator = bmd
+                        .getIdentifierGenerator(pt.getPropertyName());
+                if (!generator.isSelfGenerate()) {
+                    continue;
+                }
+            } else {
+                if (pt.getPropertyDesc().getValue(bean) == null) {
+                    final String propertyName = pt.getPropertyName();
+                    if (!propertyName.equalsIgnoreCase(timestampPropertyName)
+                            && !propertyName
+                                    .equalsIgnoreCase(versionNoPropertyName)) {
+                        continue;
+                    }
+                }
+            }
+            types.add(pt);
+        }
+        if (types.isEmpty()) {
+            throw new SRuntimeException("EDAO0014");
+        }
+        PropertyType[] propertyTypes = (PropertyType[]) types
+                .toArray(new PropertyType[types.size()]);
+        return propertyTypes;
+    }
+
+    // ===================================================================================
+    //                                                                            Accessor
+    //                                                                            ========
+    protected DataSource getDataSource() {
+        return dataSource;
+    }
+
+    public void setDataSource(DataSource dataSource) {
+        this.dataSource = dataSource;
+    }
+
+    protected StatementFactory getStatementFactory() {
+        return statementFactory;
+    }
+
+    public void setStatementFactory(StatementFactory statementFactory) {
+        this.statementFactory = statementFactory;
+    }
+
+    protected BeanMetaData getBeanMetaData() {
+        return beanMetaData;
+    }
+
+    public void setBeanMetaData(BeanMetaData beanMetaData) {
+        this.beanMetaData = beanMetaData;
+    }
+
+    protected String[] getPropertyNames() {
+        return propertyNames;
+    }
+
+    public void setPropertyNames(String[] propertyNames) {
+        this.propertyNames = propertyNames;
+    }
+
+    public boolean isCheckSingleRowUpdate() {
+        return checkSingleRowUpdate;
+    }
+
+    public void setCheckSingleRowUpdate(boolean checkSingleRowUpdate) {
+        this.checkSingleRowUpdate = checkSingleRowUpdate;
+    }
+}


Property changes on: announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/s2dao/internal/sqlcommand/InternalInsertAutoDynamicCommand.java
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/s2dao/internal/sqlcommand/InternalInsertBatchAutoStaticCommand.java
===================================================================
--- announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/s2dao/internal/sqlcommand/InternalInsertBatchAutoStaticCommand.java	                        (rev 0)
+++ announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/s2dao/internal/sqlcommand/InternalInsertBatchAutoStaticCommand.java	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,51 @@
+package jp.sf.pal.announcement.db.allcommon.s2dao.internal.sqlcommand;
+
+import javax.sql.DataSource;
+
+import jp.sf.pal.announcement.db.allcommon.s2dao.internal.sqlhandler.InternalAbstractAutoHandler;
+import jp.sf.pal.announcement.db.allcommon.s2dao.internal.sqlhandler.InternalAbstractBatchAutoHandler;
+import jp.sf.pal.announcement.db.allcommon.s2dao.internal.sqlhandler.InternalInsertBatchAutoHandler;
+
+import org.seasar.dao.BeanMetaData;
+import org.seasar.extension.jdbc.StatementFactory;
+
+/**
+ * @author DBFlute(AutoGenerator)
+ */
+public class InternalInsertBatchAutoStaticCommand extends
+        InternalAbstractBatchAutoStaticCommand {
+
+    // ===================================================================================
+    //                                                                         Constructor
+    //                                                                         ===========
+    public InternalInsertBatchAutoStaticCommand(DataSource dataSource,
+            StatementFactory statementFactory, BeanMetaData beanMetaData,
+            String[] propertyNames, boolean returningRows) {
+        super(dataSource, statementFactory, beanMetaData, propertyNames,
+                returningRows);
+    }
+
+    // ===================================================================================
+    //                                                                            Override
+    //                                                                            ========
+    @Override
+    protected InternalAbstractAutoHandler createAutoHandler() {
+        return createBatchAutoHandler();
+    }
+
+    @Override
+    protected InternalAbstractBatchAutoHandler createBatchAutoHandler() {
+        return new InternalInsertBatchAutoHandler(getDataSource(),
+                getStatementFactory(), getBeanMetaData(), getPropertyTypes());
+    }
+
+    @Override
+    protected void setupSql() {
+        setupInsertSql();
+    }
+
+    @Override
+    protected void setupPropertyTypes(String[] propertyNames) {
+        setupInsertPropertyTypes(propertyNames);
+    }
+}


Property changes on: announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/s2dao/internal/sqlcommand/InternalInsertBatchAutoStaticCommand.java
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/s2dao/internal/sqlcommand/InternalUpdateAutoDynamicCommand.java
===================================================================
--- announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/s2dao/internal/sqlcommand/InternalUpdateAutoDynamicCommand.java	                        (rev 0)
+++ announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/s2dao/internal/sqlcommand/InternalUpdateAutoDynamicCommand.java	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,167 @@
+package jp.sf.pal.announcement.db.allcommon.s2dao.internal.sqlcommand;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import javax.sql.DataSource;
+
+import jp.sf.pal.announcement.db.allcommon.s2dao.internal.sqlhandler.InternalUpdateAutoHandler;
+
+import org.seasar.dao.BeanMetaData;
+import org.seasar.dao.NoUpdatePropertyTypeRuntimeException;
+import org.seasar.dao.NotSingleRowUpdatedRuntimeException;
+import org.seasar.dao.impl.AbstractSqlCommand;
+import org.seasar.extension.jdbc.PropertyType;
+import org.seasar.extension.jdbc.StatementFactory;
+
+/**
+ * @author DBFlute(AutoGenerator)
+ */
+public class InternalUpdateAutoDynamicCommand extends AbstractSqlCommand {
+
+    // ===================================================================================
+    //                                                                           Attribute
+    //                                                                           =========
+    private BeanMetaData beanMetaData;
+
+    private String[] propertyNames;
+
+    private boolean checkSingleRowUpdate = true;
+
+    // ===================================================================================
+    //                                                                         Constructor
+    //                                                                         ===========
+    public InternalUpdateAutoDynamicCommand(DataSource dataSource,
+            StatementFactory statementFactory) {
+        super(dataSource, statementFactory);
+    }
+
+    // ===================================================================================
+    //                                                                             Execute
+    //                                                                             =======
+    public Object execute(Object[] args) {
+        final Object bean = args[0];
+        final BeanMetaData bmd = getBeanMetaData();
+        final PropertyType[] propertyTypes = createUpdatePropertyTypes(bmd,
+                bean, getPropertyNames());
+
+        InternalUpdateAutoHandler handler = new InternalUpdateAutoHandler(
+                getDataSource(), getStatementFactory(), bmd, propertyTypes);
+
+        // It is unnecessary!
+        // injectDaoClass(handler);
+
+        handler.setSql(createUpdateSql(bmd, propertyTypes));
+        int i = handler.execute(args);
+        if (isCheckSingleRowUpdate() && i < 1) {
+            throw createNotSingleRowUpdatedRuntimeException(args[0], i);
+        }
+        return new Integer(i);
+    }
+
+    protected NotSingleRowUpdatedRuntimeException createNotSingleRowUpdatedRuntimeException(
+            Object bean, int rows) {
+        return new jp.sf.pal.announcement.db.allcommon.exception.EntityAlreadyUpdatedException(
+                bean, rows);
+    }
+
+    protected PropertyType[] createUpdatePropertyTypes(BeanMetaData bmd,
+            Object bean, String[] propertyNames) {
+        List types = new ArrayList();
+        final String timestampPropertyName = bmd.getTimestampPropertyName();
+        final String versionNoPropertyName = bmd.getVersionNoPropertyName();
+        for (int i = 0; i < propertyNames.length; ++i) {
+            PropertyType pt = bmd.getPropertyType(propertyNames[i]);
+            if (pt.isPrimaryKey() == false) {
+                String propertyName = pt.getPropertyName();
+                if (propertyName.equalsIgnoreCase(timestampPropertyName)
+                        || propertyName.equalsIgnoreCase(versionNoPropertyName)
+                        || pt.getPropertyDesc().getValue(bean) != null) {
+                    types.add(pt);
+                }
+            }
+        }
+        if (types.isEmpty()) {
+            throw new NoUpdatePropertyTypeRuntimeException();
+        }
+        PropertyType[] propertyTypes = (PropertyType[]) types
+                .toArray(new PropertyType[types.size()]);
+        return propertyTypes;
+    }
+
+    protected String createUpdateSql(BeanMetaData bmd,
+            PropertyType[] propertyTypes) {
+        StringBuffer buf = new StringBuffer(100);
+        buf.append("UPDATE ");
+        buf.append(bmd.getTableName());
+        buf.append(" SET ");
+        for (int i = 0; i < propertyTypes.length; ++i) {
+            PropertyType pt = propertyTypes[i];
+            final String columnName = pt.getColumnName();
+            if (i > 0) {
+                buf.append(", ");
+            }
+            buf.append(columnName);
+            buf.append(" = ?");
+        }
+
+        buf.append(" WHERE ");
+        for (int i = 0; i < bmd.getPrimaryKeySize(); ++i) {
+            buf.append(bmd.getPrimaryKey(i));
+            buf.append(" = ? AND ");
+        }
+        buf.setLength(buf.length() - 5);
+        if (bmd.hasVersionNoPropertyType()) {
+            PropertyType pt = bmd.getVersionNoPropertyType();
+            buf.append(" AND ");
+            buf.append(pt.getColumnName());
+            buf.append(" = ?");
+        }
+        if (bmd.hasTimestampPropertyType()) {
+            PropertyType pt = bmd.getTimestampPropertyType();
+            buf.append(" AND ");
+            buf.append(pt.getColumnName());
+            buf.append(" = ?");
+        }
+
+        return buf.toString();
+    }
+
+    /**
+     * @return Returns the beanMetaData.
+     */
+    public BeanMetaData getBeanMetaData() {
+        return beanMetaData;
+    }
+
+    /**
+     * @param beanMetaData
+     *            The beanMetaData to set.
+     */
+    public void setBeanMetaData(BeanMetaData beanMetaData) {
+        this.beanMetaData = beanMetaData;
+    }
+
+    /**
+     * @return Returns the propertyNames.
+     */
+    public String[] getPropertyNames() {
+        return propertyNames;
+    }
+
+    /**
+     * @param propertyNames
+     *            The propertyNames to set.
+     */
+    public void setPropertyNames(String[] propertyNames) {
+        this.propertyNames = propertyNames;
+    }
+
+    public boolean isCheckSingleRowUpdate() {
+        return checkSingleRowUpdate;
+    }
+
+    public void setCheckSingleRowUpdate(boolean resultCheck) {
+        this.checkSingleRowUpdate = resultCheck;
+    }
+}


Property changes on: announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/s2dao/internal/sqlcommand/InternalUpdateAutoDynamicCommand.java
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/s2dao/internal/sqlcommand/InternalUpdateBatchAutoStaticCommand.java
===================================================================
--- announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/s2dao/internal/sqlcommand/InternalUpdateBatchAutoStaticCommand.java	                        (rev 0)
+++ announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/s2dao/internal/sqlcommand/InternalUpdateBatchAutoStaticCommand.java	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,51 @@
+package jp.sf.pal.announcement.db.allcommon.s2dao.internal.sqlcommand;
+
+import javax.sql.DataSource;
+
+import jp.sf.pal.announcement.db.allcommon.s2dao.internal.sqlhandler.InternalAbstractAutoHandler;
+import jp.sf.pal.announcement.db.allcommon.s2dao.internal.sqlhandler.InternalAbstractBatchAutoHandler;
+import jp.sf.pal.announcement.db.allcommon.s2dao.internal.sqlhandler.InternalUpdateBatchAutoHandler;
+
+import org.seasar.dao.BeanMetaData;
+import org.seasar.extension.jdbc.StatementFactory;
+
+/**
+ * @author DBFlute(AutoGenerator)
+ */
+public class InternalUpdateBatchAutoStaticCommand extends
+        InternalAbstractBatchAutoStaticCommand {
+
+    // ===================================================================================
+    //                                                                         Constructor
+    //                                                                         ===========
+    public InternalUpdateBatchAutoStaticCommand(DataSource dataSource,
+            StatementFactory statementFactory, BeanMetaData beanMetaData,
+            String[] propertyNames, boolean returningRows) {
+        super(dataSource, statementFactory, beanMetaData, propertyNames,
+                returningRows);
+    }
+
+    // ===================================================================================
+    //                                                                            Override
+    //                                                                            ========
+    @Override
+    protected InternalAbstractAutoHandler createAutoHandler() {
+        return createBatchAutoHandler();
+    }
+
+    @Override
+    protected InternalAbstractBatchAutoHandler createBatchAutoHandler() {
+        return new InternalUpdateBatchAutoHandler(getDataSource(),
+                getStatementFactory(), getBeanMetaData(), getPropertyTypes());
+    }
+
+    @Override
+    protected void setupSql() {
+        setupUpdateSql();
+    }
+
+    @Override
+    protected void setupPropertyTypes(String[] propertyNames) {
+        setupUpdatePropertyTypes(propertyNames);
+    }
+}


Property changes on: announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/s2dao/internal/sqlcommand/InternalUpdateBatchAutoStaticCommand.java
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/s2dao/internal/sqlcommand/InternalUpdateDynamicCommand.java
===================================================================
--- announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/s2dao/internal/sqlcommand/InternalUpdateDynamicCommand.java	                        (rev 0)
+++ announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/s2dao/internal/sqlcommand/InternalUpdateDynamicCommand.java	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,34 @@
+package jp.sf.pal.announcement.db.allcommon.s2dao.internal.sqlcommand;
+
+import javax.sql.DataSource;
+
+import jp.sf.pal.announcement.db.allcommon.s2dao.internal.sqlhandler.InternalBasicUpdateHandler;
+
+import org.seasar.dao.CommandContext;
+import org.seasar.extension.jdbc.StatementFactory;
+
+/**
+ * @author DBFlute(AutoGenerator)
+ */
+public class InternalUpdateDynamicCommand extends
+        InternalAbstractDynamicCommand {
+
+    // ===================================================================================
+    //                                                                         Constructor
+    //                                                                         ===========
+    public InternalUpdateDynamicCommand(DataSource dataSource,
+            StatementFactory statementFactory) {
+        super(dataSource, statementFactory);
+    }
+
+    // ===================================================================================
+    //                                                                             Execute
+    //                                                                             =======
+    public Object execute(Object args[]) {
+        final CommandContext ctx = apply(args);
+        final InternalBasicUpdateHandler updateHandler = new InternalBasicUpdateHandler(
+                getDataSource(), ctx.getSql(), getStatementFactory());
+        return new Integer(updateHandler.execute(ctx.getBindVariables(), ctx
+                .getBindVariableTypes()));
+    }
+}


Property changes on: announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/s2dao/internal/sqlcommand/InternalUpdateDynamicCommand.java
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/s2dao/internal/sqlcommand/InternalUpdateModifiedOnlyCommand.java
===================================================================
--- announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/s2dao/internal/sqlcommand/InternalUpdateModifiedOnlyCommand.java	                        (rev 0)
+++ announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/s2dao/internal/sqlcommand/InternalUpdateModifiedOnlyCommand.java	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,123 @@
+package jp.sf.pal.announcement.db.allcommon.s2dao.internal.sqlcommand;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Set;
+
+import javax.sql.DataSource;
+
+import jp.sf.pal.announcement.db.allcommon.s2dao.internal.sqlhandler.InternalUpdateAutoHandler;
+
+import org.seasar.dao.BeanMetaData;
+import org.seasar.dao.NotSingleRowUpdatedRuntimeException;
+import org.seasar.extension.jdbc.PropertyType;
+import org.seasar.extension.jdbc.StatementFactory;
+
+/**
+ * @author DBFlute(AutoGenerator)
+ */
+public class InternalUpdateModifiedOnlyCommand extends
+        InternalUpdateAutoDynamicCommand {
+
+    // ===================================================================================
+    //                                                                          Definition
+    //                                                                          ==========
+    /** Log instance. */
+    private static final org.apache.commons.logging.Log _log = org.apache.commons.logging.LogFactory
+            .getLog(InternalUpdateModifiedOnlyCommand.class);
+
+    private static final Integer NO_UPDATE = new Integer(0);
+
+    // ===================================================================================
+    //                                                                         Constructor
+    //                                                                         ===========
+    public InternalUpdateModifiedOnlyCommand(DataSource dataSource,
+            StatementFactory statementFactory) {
+        super(dataSource, statementFactory);
+    }
+
+    // ===================================================================================
+    //                                                                             Execute
+    //                                                                             =======
+    public Object execute(final Object[] args) {
+        final Object bean = args[0];
+        final BeanMetaData bmd = getBeanMetaData();
+        final PropertyType[] propertyTypes = createUpdatePropertyTypes(bmd,
+                bean, getPropertyNames());
+        if (propertyTypes.length == 0) {
+            if (_log.isDebugEnabled()) {
+                final String s = createNoUpdateLogMessage(bean, bmd);
+                _log.debug(s);
+            }
+            return NO_UPDATE;
+        }
+
+        final InternalUpdateAutoHandler handler = new InternalUpdateAutoHandler(
+                getDataSource(), getStatementFactory(), bmd, propertyTypes);
+
+        // It is unnecessary!
+        // injectDaoClass(handler);
+
+        handler.setSql(createUpdateSql(bmd, propertyTypes));
+        final int i = handler.execute(args);
+        if (isCheckSingleRowUpdate() && i < 1) {
+            throw createNotSingleRowUpdatedRuntimeException(args[0], i);
+        }
+        return new Integer(i);
+    }
+
+    protected NotSingleRowUpdatedRuntimeException createNotSingleRowUpdatedRuntimeException(
+            Object bean, int rows) {
+        return new jp.sf.pal.announcement.db.allcommon.exception.EntityAlreadyUpdatedException(
+                bean, rows);
+    }
+
+    protected String createNoUpdateLogMessage(final Object bean,
+            final BeanMetaData bmd) {
+        final StringBuffer sb = new StringBuffer();
+        sb.append("skip UPDATE: table=");
+        sb.append(bmd.getTableName());
+        final int size = bmd.getPrimaryKeySize();
+        for (int i = 0; i < size; i++) {
+            if (i == 0) {
+                sb.append(", key{");
+            } else {
+                sb.append(", ");
+            }
+            final String keyName = bmd.getPrimaryKey(i);
+            sb.append(keyName);
+            sb.append("=");
+            sb.append(bmd.getPropertyTypeByColumnName(keyName)
+                    .getPropertyDesc().getValue(bean));
+            if (i == size - 1) {
+                sb.append("}");
+            }
+        }
+        final String s = new String(sb);
+        return s;
+    }
+
+    protected PropertyType[] createUpdatePropertyTypes(final BeanMetaData bmd,
+            final Object bean, final String[] propertyNames) {
+
+        final Set modifiedPropertyNames = getBeanMetaData()
+                .getModifiedPropertyNames(bean);
+        final List types = new ArrayList();
+        final String timestampPropertyName = bmd.getTimestampPropertyName();
+        final String versionNoPropertyName = bmd.getVersionNoPropertyName();
+        for (int i = 0; i < propertyNames.length; ++i) {
+            final PropertyType pt = bmd.getPropertyType(propertyNames[i]);
+            if (pt.isPrimaryKey() == false) {
+                final String propertyName = pt.getPropertyName();
+                if (propertyName.equalsIgnoreCase(timestampPropertyName)
+                        || propertyName.equalsIgnoreCase(versionNoPropertyName)
+                        || modifiedPropertyNames.contains(propertyName)) {
+                    types.add(pt);
+                }
+            }
+        }
+        final PropertyType[] propertyTypes = (PropertyType[]) types
+                .toArray(new PropertyType[types.size()]);
+        return propertyTypes;
+    }
+}


Property changes on: announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/s2dao/internal/sqlcommand/InternalUpdateModifiedOnlyCommand.java
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/s2dao/internal/sqlhandler/InternalAbstractAutoHandler.java
===================================================================
--- announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/s2dao/internal/sqlhandler/InternalAbstractAutoHandler.java	                        (rev 0)
+++ announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/s2dao/internal/sqlhandler/InternalAbstractAutoHandler.java	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,261 @@
+package jp.sf.pal.announcement.db.allcommon.s2dao.internal.sqlhandler;
+
+import java.sql.Connection;
+import java.sql.PreparedStatement;
+import java.sql.SQLException;
+import java.sql.Timestamp;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
+
+import javax.sql.DataSource;
+
+import org.seasar.dao.BeanMetaData;
+import org.seasar.extension.jdbc.PropertyType;
+import org.seasar.extension.jdbc.StatementFactory;
+import org.seasar.extension.jdbc.ValueType;
+import org.seasar.extension.jdbc.util.ConnectionUtil;
+import org.seasar.framework.beans.PropertyDesc;
+import org.seasar.framework.exception.SQLRuntimeException;
+import org.seasar.framework.util.IntegerConversionUtil;
+import org.seasar.framework.util.PreparedStatementUtil;
+import org.seasar.framework.util.StatementUtil;
+
+/**
+ * @author DBFlute(AutoGenerator)
+ */
+public abstract class InternalAbstractAutoHandler extends InternalBasicHandler {
+
+    // ===================================================================================
+    //                                                                          Definition
+    //                                                                          ==========
+    /** Log instance. */
+    private static final org.apache.commons.logging.Log _log = org.apache.commons.logging.LogFactory
+            .getLog(InternalAbstractAutoHandler.class);
+
+    // ===================================================================================
+    //                                                                           Attribute
+    //                                                                           =========
+    private BeanMetaData beanMetaData;
+
+    private Object[] bindVariables;
+
+    private ValueType[] bindVariableValueTypes;
+
+    private Timestamp timestamp;
+
+    private Integer versionNo;
+
+    private PropertyType[] propertyTypes;
+
+    // ===================================================================================
+    //                                                                         Constructor
+    //                                                                         ===========
+    public InternalAbstractAutoHandler(DataSource dataSource,
+            StatementFactory statementFactory, BeanMetaData beanMetaData,
+            PropertyType[] propertyTypes) {
+        super(dataSource, statementFactory);
+        this.beanMetaData = beanMetaData;
+        this.propertyTypes = propertyTypes;
+    }
+
+    public int execute(Object[] args) throws SQLRuntimeException {
+        Connection connection = getConnection();
+        try {
+            return execute(connection, args[0]);
+        } finally {
+            ConnectionUtil.close(connection);
+        }
+    }
+
+    public int execute(Object[] args, Class[] argTypes)
+            throws SQLRuntimeException {
+        return execute(args);
+    }
+
+    protected int execute(Connection connection, Object bean) {
+        preUpdateBean(bean);
+        setupBindVariables(bean);
+        logSql(bindVariables, getArgTypes(bindVariables));
+        PreparedStatement ps = prepareStatement(connection);
+        int ret = -1;
+        try {
+            bindArgs(ps, bindVariables, bindVariableValueTypes);
+            ret = PreparedStatementUtil.executeUpdate(ps);
+        } finally {
+            StatementUtil.close(ps);
+        }
+        postUpdateBean(bean);
+        return ret;
+    }
+
+    protected void bindArgs(PreparedStatement ps, Object[] args,
+            ValueType[] valueTypes) {
+        if (args == null) {
+            return;
+        }
+        for (int i = 0; i < args.length; ++i) {
+            ValueType valueType = valueTypes[i];
+            try {
+                valueType.bindValue(ps, i + 1, args[i]);
+            } catch (SQLException ex) {
+                throw new SQLRuntimeException(ex);
+            }
+        }
+    }
+
+    protected void preUpdateBean(Object bean) {
+    }
+
+    protected void postUpdateBean(Object bean) {
+    }
+
+    protected abstract void setupBindVariables(Object bean);
+
+    protected void setupInsertBindVariables(Object bean) {
+        List varList = new ArrayList();
+        List varValueTypeList = new ArrayList();
+        final BeanMetaData bmd = getBeanMetaData();
+        final String timestampPropertyName = bmd.getTimestampPropertyName();
+        final String versionNoPropertyName = bmd.getVersionNoPropertyName();
+        for (int i = 0; i < propertyTypes.length; ++i) {
+            PropertyType pt = propertyTypes[i];
+            if (pt.getPropertyName().equalsIgnoreCase(timestampPropertyName)) {
+                setTimestamp(new Timestamp(new Date().getTime()));
+                varList.add(getTimestamp());
+            } else if (pt.getPropertyName().equals(versionNoPropertyName)) {
+                setVersionNo(new Integer(0));
+                varList.add(getVersionNo());
+            } else {
+                varList.add(pt.getPropertyDesc().getValue(bean));
+            }
+            varValueTypeList.add(pt.getValueType());
+        }
+        setBindVariables(varList.toArray());
+        setBindVariableValueTypes((ValueType[]) varValueTypeList
+                .toArray(new ValueType[varValueTypeList.size()]));
+    }
+
+    protected void setupUpdateBindVariables(Object bean) {
+        List varList = new ArrayList();
+        List varValueTypeList = new ArrayList();
+        final BeanMetaData bmd = getBeanMetaData();
+        final String timestampPropertyName = bmd.getTimestampPropertyName();
+        final String versionNoPropertyName = bmd.getVersionNoPropertyName();
+        for (int i = 0; i < propertyTypes.length; ++i) {
+            PropertyType pt = propertyTypes[i];
+            if (pt.getPropertyName().equalsIgnoreCase(timestampPropertyName)) {
+                setTimestamp(new Timestamp(new Date().getTime()));
+                varList.add(getTimestamp());
+            } else if (pt.getPropertyName().equals(versionNoPropertyName)) {
+                Object value = pt.getPropertyDesc().getValue(bean);
+                int intValue = IntegerConversionUtil.toPrimitiveInt(value) + 1;
+                setVersionNo(new Integer(intValue));
+                varList.add(getVersionNo());
+            } else {
+                varList.add(pt.getPropertyDesc().getValue(bean));
+            }
+            varValueTypeList.add(pt.getValueType());
+        }
+        addAutoUpdateWhereBindVariables(varList, varValueTypeList, bean);
+        setBindVariables(varList.toArray());
+        setBindVariableValueTypes((ValueType[]) varValueTypeList
+                .toArray(new ValueType[varValueTypeList.size()]));
+    }
+
+    protected void setupDeleteBindVariables(Object bean) {
+        List varList = new ArrayList();
+        List varValueTypeList = new ArrayList();
+        addAutoUpdateWhereBindVariables(varList, varValueTypeList, bean);
+        setBindVariables(varList.toArray());
+        setBindVariableValueTypes((ValueType[]) varValueTypeList
+                .toArray(new ValueType[varValueTypeList.size()]));
+    }
+
+    protected void addAutoUpdateWhereBindVariables(List varList,
+            List varValueTypeList, Object bean) {
+        BeanMetaData bmd = getBeanMetaData();
+        for (int i = 0; i < bmd.getPrimaryKeySize(); ++i) {
+            PropertyType pt = bmd.getPropertyTypeByColumnName(bmd
+                    .getPrimaryKey(i));
+            PropertyDesc pd = pt.getPropertyDesc();
+            varList.add(pd.getValue(bean));
+            varValueTypeList.add(pt.getValueType());
+        }
+        if (bmd.hasVersionNoPropertyType()) {
+            PropertyType pt = bmd.getVersionNoPropertyType();
+            PropertyDesc pd = pt.getPropertyDesc();
+            varList.add(pd.getValue(bean));
+            varValueTypeList.add(pt.getValueType());
+        }
+        if (bmd.hasTimestampPropertyType()) {
+            PropertyType pt = bmd.getTimestampPropertyType();
+            PropertyDesc pd = pt.getPropertyDesc();
+            varList.add(pd.getValue(bean));
+            varValueTypeList.add(pt.getValueType());
+        }
+    }
+
+    protected void updateTimestampIfNeed(Object bean) {
+        if (getTimestamp() != null) {
+            PropertyDesc pd = getBeanMetaData().getTimestampPropertyType()
+                    .getPropertyDesc();
+            pd.setValue(bean, getTimestamp());
+        }
+    }
+
+    protected void updateVersionNoIfNeed(Object bean) {
+        if (getVersionNo() != null) {
+            PropertyDesc pd = getBeanMetaData().getVersionNoPropertyType()
+                    .getPropertyDesc();
+            pd.setValue(bean, getVersionNo());
+        }
+    }
+
+    // ===================================================================================
+    //                                                                            Accessor
+    //                                                                            ========
+    public BeanMetaData getBeanMetaData() {
+        return beanMetaData;
+    }
+
+    protected Object[] getBindVariables() {
+        return bindVariables;
+    }
+
+    protected void setBindVariables(Object[] bindVariables) {
+        this.bindVariables = bindVariables;
+    }
+
+    protected ValueType[] getBindVariableValueTypes() {
+        return bindVariableValueTypes;
+    }
+
+    protected void setBindVariableValueTypes(ValueType[] bindVariableValueTypes) {
+        this.bindVariableValueTypes = bindVariableValueTypes;
+    }
+
+    protected Timestamp getTimestamp() {
+        return timestamp;
+    }
+
+    protected void setTimestamp(Timestamp timestamp) {
+        this.timestamp = timestamp;
+    }
+
+    protected Integer getVersionNo() {
+        return versionNo;
+    }
+
+    protected void setVersionNo(Integer versionNo) {
+        this.versionNo = versionNo;
+    }
+
+    protected PropertyType[] getPropertyTypes() {
+        return propertyTypes;
+    }
+
+    protected void setPropertyTypes(PropertyType[] propertyTypes) {
+        this.propertyTypes = propertyTypes;
+    }
+}


Property changes on: announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/s2dao/internal/sqlhandler/InternalAbstractAutoHandler.java
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/s2dao/internal/sqlhandler/InternalAbstractBatchAutoHandler.java
===================================================================
--- announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/s2dao/internal/sqlhandler/InternalAbstractBatchAutoHandler.java	                        (rev 0)
+++ announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/s2dao/internal/sqlhandler/InternalAbstractBatchAutoHandler.java	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,116 @@
+package jp.sf.pal.announcement.db.allcommon.s2dao.internal.sqlhandler;
+
+import java.sql.Connection;
+import java.sql.PreparedStatement;
+import java.util.Arrays;
+import java.util.Iterator;
+import java.util.List;
+
+import javax.sql.DataSource;
+
+import org.seasar.dao.BeanMetaData;
+import org.seasar.extension.jdbc.PropertyType;
+import org.seasar.extension.jdbc.StatementFactory;
+import org.seasar.extension.jdbc.util.ConnectionUtil;
+import org.seasar.framework.exception.SQLRuntimeException;
+import org.seasar.framework.util.PreparedStatementUtil;
+import org.seasar.framework.util.StatementUtil;
+
+/**
+ * @author DBFlute(AutoGenerator)
+ */
+public abstract class InternalAbstractBatchAutoHandler extends
+        InternalAbstractAutoHandler {
+
+    // ===================================================================================
+    //                                                                          Definition
+    //                                                                          ==========
+    /** Log instance. */
+    private static final org.apache.commons.logging.Log _log = org.apache.commons.logging.LogFactory
+            .getLog(InternalAbstractBatchAutoHandler.class);
+
+    // ===================================================================================
+    //                                                                         Constructor
+    //                                                                         ===========
+    public InternalAbstractBatchAutoHandler(DataSource dataSource,
+            StatementFactory statementFactory, BeanMetaData beanMetaData,
+            PropertyType[] propertyTypes) {
+
+        super(dataSource, statementFactory, beanMetaData, propertyTypes);
+    }
+
+    // ===================================================================================
+    //                                                                             Execute
+    //                                                                             =======
+    public int[] execute(List list, Class[] argTypes)
+            throws SQLRuntimeException {
+        return execute(list);
+    }
+
+    public int[] execute(List<?> list) throws SQLRuntimeException {
+        if (list == null) {
+            throw new IllegalArgumentException("list");
+        }
+        if (list.isEmpty()) {
+            if (_log.isDebugEnabled()) {
+                _log.debug("Skip executeBatch() bacause of the empty list.");
+            }
+            return new int[0];
+        }
+        Connection connection = getConnection();
+        try {
+            PreparedStatement ps = prepareStatement(connection);
+            try {
+                for (Iterator iter = list.iterator(); iter.hasNext();) {
+                    Object bean = (Object) iter.next();
+                    execute(ps, bean);
+                }
+                return PreparedStatementUtil.executeBatch(ps);
+            } finally {
+                StatementUtil.close(ps);
+            }
+        } finally {
+            ConnectionUtil.close(connection);
+        }
+    }
+
+    public int execute(Object[] args) throws SQLRuntimeException {
+        List list = null;
+        if (args[0] instanceof Object[]) {
+            list = Arrays.asList((Object[]) args[0]);
+        } else if (args[0] instanceof List) {
+            list = (List) args[0];
+        }
+        if (list == null) {
+            throw new IllegalArgumentException("args[0]");
+        }
+        int[] ret = execute(list);
+        int updatedRow = 0;
+        for (int i = 0; i < ret.length; i++) {
+            if (ret[i] > 0) {
+                updatedRow += ret[i];
+            }
+        }
+        return updatedRow;
+    }
+
+    public int[] executeBatch(Object[] args) throws SQLRuntimeException {
+        List list = null;
+        if (args[0] instanceof Object[]) {
+            list = Arrays.asList((Object[]) args[0]);
+        } else if (args[0] instanceof List) {
+            list = (List) args[0];
+        }
+        if (list == null) {
+            throw new IllegalArgumentException("args[0]");
+        }
+        return execute(list);
+    }
+
+    protected void execute(PreparedStatement ps, Object bean) {
+        setupBindVariables(bean);
+        logSql(getBindVariables(), getArgTypes(getBindVariables()));
+        bindArgs(ps, getBindVariables(), getBindVariableValueTypes());
+        PreparedStatementUtil.addBatch(ps);
+    }
+}


Property changes on: announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/s2dao/internal/sqlhandler/InternalAbstractBatchAutoHandler.java
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/s2dao/internal/sqlhandler/InternalBasicHandler.java
===================================================================
--- announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/s2dao/internal/sqlhandler/InternalBasicHandler.java	                        (rev 0)
+++ announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/s2dao/internal/sqlhandler/InternalBasicHandler.java	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,178 @@
+package jp.sf.pal.announcement.db.allcommon.s2dao.internal.sqlhandler;
+
+import java.sql.Connection;
+import java.sql.PreparedStatement;
+import java.sql.SQLException;
+
+import javax.sql.DataSource;
+
+import jp.sf.pal.announcement.db.allcommon.QLog;
+import jp.sf.pal.announcement.db.allcommon.cbean.ConditionBeanContext;
+import jp.sf.pal.announcement.db.allcommon.s2dao.internal.sqllog.InternalSqlLogRegistry;
+import jp.sf.pal.announcement.db.allcommon.s2dao.internal.util.InternalBindVariableUtil;
+import jp.sf.pal.announcement.db.allcommon.util.SimpleSystemUtil;
+
+import org.seasar.extension.jdbc.StatementFactory;
+import org.seasar.extension.jdbc.ValueType;
+import org.seasar.extension.jdbc.types.ValueTypes;
+import org.seasar.extension.jdbc.util.DataSourceUtil;
+import org.seasar.framework.exception.EmptyRuntimeException;
+import org.seasar.framework.exception.SQLRuntimeException;
+
+/**
+ * @author DBFlute(AutoGenerator)
+ */
+public class InternalBasicHandler {
+
+    // ===================================================================================
+    //                                                                          Definition
+    //                                                                          ==========
+    /** Log instance. */
+    private static final org.apache.commons.logging.Log _log = org.apache.commons.logging.LogFactory
+            .getLog(InternalBasicHandler.class);
+
+    // ===================================================================================
+    //                                                                           Attribute
+    //                                                                           =========
+    private DataSource dataSource;
+
+    private String sql;
+
+    private StatementFactory statementFactory;
+
+    // ===================================================================================
+    //                                                                         Constructor
+    //                                                                         ===========
+    public InternalBasicHandler(DataSource ds, StatementFactory statementFactory) {
+        setDataSource(ds);
+        setStatementFactory(statementFactory);
+    }
+
+    public InternalBasicHandler(DataSource ds, String sql,
+            StatementFactory statementFactory) {
+        setDataSource(ds);
+        setSql(sql);
+        setStatementFactory(statementFactory);
+    }
+
+    // ===================================================================================
+    //                                                           Basic Method for SubClass
+    //                                                           =========================
+    protected void bindArgs(PreparedStatement ps, Object[] args,
+            Class<?>[] argTypes) {
+        if (args == null) {
+            return;
+        }
+        for (int i = 0; i < args.length; ++i) {
+            ValueType valueType = getValueType(argTypes[i]);
+            try {
+                valueType.bindValue(ps, i + 1, args[i]);
+            } catch (SQLException ex) {
+                throw new SQLRuntimeException(ex);
+            }
+        }
+    }
+
+    protected Class[] getArgTypes(Object[] args) {
+        if (args == null) {
+            return null;
+        }
+        Class[] argTypes = new Class[args.length];
+        for (int i = 0; i < args.length; ++i) {
+            Object arg = args[i];
+            if (arg != null) {
+                argTypes[i] = arg.getClass();
+            }
+        }
+        return argTypes;
+    }
+
+    protected String getCompleteSql(Object[] args) {
+        return InternalBindVariableUtil.getCompleteSql(sql, args);
+    }
+
+    protected String getBindVariableText(Object bindVariable) {
+        return InternalBindVariableUtil.getBindVariableText(bindVariable);
+    }
+
+    protected ValueType getValueType(Class<?> clazz) {
+        return ValueTypes.getValueType(clazz);
+    }
+
+    protected void logSql(Object[] args, Class<?>[] argTypes) {
+        if (QLog.isLogEnabled()
+                || InternalSqlLogRegistry.existsSqlLogRegistry()) {
+            final String completeSql = getCompleteSql(args);
+            if (isConditionBeanFormatSqlEffective()) {
+                QLog.log(getLineSeparator() + completeSql);
+            } else {
+                QLog.log(completeSql);
+            }
+            if (InternalSqlLogRegistry.existsSqlLogRegistry()) {
+                final Object sqlLogRegistry = InternalSqlLogRegistry
+                        .findContainerSqlLogRegistry();
+                if (sqlLogRegistry != null) {
+                    InternalSqlLogRegistry.push(getSql(), completeSql, args,
+                            argTypes, sqlLogRegistry);
+                }
+            }
+        }
+    }
+
+    protected boolean isConditionBeanFormatSqlEffective() {
+        if (ConditionBeanContext.isExistConditionBeanOnThread()) {
+            if (ConditionBeanContext.getConditionBeanOnThread().isFormatSql()) {
+                return true;
+            }
+        }
+        return false;
+    }
+
+    // ===================================================================================
+    //                                                                      General Helper
+    //                                                                      ==============
+    protected String getLineSeparator() {
+        return SimpleSystemUtil.getLineSeparator();
+    }
+
+    // ===================================================================================
+    //                                                                            Accessor
+    //                                                                            ========
+    public DataSource getDataSource() {
+        return dataSource;
+    }
+
+    public void setDataSource(DataSource dataSource) {
+        this.dataSource = dataSource;
+    }
+
+    public String getSql() {
+        return sql;
+    }
+
+    public void setSql(String sql) {
+        this.sql = sql;
+    }
+
+    public StatementFactory getStatementFactory() {
+        return statementFactory;
+    }
+
+    public void setStatementFactory(StatementFactory statementFactory) {
+        this.statementFactory = statementFactory;
+    }
+
+    protected Connection getConnection() {
+        if (dataSource == null) {
+            throw new EmptyRuntimeException("dataSource");
+        }
+        return DataSourceUtil.getConnection(dataSource);
+    }
+
+    protected PreparedStatement prepareStatement(Connection connection) {
+        if (sql == null) {
+            throw new EmptyRuntimeException("sql");
+        }
+        return statementFactory.createPreparedStatement(connection, sql);
+    }
+}


Property changes on: announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/s2dao/internal/sqlhandler/InternalBasicHandler.java
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/s2dao/internal/sqlhandler/InternalBasicSelectHandler.java
===================================================================
--- announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/s2dao/internal/sqlhandler/InternalBasicSelectHandler.java	                        (rev 0)
+++ announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/s2dao/internal/sqlhandler/InternalBasicSelectHandler.java	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,151 @@
+package jp.sf.pal.announcement.db.allcommon.s2dao.internal.sqlhandler;
+
+import java.sql.Connection;
+import java.sql.DatabaseMetaData;
+import java.sql.PreparedStatement;
+import java.sql.ResultSet;
+import java.sql.SQLException;
+
+import javax.sql.DataSource;
+
+import org.seasar.extension.jdbc.ResultSetFactory;
+import org.seasar.extension.jdbc.ResultSetHandler;
+import org.seasar.extension.jdbc.SelectHandler;
+import org.seasar.extension.jdbc.StatementFactory;
+import org.seasar.extension.jdbc.util.ConnectionUtil;
+import org.seasar.framework.exception.EmptyRuntimeException;
+import org.seasar.framework.exception.SQLRuntimeException;
+import org.seasar.framework.util.ResultSetUtil;
+import org.seasar.framework.util.StatementUtil;
+
+/**
+ * @author DBFlute(AutoGenerator)
+ */
+public class InternalBasicSelectHandler extends InternalBasicHandler implements
+        SelectHandler {
+
+    // ===================================================================================
+    //                                                                           Attribute
+    //                                                                           =========
+    private ResultSetFactory resultSetFactory;
+
+    private ResultSetHandler resultSetHandler;
+
+    private int fetchSize = 100;
+
+    private int maxRows = -1;
+
+    // ===================================================================================
+    //                                                                         Constructor
+    //                                                                         ===========
+    public InternalBasicSelectHandler(DataSource dataSource, String sql,
+            ResultSetHandler resultSetHandler,
+            StatementFactory statementFactory, ResultSetFactory resultSetFactory) {
+        super(dataSource, statementFactory);
+        setSql(sql);
+        setResultSetHandler(resultSetHandler);
+        setResultSetFactory(resultSetFactory);
+    }
+
+    // ===================================================================================
+    //                                                                             Execute
+    //                                                                             =======
+    public Object execute(Object[] args) throws SQLRuntimeException {
+        return execute(args, getArgTypes(args));
+    }
+
+    public Object execute(Object[] args, Class[] argTypes)
+            throws SQLRuntimeException {
+        Connection con = getConnection();
+        try {
+            return execute(con, args, argTypes);
+        } finally {
+            ConnectionUtil.close(con);
+        }
+    }
+
+    public Object execute(Connection connection, Object[] args, Class[] argTypes)
+            throws SQLRuntimeException {
+        logSql(args, argTypes);
+        PreparedStatement ps = null;
+        try {
+            ps = prepareStatement(connection);
+            bindArgs(ps, args, argTypes);
+            return execute(ps);
+        } catch (SQLException ex) {
+            throw new SQLRuntimeException(ex);
+        } finally {
+            StatementUtil.close(ps);
+        }
+    }
+
+    protected Object[] setup(Connection con, Object[] args) {
+        return args;
+    }
+
+    protected PreparedStatement prepareStatement(Connection connection) {
+        PreparedStatement ps = super.prepareStatement(connection);
+        if (fetchSize > -1) {
+            StatementUtil.setFetchSize(ps, fetchSize);
+        }
+        if (maxRows > -1) {
+            StatementUtil.setMaxRows(ps, maxRows);
+        }
+        return ps;
+    }
+
+    protected Object execute(PreparedStatement ps) throws SQLException {
+        if (resultSetHandler == null) {
+            throw new EmptyRuntimeException("resultSetHandler");
+        }
+        ResultSet resultSet = null;
+        try {
+            resultSet = createResultSet(ps);
+            return resultSetHandler.handle(resultSet);
+        } finally {
+            ResultSetUtil.close(resultSet);
+        }
+    }
+
+    protected void setupDatabaseMetaData(DatabaseMetaData dbMetaData) {
+    }
+
+    protected ResultSet createResultSet(PreparedStatement ps) {
+        return resultSetFactory.createResultSet(ps);
+    }
+
+    // ===================================================================================
+    //                                                                            Accessor
+    //                                                                            ========
+    public ResultSetFactory getResultSetFactory() {
+        return resultSetFactory;
+    }
+
+    public void setResultSetFactory(ResultSetFactory resultSetFactory) {
+        this.resultSetFactory = resultSetFactory;
+    }
+
+    public ResultSetHandler getResultSetHandler() {
+        return resultSetHandler;
+    }
+
+    public void setResultSetHandler(ResultSetHandler resultSetHandler) {
+        this.resultSetHandler = resultSetHandler;
+    }
+
+    public int getFetchSize() {
+        return fetchSize;
+    }
+
+    public void setFetchSize(int fetchSize) {
+        this.fetchSize = fetchSize;
+    }
+
+    public int getMaxRows() {
+        return maxRows;
+    }
+
+    public void setMaxRows(int maxRows) {
+        this.maxRows = maxRows;
+    }
+}


Property changes on: announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/s2dao/internal/sqlhandler/InternalBasicSelectHandler.java
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/s2dao/internal/sqlhandler/InternalBasicUpdateHandler.java
===================================================================
--- announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/s2dao/internal/sqlhandler/InternalBasicUpdateHandler.java	                        (rev 0)
+++ announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/s2dao/internal/sqlhandler/InternalBasicUpdateHandler.java	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,56 @@
+package jp.sf.pal.announcement.db.allcommon.s2dao.internal.sqlhandler;
+
+import java.sql.Connection;
+import java.sql.PreparedStatement;
+
+import javax.sql.DataSource;
+
+import org.seasar.extension.jdbc.StatementFactory;
+import org.seasar.extension.jdbc.UpdateHandler;
+import org.seasar.extension.jdbc.util.ConnectionUtil;
+import org.seasar.framework.exception.SQLRuntimeException;
+import org.seasar.framework.util.PreparedStatementUtil;
+import org.seasar.framework.util.StatementUtil;
+
+/**
+ * @author DBFlute(AutoGenerator)
+ */
+public class InternalBasicUpdateHandler extends InternalBasicHandler implements
+        UpdateHandler {
+
+    // ===================================================================================
+    //                                                                         Constructor
+    //                                                                         ===========
+    public InternalBasicUpdateHandler(DataSource dataSource, String sql,
+            StatementFactory statementFactory) {
+        super(dataSource, sql, statementFactory);
+    }
+
+    // ===================================================================================
+    //                                                                             Execute
+    //                                                                             =======
+    public int execute(Object[] args) throws SQLRuntimeException {
+        return execute(args, getArgTypes(args));
+    }
+
+    public int execute(Object[] args, Class[] argTypes)
+            throws SQLRuntimeException {
+        Connection connection = getConnection();
+        try {
+            return execute(connection, args, argTypes);
+        } finally {
+            ConnectionUtil.close(connection);
+        }
+    }
+
+    public int execute(Connection connection, Object[] args, Class[] argTypes) {
+        logSql(args, argTypes);
+        PreparedStatement ps = prepareStatement(connection);
+        try {
+            bindArgs(ps, args, argTypes);
+            return PreparedStatementUtil.executeUpdate(ps);
+        } finally {
+            StatementUtil.close(ps);
+        }
+    }
+}


Property changes on: announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/s2dao/internal/sqlhandler/InternalBasicUpdateHandler.java
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/s2dao/internal/sqlhandler/InternalCommandContextHandler.java
===================================================================
--- announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/s2dao/internal/sqlhandler/InternalCommandContextHandler.java	                        (rev 0)
+++ announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/s2dao/internal/sqlhandler/InternalCommandContextHandler.java	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,61 @@
+package jp.sf.pal.announcement.db.allcommon.s2dao.internal.sqlhandler;
+
+import java.sql.Connection;
+import java.sql.PreparedStatement;
+
+import javax.sql.DataSource;
+
+import org.seasar.dao.CommandContext;
+import org.seasar.extension.jdbc.StatementFactory;
+import org.seasar.extension.jdbc.util.ConnectionUtil;
+import org.seasar.framework.exception.SQLRuntimeException;
+import org.seasar.framework.util.PreparedStatementUtil;
+import org.seasar.framework.util.StatementUtil;
+
+/**
+ * @author DBFlute(AutoGenerator)
+ */
+public class InternalCommandContextHandler extends InternalBasicHandler {
+
+    // ===================================================================================
+    //                                                                           Attribute
+    //                                                                           =========
+    protected CommandContext commandContext;
+
+    // ===================================================================================
+    //                                                                         Constructor
+    //                                                                         ===========
+    public InternalCommandContextHandler(DataSource dataSource,
+            StatementFactory statementFactory, CommandContext commandContext) {
+        super(dataSource, statementFactory);
+        this.commandContext = commandContext;
+        setSql(commandContext.getSql());
+    }
+
+    // ===================================================================================
+    //                                                                             Execute
+    //                                                                             =======
+    public int execute(Object[] args) throws SQLRuntimeException {
+        final Connection connection = getConnection();
+        try {
+            return execute(connection, commandContext);
+        } finally {
+            ConnectionUtil.close(connection);
+        }
+    }
+
+    protected int execute(Connection connection, CommandContext context) {
+        logSql(context.getBindVariables(), getArgTypes(context
+                .getBindVariables()));
+        PreparedStatement ps = prepareStatement(connection);
+        int ret = -1;
+        try {
+            bindArgs(ps, context.getBindVariables(), context
+                    .getBindVariableTypes());
+            ret = PreparedStatementUtil.executeUpdate(ps);
+        } finally {
+            StatementUtil.close(ps);
+        }
+        return ret;
+    }
+}


Property changes on: announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/s2dao/internal/sqlhandler/InternalCommandContextHandler.java
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/s2dao/internal/sqlhandler/InternalDeleteAutoHandler.java
===================================================================
--- announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/s2dao/internal/sqlhandler/InternalDeleteAutoHandler.java	                        (rev 0)
+++ announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/s2dao/internal/sqlhandler/InternalDeleteAutoHandler.java	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,30 @@
+package jp.sf.pal.announcement.db.allcommon.s2dao.internal.sqlhandler;
+
+import javax.sql.DataSource;
+
+import org.seasar.dao.BeanMetaData;
+import org.seasar.extension.jdbc.PropertyType;
+import org.seasar.extension.jdbc.StatementFactory;
+
+/**
+ * @author DBFlute(AutoGenerator)
+ */
+public class InternalDeleteAutoHandler extends InternalAbstractAutoHandler {
+
+    // ===================================================================================
+    //                                                                         Constructor
+    //                                                                         ===========
+    public InternalDeleteAutoHandler(DataSource dataSource,
+            StatementFactory statementFactory, BeanMetaData beanMetaData,
+            PropertyType[] propertyTypes) {
+        super(dataSource, statementFactory, beanMetaData, propertyTypes);
+    }
+
+    // ===================================================================================
+    //                                                                            Override
+    //                                                                            ========
+    @Override
+    protected void setupBindVariables(Object bean) {
+        setupDeleteBindVariables(bean);
+    }
+}
\ No newline at end of file


Property changes on: announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/s2dao/internal/sqlhandler/InternalDeleteAutoHandler.java
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/s2dao/internal/sqlhandler/InternalDeleteBatchAutoHandler.java
===================================================================
--- announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/s2dao/internal/sqlhandler/InternalDeleteBatchAutoHandler.java	                        (rev 0)
+++ announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/s2dao/internal/sqlhandler/InternalDeleteBatchAutoHandler.java	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,32 @@
+package jp.sf.pal.announcement.db.allcommon.s2dao.internal.sqlhandler;
+
+import javax.sql.DataSource;
+
+import org.seasar.dao.BeanMetaData;
+import org.seasar.extension.jdbc.PropertyType;
+import org.seasar.extension.jdbc.StatementFactory;
+
+/**
+ * @author DBFlute(AutoGenerator)
+ */
+public class InternalDeleteBatchAutoHandler extends
+        InternalAbstractBatchAutoHandler {
+
+    // ===================================================================================
+    //                                                                         Constructor
+    //                                                                         ===========
+    public InternalDeleteBatchAutoHandler(DataSource dataSource,
+            StatementFactory statementFactory, BeanMetaData beanMetaData,
+            PropertyType[] propertyTypes) {
+
+        super(dataSource, statementFactory, beanMetaData, propertyTypes);
+    }
+
+    // ===================================================================================
+    //                                                                            Override
+    //                                                                            ========
+    @Override
+    protected void setupBindVariables(Object bean) {
+        setupDeleteBindVariables(bean);
+    }
+}
\ No newline at end of file


Property changes on: announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/s2dao/internal/sqlhandler/InternalDeleteBatchAutoHandler.java
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/s2dao/internal/sqlhandler/InternalInsertAutoHandler.java
===================================================================
--- announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/s2dao/internal/sqlhandler/InternalInsertAutoHandler.java	                        (rev 0)
+++ announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/s2dao/internal/sqlhandler/InternalInsertAutoHandler.java	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,55 @@
+package jp.sf.pal.announcement.db.allcommon.s2dao.internal.sqlhandler;
+
+import javax.sql.DataSource;
+
+import org.seasar.dao.BeanMetaData;
+import org.seasar.dao.IdentifierGenerator;
+import org.seasar.extension.jdbc.PropertyType;
+import org.seasar.extension.jdbc.StatementFactory;
+
+/**
+ * @author DBFlute(AutoGenerator)
+ */
+public class InternalInsertAutoHandler extends InternalAbstractAutoHandler {
+
+    // ===================================================================================
+    //                                                                         Constructor
+    //                                                                         ===========
+    public InternalInsertAutoHandler(DataSource dataSource,
+            StatementFactory statementFactory, BeanMetaData beanMetaData,
+            PropertyType[] propertyTypes) {
+        super(dataSource, statementFactory, beanMetaData, propertyTypes);
+    }
+
+    // ===================================================================================
+    //                                                                            Override
+    //                                                                            ========
+    @Override
+    protected void setupBindVariables(Object bean) {
+        setupInsertBindVariables(bean);
+    }
+
+    @Override
+    protected void preUpdateBean(Object bean) {
+        BeanMetaData bmd = getBeanMetaData();
+        for (int i = 0; i < bmd.getIdentifierGeneratorSize(); i++) {
+            IdentifierGenerator generator = bmd.getIdentifierGenerator(i);
+            if (generator.isSelfGenerate()) {
+                generator.setIdentifier(bean, getDataSource());
+            }
+        }
+    }
+
+    @Override
+    protected void postUpdateBean(Object bean) {
+        BeanMetaData bmd = getBeanMetaData();
+        for (int i = 0; i < bmd.getIdentifierGeneratorSize(); i++) {
+            IdentifierGenerator generator = bmd.getIdentifierGenerator(i);
+            if (!generator.isSelfGenerate()) {
+                generator.setIdentifier(bean, getDataSource());
+            }
+        }
+        updateVersionNoIfNeed(bean);
+        updateTimestampIfNeed(bean);
+    }
+}


Property changes on: announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/s2dao/internal/sqlhandler/InternalInsertAutoHandler.java
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/s2dao/internal/sqlhandler/InternalInsertBatchAutoHandler.java
===================================================================
--- announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/s2dao/internal/sqlhandler/InternalInsertBatchAutoHandler.java	                        (rev 0)
+++ announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/s2dao/internal/sqlhandler/InternalInsertBatchAutoHandler.java	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,32 @@
+package jp.sf.pal.announcement.db.allcommon.s2dao.internal.sqlhandler;
+
+import javax.sql.DataSource;
+
+import org.seasar.dao.BeanMetaData;
+import org.seasar.extension.jdbc.PropertyType;
+import org.seasar.extension.jdbc.StatementFactory;
+
+/**
+ * @author DBFlute(AutoGenerator)
+ */
+public class InternalInsertBatchAutoHandler extends
+        InternalAbstractBatchAutoHandler {
+
+    // ===================================================================================
+    //                                                                         Constructor
+    //                                                                         ===========
+    public InternalInsertBatchAutoHandler(DataSource dataSource,
+            StatementFactory statementFactory, BeanMetaData beanMetaData,
+            PropertyType[] propertyTypes) {
+
+        super(dataSource, statementFactory, beanMetaData, propertyTypes);
+    }
+
+    // ===================================================================================
+    //                                                                            Override
+    //                                                                            ========
+    @Override
+    protected void setupBindVariables(Object bean) {
+        setupInsertBindVariables(bean);
+    }
+}
\ No newline at end of file


Property changes on: announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/s2dao/internal/sqlhandler/InternalInsertBatchAutoHandler.java
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/s2dao/internal/sqlhandler/InternalUpdateAutoHandler.java
===================================================================
--- announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/s2dao/internal/sqlhandler/InternalUpdateAutoHandler.java	                        (rev 0)
+++ announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/s2dao/internal/sqlhandler/InternalUpdateAutoHandler.java	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,36 @@
+package jp.sf.pal.announcement.db.allcommon.s2dao.internal.sqlhandler;
+
+import javax.sql.DataSource;
+
+import org.seasar.dao.BeanMetaData;
+import org.seasar.extension.jdbc.PropertyType;
+import org.seasar.extension.jdbc.StatementFactory;
+
+/**
+ * @author DBFlute(AutoGenerator)
+ */
+public class InternalUpdateAutoHandler extends InternalAbstractAutoHandler {
+
+    // ===================================================================================
+    //                                                                         Constructor
+    //                                                                         ===========
+    public InternalUpdateAutoHandler(DataSource dataSource,
+            StatementFactory statementFactory, BeanMetaData beanMetaData,
+            PropertyType[] propertyTypes) {
+        super(dataSource, statementFactory, beanMetaData, propertyTypes);
+    }
+
+    // ===================================================================================
+    //                                                                            Override
+    //                                                                            ========
+    @Override
+    protected void setupBindVariables(Object bean) {
+        setupUpdateBindVariables(bean);
+    }
+
+    @Override
+    protected void postUpdateBean(Object bean) {
+        updateVersionNoIfNeed(bean);
+        updateTimestampIfNeed(bean);
+    }
+}


Property changes on: announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/s2dao/internal/sqlhandler/InternalUpdateAutoHandler.java
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/s2dao/internal/sqlhandler/InternalUpdateBatchAutoHandler.java
===================================================================
--- announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/s2dao/internal/sqlhandler/InternalUpdateBatchAutoHandler.java	                        (rev 0)
+++ announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/s2dao/internal/sqlhandler/InternalUpdateBatchAutoHandler.java	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,32 @@
+package jp.sf.pal.announcement.db.allcommon.s2dao.internal.sqlhandler;
+
+import javax.sql.DataSource;
+
+import org.seasar.dao.BeanMetaData;
+import org.seasar.extension.jdbc.PropertyType;
+import org.seasar.extension.jdbc.StatementFactory;
+
+/**
+ * @author DBFlute(AutoGenerator)
+ */
+public class InternalUpdateBatchAutoHandler extends
+        InternalAbstractBatchAutoHandler {
+
+    // ===================================================================================
+    //                                                                         Constructor
+    //                                                                         ===========
+    public InternalUpdateBatchAutoHandler(DataSource dataSource,
+            StatementFactory statementFactory, BeanMetaData beanMetaData,
+            PropertyType[] propertyTypes) {
+
+        super(dataSource, statementFactory, beanMetaData, propertyTypes);
+    }
+
+    // ===================================================================================
+    //                                                                            Override
+    //                                                                            ========
+    @Override
+    protected void setupBindVariables(Object bean) {
+        setupUpdateBindVariables(bean);
+    }
+}
\ No newline at end of file


Property changes on: announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/s2dao/internal/sqlhandler/InternalUpdateBatchAutoHandler.java
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/s2dao/internal/sqllog/InternalSqlLog.java
===================================================================
--- announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/s2dao/internal/sqllog/InternalSqlLog.java	                        (rev 0)
+++ announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/s2dao/internal/sqllog/InternalSqlLog.java	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,52 @@
+package jp.sf.pal.announcement.db.allcommon.s2dao.internal.sqllog;
+
+/**
+ * @author DBFlute(AutoGenerator)
+ */
+public class InternalSqlLog {
+
+    // ===================================================================================
+    //                                                                           Attribute
+    //                                                                           =========
+    private String rawSql;
+
+    private String completeSql;
+
+    private Object[] bindArgs;
+
+    private Class[] bindArgTypes;
+
+    // ===================================================================================
+    //                                                                         Constructor
+    //                                                                         ===========
+    public InternalSqlLog(String rawSql, String completeSql, Object[] bindArgs,
+            Class[] bindArgTypes) {
+        this.rawSql = rawSql;
+        this.completeSql = completeSql;
+        this.bindArgs = bindArgs;
+        this.bindArgTypes = bindArgTypes;
+    }
+
+    // ===================================================================================
+    //                                                                            Accessor
+    //                                                                            ========
+    public Object[] getBindArgs() {
+        return bindArgs;
+    }
+
+    public Class[] getBindArgTypes() {
+        return bindArgTypes;
+    }
+
+    public String getCompleteSql() {
+        return completeSql;
+    }
+
+    public String getRawSql() {
+        return rawSql;
+    }
+
+    public String toString() {
+        return rawSql;
+    }
+}


Property changes on: announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/s2dao/internal/sqllog/InternalSqlLog.java
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/s2dao/internal/sqllog/InternalSqlLogRegistry.java
===================================================================
--- announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/s2dao/internal/sqllog/InternalSqlLogRegistry.java	                        (rev 0)
+++ announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/s2dao/internal/sqllog/InternalSqlLogRegistry.java	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,203 @@
+package jp.sf.pal.announcement.db.allcommon.s2dao.internal.sqllog;
+
+import java.lang.reflect.Constructor;
+import java.lang.reflect.Method;
+
+/**
+ * @author DBFlute(AutoGenerator)
+ */
+public class InternalSqlLogRegistry {
+
+    // ===================================================================================
+    //                                                                          Definition
+    //                                                                          ==========
+    /** Log instance. */
+    private static final org.apache.commons.logging.Log _log = org.apache.commons.logging.LogFactory
+            .getLog(InternalSqlLogRegistry.class);
+
+    // ===================================================================================
+    //                                                                          Definition
+    //                                                                          ==========
+    protected static final String NAME_SqlLogRegistryLocator = "org.seasar.extension.jdbc.SqlLogRegistryLocator";
+
+    protected static final String NAME_getInstance = "getInstance";
+
+    protected static final String NAME_setInstance = "setInstance";
+
+    protected static final String NAME_SqlLogRegistry = "org.seasar.extension.jdbc.SqlLogRegistry";
+
+    protected static final String NAME_SqlLog = "org.seasar.extension.jdbc.SqlLog";
+
+    protected static final String NAME_SqlLogImpl = "org.seasar.extension.jdbc.impl.SqlLogImpl";
+
+    protected static boolean STATUS_SqlLogExists = false;
+    static {
+        forNameContainerSqlLogRegistryLocator();
+    }
+
+    // ===================================================================================
+    //                                                                        Public Entry
+    //                                                                        ============
+    public static boolean existsSqlLogRegistry() {
+        return STATUS_SqlLogExists;
+    }
+
+    public static Object findContainerSqlLogRegistry() {
+        final Class<?> sqlLogRegistryLocatorType = forNameContainerSqlLogRegistryLocator();
+        if (sqlLogRegistryLocatorType == null) {
+            return null;
+        }
+        try {
+            final Method method = sqlLogRegistryLocatorType.getMethod(
+                    NAME_getInstance, (Class[]) null);
+            return method.invoke(null, (Object[]) null);
+        } catch (Exception e) {
+            String msg = "InternalSqlLogRegistry.findContainerSqlLogRegistry() threw the exception:";
+            msg = msg + " sqlLogRegistryLocatorType="
+                    + sqlLogRegistryLocatorType;
+            msg = msg + " NAME_getInstance=" + NAME_getInstance;
+            throw new IllegalStateException(msg, e);
+        }
+    }
+
+    public static void closeRegistration() {
+        final Class<?> sqlLogRegistryLocatorType = forNameContainerSqlLogRegistryLocator();
+        if (sqlLogRegistryLocatorType == null) {
+            return;
+        }
+        final Class<?> sqlLogRegistryType = forNameContainerSqlLogRegistry();
+        if (sqlLogRegistryType == null) {
+            return;
+        }
+        try {
+            final Method method = sqlLogRegistryLocatorType.getMethod(
+                    NAME_setInstance, new Class[] { sqlLogRegistryType });
+            _log.info("...Closing the registration of sqlLog.");
+            method.invoke(null, new Object[] { null });
+        } catch (Exception e) {
+            String msg = "InternalSqlLogRegistry.closeRegistration() threw the exception:";
+            msg = msg + " sqlLogRegistryLocatorType="
+                    + sqlLogRegistryLocatorType;
+            msg = msg + " NAME_setInstance=" + NAME_setInstance;
+            throw new IllegalStateException(msg, e);
+        }
+    }
+
+    public static void push(String rawSql, String completeSql,
+            Object[] bindArgs, Class<?>[] bindArgTypes, Object sqlLogRegistry) {
+        if (sqlLogRegistry == null) {
+            throw new IllegalArgumentException(
+                    "sqlLogRegistry should not be null!");
+        }
+        final Object sqlLogImpl = createContainerSqlLogImpl(rawSql,
+                completeSql, bindArgs, bindArgTypes);
+        reflectSqlLogToContainerSqlLogRegistry(sqlLogImpl, sqlLogRegistry);
+    }
+
+    public static String peekCompleteSql() {
+        final Object sqlLogRegistry = findContainerSqlLogRegistry();
+        if (sqlLogRegistry == null) {
+            return null;
+        }
+        final Object sqlLog = findLastContainerSqlLog(sqlLogRegistry);
+        if (sqlLog == null) {
+            return null;
+        }
+        return extractCompleteSqlFromContainerSqlLog(sqlLog);
+    }
+
+    // ===================================================================================
+    //                                                                Container Reflection
+    //                                                                ====================
+    protected static Object createContainerSqlLogImpl(String rawSql,
+            String completeSql, Object[] bindArgs, Class<?>[] bindArgTypes) {
+        try {
+            final Class<?> sqlLogImplType = Class.forName(NAME_SqlLogImpl);
+            final Class<?>[] argTypes = new Class[] { String.class,
+                    String.class, Object[].class, Class[].class };
+            final Constructor<?> constructor = sqlLogImplType
+                    .getConstructor(argTypes);
+            return constructor.newInstance(new Object[] { rawSql, completeSql,
+                    bindArgs, bindArgTypes });
+        } catch (Exception e) {
+            String msg = "InternalSqlLogRegistry.createContainerSqlLogImpl() threw the exception:";
+            msg = msg + " completeSql=" + completeSql;
+            msg = msg + " NAME_SqlLogImpl=" + NAME_SqlLogImpl;
+            throw new IllegalStateException(msg, e);
+        }
+    }
+
+    protected static void reflectSqlLogToContainerSqlLogRegistry(Object sqlLog,
+            Object sqlLogRegistry) {
+        if (sqlLog == null || sqlLogRegistry == null) {
+            return;
+        }
+        try {
+            final Class<?> sqlLogRegistryType = sqlLogRegistry.getClass();
+            final Class<?> sqlLogType = Class.forName(NAME_SqlLog);
+            final Method method = sqlLogRegistryType.getMethod("add",
+                    new Class[] { sqlLogType });
+            method.invoke(sqlLogRegistry, new Object[] { sqlLog });
+        } catch (Exception e) {
+            String msg = "InternalSqlLogRegistry.reflectToContainerSqlLogRegistry() threw the exception:";
+            msg = msg + " sqlLog=" + sqlLog + " sqlLogRegistry="
+                    + sqlLogRegistry;
+            msg = msg + " NAME_SqlLog=" + NAME_SqlLog;
+            throw new IllegalStateException(msg, e);
+        }
+    }
+
+    protected static Object findLastContainerSqlLog(Object sqlLogRegistry) {
+        if (sqlLogRegistry == null) {
+            return null;
+        }
+        try {
+            final Class<?> sqlLogRegistryType = sqlLogRegistry.getClass();
+            final Method method = sqlLogRegistryType.getMethod("getLast",
+                    (Class[]) null);
+            return method.invoke(sqlLogRegistry, (Object[]) null);
+        } catch (Exception e) {
+            String msg = "InternalSqlLogRegistry.findLastContainerSqlLog() threw the exception:";
+            msg = msg + " sqlLogRegistry=" + sqlLogRegistry;
+            throw new IllegalStateException(msg, e);
+        }
+    }
+
+    protected static String extractCompleteSqlFromContainerSqlLog(Object sqlLog) {
+        if (sqlLog == null) {
+            return null;
+        }
+        try {
+            final Class<?> sqlLogType = sqlLog.getClass();
+            final Method method = sqlLogType.getMethod("getCompleteSql",
+                    (Class[]) null);
+            return (String) method.invoke(sqlLog, (Object[]) null);
+        } catch (Exception e) {
+            String msg = "InternalSqlLogRegistry.extractCompleteSqlFromContainerSqlLog() threw the exception:";
+            msg = msg + " sqlLog=" + sqlLog;
+            throw new IllegalStateException(msg, e);
+        }
+    }
+
+    protected static Class<?> forNameContainerSqlLogRegistryLocator() {
+        Class<?> clazz = null;
+        try {
+            clazz = Class.forName(NAME_SqlLogRegistryLocator);
+            STATUS_SqlLogExists = true;
+        } catch (Exception ignored) {
+            STATUS_SqlLogExists = false;
+            return null;
+        }
+        return clazz;
+    }
+
+    protected static Class<?> forNameContainerSqlLogRegistry() {
+        Class<?> clazz = null;
+        try {
+            clazz = Class.forName(NAME_SqlLogRegistry);
+        } catch (Exception ignored) {
+            return null;
+        }
+        return clazz;
+    }
+}


Property changes on: announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/s2dao/internal/sqllog/InternalSqlLogRegistry.java
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/s2dao/internal/sqlparser/InternalCommandContextCreator.java
===================================================================
--- announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/s2dao/internal/sqlparser/InternalCommandContextCreator.java	                        (rev 0)
+++ announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/s2dao/internal/sqlparser/InternalCommandContextCreator.java	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,50 @@
+package jp.sf.pal.announcement.db.allcommon.s2dao.internal.sqlparser;
+
+import org.seasar.dao.CommandContext;
+import org.seasar.dao.context.CommandContextImpl;
+
+/**
+ * @author DBFlute(AutoGenerator)
+ */
+public class InternalCommandContextCreator {
+
+    // ===================================================================================
+    //                                                                           Attribute
+    //                                                                           =========
+    protected String[] argNames;
+
+    protected Class[] argTypes;
+
+    // ===================================================================================
+    //                                                                         Constructor
+    //                                                                         ===========
+    public InternalCommandContextCreator(String[] argNames, Class[] argTypes) {
+        this.argNames = (argNames != null ? argNames : new String[0]);
+        this.argTypes = (argTypes != null ? argTypes : new Class[0]);
+    }
+
+    // ===================================================================================
+    //                                                                              Create
+    //                                                                              ======
+    public CommandContext createCommandContext(Object[] args) {
+        final CommandContext ctx = new CommandContextImpl();
+        if (args != null) {
+            for (int i = 0; i < args.length; ++i) {
+                Class argType = null;
+                if (args[i] != null) {
+                    if (i < argTypes.length) {
+                        argType = argTypes[i];
+                    } else if (args[i] != null) {
+                        argType = args[i].getClass();
+                    }
+                }
+                if (i < argNames.length) {
+                    ctx.addArg(argNames[i], args[i], argType);
+                } else {
+                    ctx.addArg("$" + (i + 1), args[i], argType);
+                }
+            }
+        }
+        return ctx;
+    }
+}


Property changes on: announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/s2dao/internal/sqlparser/InternalCommandContextCreator.java
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/s2dao/internal/sqlparser/InternalSqlParser.java
===================================================================
--- announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/s2dao/internal/sqlparser/InternalSqlParser.java	                        (rev 0)
+++ announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/s2dao/internal/sqlparser/InternalSqlParser.java	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,1201 @@
+package jp.sf.pal.announcement.db.allcommon.s2dao.internal.sqlparser;
+
+import java.lang.reflect.Array;
+import java.lang.reflect.Method;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+import java.util.Stack;
+import java.util.StringTokenizer;
+
+import jp.sf.pal.announcement.db.allcommon.cbean.MapParameterBean;
+import jp.sf.pal.announcement.db.allcommon.cbean.coption.LikeSearchOption;
+import jp.sf.pal.announcement.db.allcommon.exception.BindVariableCommentNotFoundPropertyException;
+import jp.sf.pal.announcement.db.allcommon.exception.BindVariableParameterNullValueException;
+import jp.sf.pal.announcement.db.allcommon.exception.EmbeddedValueCommentNotFoundPropertyException;
+import jp.sf.pal.announcement.db.allcommon.exception.EmbeddedValueParameterNullValueException;
+import jp.sf.pal.announcement.db.allcommon.exception.EndCommentNotFoundException;
+import jp.sf.pal.announcement.db.allcommon.exception.IfCommentConditionNotFoundException;
+import jp.sf.pal.announcement.db.allcommon.exception.IfCommentNotBooleanResultException;
+import jp.sf.pal.announcement.db.allcommon.exception.IfCommentWrongExpressionException;
+import jp.sf.pal.announcement.db.allcommon.exception.RequiredOptionNotFoundException;
+import jp.sf.pal.announcement.db.allcommon.s2dao.internal.util.InternalBindVariableUtil;
+import jp.sf.pal.announcement.db.allcommon.util.SimpleStringUtil;
+import jp.sf.pal.announcement.db.allcommon.util.SimpleSystemUtil;
+
+import org.seasar.dao.CommandContext;
+import org.seasar.dao.Node;
+import org.seasar.dao.node.AbstractNode;
+import org.seasar.dao.node.BeginNode;
+import org.seasar.dao.node.ContainerNode;
+import org.seasar.dao.node.ElseNode;
+import org.seasar.dao.node.PrefixSqlNode;
+import org.seasar.dao.node.SqlNode;
+import org.seasar.framework.beans.BeanDesc;
+import org.seasar.framework.beans.PropertyDesc;
+import org.seasar.framework.beans.factory.BeanDescFactory;
+import org.seasar.framework.util.OgnlUtil;
+
+/**
+ * @author DBFlute(AutoGenerator)
+ */
+public class InternalSqlParser {
+
+    // ===================================================================================
+    //                                                                           Attribute
+    //                                                                           =========
+    protected InternalSqlTokenizer tokenizer;
+
+    protected Stack<Node> nodeStack = new Stack<Node>();
+
+    protected String specifiedSql;// Extension!
+
+    // ===================================================================================
+    //                                                                         Constructor
+    //                                                                         ===========
+    public InternalSqlParser(String sql) {
+        sql = sql.trim();
+        if (sql.endsWith(";")) {
+            sql = sql.substring(0, sql.length() - 1);
+        }
+        specifiedSql = sql;// Extension!
+        tokenizer = new InternalSqlTokenizer(sql);
+    }
+
+    // ===================================================================================
+    //                                                                               Parse
+    //                                                                               =====
+    public Node parse() {
+        push(new ContainerNode());
+        while (InternalSqlTokenizer.EOF != tokenizer.next()) {
+            parseToken();
+        }
+        return pop();
+    }
+
+    protected void parseToken() {
+        switch (tokenizer.getTokenType()) {
+        case InternalSqlTokenizer.SQL:
+            parseSql();
+            break;
+        case InternalSqlTokenizer.COMMENT:
+            parseComment();
+            break;
+        case InternalSqlTokenizer.ELSE:
+            parseElse();
+            break;
+        case InternalSqlTokenizer.BIND_VARIABLE:
+            parseBindVariable();
+            break;
+        }
+    }
+
+    protected void parseSql() {
+        String sql = tokenizer.getToken();
+        if (isElseMode()) {
+            sql = InternalStringUtil.replace(sql, "--", "");
+        }
+        Node node = peek();
+        if ((node instanceof InternalIfNode || node instanceof ElseNode)
+                && node.getChildSize() == 0) {
+
+            InternalSqlTokenizer st = new InternalSqlTokenizer(sql);
+            st.skipWhitespace();
+            String token = st.skipToken();
+            st.skipWhitespace();
+            if (sql.startsWith(",")) {
+                if (sql.startsWith(", ")) {
+                    node.addChild(new PrefixSqlNode(", ", sql.substring(2)));
+                } else {
+                    node.addChild(new PrefixSqlNode(",", sql.substring(1)));
+                }
+            } else if ("AND".equalsIgnoreCase(token)
+                    || "OR".equalsIgnoreCase(token)) {
+                node.addChild(new PrefixSqlNode(st.getBefore(), st.getAfter()));
+            } else {
+                node.addChild(new SqlNode(sql));
+            }
+        } else {
+            node.addChild(new SqlNode(sql));
+        }
+    }
+
+    protected void parseComment() {
+        final String comment = tokenizer.getToken();
+        if (isTargetComment(comment)) {
+            if (isIfComment(comment)) {
+                parseIf();
+            } else if (isBeginComment(comment)) {
+                parseBegin();
+            } else if (isEndComment(comment)) {
+                return;
+            } else {
+                parseCommentBindVariable();
+            }
+        } else if (comment != null && 0 < comment.length()) {
+            // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+            // [UnderReview]: Should I resolve bind character on scope comment(normal comment)?
+            // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+            String before = tokenizer.getBefore();
+            peek().addChild(
+                    new SqlNode(before.substring(before.lastIndexOf("/*"))));
+        }
+    }
+
+    protected void parseIf() {
+        final String condition = tokenizer.getToken().substring(2).trim();
+        if (InternalStringUtil.isEmpty(condition)) {
+            throwIfCommentConditionNotFoundException();
+        }
+        final ContainerNode ifNode = createIfNode(condition);
+        peek().addChild(ifNode);
+        push(ifNode);
+        parseEnd();
+    }
+
+    protected void throwIfCommentConditionNotFoundException() {
+        String msg = "Look! Read the message below." + getLineSeparator();
+        msg = msg
+                + "/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *"
+                + getLineSeparator();
+        msg = msg + "The condition of IF comment was Not Found!"
+                + getLineSeparator();
+        msg = msg + getLineSeparator();
+        msg = msg + "[Advice]" + getLineSeparator();
+        msg = msg + "Please confirm the IF comment expression."
+                + getLineSeparator();
+        msg = msg
+                + "It may exist the IF comment that DOESN'T have a condition."
+                + getLineSeparator();
+        msg = msg + "  For example:" + getLineSeparator();
+        msg = msg + "    before (x) -- /*IF*/XXX_ID = /*pmb.xxxId*/3/*END*/"
+                + getLineSeparator();
+        msg = msg
+                + "    after  (o) -- /*IF pmb.xxxId != null*/XXX_ID = /*pmb.xxxId*/3/*END*/"
+                + getLineSeparator();
+        msg = msg + getLineSeparator();
+        msg = msg + "[IF Comment Expression]" + getLineSeparator()
+                + tokenizer.getToken() + getLineSeparator();
+        msg = msg + getLineSeparator();
+        msg = msg + "[Specified SQL]" + getLineSeparator() + specifiedSql
+                + getLineSeparator();
+        msg = msg + "* * * * * * * * * */" + getLineSeparator();
+        throw new IfCommentConditionNotFoundException(msg);
+    }
+
+    protected void parseBegin() {
+        BeginNode beginNode = new BeginNode();
+        peek().addChild(beginNode);
+        push(beginNode);
+        parseEnd();
+    }
+
+    protected void parseEnd() {
+        while (InternalSqlTokenizer.EOF != tokenizer.next()) {
+            if (tokenizer.getTokenType() == InternalSqlTokenizer.COMMENT
+                    && isEndComment(tokenizer.getToken())) {
+                pop();
+                return;
+            }
+            parseToken();
+        }
+        throwEndCommentNotFoundException();
+    }
+
+    protected void throwEndCommentNotFoundException() {
+        String msg = "Look! Read the message below." + getLineSeparator();
+        msg = msg
+                + "/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *"
+                + getLineSeparator();
+        msg = msg + "The end comment was Not Found!" + getLineSeparator();
+        msg = msg + getLineSeparator();
+        msg = msg + "[Advice]" + getLineSeparator();
+        msg = msg + "Please confirm the parameter comment logic."
+                + getLineSeparator();
+        msg = msg
+                + "It may exist the parameter comment that DOESN'T have an end comment."
+                + getLineSeparator();
+        msg = msg + "  For example:" + getLineSeparator();
+        msg = msg
+                + "    before (x) -- /*IF pmb.xxxId != null*/XXX_ID = /*pmb.xxxId*/3"
+                + getLineSeparator();
+        msg = msg
+                + "    after  (o) -- /*IF pmb.xxxId != null*/XXX_ID = /*pmb.xxxId*/3/*END*/"
+                + getLineSeparator();
+        msg = msg + getLineSeparator();
+        msg = msg + "[Specified SQL]" + getLineSeparator() + specifiedSql
+                + getLineSeparator();
+        msg = msg + "* * * * * * * * * */" + getLineSeparator();
+        throw new EndCommentNotFoundException(msg);
+    }
+
+    protected void parseElse() {
+        final Node parent = peek();
+        if (!(parent instanceof InternalIfNode)) {
+            return;
+        }
+        final InternalIfNode ifNode = (InternalIfNode) pop();
+        final InternalElseNode elseNode = new InternalElseNode();
+        ifNode.setElseNode(elseNode);
+        push(elseNode);
+        tokenizer.skipWhitespace();
+    }
+
+    protected void parseCommentBindVariable() {
+        final String expr = tokenizer.getToken();
+        final String s = tokenizer.skipToken();
+        if (expr.startsWith("$")) {
+            peek().addChild(createEmbeddedValueNode(expr.substring(1), s));// Extension!
+        } else {
+            peek().addChild(createBindVariableNode(expr, s));// Extension!
+        }
+    }
+
+    protected void parseBindVariable() {
+        final String expr = tokenizer.getToken();
+        peek().addChild(createBindVariableNode(expr, null));// Extension!
+    }
+
+    protected Node pop() {
+        return (Node) nodeStack.pop();
+    }
+
+    protected Node peek() {
+        return (Node) nodeStack.peek();
+    }
+
+    protected void push(Node node) {
+        nodeStack.push(node);
+    }
+
+    protected boolean isElseMode() {
+        for (int i = 0; i < nodeStack.size(); ++i) {
+            if (nodeStack.get(i) instanceof InternalElseNode) {
+                return true;
+            }
+        }
+        return false;
+    }
+
+    private static boolean isTargetComment(String comment) {
+        return comment != null && comment.length() > 0
+                && Character.isJavaIdentifierStart(comment.charAt(0));
+    }
+
+    private static boolean isIfComment(String comment) {
+        return comment.startsWith("IF");
+    }
+
+    private static boolean isBeginComment(String content) {
+        return content != null && "BEGIN".equals(content);
+    }
+
+    private static boolean isEndComment(String content) {
+        return content != null && "END".equals(content);
+    }
+
+    protected AbstractNode createBindVariableNode(String expr, String testValue) {// Extension!
+        return new InternalBindVariableNode(expr, testValue, specifiedSql);
+    }
+
+    protected AbstractNode createEmbeddedValueNode(String expr, String testValue) {// Extension!
+        return new InternalEmbeddedValueNode(expr, testValue, specifiedSql);
+    }
+
+    protected ContainerNode createIfNode(String expr) {// Extension!
+        return new InternalIfNode(expr, specifiedSql);
+    }
+
+    // ===================================================================================
+    //                                                                      General Helper
+    //                                                                      ==============
+    protected String getLineSeparator() {
+        return SimpleSystemUtil.getLineSeparator();
+    }
+
+    protected final String replaceString(String text, String fromText,
+            String toText) {
+        return SimpleStringUtil.replace(text, fromText, toText);
+    }
+
+    // ===================================================================================
+    //                                                                           Extension
+    //                                                                           =========
+    // -----------------------------------------------------
+    //                                      BindVariableNode
+    //                                      ----------------
+    protected static class InternalBindVariableNode extends AbstractNode {
+        protected String _expression;
+
+        protected String _testValue;
+
+        protected String[] _names;
+
+        protected String _specifiedSql;
+
+        public InternalBindVariableNode(String expression, String testValue,
+                String specifiedSql) {
+            this._expression = expression;
+            this._testValue = testValue;
+            this._names = InternalStringUtil.split(expression, ".");
+            this._specifiedSql = specifiedSql;
+        }
+
+        public void accept(CommandContext ctx) {
+            final Object value = ctx.getArg(_names[0]);
+            final Class<?> clazz = ctx.getArgType(_names[0]);
+            final InternalValueAndType valueAndType = new InternalValueAndType();
+            valueAndType.setTargetValue(value);
+            valueAndType.setTargetType(clazz);
+            setupValueAndType(valueAndType);
+
+            if (valueAndType.getTargetValue() == null) {
+                throwBindOrEmbeddedParameterNullValueException(valueAndType);
+            }
+            if (!isInScope()) {
+                // Main Root
+                ctx.addSql("?", valueAndType.getTargetValue(), valueAndType
+                        .getTargetType());
+            } else {
+                if (List.class.isAssignableFrom(valueAndType.getTargetType())) {
+                    bindArray(ctx, ((List<?>) valueAndType.getTargetValue())
+                            .toArray());
+                } else if (valueAndType.getTargetType().isArray()) {
+                    bindArray(ctx, valueAndType.getTargetValue());
+                } else {
+                    ctx.addSql("?", valueAndType.getTargetValue(), valueAndType
+                            .getTargetType());
+                }
+            }
+            if (valueAndType.isValidRearOption()) {
+                ctx.addSql(valueAndType.buildRearOptionOnSql());
+            }
+        }
+
+        protected void setupValueAndType(InternalValueAndType valueAndType) {
+            final InternalValueAndTypeSetuper valueAndTypeSetuper = new InternalValueAndTypeSetuper(
+                    _expression, _names, _specifiedSql, true);
+            valueAndTypeSetuper.setupValueAndType(valueAndType);
+        }
+
+        protected void throwBindOrEmbeddedParameterNullValueException(
+                InternalValueAndType valueAndType) {
+            ParameterCommentExceptionProvider
+                    .throwBindOrEmbeddedParameterNullValueException(
+                            _expression, valueAndType.getTargetType(),
+                            _specifiedSql, true);
+        }
+
+        protected boolean isInScope() {
+            return _testValue != null && _testValue.startsWith("(")
+                    && _testValue.endsWith(")");
+        }
+
+        protected void bindArray(CommandContext ctx, Object array) {
+            if (array == null) {
+                return;
+            }
+            final int length = Array.getLength(array);
+            if (length == 0) {
+                throwBindOrEmbeddedParameterEmptyListException();
+            }
+            Class<?> clazz = null;
+            for (int i = 0; i < length; ++i) {
+                final Object currentElement = Array.get(array, i);
+                if (currentElement != null) {
+                    clazz = currentElement.getClass();
+                    break;
+                }
+            }
+            if (clazz == null) {
+                throwBindOrEmbeddedParameterNullOnlyListException();
+            }
+            boolean existsValidElements = false;
+            ctx.addSql("(");
+            for (int i = 0; i < length; ++i) {
+                final Object currentElement = Array.get(array, i);
+                if (currentElement != null) {
+                    if (!existsValidElements) {
+                        ctx.addSql("?", currentElement, clazz);
+                        existsValidElements = true;
+                    } else {
+                        ctx.addSql(", ?", currentElement, clazz);
+                    }
+                }
+            }
+            ctx.addSql(")");
+        }
+
+        protected void throwBindOrEmbeddedParameterEmptyListException() {
+            ParameterCommentExceptionProvider
+                    .throwBindOrEmbeddedParameterEmptyListException(
+                            _expression, _specifiedSql, false);
+        }
+
+        protected void throwBindOrEmbeddedParameterNullOnlyListException() {
+            ParameterCommentExceptionProvider
+                    .throwBindOrEmbeddedParameterNullOnlyListException(
+                            _expression, _specifiedSql, true);
+        }
+    }
+
+    // -----------------------------------------------------
+    //                                     EmbeddedValueNode
+    //                                     -----------------
+    protected static class InternalEmbeddedValueNode extends AbstractNode {
+        protected String _expression;
+
+        protected String _testValue;
+
+        protected String[] _names;
+
+        protected String _specifiedSql;
+
+        public InternalEmbeddedValueNode(String expression, String testValue,
+                String specifiedSql) {
+            this._expression = expression;
+            this._testValue = testValue;
+            this._names = InternalStringUtil.split(expression, ".");
+            this._specifiedSql = specifiedSql;
+        }
+
+        public void accept(CommandContext ctx) {
+            final Object value = ctx.getArg(_names[0]);
+            final Class<?> clazz = ctx.getArgType(_names[0]);
+            final InternalValueAndType valueAndType = new InternalValueAndType();
+            valueAndType.setTargetValue(value);
+            valueAndType.setTargetType(clazz);
+            setupValueAndType(valueAndType);
+
+            if (valueAndType.getTargetValue() == null) {
+                throwBindOrEmbeddedParameterNullValueException(valueAndType);
+            }
+            if (!isInScope()) {
+                // Main Root
+                // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+                // [UnderReview]: Should I make an original exception instead of this exception?
+                // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+                if (valueAndType.getTargetValue() != null
+                        && valueAndType.getTargetValue().toString()
+                                .indexOf("?") > -1) {
+                    throw new org.seasar.framework.exception.SRuntimeException(
+                            "EDAO0023");
+                }
+                ctx.addSql(valueAndType.getTargetValue().toString());
+            } else {
+                if (List.class.isAssignableFrom(valueAndType.getTargetType())) {
+                    embedArray(ctx, ((List<?>) valueAndType.getTargetValue())
+                            .toArray());
+                } else if (valueAndType.getTargetType().isArray()) {
+                    embedArray(ctx, valueAndType.getTargetValue());
+                } else {
+                    // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+                    // [UnderReview]: Should I make an original exception instead of this exception?
+                    // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+                    if (valueAndType.getTargetValue() != null
+                            && valueAndType.getTargetValue().toString()
+                                    .indexOf("?") > -1) {
+                        throw new org.seasar.framework.exception.SRuntimeException(
+                                "EDAO0023");
+                    }
+                    ctx.addSql(valueAndType.getTargetValue().toString());
+                }
+            }
+            if (valueAndType.isValidRearOption()) {
+                ctx.addSql(valueAndType.buildRearOptionOnSql());
+            }
+        }
+
+        protected void setupValueAndType(InternalValueAndType valueAndType) {
+            final InternalValueAndTypeSetuper valueAndTypeSetuper = new InternalValueAndTypeSetuper(
+                    _expression, _names, _specifiedSql, false);
+            valueAndTypeSetuper.setupValueAndType(valueAndType);
+        }
+
+        protected void throwBindOrEmbeddedParameterNullValueException(
+                InternalValueAndType valueAndType) {
+            ParameterCommentExceptionProvider
+                    .throwBindOrEmbeddedParameterNullValueException(
+                            _expression, valueAndType.getTargetType(),
+                            _specifiedSql, false);
+        }
+
+        protected boolean isInScope() {
+            return _testValue != null && _testValue.startsWith("(")
+                    && _testValue.endsWith(")");
+        }
+
+        protected void embedArray(CommandContext ctx, Object array) {
+            if (array == null) {
+                return;
+            }
+            final int length = Array.getLength(array);
+            if (length == 0) {
+                throwBindOrEmbeddedParameterEmptyListException();
+            }
+            String quote = null;
+            for (int i = 0; i < length; ++i) {
+                final Object currentElement = Array.get(array, i);
+                if (currentElement != null) {
+                    quote = !(currentElement instanceof Number) ? "'" : "";
+                    break;
+                }
+            }
+            if (quote == null) {
+                throwBindOrEmbeddedParameterNullOnlyListException();
+            }
+            boolean existsValidElements = false;
+            ctx.addSql("(");
+            for (int i = 0; i < length; ++i) {
+                final Object currentElement = Array.get(array, i);
+                if (currentElement != null) {
+                    if (!existsValidElements) {
+                        ctx.addSql(quote + currentElement + quote);
+                        existsValidElements = true;
+                    } else {
+                        ctx.addSql(", " + quote + currentElement + quote);
+                    }
+                }
+            }
+            ctx.addSql(")");
+        }
+
+        protected void throwBindOrEmbeddedParameterEmptyListException() {
+            ParameterCommentExceptionProvider
+                    .throwBindOrEmbeddedParameterEmptyListException(
+                            _expression, _specifiedSql, false);
+        }
+
+        protected void throwBindOrEmbeddedParameterNullOnlyListException() {
+            ParameterCommentExceptionProvider
+                    .throwBindOrEmbeddedParameterNullOnlyListException(
+                            _expression, _specifiedSql, false);
+        }
+    }
+
+    // -----------------------------------------------------
+    //                                        Value and Type
+    //                                        --------------
+    protected static class InternalValueAndType {
+        public Object _targetValue;
+
+        public Class<?> _targetType;
+
+        protected String _rearOption;
+
+        public boolean isValidRearOption() {
+            return _targetValue != null && _rearOption != null
+                    && _rearOption.trim().length() > 0;
+        }
+
+        public String buildRearOptionOnSql() {
+            return " " + _rearOption.trim() + " ";
+        }
+
+        public Object getTargetValue() {
+            return _targetValue;
+        }
+
+        public void setTargetValue(Object targetValue) {
+            this._targetValue = targetValue;
+        }
+
+        public Class<?> getTargetType() {
+            return _targetType;
+        }
+
+        public void setTargetType(Class<?> targetType) {
+            this._targetType = targetType;
+        }
+
+        public String getRearOption() {
+            return _rearOption;
+        }
+
+        public void setRearOption(String rearOption) {
+            this._rearOption = rearOption;
+        }
+    }
+
+    protected static class InternalValueAndTypeSetuper {
+        protected String _expression;
+
+        protected String[] _names;
+
+        protected String _specifiedSql;
+
+        protected boolean _bind;
+
+        public InternalValueAndTypeSetuper(String expression, String[] names,
+                String specifiedSql, boolean bind) {
+            this._expression = expression;
+            this._names = names;
+            this._specifiedSql = specifiedSql;
+            this._bind = bind;
+        }
+
+        protected void setupValueAndType(InternalValueAndType valueAndType) {
+            Object value = valueAndType.getTargetValue();
+            Class<?> clazz = valueAndType.getTargetType();
+            String rearOption = null;
+            for (int pos = 1; pos < _names.length; ++pos) {
+                if (value == null) {
+                    break;
+                }
+                if (Map.class.isInstance(value)) {
+                    final Map<?, ?> map = (Map<?, ?>) value;
+                    value = map.get(_names[pos]);
+                    if (value == null) {
+                        break;
+                    }
+                    clazz = value.getClass();
+                    continue;
+                }
+                final BeanDesc beanDesc = BeanDescFactory.getBeanDesc(clazz);
+                final String currentName = _names[pos];
+                if (beanDesc.hasPropertyDesc(currentName)) {
+                    final PropertyDesc pd = beanDesc
+                            .getPropertyDesc(currentName);
+                    if (_names.length == (pos + 1)
+                            && hasLikeSearchOption(beanDesc, currentName)) {
+                        final LikeSearchOption option = getLikeSearchOption(
+                                beanDesc, currentName, value);
+                        value = getPropertyValue(clazz, value, currentName, pd);
+                        if (value != null && value instanceof String
+                                && ((String) value).length() != 0) {
+                            value = option.generateRealValue((String) value);
+                            rearOption = option.getRearOption();
+                        }
+                    } else {
+                        value = getPropertyValue(clazz, value, currentName, pd);
+                    }
+                    clazz = (value != null ? value.getClass() : pd
+                            .getPropertyType());
+                    continue;
+                }
+                final String methodName = "get" + initCap(currentName);
+                if (beanDesc.hasMethod(methodName)) {
+                    final Method method = beanDesc.getMethod(methodName);
+                    value = invokeGetter(method, value);
+                    clazz = method.getReturnType();
+                    continue;
+                }
+                if (pos == 1 && MapParameterBean.class.isAssignableFrom(clazz)) {
+                    final MapParameterBean pmb = (MapParameterBean) value;
+                    final Map<String, Object> map = pmb.getParameterMap();
+                    final Object elementValue = (map != null ? map
+                            .get(_names[pos]) : null);
+                    if (elementValue != null) {
+                        value = elementValue;
+                        clazz = elementValue.getClass();
+                        continue;
+                    }
+                }
+                throwBindOrEmbeddedCommentNotFoundPropertyException(
+                        _expression, clazz, currentName, _specifiedSql, _bind);
+            }
+            valueAndType.setTargetValue(value);
+            valueAndType.setTargetType(clazz);
+            valueAndType.setRearOption(rearOption);
+        }
+
+        protected boolean hasLikeSearchOption(BeanDesc beanDesc,
+                String currentName) {
+            return beanDesc.hasPropertyDesc(currentName
+                    + "InternalLikeSearchOption");
+        }
+
+        protected LikeSearchOption getLikeSearchOption(BeanDesc beanDesc,
+                String currentName, Object resourceBean) {
+            final PropertyDesc pb = beanDesc.getPropertyDesc(currentName
+                    + "InternalLikeSearchOption");
+            final LikeSearchOption option = (LikeSearchOption) pb
+                    .getValue(resourceBean);
+            if (option == null) {
+                throwLikeSearchOptionNotFoundException(resourceBean,
+                        currentName);
+            }
+            return option;
+        }
+
+        protected void throwLikeSearchOptionNotFoundException(
+                Object resourceBean, String currentName) {
+            String msg = "Look! Read the message below." + getLineSeparator();
+            msg = msg
+                    + "/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *"
+                    + getLineSeparator();
+            msg = msg
+                    + "The likeSearchOption was Not Found! (Should not be null!)"
+                    + getLineSeparator();
+            msg = msg + getLineSeparator();
+            msg = msg + "[Advice]" + getLineSeparator();
+            msg = msg + "Please confirm your method call:" + getLineSeparator();
+            final String beanName = resourceBean.getClass().getSimpleName();
+            final String methodName = "set" + initCap(currentName)
+                    + "_LikeSearch(value, likeSearchOption);";
+            msg = msg + "    " + beanName + "." + methodName
+                    + getLineSeparator();
+            msg = msg + getLineSeparator();
+            msg = msg + "[Target ParameterBean]" + getLineSeparator()
+                    + resourceBean + getLineSeparator();
+            msg = msg + "* * * * * * * * * */" + getLineSeparator();
+            throw new RequiredOptionNotFoundException(msg);
+        }
+
+        protected Object getPropertyValue(Class<?> beanType, Object beanValue,
+                String currentName, PropertyDesc pd) {
+            try {
+                return pd.getValue(beanValue);
+            } catch (RuntimeException e) {
+                throwPropertyHandlingFailureException(beanType, beanValue,
+                        currentName, _expression, _specifiedSql, _bind);
+                return null;// Unreachable!
+            }
+        }
+
+        protected void throwPropertyHandlingFailureException(Class<?> beanType,
+                Object beanValue, String currentName, String expression,
+                String specifiedSql, boolean bind) {
+            String msg = "Look! Read the message below." + getLineSeparator();
+            msg = msg
+                    + "/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *"
+                    + getLineSeparator();
+            msg = msg + "The handlig of the property was failed!"
+                    + getLineSeparator();
+            msg = msg + getLineSeparator();
+            msg = msg + "[Advice]" + getLineSeparator();
+            msg = msg + "This is the Framework Exception!" + getLineSeparator();
+            msg = msg + getLineSeparator();
+            msg = msg + "[" + (bind ? "Bind Variable" : "Embedded Value")
+                    + " Comment Expression]" + getLineSeparator() + expression
+                    + getLineSeparator();
+            msg = msg + getLineSeparator();
+            msg = msg + "[Bean Type]" + getLineSeparator() + beanType
+                    + getLineSeparator();
+            msg = msg + getLineSeparator();
+            msg = msg + "[Bean Value]" + getLineSeparator() + beanValue
+                    + getLineSeparator();
+            msg = msg + getLineSeparator();
+            msg = msg + "[Property Name]" + getLineSeparator() + currentName
+                    + getLineSeparator();
+            msg = msg + getLineSeparator();
+            msg = msg + "[Specified SQL]" + getLineSeparator() + specifiedSql
+                    + getLineSeparator();
+            msg = msg + "* * * * * * * * * */" + getLineSeparator();
+            throw new IllegalStateException(msg);
+        }
+
+        protected String initCap(String name) {
+            return SimpleStringUtil.initCap(name);
+        }
+
+        protected Object invokeGetter(Method method, Object target) {
+            try {
+                return method.invoke(target, (Object[]) null);
+            } catch (IllegalArgumentException e) {
+                throw new RuntimeException(e);
+            } catch (IllegalAccessException e) {
+                throw new RuntimeException(e);
+            } catch (java.lang.reflect.InvocationTargetException e) {
+                throw new RuntimeException(e);
+            }
+        }
+
+        protected void throwBindOrEmbeddedCommentNotFoundPropertyException(
+                String expression, Class<?> targetType,
+                String notFoundProperty, String specifiedSql, boolean bind) {
+            String msg = "Look! Read the message below." + getLineSeparator();
+            msg = msg
+                    + "/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *"
+                    + getLineSeparator();
+            msg = msg + "The property on the "
+                    + (bind ? "bind variable" : "embedded value")
+                    + " comment was Not Found!" + getLineSeparator();
+            msg = msg + getLineSeparator();
+            msg = msg + "[Advice]" + getLineSeparator();
+            msg = msg
+                    + "Please confirm the existence of your property on your arguments."
+                    + getLineSeparator();
+            msg = msg + "Abd has the property had misspelling?"
+                    + getLineSeparator();
+            msg = msg + getLineSeparator();
+            msg = msg + "[" + (bind ? "Bind Variable" : "Embedded Value")
+                    + " Comment Expression]" + getLineSeparator() + expression
+                    + getLineSeparator();
+            msg = msg + getLineSeparator();
+            msg = msg + "[NotFound Property]" + getLineSeparator()
+                    + (targetType != null ? targetType.getName() + "#" : "")
+                    + notFoundProperty + getLineSeparator();
+            msg = msg + getLineSeparator();
+            msg = msg + "[Specified SQL]" + getLineSeparator() + specifiedSql
+                    + getLineSeparator();
+            msg = msg + "* * * * * * * * * */" + getLineSeparator();
+            if (bind) {
+                throw new BindVariableCommentNotFoundPropertyException(msg);
+            } else {
+                throw new EmbeddedValueCommentNotFoundPropertyException(msg);
+            }
+        }
+
+        protected String getLineSeparator() {
+            return SimpleSystemUtil.getLineSeparator();
+        }
+    }
+
+    // -----------------------------------------------------
+    //                                    Exception Provider
+    //                                    ------------------
+    protected static class ParameterCommentExceptionProvider {
+        public static void throwBindOrEmbeddedParameterNullValueException(
+                String expression, Class<?> targetType, String specifiedSql,
+                boolean bind) {
+            String msg = "Look! Read the message below." + getLineSeparator();
+            msg = msg
+                    + "/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *"
+                    + getLineSeparator();
+            msg = msg + "The value of "
+                    + (bind ? "bind variable" : "embedded value")
+                    + " was Null!" + getLineSeparator();
+            msg = msg + getLineSeparator();
+            msg = msg + "[Advice]" + getLineSeparator();
+            msg = msg + "Is it within the scope of your assumption?"
+                    + getLineSeparator();
+            msg = msg
+                    + "If the answer is YES, please confirm your application logic about the parameter."
+                    + getLineSeparator();
+            msg = msg
+                    + "If the answer is NO, please confirm the logic of parameter comment(especially IF comment)."
+                    + getLineSeparator();
+            msg = msg + "  --> For example:" + getLineSeparator();
+            msg = msg + "        before (x) -- XXX_ID = /*pmb.xxxId*/3"
+                    + getLineSeparator();
+            msg = msg
+                    + "        after  (o) -- /*IF pmb.xxxId != null*/XXX_ID = /*pmb.xxxId*/3/*END*/"
+                    + getLineSeparator();
+            msg = msg + getLineSeparator();
+            msg = msg + "[" + (bind ? "Bind Variable" : "Embedded Value")
+                    + " Comment Expression]" + getLineSeparator() + expression
+                    + getLineSeparator();
+            msg = msg + getLineSeparator();
+            msg = msg + "[Parameter Property Type]" + getLineSeparator()
+                    + targetType + getLineSeparator();
+            msg = msg + getLineSeparator();
+            msg = msg + "[Specified SQL]" + getLineSeparator() + specifiedSql
+                    + getLineSeparator();
+            msg = msg + "* * * * * * * * * */" + getLineSeparator();
+            if (bind) {
+                throw new BindVariableParameterNullValueException(msg);
+            } else {
+                throw new EmbeddedValueParameterNullValueException(msg);
+            }
+        }
+
+        public static void throwBindOrEmbeddedParameterEmptyListException(
+                String expression, String specifiedSql, boolean bind) {
+            String msg = "Look! Read the message below." + getLineSeparator();
+            msg = msg
+                    + "/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *"
+                    + getLineSeparator();
+            msg = msg + "The list of "
+                    + (bind ? "bind variable" : "embedded value")
+                    + " was empty!" + getLineSeparator();
+            msg = msg + getLineSeparator();
+            msg = msg + "[Advice]" + getLineSeparator();
+            msg = msg + "Please confirm your application logic."
+                    + getLineSeparator();
+            msg = msg + "  For example:" + getLineSeparator();
+            msg = msg + "    before (x):" + getLineSeparator();
+            msg = msg
+                    + "      List<Integer> xxxIdList = new ArrayList<Integer>();"
+                    + getLineSeparator();
+            msg = msg
+                    + "      cb.query().setXxxId_InScope(xxxIdList);// Or pmb.setXxxIdList(xxxIdList);"
+                    + getLineSeparator();
+            msg = msg + "    after  (o):" + getLineSeparator();
+            msg = msg
+                    + "      List<Integer> xxxIdList = new ArrayList<Integer>();"
+                    + getLineSeparator();
+            msg = msg + "      xxxIdList.add(3);" + getLineSeparator();
+            msg = msg + "      xxxIdList.add(7);" + getLineSeparator();
+            msg = msg
+                    + "      cb.query().setXxxId_InScope(xxxIdList);// Or pmb.setXxxIdList(xxxIdList);"
+                    + getLineSeparator();
+            msg = msg + getLineSeparator();
+            msg = msg + "[" + (bind ? "Bind Variable" : "Embedded Value")
+                    + " Comment Expression]" + getLineSeparator() + expression
+                    + getLineSeparator();
+            msg = msg + getLineSeparator();
+            msg = msg + "[Specified SQL]" + getLineSeparator() + specifiedSql
+                    + getLineSeparator();
+            msg = msg + "* * * * * * * * * */" + getLineSeparator();
+            throw new IllegalArgumentException(msg);
+        }
+
+        public static void throwBindOrEmbeddedParameterNullOnlyListException(
+                String expression, String specifiedSql, boolean bind) {
+            String msg = "Look! Read the message below." + getLineSeparator();
+            msg = msg
+                    + "/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *"
+                    + getLineSeparator();
+            msg = msg + "The list of "
+                    + (bind ? "bind variable" : "embedded value")
+                    + " was 'Null Only List'!" + getLineSeparator();
+            msg = msg + getLineSeparator();
+            msg = msg + "[Advice]" + getLineSeparator();
+            msg = msg + "Please confirm your application logic."
+                    + getLineSeparator();
+            msg = msg + "  For example:" + getLineSeparator();
+            msg = msg + "    before (x):" + getLineSeparator();
+            msg = msg
+                    + "      List<Integer> xxxIdList = new ArrayList<Integer>();"
+                    + getLineSeparator();
+            msg = msg + "      xxxIdList.add(null);" + getLineSeparator();
+            msg = msg + "      xxxIdList.add(null);" + getLineSeparator();
+            msg = msg
+                    + "      cb.query().setXxxId_InScope(xxxIdList);// Or pmb.setXxxIdList(xxxIdList);"
+                    + getLineSeparator();
+            msg = msg + "    after  (o):" + getLineSeparator();
+            msg = msg
+                    + "      List<Integer> xxxIdList = new ArrayList<Integer>();"
+                    + getLineSeparator();
+            msg = msg + "      xxxIdList.add(3);" + getLineSeparator();
+            msg = msg + "      xxxIdList.add(7);" + getLineSeparator();
+            msg = msg
+                    + "      cb.query().setXxxId_InScope(xxxIdList);// Or pmb.setXxxIdList(xxxIdList);"
+                    + getLineSeparator();
+            msg = msg + getLineSeparator();
+            msg = msg + "[" + (bind ? "Bind Variable" : "Embedded Value")
+                    + " Comment Expression]" + getLineSeparator() + expression
+                    + getLineSeparator();
+            msg = msg + getLineSeparator();
+            msg = msg + "[Specified SQL]" + getLineSeparator() + specifiedSql
+                    + getLineSeparator();
+            msg = msg + "* * * * * * * * * */" + getLineSeparator();
+            throw new IllegalArgumentException(msg);
+        }
+
+        protected static String getLineSeparator() {
+            return SimpleSystemUtil.getLineSeparator();
+        }
+    }
+
+    // -----------------------------------------------------
+    //                                                IfNode
+    //                                                ------
+    protected static class InternalIfNode extends ContainerNode {
+        private String _expression;
+
+        private Object _parsedExpression;
+
+        private InternalElseNode _elseNode;
+
+        private String _specifiedSql;
+
+        public InternalIfNode(String expression, String specifiedSql) {
+            this._expression = expression;
+            this._parsedExpression = OgnlUtil.parseExpression(expression);
+            this._specifiedSql = specifiedSql;
+        }
+
+        public String getExpression() {
+            return _expression;
+        }
+
+        public InternalElseNode getElseNode() {
+            return _elseNode;
+        }
+
+        public void setElseNode(InternalElseNode elseNode) {
+            this._elseNode = elseNode;
+        }
+
+        public void accept(CommandContext ctx) {
+            Object result = null;
+            try {
+                result = OgnlUtil.getValue(_parsedExpression, ctx);
+            } catch (RuntimeException e) {
+                if (!_expression.contains("pmb.")) {
+                    throwIfCommentWrongExpressionException(_expression, e,
+                            _specifiedSql);
+                }
+                final String replaced = InternalStringUtil.replace(_expression,
+                        "pmb.", "pmb.parameterMap.");
+                final Object secondParsedExpression = OgnlUtil
+                        .parseExpression(replaced);
+                try {
+                    result = OgnlUtil.getValue(secondParsedExpression, ctx);
+                } catch (RuntimeException ignored) {
+                    throwIfCommentWrongExpressionException(_expression, e,
+                            _specifiedSql);
+                }
+                if (result == null) {
+                    throwIfCommentWrongExpressionException(_expression, e,
+                            _specifiedSql);
+                }
+                _parsedExpression = secondParsedExpression;
+            }
+            if (result != null && result instanceof Boolean) {
+                if (((Boolean) result).booleanValue()) {
+                    super.accept(ctx);
+                    ctx.setEnabled(true);
+                } else if (_elseNode != null) {
+                    _elseNode.accept(ctx);
+                    ctx.setEnabled(true);
+                }
+            } else {
+                throwIfCommentNotBooleanResultException(_expression, result,
+                        _specifiedSql);
+            }
+        }
+
+        protected void throwIfCommentWrongExpressionException(
+                String expression, RuntimeException cause, String specifiedSql) {
+            String msg = "Look! Read the message below." + getLineSeparator();
+            msg = msg
+                    + "/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *"
+                    + getLineSeparator();
+            msg = msg + "The IF comment of your specified SQL was Wrong!"
+                    + getLineSeparator();
+            msg = msg + getLineSeparator();
+            msg = msg + "[Advice]" + getLineSeparator();
+            msg = msg
+                    + "Please confirm the existence of your property on your arguments."
+                    + getLineSeparator();
+            msg = msg + "And confirm the IF comment of your specified SQL."
+                    + getLineSeparator();
+            msg = msg + "  For example, correct IF comment is as below:"
+                    + getLineSeparator();
+            msg = msg + "    /*IF pmb.xxxId != null*/XXX_ID = .../*END*/"
+                    + getLineSeparator();
+            msg = msg + "    /*IF pmb.isPaging()*/.../*END*/"
+                    + getLineSeparator();
+            msg = msg
+                    + "    /*IF pmb.xxxId == null && pmb.xxxName != null*/.../*END*/"
+                    + getLineSeparator();
+            msg = msg
+                    + "    /*IF pmb.xxxId == null || pmb.xxxName != null*/.../*END*/"
+                    + getLineSeparator();
+            msg = msg + getLineSeparator();
+            msg = msg + "[IF Comment Expression]" + getLineSeparator()
+                    + expression + getLineSeparator();
+            msg = msg + getLineSeparator();
+            msg = msg + "[Cause Message]" + getLineSeparator();
+            msg = msg + cause.getClass() + ":" + getLineSeparator();
+            msg = msg + "  --> " + cause.getMessage() + getLineSeparator();
+            final Throwable nestedCause = cause.getCause();
+            if (nestedCause != null) {
+                msg = msg + nestedCause.getClass() + ":" + getLineSeparator();
+                msg = msg + "  --> " + nestedCause.getMessage()
+                        + getLineSeparator();
+            }
+            msg = msg + getLineSeparator();
+            msg = msg + "[Specified SQL]" + getLineSeparator() + specifiedSql
+                    + getLineSeparator();
+            msg = msg + "* * * * * * * * * */" + getLineSeparator();
+            throw new IfCommentWrongExpressionException(msg, cause);
+        }
+
+        protected void throwIfCommentNotBooleanResultException(
+                String expression, Object result, String specifiedSql) {
+            String msg = "Look! Read the message below." + getLineSeparator();
+            msg = msg
+                    + "/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *"
+                    + getLineSeparator();
+            msg = msg
+                    + "The boolean expression on IF comment of your specified SQL was Wrong!"
+                    + getLineSeparator();
+            msg = msg + getLineSeparator();
+            msg = msg + "[Advice]" + getLineSeparator();
+            msg = msg
+                    + "Please confirm the grammar of your IF comment. Does it really express boolean?"
+                    + getLineSeparator();
+            msg = msg
+                    + "And confirm the existence of your property on your arguments if you use parameterMap."
+                    + getLineSeparator();
+            msg = msg + getLineSeparator();
+            msg = msg + "[IF Comment Expression]" + getLineSeparator()
+                    + expression + getLineSeparator();
+            msg = msg + getLineSeparator();
+            msg = msg + "[IF Comment Result Value]" + getLineSeparator()
+                    + result + getLineSeparator();
+            msg = msg + getLineSeparator();
+            msg = msg + "[Specified SQL]" + getLineSeparator() + specifiedSql
+                    + getLineSeparator();
+            msg = msg + "* * * * * * * * * */" + getLineSeparator();
+            throw new IfCommentNotBooleanResultException(msg);
+        }
+
+        protected String getLineSeparator() {
+            return SimpleSystemUtil.getLineSeparator();
+        }
+    }
+
+    // -----------------------------------------------------
+    //                                              ElseNode
+    //                                              --------
+    protected static class InternalElseNode extends ContainerNode {
+        public void accept(CommandContext ctx) {
+            super.accept(ctx);
+            ctx.setEnabled(true);
+        }
+    }
+
+    // -----------------------------------------------------
+    //                                            StringUtil
+    //                                            ----------
+    protected static class InternalStringUtil {
+
+        public static final String[] EMPTY_STRINGS = new String[0];
+
+        private InternalStringUtil() {
+        }
+
+        public static final boolean isEmpty(String text) {
+            return text == null || text.length() == 0;
+        }
+
+        public static final String replace(String text, String fromText,
+                String toText) {
+            return SimpleStringUtil.replace(text, fromText, toText);
+        }
+
+        public static String[] split(String str, String delim) {
+            if (str == null) {
+                return EMPTY_STRINGS;
+            }
+            List<String> list = new ArrayList<String>();
+            StringTokenizer st = new StringTokenizer(str, delim);
+            while (st.hasMoreElements()) {
+                list.add(st.nextToken());
+            }
+            return (String[]) list.toArray(new String[list.size()]);
+        }
+    }
+
+    // ===================================================================================
+    //                                                                             Convert
+    //                                                                             =======
+    public static String convertTwoWaySql2DisplaySql(String twoWaySql,
+            Object arg) {
+        final String[] argNames = new String[] { "dto" };
+        final Class<?>[] argTypes = new Class<?>[] { arg.getClass() };
+        final Object[] args = new Object[] { arg };
+        return convertTwoWaySql2DisplaySql(twoWaySql, argNames, argTypes, args);
+    }
+
+    public static String convertTwoWaySql2DisplaySql(String twoWaySql,
+            String[] argNames, Class<?>[] argTypes, Object[] args) {
+        final CommandContext context;
+        {
+            final InternalSqlParser parser = new InternalSqlParser(twoWaySql);
+            final Node node = parser.parse();
+            final InternalCommandContextCreator creator = new InternalCommandContextCreator(
+                    argNames, argTypes);
+            context = creator.createCommandContext(args);
+            node.accept(context);
+        }
+        final String preparedSql = context.getSql();
+        return InternalBindVariableUtil.getCompleteSql(preparedSql, context
+                .getBindVariables());
+    }
+}


Property changes on: announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/s2dao/internal/sqlparser/InternalSqlParser.java
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/s2dao/internal/sqlparser/InternalSqlTokenizer.java
===================================================================
--- announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/s2dao/internal/sqlparser/InternalSqlTokenizer.java	                        (rev 0)
+++ announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/s2dao/internal/sqlparser/InternalSqlTokenizer.java	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,295 @@
+package jp.sf.pal.announcement.db.allcommon.s2dao.internal.sqlparser;
+
+import jp.sf.pal.announcement.db.allcommon.exception.EndCommentNotFoundException;
+import jp.sf.pal.announcement.db.allcommon.util.SimpleSystemUtil;
+
+/**
+ * @author DBFlute(AutoGenerator)
+ */
+public class InternalSqlTokenizer {
+
+    // ===================================================================================
+    //                                                                          Definition
+    //                                                                          ==========
+    public static final int SQL = 1;
+
+    public static final int COMMENT = 2;
+
+    public static final int ELSE = 3;
+
+    public static final int BIND_VARIABLE = 4;
+
+    public static final int EOF = 99;
+
+    // ===================================================================================
+    //                                                                           Attribute
+    //                                                                           =========
+    protected String sql;
+
+    protected int position = 0;
+
+    protected String token;
+
+    protected int tokenType = SQL;
+
+    protected int nextTokenType = SQL;
+
+    protected int bindVariableNum = 0;
+
+    // ===================================================================================
+    //                                                                         Constructor
+    //                                                                         ===========
+    public InternalSqlTokenizer(String sql) {
+        this.sql = sql;
+    }
+
+    // ===================================================================================
+    //                                                                            Tokenize
+    //                                                                            ========
+    public int next() {
+        if (position >= sql.length()) {
+            token = null;
+            tokenType = EOF;
+            nextTokenType = EOF;
+            return tokenType;
+        }
+        switch (nextTokenType) {
+        case SQL:
+            parseSql();
+            break;
+        case COMMENT:
+            parseComment();
+            break;
+        case ELSE:
+            parseElse();
+            break;
+        case BIND_VARIABLE:
+            parseBindVariable();
+            break;
+        default:
+            parseEof();
+            break;
+        }
+        return tokenType;
+    }
+
+    protected void parseSql() {
+        int commentStartPos = sql.indexOf("/*", position);
+        int commentStartPos2 = sql.indexOf("#*", position);
+        if (0 < commentStartPos2 && commentStartPos2 < commentStartPos) {
+            commentStartPos = commentStartPos2;
+        }
+        int lineCommentStartPos = sql.indexOf("--", position);
+        int bindVariableStartPos = sql.indexOf("?", position);
+        int elseCommentStartPos = -1;
+        int elseCommentLength = -1;
+        if (lineCommentStartPos >= 0) {
+            int skipPos = skipWhitespace(lineCommentStartPos + 2);
+            if (skipPos + 4 < sql.length()
+                    && "ELSE".equals(sql.substring(skipPos, skipPos + 4))) {
+                elseCommentStartPos = lineCommentStartPos;
+                elseCommentLength = skipPos + 4 - lineCommentStartPos;
+            }
+        }
+        int nextStartPos = getNextStartPos(commentStartPos,
+                elseCommentStartPos, bindVariableStartPos);
+        if (nextStartPos < 0) {
+            token = sql.substring(position);
+            nextTokenType = EOF;
+            position = sql.length();
+            tokenType = SQL;
+        } else {
+            token = sql.substring(position, nextStartPos);
+            tokenType = SQL;
+            boolean needNext = nextStartPos == position;
+            if (nextStartPos == commentStartPos) {
+                nextTokenType = COMMENT;
+                position = commentStartPos + 2;
+            } else if (nextStartPos == elseCommentStartPos) {
+                nextTokenType = ELSE;
+                position = elseCommentStartPos + elseCommentLength;
+            } else if (nextStartPos == bindVariableStartPos) {
+                nextTokenType = BIND_VARIABLE;
+                position = bindVariableStartPos;
+            }
+            if (needNext) {
+                next();
+            }
+        }
+    }
+
+    protected int getNextStartPos(int commentStartPos, int elseCommentStartPos,
+            int bindVariableStartPos) {
+        int nextStartPos = -1;
+        if (commentStartPos >= 0) {
+            nextStartPos = commentStartPos;
+        }
+        if (elseCommentStartPos >= 0
+                && (nextStartPos < 0 || elseCommentStartPos < nextStartPos)) {
+            nextStartPos = elseCommentStartPos;
+        }
+        if (bindVariableStartPos >= 0
+                && (nextStartPos < 0 || bindVariableStartPos < nextStartPos)) {
+            nextStartPos = bindVariableStartPos;
+        }
+        return nextStartPos;
+    }
+
+    protected String nextBindVariableName() {
+        return "$" + ++bindVariableNum;
+    }
+
+    protected void parseComment() {
+        int commentEndPos = sql.indexOf("*/", position);
+        int commentEndPos2 = sql.indexOf("*#", position);
+        if (0 < commentEndPos2 && commentEndPos2 < commentEndPos) {
+            commentEndPos = commentEndPos2;
+        }
+        if (commentEndPos < 0) {
+            throwEndCommentNotFoundException(sql.substring(position));
+        }
+        token = sql.substring(position, commentEndPos);
+        nextTokenType = SQL;
+        position = commentEndPos + 2;
+        tokenType = COMMENT;
+    }
+
+    protected void throwEndCommentNotFoundException(String expression) {
+        String msg = "Look! Read the message below." + getLineSeparator();
+        msg = msg
+                + "/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *"
+                + getLineSeparator();
+        msg = msg + "The end comment was Not Found!" + getLineSeparator();
+        msg = msg + getLineSeparator();
+        msg = msg + "[Advice]" + getLineSeparator();
+        msg = msg + "Please confirm the parameter comment logic."
+                + getLineSeparator();
+        msg = msg
+                + "It may exist the parameter comment that DOESN'T have an end comment."
+                + getLineSeparator();
+        msg = msg + "  For example:" + getLineSeparator();
+        msg = msg
+                + "    before (x) -- /*IF pmb.xxxId != null*/XXX_ID = /*pmb.xxxId*/3"
+                + getLineSeparator();
+        msg = msg
+                + "    after  (o) -- /*IF pmb.xxxId != null*/XXX_ID = /*pmb.xxxId*/3/*END*/"
+                + getLineSeparator();
+        msg = msg + getLineSeparator();
+        msg = msg + "[End Comment Expected Place]" + getLineSeparator()
+                + expression + getLineSeparator();
+        msg = msg + getLineSeparator();
+        msg = msg + "[Specified SQL]" + getLineSeparator() + sql
+                + getLineSeparator();
+        msg = msg + "* * * * * * * * * */" + getLineSeparator();
+        throw new EndCommentNotFoundException(msg);
+    }
+
+    protected void parseBindVariable() {
+        token = nextBindVariableName();
+        nextTokenType = SQL;
+        position += 1;
+        tokenType = BIND_VARIABLE;
+    }
+
+    protected void parseElse() {
+        token = null;
+        nextTokenType = SQL;
+        tokenType = ELSE;
+    }
+
+    protected void parseEof() {
+        token = null;
+        tokenType = EOF;
+        nextTokenType = EOF;
+    }
+
+    public String skipToken() {
+        int index = sql.length();
+        char quote = position < sql.length() ? sql.charAt(position) : '\0';
+        boolean quoting = quote == '\'' || quote == '(';
+        if (quote == '(') {
+            quote = ')';
+        }
+        for (int i = quoting ? position + 1 : position; i < sql.length(); ++i) {
+            char c = sql.charAt(i);
+            if ((Character.isWhitespace(c) || c == ',' || c == ')' || c == '(')
+                    && !quoting) {
+                index = i;
+                break;
+            } else if (c == '/' && i + 1 < sql.length()
+                    && sql.charAt(i + 1) == '*') {
+                index = i;
+                break;
+            } else if (c == '-' && i + 1 < sql.length()
+                    && sql.charAt(i + 1) == '-') {
+                index = i;
+                break;
+            } else if (quoting && quote == '\'' && c == '\''
+                    && (i + 1 >= sql.length() || sql.charAt(i + 1) != '\'')) {
+                index = i + 1;
+                break;
+            } else if (quoting && c == quote) {
+                index = i + 1;
+                break;
+            }
+        }
+        token = sql.substring(position, index);
+        tokenType = SQL;
+        nextTokenType = SQL;
+        position = index;
+        return token;
+    }
+
+    public String skipWhitespace() {
+        int index = skipWhitespace(position);
+        token = sql.substring(position, index);
+        position = index;
+        return token;
+    }
+
+    protected int skipWhitespace(int position) {
+        int index = sql.length();
+        for (int i = position; i < sql.length(); ++i) {
+            char c = sql.charAt(i);
+            if (!Character.isWhitespace(c)) {
+                index = i;
+                break;
+            }
+        }
+        return index;
+    }
+
+    // ===================================================================================
+    //                                                                      General Helper
+    //                                                                      ==============
+    protected String getLineSeparator() {
+        return SimpleSystemUtil.getLineSeparator();
+    }
+
+    // ===================================================================================
+    //                                                                            Accessor
+    //                                                                            ========
+    public int getPosition() {
+        return position;
+    }
+
+    public String getToken() {
+        return token;
+    }
+
+    public String getBefore() {
+        return sql.substring(0, position);
+    }
+
+    public String getAfter() {
+        return sql.substring(position);
+    }
+
+    public int getTokenType() {
+        return tokenType;
+    }
+
+    public int getNextTokenType() {
+        return nextTokenType;
+    }
+}


Property changes on: announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/s2dao/internal/sqlparser/InternalSqlTokenizer.java
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/s2dao/internal/util/InternalBindVariableUtil.java
===================================================================
--- announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/s2dao/internal/util/InternalBindVariableUtil.java	                        (rev 0)
+++ announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/s2dao/internal/util/InternalBindVariableUtil.java	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,286 @@
+package jp.sf.pal.announcement.db.allcommon.s2dao.internal.util;
+
+import java.lang.reflect.InvocationTargetException;
+import java.lang.reflect.Method;
+import java.sql.Date;
+import java.sql.Time;
+import java.sql.Timestamp;
+import java.text.SimpleDateFormat;
+import java.util.Calendar;
+
+import org.seasar.extension.jdbc.ValueType;
+
+/**
+ * @author DBFlute(AutoGenerator)
+ */
+public class InternalBindVariableUtil {
+
+    // ===================================================================================
+    //                                                                          Definition
+    //                                                                          ==========
+    private static final String NULL = "null";
+
+    // ===================================================================================
+    //                                                                         Constructor
+    //                                                                         ===========
+    private InternalBindVariableUtil() {
+    }
+
+    public static String getCompleteSql(String sql, Object[] args) {
+        if (args == null || args.length == 0) {
+            return sql;
+        }
+        return getCompleteSql(sql, args, new ValueType[args.length]);
+    }
+
+    public static String getCompleteSql(String sql, Object[] args,
+            ValueType[] valueTypes) {
+        if (args == null || args.length == 0) {
+            return sql;
+        }
+        StringBuffer buf = new StringBuffer(sql.length() + args.length * 15);
+        int pos = 0;
+        int pos2 = 0;
+        int pos3 = 0;
+        int pos4 = 0;
+        int pos5 = 0;
+        int pos6 = 0;
+        int index = 0;
+        while (true) {
+            pos = sql.indexOf('?', pos2);
+            pos3 = sql.indexOf('\'', pos2);
+            pos4 = sql.indexOf('\'', pos3 + 1);
+            pos5 = sql.indexOf("/*", pos2);
+            pos6 = sql.indexOf("*/", pos5 + 1);
+            if (pos > 0) {
+                if (pos3 >= 0 && pos3 < pos && pos < pos4) {
+                    buf.append(sql.substring(pos2, pos4 + 1));
+                    pos2 = pos4 + 1;
+                } else if (pos5 >= 0 && pos5 < pos && pos < pos6) {
+                    buf.append(sql.substring(pos2, pos6 + 1));
+                    pos2 = pos6 + 1;
+                } else {
+                    if (args.length <= index) {
+                        String msg = "The size of bind arguments is illegal:";
+                        msg = msg + " size=" + args.length + " sql=" + sql;
+                        throw new IllegalStateException(msg);
+                    }
+                    buf.append(sql.substring(pos2, pos));
+                    buf.append(getBindVariableText(args[index],
+                            valueTypes[index]));
+                    pos2 = pos + 1;
+                    index++;
+                }
+            } else {
+                buf.append(sql.substring(pos2));
+                break;
+            }
+        }
+        return buf.toString();
+    }
+
+    public static String getBindVariableText(Object bindVariable) {
+        if (bindVariable instanceof String) {
+            return quote(bindVariable.toString());
+        } else if (bindVariable instanceof Number) {
+            return bindVariable.toString();
+        } else if (bindVariable instanceof Timestamp) {
+            SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH.mm.ss");
+            return quote(sdf.format((java.util.Date) bindVariable));
+        } else if (bindVariable instanceof java.util.Date) {
+            SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
+            return quote(sdf.format((java.util.Date) bindVariable));
+        } else if (bindVariable instanceof Boolean) {
+            return bindVariable.toString();
+        } else if (bindVariable == null) {
+            return NULL;
+        } else {
+            return quote(bindVariable.toString());
+        }
+    }
+
+    // For various seasar's version.
+    protected static final Class<?>[] TOTEXT_ARGUMENT_TYPES = new Class<?>[] { Object.class };
+
+    protected static final Method TOTEXT_METHOD;
+    static {
+        Method method = null;
+        try {
+            method = ValueType.class.getMethod("toText", TOTEXT_ARGUMENT_TYPES);
+        } catch (SecurityException e) {
+        } catch (NoSuchMethodException e) {
+        }
+        TOTEXT_METHOD = method;
+    }
+
+    public static String getBindVariableText(Object bindVariable,
+            ValueType valueType) {
+        if (valueType != null && TOTEXT_METHOD != null) {
+            try {
+                return (String) TOTEXT_METHOD.invoke(valueType,
+                        new Object[] { bindVariable });
+            } catch (IllegalArgumentException e) {
+                String msg = "ValueType.toText() threw the IllegalArgumentException:";
+                msg = msg + " valueType=" + valueType + " bindVariable="
+                        + bindVariable;
+                throw new IllegalStateException(msg, e);
+            } catch (IllegalAccessException e) {
+                String msg = "ValueType.toText() threw the IllegalAccessException:";
+                msg = msg + " valueType=" + valueType + " bindVariable="
+                        + bindVariable;
+                throw new IllegalStateException(msg, e);
+            } catch (InvocationTargetException e) {
+                if (e.getTargetException() instanceof RuntimeException) {
+                    throw (RuntimeException) e.getTargetException();
+                } else {
+                    String msg = "ValueType.toText() threw the exception:";
+                    msg = msg + " valueType=" + valueType + " bindVariable="
+                            + bindVariable;
+                    throw new IllegalStateException(msg, e.getTargetException());
+                }
+            }
+        }
+        return getBindVariableText(bindVariable);
+    }
+
+    public static String nullText() {
+        return NULL;
+    }
+
+    public static String toText(Number value) {
+        if (value == null) {
+            return NULL;
+        }
+        return value.toString();
+    }
+
+    public static String toText(Boolean value) {
+        if (value == null) {
+            return NULL;
+        }
+        return quote(value.toString());
+    }
+
+    public static String toText(String value) {
+        if (value == null) {
+            return NULL;
+        }
+        return quote(value);
+    }
+
+    public static String toText(Date value) {
+        if (value == null) {
+            return NULL;
+        }
+        Calendar calendar = Calendar.getInstance();
+        calendar.setTime(value);
+        StringBuilder buf = new StringBuilder();
+        addDate(buf, calendar);
+        return quote(buf.toString());
+    }
+
+    public static String toText(Time value) {
+        if (value == null) {
+            return NULL;
+        }
+        Calendar calendar = Calendar.getInstance();
+        calendar.setTime(value);
+        StringBuilder buf = new StringBuilder();
+        addTime(buf, calendar);
+        addTimeDecimalPart(buf, calendar.get(Calendar.MILLISECOND));
+        return quote(buf.toString());
+    }
+
+    public static String toText(Timestamp value) {
+        if (value == null) {
+            return NULL;
+        }
+        Calendar calendar = Calendar.getInstance();
+        calendar.setTime(value);
+        StringBuilder buf = new StringBuilder(30);
+        addDate(buf, calendar);
+        addTime(buf, calendar);
+        addTimeDecimalPart(buf, value.getNanos());
+        return quote(buf.toString());
+    }
+
+    public static String toText(byte[] value) {
+        if (value == null) {
+            return NULL;
+        }
+        return quote(value.toString() + "(byteLength="
+                + Integer.toString(value.length) + ")");
+    }
+
+    /**
+     * {@link Object}の文字列表現を返します。
+     * 
+     * @param value
+     *            値
+     * @return 文字列表現
+     */
+    public static String toText(Object value) {
+        if (value == null) {
+            return NULL;
+        }
+        return quote(value.toString());
+    }
+
+    // yyyy-mm-dd
+    protected static void addDate(StringBuilder buf, Calendar calendar) {
+        int year = calendar.get(Calendar.YEAR);
+        buf.append(year);
+        buf.append('-');
+        int month = calendar.get(Calendar.MONTH) + 1;
+        if (month < 10) {
+            buf.append('0');
+        }
+        buf.append(month);
+        buf.append('-');
+        int date = calendar.get(Calendar.DATE);
+        if (date < 10) {
+            buf.append('0');
+        }
+        buf.append(date);
+    }
+
+    // hh:mm:ss
+    protected static void addTime(StringBuilder buf, Calendar calendar) {
+        if (buf.length() > 0) {
+            buf.append(' ');
+        }
+        int hour = calendar.get(Calendar.HOUR_OF_DAY);
+        if (hour < 10) {
+            buf.append('0');
+        }
+        buf.append(hour);
+        buf.append(':');
+        int minute = calendar.get(Calendar.MINUTE);
+        if (minute < 10) {
+            buf.append('0');
+        }
+        buf.append(minute);
+        buf.append(':');
+        int second = calendar.get(Calendar.SECOND);
+        if (second < 10) {
+            buf.append('0');
+        }
+        buf.append(second);
+    }
+
+    // .000
+    protected static void addTimeDecimalPart(StringBuilder buf, int decimalPart) {
+        if (decimalPart == 0) {
+            return;
+        }
+        if (buf.length() > 0) {
+            buf.append('.');
+        }
+        buf.append(decimalPart);
+    }
+
+    // 'text'
+    protected static String quote(String text) {
+        return "'" + text + "'";
+    }
+}


Property changes on: announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/s2dao/internal/util/InternalBindVariableUtil.java
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/util/SimpleAssertUtil.java
===================================================================
--- announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/util/SimpleAssertUtil.java	                        (rev 0)
+++ announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/util/SimpleAssertUtil.java	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,53 @@
+package jp.sf.pal.announcement.db.allcommon.util;
+
+/**
+ * @author DBFlute(AutoGenerator)
+ */
+public class SimpleAssertUtil {
+
+    // ===================================================================================
+    //                                                                              Assert
+    //                                                                              ======
+    // -----------------------------------------------------
+    //                                         Assert Object
+    //                                         -------------
+    /**
+     * Assert that the object is not null.
+     * 
+     * @param variableName Variable name. (NotNull)
+     * @param value Value. (NotNull)
+     * @exception IllegalArgumentException
+     */
+    public static void assertObjectNotNull(String variableName, Object value) {
+        if (variableName == null) {
+            String msg = "The value should not be null: variableName="
+                    + variableName + " value=" + value;
+            throw new IllegalArgumentException(msg);
+        }
+        if (value == null) {
+            String msg = "The value should not be null: variableName="
+                    + variableName;
+            throw new IllegalArgumentException(msg);
+        }
+    }
+
+    // -----------------------------------------------------
+    //                                         Assert String
+    //                                         -------------
+    /**
+     * Assert that the entity is not null and not trimmed empty.
+     * 
+     * @param variableName Variable name. (NotNull)
+     * @param value Value. (NotNull)
+     */
+    public static void assertStringNotNullAndNotTrimmedEmpty(
+            String variableName, String value) {
+        assertObjectNotNull("variableName", variableName);
+        assertObjectNotNull("value", value);
+        if (value.trim().length() == 0) {
+            String msg = "The value should not be empty: variableName="
+                    + variableName + " value=" + value;
+            throw new IllegalArgumentException(msg);
+        }
+    }
+}


Property changes on: announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/util/SimpleAssertUtil.java
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/util/SimpleStringUtil.java
===================================================================
--- announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/util/SimpleStringUtil.java	                        (rev 0)
+++ announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/util/SimpleStringUtil.java	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,61 @@
+package jp.sf.pal.announcement.db.allcommon.util;
+
+/**
+ * @author DBFlute(AutoGenerator)
+ */
+public class SimpleStringUtil {
+
+    // ===================================================================================
+    //                                                                              String
+    //                                                                              ======
+    public static String replace(String text, String fromText, String toText) {
+        if (text == null || fromText == null || toText == null) {
+            return null;
+        }
+        StringBuilder sb = new StringBuilder();
+        int pos = 0;
+        int pos2 = 0;
+        do {
+            pos = text.indexOf(fromText, pos2);
+            if (pos == 0) {
+                sb.append(toText);
+                pos2 = fromText.length();
+            } else if (pos > 0) {
+                sb.append(text.substring(pos2, pos));
+                sb.append(toText);
+                pos2 = pos + fromText.length();
+            } else {
+                sb.append(text.substring(pos2));
+                return sb.toString();
+            }
+        } while (true);
+    }
+
+    public static String initCap(String str) {
+        assertObjectNotNull("str", str);
+        return str.substring(0, 1).toUpperCase() + str.substring(1);
+    }
+
+    // -----------------------------------------------------
+    //                                         Assert Object
+    //                                         -------------
+    /**
+     * Assert that the object is not null.
+     * 
+     * @param variableName Variable name. (NotNull)
+     * @param value Value. (NotNull)
+     * @exception IllegalArgumentException
+     */
+    public static void assertObjectNotNull(String variableName, Object value) {
+        if (variableName == null) {
+            String msg = "The value should not be null: variableName="
+                    + variableName + " value=" + value;
+            throw new IllegalArgumentException(msg);
+        }
+        if (value == null) {
+            String msg = "The value should not be null: variableName="
+                    + variableName;
+            throw new IllegalArgumentException(msg);
+        }
+    }
+}


Property changes on: announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/util/SimpleStringUtil.java
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/util/SimpleSystemUtil.java
===================================================================
--- announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/util/SimpleSystemUtil.java	                        (rev 0)
+++ announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/util/SimpleSystemUtil.java	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,14 @@
+package jp.sf.pal.announcement.db.allcommon.util;
+
+/**
+ * @author DBFlute(AutoGenerator)
+ */
+public class SimpleSystemUtil {
+
+    // ===================================================================================
+    //                                                                              System
+    //                                                                              ======
+    public static String getLineSeparator() {
+        return System.getProperty("line.separator");
+    }
+}


Property changes on: announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/util/SimpleSystemUtil.java
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/util/TraceViewUtil.java
===================================================================
--- announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/util/TraceViewUtil.java	                        (rev 0)
+++ announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/util/TraceViewUtil.java	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,66 @@
+package jp.sf.pal.announcement.db.allcommon.util;
+
+/**
+ * @author DBFlute(AutoGenerator)
+ */
+public class TraceViewUtil {
+
+    /**
+     * Convert to performance view.
+     * 
+     * @param afterMinusBefore The value of after-minus-before millisecound.
+     * @return Performance view. (ex. 1m23s456ms) (NotNull)
+     */
+    public static String convertToPerformanceView(long afterMinusBefore) {
+        if (afterMinusBefore < 0) {
+            return String.valueOf(afterMinusBefore);
+        }
+
+        long sec = afterMinusBefore / 1000;
+        final long min = sec / 60;
+        sec = sec % 60;
+        final long mil = afterMinusBefore % 1000;
+
+        final StringBuffer sb = new StringBuffer();
+        if (min >= 10) { // Minute
+            sb.append(min).append("m");
+        } else if (min < 10 && min >= 0) {
+            sb.append("0").append(min).append("m");
+        }
+        if (sec >= 10) { // Second
+            sb.append(sec).append("s");
+        } else if (sec < 10 && sec >= 0) {
+            sb.append("0").append(sec).append("s");
+        }
+        if (mil >= 100) { // Millisecond
+            sb.append(mil).append("ms");
+        } else if (mil < 100 && mil >= 10) {
+            sb.append("0").append(mil).append("ms");
+        } else if (mil < 10 && mil >= 0) {
+            sb.append("00").append(mil).append("ms");
+        }
+
+        return sb.toString();
+    }
+
+    /**
+     * Convert object array to string view.
+     * 
+     * @param objArray The array of object. (Nullable)
+     * @return The string divided with comma. (NotNull: If the argument is null, returns empty string.)
+     */
+    public static String convertObjectArrayToStringView(Object[] objArray) {
+        if (objArray == null) {
+            return "";
+        }
+        final StringBuffer sb = new StringBuffer();
+        for (int i = 0; i < objArray.length; i++) {
+            if (i == 0) {
+                sb.append(objArray[i]);
+            } else {
+                sb.append(", ").append(objArray[i]);
+            }
+        }
+        return sb.toString();
+    }
+}


Property changes on: announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/util/TraceViewUtil.java
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/util/ValueLabelUtil.java
===================================================================
--- announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/util/ValueLabelUtil.java	                        (rev 0)
+++ announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/util/ValueLabelUtil.java	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,64 @@
+package jp.sf.pal.announcement.db.allcommon.util;
+
+import java.util.LinkedHashMap;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @author DBFlute(AutoGenerator)
+ */
+public class ValueLabelUtil {
+
+    /**
+     * Find the label by the value from the list of value label.
+     * @param valueLabelList The list of value label. (NotNull and NotEmpty)
+     * @param value Value. (NotNull)
+     * @return Label. (NotNull)
+     */
+    public static String findLabel(List<Map<String, Object>> valueLabelList,
+            Object value) {
+        if (valueLabelList == null) {
+            String msg = "The arguement[valueLabelList] should not be null.";
+            throw new IllegalArgumentException(msg);
+        }
+        if (valueLabelList.isEmpty()) {
+            String msg = "The arguement[valueLabelList] should not be empty.";
+            throw new IllegalArgumentException(msg);
+        }
+        if (value == null) {
+            String msg = "The arguement[value] should not be null.";
+            throw new IllegalArgumentException(msg);
+        }
+        for (Map<String, Object> elementMap : valueLabelList) {
+            final Object currentValue = elementMap.get("value");
+            if (value.equals(currentValue)) {
+                return (String) elementMap.get("label");
+            }
+        }
+        String msg = "Not found label by the value: value=" + value
+                + " valueLabelList=" + valueLabelList;
+        throw new IllegalStateException(msg);
+    }
+
+    public static Map<Object, String> createValueLabelMap(
+            List<Map<String, Object>> valueLabelList) {
+        final Map<Object, String> resultMap = new LinkedHashMap<Object, String>();
+        for (Map<String, Object> elementMap : valueLabelList) {
+            final Object currentValue = elementMap.get("value");
+            final String currentLabel = (String) elementMap.get("label");
+            resultMap.put(currentValue, currentLabel);
+        }
+        return resultMap;
+    }
+
+    public static Map<String, Object> createLabelValueMap(
+            List<Map<String, Object>> valueLabelList) {
+        final Map<String, Object> resultMap = new LinkedHashMap<String, Object>();
+        for (Map<String, Object> elementMap : valueLabelList) {
+            final Object currentValue = elementMap.get("value");
+            final String currentLabel = (String) elementMap.get("label");
+            resultMap.put(currentLabel, currentValue);
+        }
+        return resultMap;
+    }
+}


Property changes on: announcement/trunk/src/main/java/jp/sf/pal/announcement/db/allcommon/util/ValueLabelUtil.java
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/java/jp/sf/pal/announcement/db/bsbhv/BsAnnouncementBhv.java
===================================================================
--- announcement/trunk/src/main/java/jp/sf/pal/announcement/db/bsbhv/BsAnnouncementBhv.java	                        (rev 0)
+++ announcement/trunk/src/main/java/jp/sf/pal/announcement/db/bsbhv/BsAnnouncementBhv.java	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,556 @@
+package jp.sf.pal.announcement.db.bsbhv;
+
+import java.util.List;
+
+import jp.sf.pal.announcement.db.allcommon.DaoReadable;
+import jp.sf.pal.announcement.db.allcommon.DaoWritable;
+import jp.sf.pal.announcement.db.allcommon.Entity;
+import jp.sf.pal.announcement.db.allcommon.bhv.setup.ConditionBeanSetupper;
+import jp.sf.pal.announcement.db.allcommon.bhv.setup.ValueLabelSetupper;
+import jp.sf.pal.announcement.db.allcommon.cbean.ConditionBean;
+import jp.sf.pal.announcement.db.allcommon.cbean.ListResultBean;
+import jp.sf.pal.announcement.db.allcommon.cbean.PagingBean;
+import jp.sf.pal.announcement.db.allcommon.cbean.PagingHandler;
+import jp.sf.pal.announcement.db.allcommon.cbean.PagingInvoker;
+import jp.sf.pal.announcement.db.allcommon.cbean.PagingResultBean;
+import jp.sf.pal.announcement.db.allcommon.dbmeta.DBMeta;
+import jp.sf.pal.announcement.db.allcommon.dbmeta.hierarchy.HierarchyArranger;
+import jp.sf.pal.announcement.db.allcommon.dbmeta.hierarchy.HierarchyBasicRequest;
+import jp.sf.pal.announcement.db.allcommon.dbmeta.hierarchy.HierarchyRequest;
+import jp.sf.pal.announcement.db.bsentity.dbmeta.AnnouncementDbm;
+import jp.sf.pal.announcement.db.cbean.AnnouncementCB;
+import jp.sf.pal.announcement.db.exdao.AnnouncementDao;
+import jp.sf.pal.announcement.db.exentity.Announcement;
+import jp.sf.pal.announcement.db.exentity.AnnouncementBody;
+
+/**
+ * The behavior of ANNOUNCEMENT.
+ * <pre>
+ * [primary-key]
+ *     ID
+ * 
+ * [column]
+ *     ID, SCOPE, ROLE, START_DATE, END_DATE, TITLE, SORT_ORDER, TIMESTAMP
+ * 
+ * [sequence]
+ *     
+ * 
+ * [identity]
+ *     ID
+ * 
+ * [version-no]
+ *     
+ * 
+ * [foreign-table]
+ *     
+ * 
+ * [referrer-table]
+ *     ANNOUNCEMENT_BODY
+ * 
+ * [foreign-property]
+ *     announcementBodyAsOne
+ * 
+ * [referrer-property]
+ *     
+ * </pre>
+ * @author DBFlute(AutoGenerator)
+ */
+ @ SuppressWarnings("unchecked")
+public abstract class BsAnnouncementBhv extends
+        jp.sf.pal.announcement.db.allcommon.bhv.AbstractBehaviorWritable {
+
+    // ===================================================================================
+    //                                                                           Attribute
+    //                                                                           =========
+    protected AnnouncementDao _dao;
+
+    // ===================================================================================
+    //                                                                          Table name
+    //                                                                          ==========
+    /** @return The name on database of table. (NotNull) */
+    public String getTableDbName() {
+        return "ANNOUNCEMENT";
+    }
+
+    // ===================================================================================
+    //                                                                              DBMeta
+    //                                                                              ======
+    /** @return The meta data of the database. (NotNull) */
+    public DBMeta getDBMeta() {
+        return AnnouncementDbm.getInstance();
+    }
+
+    /** @return The meta data of the database as my table type. (NotNull) */
+    public AnnouncementDbm getMyDBMeta() {
+        return AnnouncementDbm.getInstance();
+    }
+
+    // ===================================================================================
+    //                                                                        Dao Accessor
+    //                                                                        ============
+    public AnnouncementDao getMyDao() {
+        return _dao;
+    }
+
+    public void setMyDao(AnnouncementDao dao) {
+        assertObjectNotNull("dao", dao);
+        _dao = dao;
+    }
+
+    public DaoReadable getDaoReadable() {
+        return getMyDao();
+    }
+
+    public DaoWritable getDaoWritable() {
+        return getMyDao();
+    }
+
+    // ===================================================================================
+    //                                                                        New Instance
+    //                                                                        ============
+    public Entity newEntity() {
+        return newMyEntity();
+    }
+
+    public ConditionBean newConditionBean() {
+        return newMyConditionBean();
+    }
+
+    public Announcement newMyEntity() {
+        return new Announcement();
+    }
+
+    public AnnouncementCB newMyConditionBean() {
+        return new AnnouncementCB();
+    }
+
+    // ===================================================================================
+    //                                                                  Basic Select Count
+    //                                                                  ==================
+    /**
+     * Select the count of the condition-bean. {IgnorePagingCondition}
+     * @param cb The condition-bean of Announcement. (NotNull)
+     * @return The selected count.
+     */
+    public int selectCount(AnnouncementCB cb) {
+        assertConditionBeanNotNull(cb);
+        return delegateSelectCount(cb);
+    }
+
+    // ===================================================================================
+    //                                                                 Basic Select Entity
+    //                                                                 ===================
+    /**
+     * Select the entity by the condition-bean.
+     * @param cb The condition-bean of Announcement. (NotNull)
+     * @return The selected entity. (Nullalble)
+     * @exception jp.sf.pal.announcement.db.allcommon.exception.EntityDuplicatedException When the entity has been duplicated.
+     */
+    public Announcement selectEntity(final AnnouncementCB cb) {
+        return helpSelectEntityInternally(
+                cb,
+                new InternalSelectEntityCallback<Announcement, AnnouncementCB>() {
+                    public List<Announcement> callbackSelectList(
+                            AnnouncementCB cb) {
+                        return selectList(cb);
+                    }
+                });
+    }
+
+    /**
+     * Select the entity by the condition-bean with deleted check.
+     * @param cb The condition-bean of Announcement. (NotNull)
+     * @return The selected entity. (NotNull)
+     * @exception jp.sf.pal.announcement.db.allcommon.exception.EntityAlreadyDeletedException When the entity has already been deleted.
+     * @exception jp.sf.pal.announcement.db.allcommon.exception.EntityDuplicatedException When the entity has been duplicated.
+     */
+    public Announcement selectEntityWithDeletedCheck(final AnnouncementCB cb) {
+        return helpSelectEntityWithDeletedCheckInternally(
+                cb,
+                new InternalSelectEntityWithDeletedCheckCallback<Announcement, AnnouncementCB>() {
+                    public List<Announcement> callbackSelectList(
+                            AnnouncementCB cb) {
+                        return selectList(cb);
+                    }
+                });
+    }
+
+    /* (non-javadoc)
+     * Select the entity with deleted check. {by primary-key value}
+     * @param primaryKey The keys of primary.
+     * @return The selected entity. (NotNull)
+     * @exception jp.sf.pal.announcement.db.allcommon.exception.EntityAlreadyDeletedException When the entity has already been deleted.
+     * @exception jp.sf.pal.announcement.db.allcommon.exception.EntityDuplicatedException When the entity has been duplicated.
+     */
+    public Announcement selectByPKValueWithDeletedCheck(Integer id) {
+        Announcement entity = new Announcement();
+        entity.setId(id);
+        final AnnouncementCB cb = newMyConditionBean();
+        cb.acceptPrimaryKeyMapString(getDBMeta().extractPrimaryKeyMapString(
+                entity));
+        return selectEntityWithDeletedCheck(cb);
+    }
+
+    // ===================================================================================
+    //                                                                   Basic Select List
+    //                                                                   =================
+    /**
+     * Select the list as result-bean.
+     * @param cb The condition-bean of Announcement. (NotNull)
+     * @return The result-bean of selected list. (NotNull)
+     */
+    public ListResultBean<Announcement> selectList(AnnouncementCB cb) {
+        assertConditionBeanNotNull(cb);
+        return new jp.sf.pal.announcement.db.allcommon.cbean.ResultBeanBuilder<Announcement>(
+                getTableDbName()).buildListResultBean(cb,
+                delegateSelectList(cb));
+    }
+
+    /**
+     * Select the page as result-bean.
+     * @param cb The condition-bean of Announcement. (NotNull)
+     * @return The result-bean of selected page. (NotNull)
+     */
+    public PagingResultBean<Announcement> selectPage(final AnnouncementCB cb) {
+        assertConditionBeanNotNull(cb);
+        final PagingInvoker<Announcement> invoker = new PagingInvoker<Announcement>(
+                getTableDbName());
+        final PagingHandler<Announcement> handler = new PagingHandler<Announcement>() {
+            public PagingBean getPagingBean() {
+                return cb;
+            }
+
+            public int count() {
+                return selectCount(cb);
+            }
+
+            public List<Announcement> paging() {
+                return selectList(cb);
+            }
+        };
+        return invoker.invokePaging(handler);
+    }
+
+    // ===================================================================================
+    //                                                                      Various Select
+    //                                                                      ==============
+    /**
+     * Select the list of value-label.
+     * @param cb The condition-bean of Announcement. (NotNull)
+     * @param valueLabelSetupper The setupper of value-label. (NotNull)
+     * @return The list of value-label. (NotNull)
+     */
+    public List<java.util.Map<String, Object>> selectValueLabelList(
+            AnnouncementCB cb,
+            ValueLabelSetupper<Announcement> valueLabelSetupper) {
+        return createValueLabelList(selectList(cb), valueLabelSetupper);
+    }
+
+    // ===================================================================================
+    //                                                                       Load Referrer
+    //                                                                       =============
+
+    // ===================================================================================
+    //                                                                    Pull Out Foreign
+    //                                                                    ================
+
+    /**
+     * Pull out the list of referrer-as-one table 'AnnouncementBody'.
+     * @param announcementList The list of announcement. (NotNull)
+     * @return The list of referrer-as-one table. (NotNull)
+     */
+    public List<AnnouncementBody> pulloutAnnouncementBodyAsOne(
+            List<Announcement> announcementList) {
+        return helpPulloutInternally(announcementList,
+                new InternalPulloutCallback<Announcement, AnnouncementBody>() {
+                    public AnnouncementBody callbackGetForeignEntity(
+                            Announcement entity) {
+                        return entity.getAnnouncementBodyAsOne();
+                    }
+                });
+    }
+
+    // ===================================================================================
+    //                                                                 Basic Entity Update
+    //                                                                 ===================
+    /**
+     * Insert the entity.
+     * @param announcement The entity of insert target. (NotNull)
+     */
+    public void insert(Announcement announcement) {
+        assertEntityNotNull(announcement);
+        delegateInsert(announcement);
+    }
+
+    @Override
+    protected void doCreate(Entity announcement) {
+        insert((Announcement) announcement);
+    }
+
+    /**
+     * Update the entity modified-only. {UpdateCountZeroException, ConcurrencyControl}
+     * @param announcement The entity of update target. (NotNull) {PrimaryKeyRequired, ConcurrencyColumnRequired}
+     * @exception jp.sf.pal.announcement.db.allcommon.exception.EntityAlreadyDeletedException When the entity has already been deleted.
+     * @exception jp.sf.pal.announcement.db.allcommon.exception.EntityDuplicatedException When the entity has been duplicated.
+     */
+    public void update(final Announcement announcement) {
+        helpUpdateInternally(announcement,
+                new InternalUpdateCallback<Announcement>() {
+                    public int callbackDelegateUpdate(Announcement entity) {
+                        return delegateUpdate(entity);
+                    }
+                });
+    }
+
+    @Override
+    protected void doModify(Entity entity) {
+        update((Announcement) entity);
+    }
+
+    @Override
+    protected void doModifyNonstrict(Entity entity) {
+        update((Announcement) entity);
+    }
+
+    /**
+     * Insert or update the entity modified-only. {ConcurrencyControl(when update)}
+     * @param announcement The entity of insert or update target. (NotNull)
+     * @exception jp.sf.pal.announcement.db.allcommon.exception.EntityAlreadyDeletedException When the entity has already been deleted.
+     * @exception jp.sf.pal.announcement.db.allcommon.exception.EntityDuplicatedException When the entity has been duplicated.
+     */
+    public void insertOrUpdate(final Announcement announcement) {
+        helpInsertOrUpdateInternally(
+                announcement,
+                new InternalInsertOrUpdateCallback<Announcement, AnnouncementCB>() {
+                    public void callbackInsert(Announcement entity) {
+                        insert(entity);
+                    }
+
+                    public void callbackUpdate(Announcement entity) {
+                        update(entity);
+                    }
+
+                    public AnnouncementCB callbackNewMyConditionBean() {
+                        return newMyConditionBean();
+                    }
+
+                    public int callbackSelectCount(AnnouncementCB cb) {
+                        return selectCount(cb);
+                    }
+                });
+    }
+
+    @Override
+    protected void doCreateOrUpdate(Entity announcement) {
+        insertOrUpdate((Announcement) announcement);
+    }
+
+    @Override
+    protected void doCreateOrUpdateNonstrict(Entity entity) {
+        insertOrUpdate((Announcement) entity);
+    }
+
+    /**
+     * Delete the entity. {UpdateCountZeroException, ConcurrencyControl}
+     * @param announcement The entity of delete target. (NotNull) {PrimaryKeyRequired, ConcurrencyColumnRequired}
+     * @exception jp.sf.pal.announcement.db.allcommon.exception.EntityAlreadyDeletedException When the entity has already been deleted.
+     * @exception jp.sf.pal.announcement.db.allcommon.exception.EntityDuplicatedException When the entity has been duplicated.
+     */
+    public void delete(Announcement announcement) {
+        helpDeleteInternally(announcement,
+                new InternalDeleteCallback<Announcement>() {
+                    public int callbackDelegateDelete(Announcement entity) {
+                        return delegateDelete(entity);
+                    }
+                });
+    }
+
+    @Override
+    protected void doRemove(Entity announcement) {
+        delete((Announcement) announcement);
+    }
+
+    // ===================================================================================
+    //                                                                  Basic Batch Update
+    //                                                                  ==================
+    /**
+     * Batch insert the list. This method use 'Batch Update' of java.sql.PreparedStatement.
+     * @param announcementList The list of the entity. (NotNull)
+     * @return The array of inserted count.
+     */
+    public int[] batchInsert(List<Announcement> announcementList) {
+        assertObjectNotNull("announcementList", announcementList);
+        return delegateInsertList(announcementList);
+    }
+
+    /**
+     * Batch update the list. All columns are update target. {NOT modified only} <br />
+     * This method use 'Batch Update' of java.sql.PreparedStatement.
+     * @param announcementList The list of the entity. (NotNull)
+     * @return The array of updated count.
+     * @exception jp.sf.pal.announcement.db.allcommon.exception.EntityAlreadyDeletedException When the entity has already been deleted.
+     */
+    public int[] batchUpdate(List<Announcement> announcementList) {
+        assertObjectNotNull("announcementList", announcementList);
+        return delegateUpdateList(announcementList);
+    }
+
+    /**
+     * Batch delete the list. <br />
+     * This method use 'Batch Update' of java.sql.PreparedStatement.
+     * @param announcementList The list of the entity. (NotNull)
+     * @return The array of deleted count.
+     * @exception jp.sf.pal.announcement.db.allcommon.exception.EntityAlreadyDeletedException When the entity has already been deleted.
+     */
+    public int[] batchDelete(List<Announcement> announcementList) {
+        assertObjectNotNull("announcementList", announcementList);
+        return delegateDeleteList(announcementList);
+    }
+
+    // ===================================================================================
+    //                                                                      Various Update
+    //                                                                      ==============
+
+    // ===================================================================================
+    //                                                                      Various Delete
+    //                                                                      ==============
+    /**
+     * Query delete the several entities.
+     * @param cb Condition-bean. (NotNull)
+     * @return The deleted count.
+     */
+    public int queryDelete(AnnouncementCB cb) {
+        assertConditionBeanNotNull(cb);
+        return getMyDao().deleteByQuery(cb);
+    }
+
+    // ===================================================================================
+    //                                                                     Delegate Method
+    //                                                                     ===============
+    // -----------------------------------------------------
+    //                                                Select
+    //                                                ------
+    protected int delegateGetCountAll() {
+        return getMyDao().getCountAll();
+    }
+
+    protected List<Announcement> delegateGetListAll() {
+        return getMyDao().getListAll();
+    }
+
+    protected Announcement delegateGetEntity(Integer id) {
+        return getMyDao().getEntity(id);
+    }
+
+    protected int delegateSelectCount(AnnouncementCB cb) {
+        assertConditionBeanNotNull(cb);
+        return getMyDao().selectCount(cb);
+    }
+
+    protected Announcement delegateSelectEntity(AnnouncementCB cb) {
+        assertConditionBeanNotNull(cb);
+        return getMyDao().selectEntity(cb);
+    }
+
+    protected List<Announcement> delegateSelectList(AnnouncementCB cb) {
+        assertConditionBeanNotNull(cb);
+        return getMyDao().selectList(cb);
+    }
+
+    // -----------------------------------------------------
+    //                                                Update
+    //                                                ------
+    protected int delegateInsert(Announcement entity) {
+        if (!processBeforeInsert(entity)) {
+            return 1;
+        }
+        return getMyDao().insert(entity);
+    }
+
+    protected int delegateUpdate(Announcement entity) {
+        if (!processBeforeUpdate(entity)) {
+            return 1;
+        }
+        return getMyDao().updateModifiedOnly(entity);
+    }
+
+    protected int delegateDelete(Announcement entity) {
+        if (!processBeforeDelete(entity)) {
+            return 1;
+        }
+        return getMyDao().delete(entity);
+    }
+
+    protected int[] delegateInsertList(List<Announcement> entityList) {
+        assertObjectNotNull("announcementList", entityList);
+        return getMyDao().insertList(
+                helpFilterBeforeInsertInternally(entityList));
+    }
+
+    protected int[] delegateUpdateList(List<Announcement> entityList) {
+        assertObjectNotNull("announcementList", entityList);
+        return getMyDao().updateList(
+                helpFilterBeforeUpdateInternally(entityList));
+    }
+
+    protected int[] delegateDeleteList(List<Announcement> entityList) {
+        assertObjectNotNull("announcementList", entityList);
+        return getMyDao().deleteList(
+                helpFilterBeforeDeleteInternally(entityList));
+    }
+
+    // ===================================================================================
+    //                                                                           Hierarchy
+    //                                                                           =========
+    /**
+     * Create the basic request of hierarchy of Announcement..
+     * @param sourceList The list of source. (NotNull)
+     * @param <SOURCE> The type of source.
+     * @return Hierarchy request of Announcement. (NotNull)
+     */
+    public <SOURCE> HierarchyBasicRequest<Announcement, AnnouncementDbm.AnnouncementRelationTrace> createHierarchyBasicRequest(
+            List<SOURCE> sourceList) {
+        final HierarchyBasicRequest<Announcement, AnnouncementDbm.AnnouncementRelationTrace> request = new HierarchyBasicRequest<Announcement, AnnouncementDbm.AnnouncementRelationTrace>(
+                Announcement.class);
+        request.registerSourceList(sourceList);
+        return request;
+    }
+
+    /**
+     * Arrange hierarchy.
+     * @param request Hierarchy request of Announcement. (NotNull)
+     * @return The list of Announcement. (NotNull)
+     */
+    public List<Announcement> arrangeHierarchy(
+            HierarchyRequest<Announcement> request) {
+        return new HierarchyArranger<Announcement>().arrangeHierarchy(request);
+    }
+
+    // ===================================================================================
+    //                                                                          CBSetupper
+    //                                                                          ==========
+    public static interface CBSetupper extends
+            ConditionBeanSetupper<AnnouncementCB> {
+        public void setup(AnnouncementCB cb);
+    }
+
+    // ===================================================================================
+    //                                                                Optimistic Lock Info
+    //                                                                ====================
+    @Override
+    protected boolean hasVersionNoValue(Entity entity) {
+        return false;
+    }
+
+    @Override
+    protected boolean hasUpdateDateValue(Entity entity) {
+        return false;
+    }
+
+    // ===================================================================================
+    //                                                                              Helper
+    //                                                                              ======
+    protected Announcement downcast(Entity entity) {
+        return helpDowncastInternally(entity, Announcement.class);
+    }
+}


Property changes on: announcement/trunk/src/main/java/jp/sf/pal/announcement/db/bsbhv/BsAnnouncementBhv.java
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/java/jp/sf/pal/announcement/db/bsbhv/BsAnnouncementBodyBhv.java
===================================================================
--- announcement/trunk/src/main/java/jp/sf/pal/announcement/db/bsbhv/BsAnnouncementBodyBhv.java	                        (rev 0)
+++ announcement/trunk/src/main/java/jp/sf/pal/announcement/db/bsbhv/BsAnnouncementBodyBhv.java	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,559 @@
+package jp.sf.pal.announcement.db.bsbhv;
+
+import java.util.List;
+
+import jp.sf.pal.announcement.db.allcommon.DaoReadable;
+import jp.sf.pal.announcement.db.allcommon.DaoWritable;
+import jp.sf.pal.announcement.db.allcommon.Entity;
+import jp.sf.pal.announcement.db.allcommon.bhv.setup.ConditionBeanSetupper;
+import jp.sf.pal.announcement.db.allcommon.bhv.setup.ValueLabelSetupper;
+import jp.sf.pal.announcement.db.allcommon.cbean.ConditionBean;
+import jp.sf.pal.announcement.db.allcommon.cbean.ListResultBean;
+import jp.sf.pal.announcement.db.allcommon.cbean.PagingBean;
+import jp.sf.pal.announcement.db.allcommon.cbean.PagingHandler;
+import jp.sf.pal.announcement.db.allcommon.cbean.PagingInvoker;
+import jp.sf.pal.announcement.db.allcommon.cbean.PagingResultBean;
+import jp.sf.pal.announcement.db.allcommon.dbmeta.DBMeta;
+import jp.sf.pal.announcement.db.allcommon.dbmeta.hierarchy.HierarchyArranger;
+import jp.sf.pal.announcement.db.allcommon.dbmeta.hierarchy.HierarchyBasicRequest;
+import jp.sf.pal.announcement.db.allcommon.dbmeta.hierarchy.HierarchyRequest;
+import jp.sf.pal.announcement.db.bsentity.dbmeta.AnnouncementBodyDbm;
+import jp.sf.pal.announcement.db.cbean.AnnouncementBodyCB;
+import jp.sf.pal.announcement.db.exdao.AnnouncementBodyDao;
+import jp.sf.pal.announcement.db.exentity.Announcement;
+import jp.sf.pal.announcement.db.exentity.AnnouncementBody;
+
+/**
+ * The behavior of ANNOUNCEMENT_BODY.
+ * <pre>
+ * [primary-key]
+ *     ID
+ * 
+ * [column]
+ *     ID, CONTENT
+ * 
+ * [sequence]
+ *     
+ * 
+ * [identity]
+ *     ${table.identityColumnName}
+ * 
+ * [version-no]
+ *     
+ * 
+ * [foreign-table]
+ *     ANNOUNCEMENT
+ * 
+ * [referrer-table]
+ *     
+ * 
+ * [foreign-property]
+ *     announcement
+ * 
+ * [referrer-property]
+ *     
+ * </pre>
+ * @author DBFlute(AutoGenerator)
+ */
+ @ SuppressWarnings("unchecked")
+public abstract class BsAnnouncementBodyBhv extends
+        jp.sf.pal.announcement.db.allcommon.bhv.AbstractBehaviorWritable {
+
+    // ===================================================================================
+    //                                                                           Attribute
+    //                                                                           =========
+    protected AnnouncementBodyDao _dao;
+
+    // ===================================================================================
+    //                                                                          Table name
+    //                                                                          ==========
+    /** @return The name on database of table. (NotNull) */
+    public String getTableDbName() {
+        return "ANNOUNCEMENT_BODY";
+    }
+
+    // ===================================================================================
+    //                                                                              DBMeta
+    //                                                                              ======
+    /** @return The meta data of the database. (NotNull) */
+    public DBMeta getDBMeta() {
+        return AnnouncementBodyDbm.getInstance();
+    }
+
+    /** @return The meta data of the database as my table type. (NotNull) */
+    public AnnouncementBodyDbm getMyDBMeta() {
+        return AnnouncementBodyDbm.getInstance();
+    }
+
+    // ===================================================================================
+    //                                                                        Dao Accessor
+    //                                                                        ============
+    public AnnouncementBodyDao getMyDao() {
+        return _dao;
+    }
+
+    public void setMyDao(AnnouncementBodyDao dao) {
+        assertObjectNotNull("dao", dao);
+        _dao = dao;
+    }
+
+    public DaoReadable getDaoReadable() {
+        return getMyDao();
+    }
+
+    public DaoWritable getDaoWritable() {
+        return getMyDao();
+    }
+
+    // ===================================================================================
+    //                                                                        New Instance
+    //                                                                        ============
+    public Entity newEntity() {
+        return newMyEntity();
+    }
+
+    public ConditionBean newConditionBean() {
+        return newMyConditionBean();
+    }
+
+    public AnnouncementBody newMyEntity() {
+        return new AnnouncementBody();
+    }
+
+    public AnnouncementBodyCB newMyConditionBean() {
+        return new AnnouncementBodyCB();
+    }
+
+    // ===================================================================================
+    //                                                                  Basic Select Count
+    //                                                                  ==================
+    /**
+     * Select the count of the condition-bean. {IgnorePagingCondition}
+     * @param cb The condition-bean of AnnouncementBody. (NotNull)
+     * @return The selected count.
+     */
+    public int selectCount(AnnouncementBodyCB cb) {
+        assertConditionBeanNotNull(cb);
+        return delegateSelectCount(cb);
+    }
+
+    // ===================================================================================
+    //                                                                 Basic Select Entity
+    //                                                                 ===================
+    /**
+     * Select the entity by the condition-bean.
+     * @param cb The condition-bean of AnnouncementBody. (NotNull)
+     * @return The selected entity. (Nullalble)
+     * @exception jp.sf.pal.announcement.db.allcommon.exception.EntityDuplicatedException When the entity has been duplicated.
+     */
+    public AnnouncementBody selectEntity(final AnnouncementBodyCB cb) {
+        return helpSelectEntityInternally(
+                cb,
+                new InternalSelectEntityCallback<AnnouncementBody, AnnouncementBodyCB>() {
+                    public List<AnnouncementBody> callbackSelectList(
+                            AnnouncementBodyCB cb) {
+                        return selectList(cb);
+                    }
+                });
+    }
+
+    /**
+     * Select the entity by the condition-bean with deleted check.
+     * @param cb The condition-bean of AnnouncementBody. (NotNull)
+     * @return The selected entity. (NotNull)
+     * @exception jp.sf.pal.announcement.db.allcommon.exception.EntityAlreadyDeletedException When the entity has already been deleted.
+     * @exception jp.sf.pal.announcement.db.allcommon.exception.EntityDuplicatedException When the entity has been duplicated.
+     */
+    public AnnouncementBody selectEntityWithDeletedCheck(
+            final AnnouncementBodyCB cb) {
+        return helpSelectEntityWithDeletedCheckInternally(
+                cb,
+                new InternalSelectEntityWithDeletedCheckCallback<AnnouncementBody, AnnouncementBodyCB>() {
+                    public List<AnnouncementBody> callbackSelectList(
+                            AnnouncementBodyCB cb) {
+                        return selectList(cb);
+                    }
+                });
+    }
+
+    /* (non-javadoc)
+     * Select the entity with deleted check. {by primary-key value}
+     * @param primaryKey The keys of primary.
+     * @return The selected entity. (NotNull)
+     * @exception jp.sf.pal.announcement.db.allcommon.exception.EntityAlreadyDeletedException When the entity has already been deleted.
+     * @exception jp.sf.pal.announcement.db.allcommon.exception.EntityDuplicatedException When the entity has been duplicated.
+     */
+    public AnnouncementBody selectByPKValueWithDeletedCheck(Integer id) {
+        AnnouncementBody entity = new AnnouncementBody();
+        entity.setId(id);
+        final AnnouncementBodyCB cb = newMyConditionBean();
+        cb.acceptPrimaryKeyMapString(getDBMeta().extractPrimaryKeyMapString(
+                entity));
+        return selectEntityWithDeletedCheck(cb);
+    }
+
+    // ===================================================================================
+    //                                                                   Basic Select List
+    //                                                                   =================
+    /**
+     * Select the list as result-bean.
+     * @param cb The condition-bean of AnnouncementBody. (NotNull)
+     * @return The result-bean of selected list. (NotNull)
+     */
+    public ListResultBean<AnnouncementBody> selectList(AnnouncementBodyCB cb) {
+        assertConditionBeanNotNull(cb);
+        return new jp.sf.pal.announcement.db.allcommon.cbean.ResultBeanBuilder<AnnouncementBody>(
+                getTableDbName()).buildListResultBean(cb,
+                delegateSelectList(cb));
+    }
+
+    /**
+     * Select the page as result-bean.
+     * @param cb The condition-bean of AnnouncementBody. (NotNull)
+     * @return The result-bean of selected page. (NotNull)
+     */
+    public PagingResultBean<AnnouncementBody> selectPage(
+            final AnnouncementBodyCB cb) {
+        assertConditionBeanNotNull(cb);
+        final PagingInvoker<AnnouncementBody> invoker = new PagingInvoker<AnnouncementBody>(
+                getTableDbName());
+        final PagingHandler<AnnouncementBody> handler = new PagingHandler<AnnouncementBody>() {
+            public PagingBean getPagingBean() {
+                return cb;
+            }
+
+            public int count() {
+                return selectCount(cb);
+            }
+
+            public List<AnnouncementBody> paging() {
+                return selectList(cb);
+            }
+        };
+        return invoker.invokePaging(handler);
+    }
+
+    // ===================================================================================
+    //                                                                      Various Select
+    //                                                                      ==============
+    /**
+     * Select the list of value-label.
+     * @param cb The condition-bean of AnnouncementBody. (NotNull)
+     * @param valueLabelSetupper The setupper of value-label. (NotNull)
+     * @return The list of value-label. (NotNull)
+     */
+    public List<java.util.Map<String, Object>> selectValueLabelList(
+            AnnouncementBodyCB cb,
+            ValueLabelSetupper<AnnouncementBody> valueLabelSetupper) {
+        return createValueLabelList(selectList(cb), valueLabelSetupper);
+    }
+
+    // ===================================================================================
+    //                                                                       Load Referrer
+    //                                                                       =============
+
+    // ===================================================================================
+    //                                                                    Pull Out Foreign
+    //                                                                    ================
+
+    /**
+     * Pull out the list of foreign table 'Announcement'.
+     * @param announcementBodyList The list of announcementBody. (NotNull)
+     * @return The list of foreign table. (NotNull)
+     */
+    public List<Announcement> pulloutAnnouncement(
+            List<AnnouncementBody> announcementBodyList) {
+        return helpPulloutInternally(announcementBodyList,
+                new InternalPulloutCallback<AnnouncementBody, Announcement>() {
+                    public Announcement callbackGetForeignEntity(
+                            AnnouncementBody entity) {
+                        return entity.getAnnouncement();
+                    }
+                });
+    }
+
+    // ===================================================================================
+    //                                                                 Basic Entity Update
+    //                                                                 ===================
+    /**
+     * Insert the entity.
+     * @param announcementBody The entity of insert target. (NotNull)
+     */
+    public void insert(AnnouncementBody announcementBody) {
+        assertEntityNotNull(announcementBody);
+        delegateInsert(announcementBody);
+    }
+
+    @Override
+    protected void doCreate(Entity announcementBody) {
+        insert((AnnouncementBody) announcementBody);
+    }
+
+    /**
+     * Update the entity modified-only. {UpdateCountZeroException, ConcurrencyControl}
+     * @param announcementBody The entity of update target. (NotNull) {PrimaryKeyRequired, ConcurrencyColumnRequired}
+     * @exception jp.sf.pal.announcement.db.allcommon.exception.EntityAlreadyDeletedException When the entity has already been deleted.
+     * @exception jp.sf.pal.announcement.db.allcommon.exception.EntityDuplicatedException When the entity has been duplicated.
+     */
+    public void update(final AnnouncementBody announcementBody) {
+        helpUpdateInternally(announcementBody,
+                new InternalUpdateCallback<AnnouncementBody>() {
+                    public int callbackDelegateUpdate(AnnouncementBody entity) {
+                        return delegateUpdate(entity);
+                    }
+                });
+    }
+
+    @Override
+    protected void doModify(Entity entity) {
+        update((AnnouncementBody) entity);
+    }
+
+    @Override
+    protected void doModifyNonstrict(Entity entity) {
+        update((AnnouncementBody) entity);
+    }
+
+    /**
+     * Insert or update the entity modified-only. {ConcurrencyControl(when update)}
+     * @param announcementBody The entity of insert or update target. (NotNull)
+     * @exception jp.sf.pal.announcement.db.allcommon.exception.EntityAlreadyDeletedException When the entity has already been deleted.
+     * @exception jp.sf.pal.announcement.db.allcommon.exception.EntityDuplicatedException When the entity has been duplicated.
+     */
+    public void insertOrUpdate(final AnnouncementBody announcementBody) {
+        helpInsertOrUpdateInternally(
+                announcementBody,
+                new InternalInsertOrUpdateCallback<AnnouncementBody, AnnouncementBodyCB>() {
+                    public void callbackInsert(AnnouncementBody entity) {
+                        insert(entity);
+                    }
+
+                    public void callbackUpdate(AnnouncementBody entity) {
+                        update(entity);
+                    }
+
+                    public AnnouncementBodyCB callbackNewMyConditionBean() {
+                        return newMyConditionBean();
+                    }
+
+                    public int callbackSelectCount(AnnouncementBodyCB cb) {
+                        return selectCount(cb);
+                    }
+                });
+    }
+
+    @Override
+    protected void doCreateOrUpdate(Entity announcementBody) {
+        insertOrUpdate((AnnouncementBody) announcementBody);
+    }
+
+    @Override
+    protected void doCreateOrUpdateNonstrict(Entity entity) {
+        insertOrUpdate((AnnouncementBody) entity);
+    }
+
+    /**
+     * Delete the entity. {UpdateCountZeroException, ConcurrencyControl}
+     * @param announcementBody The entity of delete target. (NotNull) {PrimaryKeyRequired, ConcurrencyColumnRequired}
+     * @exception jp.sf.pal.announcement.db.allcommon.exception.EntityAlreadyDeletedException When the entity has already been deleted.
+     * @exception jp.sf.pal.announcement.db.allcommon.exception.EntityDuplicatedException When the entity has been duplicated.
+     */
+    public void delete(AnnouncementBody announcementBody) {
+        helpDeleteInternally(announcementBody,
+                new InternalDeleteCallback<AnnouncementBody>() {
+                    public int callbackDelegateDelete(AnnouncementBody entity) {
+                        return delegateDelete(entity);
+                    }
+                });
+    }
+
+    @Override
+    protected void doRemove(Entity announcementBody) {
+        delete((AnnouncementBody) announcementBody);
+    }
+
+    // ===================================================================================
+    //                                                                  Basic Batch Update
+    //                                                                  ==================
+    /**
+     * Batch insert the list. This method use 'Batch Update' of java.sql.PreparedStatement.
+     * @param announcementBodyList The list of the entity. (NotNull)
+     * @return The array of inserted count.
+     */
+    public int[] batchInsert(List<AnnouncementBody> announcementBodyList) {
+        assertObjectNotNull("announcementBodyList", announcementBodyList);
+        return delegateInsertList(announcementBodyList);
+    }
+
+    /**
+     * Batch update the list. All columns are update target. {NOT modified only} <br />
+     * This method use 'Batch Update' of java.sql.PreparedStatement.
+     * @param announcementBodyList The list of the entity. (NotNull)
+     * @return The array of updated count.
+     * @exception jp.sf.pal.announcement.db.allcommon.exception.EntityAlreadyDeletedException When the entity has already been deleted.
+     */
+    public int[] batchUpdate(List<AnnouncementBody> announcementBodyList) {
+        assertObjectNotNull("announcementBodyList", announcementBodyList);
+        return delegateUpdateList(announcementBodyList);
+    }
+
+    /**
+     * Batch delete the list. <br />
+     * This method use 'Batch Update' of java.sql.PreparedStatement.
+     * @param announcementBodyList The list of the entity. (NotNull)
+     * @return The array of deleted count.
+     * @exception jp.sf.pal.announcement.db.allcommon.exception.EntityAlreadyDeletedException When the entity has already been deleted.
+     */
+    public int[] batchDelete(List<AnnouncementBody> announcementBodyList) {
+        assertObjectNotNull("announcementBodyList", announcementBodyList);
+        return delegateDeleteList(announcementBodyList);
+    }
+
+    // ===================================================================================
+    //                                                                      Various Update
+    //                                                                      ==============
+
+    // ===================================================================================
+    //                                                                      Various Delete
+    //                                                                      ==============
+    /**
+     * Query delete the several entities.
+     * @param cb Condition-bean. (NotNull)
+     * @return The deleted count.
+     */
+    public int queryDelete(AnnouncementBodyCB cb) {
+        assertConditionBeanNotNull(cb);
+        return getMyDao().deleteByQuery(cb);
+    }
+
+    // ===================================================================================
+    //                                                                     Delegate Method
+    //                                                                     ===============
+    // -----------------------------------------------------
+    //                                                Select
+    //                                                ------
+    protected int delegateGetCountAll() {
+        return getMyDao().getCountAll();
+    }
+
+    protected List<AnnouncementBody> delegateGetListAll() {
+        return getMyDao().getListAll();
+    }
+
+    protected AnnouncementBody delegateGetEntity(Integer id) {
+        return getMyDao().getEntity(id);
+    }
+
+    protected int delegateSelectCount(AnnouncementBodyCB cb) {
+        assertConditionBeanNotNull(cb);
+        return getMyDao().selectCount(cb);
+    }
+
+    protected AnnouncementBody delegateSelectEntity(AnnouncementBodyCB cb) {
+        assertConditionBeanNotNull(cb);
+        return getMyDao().selectEntity(cb);
+    }
+
+    protected List<AnnouncementBody> delegateSelectList(AnnouncementBodyCB cb) {
+        assertConditionBeanNotNull(cb);
+        return getMyDao().selectList(cb);
+    }
+
+    // -----------------------------------------------------
+    //                                                Update
+    //                                                ------
+    protected int delegateInsert(AnnouncementBody entity) {
+        if (!processBeforeInsert(entity)) {
+            return 1;
+        }
+        return getMyDao().insert(entity);
+    }
+
+    protected int delegateUpdate(AnnouncementBody entity) {
+        if (!processBeforeUpdate(entity)) {
+            return 1;
+        }
+        return getMyDao().updateModifiedOnly(entity);
+    }
+
+    protected int delegateDelete(AnnouncementBody entity) {
+        if (!processBeforeDelete(entity)) {
+            return 1;
+        }
+        return getMyDao().delete(entity);
+    }
+
+    protected int[] delegateInsertList(List<AnnouncementBody> entityList) {
+        assertObjectNotNull("announcementBodyList", entityList);
+        return getMyDao().insertList(
+                helpFilterBeforeInsertInternally(entityList));
+    }
+
+    protected int[] delegateUpdateList(List<AnnouncementBody> entityList) {
+        assertObjectNotNull("announcementBodyList", entityList);
+        return getMyDao().updateList(
+                helpFilterBeforeUpdateInternally(entityList));
+    }
+
+    protected int[] delegateDeleteList(List<AnnouncementBody> entityList) {
+        assertObjectNotNull("announcementBodyList", entityList);
+        return getMyDao().deleteList(
+                helpFilterBeforeDeleteInternally(entityList));
+    }
+
+    // ===================================================================================
+    //                                                                           Hierarchy
+    //                                                                           =========
+    /**
+     * Create the basic request of hierarchy of AnnouncementBody..
+     * @param sourceList The list of source. (NotNull)
+     * @param <SOURCE> The type of source.
+     * @return Hierarchy request of AnnouncementBody. (NotNull)
+     */
+    public <SOURCE> HierarchyBasicRequest<AnnouncementBody, AnnouncementBodyDbm.AnnouncementBodyRelationTrace> createHierarchyBasicRequest(
+            List<SOURCE> sourceList) {
+        final HierarchyBasicRequest<AnnouncementBody, AnnouncementBodyDbm.AnnouncementBodyRelationTrace> request = new HierarchyBasicRequest<AnnouncementBody, AnnouncementBodyDbm.AnnouncementBodyRelationTrace>(
+                AnnouncementBody.class);
+        request.registerSourceList(sourceList);
+        return request;
+    }
+
+    /**
+     * Arrange hierarchy.
+     * @param request Hierarchy request of AnnouncementBody. (NotNull)
+     * @return The list of AnnouncementBody. (NotNull)
+     */
+    public List<AnnouncementBody> arrangeHierarchy(
+            HierarchyRequest<AnnouncementBody> request) {
+        return new HierarchyArranger<AnnouncementBody>()
+                .arrangeHierarchy(request);
+    }
+
+    // ===================================================================================
+    //                                                                          CBSetupper
+    //                                                                          ==========
+    public static interface CBSetupper extends
+            ConditionBeanSetupper<AnnouncementBodyCB> {
+        public void setup(AnnouncementBodyCB cb);
+    }
+
+    // ===================================================================================
+    //                                                                Optimistic Lock Info
+    //                                                                ====================
+    @Override
+    protected boolean hasVersionNoValue(Entity entity) {
+        return false;
+    }
+
+    @Override
+    protected boolean hasUpdateDateValue(Entity entity) {
+        return false;
+    }
+
+    // ===================================================================================
+    //                                                                              Helper
+    //                                                                              ======
+    protected AnnouncementBody downcast(Entity entity) {
+        return helpDowncastInternally(entity, AnnouncementBody.class);
+    }
+}


Property changes on: announcement/trunk/src/main/java/jp/sf/pal/announcement/db/bsbhv/BsAnnouncementBodyBhv.java
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/java/jp/sf/pal/announcement/db/bsdao/BsAnnouncementBodyDao.java
===================================================================
--- announcement/trunk/src/main/java/jp/sf/pal/announcement/db/bsdao/BsAnnouncementBodyDao.java	                        (rev 0)
+++ announcement/trunk/src/main/java/jp/sf/pal/announcement/db/bsdao/BsAnnouncementBodyDao.java	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,51 @@
+package jp.sf.pal.announcement.db.bsdao;
+
+import java.util.List;
+
+import jp.sf.pal.announcement.db.cbean.AnnouncementBodyCB;
+import jp.sf.pal.announcement.db.exentity.AnnouncementBody;
+
+/**
+ * The dao interface of ANNOUNCEMENT_BODY.
+ * @author DBFlute(AutoGenerator)
+ */
+ @ SuppressWarnings("unchecked")
+public interface BsAnnouncementBodyDao extends
+        jp.sf.pal.announcement.db.allcommon.DaoWritable {
+
+    public Class BEAN = AnnouncementBody.class;// For S2Dao
+
+    public static final String getCountAll_SQL = "select count(*) from ANNOUNCEMENT_BODY";
+
+    public int getCountAll();
+
+    public static final String getListAll_SQL = "select ID, CONTENT from ANNOUNCEMENT_BODY";
+
+    public java.util.List<AnnouncementBody> getListAll();
+
+    public static final String getEntity_SQL = "select ID, CONTENT from ANNOUNCEMENT_BODY where ANNOUNCEMENT_BODY.ID = /*id*/null";
+
+    public static final String getEntity_ARGS = "id";
+
+    public AnnouncementBody getEntity(Integer id);
+
+    public int selectCount(AnnouncementBodyCB cb);
+
+    public AnnouncementBody selectEntity(AnnouncementBodyCB cb);
+
+    public List<AnnouncementBody> selectList(AnnouncementBodyCB cb);
+
+    public int insert(AnnouncementBody entity);
+
+    public int updateModifiedOnly(AnnouncementBody entity);
+
+    public int delete(AnnouncementBody entity);
+
+    public int[] insertList(List<AnnouncementBody> entityList);
+
+    public int[] updateList(List<AnnouncementBody> entityList);
+
+    public int[] deleteList(List<AnnouncementBody> entityList);
+
+    public int deleteByQuery(AnnouncementBodyCB cb);
+}


Property changes on: announcement/trunk/src/main/java/jp/sf/pal/announcement/db/bsdao/BsAnnouncementBodyDao.java
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/java/jp/sf/pal/announcement/db/bsdao/BsAnnouncementDao.java
===================================================================
--- announcement/trunk/src/main/java/jp/sf/pal/announcement/db/bsdao/BsAnnouncementDao.java	                        (rev 0)
+++ announcement/trunk/src/main/java/jp/sf/pal/announcement/db/bsdao/BsAnnouncementDao.java	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,51 @@
+package jp.sf.pal.announcement.db.bsdao;
+
+import java.util.List;
+
+import jp.sf.pal.announcement.db.cbean.AnnouncementCB;
+import jp.sf.pal.announcement.db.exentity.Announcement;
+
+/**
+ * The dao interface of ANNOUNCEMENT.
+ * @author DBFlute(AutoGenerator)
+ */
+ @ SuppressWarnings("unchecked")
+public interface BsAnnouncementDao extends
+        jp.sf.pal.announcement.db.allcommon.DaoWritable {
+
+    public Class BEAN = Announcement.class;// For S2Dao
+
+    public static final String getCountAll_SQL = "select count(*) from ANNOUNCEMENT";
+
+    public int getCountAll();
+
+    public static final String getListAll_SQL = "select ID, SCOPE, ROLE, START_DATE, END_DATE, TITLE, SORT_ORDER, TIMESTAMP from ANNOUNCEMENT";
+
+    public java.util.List<Announcement> getListAll();
+
+    public static final String getEntity_SQL = "select ID, SCOPE, ROLE, START_DATE, END_DATE, TITLE, SORT_ORDER, TIMESTAMP from ANNOUNCEMENT where ANNOUNCEMENT.ID = /*id*/null";
+
+    public static final String getEntity_ARGS = "id";
+
+    public Announcement getEntity(Integer id);
+
+    public int selectCount(AnnouncementCB cb);
+
+    public Announcement selectEntity(AnnouncementCB cb);
+
+    public List<Announcement> selectList(AnnouncementCB cb);
+
+    public int insert(Announcement entity);
+
+    public int updateModifiedOnly(Announcement entity);
+
+    public int delete(Announcement entity);
+
+    public int[] insertList(List<Announcement> entityList);
+
+    public int[] updateList(List<Announcement> entityList);
+
+    public int[] deleteList(List<Announcement> entityList);
+
+    public int deleteByQuery(AnnouncementCB cb);
+}


Property changes on: announcement/trunk/src/main/java/jp/sf/pal/announcement/db/bsdao/BsAnnouncementDao.java
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/java/jp/sf/pal/announcement/db/bsentity/BsAnnouncement.java
===================================================================
--- announcement/trunk/src/main/java/jp/sf/pal/announcement/db/bsentity/BsAnnouncement.java	                        (rev 0)
+++ announcement/trunk/src/main/java/jp/sf/pal/announcement/db/bsentity/BsAnnouncement.java	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,430 @@
+package jp.sf.pal.announcement.db.bsentity;
+
+import java.util.Set;
+
+import jp.sf.pal.announcement.db.allcommon.Entity;
+import jp.sf.pal.announcement.db.allcommon.dbmeta.DBMeta;
+import jp.sf.pal.announcement.db.allcommon.dbmeta.DBMetaInstanceHandler;
+import jp.sf.pal.announcement.db.exentity.AnnouncementBody;
+
+/**
+ * The entity of ANNOUNCEMENT(TABLE).
+ * <pre>
+ * [primary-key]
+ *     ID
+ * 
+ * [column]
+ *     ID, SCOPE, ROLE, START_DATE, END_DATE, TITLE, SORT_ORDER, TIMESTAMP
+ * 
+ * [sequence]
+ *     
+ * 
+ * [identity]
+ *     ID
+ * 
+ * [version-no]
+ *     
+ * 
+ * [foreign-table]
+ *     
+ * 
+ * [referrer-table]
+ *     ANNOUNCEMENT_BODY
+ * 
+ * [foreign-property]
+ *     announcementBodyAsOne
+ * 
+ * [referrer-property]
+ *     
+ * </pre>
+ * @author DBFlute(AutoGenerator)
+ */
+ @ SuppressWarnings("unchecked")
+public abstract class BsAnnouncement implements Entity, java.io.Serializable {
+
+    // ===================================================================================
+    //                                                                          Definition
+    //                                                                          ==========
+    /** Serial version UID. (Default) */
+    private static final long serialVersionUID = 1L;
+
+    /** TABLE-Annotation for S2Dao. The value is ANNOUNCEMENT. */
+    public static final String TABLE = "ANNOUNCEMENT";
+
+    /** ID-Annotation */
+    public static final String id_ID = "identity";
+
+    // ===================================================================================
+    //                                                                           Attribute
+    //                                                                           =========
+    // -----------------------------------------------------
+    //                                                Column
+    //                                                ------
+    /** The attribute of the column 'ID'. {PK : INC : int : NotNull} */
+    protected Integer _id;
+
+    /** The attribute of the column 'SCOPE'. {varchar(20) : NotNull} */
+    protected String _scope;
+
+    /** The attribute of the column 'ROLE'. {varchar(100)} */
+    protected String _role;
+
+    /** The attribute of the column 'START_DATE'. {datetime} */
+    protected java.sql.Timestamp _startDate;
+
+    /** The attribute of the column 'END_DATE'. {datetime} */
+    protected java.sql.Timestamp _endDate;
+
+    /** The attribute of the column 'TITLE'. {varchar(100) : NotNull} */
+    protected String _title;
+
+    /** The attribute of the column 'SORT_ORDER'. {int : NotNull} */
+    protected Integer _sortOrder;
+
+    /** The attribute of the column 'TIMESTAMP'. {timestamp : NotNull : Default=[CURRENT_TIMESTAMP]} */
+    protected java.sql.Timestamp _timestamp;
+
+    // -----------------------------------------------------
+    //                                              Internal
+    //                                              --------
+    /** The attribute of entity modified properties. (for S2Dao) */
+    protected EntityModifiedProperties _modifiedProperties = newEntityModifiedProperties();
+
+    // ===================================================================================
+    //                                                                         Constructor
+    //                                                                         ===========
+    public BsAnnouncement() {
+    }
+
+    // ===================================================================================
+    //                                                                          Table Name
+    //                                                                          ==========
+    public String getTableDbName() {
+        return "ANNOUNCEMENT";
+    }
+
+    public String getTablePropertyName() {// as JavaBeansRule
+        return "announcement";
+    }
+
+    // ===================================================================================
+    //                                                                              DBMeta
+    //                                                                              ======
+    public DBMeta getDBMeta() {
+        return DBMetaInstanceHandler.findDBMeta(getTableDbName());
+    }
+
+    // ===================================================================================
+    //                                                          Classification Classifying
+    //                                                          ==========================
+
+    // ===================================================================================
+    //                                                        Classification Determination
+    //                                                        ============================
+
+    // ===================================================================================
+    //                                                           Classification Name/Alias
+    //                                                           =========================
+
+    // ===================================================================================
+    //                                                                    Foreign Property
+    //                                                                    ================
+    // /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+    //   Foreign Property = [announcementBodyAsOne]
+    // * * * * * * * * */
+    public static final int announcementBodyAsOne_RELNO = 0;
+
+    public static final String announcementBodyAsOne_RELKEYS = "ID:ID";
+
+    /** the entity of foreign property(referrer-as-one) 'announcementBodyAsOne'. */
+    protected AnnouncementBody _childrenannouncementBodyAsOne;
+
+    /**
+     * Get the entity of foreign property(referrer-as-one) 'announcementBodyAsOne'. {without lazy-load} <br />
+     * @return the entity of foreign property(referrer-as-one) 'announcementBodyAsOne'. (Nullable: If the foreign key does not have 'NotNull' constraint, please check null.)
+     */
+    public AnnouncementBody getAnnouncementBodyAsOne() {
+        return _childrenannouncementBodyAsOne;
+    }
+
+    /**
+     * Set the entity of foreign property(referrer-as-one) 'announcementBodyAsOne'.
+     * @param announcementBodyAsOne The entity of foreign property(referrer-as-one) 'announcementBodyAsOne'. (Nullable)
+     */
+    public void setAnnouncementBodyAsOne(AnnouncementBody announcementBodyAsOne) {
+        _childrenannouncementBodyAsOne = announcementBodyAsOne;
+    }
+
+    // ===================================================================================
+    //                                                                   Referrer Property
+    //                                                                   =================
+
+    // ===================================================================================
+    //                                                                       Determination
+    //                                                                       =============
+    public boolean hasPrimaryKeyValue() {
+        if (_id == null) {
+            return false;
+        }
+        return true;
+    }
+
+    // ===================================================================================
+    //                                                                 Modified Properties
+    //                                                                 ===================
+    public Set<String> getModifiedPropertyNames() {
+        return _modifiedProperties.getPropertyNames();
+    }
+
+    protected EntityModifiedProperties newEntityModifiedProperties() {
+        return new EntityModifiedProperties();
+    }
+
+    public void clearModifiedPropertyNames() {
+        _modifiedProperties.clear();
+    }
+
+    public boolean hasModification() {
+        return !_modifiedProperties.isEmpty();
+    }
+
+    // ===================================================================================
+    //                                                                      Basic Override
+    //                                                                      ==============
+    /**
+     * If the primary-key of the other is same as this one, returns true.
+     * @param other Other entity.
+     * @return Comparing result.
+     */
+    public boolean equals(Object other) {
+        if (other == null || !(other instanceof BsAnnouncement)) {
+            return false;
+        }
+        final BsAnnouncement otherEntity = (BsAnnouncement) other;
+        if (!helpComparingValue(getId(), otherEntity.getId())) {
+            return false;
+        }
+        return true;
+    }
+
+    protected boolean helpComparingValue(Object value1, Object value2) {
+        if (value1 == null && value2 == null) {
+            return true;
+        }
+        return value1 != null && value2 != null && value1.equals(value2);
+    }
+
+    /**
+     * Calculates hash-code from primary-key.
+     * @return Hash-code from primary-keys.
+     */
+    public int hashCode() {
+        int result = 0;
+        if (this.getId() != null) {
+            result = result + getId().hashCode();
+        }
+        return result;
+    }
+
+    /**
+     * @return The view string of columns. (NotNull)
+     */
+    public String toString() {
+        final String delimiter = ",";
+        final StringBuilder sb = new StringBuilder();
+
+        sb.append(delimiter).append(getId());
+        sb.append(delimiter).append(getScope());
+        sb.append(delimiter).append(getRole());
+        sb.append(delimiter).append(getStartDate());
+        sb.append(delimiter).append(getEndDate());
+        sb.append(delimiter).append(getTitle());
+        sb.append(delimiter).append(getSortOrder());
+        sb.append(delimiter).append(getTimestamp());
+
+        sb.delete(0, delimiter.length());
+        sb.insert(0, "{").append("}");
+        return sb.toString();
+    }
+
+    // ===================================================================================
+    //                                                                            Accessor
+    //                                                                            ========
+
+    /** The column annotation for S2Dao. {PK : INC : int : NotNull} */
+    public static final String id_COLUMN = "ID";
+
+    /**
+     * Get the value of the column 'ID'. <br />
+     * {PK : INC : int : NotNull}
+     * @return The value of the column 'ID'. (Nullable)
+     */
+    public Integer getId() {
+        return _id;
+    }
+
+    /**
+     * Set the value of the column 'ID'. <br />
+     * {PK : INC : int : NotNull}
+     * @param id The value of the column 'ID'. (Nullable)
+     */
+    public void setId(Integer id) {
+        _modifiedProperties.addPropertyName("id");
+        this._id = id;
+    }
+
+    /** The column annotation for S2Dao. {varchar(20) : NotNull} */
+    public static final String scope_COLUMN = "SCOPE";
+
+    /**
+     * Get the value of the column 'SCOPE'. <br />
+     * {varchar(20) : NotNull}
+     * @return The value of the column 'SCOPE'. (Nullable)
+     */
+    public String getScope() {
+        return _scope;
+    }
+
+    /**
+     * Set the value of the column 'SCOPE'. <br />
+     * {varchar(20) : NotNull}
+     * @param scope The value of the column 'SCOPE'. (Nullable)
+     */
+    public void setScope(String scope) {
+        _modifiedProperties.addPropertyName("scope");
+        this._scope = scope;
+    }
+
+    /** The column annotation for S2Dao. {varchar(100)} */
+    public static final String role_COLUMN = "ROLE";
+
+    /**
+     * Get the value of the column 'ROLE'. <br />
+     * {varchar(100)}
+     * @return The value of the column 'ROLE'. (Nullable)
+     */
+    public String getRole() {
+        return _role;
+    }
+
+    /**
+     * Set the value of the column 'ROLE'. <br />
+     * {varchar(100)}
+     * @param role The value of the column 'ROLE'. (Nullable)
+     */
+    public void setRole(String role) {
+        _modifiedProperties.addPropertyName("role");
+        this._role = role;
+    }
+
+    /** The column annotation for S2Dao. {datetime} */
+    public static final String startDate_COLUMN = "START_DATE";
+
+    /**
+     * Get the value of the column 'START_DATE'. <br />
+     * {datetime}
+     * @return The value of the column 'START_DATE'. (Nullable)
+     */
+    public java.sql.Timestamp getStartDate() {
+        return _startDate;
+    }
+
+    /**
+     * Set the value of the column 'START_DATE'. <br />
+     * {datetime}
+     * @param startDate The value of the column 'START_DATE'. (Nullable)
+     */
+    public void setStartDate(java.sql.Timestamp startDate) {
+        _modifiedProperties.addPropertyName("startDate");
+        this._startDate = startDate;
+    }
+
+    /** The column annotation for S2Dao. {datetime} */
+    public static final String endDate_COLUMN = "END_DATE";
+
+    /**
+     * Get the value of the column 'END_DATE'. <br />
+     * {datetime}
+     * @return The value of the column 'END_DATE'. (Nullable)
+     */
+    public java.sql.Timestamp getEndDate() {
+        return _endDate;
+    }
+
+    /**
+     * Set the value of the column 'END_DATE'. <br />
+     * {datetime}
+     * @param endDate The value of the column 'END_DATE'. (Nullable)
+     */
+    public void setEndDate(java.sql.Timestamp endDate) {
+        _modifiedProperties.addPropertyName("endDate");
+        this._endDate = endDate;
+    }
+
+    /** The column annotation for S2Dao. {varchar(100) : NotNull} */
+    public static final String title_COLUMN = "TITLE";
+
+    /**
+     * Get the value of the column 'TITLE'. <br />
+     * {varchar(100) : NotNull}
+     * @return The value of the column 'TITLE'. (Nullable)
+     */
+    public String getTitle() {
+        return _title;
+    }
+
+    /**
+     * Set the value of the column 'TITLE'. <br />
+     * {varchar(100) : NotNull}
+     * @param title The value of the column 'TITLE'. (Nullable)
+     */
+    public void setTitle(String title) {
+        _modifiedProperties.addPropertyName("title");
+        this._title = title;
+    }
+
+    /** The column annotation for S2Dao. {int : NotNull} */
+    public static final String sortOrder_COLUMN = "SORT_ORDER";
+
+    /**
+     * Get the value of the column 'SORT_ORDER'. <br />
+     * {int : NotNull}
+     * @return The value of the column 'SORT_ORDER'. (Nullable)
+     */
+    public Integer getSortOrder() {
+        return _sortOrder;
+    }
+
+    /**
+     * Set the value of the column 'SORT_ORDER'. <br />
+     * {int : NotNull}
+     * @param sortOrder The value of the column 'SORT_ORDER'. (Nullable)
+     */
+    public void setSortOrder(Integer sortOrder) {
+        _modifiedProperties.addPropertyName("sortOrder");
+        this._sortOrder = sortOrder;
+    }
+
+    /** The column annotation for S2Dao. {timestamp : NotNull : Default=[CURRENT_TIMESTAMP]} */
+    public static final String timestamp_COLUMN = "TIMESTAMP";
+
+    /**
+     * Get the value of the column 'TIMESTAMP'. <br />
+     * {timestamp : NotNull : Default=[CURRENT_TIMESTAMP]}
+     * @return The value of the column 'TIMESTAMP'. (Nullable)
+     */
+    public java.sql.Timestamp getTimestamp() {
+        return _timestamp;
+    }
+
+    /**
+     * Set the value of the column 'TIMESTAMP'. <br />
+     * {timestamp : NotNull : Default=[CURRENT_TIMESTAMP]}
+     * @param timestamp The value of the column 'TIMESTAMP'. (Nullable)
+     */
+    public void setTimestamp(java.sql.Timestamp timestamp) {
+        _modifiedProperties.addPropertyName("timestamp");
+        this._timestamp = timestamp;
+    }
+
+}


Property changes on: announcement/trunk/src/main/java/jp/sf/pal/announcement/db/bsentity/BsAnnouncement.java
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/java/jp/sf/pal/announcement/db/bsentity/BsAnnouncementBody.java
===================================================================
--- announcement/trunk/src/main/java/jp/sf/pal/announcement/db/bsentity/BsAnnouncementBody.java	                        (rev 0)
+++ announcement/trunk/src/main/java/jp/sf/pal/announcement/db/bsentity/BsAnnouncementBody.java	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,272 @@
+package jp.sf.pal.announcement.db.bsentity;
+
+import java.util.Set;
+
+import jp.sf.pal.announcement.db.allcommon.Entity;
+import jp.sf.pal.announcement.db.allcommon.dbmeta.DBMeta;
+import jp.sf.pal.announcement.db.allcommon.dbmeta.DBMetaInstanceHandler;
+import jp.sf.pal.announcement.db.exentity.Announcement;
+
+/**
+ * The entity of ANNOUNCEMENT_BODY(TABLE).
+ * <pre>
+ * [primary-key]
+ *     ID
+ * 
+ * [column]
+ *     ID, CONTENT
+ * 
+ * [sequence]
+ *     
+ * 
+ * [identity]
+ *     ${table.identityColumnName}
+ * 
+ * [version-no]
+ *     
+ * 
+ * [foreign-table]
+ *     ANNOUNCEMENT
+ * 
+ * [referrer-table]
+ *     
+ * 
+ * [foreign-property]
+ *     announcement
+ * 
+ * [referrer-property]
+ *     
+ * </pre>
+ * @author DBFlute(AutoGenerator)
+ */
+ @ SuppressWarnings("unchecked")
+public abstract class BsAnnouncementBody implements Entity,
+        java.io.Serializable {
+
+    // ===================================================================================
+    //                                                                          Definition
+    //                                                                          ==========
+    /** Serial version UID. (Default) */
+    private static final long serialVersionUID = 1L;
+
+    /** TABLE-Annotation for S2Dao. The value is ANNOUNCEMENT_BODY. */
+    public static final String TABLE = "ANNOUNCEMENT_BODY";
+
+    // ===================================================================================
+    //                                                                           Attribute
+    //                                                                           =========
+    // -----------------------------------------------------
+    //                                                Column
+    //                                                ------
+    /** The attribute of the column 'ID'. {PK : int : NotNull : FK to ANNOUNCEMENT} */
+    protected Integer _id;
+
+    /** The attribute of the column 'CONTENT'. {text(65535) : NotNull} */
+    protected String _content;
+
+    // -----------------------------------------------------
+    //                                              Internal
+    //                                              --------
+    /** The attribute of entity modified properties. (for S2Dao) */
+    protected EntityModifiedProperties _modifiedProperties = newEntityModifiedProperties();
+
+    // ===================================================================================
+    //                                                                         Constructor
+    //                                                                         ===========
+    public BsAnnouncementBody() {
+    }
+
+    // ===================================================================================
+    //                                                                          Table Name
+    //                                                                          ==========
+    public String getTableDbName() {
+        return "ANNOUNCEMENT_BODY";
+    }
+
+    public String getTablePropertyName() {// as JavaBeansRule
+        return "announcementBody";
+    }
+
+    // ===================================================================================
+    //                                                                              DBMeta
+    //                                                                              ======
+    public DBMeta getDBMeta() {
+        return DBMetaInstanceHandler.findDBMeta(getTableDbName());
+    }
+
+    // ===================================================================================
+    //                                                          Classification Classifying
+    //                                                          ==========================
+
+    // ===================================================================================
+    //                                                        Classification Determination
+    //                                                        ============================
+
+    // ===================================================================================
+    //                                                           Classification Name/Alias
+    //                                                           =========================
+
+    // ===================================================================================
+    //                                                                    Foreign Property
+    //                                                                    ================
+    // /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+    //   Foreign Property = [announcement]
+    // * * * * * * * * */
+    public static final int announcement_RELNO = 0;
+
+    public static final String announcement_RELKEYS = "ID:ID";
+
+    /** The entity of foreign property 'announcement'. */
+    protected Announcement _parentAnnouncement;
+
+    /**
+     * Get the entity of foreign property 'announcement'. {without lazy-load}
+     * @return The entity of foreign property 'announcement'. (Nullable: If the foreign key does not have 'NotNull' constraint, please check null.)
+     */
+    public Announcement getAnnouncement() {
+        return _parentAnnouncement;
+    }
+
+    /**
+     * Set the entity of foreign property 'announcement'.
+     * @param announcement The entity of foreign property 'announcement'. (Nullable)
+     */
+    public void setAnnouncement(Announcement announcement) {
+        _parentAnnouncement = announcement;
+    }
+
+    // ===================================================================================
+    //                                                                   Referrer Property
+    //                                                                   =================
+
+    // ===================================================================================
+    //                                                                       Determination
+    //                                                                       =============
+    public boolean hasPrimaryKeyValue() {
+        if (_id == null) {
+            return false;
+        }
+        return true;
+    }
+
+    // ===================================================================================
+    //                                                                 Modified Properties
+    //                                                                 ===================
+    public Set<String> getModifiedPropertyNames() {
+        return _modifiedProperties.getPropertyNames();
+    }
+
+    protected EntityModifiedProperties newEntityModifiedProperties() {
+        return new EntityModifiedProperties();
+    }
+
+    public void clearModifiedPropertyNames() {
+        _modifiedProperties.clear();
+    }
+
+    public boolean hasModification() {
+        return !_modifiedProperties.isEmpty();
+    }
+
+    // ===================================================================================
+    //                                                                      Basic Override
+    //                                                                      ==============
+    /**
+     * If the primary-key of the other is same as this one, returns true.
+     * @param other Other entity.
+     * @return Comparing result.
+     */
+    public boolean equals(Object other) {
+        if (other == null || !(other instanceof BsAnnouncementBody)) {
+            return false;
+        }
+        final BsAnnouncementBody otherEntity = (BsAnnouncementBody) other;
+        if (!helpComparingValue(getId(), otherEntity.getId())) {
+            return false;
+        }
+        return true;
+    }
+
+    protected boolean helpComparingValue(Object value1, Object value2) {
+        if (value1 == null && value2 == null) {
+            return true;
+        }
+        return value1 != null && value2 != null && value1.equals(value2);
+    }
+
+    /**
+     * Calculates hash-code from primary-key.
+     * @return Hash-code from primary-keys.
+     */
+    public int hashCode() {
+        int result = 0;
+        if (this.getId() != null) {
+            result = result + getId().hashCode();
+        }
+        return result;
+    }
+
+    /**
+     * @return The view string of columns. (NotNull)
+     */
+    public String toString() {
+        final String delimiter = ",";
+        final StringBuilder sb = new StringBuilder();
+
+        sb.append(delimiter).append(getId());
+        sb.append(delimiter).append(getContent());
+
+        sb.delete(0, delimiter.length());
+        sb.insert(0, "{").append("}");
+        return sb.toString();
+    }
+
+    // ===================================================================================
+    //                                                                            Accessor
+    //                                                                            ========
+
+    /** The column annotation for S2Dao. {PK : int : NotNull : FK to ANNOUNCEMENT} */
+    public static final String id_COLUMN = "ID";
+
+    /**
+     * Get the value of the column 'ID'. <br />
+     * {PK : int : NotNull : FK to ANNOUNCEMENT}
+     * @return The value of the column 'ID'. (Nullable)
+     */
+    public Integer getId() {
+        return _id;
+    }
+
+    /**
+     * Set the value of the column 'ID'. <br />
+     * {PK : int : NotNull : FK to ANNOUNCEMENT}
+     * @param id The value of the column 'ID'. (Nullable)
+     */
+    public void setId(Integer id) {
+        _modifiedProperties.addPropertyName("id");
+        this._id = id;
+    }
+
+    /** The column annotation for S2Dao. {text(65535) : NotNull} */
+    public static final String content_COLUMN = "CONTENT";
+
+    /**
+     * Get the value of the column 'CONTENT'. <br />
+     * {text(65535) : NotNull}
+     * @return The value of the column 'CONTENT'. (Nullable)
+     */
+    public String getContent() {
+        return _content;
+    }
+
+    /**
+     * Set the value of the column 'CONTENT'. <br />
+     * {text(65535) : NotNull}
+     * @param content The value of the column 'CONTENT'. (Nullable)
+     */
+    public void setContent(String content) {
+        _modifiedProperties.addPropertyName("content");
+        this._content = content;
+    }
+
+}


Property changes on: announcement/trunk/src/main/java/jp/sf/pal/announcement/db/bsentity/BsAnnouncementBody.java
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/java/jp/sf/pal/announcement/db/bsentity/dbmeta/AnnouncementBodyDbm.java
===================================================================
--- announcement/trunk/src/main/java/jp/sf/pal/announcement/db/bsentity/dbmeta/AnnouncementBodyDbm.java	                        (rev 0)
+++ announcement/trunk/src/main/java/jp/sf/pal/announcement/db/bsentity/dbmeta/AnnouncementBodyDbm.java	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,573 @@
+package jp.sf.pal.announcement.db.bsentity.dbmeta;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.LinkedHashMap;
+import java.util.List;
+import java.util.Map;
+
+import jp.sf.pal.announcement.db.allcommon.Entity;
+import jp.sf.pal.announcement.db.allcommon.dbmeta.AbstractDBMeta;
+import jp.sf.pal.announcement.db.allcommon.dbmeta.info.ColumnInfo;
+import jp.sf.pal.announcement.db.allcommon.dbmeta.info.ForeignInfo;
+import jp.sf.pal.announcement.db.allcommon.dbmeta.info.RelationInfo;
+import jp.sf.pal.announcement.db.allcommon.dbmeta.info.UniqueInfo;
+import jp.sf.pal.announcement.db.exentity.AnnouncementBody;
+
+/**
+ * The DB meta of ANNOUNCEMENT_BODY. (Singleton)
+ * <pre>
+ * [primary-key]
+ *     ID
+ * 
+ * [column]
+ *     ID, CONTENT
+ * 
+ * [sequence]
+ *     
+ * 
+ * [identity]
+ *     ${table.identityColumnName}
+ * 
+ * [version-no]
+ *     
+ * 
+ * [foreign-table]
+ *     ANNOUNCEMENT
+ * 
+ * [referrer-table]
+ *     
+ * 
+ * [foreign-property]
+ *     announcement
+ * 
+ * [referrer-property]
+ *     
+ * </pre>
+ * @author DBFlute(AutoGenerator)
+ */
+ @ SuppressWarnings("unchecked")
+public class AnnouncementBodyDbm extends AbstractDBMeta {
+
+    // ===================================================================================
+    //                                                                          Definition
+    //                                                                          ==========
+    protected static final Class<AnnouncementBody> ENTITY_TYPE = AnnouncementBody.class;
+
+    private static final AnnouncementBodyDbm _instance = new AnnouncementBodyDbm();
+
+    // ===================================================================================
+    //                                                                         Constructor
+    //                                                                         ===========
+    private AnnouncementBodyDbm() {
+    }
+
+    // ===================================================================================
+    //                                                                           Singleton
+    //                                                                           =========
+    public static AnnouncementBodyDbm getInstance() {
+        return _instance;
+    }
+
+    // ===================================================================================
+    //                                                                     Name Definition
+    //                                                                     ===============
+    // -----------------------------------------------------
+    //                                                 Table
+    //                                                 -----
+    /** Table DB name. */
+    public static final String TABLE_DB_NAME = "ANNOUNCEMENT_BODY";
+
+    /** Table property name(JavaBeansRule). */
+    public static final String TABLE_PROPERTY_NAME = "announcementBody";
+
+    // -----------------------------------------------------
+    //                                        Column DB Name
+    //                                        --------------
+    /** DB name of ID. {PK : int : NotNull : FK to ANNOUNCEMENT} */
+    public static final String DB_NAME_ID = "ID";
+
+    /** DB name of CONTENT. {text(65535) : NotNull} */
+    public static final String DB_NAME_CONTENT = "CONTENT";
+
+    // -----------------------------------------------------
+    //                                  Column Property Name
+    //                                  (JavaBeansRule)
+    //                                  --------------------
+    /** Property name(JavaBeansRule) of id. {PK : int : NotNull : FK to ANNOUNCEMENT} */
+    public static final String PROPERTY_NAME_id = "id";
+
+    /** Property name(JavaBeansRule) of content. {text(65535) : NotNull} */
+    public static final String PROPERTY_NAME_content = "content";
+
+    // -----------------------------------------------------
+    //                                          Foreign Name
+    //                                          ------------
+    /** The foreign property name(JavaBeansRule) of announcement. */
+    public static final String FOREIGN_PROPERTY_NAME_announcement = "announcement";
+
+    // -----------------------------------------------------
+    //                                         Referrer Name
+    //                                         -------------
+    // -----------------------------------------------------
+    //                                              Name Map
+    //                                              --------
+    /** The map of {DB name : property name} key-to-lower. */
+    private static Map<String, String> _dbNamePropertyNameKeyToLowerMap;
+
+    protected static Map<String, String> createDbNamePropertyNameKeyToLowerMap() {
+        if (_dbNamePropertyNameKeyToLowerMap != null) {
+            return _dbNamePropertyNameKeyToLowerMap;
+        }
+        final Map<String, String> map = new LinkedHashMap<String, String>();
+        map.put(TABLE_DB_NAME.toLowerCase(), TABLE_PROPERTY_NAME);
+
+        map.put(DB_NAME_ID.toLowerCase(), PROPERTY_NAME_id);
+        map.put(DB_NAME_CONTENT.toLowerCase(), PROPERTY_NAME_content);
+
+        _dbNamePropertyNameKeyToLowerMap = Collections.unmodifiableMap(map);
+        return _dbNamePropertyNameKeyToLowerMap;
+    }
+
+    /** The map of {property name : DB name} key-to-lower. */
+    private static Map<String, String> _propertyNameDbNameKeyToLowerMap;
+
+    protected static Map<String, String> createPropertyNameDbNameKeyToLowerMap() {
+        if (_propertyNameDbNameKeyToLowerMap != null) {
+            return _propertyNameDbNameKeyToLowerMap;
+        }
+        final Map<String, String> map = new LinkedHashMap<String, String>();
+        map.put(TABLE_PROPERTY_NAME.toLowerCase(), TABLE_DB_NAME);
+
+        map.put(PROPERTY_NAME_id.toLowerCase(), DB_NAME_ID);
+        map.put(PROPERTY_NAME_content.toLowerCase(), DB_NAME_CONTENT);
+
+        _propertyNameDbNameKeyToLowerMap = Collections.unmodifiableMap(map);
+        return _propertyNameDbNameKeyToLowerMap;
+    }
+
+    // ===================================================================================
+    //                                                                          Table Name
+    //                                                                          ==========
+    public String getTableDbName() {
+        return TABLE_DB_NAME;
+    }
+
+    public String getTablePropertyName() {// as JavaBeansRule
+        return TABLE_PROPERTY_NAME;
+    }
+
+    // ===================================================================================
+    //                                                                            Name Map
+    //                                                                            ========
+    /**
+     * @return The key-to-lower map of DB name(lower) and property name. (NotNull)
+     */
+    public Map<String, String> getDbNamePropertyNameKeyToLowerMap() {
+        return createDbNamePropertyNameKeyToLowerMap();
+    }
+
+    /**
+     * @return The key-to-lower map of property name(lower) and DB name. (NotNull)
+     */
+    public Map<String, String> getPropertyNameDbNameKeyToLowerMap() {
+        return createPropertyNameDbNameKeyToLowerMap();
+    }
+
+    // ===================================================================================
+    //                                                                           Type Name
+    //                                                                           =========
+    public String getEntityTypeName() {
+        return "jp.sf.pal.announcement.db.exentity.AnnouncementBody";
+    }
+
+    public String getConditionBeanTypeName() {
+        return "jp.sf.pal.announcement.db.cbean.bs.AnnouncementBodyCB";
+    }
+
+    public String getDaoTypeName() {
+        return "jp.sf.pal.announcement.db.exdao.AnnouncementBodyDao";
+    }
+
+    public String getBehaviorTypeName() {
+        return "jp.sf.pal.announcement.db.exbhv.AnnouncementBodyBhv";
+    }
+
+    // ===================================================================================
+    //                                                                         Object Type
+    //                                                                         ===========
+    public Class<AnnouncementBody> getEntityType() {
+        return ENTITY_TYPE;
+    }
+
+    // ===================================================================================
+    //                                                                     Object Instance
+    //                                                                     ===============
+    public Entity newEntity() {
+        return newMyEntity();
+    }
+
+    public AnnouncementBody newMyEntity() {
+        return new AnnouncementBody();
+    }
+
+    // ===================================================================================
+    //                                                                         Column Info
+    //                                                                         ===========
+    /**
+     * @return The list of DB name of columns. (NotNull and NotEmpty)
+     */
+    public List<ColumnInfo> getColumnInfoList() {
+        final List<ColumnInfo> columnInfoList = new ArrayList<ColumnInfo>();
+        columnInfoList.add(columnId());
+        columnInfoList.add(columnContent());
+        return columnInfoList;
+    }
+
+    /** @return The column information of id. (NotNull) */
+    public ColumnInfo columnId() {
+        return new ColumnInfo(this, "ID", "id", Integer.class, true, null, null);
+    }
+
+    /** @return The column information of content. (NotNull) */
+    public ColumnInfo columnContent() {
+        return new ColumnInfo(this, "CONTENT", "content", String.class, false,
+                Integer.valueOf("65535"), Integer.valueOf("0"));
+    }
+
+    // ===================================================================================
+    //                                                                         Unique Info
+    //                                                                         ===========
+    // -----------------------------------------------------
+    //                                       Primary Element
+    //                                       ---------------
+    public UniqueInfo getPrimaryUniqueInfo() {
+        final UniqueInfo uniqueInfo = new UniqueInfo();
+        uniqueInfo.setDBMeta(this);
+        uniqueInfo.addUniqueColumnList(new ColumnInfo(this, "ID", "id",
+                Integer.class, true, null, null));
+        uniqueInfo.setPrimary(true);
+        return uniqueInfo;
+    }
+
+    public boolean hasPrimaryKey() {
+        return true;
+    }
+
+    public boolean hasTwoOrMorePrimaryKeys() {
+        return false;
+    }
+
+    // ===================================================================================
+    //                                                                       Relation Info
+    //                                                                       =============
+    // -----------------------------------------------------
+    //                                      Foreign Property
+    //                                      ----------------
+    public ForeignInfo foreignAnnouncement() {
+        final ForeignInfo foreignInfo = new ForeignInfo();
+        foreignInfo.setForeignPropertyName("announcement");
+        foreignInfo.setLocalDBMeta(AnnouncementBodyDbm.getInstance());
+        foreignInfo.setForeignDBMeta(AnnouncementDbm.getInstance());
+        final Map<ColumnInfo, ColumnInfo> map = new LinkedHashMap<ColumnInfo, ColumnInfo>();
+        map.put(columnId(), AnnouncementDbm.getInstance().columnId());
+        foreignInfo.setLocalForeignColumnInfoMap(map);
+        foreignInfo.setRelationNo(0);
+        foreignInfo.setOneToOne(true);
+        return foreignInfo;
+    }
+
+    // -----------------------------------------------------
+    //                                     Referrer Property
+    //                                     -----------------
+
+    // -----------------------------------------------------
+    //                                        Relation Trace
+    //                                        --------------
+    public AnnouncementBodyRelationTrace createRelationTrace(
+            RelationTraceFixHandler relationTraceFixHandler) {
+        return new AnnouncementBodyRelationTrace(relationTraceFixHandler);
+    }
+
+    public AnnouncementBodyRelationTrace createRelationTrace(
+            List<RelationInfo> relationList,
+            List<AbstractRelationTrace> relationTraceList) {
+        return new AnnouncementBodyRelationTrace(relationList,
+                relationTraceList);
+    }
+
+    public static class AnnouncementBodyRelationTrace extends
+            AbstractRelationTrace {
+
+        /**
+         * Constructor for first step.
+         * @param relationTraceFixHandler The handler of fixed relation trace. (Nullable)
+         */
+        public AnnouncementBodyRelationTrace(
+                RelationTraceFixHandler relationTraceFixHandler) {
+            super(relationTraceFixHandler);
+        }
+
+        /**
+         * Constructor for relation step.
+         * @param relationList The list of relation. (NotNull)
+         * @param relationTraceList The list of relation trace. (NotNull)
+         */
+        public AnnouncementBodyRelationTrace(List<RelationInfo> relationList,
+                List<AbstractRelationTrace> relationTraceList) {
+            super(relationList, relationTraceList);
+        }
+
+        public AnnouncementDbm.AnnouncementRelationTrace foreignAnnouncement() {
+            _relationList.add(AnnouncementBodyDbm.getInstance()
+                    .foreignAnnouncement());
+            return AnnouncementDbm.getInstance().createRelationTrace(
+                    _relationList, _relationTraceList);
+        }
+
+        public RelationTrace columnId() {
+            return fixTrace(_relationList, AnnouncementBodyDbm.getInstance()
+                    .columnId());
+        }
+
+        public RelationTrace columnContent() {
+            return fixTrace(_relationList, AnnouncementBodyDbm.getInstance()
+                    .columnContent());
+        }
+    }
+
+    // ===================================================================================
+    //                                                                       Sequence Info
+    //                                                                       =============
+    public boolean hasSequence() {
+        return false;
+    }
+
+    // ===================================================================================
+    //                                                                Optimistic Lock Info
+    //                                                                ====================
+    public boolean hasVersionNo() {
+        return false;
+    }
+
+    public boolean hasUpdateDate() {
+        return false;
+    }
+
+    // ===================================================================================
+    //                                                                  Common Column Info
+    //                                                                  ==================
+    public boolean hasCommonColumn() {
+        return false;
+    }
+
+    // ===================================================================================
+    //                                                                     Entity Handling
+    //                                                                     ===============  
+    // -----------------------------------------------------
+    //                                                Accept
+    //                                                ------
+    public void acceptPrimaryKeyMap(Entity entity,
+            Map<String, ? extends Object> primaryKeyMap) {
+        final AnnouncementBody myEntity = (AnnouncementBody) entity;
+        MapAssertUtil.assertPrimaryKeyMapNotNullAndNotEmpty(primaryKeyMap);
+        final MapStringValueAnalyzer analyzer = new MapStringValueAnalyzer(
+                primaryKeyMap, entity.getModifiedPropertyNames());
+
+        MapAssertUtil.assertColumnExistingInPrimaryKeyMap(primaryKeyMap, "ID");
+        if (analyzer.init("ID", "id", "id")) {
+            myEntity.setId(analyzer.analyzeNumber(Integer.class));
+        }
+
+    }
+
+    public void acceptPrimaryKeyMapString(Entity entity,
+            String primaryKeyMapString) {
+        MapStringUtil.acceptPrimaryKeyMapString(primaryKeyMapString, entity);
+    }
+
+    public void acceptColumnValueMap(Entity entity,
+            Map<String, ? extends Object> columnValueMap) {
+        final AnnouncementBody myEntity = (AnnouncementBody) entity;
+        MapAssertUtil.assertColumnValueMapNotNullAndNotEmpty(columnValueMap);
+        final MapStringValueAnalyzer analyzer = new MapStringValueAnalyzer(
+                columnValueMap, entity.getModifiedPropertyNames());
+
+        if (analyzer.init("ID", "id", "id")) {
+            myEntity.setId(analyzer.analyzeNumber(Integer.class));
+        }
+        if (analyzer.init("CONTENT", "content", "content")) {
+            myEntity.setContent(analyzer.analyzeString(String.class));
+        }
+
+    }
+
+    public void acceptColumnValueMapString(Entity entity,
+            String columnValueMapString) {
+        MapStringUtil.acceptColumnValueMapString(columnValueMapString, entity);
+    }
+
+    // -----------------------------------------------------
+    //                                               Extract
+    //                                               -------
+    public String extractPrimaryKeyMapString(Entity entity) {
+        return MapStringUtil.extractPrimaryKeyMapString(entity);
+    }
+
+    public String extractPrimaryKeyMapString(Entity entity, String startBrace,
+            String endBrace, String delimiter, String equal) {
+        final AnnouncementBody myEntity = (AnnouncementBody) entity;
+        final String mapMarkAndStartBrace = MAP_STRING_MAP_MARK + startBrace;
+        final StringBuffer sb = new StringBuffer();
+        helpAppendingColumnValueString(sb, delimiter, equal, "ID", myEntity
+                .getId());
+
+        sb.delete(0, delimiter.length()).insert(0, mapMarkAndStartBrace)
+                .append(endBrace);
+        return sb.toString();
+    }
+
+    public String extractColumnValueMapString(Entity entity) {
+        return MapStringUtil.extractColumnValueMapString(entity);
+    }
+
+    public String extractColumnValueMapString(Entity entity, String startBrace,
+            String endBrace, String delimiter, String equal) {
+        final AnnouncementBody myEntity = (AnnouncementBody) entity;
+        final String mapMarkAndStartBrace = MAP_STRING_MAP_MARK + startBrace;
+        final StringBuffer sb = new StringBuffer();
+        helpAppendingColumnValueString(sb, delimiter, equal, "ID", myEntity
+                .getId());
+        helpAppendingColumnValueString(sb, delimiter, equal, "CONTENT",
+                myEntity.getContent());
+
+        sb.delete(0, delimiter.length()).insert(0, mapMarkAndStartBrace)
+                .append(endBrace);
+        return sb.toString();
+    }
+
+    private void helpAppendingColumnValueString(StringBuffer sb,
+            String delimiter, String equal, String colName, Object value) {
+        sb.append(delimiter).append(colName).append(equal);
+        sb.append(helpGettingColumnStringValue(value));
+    }
+
+    public String extractCommonColumnValueMapString(Entity entity) {
+        return "map:{}";
+    }
+
+    public String extractCommonColumnValueMapString(Entity entity,
+            String startBrace, String endBrace, String delimiter, String equal) {
+        return "map:" + startBrace + endBrace;
+    }
+
+    // -----------------------------------------------------
+    //                                               Convert
+    //                                               -------
+    public List<Object> convertToColumnValueList(Entity entity) {
+        return new ArrayList<Object>(convertToColumnValueMap(entity).values());
+    }
+
+    public Map<String, Object> convertToColumnValueMap(Entity entity) {
+        final AnnouncementBody myEntity = downcast(entity);
+        final Map<String, Object> valueMap = new LinkedHashMap<String, Object>();
+        valueMap.put("ID", myEntity.getId());
+        valueMap.put("CONTENT", myEntity.getContent());
+        return valueMap;
+    }
+
+    public List<String> convertToColumnStringValueList(Entity entity) {
+        return new ArrayList<String>(convertToColumnStringValueMap(entity)
+                .values());
+    }
+
+    public Map<String, String> convertToColumnStringValueMap(Entity entity) {
+        final AnnouncementBody myEntity = downcast(entity);
+        final Map<String, String> valueMap = new LinkedHashMap<String, String>();
+        valueMap.put("ID", helpGettingColumnStringValue(myEntity.getId()));
+        valueMap.put("CONTENT", helpGettingColumnStringValue(myEntity
+                .getContent()));
+        return valueMap;
+    }
+
+    // ===================================================================================
+    //                                                                        JDBC Support
+    //                                                                        ============
+    public String getPreparedInsertClause() {
+        return getPreparedInsertClause(new PreparedInsertClauseOption());
+    }
+
+    public String getPreparedInsertClause(
+            PreparedInsertClauseOption preparedInsertClauseOption) {
+        if (preparedInsertClauseOption.getTablePrefix() != null) {
+            final String tablePrefix = preparedInsertClauseOption
+                    .getTablePrefix();
+            return "insert into " + tablePrefix
+                    + "ANNOUNCEMENT_BODY(ID, CONTENT) values(? , ? )";
+        }
+        return "insert into ANNOUNCEMENT_BODY(ID, CONTENT) values(? , ? )";
+    }
+
+    // ===================================================================================
+    //                                                               Entity Property Setup
+    //                                                               =====================
+    // It's very INTERNAL!
+    protected Map<String, EntityPropertySetupper<AnnouncementBody>> _entityPropertySetupperMap = new HashMap<String, EntityPropertySetupper<AnnouncementBody>>();
+    {
+        registerEntityPropertySetupper("ID", "id",
+                new EntityPropertyIdSetupper(), _entityPropertySetupperMap);
+        registerEntityPropertySetupper("CONTENT", "content",
+                new EntityPropertyContentSetupper(), _entityPropertySetupperMap);
+    }
+
+    public boolean hasEntityPropertySetupper(String propertyName) {
+        return _entityPropertySetupperMap.containsKey(propertyName);
+    }
+
+    public void setupEntityProperty(String propertyName, Object entity,
+            Object value) {
+        final EntityPropertySetupper<AnnouncementBody> callback = _entityPropertySetupperMap
+                .get(propertyName);
+        if (callback == null) {
+            String msg = "The propertyName was Not Found in the map of setupper of entity property:";
+            msg = msg + " propertyName=" + propertyName
+                    + " _entityPropertySetupperMap.keySet()="
+                    + _entityPropertySetupperMap.keySet();
+            throw new IllegalStateException(msg);
+        }
+        callback.setup((AnnouncementBody) entity, value);
+    }
+
+    public class EntityPropertyIdSetupper implements
+            EntityPropertySetupper<AnnouncementBody> {
+        public void setup(AnnouncementBody entity, Object value) {
+            entity.setId((Integer) value);
+        }
+    }
+
+    public class EntityPropertyContentSetupper implements
+            EntityPropertySetupper<AnnouncementBody> {
+        public void setup(AnnouncementBody entity, Object value) {
+            entity.setContent((String) value);
+        }
+    }
+
+    // ===================================================================================
+    //                                                                              Helper
+    //                                                                              ======
+    protected AnnouncementBody downcast(Entity entity) {
+        assertObjectNotNull("entity", entity);
+        try {
+            return (AnnouncementBody) entity;
+        } catch (ClassCastException e) {
+            String msg = "The entity should be AnnouncementBody but it was: "
+                    + entity.getClass();
+            throw new RuntimeException(msg, e);
+        }
+    }
+
+    protected void checkDowncast(Entity entity) {
+        downcast(entity);
+    }
+}


Property changes on: announcement/trunk/src/main/java/jp/sf/pal/announcement/db/bsentity/dbmeta/AnnouncementBodyDbm.java
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/java/jp/sf/pal/announcement/db/bsentity/dbmeta/AnnouncementDbm.java
===================================================================
--- announcement/trunk/src/main/java/jp/sf/pal/announcement/db/bsentity/dbmeta/AnnouncementDbm.java	                        (rev 0)
+++ announcement/trunk/src/main/java/jp/sf/pal/announcement/db/bsentity/dbmeta/AnnouncementDbm.java	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,799 @@
+package jp.sf.pal.announcement.db.bsentity.dbmeta;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.LinkedHashMap;
+import java.util.List;
+import java.util.Map;
+
+import jp.sf.pal.announcement.db.allcommon.Entity;
+import jp.sf.pal.announcement.db.allcommon.dbmeta.AbstractDBMeta;
+import jp.sf.pal.announcement.db.allcommon.dbmeta.info.ColumnInfo;
+import jp.sf.pal.announcement.db.allcommon.dbmeta.info.ForeignInfo;
+import jp.sf.pal.announcement.db.allcommon.dbmeta.info.RelationInfo;
+import jp.sf.pal.announcement.db.allcommon.dbmeta.info.UniqueInfo;
+import jp.sf.pal.announcement.db.exentity.Announcement;
+
+/**
+ * The DB meta of ANNOUNCEMENT. (Singleton)
+ * <pre>
+ * [primary-key]
+ *     ID
+ * 
+ * [column]
+ *     ID, SCOPE, ROLE, START_DATE, END_DATE, TITLE, SORT_ORDER, TIMESTAMP
+ * 
+ * [sequence]
+ *     
+ * 
+ * [identity]
+ *     ID
+ * 
+ * [version-no]
+ *     
+ * 
+ * [foreign-table]
+ *     
+ * 
+ * [referrer-table]
+ *     ANNOUNCEMENT_BODY
+ * 
+ * [foreign-property]
+ *     announcementBodyAsOne
+ * 
+ * [referrer-property]
+ *     
+ * </pre>
+ * @author DBFlute(AutoGenerator)
+ */
+ @ SuppressWarnings("unchecked")
+public class AnnouncementDbm extends AbstractDBMeta {
+
+    // ===================================================================================
+    //                                                                          Definition
+    //                                                                          ==========
+    protected static final Class<Announcement> ENTITY_TYPE = Announcement.class;
+
+    private static final AnnouncementDbm _instance = new AnnouncementDbm();
+
+    // ===================================================================================
+    //                                                                         Constructor
+    //                                                                         ===========
+    private AnnouncementDbm() {
+    }
+
+    // ===================================================================================
+    //                                                                           Singleton
+    //                                                                           =========
+    public static AnnouncementDbm getInstance() {
+        return _instance;
+    }
+
+    // ===================================================================================
+    //                                                                     Name Definition
+    //                                                                     ===============
+    // -----------------------------------------------------
+    //                                                 Table
+    //                                                 -----
+    /** Table DB name. */
+    public static final String TABLE_DB_NAME = "ANNOUNCEMENT";
+
+    /** Table property name(JavaBeansRule). */
+    public static final String TABLE_PROPERTY_NAME = "announcement";
+
+    // -----------------------------------------------------
+    //                                        Column DB Name
+    //                                        --------------
+    /** DB name of ID. {PK : INC : int : NotNull} */
+    public static final String DB_NAME_ID = "ID";
+
+    /** DB name of SCOPE. {varchar(20) : NotNull} */
+    public static final String DB_NAME_SCOPE = "SCOPE";
+
+    /** DB name of ROLE. {varchar(100)} */
+    public static final String DB_NAME_ROLE = "ROLE";
+
+    /** DB name of START_DATE. {datetime} */
+    public static final String DB_NAME_START_DATE = "START_DATE";
+
+    /** DB name of END_DATE. {datetime} */
+    public static final String DB_NAME_END_DATE = "END_DATE";
+
+    /** DB name of TITLE. {varchar(100) : NotNull} */
+    public static final String DB_NAME_TITLE = "TITLE";
+
+    /** DB name of SORT_ORDER. {int : NotNull} */
+    public static final String DB_NAME_SORT_ORDER = "SORT_ORDER";
+
+    /** DB name of TIMESTAMP. {timestamp : NotNull : Default=[CURRENT_TIMESTAMP]} */
+    public static final String DB_NAME_TIMESTAMP = "TIMESTAMP";
+
+    // -----------------------------------------------------
+    //                                  Column Property Name
+    //                                  (JavaBeansRule)
+    //                                  --------------------
+    /** Property name(JavaBeansRule) of id. {PK : INC : int : NotNull} */
+    public static final String PROPERTY_NAME_id = "id";
+
+    /** Property name(JavaBeansRule) of scope. {varchar(20) : NotNull} */
+    public static final String PROPERTY_NAME_scope = "scope";
+
+    /** Property name(JavaBeansRule) of role. {varchar(100)} */
+    public static final String PROPERTY_NAME_role = "role";
+
+    /** Property name(JavaBeansRule) of startDate. {datetime} */
+    public static final String PROPERTY_NAME_startDate = "startDate";
+
+    /** Property name(JavaBeansRule) of endDate. {datetime} */
+    public static final String PROPERTY_NAME_endDate = "endDate";
+
+    /** Property name(JavaBeansRule) of title. {varchar(100) : NotNull} */
+    public static final String PROPERTY_NAME_title = "title";
+
+    /** Property name(JavaBeansRule) of sortOrder. {int : NotNull} */
+    public static final String PROPERTY_NAME_sortOrder = "sortOrder";
+
+    /** Property name(JavaBeansRule) of timestamp. {timestamp : NotNull : Default=[CURRENT_TIMESTAMP]} */
+    public static final String PROPERTY_NAME_timestamp = "timestamp";
+
+    // -----------------------------------------------------
+    //                                          Foreign Name
+    //                                          ------------
+    /** The foreign property name(JavaBeansRule) of announcementBodyAsOne. */
+    public static final String FOREIGN_PROPERTY_NAME_announcementBodyAsOne = "announcementBodyAsOne";
+
+    // -----------------------------------------------------
+    //                                         Referrer Name
+    //                                         -------------
+    // -----------------------------------------------------
+    //                                              Name Map
+    //                                              --------
+    /** The map of {DB name : property name} key-to-lower. */
+    private static Map<String, String> _dbNamePropertyNameKeyToLowerMap;
+
+    protected static Map<String, String> createDbNamePropertyNameKeyToLowerMap() {
+        if (_dbNamePropertyNameKeyToLowerMap != null) {
+            return _dbNamePropertyNameKeyToLowerMap;
+        }
+        final Map<String, String> map = new LinkedHashMap<String, String>();
+        map.put(TABLE_DB_NAME.toLowerCase(), TABLE_PROPERTY_NAME);
+
+        map.put(DB_NAME_ID.toLowerCase(), PROPERTY_NAME_id);
+        map.put(DB_NAME_SCOPE.toLowerCase(), PROPERTY_NAME_scope);
+        map.put(DB_NAME_ROLE.toLowerCase(), PROPERTY_NAME_role);
+        map.put(DB_NAME_START_DATE.toLowerCase(), PROPERTY_NAME_startDate);
+        map.put(DB_NAME_END_DATE.toLowerCase(), PROPERTY_NAME_endDate);
+        map.put(DB_NAME_TITLE.toLowerCase(), PROPERTY_NAME_title);
+        map.put(DB_NAME_SORT_ORDER.toLowerCase(), PROPERTY_NAME_sortOrder);
+        map.put(DB_NAME_TIMESTAMP.toLowerCase(), PROPERTY_NAME_timestamp);
+
+        _dbNamePropertyNameKeyToLowerMap = Collections.unmodifiableMap(map);
+        return _dbNamePropertyNameKeyToLowerMap;
+    }
+
+    /** The map of {property name : DB name} key-to-lower. */
+    private static Map<String, String> _propertyNameDbNameKeyToLowerMap;
+
+    protected static Map<String, String> createPropertyNameDbNameKeyToLowerMap() {
+        if (_propertyNameDbNameKeyToLowerMap != null) {
+            return _propertyNameDbNameKeyToLowerMap;
+        }
+        final Map<String, String> map = new LinkedHashMap<String, String>();
+        map.put(TABLE_PROPERTY_NAME.toLowerCase(), TABLE_DB_NAME);
+
+        map.put(PROPERTY_NAME_id.toLowerCase(), DB_NAME_ID);
+        map.put(PROPERTY_NAME_scope.toLowerCase(), DB_NAME_SCOPE);
+        map.put(PROPERTY_NAME_role.toLowerCase(), DB_NAME_ROLE);
+        map.put(PROPERTY_NAME_startDate.toLowerCase(), DB_NAME_START_DATE);
+        map.put(PROPERTY_NAME_endDate.toLowerCase(), DB_NAME_END_DATE);
+        map.put(PROPERTY_NAME_title.toLowerCase(), DB_NAME_TITLE);
+        map.put(PROPERTY_NAME_sortOrder.toLowerCase(), DB_NAME_SORT_ORDER);
+        map.put(PROPERTY_NAME_timestamp.toLowerCase(), DB_NAME_TIMESTAMP);
+
+        _propertyNameDbNameKeyToLowerMap = Collections.unmodifiableMap(map);
+        return _propertyNameDbNameKeyToLowerMap;
+    }
+
+    // ===================================================================================
+    //                                                                          Table Name
+    //                                                                          ==========
+    public String getTableDbName() {
+        return TABLE_DB_NAME;
+    }
+
+    public String getTablePropertyName() {// as JavaBeansRule
+        return TABLE_PROPERTY_NAME;
+    }
+
+    // ===================================================================================
+    //                                                                            Name Map
+    //                                                                            ========
+    /**
+     * @return The key-to-lower map of DB name(lower) and property name. (NotNull)
+     */
+    public Map<String, String> getDbNamePropertyNameKeyToLowerMap() {
+        return createDbNamePropertyNameKeyToLowerMap();
+    }
+
+    /**
+     * @return The key-to-lower map of property name(lower) and DB name. (NotNull)
+     */
+    public Map<String, String> getPropertyNameDbNameKeyToLowerMap() {
+        return createPropertyNameDbNameKeyToLowerMap();
+    }
+
+    // ===================================================================================
+    //                                                                           Type Name
+    //                                                                           =========
+    public String getEntityTypeName() {
+        return "jp.sf.pal.announcement.db.exentity.Announcement";
+    }
+
+    public String getConditionBeanTypeName() {
+        return "jp.sf.pal.announcement.db.cbean.bs.AnnouncementCB";
+    }
+
+    public String getDaoTypeName() {
+        return "jp.sf.pal.announcement.db.exdao.AnnouncementDao";
+    }
+
+    public String getBehaviorTypeName() {
+        return "jp.sf.pal.announcement.db.exbhv.AnnouncementBhv";
+    }
+
+    // ===================================================================================
+    //                                                                         Object Type
+    //                                                                         ===========
+    public Class<Announcement> getEntityType() {
+        return ENTITY_TYPE;
+    }
+
+    // ===================================================================================
+    //                                                                     Object Instance
+    //                                                                     ===============
+    public Entity newEntity() {
+        return newMyEntity();
+    }
+
+    public Announcement newMyEntity() {
+        return new Announcement();
+    }
+
+    // ===================================================================================
+    //                                                                         Column Info
+    //                                                                         ===========
+    /**
+     * @return The list of DB name of columns. (NotNull and NotEmpty)
+     */
+    public List<ColumnInfo> getColumnInfoList() {
+        final List<ColumnInfo> columnInfoList = new ArrayList<ColumnInfo>();
+        columnInfoList.add(columnId());
+        columnInfoList.add(columnScope());
+        columnInfoList.add(columnRole());
+        columnInfoList.add(columnStartDate());
+        columnInfoList.add(columnEndDate());
+        columnInfoList.add(columnTitle());
+        columnInfoList.add(columnSortOrder());
+        columnInfoList.add(columnTimestamp());
+        return columnInfoList;
+    }
+
+    /** @return The column information of id. (NotNull) */
+    public ColumnInfo columnId() {
+        return new ColumnInfo(this, "ID", "id", Integer.class, true, null, null);
+    }
+
+    /** @return The column information of scope. (NotNull) */
+    public ColumnInfo columnScope() {
+        return new ColumnInfo(this, "SCOPE", "scope", String.class, false,
+                Integer.valueOf("20"), Integer.valueOf("0"));
+    }
+
+    /** @return The column information of role. (NotNull) */
+    public ColumnInfo columnRole() {
+        return new ColumnInfo(this, "ROLE", "role", String.class, false,
+                Integer.valueOf("100"), Integer.valueOf("0"));
+    }
+
+    /** @return The column information of startDate. (NotNull) */
+    public ColumnInfo columnStartDate() {
+        return new ColumnInfo(this, "START_DATE", "startDate",
+                java.sql.Timestamp.class, false, null, null);
+    }
+
+    /** @return The column information of endDate. (NotNull) */
+    public ColumnInfo columnEndDate() {
+        return new ColumnInfo(this, "END_DATE", "endDate",
+                java.sql.Timestamp.class, false, null, null);
+    }
+
+    /** @return The column information of title. (NotNull) */
+    public ColumnInfo columnTitle() {
+        return new ColumnInfo(this, "TITLE", "title", String.class, false,
+                Integer.valueOf("100"), Integer.valueOf("0"));
+    }
+
+    /** @return The column information of sortOrder. (NotNull) */
+    public ColumnInfo columnSortOrder() {
+        return new ColumnInfo(this, "SORT_ORDER", "sortOrder", Integer.class,
+                false, null, null);
+    }
+
+    /** @return The column information of timestamp. (NotNull) */
+    public ColumnInfo columnTimestamp() {
+        return new ColumnInfo(this, "TIMESTAMP", "timestamp",
+                java.sql.Timestamp.class, false, null, null);
+    }
+
+    // ===================================================================================
+    //                                                                         Unique Info
+    //                                                                         ===========
+    // -----------------------------------------------------
+    //                                       Primary Element
+    //                                       ---------------
+    public UniqueInfo getPrimaryUniqueInfo() {
+        final UniqueInfo uniqueInfo = new UniqueInfo();
+        uniqueInfo.setDBMeta(this);
+        uniqueInfo.addUniqueColumnList(new ColumnInfo(this, "ID", "id",
+                Integer.class, true, null, null));
+        uniqueInfo.setPrimary(true);
+        return uniqueInfo;
+    }
+
+    public boolean hasPrimaryKey() {
+        return true;
+    }
+
+    public boolean hasTwoOrMorePrimaryKeys() {
+        return false;
+    }
+
+    // ===================================================================================
+    //                                                                       Relation Info
+    //                                                                       =============
+    // -----------------------------------------------------
+    //                                      Foreign Property
+    //                                      ----------------
+
+    public ForeignInfo foreignAnnouncementBodyAsOne() {
+        final ForeignInfo foreignInfo = new ForeignInfo();
+        foreignInfo.setForeignPropertyName("announcementBodyAsOne");
+        foreignInfo.setLocalDBMeta(AnnouncementDbm.getInstance());
+        foreignInfo.setForeignDBMeta(AnnouncementBodyDbm.getInstance());
+        final Map<ColumnInfo, ColumnInfo> map = new LinkedHashMap<ColumnInfo, ColumnInfo>();
+        map.put(columnId(), AnnouncementBodyDbm.getInstance().columnId());
+        foreignInfo.setLocalForeignColumnInfoMap(map);
+        foreignInfo.setRelationNo(0);
+        foreignInfo.setOneToOne(true);
+        return foreignInfo;
+    }
+
+    // -----------------------------------------------------
+    //                                     Referrer Property
+    //                                     -----------------
+
+    // -----------------------------------------------------
+    //                                        Relation Trace
+    //                                        --------------
+    public AnnouncementRelationTrace createRelationTrace(
+            RelationTraceFixHandler relationTraceFixHandler) {
+        return new AnnouncementRelationTrace(relationTraceFixHandler);
+    }
+
+    public AnnouncementRelationTrace createRelationTrace(
+            List<RelationInfo> relationList,
+            List<AbstractRelationTrace> relationTraceList) {
+        return new AnnouncementRelationTrace(relationList, relationTraceList);
+    }
+
+    public static class AnnouncementRelationTrace extends AbstractRelationTrace {
+
+        /**
+         * Constructor for first step.
+         * @param relationTraceFixHandler The handler of fixed relation trace. (Nullable)
+         */
+        public AnnouncementRelationTrace(
+                RelationTraceFixHandler relationTraceFixHandler) {
+            super(relationTraceFixHandler);
+        }
+
+        /**
+         * Constructor for relation step.
+         * @param relationList The list of relation. (NotNull)
+         * @param relationTraceList The list of relation trace. (NotNull)
+         */
+        public AnnouncementRelationTrace(List<RelationInfo> relationList,
+                List<AbstractRelationTrace> relationTraceList) {
+            super(relationList, relationTraceList);
+        }
+
+        public AnnouncementBodyDbm.AnnouncementBodyRelationTrace foreignAnnouncementBodyAsOne() {
+            _relationList.add(AnnouncementDbm.getInstance()
+                    .foreignAnnouncementBodyAsOne());
+            return AnnouncementBodyDbm.getInstance().createRelationTrace(
+                    _relationList, _relationTraceList);
+        }
+
+        public RelationTrace columnId() {
+            return fixTrace(_relationList, AnnouncementDbm.getInstance()
+                    .columnId());
+        }
+
+        public RelationTrace columnScope() {
+            return fixTrace(_relationList, AnnouncementDbm.getInstance()
+                    .columnScope());
+        }
+
+        public RelationTrace columnRole() {
+            return fixTrace(_relationList, AnnouncementDbm.getInstance()
+                    .columnRole());
+        }
+
+        public RelationTrace columnStartDate() {
+            return fixTrace(_relationList, AnnouncementDbm.getInstance()
+                    .columnStartDate());
+        }
+
+        public RelationTrace columnEndDate() {
+            return fixTrace(_relationList, AnnouncementDbm.getInstance()
+                    .columnEndDate());
+        }
+
+        public RelationTrace columnTitle() {
+            return fixTrace(_relationList, AnnouncementDbm.getInstance()
+                    .columnTitle());
+        }
+
+        public RelationTrace columnSortOrder() {
+            return fixTrace(_relationList, AnnouncementDbm.getInstance()
+                    .columnSortOrder());
+        }
+
+        public RelationTrace columnTimestamp() {
+            return fixTrace(_relationList, AnnouncementDbm.getInstance()
+                    .columnTimestamp());
+        }
+    }
+
+    // ===================================================================================
+    //                                                                       Sequence Info
+    //                                                                       =============
+    public boolean hasSequence() {
+        return false;
+    }
+
+    // ===================================================================================
+    //                                                                Optimistic Lock Info
+    //                                                                ====================
+    public boolean hasVersionNo() {
+        return false;
+    }
+
+    public boolean hasUpdateDate() {
+        return false;
+    }
+
+    // ===================================================================================
+    //                                                                  Common Column Info
+    //                                                                  ==================
+    public boolean hasCommonColumn() {
+        return false;
+    }
+
+    // ===================================================================================
+    //                                                                     Entity Handling
+    //                                                                     ===============  
+    // -----------------------------------------------------
+    //                                                Accept
+    //                                                ------
+    public void acceptPrimaryKeyMap(Entity entity,
+            Map<String, ? extends Object> primaryKeyMap) {
+        final Announcement myEntity = (Announcement) entity;
+        MapAssertUtil.assertPrimaryKeyMapNotNullAndNotEmpty(primaryKeyMap);
+        final MapStringValueAnalyzer analyzer = new MapStringValueAnalyzer(
+                primaryKeyMap, entity.getModifiedPropertyNames());
+
+        MapAssertUtil.assertColumnExistingInPrimaryKeyMap(primaryKeyMap, "ID");
+        if (analyzer.init("ID", "id", "id")) {
+            myEntity.setId(analyzer.analyzeNumber(Integer.class));
+        }
+
+    }
+
+    public void acceptPrimaryKeyMapString(Entity entity,
+            String primaryKeyMapString) {
+        MapStringUtil.acceptPrimaryKeyMapString(primaryKeyMapString, entity);
+    }
+
+    public void acceptColumnValueMap(Entity entity,
+            Map<String, ? extends Object> columnValueMap) {
+        final Announcement myEntity = (Announcement) entity;
+        MapAssertUtil.assertColumnValueMapNotNullAndNotEmpty(columnValueMap);
+        final MapStringValueAnalyzer analyzer = new MapStringValueAnalyzer(
+                columnValueMap, entity.getModifiedPropertyNames());
+
+        if (analyzer.init("ID", "id", "id")) {
+            myEntity.setId(analyzer.analyzeNumber(Integer.class));
+        }
+        if (analyzer.init("SCOPE", "scope", "scope")) {
+            myEntity.setScope(analyzer.analyzeString(String.class));
+        }
+        if (analyzer.init("ROLE", "role", "role")) {
+            myEntity.setRole(analyzer.analyzeString(String.class));
+        }
+        if (analyzer.init("START_DATE", "startDate", "startDate")) {
+            myEntity.setStartDate(analyzer
+                    .analyzeDate(java.sql.Timestamp.class));
+        }
+        if (analyzer.init("END_DATE", "endDate", "endDate")) {
+            myEntity.setEndDate(analyzer.analyzeDate(java.sql.Timestamp.class));
+        }
+        if (analyzer.init("TITLE", "title", "title")) {
+            myEntity.setTitle(analyzer.analyzeString(String.class));
+        }
+        if (analyzer.init("SORT_ORDER", "sortOrder", "sortOrder")) {
+            myEntity.setSortOrder(analyzer.analyzeNumber(Integer.class));
+        }
+        if (analyzer.init("TIMESTAMP", "timestamp", "timestamp")) {
+            myEntity.setTimestamp(analyzer
+                    .analyzeDate(java.sql.Timestamp.class));
+        }
+
+    }
+
+    public void acceptColumnValueMapString(Entity entity,
+            String columnValueMapString) {
+        MapStringUtil.acceptColumnValueMapString(columnValueMapString, entity);
+    }
+
+    // -----------------------------------------------------
+    //                                               Extract
+    //                                               -------
+    public String extractPrimaryKeyMapString(Entity entity) {
+        return MapStringUtil.extractPrimaryKeyMapString(entity);
+    }
+
+    public String extractPrimaryKeyMapString(Entity entity, String startBrace,
+            String endBrace, String delimiter, String equal) {
+        final Announcement myEntity = (Announcement) entity;
+        final String mapMarkAndStartBrace = MAP_STRING_MAP_MARK + startBrace;
+        final StringBuffer sb = new StringBuffer();
+        helpAppendingColumnValueString(sb, delimiter, equal, "ID", myEntity
+                .getId());
+
+        sb.delete(0, delimiter.length()).insert(0, mapMarkAndStartBrace)
+                .append(endBrace);
+        return sb.toString();
+    }
+
+    public String extractColumnValueMapString(Entity entity) {
+        return MapStringUtil.extractColumnValueMapString(entity);
+    }
+
+    public String extractColumnValueMapString(Entity entity, String startBrace,
+            String endBrace, String delimiter, String equal) {
+        final Announcement myEntity = (Announcement) entity;
+        final String mapMarkAndStartBrace = MAP_STRING_MAP_MARK + startBrace;
+        final StringBuffer sb = new StringBuffer();
+        helpAppendingColumnValueString(sb, delimiter, equal, "ID", myEntity
+                .getId());
+        helpAppendingColumnValueString(sb, delimiter, equal, "SCOPE", myEntity
+                .getScope());
+        helpAppendingColumnValueString(sb, delimiter, equal, "ROLE", myEntity
+                .getRole());
+        helpAppendingColumnValueString(sb, delimiter, equal, "START_DATE",
+                myEntity.getStartDate());
+        helpAppendingColumnValueString(sb, delimiter, equal, "END_DATE",
+                myEntity.getEndDate());
+        helpAppendingColumnValueString(sb, delimiter, equal, "TITLE", myEntity
+                .getTitle());
+        helpAppendingColumnValueString(sb, delimiter, equal, "SORT_ORDER",
+                myEntity.getSortOrder());
+        helpAppendingColumnValueString(sb, delimiter, equal, "TIMESTAMP",
+                myEntity.getTimestamp());
+
+        sb.delete(0, delimiter.length()).insert(0, mapMarkAndStartBrace)
+                .append(endBrace);
+        return sb.toString();
+    }
+
+    private void helpAppendingColumnValueString(StringBuffer sb,
+            String delimiter, String equal, String colName, Object value) {
+        sb.append(delimiter).append(colName).append(equal);
+        sb.append(helpGettingColumnStringValue(value));
+    }
+
+    public String extractCommonColumnValueMapString(Entity entity) {
+        return "map:{}";
+    }
+
+    public String extractCommonColumnValueMapString(Entity entity,
+            String startBrace, String endBrace, String delimiter, String equal) {
+        return "map:" + startBrace + endBrace;
+    }
+
+    // -----------------------------------------------------
+    //                                               Convert
+    //                                               -------
+    public List<Object> convertToColumnValueList(Entity entity) {
+        return new ArrayList<Object>(convertToColumnValueMap(entity).values());
+    }
+
+    public Map<String, Object> convertToColumnValueMap(Entity entity) {
+        final Announcement myEntity = downcast(entity);
+        final Map<String, Object> valueMap = new LinkedHashMap<String, Object>();
+        valueMap.put("ID", myEntity.getId());
+        valueMap.put("SCOPE", myEntity.getScope());
+        valueMap.put("ROLE", myEntity.getRole());
+        valueMap.put("START_DATE", myEntity.getStartDate());
+        valueMap.put("END_DATE", myEntity.getEndDate());
+        valueMap.put("TITLE", myEntity.getTitle());
+        valueMap.put("SORT_ORDER", myEntity.getSortOrder());
+        valueMap.put("TIMESTAMP", myEntity.getTimestamp());
+        return valueMap;
+    }
+
+    public List<String> convertToColumnStringValueList(Entity entity) {
+        return new ArrayList<String>(convertToColumnStringValueMap(entity)
+                .values());
+    }
+
+    public Map<String, String> convertToColumnStringValueMap(Entity entity) {
+        final Announcement myEntity = downcast(entity);
+        final Map<String, String> valueMap = new LinkedHashMap<String, String>();
+        valueMap.put("ID", helpGettingColumnStringValue(myEntity.getId()));
+        valueMap
+                .put("SCOPE", helpGettingColumnStringValue(myEntity.getScope()));
+        valueMap.put("ROLE", helpGettingColumnStringValue(myEntity.getRole()));
+        valueMap.put("START_DATE", helpGettingColumnStringValue(myEntity
+                .getStartDate()));
+        valueMap.put("END_DATE", helpGettingColumnStringValue(myEntity
+                .getEndDate()));
+        valueMap
+                .put("TITLE", helpGettingColumnStringValue(myEntity.getTitle()));
+        valueMap.put("SORT_ORDER", helpGettingColumnStringValue(myEntity
+                .getSortOrder()));
+        valueMap.put("TIMESTAMP", helpGettingColumnStringValue(myEntity
+                .getTimestamp()));
+        return valueMap;
+    }
+
+    // ===================================================================================
+    //                                                                        JDBC Support
+    //                                                                        ============
+    public String getPreparedInsertClause() {
+        return getPreparedInsertClause(new PreparedInsertClauseOption());
+    }
+
+    public String getPreparedInsertClause(
+            PreparedInsertClauseOption preparedInsertClauseOption) {
+        if (preparedInsertClauseOption.getTablePrefix() != null) {
+            final String tablePrefix = preparedInsertClauseOption
+                    .getTablePrefix();
+            return "insert into "
+                    + tablePrefix
+                    + "ANNOUNCEMENT(ID, SCOPE, ROLE, START_DATE, END_DATE, TITLE, SORT_ORDER, TIMESTAMP) values(? , ? , ? , ? , ? , ? , ? , ? )";
+        }
+        return "insert into ANNOUNCEMENT(ID, SCOPE, ROLE, START_DATE, END_DATE, TITLE, SORT_ORDER, TIMESTAMP) values(? , ? , ? , ? , ? , ? , ? , ? )";
+    }
+
+    // ===================================================================================
+    //                                                               Entity Property Setup
+    //                                                               =====================
+    // It's very INTERNAL!
+    protected Map<String, EntityPropertySetupper<Announcement>> _entityPropertySetupperMap = new HashMap<String, EntityPropertySetupper<Announcement>>();
+    {
+        registerEntityPropertySetupper("ID", "id",
+                new EntityPropertyIdSetupper(), _entityPropertySetupperMap);
+        registerEntityPropertySetupper("SCOPE", "scope",
+                new EntityPropertyScopeSetupper(), _entityPropertySetupperMap);
+        registerEntityPropertySetupper("ROLE", "role",
+                new EntityPropertyRoleSetupper(), _entityPropertySetupperMap);
+        registerEntityPropertySetupper("START_DATE", "startDate",
+                new EntityPropertyStartDateSetupper(),
+                _entityPropertySetupperMap);
+        registerEntityPropertySetupper("END_DATE", "endDate",
+                new EntityPropertyEndDateSetupper(), _entityPropertySetupperMap);
+        registerEntityPropertySetupper("TITLE", "title",
+                new EntityPropertyTitleSetupper(), _entityPropertySetupperMap);
+        registerEntityPropertySetupper("SORT_ORDER", "sortOrder",
+                new EntityPropertySortOrderSetupper(),
+                _entityPropertySetupperMap);
+        registerEntityPropertySetupper("TIMESTAMP", "timestamp",
+                new EntityPropertyTimestampSetupper(),
+                _entityPropertySetupperMap);
+    }
+
+    public boolean hasEntityPropertySetupper(String propertyName) {
+        return _entityPropertySetupperMap.containsKey(propertyName);
+    }
+
+    public void setupEntityProperty(String propertyName, Object entity,
+            Object value) {
+        final EntityPropertySetupper<Announcement> callback = _entityPropertySetupperMap
+                .get(propertyName);
+        if (callback == null) {
+            String msg = "The propertyName was Not Found in the map of setupper of entity property:";
+            msg = msg + " propertyName=" + propertyName
+                    + " _entityPropertySetupperMap.keySet()="
+                    + _entityPropertySetupperMap.keySet();
+            throw new IllegalStateException(msg);
+        }
+        callback.setup((Announcement) entity, value);
+    }
+
+    public class EntityPropertyIdSetupper implements
+            EntityPropertySetupper<Announcement> {
+        public void setup(Announcement entity, Object value) {
+            entity.setId((Integer) value);
+        }
+    }
+
+    public class EntityPropertyScopeSetupper implements
+            EntityPropertySetupper<Announcement> {
+        public void setup(Announcement entity, Object value) {
+            entity.setScope((String) value);
+        }
+    }
+
+    public class EntityPropertyRoleSetupper implements
+            EntityPropertySetupper<Announcement> {
+        public void setup(Announcement entity, Object value) {
+            entity.setRole((String) value);
+        }
+    }
+
+    public class EntityPropertyStartDateSetupper implements
+            EntityPropertySetupper<Announcement> {
+        public void setup(Announcement entity, Object value) {
+            entity.setStartDate((java.sql.Timestamp) value);
+        }
+    }
+
+    public class EntityPropertyEndDateSetupper implements
+            EntityPropertySetupper<Announcement> {
+        public void setup(Announcement entity, Object value) {
+            entity.setEndDate((java.sql.Timestamp) value);
+        }
+    }
+
+    public class EntityPropertyTitleSetupper implements
+            EntityPropertySetupper<Announcement> {
+        public void setup(Announcement entity, Object value) {
+            entity.setTitle((String) value);
+        }
+    }
+
+    public class EntityPropertySortOrderSetupper implements
+            EntityPropertySetupper<Announcement> {
+        public void setup(Announcement entity, Object value) {
+            entity.setSortOrder((Integer) value);
+        }
+    }
+
+    public class EntityPropertyTimestampSetupper implements
+            EntityPropertySetupper<Announcement> {
+        public void setup(Announcement entity, Object value) {
+            entity.setTimestamp((java.sql.Timestamp) value);
+        }
+    }
+
+    // ===================================================================================
+    //                                                                              Helper
+    //                                                                              ======
+    protected Announcement downcast(Entity entity) {
+        assertObjectNotNull("entity", entity);
+        try {
+            return (Announcement) entity;
+        } catch (ClassCastException e) {
+            String msg = "The entity should be Announcement but it was: "
+                    + entity.getClass();
+            throw new RuntimeException(msg, e);
+        }
+    }
+
+    protected void checkDowncast(Entity entity) {
+        downcast(entity);
+    }
+}


Property changes on: announcement/trunk/src/main/java/jp/sf/pal/announcement/db/bsentity/dbmeta/AnnouncementDbm.java
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/java/jp/sf/pal/announcement/db/cbean/AnnouncementBodyCB.java
===================================================================
--- announcement/trunk/src/main/java/jp/sf/pal/announcement/db/cbean/AnnouncementBodyCB.java	                        (rev 0)
+++ announcement/trunk/src/main/java/jp/sf/pal/announcement/db/cbean/AnnouncementBodyCB.java	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,14 @@
+package jp.sf.pal.announcement.db.cbean;
+
+/**
+ * The condition-bean of ANNOUNCEMENT_BODY.
+ * <p>
+ * You can implement your original methods here.
+ * This class is NOT overrided when re-generating.
+ * </p>
+ * @author DBFlute(AutoGenerator)
+ */
+ @ SuppressWarnings("unchecked")
+public class AnnouncementBodyCB extends
+        jp.sf.pal.announcement.db.cbean.bs.BsAnnouncementBodyCB {
+}


Property changes on: announcement/trunk/src/main/java/jp/sf/pal/announcement/db/cbean/AnnouncementBodyCB.java
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/java/jp/sf/pal/announcement/db/cbean/AnnouncementCB.java
===================================================================
--- announcement/trunk/src/main/java/jp/sf/pal/announcement/db/cbean/AnnouncementCB.java	                        (rev 0)
+++ announcement/trunk/src/main/java/jp/sf/pal/announcement/db/cbean/AnnouncementCB.java	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,14 @@
+package jp.sf.pal.announcement.db.cbean;
+
+/**
+ * The condition-bean of ANNOUNCEMENT.
+ * <p>
+ * You can implement your original methods here.
+ * This class is NOT overrided when re-generating.
+ * </p>
+ * @author DBFlute(AutoGenerator)
+ */
+ @ SuppressWarnings("unchecked")
+public class AnnouncementCB extends
+        jp.sf.pal.announcement.db.cbean.bs.BsAnnouncementCB {
+}


Property changes on: announcement/trunk/src/main/java/jp/sf/pal/announcement/db/cbean/AnnouncementCB.java
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/java/jp/sf/pal/announcement/db/cbean/bs/BsAnnouncementBodyCB.java
===================================================================
--- announcement/trunk/src/main/java/jp/sf/pal/announcement/db/cbean/bs/BsAnnouncementBodyCB.java	                        (rev 0)
+++ announcement/trunk/src/main/java/jp/sf/pal/announcement/db/cbean/bs/BsAnnouncementBodyCB.java	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,157 @@
+package jp.sf.pal.announcement.db.cbean.bs;
+
+import jp.sf.pal.announcement.db.allcommon.cbean.AbstractConditionBean;
+import jp.sf.pal.announcement.db.allcommon.cbean.ConditionBean;
+import jp.sf.pal.announcement.db.allcommon.cbean.ConditionQuery;
+import jp.sf.pal.announcement.db.cbean.cq.AnnouncementBodyCQ;
+
+/**
+ * The base condition-bean of ANNOUNCEMENT_BODY.
+ * @author DBFlute(AutoGenerator)
+ */
+ @ SuppressWarnings("unchecked")
+public class BsAnnouncementBodyCB extends AbstractConditionBean {
+
+    // ===================================================================================
+    //                                                                          Annotation
+    //                                                                          ==========
+    /** @Deprecated */
+    public static final String TABLE = "ANNOUNCEMENT_BODY";
+
+    // ===================================================================================
+    //                                                                           Attribute
+    //                                                                           =========
+    protected AnnouncementBodyCQ _conditionQuery;
+
+    // ===================================================================================
+    //                                                                          Table Name
+    //                                                                          ==========
+    public String getTableDbName() {
+        return "ANNOUNCEMENT_BODY";
+    }
+
+    public String getTableSqlName() {
+        return "ANNOUNCEMENT_BODY";
+    }
+
+    // ===================================================================================
+    //                                                                      PrimaryKey Map
+    //                                                                      ==============
+    public void acceptPrimaryKeyMap(
+            java.util.Map<String, ? extends Object> primaryKeyMap) {
+        if (primaryKeyMap == null) {
+            String msg = "The argument[primaryKeyMap] must not be null.";
+            throw new IllegalArgumentException(msg);
+        }
+        if (primaryKeyMap.isEmpty()) {
+            String msg = "The argument[primaryKeyMap] must not be empty.";
+            throw new IllegalArgumentException(msg);
+        }
+
+        if (!primaryKeyMap.containsKey("ID")) {
+            String msg = "The primaryKeyMap must have the value of ID";
+            throw new IllegalStateException(msg + ": primaryKeyMap --> "
+                    + primaryKeyMap);
+        }
+        {
+            Object obj = primaryKeyMap.get("ID");
+            if (obj instanceof Integer) {
+                query().setId_Equal((Integer) obj);
+            } else {
+
+                if (obj instanceof Integer) {
+                    query().setId_Equal((Integer) obj);
+                } else {
+                    try {
+                        query().setId_Equal(new Integer((String) obj));
+                    } catch (RuntimeException e) {
+                        String msg = "setId(new Integer((String)obj))";
+                        throw new RuntimeException(msg
+                                + " threw the exception: value=[" + obj + "]",
+                                e);
+                    }
+                }
+            }
+        }
+
+    }
+
+    // ===================================================================================
+    //                                                                     OrderBy Setting
+    //                                                                     ===============
+    public ConditionBean addOrderBy_PK_Asc() {
+        query().addOrderBy_Id_Asc();
+        return this;
+    }
+
+    public ConditionBean addOrderBy_PK_Desc() {
+        query().addOrderBy_Id_Desc();
+        return this;
+    }
+
+    // ===================================================================================
+    //                                                                               Query
+    //                                                                               =====
+    public AnnouncementBodyCQ query() {
+        return getConditionQuery();
+    }
+
+    public AnnouncementBodyCQ getConditionQuery() {
+        if (_conditionQuery == null) {
+            _conditionQuery = new AnnouncementBodyCQ(null, getSqlClause(),
+                    getSqlClause().getLocalTableAliasName(), 0);
+        }
+        return _conditionQuery;
+    }
+
+    public ConditionQuery getConditionQueryAsInterface() {
+        return getConditionQuery();
+    }
+
+    // ===================================================================================
+    //                                                                         Union Query
+    //                                                                         ===========
+    public void union(AnnouncementBodyCQ unionQuery) {
+        query().xsetUnionQuery(unionQuery);
+    }
+
+    public void unionAll(AnnouncementBodyCQ unionAllQuery) {
+        query().xsetUnionAllQuery(unionAllQuery);
+    }
+
+    public boolean hasUnionQueryOrUnionAllQuery() {
+        return query().hasUnionQueryOrUnionAllQuery();
+    }
+
+    // ===================================================================================
+    //                                                                        Setup Select
+    //                                                                        ============
+
+    protected jp.sf.pal.announcement.db.cbean.nss.AnnouncementNss _nssAnnouncement;
+
+    public jp.sf.pal.announcement.db.cbean.nss.AnnouncementNss getNssAnnouncement() {
+        if (_nssAnnouncement == null) {
+            _nssAnnouncement = new jp.sf.pal.announcement.db.cbean.nss.AnnouncementNss(
+                    null);// for Dummy
+        }
+        return _nssAnnouncement;
+    }
+
+    public jp.sf.pal.announcement.db.cbean.nss.AnnouncementNss setupSelect_Announcement() {
+        assertSetupSelectBeforeUnion("setupSelect_Announcement()");
+        final String foreignTableAliasName = query().queryAnnouncement()
+                .getRealAliasName();
+        final String localRelationPath = query().getRelationPath();
+        getSqlClause().registerSelectedSelectColumn(foreignTableAliasName,
+                "ANNOUNCEMENT_BODY", "announcement", localRelationPath);
+        getSqlClause().registerSelectedForeignInfo(
+                query().queryAnnouncement().getRelationPath(), "announcement");
+        if (_nssAnnouncement == null || !_nssAnnouncement.hasConditionQuery()) {
+            _nssAnnouncement = new jp.sf.pal.announcement.db.cbean.nss.AnnouncementNss(
+                    query().queryAnnouncement());
+        }
+        limitSelect_Off();
+        return _nssAnnouncement;
+    }
+
+}


Property changes on: announcement/trunk/src/main/java/jp/sf/pal/announcement/db/cbean/bs/BsAnnouncementBodyCB.java
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/java/jp/sf/pal/announcement/db/cbean/bs/BsAnnouncementCB.java
===================================================================
--- announcement/trunk/src/main/java/jp/sf/pal/announcement/db/cbean/bs/BsAnnouncementCB.java	                        (rev 0)
+++ announcement/trunk/src/main/java/jp/sf/pal/announcement/db/cbean/bs/BsAnnouncementCB.java	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,159 @@
+package jp.sf.pal.announcement.db.cbean.bs;
+
+import jp.sf.pal.announcement.db.allcommon.cbean.AbstractConditionBean;
+import jp.sf.pal.announcement.db.allcommon.cbean.ConditionBean;
+import jp.sf.pal.announcement.db.allcommon.cbean.ConditionQuery;
+import jp.sf.pal.announcement.db.cbean.cq.AnnouncementCQ;
+
+/**
+ * The base condition-bean of ANNOUNCEMENT.
+ * @author DBFlute(AutoGenerator)
+ */
+ @ SuppressWarnings("unchecked")
+public class BsAnnouncementCB extends AbstractConditionBean {
+
+    // ===================================================================================
+    //                                                                          Annotation
+    //                                                                          ==========
+    /** @Deprecated */
+    public static final String TABLE = "ANNOUNCEMENT";
+
+    // ===================================================================================
+    //                                                                           Attribute
+    //                                                                           =========
+    protected AnnouncementCQ _conditionQuery;
+
+    // ===================================================================================
+    //                                                                          Table Name
+    //                                                                          ==========
+    public String getTableDbName() {
+        return "ANNOUNCEMENT";
+    }
+
+    public String getTableSqlName() {
+        return "ANNOUNCEMENT";
+    }
+
+    // ===================================================================================
+    //                                                                      PrimaryKey Map
+    //                                                                      ==============
+    public void acceptPrimaryKeyMap(
+            java.util.Map<String, ? extends Object> primaryKeyMap) {
+        if (primaryKeyMap == null) {
+            String msg = "The argument[primaryKeyMap] must not be null.";
+            throw new IllegalArgumentException(msg);
+        }
+        if (primaryKeyMap.isEmpty()) {
+            String msg = "The argument[primaryKeyMap] must not be empty.";
+            throw new IllegalArgumentException(msg);
+        }
+
+        if (!primaryKeyMap.containsKey("ID")) {
+            String msg = "The primaryKeyMap must have the value of ID";
+            throw new IllegalStateException(msg + ": primaryKeyMap --> "
+                    + primaryKeyMap);
+        }
+        {
+            Object obj = primaryKeyMap.get("ID");
+            if (obj instanceof Integer) {
+                query().setId_Equal((Integer) obj);
+            } else {
+
+                if (obj instanceof Integer) {
+                    query().setId_Equal((Integer) obj);
+                } else {
+                    try {
+                        query().setId_Equal(new Integer((String) obj));
+                    } catch (RuntimeException e) {
+                        String msg = "setId(new Integer((String)obj))";
+                        throw new RuntimeException(msg
+                                + " threw the exception: value=[" + obj + "]",
+                                e);
+                    }
+                }
+            }
+        }
+
+    }
+
+    // ===================================================================================
+    //                                                                     OrderBy Setting
+    //                                                                     ===============
+    public ConditionBean addOrderBy_PK_Asc() {
+        query().addOrderBy_Id_Asc();
+        return this;
+    }
+
+    public ConditionBean addOrderBy_PK_Desc() {
+        query().addOrderBy_Id_Desc();
+        return this;
+    }
+
+    // ===================================================================================
+    //                                                                               Query
+    //                                                                               =====
+    public AnnouncementCQ query() {
+        return getConditionQuery();
+    }
+
+    public AnnouncementCQ getConditionQuery() {
+        if (_conditionQuery == null) {
+            _conditionQuery = new AnnouncementCQ(null, getSqlClause(),
+                    getSqlClause().getLocalTableAliasName(), 0);
+        }
+        return _conditionQuery;
+    }
+
+    public ConditionQuery getConditionQueryAsInterface() {
+        return getConditionQuery();
+    }
+
+    // ===================================================================================
+    //                                                                         Union Query
+    //                                                                         ===========
+    public void union(AnnouncementCQ unionQuery) {
+        query().xsetUnionQuery(unionQuery);
+    }
+
+    public void unionAll(AnnouncementCQ unionAllQuery) {
+        query().xsetUnionAllQuery(unionAllQuery);
+    }
+
+    public boolean hasUnionQueryOrUnionAllQuery() {
+        return query().hasUnionQueryOrUnionAllQuery();
+    }
+
+    // ===================================================================================
+    //                                                                        Setup Select
+    //                                                                        ============
+
+    protected jp.sf.pal.announcement.db.cbean.nss.AnnouncementBodyNss _nssAnnouncementBodyAsOne;
+
+    public jp.sf.pal.announcement.db.cbean.nss.AnnouncementBodyNss getNssAnnouncementBodyAsOne() {
+        if (_nssAnnouncementBodyAsOne == null) {
+            _nssAnnouncementBodyAsOne = new jp.sf.pal.announcement.db.cbean.nss.AnnouncementBodyNss(
+                    null);// for Dummy
+        }
+        return _nssAnnouncementBodyAsOne;
+    }
+
+    public jp.sf.pal.announcement.db.cbean.nss.AnnouncementBodyNss setupSelect_AnnouncementBodyAsOne() {
+        assertSetupSelectBeforeUnion("setupSelect_AnnouncementBodyAsOne()");
+        final String foreignTableAliasName = query()
+                .queryAnnouncementBodyAsOne().getRealAliasName();
+        final String localRelationPath = query().getRelationPath();
+        getSqlClause().registerSelectedSelectColumn(foreignTableAliasName,
+                "ANNOUNCEMENT", "announcementBodyAsOne", localRelationPath);
+        getSqlClause().registerSelectedForeignInfo(
+                query().queryAnnouncementBodyAsOne().getRelationPath(),
+                "announcementBodyAsOne");
+        if (_nssAnnouncementBodyAsOne == null
+                || !_nssAnnouncementBodyAsOne.hasConditionQuery()) {
+            _nssAnnouncementBodyAsOne = new jp.sf.pal.announcement.db.cbean.nss.AnnouncementBodyNss(
+                    query().queryAnnouncementBodyAsOne());
+        }
+        limitSelect_Off();
+        return _nssAnnouncementBodyAsOne;
+    }
+
+}


Property changes on: announcement/trunk/src/main/java/jp/sf/pal/announcement/db/cbean/bs/BsAnnouncementCB.java
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/java/jp/sf/pal/announcement/db/cbean/cq/AnnouncementBodyCQ.java
===================================================================
--- announcement/trunk/src/main/java/jp/sf/pal/announcement/db/cbean/cq/AnnouncementBodyCQ.java	                        (rev 0)
+++ announcement/trunk/src/main/java/jp/sf/pal/announcement/db/cbean/cq/AnnouncementBodyCQ.java	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,40 @@
+package jp.sf.pal.announcement.db.cbean.cq;
+
+import jp.sf.pal.announcement.db.allcommon.cbean.ConditionQuery;
+import jp.sf.pal.announcement.db.allcommon.cbean.sqlclause.SqlClause;
+import jp.sf.pal.announcement.db.cbean.cq.bs.BsAnnouncementBodyCQ;
+
+/**
+ * The condition-query of ANNOUNCEMENT_BODY.
+ * <p>
+ * You can implement your original methods here.
+ * This class is NOT overrided when re-generating.
+ * </p>
+ * @author DBFlute(AutoGenerator)
+ */
+ @ SuppressWarnings("unchecked")
+public class AnnouncementBodyCQ extends BsAnnouncementBodyCQ {
+
+    // ===================================================================================
+    //                                                                         Constructor
+    //                                                                         ===========
+    /**
+     * Constructor.
+     * @param childQuery Child query as abstract class. (Nullable: If null, this is base instance.)
+     * @param sqlClause SQL clause instance. (NotNull)
+     * @param aliasName My alias name. (NotNull)
+     * @param nestLevel Nest level.
+     */
+    public AnnouncementBodyCQ(ConditionQuery childQuery, SqlClause sqlClause,
+            String aliasName, int nestLevel) {
+        super(childQuery, sqlClause, aliasName, nestLevel);
+    }
+
+    // ===================================================================================
+    //                                                                      Arrange Method
+    //                                                                      ==============
+    // You can make original arrange query methods here.
+    // public void arranegeXxx() {
+    //     ...
+    // }
+}


Property changes on: announcement/trunk/src/main/java/jp/sf/pal/announcement/db/cbean/cq/AnnouncementBodyCQ.java
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/java/jp/sf/pal/announcement/db/cbean/cq/AnnouncementCQ.java
===================================================================
--- announcement/trunk/src/main/java/jp/sf/pal/announcement/db/cbean/cq/AnnouncementCQ.java	                        (rev 0)
+++ announcement/trunk/src/main/java/jp/sf/pal/announcement/db/cbean/cq/AnnouncementCQ.java	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,40 @@
+package jp.sf.pal.announcement.db.cbean.cq;
+
+import jp.sf.pal.announcement.db.allcommon.cbean.ConditionQuery;
+import jp.sf.pal.announcement.db.allcommon.cbean.sqlclause.SqlClause;
+import jp.sf.pal.announcement.db.cbean.cq.bs.BsAnnouncementCQ;
+
+/**
+ * The condition-query of ANNOUNCEMENT.
+ * <p>
+ * You can implement your original methods here.
+ * This class is NOT overrided when re-generating.
+ * </p>
+ * @author DBFlute(AutoGenerator)
+ */
+ @ SuppressWarnings("unchecked")
+public class AnnouncementCQ extends BsAnnouncementCQ {
+
+    // ===================================================================================
+    //                                                                         Constructor
+    //                                                                         ===========
+    /**
+     * Constructor.
+     * @param childQuery Child query as abstract class. (Nullable: If null, this is base instance.)
+     * @param sqlClause SQL clause instance. (NotNull)
+     * @param aliasName My alias name. (NotNull)
+     * @param nestLevel Nest level.
+     */
+    public AnnouncementCQ(ConditionQuery childQuery, SqlClause sqlClause,
+            String aliasName, int nestLevel) {
+        super(childQuery, sqlClause, aliasName, nestLevel);
+    }
+
+    // ===================================================================================
+    //                                                                      Arrange Method
+    //                                                                      ==============
+    // You can make original arrange query methods here.
+    // public void arranegeXxx() {
+    //     ...
+    // }
+}


Property changes on: announcement/trunk/src/main/java/jp/sf/pal/announcement/db/cbean/cq/AnnouncementCQ.java
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/java/jp/sf/pal/announcement/db/cbean/cq/bs/AbstractBsAnnouncementBodyCQ.java
===================================================================
--- announcement/trunk/src/main/java/jp/sf/pal/announcement/db/cbean/cq/bs/AbstractBsAnnouncementBodyCQ.java	                        (rev 0)
+++ announcement/trunk/src/main/java/jp/sf/pal/announcement/db/cbean/cq/bs/AbstractBsAnnouncementBodyCQ.java	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,247 @@
+package jp.sf.pal.announcement.db.cbean.cq.bs;
+
+import java.util.Collection;
+
+import jp.sf.pal.announcement.db.allcommon.cbean.AbstractConditionQuery;
+import jp.sf.pal.announcement.db.allcommon.cbean.ConditionQuery;
+import jp.sf.pal.announcement.db.allcommon.cbean.ckey.ConditionKey;
+import jp.sf.pal.announcement.db.allcommon.cbean.cvalue.ConditionValue;
+import jp.sf.pal.announcement.db.allcommon.cbean.sqlclause.SqlClause;
+
+/**
+ * The abstract condition-query of ANNOUNCEMENT_BODY.
+ * @author DBFlute(AutoGenerator)
+ */
+ @ SuppressWarnings("unchecked")
+public abstract class AbstractBsAnnouncementBodyCQ extends
+        AbstractConditionQuery {
+
+    // ===================================================================================
+    //                                                                         Constructor
+    //                                                                         ===========
+    public AbstractBsAnnouncementBodyCQ(ConditionQuery childQuery,
+            SqlClause sqlClause, String aliasName, int nestLevel) {
+        super(childQuery, sqlClause, aliasName, nestLevel);
+    }
+
+    // ===================================================================================
+    //                                                                          Table Name
+    //                                                                          ==========
+    public String getTableDbName() {
+        return "ANNOUNCEMENT_BODY";
+    }
+
+    public String getTableSqlName() {
+        return "ANNOUNCEMENT_BODY";
+    }
+
+    // ===================================================================================
+    //                                                                               Query
+    //                                                                               =====
+
+    /**
+     * Equal(=). And NullIgnored, OnceRegistered. {PK : int : NotNull : FK to ANNOUNCEMENT}
+     * @param id The value of id as equal.
+     */
+    public void setId_Equal(Integer id) {
+        registerId(ConditionKey.CK_EQUAL, id);
+    }
+
+    /**
+     * NotEqual(!=). And NullIgnored, OnceRegistered.
+     * @param id The value of id as notEqual.
+     */
+    public void setId_NotEqual(Integer id) {
+        registerId(ConditionKey.CK_NOT_EQUAL, id);
+    }
+
+    /**
+     * GreaterThan(&gt;). And NullIgnored, OnceRegistered.
+     * @param id The value of id as greaterThan.
+     */
+    public void setId_GreaterThan(Integer id) {
+        registerId(ConditionKey.CK_GREATER_THAN, id);
+    }
+
+    /**
+     * LessThan(&lt;). And NullIgnored, OnceRegistered.
+     * @param id The value of id as lessThan.
+     */
+    public void setId_LessThan(Integer id) {
+        registerId(ConditionKey.CK_LESS_THAN, id);
+    }
+
+    /**
+     * GreaterEqual(&gt;=). And NullIgnored, OnceRegistered.
+     * @param id The value of id as greaterEqual.
+     */
+    public void setId_GreaterEqual(Integer id) {
+        registerId(ConditionKey.CK_GREATER_EQUAL, id);
+    }
+
+    /**
+     * LessEqual(&lt;=). And NullIgnored, OnceRegistered.
+     * @param id The value of id as lessEqual.
+     */
+    public void setId_LessEqual(Integer id) {
+        registerId(ConditionKey.CK_LESS_EQUAL, id);
+    }
+
+    /**
+     * InScope(in (1, 2)). And NullIgnored, NullElementIgnored, SeveralRegistered.
+     * @param idList The collection of id as inScope.
+     */
+    public void setId_InScope(Collection<Integer> idList) {
+        registerId(ConditionKey.CK_IN_SCOPE, convertToList(idList));
+    }
+
+    /**
+     * NotInScope(not in (1, 2)). And NullIgnored, NullElementIgnored, SeveralRegistered.
+     * @param idList The collection of id as notInScope.
+     */
+    public void setId_NotInScope(Collection<Integer> idList) {
+        registerId(ConditionKey.CK_NOT_IN_SCOPE, convertToList(idList));
+    }
+
+    /**
+     * InScopeSubQuery{in (select xxx.ID from ANNOUNCEMENT where ...)}.
+     * @param announcementCBquery The sub-query of Id_InScopeSubQuery_Announcement using inScopeSubQuery. (NotNull)
+     */
+    public void setId_InScopeSubQuery_Announcement(
+            jp.sf.pal.announcement.db.cbean.cq.AnnouncementCQ announcementCBquery) {
+        assertObjectNotNull("announcementCBquery", announcementCBquery);
+        final String subQueryPropertyName = keepId_InScopeSubQuery_Announcement(announcementCBquery);// for saving query-value.
+        registerInScopeSubQuery(announcementCBquery, "ID", "ID",
+                subQueryPropertyName);
+    }
+
+    abstract public String keepId_InScopeSubQuery_Announcement(
+            jp.sf.pal.announcement.db.cbean.cq.AnnouncementCQ subQuery);
+
+    protected void registerId(ConditionKey key, Object value) {
+        registerQuery(key, value, getCValueId(), "ID", "Id", "id");
+    }
+
+    protected void registerInlineId(ConditionKey key, Object value) {
+        registerInlineQuery(key, value, getCValueId(), "ID", "Id", "id");
+    }
+
+    abstract protected ConditionValue getCValueId();
+
+    /**
+     * Equal(=). And NullOrEmptyIgnored, OnceRegistered. {text(65535) : NotNull}
+     * @param content The value of content as equal.
+     */
+    public void setContent_Equal(String content) {
+        registerContent(ConditionKey.CK_EQUAL, filterRemoveEmptyString(content));
+    }
+
+    /**
+     * NotEqual(!=). And NullOrEmptyIgnored, OnceRegistered.
+     * @param content The value of content as notEqual.
+     */
+    public void setContent_NotEqual(String content) {
+        registerContent(ConditionKey.CK_NOT_EQUAL,
+                filterRemoveEmptyString(content));
+    }
+
+    /**
+     * GreaterThan(&gt;). And NullOrEmptyIgnored, OnceRegistered.
+     * @param content The value of content as greaterThan.
+     */
+    public void setContent_GreaterThan(String content) {
+        registerContent(ConditionKey.CK_GREATER_THAN,
+                filterRemoveEmptyString(content));
+    }
+
+    /**
+     * LessThan(&lt;). And NullOrEmptyIgnored, OnceRegistered.
+     * @param content The value of content as lessThan.
+     */
+    public void setContent_LessThan(String content) {
+        registerContent(ConditionKey.CK_LESS_THAN,
+                filterRemoveEmptyString(content));
+    }
+
+    /**
+     * GreaterEqual(&gt;=). And NullOrEmptyIgnored, OnceRegistered.
+     * @param content The value of content as greaterEqual.
+     */
+    public void setContent_GreaterEqual(String content) {
+        registerContent(ConditionKey.CK_GREATER_EQUAL,
+                filterRemoveEmptyString(content));
+    }
+
+    /**
+     * LessEqual(&lt;=). And NullOrEmptyIgnored, OnceRegistered.
+     * @param content The value of content as lessEqual.
+     */
+    public void setContent_LessEqual(String content) {
+        registerContent(ConditionKey.CK_LESS_EQUAL,
+                filterRemoveEmptyString(content));
+    }
+
+    /**
+     * PrefixSearch(like 'xxx%'). And NullOrEmptyIgnored, OnceRegistered.
+     * @param content The value of content as prefixSearch.
+     */
+    public void setContent_PrefixSearch(String content) {
+        registerContent(ConditionKey.CK_PREFIX_SEARCH,
+                filterRemoveEmptyString(content));
+    }
+
+    /**
+     * LikeSearch(like 'xxx%' escape ...). And NullOrEmptyIgnored, SeveralRegistered.
+     * @param content The value of content as likeSearch.
+     * @param likeSearchOption The option of like-search. (NotNull)
+     */
+    public void setContent_LikeSearch(
+            String content,
+            jp.sf.pal.announcement.db.allcommon.cbean.coption.LikeSearchOption likeSearchOption) {
+        registerLikeSearchQuery(ConditionKey.CK_LIKE_SEARCH,
+                filterRemoveEmptyString(content), getCValueContent(),
+                "CONTENT", "Content", "content", likeSearchOption);
+    }
+
+    /**
+     * InScope(in ('a', 'b')). And NullOrEmptyIgnored, NullOrEmptyElementIgnored, SeveralRegistered.
+     * @param contentList The collection of content as inScope.
+     */
+    public void setContent_InScope(Collection<String> contentList) {
+        registerContent(ConditionKey.CK_IN_SCOPE, convertToList(contentList));
+    }
+
+    /**
+     * InScope(in ('a', 'b')). And NullOrEmptyIgnored, NullOrEmptyElementIgnored, SeveralRegistered.
+     * @param content The collection of content as inScope.
+     * @param inScopeOption The option of in-scope. (NotNull)
+     */
+    public void setContent_InScope(
+            String content,
+            jp.sf.pal.announcement.db.allcommon.cbean.coption.InScopeOption inScopeOption) {
+        registerInScopeQuery(ConditionKey.CK_IN_SCOPE,
+                filterRemoveEmptyString(content), getCValueContent(),
+                "CONTENT", "Content", "content", inScopeOption);
+    }
+
+    /**
+     * NotInScope(not in ('a', 'b')). And NullOrEmptyIgnored, NullOrEmptyElementIgnored, SeveralRegistered.
+     * @param contentList The collection of content as notInScope.
+     */
+    public void setContent_NotInScope(Collection<String> contentList) {
+        registerContent(ConditionKey.CK_NOT_IN_SCOPE,
+                convertToList(contentList));
+    }
+
+    protected void registerContent(ConditionKey key, Object value) {
+        registerQuery(key, value, getCValueContent(), "CONTENT", "Content",
+                "content");
+    }
+
+    protected void registerInlineContent(ConditionKey key, Object value) {
+        registerInlineQuery(key, value, getCValueContent(), "CONTENT",
+                "Content", "content");
+    }
+
+    abstract protected ConditionValue getCValueContent();
+}


Property changes on: announcement/trunk/src/main/java/jp/sf/pal/announcement/db/cbean/cq/bs/AbstractBsAnnouncementBodyCQ.java
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/java/jp/sf/pal/announcement/db/cbean/cq/bs/AbstractBsAnnouncementCQ.java
===================================================================
--- announcement/trunk/src/main/java/jp/sf/pal/announcement/db/cbean/cq/bs/AbstractBsAnnouncementCQ.java	                        (rev 0)
+++ announcement/trunk/src/main/java/jp/sf/pal/announcement/db/cbean/cq/bs/AbstractBsAnnouncementCQ.java	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,868 @@
+package jp.sf.pal.announcement.db.cbean.cq.bs;
+
+import java.util.Collection;
+
+import jp.sf.pal.announcement.db.allcommon.cbean.AbstractConditionQuery;
+import jp.sf.pal.announcement.db.allcommon.cbean.ConditionQuery;
+import jp.sf.pal.announcement.db.allcommon.cbean.ckey.ConditionKey;
+import jp.sf.pal.announcement.db.allcommon.cbean.cvalue.ConditionValue;
+import jp.sf.pal.announcement.db.allcommon.cbean.sqlclause.SqlClause;
+
+/**
+ * The abstract condition-query of ANNOUNCEMENT.
+ * @author DBFlute(AutoGenerator)
+ */
+ @ SuppressWarnings("unchecked")
+public abstract class AbstractBsAnnouncementCQ extends AbstractConditionQuery {
+
+    // ===================================================================================
+    //                                                                         Constructor
+    //                                                                         ===========
+    public AbstractBsAnnouncementCQ(ConditionQuery childQuery,
+            SqlClause sqlClause, String aliasName, int nestLevel) {
+        super(childQuery, sqlClause, aliasName, nestLevel);
+    }
+
+    // ===================================================================================
+    //                                                                          Table Name
+    //                                                                          ==========
+    public String getTableDbName() {
+        return "ANNOUNCEMENT";
+    }
+
+    public String getTableSqlName() {
+        return "ANNOUNCEMENT";
+    }
+
+    // ===================================================================================
+    //                                                                               Query
+    //                                                                               =====
+
+    /**
+     * Equal(=). And NullIgnored, OnceRegistered. {PK : INC : int : NotNull}
+     * @param id The value of id as equal.
+     */
+    public void setId_Equal(Integer id) {
+        registerId(ConditionKey.CK_EQUAL, id);
+    }
+
+    /**
+     * NotEqual(!=). And NullIgnored, OnceRegistered.
+     * @param id The value of id as notEqual.
+     */
+    public void setId_NotEqual(Integer id) {
+        registerId(ConditionKey.CK_NOT_EQUAL, id);
+    }
+
+    /**
+     * GreaterThan(&gt;). And NullIgnored, OnceRegistered.
+     * @param id The value of id as greaterThan.
+     */
+    public void setId_GreaterThan(Integer id) {
+        registerId(ConditionKey.CK_GREATER_THAN, id);
+    }
+
+    /**
+     * LessThan(&lt;). And NullIgnored, OnceRegistered.
+     * @param id The value of id as lessThan.
+     */
+    public void setId_LessThan(Integer id) {
+        registerId(ConditionKey.CK_LESS_THAN, id);
+    }
+
+    /**
+     * GreaterEqual(&gt;=). And NullIgnored, OnceRegistered.
+     * @param id The value of id as greaterEqual.
+     */
+    public void setId_GreaterEqual(Integer id) {
+        registerId(ConditionKey.CK_GREATER_EQUAL, id);
+    }
+
+    /**
+     * LessEqual(&lt;=). And NullIgnored, OnceRegistered.
+     * @param id The value of id as lessEqual.
+     */
+    public void setId_LessEqual(Integer id) {
+        registerId(ConditionKey.CK_LESS_EQUAL, id);
+    }
+
+    /**
+     * InScope(in (1, 2)). And NullIgnored, NullElementIgnored, SeveralRegistered.
+     * @param idList The collection of id as inScope.
+     */
+    public void setId_InScope(Collection<Integer> idList) {
+        registerId(ConditionKey.CK_IN_SCOPE, convertToList(idList));
+    }
+
+    /**
+     * NotInScope(not in (1, 2)). And NullIgnored, NullElementIgnored, SeveralRegistered.
+     * @param idList The collection of id as notInScope.
+     */
+    public void setId_NotInScope(Collection<Integer> idList) {
+        registerId(ConditionKey.CK_NOT_IN_SCOPE, convertToList(idList));
+    }
+
+    /**
+     * InScopeSubQuery{in (select xxx.ID from ANNOUNCEMENT_BODY where ...)}.
+     * @param announcementBodyCBquery The sub-query of Id_InScopeSubQuery_AnnouncementBodyList using inScopeSubQuery. (NotNull)
+     */
+    public void setId_InScopeSubQuery_AnnouncementBodyList(
+            jp.sf.pal.announcement.db.cbean.cq.AnnouncementBodyCQ announcementBodyCBquery) {
+        assertObjectNotNull("announcementBodyCBquery", announcementBodyCBquery);
+        final String subQueryPropertyName = keepId_InScopeSubQuery_AnnouncementBodyList(announcementBodyCBquery);// for saving query-value.
+        registerInScopeSubQuery(announcementBodyCBquery, "ID", "ID",
+                subQueryPropertyName);
+    }
+
+    abstract public String keepId_InScopeSubQuery_AnnouncementBodyList(
+            jp.sf.pal.announcement.db.cbean.cq.AnnouncementBodyCQ subQuery);
+
+    /**
+     * ExistsSubQuery{exists (select xxx.ID from ANNOUNCEMENT_BODY where ...)}.
+     * @param announcementBodyCBquery The sub-query of Id_ExistsSubQuery_AnnouncementBodyList using existsSubQuery. (NotNull)
+     */
+    public void setId_ExistsSubQuery_AnnouncementBodyList(
+            jp.sf.pal.announcement.db.cbean.cq.AnnouncementBodyCQ announcementBodyCBquery) {
+        assertObjectNotNull("announcementBodyCBquery", announcementBodyCBquery);
+        final String subQueryPropertyName = keepId_ExistsSubQuery_AnnouncementBodyList(announcementBodyCBquery);// for saving query-value.
+        registerExistsSubQuery(announcementBodyCBquery, "ID", "ID",
+                subQueryPropertyName);
+    }
+
+    abstract public String keepId_ExistsSubQuery_AnnouncementBodyList(
+            jp.sf.pal.announcement.db.cbean.cq.AnnouncementBodyCQ subQuery);
+
+    protected void registerId(ConditionKey key, Object value) {
+        registerQuery(key, value, getCValueId(), "ID", "Id", "id");
+    }
+
+    protected void registerInlineId(ConditionKey key, Object value) {
+        registerInlineQuery(key, value, getCValueId(), "ID", "Id", "id");
+    }
+
+    abstract protected ConditionValue getCValueId();
+
+    /**
+     * Equal(=). And NullOrEmptyIgnored, OnceRegistered. {varchar(20) : NotNull}
+     * @param scope The value of scope as equal.
+     */
+    public void setScope_Equal(String scope) {
+        registerScope(ConditionKey.CK_EQUAL, filterRemoveEmptyString(scope));
+    }
+
+    /**
+     * NotEqual(!=). And NullOrEmptyIgnored, OnceRegistered.
+     * @param scope The value of scope as notEqual.
+     */
+    public void setScope_NotEqual(String scope) {
+        registerScope(ConditionKey.CK_NOT_EQUAL, filterRemoveEmptyString(scope));
+    }
+
+    /**
+     * GreaterThan(&gt;). And NullOrEmptyIgnored, OnceRegistered.
+     * @param scope The value of scope as greaterThan.
+     */
+    public void setScope_GreaterThan(String scope) {
+        registerScope(ConditionKey.CK_GREATER_THAN,
+                filterRemoveEmptyString(scope));
+    }
+
+    /**
+     * LessThan(&lt;). And NullOrEmptyIgnored, OnceRegistered.
+     * @param scope The value of scope as lessThan.
+     */
+    public void setScope_LessThan(String scope) {
+        registerScope(ConditionKey.CK_LESS_THAN, filterRemoveEmptyString(scope));
+    }
+
+    /**
+     * GreaterEqual(&gt;=). And NullOrEmptyIgnored, OnceRegistered.
+     * @param scope The value of scope as greaterEqual.
+     */
+    public void setScope_GreaterEqual(String scope) {
+        registerScope(ConditionKey.CK_GREATER_EQUAL,
+                filterRemoveEmptyString(scope));
+    }
+
+    /**
+     * LessEqual(&lt;=). And NullOrEmptyIgnored, OnceRegistered.
+     * @param scope The value of scope as lessEqual.
+     */
+    public void setScope_LessEqual(String scope) {
+        registerScope(ConditionKey.CK_LESS_EQUAL,
+                filterRemoveEmptyString(scope));
+    }
+
+    /**
+     * PrefixSearch(like 'xxx%'). And NullOrEmptyIgnored, OnceRegistered.
+     * @param scope The value of scope as prefixSearch.
+     */
+    public void setScope_PrefixSearch(String scope) {
+        registerScope(ConditionKey.CK_PREFIX_SEARCH,
+                filterRemoveEmptyString(scope));
+    }
+
+    /**
+     * LikeSearch(like 'xxx%' escape ...). And NullOrEmptyIgnored, SeveralRegistered.
+     * @param scope The value of scope as likeSearch.
+     * @param likeSearchOption The option of like-search. (NotNull)
+     */
+    public void setScope_LikeSearch(
+            String scope,
+            jp.sf.pal.announcement.db.allcommon.cbean.coption.LikeSearchOption likeSearchOption) {
+        registerLikeSearchQuery(ConditionKey.CK_LIKE_SEARCH,
+                filterRemoveEmptyString(scope), getCValueScope(), "SCOPE",
+                "Scope", "scope", likeSearchOption);
+    }
+
+    /**
+     * InScope(in ('a', 'b')). And NullOrEmptyIgnored, NullOrEmptyElementIgnored, SeveralRegistered.
+     * @param scopeList The collection of scope as inScope.
+     */
+    public void setScope_InScope(Collection<String> scopeList) {
+        registerScope(ConditionKey.CK_IN_SCOPE, convertToList(scopeList));
+    }
+
+    /**
+     * InScope(in ('a', 'b')). And NullOrEmptyIgnored, NullOrEmptyElementIgnored, SeveralRegistered.
+     * @param scope The collection of scope as inScope.
+     * @param inScopeOption The option of in-scope. (NotNull)
+     */
+    public void setScope_InScope(
+            String scope,
+            jp.sf.pal.announcement.db.allcommon.cbean.coption.InScopeOption inScopeOption) {
+        registerInScopeQuery(ConditionKey.CK_IN_SCOPE,
+                filterRemoveEmptyString(scope), getCValueScope(), "SCOPE",
+                "Scope", "scope", inScopeOption);
+    }
+
+    /**
+     * NotInScope(not in ('a', 'b')). And NullOrEmptyIgnored, NullOrEmptyElementIgnored, SeveralRegistered.
+     * @param scopeList The collection of scope as notInScope.
+     */
+    public void setScope_NotInScope(Collection<String> scopeList) {
+        registerScope(ConditionKey.CK_NOT_IN_SCOPE, convertToList(scopeList));
+    }
+
+    protected void registerScope(ConditionKey key, Object value) {
+        registerQuery(key, value, getCValueScope(), "SCOPE", "Scope", "scope");
+    }
+
+    protected void registerInlineScope(ConditionKey key, Object value) {
+        registerInlineQuery(key, value, getCValueScope(), "SCOPE", "Scope",
+                "scope");
+    }
+
+    abstract protected ConditionValue getCValueScope();
+
+    /**
+     * Equal(=). And NullOrEmptyIgnored, OnceRegistered. {varchar(100)}
+     * @param role The value of role as equal.
+     */
+    public void setRole_Equal(String role) {
+        registerRole(ConditionKey.CK_EQUAL, filterRemoveEmptyString(role));
+    }
+
+    /**
+     * NotEqual(!=). And NullOrEmptyIgnored, OnceRegistered.
+     * @param role The value of role as notEqual.
+     */
+    public void setRole_NotEqual(String role) {
+        registerRole(ConditionKey.CK_NOT_EQUAL, filterRemoveEmptyString(role));
+    }
+
+    /**
+     * GreaterThan(&gt;). And NullOrEmptyIgnored, OnceRegistered.
+     * @param role The value of role as greaterThan.
+     */
+    public void setRole_GreaterThan(String role) {
+        registerRole(ConditionKey.CK_GREATER_THAN,
+                filterRemoveEmptyString(role));
+    }
+
+    /**
+     * LessThan(&lt;). And NullOrEmptyIgnored, OnceRegistered.
+     * @param role The value of role as lessThan.
+     */
+    public void setRole_LessThan(String role) {
+        registerRole(ConditionKey.CK_LESS_THAN, filterRemoveEmptyString(role));
+    }
+
+    /**
+     * GreaterEqual(&gt;=). And NullOrEmptyIgnored, OnceRegistered.
+     * @param role The value of role as greaterEqual.
+     */
+    public void setRole_GreaterEqual(String role) {
+        registerRole(ConditionKey.CK_GREATER_EQUAL,
+                filterRemoveEmptyString(role));
+    }
+
+    /**
+     * LessEqual(&lt;=). And NullOrEmptyIgnored, OnceRegistered.
+     * @param role The value of role as lessEqual.
+     */
+    public void setRole_LessEqual(String role) {
+        registerRole(ConditionKey.CK_LESS_EQUAL, filterRemoveEmptyString(role));
+    }
+
+    /**
+     * PrefixSearch(like 'xxx%'). And NullOrEmptyIgnored, OnceRegistered.
+     * @param role The value of role as prefixSearch.
+     */
+    public void setRole_PrefixSearch(String role) {
+        registerRole(ConditionKey.CK_PREFIX_SEARCH,
+                filterRemoveEmptyString(role));
+    }
+
+    /**
+     * LikeSearch(like 'xxx%' escape ...). And NullOrEmptyIgnored, SeveralRegistered.
+     * @param role The value of role as likeSearch.
+     * @param likeSearchOption The option of like-search. (NotNull)
+     */
+    public void setRole_LikeSearch(
+            String role,
+            jp.sf.pal.announcement.db.allcommon.cbean.coption.LikeSearchOption likeSearchOption) {
+        registerLikeSearchQuery(ConditionKey.CK_LIKE_SEARCH,
+                filterRemoveEmptyString(role), getCValueRole(), "ROLE", "Role",
+                "role", likeSearchOption);
+    }
+
+    /**
+     * InScope(in ('a', 'b')). And NullOrEmptyIgnored, NullOrEmptyElementIgnored, SeveralRegistered.
+     * @param roleList The collection of role as inScope.
+     */
+    public void setRole_InScope(Collection<String> roleList) {
+        registerRole(ConditionKey.CK_IN_SCOPE, convertToList(roleList));
+    }
+
+    /**
+     * InScope(in ('a', 'b')). And NullOrEmptyIgnored, NullOrEmptyElementIgnored, SeveralRegistered.
+     * @param role The collection of role as inScope.
+     * @param inScopeOption The option of in-scope. (NotNull)
+     */
+    public void setRole_InScope(
+            String role,
+            jp.sf.pal.announcement.db.allcommon.cbean.coption.InScopeOption inScopeOption) {
+        registerInScopeQuery(ConditionKey.CK_IN_SCOPE,
+                filterRemoveEmptyString(role), getCValueRole(), "ROLE", "Role",
+                "role", inScopeOption);
+    }
+
+    /**
+     * NotInScope(not in ('a', 'b')). And NullOrEmptyIgnored, NullOrEmptyElementIgnored, SeveralRegistered.
+     * @param roleList The collection of role as notInScope.
+     */
+    public void setRole_NotInScope(Collection<String> roleList) {
+        registerRole(ConditionKey.CK_NOT_IN_SCOPE, convertToList(roleList));
+    }
+
+    /**
+     * IsNull(is null). And OnceRegistered. {varchar(100)}
+     */
+    public void setRole_IsNull() {
+        registerRole(ConditionKey.CK_IS_NULL, DUMMY_OBJECT);
+    }
+
+    /**
+     * IsNotNull(is not null). And OnceRegistered. {varchar(100)}
+     */
+    public void setRole_IsNotNull() {
+        registerRole(ConditionKey.CK_IS_NOT_NULL, DUMMY_OBJECT);
+    }
+
+    protected void registerRole(ConditionKey key, Object value) {
+        registerQuery(key, value, getCValueRole(), "ROLE", "Role", "role");
+    }
+
+    protected void registerInlineRole(ConditionKey key, Object value) {
+        registerInlineQuery(key, value, getCValueRole(), "ROLE", "Role", "role");
+    }
+
+    abstract protected ConditionValue getCValueRole();
+
+    /**
+     * Equal(=). And NullIgnored, OnceRegistered. {datetime}
+     * @param startDate The value of startDate as equal.
+     */
+    public void setStartDate_Equal(java.sql.Timestamp startDate) {
+        registerStartDate(ConditionKey.CK_EQUAL, startDate);
+    }
+
+    /**
+     * NotEqual(!=). And NullIgnored, OnceRegistered.
+     * @param startDate The value of startDate as notEqual.
+     */
+    public void setStartDate_NotEqual(java.sql.Timestamp startDate) {
+        registerStartDate(ConditionKey.CK_NOT_EQUAL, startDate);
+    }
+
+    /**
+     * GreaterThan(&gt;). And NullIgnored, OnceRegistered.
+     * @param startDate The value of startDate as greaterThan.
+     */
+    public void setStartDate_GreaterThan(java.sql.Timestamp startDate) {
+        registerStartDate(ConditionKey.CK_GREATER_THAN, startDate);
+    }
+
+    /**
+     * LessThan(&gt;). And NullIgnored, OnceRegistered.
+     * @param startDate The value of startDate as lessThan.
+     */
+    public void setStartDate_LessThan(java.sql.Timestamp startDate) {
+        registerStartDate(ConditionKey.CK_LESS_THAN, startDate);
+    }
+
+    /**
+     * GreaterEqual(&gt;). And NullIgnored, OnceRegistered.
+     * @param startDate The value of startDate as greaterEqual.
+     */
+    public void setStartDate_GreaterEqual(java.sql.Timestamp startDate) {
+        registerStartDate(ConditionKey.CK_GREATER_EQUAL, startDate);
+    }
+
+    /**
+     * LessEqual(&gt;). And NullIgnored, OnceRegistered.
+     * @param startDate The value of startDate as lessEqual.
+     */
+    public void setStartDate_LessEqual(java.sql.Timestamp startDate) {
+        registerStartDate(ConditionKey.CK_LESS_EQUAL, startDate);
+    }
+
+    /**
+     * FromTo($fromDate &lt;= COLUMN_NAME &lt;= $toDate). And NullIgnored, OnceRegistered. {datetime}
+     * @param fromDate The from-date of startDate. (Nullable)
+     * @param toDate The to-date of startDate. (Nullable)
+     * @param fromToOption The option of from-to. (NotNull)
+     */
+    public void setStartDate_FromTo(
+            java.util.Date fromDate,
+            java.util.Date toDate,
+            jp.sf.pal.announcement.db.allcommon.cbean.coption.FromToOption fromToOption) {
+        registerFromToQuery((fromDate != null ? new java.sql.Timestamp(fromDate
+                .getTime()) : null), (toDate != null ? new java.sql.Timestamp(
+                toDate.getTime()) : null), getCValueStartDate(), "START_DATE",
+                "StartDate", "startDate", fromToOption);
+    }
+
+    /**
+     * FromTo($fromDate &lt;= COLUMN_NAME &lt; $toDate + 1). And NullIgnored, OnceRegistered. {datetime}
+     * @param fromDate The from-date of startDate. (Nullable)
+     * @param toDate The to-date of startDate. (Nullable)
+     */
+    public void setStartDate_DateFromTo(java.util.Date fromDate,
+            java.util.Date toDate) {
+        setStartDate_FromTo(
+                fromDate,
+                toDate,
+                new jp.sf.pal.announcement.db.allcommon.cbean.coption.DateFromToOption());
+    }
+
+    /**
+     * IsNull(is null). And OnceRegistered. {datetime}
+     */
+    public void setStartDate_IsNull() {
+        registerStartDate(ConditionKey.CK_IS_NULL, DUMMY_OBJECT);
+    }
+
+    /**
+     * IsNotNull(is not null). And OnceRegistered. {datetime}
+     */
+    public void setStartDate_IsNotNull() {
+        registerStartDate(ConditionKey.CK_IS_NOT_NULL, DUMMY_OBJECT);
+    }
+
+    protected void registerStartDate(ConditionKey key, Object value) {
+        registerQuery(key, value, getCValueStartDate(), "START_DATE",
+                "StartDate", "startDate");
+    }
+
+    protected void registerInlineStartDate(ConditionKey key, Object value) {
+        registerInlineQuery(key, value, getCValueStartDate(), "START_DATE",
+                "StartDate", "startDate");
+    }
+
+    abstract protected ConditionValue getCValueStartDate();
+
+    /**
+     * Equal(=). And NullIgnored, OnceRegistered. {datetime}
+     * @param endDate The value of endDate as equal.
+     */
+    public void setEndDate_Equal(java.sql.Timestamp endDate) {
+        registerEndDate(ConditionKey.CK_EQUAL, endDate);
+    }
+
+    /**
+     * NotEqual(!=). And NullIgnored, OnceRegistered.
+     * @param endDate The value of endDate as notEqual.
+     */
+    public void setEndDate_NotEqual(java.sql.Timestamp endDate) {
+        registerEndDate(ConditionKey.CK_NOT_EQUAL, endDate);
+    }
+
+    /**
+     * GreaterThan(&gt;). And NullIgnored, OnceRegistered.
+     * @param endDate The value of endDate as greaterThan.
+     */
+    public void setEndDate_GreaterThan(java.sql.Timestamp endDate) {
+        registerEndDate(ConditionKey.CK_GREATER_THAN, endDate);
+    }
+
+    /**
+     * LessThan(&gt;). And NullIgnored, OnceRegistered.
+     * @param endDate The value of endDate as lessThan.
+     */
+    public void setEndDate_LessThan(java.sql.Timestamp endDate) {
+        registerEndDate(ConditionKey.CK_LESS_THAN, endDate);
+    }
+
+    /**
+     * GreaterEqual(&gt;). And NullIgnored, OnceRegistered.
+     * @param endDate The value of endDate as greaterEqual.
+     */
+    public void setEndDate_GreaterEqual(java.sql.Timestamp endDate) {
+        registerEndDate(ConditionKey.CK_GREATER_EQUAL, endDate);
+    }
+
+    /**
+     * LessEqual(&gt;). And NullIgnored, OnceRegistered.
+     * @param endDate The value of endDate as lessEqual.
+     */
+    public void setEndDate_LessEqual(java.sql.Timestamp endDate) {
+        registerEndDate(ConditionKey.CK_LESS_EQUAL, endDate);
+    }
+
+    /**
+     * FromTo($fromDate &lt;= COLUMN_NAME &lt;= $toDate). And NullIgnored, OnceRegistered. {datetime}
+     * @param fromDate The from-date of endDate. (Nullable)
+     * @param toDate The to-date of endDate. (Nullable)
+     * @param fromToOption The option of from-to. (NotNull)
+     */
+    public void setEndDate_FromTo(
+            java.util.Date fromDate,
+            java.util.Date toDate,
+            jp.sf.pal.announcement.db.allcommon.cbean.coption.FromToOption fromToOption) {
+        registerFromToQuery((fromDate != null ? new java.sql.Timestamp(fromDate
+                .getTime()) : null), (toDate != null ? new java.sql.Timestamp(
+                toDate.getTime()) : null), getCValueEndDate(), "END_DATE",
+                "EndDate", "endDate", fromToOption);
+    }
+
+    /**
+     * FromTo($fromDate &lt;= COLUMN_NAME &lt; $toDate + 1). And NullIgnored, OnceRegistered. {datetime}
+     * @param fromDate The from-date of endDate. (Nullable)
+     * @param toDate The to-date of endDate. (Nullable)
+     */
+    public void setEndDate_DateFromTo(java.util.Date fromDate,
+            java.util.Date toDate) {
+        setEndDate_FromTo(
+                fromDate,
+                toDate,
+                new jp.sf.pal.announcement.db.allcommon.cbean.coption.DateFromToOption());
+    }
+
+    /**
+     * IsNull(is null). And OnceRegistered. {datetime}
+     */
+    public void setEndDate_IsNull() {
+        registerEndDate(ConditionKey.CK_IS_NULL, DUMMY_OBJECT);
+    }
+
+    /**
+     * IsNotNull(is not null). And OnceRegistered. {datetime}
+     */
+    public void setEndDate_IsNotNull() {
+        registerEndDate(ConditionKey.CK_IS_NOT_NULL, DUMMY_OBJECT);
+    }
+
+    protected void registerEndDate(ConditionKey key, Object value) {
+        registerQuery(key, value, getCValueEndDate(), "END_DATE", "EndDate",
+                "endDate");
+    }
+
+    protected void registerInlineEndDate(ConditionKey key, Object value) {
+        registerInlineQuery(key, value, getCValueEndDate(), "END_DATE",
+                "EndDate", "endDate");
+    }
+
+    abstract protected ConditionValue getCValueEndDate();
+
+    /**
+     * Equal(=). And NullOrEmptyIgnored, OnceRegistered. {varchar(100) : NotNull}
+     * @param title The value of title as equal.
+     */
+    public void setTitle_Equal(String title) {
+        registerTitle(ConditionKey.CK_EQUAL, filterRemoveEmptyString(title));
+    }
+
+    /**
+     * NotEqual(!=). And NullOrEmptyIgnored, OnceRegistered.
+     * @param title The value of title as notEqual.
+     */
+    public void setTitle_NotEqual(String title) {
+        registerTitle(ConditionKey.CK_NOT_EQUAL, filterRemoveEmptyString(title));
+    }
+
+    /**
+     * GreaterThan(&gt;). And NullOrEmptyIgnored, OnceRegistered.
+     * @param title The value of title as greaterThan.
+     */
+    public void setTitle_GreaterThan(String title) {
+        registerTitle(ConditionKey.CK_GREATER_THAN,
+                filterRemoveEmptyString(title));
+    }
+
+    /**
+     * LessThan(&lt;). And NullOrEmptyIgnored, OnceRegistered.
+     * @param title The value of title as lessThan.
+     */
+    public void setTitle_LessThan(String title) {
+        registerTitle(ConditionKey.CK_LESS_THAN, filterRemoveEmptyString(title));
+    }
+
+    /**
+     * GreaterEqual(&gt;=). And NullOrEmptyIgnored, OnceRegistered.
+     * @param title The value of title as greaterEqual.
+     */
+    public void setTitle_GreaterEqual(String title) {
+        registerTitle(ConditionKey.CK_GREATER_EQUAL,
+                filterRemoveEmptyString(title));
+    }
+
+    /**
+     * LessEqual(&lt;=). And NullOrEmptyIgnored, OnceRegistered.
+     * @param title The value of title as lessEqual.
+     */
+    public void setTitle_LessEqual(String title) {
+        registerTitle(ConditionKey.CK_LESS_EQUAL,
+                filterRemoveEmptyString(title));
+    }
+
+    /**
+     * PrefixSearch(like 'xxx%'). And NullOrEmptyIgnored, OnceRegistered.
+     * @param title The value of title as prefixSearch.
+     */
+    public void setTitle_PrefixSearch(String title) {
+        registerTitle(ConditionKey.CK_PREFIX_SEARCH,
+                filterRemoveEmptyString(title));
+    }
+
+    /**
+     * LikeSearch(like 'xxx%' escape ...). And NullOrEmptyIgnored, SeveralRegistered.
+     * @param title The value of title as likeSearch.
+     * @param likeSearchOption The option of like-search. (NotNull)
+     */
+    public void setTitle_LikeSearch(
+            String title,
+            jp.sf.pal.announcement.db.allcommon.cbean.coption.LikeSearchOption likeSearchOption) {
+        registerLikeSearchQuery(ConditionKey.CK_LIKE_SEARCH,
+                filterRemoveEmptyString(title), getCValueTitle(), "TITLE",
+                "Title", "title", likeSearchOption);
+    }
+
+    /**
+     * InScope(in ('a', 'b')). And NullOrEmptyIgnored, NullOrEmptyElementIgnored, SeveralRegistered.
+     * @param titleList The collection of title as inScope.
+     */
+    public void setTitle_InScope(Collection<String> titleList) {
+        registerTitle(ConditionKey.CK_IN_SCOPE, convertToList(titleList));
+    }
+
+    /**
+     * InScope(in ('a', 'b')). And NullOrEmptyIgnored, NullOrEmptyElementIgnored, SeveralRegistered.
+     * @param title The collection of title as inScope.
+     * @param inScopeOption The option of in-scope. (NotNull)
+     */
+    public void setTitle_InScope(
+            String title,
+            jp.sf.pal.announcement.db.allcommon.cbean.coption.InScopeOption inScopeOption) {
+        registerInScopeQuery(ConditionKey.CK_IN_SCOPE,
+                filterRemoveEmptyString(title), getCValueTitle(), "TITLE",
+                "Title", "title", inScopeOption);
+    }
+
+    /**
+     * NotInScope(not in ('a', 'b')). And NullOrEmptyIgnored, NullOrEmptyElementIgnored, SeveralRegistered.
+     * @param titleList The collection of title as notInScope.
+     */
+    public void setTitle_NotInScope(Collection<String> titleList) {
+        registerTitle(ConditionKey.CK_NOT_IN_SCOPE, convertToList(titleList));
+    }
+
+    protected void registerTitle(ConditionKey key, Object value) {
+        registerQuery(key, value, getCValueTitle(), "TITLE", "Title", "title");
+    }
+
+    protected void registerInlineTitle(ConditionKey key, Object value) {
+        registerInlineQuery(key, value, getCValueTitle(), "TITLE", "Title",
+                "title");
+    }
+
+    abstract protected ConditionValue getCValueTitle();
+
+    /**
+     * Equal(=). And NullIgnored, OnceRegistered. {int : NotNull}
+     * @param sortOrder The value of sortOrder as equal.
+     */
+    public void setSortOrder_Equal(Integer sortOrder) {
+        registerSortOrder(ConditionKey.CK_EQUAL, sortOrder);
+    }
+
+    /**
+     * NotEqual(!=). And NullIgnored, OnceRegistered.
+     * @param sortOrder The value of sortOrder as notEqual.
+     */
+    public void setSortOrder_NotEqual(Integer sortOrder) {
+        registerSortOrder(ConditionKey.CK_NOT_EQUAL, sortOrder);
+    }
+
+    /**
+     * GreaterThan(&gt;). And NullIgnored, OnceRegistered.
+     * @param sortOrder The value of sortOrder as greaterThan.
+     */
+    public void setSortOrder_GreaterThan(Integer sortOrder) {
+        registerSortOrder(ConditionKey.CK_GREATER_THAN, sortOrder);
+    }
+
+    /**
+     * LessThan(&lt;). And NullIgnored, OnceRegistered.
+     * @param sortOrder The value of sortOrder as lessThan.
+     */
+    public void setSortOrder_LessThan(Integer sortOrder) {
+        registerSortOrder(ConditionKey.CK_LESS_THAN, sortOrder);
+    }
+
+    /**
+     * GreaterEqual(&gt;=). And NullIgnored, OnceRegistered.
+     * @param sortOrder The value of sortOrder as greaterEqual.
+     */
+    public void setSortOrder_GreaterEqual(Integer sortOrder) {
+        registerSortOrder(ConditionKey.CK_GREATER_EQUAL, sortOrder);
+    }
+
+    /**
+     * LessEqual(&lt;=). And NullIgnored, OnceRegistered.
+     * @param sortOrder The value of sortOrder as lessEqual.
+     */
+    public void setSortOrder_LessEqual(Integer sortOrder) {
+        registerSortOrder(ConditionKey.CK_LESS_EQUAL, sortOrder);
+    }
+
+    /**
+     * InScope(in (1, 2)). And NullIgnored, NullElementIgnored, SeveralRegistered.
+     * @param sortOrderList The collection of sortOrder as inScope.
+     */
+    public void setSortOrder_InScope(Collection<Integer> sortOrderList) {
+        registerSortOrder(ConditionKey.CK_IN_SCOPE,
+                convertToList(sortOrderList));
+    }
+
+    /**
+     * NotInScope(not in (1, 2)). And NullIgnored, NullElementIgnored, SeveralRegistered.
+     * @param sortOrderList The collection of sortOrder as notInScope.
+     */
+    public void setSortOrder_NotInScope(Collection<Integer> sortOrderList) {
+        registerSortOrder(ConditionKey.CK_NOT_IN_SCOPE,
+                convertToList(sortOrderList));
+    }
+
+    protected void registerSortOrder(ConditionKey key, Object value) {
+        registerQuery(key, value, getCValueSortOrder(), "SORT_ORDER",
+                "SortOrder", "sortOrder");
+    }
+
+    protected void registerInlineSortOrder(ConditionKey key, Object value) {
+        registerInlineQuery(key, value, getCValueSortOrder(), "SORT_ORDER",
+                "SortOrder", "sortOrder");
+    }
+
+    abstract protected ConditionValue getCValueSortOrder();
+
+    /**
+     * Equal(=). And NullIgnored, OnceRegistered. {timestamp : NotNull : Default=[CURRENT_TIMESTAMP]}
+     * @param timestamp The value of timestamp as equal.
+     */
+    public void setTimestamp_Equal(java.sql.Timestamp timestamp) {
+        registerTimestamp(ConditionKey.CK_EQUAL, timestamp);
+    }
+
+    /**
+     * NotEqual(!=). And NullIgnored, OnceRegistered.
+     * @param timestamp The value of timestamp as notEqual.
+     */
+    public void setTimestamp_NotEqual(java.sql.Timestamp timestamp) {
+        registerTimestamp(ConditionKey.CK_NOT_EQUAL, timestamp);
+    }
+
+    /**
+     * GreaterThan(&gt;). And NullIgnored, OnceRegistered.
+     * @param timestamp The value of timestamp as greaterThan.
+     */
+    public void setTimestamp_GreaterThan(java.sql.Timestamp timestamp) {
+        registerTimestamp(ConditionKey.CK_GREATER_THAN, timestamp);
+    }
+
+    /**
+     * LessThan(&gt;). And NullIgnored, OnceRegistered.
+     * @param timestamp The value of timestamp as lessThan.
+     */
+    public void setTimestamp_LessThan(java.sql.Timestamp timestamp) {
+        registerTimestamp(ConditionKey.CK_LESS_THAN, timestamp);
+    }
+
+    /**
+     * GreaterEqual(&gt;). And NullIgnored, OnceRegistered.
+     * @param timestamp The value of timestamp as greaterEqual.
+     */
+    public void setTimestamp_GreaterEqual(java.sql.Timestamp timestamp) {
+        registerTimestamp(ConditionKey.CK_GREATER_EQUAL, timestamp);
+    }
+
+    /**
+     * LessEqual(&gt;). And NullIgnored, OnceRegistered.
+     * @param timestamp The value of timestamp as lessEqual.
+     */
+    public void setTimestamp_LessEqual(java.sql.Timestamp timestamp) {
+        registerTimestamp(ConditionKey.CK_LESS_EQUAL, timestamp);
+    }
+
+    /**
+     * FromTo($fromDate &lt;= COLUMN_NAME &lt;= $toDate). And NullIgnored, OnceRegistered. {timestamp : NotNull : Default=[CURRENT_TIMESTAMP]}
+     * @param fromDate The from-date of timestamp. (Nullable)
+     * @param toDate The to-date of timestamp. (Nullable)
+     * @param fromToOption The option of from-to. (NotNull)
+     */
+    public void setTimestamp_FromTo(
+            java.util.Date fromDate,
+            java.util.Date toDate,
+            jp.sf.pal.announcement.db.allcommon.cbean.coption.FromToOption fromToOption) {
+        registerFromToQuery((fromDate != null ? new java.sql.Timestamp(fromDate
+                .getTime()) : null), (toDate != null ? new java.sql.Timestamp(
+                toDate.getTime()) : null), getCValueTimestamp(), "TIMESTAMP",
+                "Timestamp", "timestamp", fromToOption);
+    }
+
+    /**
+     * FromTo($fromDate &lt;= COLUMN_NAME &lt; $toDate + 1). And NullIgnored, OnceRegistered. {timestamp : NotNull : Default=[CURRENT_TIMESTAMP]}
+     * @param fromDate The from-date of timestamp. (Nullable)
+     * @param toDate The to-date of timestamp. (Nullable)
+     */
+    public void setTimestamp_DateFromTo(java.util.Date fromDate,
+            java.util.Date toDate) {
+        setTimestamp_FromTo(
+                fromDate,
+                toDate,
+                new jp.sf.pal.announcement.db.allcommon.cbean.coption.DateFromToOption());
+    }
+
+    protected void registerTimestamp(ConditionKey key, Object value) {
+        registerQuery(key, value, getCValueTimestamp(), "TIMESTAMP",
+                "Timestamp", "timestamp");
+    }
+
+    protected void registerInlineTimestamp(ConditionKey key, Object value) {
+        registerInlineQuery(key, value, getCValueTimestamp(), "TIMESTAMP",
+                "Timestamp", "timestamp");
+    }
+
+    abstract protected ConditionValue getCValueTimestamp();
+}


Property changes on: announcement/trunk/src/main/java/jp/sf/pal/announcement/db/cbean/cq/bs/AbstractBsAnnouncementCQ.java
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/java/jp/sf/pal/announcement/db/cbean/cq/bs/BsAnnouncementBodyCQ.java
===================================================================
--- announcement/trunk/src/main/java/jp/sf/pal/announcement/db/cbean/cq/bs/BsAnnouncementBodyCQ.java	                        (rev 0)
+++ announcement/trunk/src/main/java/jp/sf/pal/announcement/db/cbean/cq/bs/BsAnnouncementBodyCQ.java	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,224 @@
+package jp.sf.pal.announcement.db.cbean.cq.bs;
+
+import jp.sf.pal.announcement.db.allcommon.cbean.ConditionQuery;
+import jp.sf.pal.announcement.db.allcommon.cbean.cvalue.ConditionValue;
+import jp.sf.pal.announcement.db.allcommon.cbean.sqlclause.SqlClause;
+import jp.sf.pal.announcement.db.cbean.cq.ciq.AnnouncementBodyCIQ;
+
+/**
+ * The base condition-query of ANNOUNCEMENT_BODY.
+ * @author DBFlute(AutoGenerator)
+ */
+ @ SuppressWarnings("unchecked")
+public class BsAnnouncementBodyCQ extends AbstractBsAnnouncementBodyCQ {
+
+    // ===================================================================================
+    //                                                                           Attribute
+    //                                                                           =========
+    protected AnnouncementBodyCIQ _inlineQuery;
+
+    // ===================================================================================
+    //                                                                         Constructor
+    //                                                                         ===========
+    public BsAnnouncementBodyCQ(ConditionQuery childQuery, SqlClause sqlClause,
+            String aliasName, int nestLevel) {
+        super(childQuery, sqlClause, aliasName, nestLevel);
+    }
+
+    // ===================================================================================
+    //                                                                              Inline
+    //                                                                              ======
+    /**
+     * Prepare inline query.
+     * @return Inline query. (NotNull)
+     */
+    public AnnouncementBodyCIQ inline() {
+        if (_inlineQuery == null) {
+            _inlineQuery = new AnnouncementBodyCIQ(getChildQuery(),
+                    getSqlClause(), getAliasName(), getNestLevel(), this);
+        }
+        _inlineQuery.xsetOnClauseInline(false);
+        return _inlineQuery;
+    }
+
+    /**
+     * Prepare on-clause query.
+     * @return On-clause query. (NotNull)
+     */
+    public AnnouncementBodyCIQ on() {
+        if (isBaseQuery(this)) {
+            throw new UnsupportedOperationException(
+                    "Unsupported onClause of Base Table!");
+        }
+        AnnouncementBodyCIQ inlineQuery = inline();
+        inlineQuery.xsetOnClauseInline(true);
+        return inlineQuery;
+    }
+
+    // ===================================================================================
+    //                                                                       IncludeAsMine
+    //                                                                       =============
+    // public void includeAsMine_Xxx()
+    //   Include select-column of Xxx as mine.
+    //   Alias name is property name of this column.
+    //   Be careful to whether your table have the same column.
+    // 
+    // public void includeAsMine_Xxx(String aliasName) {
+    //   Your aliasName should not contain comma.
+    // 
+    /** @deprecated Please Use includeAsMine_Id(String aliasName).*/
+    public void includeAsMine_Id() {
+        registerIncludedSelectColumn("Id", getRealColumnName("ID"));
+    }
+
+    public void includeAsMine_Id(String aliasName) {
+        registerIncludedSelectColumn(aliasName, getRealColumnName("ID"));
+    }
+
+    /** @deprecated Please Use includeAsMine_Content(String aliasName).*/
+    public void includeAsMine_Content() {
+        registerIncludedSelectColumn("Content", getRealColumnName("CONTENT"));
+    }
+
+    public void includeAsMine_Content(String aliasName) {
+        registerIncludedSelectColumn(aliasName, getRealColumnName("CONTENT"));
+    }
+
+    // ===================================================================================
+    //                                                                               Query
+    //                                                                               =====
+
+    protected ConditionValue _id;
+
+    public ConditionValue getId() {
+        if (_id == null) {
+            _id = new ConditionValue();
+        }
+        return _id;
+    }
+
+    protected ConditionValue getCValueId() {
+        return getId();
+    }
+
+    protected java.util.Map<String, jp.sf.pal.announcement.db.cbean.cq.AnnouncementCQ> _id_InScopeSubQuery_AnnouncementMap;
+
+    public java.util.Map<String, jp.sf.pal.announcement.db.cbean.cq.AnnouncementCQ> getId_InScopeSubQuery_Announcement() {
+        return _id_InScopeSubQuery_AnnouncementMap;
+    }
+
+    public String keepId_InScopeSubQuery_Announcement(
+            jp.sf.pal.announcement.db.cbean.cq.AnnouncementCQ subQuery) {
+        if (_id_InScopeSubQuery_AnnouncementMap == null) {
+            _id_InScopeSubQuery_AnnouncementMap = new java.util.LinkedHashMap<String, jp.sf.pal.announcement.db.cbean.cq.AnnouncementCQ>();
+        }
+        final String key = "subQueryMapKey"
+                + (_id_InScopeSubQuery_AnnouncementMap.size() + 1);
+        _id_InScopeSubQuery_AnnouncementMap.put(key, subQuery);
+        return "id_InScopeSubQuery_Announcement." + key;
+    }
+
+    public BsAnnouncementBodyCQ addOrderBy_Id_Asc() {
+        registerOrderBy("ID", true);
+        return this;
+    }
+
+    public BsAnnouncementBodyCQ addOrderBy_Id_Desc() {
+        registerOrderBy("ID", false);
+        return this;
+    }
+
+    protected ConditionValue _content;
+
+    public ConditionValue getContent() {
+        if (_content == null) {
+            _content = new ConditionValue();
+        }
+        return _content;
+    }
+
+    protected ConditionValue getCValueContent() {
+        return getContent();
+    }
+
+    public BsAnnouncementBodyCQ addOrderBy_Content_Asc() {
+        registerOrderBy("CONTENT", true);
+        return this;
+    }
+
+    public BsAnnouncementBodyCQ addOrderBy_Content_Desc() {
+        registerOrderBy("CONTENT", false);
+        return this;
+    }
+
+    // ===================================================================================
+    //                                                                         Union Query
+    //                                                                         ===========
+    protected void reflectRelationOnUnionQuery(ConditionQuery baseQueryAsSuper,
+            ConditionQuery unionQueryAsSuper) {
+        final jp.sf.pal.announcement.db.cbean.cq.AnnouncementBodyCQ baseQuery = (jp.sf.pal.announcement.db.cbean.cq.AnnouncementBodyCQ) baseQueryAsSuper;
+        final jp.sf.pal.announcement.db.cbean.cq.AnnouncementBodyCQ unionQuery = (jp.sf.pal.announcement.db.cbean.cq.AnnouncementBodyCQ) unionQueryAsSuper;
+        if (baseQuery.hasConditionQueryAnnouncement()) {
+            unionQuery.queryAnnouncement().reflectRelationOnUnionQuery(
+                    baseQuery.queryAnnouncement(),
+                    unionQuery.queryAnnouncement());
+        }
+
+    }
+
+    // ===================================================================================
+    //                                                                       Foreign Query
+    //                                                                       =============
+
+    // /* * * * * * * * * * * * * * * * * * * * * * *
+    //   ForeignTable    = [ANNOUNCEMENT(TABLE)]
+    //   ForeignProperty = [announcement]
+    // * * * * * * * * */
+
+    /**
+     * Query for announcement.
+     * @return Instance of jp.sf.pal.announcement.db.cbean.cq.AnnouncementCQ as announcement. (NotNull)
+     */
+    public jp.sf.pal.announcement.db.cbean.cq.AnnouncementCQ queryAnnouncement() {
+        return getConditionQueryAnnouncement();
+    }
+
+    protected jp.sf.pal.announcement.db.cbean.cq.AnnouncementCQ _conditionQueryAnnouncement;
+
+    public jp.sf.pal.announcement.db.cbean.cq.AnnouncementCQ getConditionQueryAnnouncement() {
+        if (_conditionQueryAnnouncement == null) {
+            _conditionQueryAnnouncement = createQueryAnnouncement();
+            setupOuterJoin_Announcement();
+        }
+        return _conditionQueryAnnouncement;
+    }
+
+    protected void setupOuterJoin_Announcement() {
+        final java.util.Map<String, String> joinOnMap = new java.util.LinkedHashMap<String, String>();
+        joinOnMap.put(getRealColumnName("ID"), getConditionQueryAnnouncement()
+                .getRealColumnName("ID"));
+        getSqlClause().registerOuterJoin(
+                getConditionQueryAnnouncement().getTableSqlName(),
+                getConditionQueryAnnouncement().getRealAliasName(), joinOnMap);
+    }
+
+    protected jp.sf.pal.announcement.db.cbean.cq.AnnouncementCQ createQueryAnnouncement() {
+        final String nextRelationPath = resolveNextRelationPathAnnouncement();
+        final String resolvedAliasName = resolveJoinAliasName(nextRelationPath,
+                getNextNestLevel());
+        final jp.sf.pal.announcement.db.cbean.cq.AnnouncementCQ cq = new jp.sf.pal.announcement.db.cbean.cq.AnnouncementCQ(
+                this, getSqlClause(), resolvedAliasName, getNextNestLevel());
+        cq.xsetForeignPropertyName("announcement");
+        cq.xsetRelationPath(nextRelationPath);
+        return cq;
+    }
+
+    protected String resolveNextRelationPathAnnouncement() {
+        return resolveNextRelationPath("ANNOUNCEMENT_BODY", "announcement");
+    }
+
+    public boolean hasConditionQueryAnnouncement() {
+        return _conditionQueryAnnouncement != null;
+    }
+
+}


Property changes on: announcement/trunk/src/main/java/jp/sf/pal/announcement/db/cbean/cq/bs/BsAnnouncementBodyCQ.java
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/java/jp/sf/pal/announcement/db/cbean/cq/bs/BsAnnouncementCQ.java
===================================================================
--- announcement/trunk/src/main/java/jp/sf/pal/announcement/db/cbean/cq/bs/BsAnnouncementCQ.java	                        (rev 0)
+++ announcement/trunk/src/main/java/jp/sf/pal/announcement/db/cbean/cq/bs/BsAnnouncementCQ.java	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,438 @@
+package jp.sf.pal.announcement.db.cbean.cq.bs;
+
+import jp.sf.pal.announcement.db.allcommon.cbean.ConditionQuery;
+import jp.sf.pal.announcement.db.allcommon.cbean.cvalue.ConditionValue;
+import jp.sf.pal.announcement.db.allcommon.cbean.sqlclause.SqlClause;
+import jp.sf.pal.announcement.db.cbean.cq.ciq.AnnouncementCIQ;
+
+/**
+ * The base condition-query of ANNOUNCEMENT.
+ * @author DBFlute(AutoGenerator)
+ */
+ @ SuppressWarnings("unchecked")
+public class BsAnnouncementCQ extends AbstractBsAnnouncementCQ {
+
+    // ===================================================================================
+    //                                                                           Attribute
+    //                                                                           =========
+    protected AnnouncementCIQ _inlineQuery;
+
+    // ===================================================================================
+    //                                                                         Constructor
+    //                                                                         ===========
+    public BsAnnouncementCQ(ConditionQuery childQuery, SqlClause sqlClause,
+            String aliasName, int nestLevel) {
+        super(childQuery, sqlClause, aliasName, nestLevel);
+    }
+
+    // ===================================================================================
+    //                                                                              Inline
+    //                                                                              ======
+    /**
+     * Prepare inline query.
+     * @return Inline query. (NotNull)
+     */
+    public AnnouncementCIQ inline() {
+        if (_inlineQuery == null) {
+            _inlineQuery = new AnnouncementCIQ(getChildQuery(), getSqlClause(),
+                    getAliasName(), getNestLevel(), this);
+        }
+        _inlineQuery.xsetOnClauseInline(false);
+        return _inlineQuery;
+    }
+
+    /**
+     * Prepare on-clause query.
+     * @return On-clause query. (NotNull)
+     */
+    public AnnouncementCIQ on() {
+        if (isBaseQuery(this)) {
+            throw new UnsupportedOperationException(
+                    "Unsupported onClause of Base Table!");
+        }
+        AnnouncementCIQ inlineQuery = inline();
+        inlineQuery.xsetOnClauseInline(true);
+        return inlineQuery;
+    }
+
+    // ===================================================================================
+    //                                                                       IncludeAsMine
+    //                                                                       =============
+    // public void includeAsMine_Xxx()
+    //   Include select-column of Xxx as mine.
+    //   Alias name is property name of this column.
+    //   Be careful to whether your table have the same column.
+    // 
+    // public void includeAsMine_Xxx(String aliasName) {
+    //   Your aliasName should not contain comma.
+    // 
+    /** @deprecated Please Use includeAsMine_Id(String aliasName).*/
+    public void includeAsMine_Id() {
+        registerIncludedSelectColumn("Id", getRealColumnName("ID"));
+    }
+
+    public void includeAsMine_Id(String aliasName) {
+        registerIncludedSelectColumn(aliasName, getRealColumnName("ID"));
+    }
+
+    /** @deprecated Please Use includeAsMine_Scope(String aliasName).*/
+    public void includeAsMine_Scope() {
+        registerIncludedSelectColumn("Scope", getRealColumnName("SCOPE"));
+    }
+
+    public void includeAsMine_Scope(String aliasName) {
+        registerIncludedSelectColumn(aliasName, getRealColumnName("SCOPE"));
+    }
+
+    /** @deprecated Please Use includeAsMine_Role(String aliasName).*/
+    public void includeAsMine_Role() {
+        registerIncludedSelectColumn("Role", getRealColumnName("ROLE"));
+    }
+
+    public void includeAsMine_Role(String aliasName) {
+        registerIncludedSelectColumn(aliasName, getRealColumnName("ROLE"));
+    }
+
+    /** @deprecated Please Use includeAsMine_StartDate(String aliasName).*/
+    public void includeAsMine_StartDate() {
+        registerIncludedSelectColumn("StartDate",
+                getRealColumnName("START_DATE"));
+    }
+
+    public void includeAsMine_StartDate(String aliasName) {
+        registerIncludedSelectColumn(aliasName, getRealColumnName("START_DATE"));
+    }
+
+    /** @deprecated Please Use includeAsMine_EndDate(String aliasName).*/
+    public void includeAsMine_EndDate() {
+        registerIncludedSelectColumn("EndDate", getRealColumnName("END_DATE"));
+    }
+
+    public void includeAsMine_EndDate(String aliasName) {
+        registerIncludedSelectColumn(aliasName, getRealColumnName("END_DATE"));
+    }
+
+    /** @deprecated Please Use includeAsMine_Title(String aliasName).*/
+    public void includeAsMine_Title() {
+        registerIncludedSelectColumn("Title", getRealColumnName("TITLE"));
+    }
+
+    public void includeAsMine_Title(String aliasName) {
+        registerIncludedSelectColumn(aliasName, getRealColumnName("TITLE"));
+    }
+
+    /** @deprecated Please Use includeAsMine_SortOrder(String aliasName).*/
+    public void includeAsMine_SortOrder() {
+        registerIncludedSelectColumn("SortOrder",
+                getRealColumnName("SORT_ORDER"));
+    }
+
+    public void includeAsMine_SortOrder(String aliasName) {
+        registerIncludedSelectColumn(aliasName, getRealColumnName("SORT_ORDER"));
+    }
+
+    /** @deprecated Please Use includeAsMine_Timestamp(String aliasName).*/
+    public void includeAsMine_Timestamp() {
+        registerIncludedSelectColumn("Timestamp",
+                getRealColumnName("TIMESTAMP"));
+    }
+
+    public void includeAsMine_Timestamp(String aliasName) {
+        registerIncludedSelectColumn(aliasName, getRealColumnName("TIMESTAMP"));
+    }
+
+    // ===================================================================================
+    //                                                                               Query
+    //                                                                               =====
+
+    protected ConditionValue _id;
+
+    public ConditionValue getId() {
+        if (_id == null) {
+            _id = new ConditionValue();
+        }
+        return _id;
+    }
+
+    protected ConditionValue getCValueId() {
+        return getId();
+    }
+
+    protected java.util.Map<String, jp.sf.pal.announcement.db.cbean.cq.AnnouncementBodyCQ> _id_InScopeSubQuery_AnnouncementBodyListMap;
+
+    public java.util.Map<String, jp.sf.pal.announcement.db.cbean.cq.AnnouncementBodyCQ> getId_InScopeSubQuery_AnnouncementBodyList() {
+        return _id_InScopeSubQuery_AnnouncementBodyListMap;
+    }
+
+    public String keepId_InScopeSubQuery_AnnouncementBodyList(
+            jp.sf.pal.announcement.db.cbean.cq.AnnouncementBodyCQ subQuery) {
+        if (_id_InScopeSubQuery_AnnouncementBodyListMap == null) {
+            _id_InScopeSubQuery_AnnouncementBodyListMap = new java.util.LinkedHashMap<String, jp.sf.pal.announcement.db.cbean.cq.AnnouncementBodyCQ>();
+        }
+        final String key = "subQueryMapKey"
+                + (_id_InScopeSubQuery_AnnouncementBodyListMap.size() + 1);
+        _id_InScopeSubQuery_AnnouncementBodyListMap.put(key, subQuery);
+        return "id_InScopeSubQuery_AnnouncementBodyList." + key;
+    }
+
+    protected java.util.Map<String, jp.sf.pal.announcement.db.cbean.cq.AnnouncementBodyCQ> _id_ExistsSubQuery_AnnouncementBodyListMap;
+
+    public java.util.Map<String, jp.sf.pal.announcement.db.cbean.cq.AnnouncementBodyCQ> getId_ExistsSubQuery_AnnouncementBodyList() {
+        return _id_ExistsSubQuery_AnnouncementBodyListMap;
+    }
+
+    public String keepId_ExistsSubQuery_AnnouncementBodyList(
+            jp.sf.pal.announcement.db.cbean.cq.AnnouncementBodyCQ subQuery) {
+        if (_id_ExistsSubQuery_AnnouncementBodyListMap == null) {
+            _id_ExistsSubQuery_AnnouncementBodyListMap = new java.util.LinkedHashMap<String, jp.sf.pal.announcement.db.cbean.cq.AnnouncementBodyCQ>();
+        }
+        final String key = "subQueryMapKey"
+                + (_id_ExistsSubQuery_AnnouncementBodyListMap.size() + 1);
+        _id_ExistsSubQuery_AnnouncementBodyListMap.put(key, subQuery);
+        return "id_ExistsSubQuery_AnnouncementBodyList." + key;
+    }
+
+    public BsAnnouncementCQ addOrderBy_Id_Asc() {
+        registerOrderBy("ID", true);
+        return this;
+    }
+
+    public BsAnnouncementCQ addOrderBy_Id_Desc() {
+        registerOrderBy("ID", false);
+        return this;
+    }
+
+    protected ConditionValue _scope;
+
+    public ConditionValue getScope() {
+        if (_scope == null) {
+            _scope = new ConditionValue();
+        }
+        return _scope;
+    }
+
+    protected ConditionValue getCValueScope() {
+        return getScope();
+    }
+
+    public BsAnnouncementCQ addOrderBy_Scope_Asc() {
+        registerOrderBy("SCOPE", true);
+        return this;
+    }
+
+    public BsAnnouncementCQ addOrderBy_Scope_Desc() {
+        registerOrderBy("SCOPE", false);
+        return this;
+    }
+
+    protected ConditionValue _role;
+
+    public ConditionValue getRole() {
+        if (_role == null) {
+            _role = new ConditionValue();
+        }
+        return _role;
+    }
+
+    protected ConditionValue getCValueRole() {
+        return getRole();
+    }
+
+    public BsAnnouncementCQ addOrderBy_Role_Asc() {
+        registerOrderBy("ROLE", true);
+        return this;
+    }
+
+    public BsAnnouncementCQ addOrderBy_Role_Desc() {
+        registerOrderBy("ROLE", false);
+        return this;
+    }
+
+    protected ConditionValue _startDate;
+
+    public ConditionValue getStartDate() {
+        if (_startDate == null) {
+            _startDate = new ConditionValue();
+        }
+        return _startDate;
+    }
+
+    protected ConditionValue getCValueStartDate() {
+        return getStartDate();
+    }
+
+    public BsAnnouncementCQ addOrderBy_StartDate_Asc() {
+        registerOrderBy("START_DATE", true);
+        return this;
+    }
+
+    public BsAnnouncementCQ addOrderBy_StartDate_Desc() {
+        registerOrderBy("START_DATE", false);
+        return this;
+    }
+
+    protected ConditionValue _endDate;
+
+    public ConditionValue getEndDate() {
+        if (_endDate == null) {
+            _endDate = new ConditionValue();
+        }
+        return _endDate;
+    }
+
+    protected ConditionValue getCValueEndDate() {
+        return getEndDate();
+    }
+
+    public BsAnnouncementCQ addOrderBy_EndDate_Asc() {
+        registerOrderBy("END_DATE", true);
+        return this;
+    }
+
+    public BsAnnouncementCQ addOrderBy_EndDate_Desc() {
+        registerOrderBy("END_DATE", false);
+        return this;
+    }
+
+    protected ConditionValue _title;
+
+    public ConditionValue getTitle() {
+        if (_title == null) {
+            _title = new ConditionValue();
+        }
+        return _title;
+    }
+
+    protected ConditionValue getCValueTitle() {
+        return getTitle();
+    }
+
+    public BsAnnouncementCQ addOrderBy_Title_Asc() {
+        registerOrderBy("TITLE", true);
+        return this;
+    }
+
+    public BsAnnouncementCQ addOrderBy_Title_Desc() {
+        registerOrderBy("TITLE", false);
+        return this;
+    }
+
+    protected ConditionValue _sortOrder;
+
+    public ConditionValue getSortOrder() {
+        if (_sortOrder == null) {
+            _sortOrder = new ConditionValue();
+        }
+        return _sortOrder;
+    }
+
+    protected ConditionValue getCValueSortOrder() {
+        return getSortOrder();
+    }
+
+    public BsAnnouncementCQ addOrderBy_SortOrder_Asc() {
+        registerOrderBy("SORT_ORDER", true);
+        return this;
+    }
+
+    public BsAnnouncementCQ addOrderBy_SortOrder_Desc() {
+        registerOrderBy("SORT_ORDER", false);
+        return this;
+    }
+
+    protected ConditionValue _timestamp;
+
+    public ConditionValue getTimestamp() {
+        if (_timestamp == null) {
+            _timestamp = new ConditionValue();
+        }
+        return _timestamp;
+    }
+
+    protected ConditionValue getCValueTimestamp() {
+        return getTimestamp();
+    }
+
+    public BsAnnouncementCQ addOrderBy_Timestamp_Asc() {
+        registerOrderBy("TIMESTAMP", true);
+        return this;
+    }
+
+    public BsAnnouncementCQ addOrderBy_Timestamp_Desc() {
+        registerOrderBy("TIMESTAMP", false);
+        return this;
+    }
+
+    // ===================================================================================
+    //                                                                         Union Query
+    //                                                                         ===========
+    protected void reflectRelationOnUnionQuery(ConditionQuery baseQueryAsSuper,
+            ConditionQuery unionQueryAsSuper) {
+        final jp.sf.pal.announcement.db.cbean.cq.AnnouncementCQ baseQuery = (jp.sf.pal.announcement.db.cbean.cq.AnnouncementCQ) baseQueryAsSuper;
+        final jp.sf.pal.announcement.db.cbean.cq.AnnouncementCQ unionQuery = (jp.sf.pal.announcement.db.cbean.cq.AnnouncementCQ) unionQueryAsSuper;
+        if (baseQuery.hasConditionQueryAnnouncementBodyAsOne()) {
+            unionQuery.queryAnnouncementBodyAsOne()
+                    .reflectRelationOnUnionQuery(
+                            baseQuery.queryAnnouncementBodyAsOne(),
+                            unionQuery.queryAnnouncementBodyAsOne());
+        }
+
+    }
+
+    // ===================================================================================
+    //                                                                       Foreign Query
+    //                                                                       =============
+
+    // /* * * * * * * * * * * * * * * * * * * * * * * {as one}
+    //   ReferrerTable    = [ANNOUNCEMENT_BODY(TABLE)]
+    //   ReferrerProperty = [announcementBodyAsOne]
+    // * * * * * * * * */
+
+    /**
+     * Query for announcementBodyAsOne.
+     * @return Instance of jp.sf.pal.announcement.db.cbean.cq.AnnouncementBodyCQ as announcementBodyAsOne. (NotNull)
+     */
+    public jp.sf.pal.announcement.db.cbean.cq.AnnouncementBodyCQ queryAnnouncementBodyAsOne() {
+        return getConditionQueryAnnouncementBodyAsOne();
+    }
+
+    protected jp.sf.pal.announcement.db.cbean.cq.AnnouncementBodyCQ _conditionQueryAnnouncementBodyAsOne;
+
+    public jp.sf.pal.announcement.db.cbean.cq.AnnouncementBodyCQ getConditionQueryAnnouncementBodyAsOne() {
+        if (_conditionQueryAnnouncementBodyAsOne == null) {
+            _conditionQueryAnnouncementBodyAsOne = createQueryAnnouncementBodyAsOne();
+            setupOuterJoin_AnnouncementBodyAsOne();
+        }
+        return _conditionQueryAnnouncementBodyAsOne;
+    }
+
+    protected void setupOuterJoin_AnnouncementBodyAsOne() {
+        final java.util.Map<String, String> joinOnMap = new java.util.LinkedHashMap<String, String>();
+        joinOnMap.put(getRealColumnName("ID"),
+                getConditionQueryAnnouncementBodyAsOne()
+                        .getRealColumnName("ID"));
+        getSqlClause().registerOuterJoin(
+                getConditionQueryAnnouncementBodyAsOne().getTableSqlName(),
+                getConditionQueryAnnouncementBodyAsOne().getRealAliasName(),
+                joinOnMap);
+    }
+
+    protected jp.sf.pal.announcement.db.cbean.cq.AnnouncementBodyCQ createQueryAnnouncementBodyAsOne() {
+        final String nextRelationPath = resolveNextRelationPathAnnouncementBodyAsOne();
+        final String resolvedAliasName = resolveJoinAliasName(nextRelationPath,
+                getNextNestLevel());
+        final jp.sf.pal.announcement.db.cbean.cq.AnnouncementBodyCQ cq = new jp.sf.pal.announcement.db.cbean.cq.AnnouncementBodyCQ(
+                this, getSqlClause(), resolvedAliasName, getNextNestLevel());
+        cq.xsetForeignPropertyName("announcementBodyAsOne");
+        cq.xsetRelationPath(nextRelationPath);
+        return cq;
+    }
+
+    protected String resolveNextRelationPathAnnouncementBodyAsOne() {
+        return resolveNextRelationPath("ANNOUNCEMENT", "announcementBodyAsOne");
+    }
+
+    public boolean hasConditionQueryAnnouncementBodyAsOne() {
+        return _conditionQueryAnnouncementBodyAsOne != null;
+    }
+}


Property changes on: announcement/trunk/src/main/java/jp/sf/pal/announcement/db/cbean/cq/bs/BsAnnouncementCQ.java
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/java/jp/sf/pal/announcement/db/cbean/cq/ciq/AnnouncementBodyCIQ.java
===================================================================
--- announcement/trunk/src/main/java/jp/sf/pal/announcement/db/cbean/cq/ciq/AnnouncementBodyCIQ.java	                        (rev 0)
+++ announcement/trunk/src/main/java/jp/sf/pal/announcement/db/cbean/cq/ciq/AnnouncementBodyCIQ.java	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,98 @@
+package jp.sf.pal.announcement.db.cbean.cq.ciq;
+
+import jp.sf.pal.announcement.db.allcommon.cbean.ConditionQuery;
+import jp.sf.pal.announcement.db.allcommon.cbean.ckey.ConditionKey;
+import jp.sf.pal.announcement.db.allcommon.cbean.coption.ConditionOption;
+import jp.sf.pal.announcement.db.allcommon.cbean.cvalue.ConditionValue;
+import jp.sf.pal.announcement.db.allcommon.cbean.sqlclause.SqlClause;
+import jp.sf.pal.announcement.db.cbean.cq.bs.AbstractBsAnnouncementBodyCQ;
+import jp.sf.pal.announcement.db.cbean.cq.bs.BsAnnouncementBodyCQ;
+
+/**
+ * The condition-inline-query of ANNOUNCEMENT_BODY.
+ * @author DBFlute(AutoGenerator)
+ */
+ @ SuppressWarnings("unchecked")
+public class AnnouncementBodyCIQ extends AbstractBsAnnouncementBodyCQ {
+
+    // ===================================================================================
+    //                                                                           Attribute
+    //                                                                           =========
+    protected BsAnnouncementBodyCQ _myCQ;
+
+    // ===================================================================================
+    //                                                                         Constructor
+    //                                                                         ===========
+    public AnnouncementBodyCIQ(ConditionQuery childQuery, SqlClause sqlClause,
+            String aliasName, int nestLevel, BsAnnouncementBodyCQ myCQ) {
+        super(childQuery, sqlClause, aliasName, nestLevel);
+        _myCQ = myCQ;
+        _foreignPropertyName = _myCQ.getForeignPropertyName();// Accept foreign property name.
+        _relationPath = _myCQ.getRelationPath();// Accept relation path.
+    }
+
+    // ===================================================================================
+    //                                                             Override about Register
+    //                                                             =======================
+    @Override
+    protected void reflectRelationOnUnionQuery(ConditionQuery baseQueryAsSuper,
+            ConditionQuery unionQueryAsSuper) {
+        throw new UnsupportedOperationException(
+                "InlineQuery must not need UNION method: " + baseQueryAsSuper
+                        + " : " + unionQueryAsSuper);
+    }
+
+    @Override
+    protected void setupConditionValueAndRegisterWhereClause(ConditionKey key,
+            Object value, ConditionValue cvalue, String colName,
+            String capPropName, String uncapPropName) {
+        registerInlineQuery(key, value, cvalue, colName, capPropName,
+                uncapPropName);
+    }
+
+    @Override
+    protected void setupConditionValueAndRegisterWhereClause(ConditionKey key,
+            Object value, ConditionValue cvalue, String colName,
+            String capPropName, String uncapPropName, ConditionOption option) {
+        registerInlineQuery(key, value, cvalue, colName, capPropName,
+                uncapPropName, option);
+    }
+
+    @Override
+    protected void registerWhereClause(String whereClause) {
+        registerInlineWhereClause(whereClause);
+    }
+
+    @Override
+    protected String getInScopeSubQueryRealColumnName(String columnName) {
+        if (_onClauseInline) {
+            throw new UnsupportedOperationException(
+                    "InScopeSubQuery of on-clause is unsupported");
+        }
+        return _onClauseInline ? getRealAliasName() + "." + columnName
+                : columnName;
+    }
+
+    @Override
+    protected void registerExistsSubQuery(ConditionQuery subQuery,
+            String columnName, String relatedColumnName, String propertyName) {
+        throw new UnsupportedOperationException(
+                "Sorry! ExistsSubQuery at inline view is unsupported. So please use InScopeSubQyery.");
+    }
+
+    // ===================================================================================
+    //                                                                Override about Query
+    //                                                                ====================
+    protected ConditionValue getCValueId() {
+        return _myCQ.getId();
+    }
+
+    public String keepId_InScopeSubQuery_Announcement(
+            jp.sf.pal.announcement.db.cbean.cq.AnnouncementCQ subQuery) {
+        return _myCQ.keepId_InScopeSubQuery_Announcement(subQuery);
+    }
+
+    protected ConditionValue getCValueContent() {
+        return _myCQ.getContent();
+    }
+}


Property changes on: announcement/trunk/src/main/java/jp/sf/pal/announcement/db/cbean/cq/ciq/AnnouncementBodyCIQ.java
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/java/jp/sf/pal/announcement/db/cbean/cq/ciq/AnnouncementCIQ.java
===================================================================
--- announcement/trunk/src/main/java/jp/sf/pal/announcement/db/cbean/cq/ciq/AnnouncementCIQ.java	                        (rev 0)
+++ announcement/trunk/src/main/java/jp/sf/pal/announcement/db/cbean/cq/ciq/AnnouncementCIQ.java	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,128 @@
+package jp.sf.pal.announcement.db.cbean.cq.ciq;
+
+import jp.sf.pal.announcement.db.allcommon.cbean.ConditionQuery;
+import jp.sf.pal.announcement.db.allcommon.cbean.ckey.ConditionKey;
+import jp.sf.pal.announcement.db.allcommon.cbean.coption.ConditionOption;
+import jp.sf.pal.announcement.db.allcommon.cbean.cvalue.ConditionValue;
+import jp.sf.pal.announcement.db.allcommon.cbean.sqlclause.SqlClause;
+import jp.sf.pal.announcement.db.cbean.cq.bs.AbstractBsAnnouncementCQ;
+import jp.sf.pal.announcement.db.cbean.cq.bs.BsAnnouncementCQ;
+
+/**
+ * The condition-inline-query of ANNOUNCEMENT.
+ * @author DBFlute(AutoGenerator)
+ */
+ @ SuppressWarnings("unchecked")
+public class AnnouncementCIQ extends AbstractBsAnnouncementCQ {
+
+    // ===================================================================================
+    //                                                                           Attribute
+    //                                                                           =========
+    protected BsAnnouncementCQ _myCQ;
+
+    // ===================================================================================
+    //                                                                         Constructor
+    //                                                                         ===========
+    public AnnouncementCIQ(ConditionQuery childQuery, SqlClause sqlClause,
+            String aliasName, int nestLevel, BsAnnouncementCQ myCQ) {
+        super(childQuery, sqlClause, aliasName, nestLevel);
+        _myCQ = myCQ;
+        _foreignPropertyName = _myCQ.getForeignPropertyName();// Accept foreign property name.
+        _relationPath = _myCQ.getRelationPath();// Accept relation path.
+    }
+
+    // ===================================================================================
+    //                                                             Override about Register
+    //                                                             =======================
+    @Override
+    protected void reflectRelationOnUnionQuery(ConditionQuery baseQueryAsSuper,
+            ConditionQuery unionQueryAsSuper) {
+        throw new UnsupportedOperationException(
+                "InlineQuery must not need UNION method: " + baseQueryAsSuper
+                        + " : " + unionQueryAsSuper);
+    }
+
+    @Override
+    protected void setupConditionValueAndRegisterWhereClause(ConditionKey key,
+            Object value, ConditionValue cvalue, String colName,
+            String capPropName, String uncapPropName) {
+        registerInlineQuery(key, value, cvalue, colName, capPropName,
+                uncapPropName);
+    }
+
+    @Override
+    protected void setupConditionValueAndRegisterWhereClause(ConditionKey key,
+            Object value, ConditionValue cvalue, String colName,
+            String capPropName, String uncapPropName, ConditionOption option) {
+        registerInlineQuery(key, value, cvalue, colName, capPropName,
+                uncapPropName, option);
+    }
+
+    @Override
+    protected void registerWhereClause(String whereClause) {
+        registerInlineWhereClause(whereClause);
+    }
+
+    @Override
+    protected String getInScopeSubQueryRealColumnName(String columnName) {
+        if (_onClauseInline) {
+            throw new UnsupportedOperationException(
+                    "InScopeSubQuery of on-clause is unsupported");
+        }
+        return _onClauseInline ? getRealAliasName() + "." + columnName
+                : columnName;
+    }
+
+    @Override
+    protected void registerExistsSubQuery(ConditionQuery subQuery,
+            String columnName, String relatedColumnName, String propertyName) {
+        throw new UnsupportedOperationException(
+                "Sorry! ExistsSubQuery at inline view is unsupported. So please use InScopeSubQyery.");
+    }
+
+    // ===================================================================================
+    //                                                                Override about Query
+    //                                                                ====================
+    protected ConditionValue getCValueId() {
+        return _myCQ.getId();
+    }
+
+    public String keepId_InScopeSubQuery_AnnouncementBodyList(
+            jp.sf.pal.announcement.db.cbean.cq.AnnouncementBodyCQ subQuery) {
+        return _myCQ.keepId_InScopeSubQuery_AnnouncementBodyList(subQuery);
+    }
+
+    public String keepId_ExistsSubQuery_AnnouncementBodyList(
+            jp.sf.pal.announcement.db.cbean.cq.AnnouncementBodyCQ subQuery) {
+        throw new UnsupportedOperationException(
+                "ExistsSubQuery at inline() is unsupported! Sorry!");
+    }
+
+    protected ConditionValue getCValueScope() {
+        return _myCQ.getScope();
+    }
+
+    protected ConditionValue getCValueRole() {
+        return _myCQ.getRole();
+    }
+
+    protected ConditionValue getCValueStartDate() {
+        return _myCQ.getStartDate();
+    }
+
+    protected ConditionValue getCValueEndDate() {
+        return _myCQ.getEndDate();
+    }
+
+    protected ConditionValue getCValueTitle() {
+        return _myCQ.getTitle();
+    }
+
+    protected ConditionValue getCValueSortOrder() {
+        return _myCQ.getSortOrder();
+    }
+
+    protected ConditionValue getCValueTimestamp() {
+        return _myCQ.getTimestamp();
+    }
+}


Property changes on: announcement/trunk/src/main/java/jp/sf/pal/announcement/db/cbean/cq/ciq/AnnouncementCIQ.java
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/java/jp/sf/pal/announcement/db/cbean/nss/AnnouncementBodyNss.java
===================================================================
--- announcement/trunk/src/main/java/jp/sf/pal/announcement/db/cbean/nss/AnnouncementBodyNss.java	                        (rev 0)
+++ announcement/trunk/src/main/java/jp/sf/pal/announcement/db/cbean/nss/AnnouncementBodyNss.java	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,60 @@
+package jp.sf.pal.announcement.db.cbean.nss;
+
+import jp.sf.pal.announcement.db.cbean.cq.AnnouncementBodyCQ;
+
+/**
+ * The nest-select-setupper of ANNOUNCEMENT_BODY.
+ * @author DBFlute(AutoGenerator)
+ */
+ @ SuppressWarnings("unchecked")
+public class AnnouncementBodyNss {
+
+    // ===================================================================================
+    //                                                                           Attribute
+    //                                                                           =========
+    protected AnnouncementBodyCQ _query;
+
+    // ===================================================================================
+    //                                                                         Constructor
+    //                                                                         ===========
+    public AnnouncementBodyNss(AnnouncementBodyCQ query) {
+        _query = query;
+    }
+
+    // ===================================================================================
+    //                                                                            Accessor
+    //                                                                            ========
+    public boolean hasConditionQuery() {
+        return _query != null;
+    }
+
+    // ===================================================================================
+    //                                                           With Nested Foreign Table
+    //                                                           =========================
+
+    public AnnouncementNss withAnnouncement() {
+        assertConditionQuery();
+        final String foreignTableAliasName = _query.queryAnnouncement()
+                .getRealAliasName();
+        final String localRelationPath = _query.getRelationPath();
+        _query.getSqlClause().registerSelectedSelectColumn(
+                foreignTableAliasName, "ANNOUNCEMENT_BODY", "announcement",
+                localRelationPath);
+        _query.getSqlClause().registerSelectedForeignInfo(
+                _query.queryAnnouncement().getRelationPath(), "announcement");
+        return new AnnouncementNss(_query.queryAnnouncement());
+    }
+
+    // ===================================================================================
+    //                                                          With Nested Referrer Table
+    //                                                          ==========================
+
+    // ===================================================================================
+    //                                                                              Helper
+    //                                                                              ======
+    protected void assertConditionQuery() {
+        if (!hasConditionQuery()) {
+            throw new IllegalStateException("The query should not be null.");
+        }
+    }
+}


Property changes on: announcement/trunk/src/main/java/jp/sf/pal/announcement/db/cbean/nss/AnnouncementBodyNss.java
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/java/jp/sf/pal/announcement/db/cbean/nss/AnnouncementNss.java
===================================================================
--- announcement/trunk/src/main/java/jp/sf/pal/announcement/db/cbean/nss/AnnouncementNss.java	                        (rev 0)
+++ announcement/trunk/src/main/java/jp/sf/pal/announcement/db/cbean/nss/AnnouncementNss.java	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,61 @@
+package jp.sf.pal.announcement.db.cbean.nss;
+
+import jp.sf.pal.announcement.db.cbean.cq.AnnouncementCQ;
+
+/**
+ * The nest-select-setupper of ANNOUNCEMENT.
+ * @author DBFlute(AutoGenerator)
+ */
+ @ SuppressWarnings("unchecked")
+public class AnnouncementNss {
+
+    // ===================================================================================
+    //                                                                           Attribute
+    //                                                                           =========
+    protected AnnouncementCQ _query;
+
+    // ===================================================================================
+    //                                                                         Constructor
+    //                                                                         ===========
+    public AnnouncementNss(AnnouncementCQ query) {
+        _query = query;
+    }
+
+    // ===================================================================================
+    //                                                                            Accessor
+    //                                                                            ========
+    public boolean hasConditionQuery() {
+        return _query != null;
+    }
+
+    // ===================================================================================
+    //                                                           With Nested Foreign Table
+    //                                                           =========================
+
+    // ===================================================================================
+    //                                                          With Nested Referrer Table
+    //                                                          ==========================
+
+    public AnnouncementBodyNss withAnnouncementBodyAsOne() {
+        assertConditionQuery();
+        final String foreignTableAliasName = _query
+                .queryAnnouncementBodyAsOne().getRealAliasName();
+        final String localRelationPath = _query.getRelationPath();
+        _query.getSqlClause().registerSelectedSelectColumn(
+                foreignTableAliasName, "ANNOUNCEMENT", "announcementBodyAsOne",
+                localRelationPath);
+        _query.getSqlClause().registerSelectedForeignInfo(
+                _query.queryAnnouncementBodyAsOne().getRelationPath(),
+                "announcementBodyAsOne");
+        return new AnnouncementBodyNss(_query.queryAnnouncementBodyAsOne());
+    }
+
+    // ===================================================================================
+    //                                                                              Helper
+    //                                                                              ======
+    protected void assertConditionQuery() {
+        if (!hasConditionQuery()) {
+            throw new IllegalStateException("The query should not be null.");
+        }
+    }
+}


Property changes on: announcement/trunk/src/main/java/jp/sf/pal/announcement/db/cbean/nss/AnnouncementNss.java
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/java/jp/sf/pal/announcement/db/exbhv/AnnouncementBhv.java
===================================================================
--- announcement/trunk/src/main/java/jp/sf/pal/announcement/db/exbhv/AnnouncementBhv.java	                        (rev 0)
+++ announcement/trunk/src/main/java/jp/sf/pal/announcement/db/exbhv/AnnouncementBhv.java	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,14 @@
+package jp.sf.pal.announcement.db.exbhv;
+
+/**
+ * The behavior of ANNOUNCEMENT.
+ * <p>
+ * You can implement your original methods here.
+ * This class is NOT overrided when re-generating.
+ * </p>
+ * @author DBFlute(AutoGenerator)
+ */
+ @ SuppressWarnings("unchecked")
+public class AnnouncementBhv extends
+        jp.sf.pal.announcement.db.bsbhv.BsAnnouncementBhv {
+}


Property changes on: announcement/trunk/src/main/java/jp/sf/pal/announcement/db/exbhv/AnnouncementBhv.java
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/java/jp/sf/pal/announcement/db/exbhv/AnnouncementBodyBhv.java
===================================================================
--- announcement/trunk/src/main/java/jp/sf/pal/announcement/db/exbhv/AnnouncementBodyBhv.java	                        (rev 0)
+++ announcement/trunk/src/main/java/jp/sf/pal/announcement/db/exbhv/AnnouncementBodyBhv.java	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,14 @@
+package jp.sf.pal.announcement.db.exbhv;
+
+/**
+ * The behavior of ANNOUNCEMENT_BODY.
+ * <p>
+ * You can implement your original methods here.
+ * This class is NOT overrided when re-generating.
+ * </p>
+ * @author DBFlute(AutoGenerator)
+ */
+ @ SuppressWarnings("unchecked")
+public class AnnouncementBodyBhv extends
+        jp.sf.pal.announcement.db.bsbhv.BsAnnouncementBodyBhv {
+}

Added: announcement/trunk/src/main/java/jp/sf/pal/announcement/db/exdao/AnnouncementBodyDao.java
===================================================================
--- announcement/trunk/src/main/java/jp/sf/pal/announcement/db/exdao/AnnouncementBodyDao.java	                        (rev 0)
+++ announcement/trunk/src/main/java/jp/sf/pal/announcement/db/exdao/AnnouncementBodyDao.java	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,14 @@
+package jp.sf.pal.announcement.db.exdao;
+
+/**
+ * The dao interface of ANNOUNCEMENT_BODY. <br />
+ * <p>
+ * You can implement your original methods here.
+ * This class is NOT overrided when re-generating.
+ * </p>
+ * @author DBFlute(AutoGenerator)
+ */
+ @ SuppressWarnings("unchecked")
+public interface AnnouncementBodyDao extends
+        jp.sf.pal.announcement.db.bsdao.BsAnnouncementBodyDao {
+}


Property changes on: announcement/trunk/src/main/java/jp/sf/pal/announcement/db/exdao/AnnouncementBodyDao.java
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/java/jp/sf/pal/announcement/db/exdao/AnnouncementDao.java
===================================================================
--- announcement/trunk/src/main/java/jp/sf/pal/announcement/db/exdao/AnnouncementDao.java	                        (rev 0)
+++ announcement/trunk/src/main/java/jp/sf/pal/announcement/db/exdao/AnnouncementDao.java	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,14 @@
+package jp.sf.pal.announcement.db.exdao;
+
+/**
+ * The dao interface of ANNOUNCEMENT. <br />
+ * <p>
+ * You can implement your original methods here.
+ * This class is NOT overrided when re-generating.
+ * </p>
+ * @author DBFlute(AutoGenerator)
+ */
+ @ SuppressWarnings("unchecked")
+public interface AnnouncementDao extends
+        jp.sf.pal.announcement.db.bsdao.BsAnnouncementDao {
+}


Property changes on: announcement/trunk/src/main/java/jp/sf/pal/announcement/db/exdao/AnnouncementDao.java
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/java/jp/sf/pal/announcement/db/exentity/Announcement.java
===================================================================
--- announcement/trunk/src/main/java/jp/sf/pal/announcement/db/exentity/Announcement.java	                        (rev 0)
+++ announcement/trunk/src/main/java/jp/sf/pal/announcement/db/exentity/Announcement.java	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,30 @@
+package jp.sf.pal.announcement.db.exentity;
+
+/**
+ * The entity of ANNOUNCEMENT.
+ * <p>
+ * You can implement your original methods here.
+ * This class is NOT overrided when re-generating.
+ * </p>
+ * @author DBFlute(AutoGenerator)
+ */
+ @ SuppressWarnings("unchecked")
+public class Announcement extends
+        jp.sf.pal.announcement.db.bsentity.BsAnnouncement {
+
+    /** Serial version UID. (Default) */
+    private static final long serialVersionUID = 1L;
+
+    public String getContent() {
+        if (getAnnouncementBodyAsOne() != null) {
+            return getAnnouncementBodyAsOne().getContent();
+        }
+        return null;
+    }
+
+    public void setContent(String content) {
+        if (getAnnouncementBodyAsOne() != null) {
+            getAnnouncementBodyAsOne().setContent(content);
+        }
+    }
+}


Property changes on: announcement/trunk/src/main/java/jp/sf/pal/announcement/db/exentity/Announcement.java
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/java/jp/sf/pal/announcement/db/exentity/AnnouncementBody.java
===================================================================
--- announcement/trunk/src/main/java/jp/sf/pal/announcement/db/exentity/AnnouncementBody.java	                        (rev 0)
+++ announcement/trunk/src/main/java/jp/sf/pal/announcement/db/exentity/AnnouncementBody.java	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,24 @@
+package jp.sf.pal.announcement.db.exentity;
+
+/**
+ * The entity of ANNOUNCEMENT_BODY.
+ * <p>
+ * You can implement your original methods here.
+ * This class is NOT overrided when re-generating.
+ * </p>
+ * @author DBFlute(AutoGenerator)
+ */
+ @ SuppressWarnings("unchecked")
+public class AnnouncementBody extends
+        jp.sf.pal.announcement.db.bsentity.BsAnnouncementBody {
+
+    /** Serial version UID. (Default) */
+    private static final long serialVersionUID = 1L;
+
+    public AnnouncementBody() {
+    }
+
+    public AnnouncementBody(String content) {
+        setContent(content);
+    }
+}


Property changes on: announcement/trunk/src/main/java/jp/sf/pal/announcement/db/exentity/AnnouncementBody.java
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/java/jp/sf/pal/announcement/dxo/AnnouncementDxo.java
===================================================================
--- announcement/trunk/src/main/java/jp/sf/pal/announcement/dxo/AnnouncementDxo.java	                        (rev 0)
+++ announcement/trunk/src/main/java/jp/sf/pal/announcement/dxo/AnnouncementDxo.java	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,18 @@
+package jp.sf.pal.announcement.dxo;
+
+import java.util.List;
+import java.util.Map;
+
+import jp.sf.pal.announcement.db.exentity.Announcement;
+import jp.sf.pal.announcement.web.edit.EditContentPage;
+
+public interface AnnouncementDxo {
+    public void convertFromAnnouncementToPage(Announcement announcement,
+            EditContentPage page);
+
+    public void convertFromListAnnouncementToListMap(
+            List<Announcement> announcementList, List<Map<String, Object>> list);
+
+    public void convertFromPageToAnnouncement(EditContentPage page,
+            Announcement announcement);
+}


Property changes on: announcement/trunk/src/main/java/jp/sf/pal/announcement/dxo/AnnouncementDxo.java
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/java/jp/sf/pal/announcement/filter/AnnouncementFilter.java
===================================================================
--- announcement/trunk/src/main/java/jp/sf/pal/announcement/filter/AnnouncementFilter.java	                        (rev 0)
+++ announcement/trunk/src/main/java/jp/sf/pal/announcement/filter/AnnouncementFilter.java	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,45 @@
+package jp.sf.pal.announcement.filter;
+
+import java.io.IOException;
+
+import javax.portlet.ActionRequest;
+import javax.portlet.ActionResponse;
+import javax.portlet.PortletException;
+import javax.portlet.RenderRequest;
+import javax.portlet.RenderResponse;
+
+import jp.sf.pal.announcement.AnnouncementConstraints;
+
+import org.apache.portals.bridges.portletfilter.PortletFilter;
+import org.apache.portals.bridges.portletfilter.PortletFilterChain;
+import org.apache.portals.bridges.portletfilter.PortletFilterConfig;
+
+public class AnnouncementFilter implements PortletFilter {
+
+    private String scope;
+
+    public void init(PortletFilterConfig config) throws PortletException {
+        scope = config.getPortletConfig().getInitParameter(
+                AnnouncementConstraints.SCOPE_KEY);
+        if (scope == null) {
+            scope = AnnouncementConstraints.DEFAULT_SCOPE;
+        }
+    }
+
+    public void destroy() {
+    }
+
+    public void processActionFilter(ActionRequest request,
+            ActionResponse response, PortletFilterChain chain)
+            throws PortletException, IOException {
+        request.setAttribute(AnnouncementConstraints.SCOPE_KEY, scope);
+        chain.processActionFilter(request, response);
+    }
+
+    public void renderFilter(RenderRequest request, RenderResponse response,
+            PortletFilterChain chain) throws PortletException, IOException {
+        request.setAttribute(AnnouncementConstraints.SCOPE_KEY, scope);
+        chain.renderFilter(request, response);
+    }
+
+}


Property changes on: announcement/trunk/src/main/java/jp/sf/pal/announcement/filter/AnnouncementFilter.java
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/java/jp/sf/pal/announcement/service/AnnouncementService.java
===================================================================
--- announcement/trunk/src/main/java/jp/sf/pal/announcement/service/AnnouncementService.java	                        (rev 0)
+++ announcement/trunk/src/main/java/jp/sf/pal/announcement/service/AnnouncementService.java	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,135 @@
+package jp.sf.pal.announcement.service;
+
+import java.io.Serializable;
+import java.sql.Timestamp;
+import java.util.List;
+
+import javax.faces.context.ExternalContext;
+import javax.faces.context.FacesContext;
+
+import jp.sf.pal.announcement.AnnouncementConstraints;
+import jp.sf.pal.announcement.db.cbean.AnnouncementCB;
+import jp.sf.pal.announcement.db.exbhv.AnnouncementBhv;
+import jp.sf.pal.announcement.db.exbhv.AnnouncementBodyBhv;
+import jp.sf.pal.announcement.db.exentity.Announcement;
+import jp.sf.pal.announcement.db.exentity.AnnouncementBody;
+
+public class AnnouncementService implements Serializable {
+
+    private static final long serialVersionUID = -1001360275545848402L;
+
+    private AnnouncementBhv announcementBhv;
+
+    private AnnouncementBodyBhv announcementBodyBhv;
+
+    public Announcement getCurrentAvailableAnnouncement() {
+        Timestamp now = new Timestamp(System.currentTimeMillis());
+        AnnouncementCB cb = new AnnouncementCB();
+        cb.setupSelect_AnnouncementBodyAsOne();
+        cb.query().setScope_Equal(getScope());
+        cb.query().setStartDate_LessEqual(now);
+        cb.query().setEndDate_GreaterEqual(now);
+        cb.query().addOrderBy_SortOrder_Desc();
+        List<Announcement> announcementList = announcementBhv.selectList(cb);
+        if (!announcementList.isEmpty()) {
+            ExternalContext externalContext = FacesContext.getCurrentInstance()
+                    .getExternalContext();
+            for (Announcement announcement : announcementList) {
+                if (announcement.getRole() != null) {
+                    if (externalContext.isUserInRole(announcement.getRole())) {
+                        return announcement;
+                    }
+                } else {
+                    return announcement;
+                }
+            }
+        }
+        return getDefaultAnnouncement();
+    }
+
+    public Announcement getAnnouncement(Integer id) {
+        if (id == null) {
+            return null;
+        }
+        AnnouncementCB cb = new AnnouncementCB();
+        cb.setupSelect_AnnouncementBodyAsOne();
+        cb.query().setScope_Equal(getScope());
+        cb.query().setId_Equal(id);
+        return announcementBhv.selectEntity(cb);
+    }
+
+    public void deleteAnnouncement(Announcement announcement) {
+        announcementBhv.delete(announcement);
+    }
+
+    public List<Announcement> getAnnouncementList() {
+        AnnouncementCB cb = new AnnouncementCB();
+        cb.query().setScope_Equal(getScope());
+        cb.query().addOrderBy_SortOrder_Desc();
+        return announcementBhv.selectList(cb);
+    }
+
+    public void createAnnouncement(Announcement announcement) {
+        // prepare
+        announcement.setScope(getScope());
+        if (announcement.getStartDate() == null) {
+            announcement.setStartDate(new Timestamp(
+                    AnnouncementConstraints.MIN_DATE));
+        }
+        if (announcement.getEndDate() == null) {
+            announcement.setEndDate(new Timestamp(
+                    AnnouncementConstraints.MAX_DATE));
+        }
+
+        List<Announcement> announcementList = getAnnouncementList();
+        if (announcement.getRole() != null) {
+            announcementList.add(0, announcement);
+        } else {
+            announcementList.add(announcement);
+        }
+        int sortOrder = announcementList.size();
+        for (Announcement am : announcementList) {
+            am.setSortOrder(sortOrder);
+            announcementBhv.createOrModify(am);
+            sortOrder--;
+        }
+
+        AnnouncementBody ab = announcement.getAnnouncementBodyAsOne();
+        ab.setId(announcement.getId());
+        announcementBodyBhv.create(ab);
+    }
+
+    public void updateAnnouncement(Announcement announcement) {
+        announcementBhv.update(announcement);
+        announcementBodyBhv.update(announcement.getAnnouncementBodyAsOne());
+    }
+
+    private String getScope() {
+        return (String) FacesContext.getCurrentInstance().getExternalContext()
+                .getRequestMap().get(AnnouncementConstraints.SCOPE_KEY);
+    }
+
+    private Announcement getDefaultAnnouncement() {
+        Announcement announcement = new Announcement();
+        announcement.setTitle("No Title");
+        announcement.setAnnouncementBodyAsOne(new AnnouncementBody(
+                "No content."));
+        return announcement;
+    }
+
+    public AnnouncementBhv getAnnouncementBhv() {
+        return announcementBhv;
+    }
+
+    public void setAnnouncementBhv(AnnouncementBhv announcementBhv) {
+        this.announcementBhv = announcementBhv;
+    }
+
+    public AnnouncementBodyBhv getAnnouncementBodyBhv() {
+        return announcementBodyBhv;
+    }
+
+    public void setAnnouncementBodyBhv(AnnouncementBodyBhv announcementBodyBhv) {
+        this.announcementBodyBhv = announcementBodyBhv;
+    }
+}


Property changes on: announcement/trunk/src/main/java/jp/sf/pal/announcement/service/AnnouncementService.java
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/java/jp/sf/pal/announcement/web/edit/EditContentPage.java
===================================================================
--- announcement/trunk/src/main/java/jp/sf/pal/announcement/web/edit/EditContentPage.java	                        (rev 0)
+++ announcement/trunk/src/main/java/jp/sf/pal/announcement/web/edit/EditContentPage.java	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,251 @@
+package jp.sf.pal.announcement.web.edit;
+
+import java.io.Serializable;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
+import java.util.Map;
+
+import javax.faces.context.ExternalContext;
+import javax.faces.context.FacesContext;
+
+import jp.sf.pal.announcement.AnnouncementConstraints;
+import jp.sf.pal.announcement.db.exentity.Announcement;
+import jp.sf.pal.announcement.db.exentity.AnnouncementBody;
+import jp.sf.pal.announcement.dxo.AnnouncementDxo;
+import jp.sf.pal.announcement.service.AnnouncementService;
+import jp.sf.pal.common.util.FacesMessageUtil;
+
+import org.seasar.framework.log.Logger;
+import org.seasar.teeda.extension.annotation.convert.DateTimeConverter;
+import org.seasar.teeda.extension.annotation.validator.Required;
+import org.seasar.teeda.extension.util.LabelHelper;
+
+public class EditContentPage implements Serializable {
+
+    private static final long serialVersionUID = 9019345839703716443L;
+
+    /**
+     * Logger for this class
+     */
+    private static final Logger logger = Logger
+            .getLogger(EditContentPage.class);
+
+    public String mode;
+
+    public Integer id;
+
+    @Required
+    public String title;
+
+    @DateTimeConverter(pattern = "yyyy/MM/dd")
+    public Date startDate;
+
+    @DateTimeConverter(pattern = "yyyy/MM/dd")
+    public Date endDate;
+
+    public String role;
+
+    @Required
+    public String content;
+
+    public List<Map<String, Object>> announcementItems;
+
+    private AnnouncementService announcementService;
+
+    private AnnouncementDxo announcementDxo;
+
+    private LabelHelper labelHelper;
+
+    public Class<?> initialize() {
+        return null;
+    }
+
+    public Class<?> prerender() {
+        if (id != null) {
+            Announcement announcement = announcementService.getAnnouncement(id);
+            if (announcement == null) {
+                FacesMessageUtil.addErrorMessage("could.not.find.announcement",
+                        new Object[] { id });
+                logger.log("EAM0001", new Object[] { id });
+            } else {
+                if ("delete".equals(mode)) {
+                    //delete
+                    try {
+                        announcementService.deleteAnnouncement(announcement);
+                        FacesMessageUtil.addInfoMessage("deleted.announcement",
+                                new Object[] { id });
+                        if (logger.isInfoEnabled()) {
+                            logger.log("IAM0001", new Object[] { id });
+                        }
+                    } catch (Exception e) {
+                        FacesMessageUtil.addErrorMessage(
+                                "failed.to.delete.announcement",
+                                new Object[] { id });
+                        logger.log("EAM0002", new Object[] { id }, e);
+                    }
+                } else {
+                    // edit mode
+                    announcementDxo.convertFromAnnouncementToPage(announcement,
+                            this);
+                }
+            }
+        }
+
+        // announcement list
+        List<Announcement> announcementList = announcementService
+                .getAnnouncementList();
+        announcementItems = new ArrayList<Map<String, Object>>();
+        announcementDxo.convertFromListAnnouncementToListMap(announcementList,
+                announcementItems);
+
+        FacesMessageUtil.renderMessages();
+        return null;
+    }
+
+    public Class<?> doFinishCreateNew() {
+        return EditContentPage.class;
+    }
+
+    public Class<?> doFinishSave() {
+        if (id == null) {
+            // new
+            Announcement announcement = new Announcement();
+            announcement.setAnnouncementBodyAsOne(new AnnouncementBody());
+
+            // update values
+            announcementDxo.convertFromPageToAnnouncement(this, announcement);
+
+            try {
+                announcementService.createAnnouncement(announcement);
+
+                FacesMessageUtil.addInfoMessage("created.announcement");
+                if (logger.isInfoEnabled()) {
+                    logger.log("IAM0002", null);
+                }
+            } catch (Exception e) {
+                FacesMessageUtil
+                        .addErrorMessage("failed.to.create.announcement");
+                logger.log("EAM0004", null, e);
+                return null;
+            }
+
+        } else {
+            // update
+            Announcement announcement = announcementService.getAnnouncement(id);
+            if (announcement == null) {
+                FacesMessageUtil.addErrorMessage("could.not.find.announcement",
+                        new Object[] { id });
+                logger.log("EAM0003", new Object[] { id });
+                return null;
+            }
+
+            // update values
+            announcementDxo.convertFromPageToAnnouncement(this, announcement);
+
+            try {
+                announcementService.updateAnnouncement(announcement);
+
+                FacesMessageUtil.addInfoMessage("updated.announcement",
+                        new Object[] { id });
+                if (logger.isInfoEnabled()) {
+                    logger.log("IAM0003", new Object[] { id });
+                }
+            } catch (Exception e) {
+                FacesMessageUtil
+                        .addErrorMessage("failed.to.update.announcement");
+                logger.log("EAM0005", null, e);
+                return null;
+            }
+        }
+
+        return EditContentPage.class;
+    }
+
+    public String getFckeditorContent() {
+        ExternalContext externalContext = FacesContext.getCurrentInstance()
+                .getExternalContext();
+        String namespace = externalContext.encodeNamespace("");
+        String contextPath = externalContext.getRequestContextPath();
+
+        StringBuilder buf = new StringBuilder();
+        buf.append("<script type=\"text/javascript\">").append("\n");
+        buf.append("<!--").append("\n");
+        buf.append("var ").append(namespace).append(
+                "FCKeditor = new FCKeditor(\"editContentForm")
+                .append(namespace).append(":content").append(namespace).append(
+                        "\");").append("\n");
+        buf.append(namespace).append("FCKeditor.BasePath = \"").append(
+                contextPath).append("/fckeditor/\";").append("\n");
+        buf.append(namespace).append(
+                "FCKeditor.Config[\"CustomConfigurationsPath\"] = \"").append(
+                externalContext.getRequestContextPath()).append(
+                "/fckeditor/myconfig.js\";").append("\n");
+        buf.append(namespace).append(
+                "FCKeditor.ToolbarSet = \"AnnouncementToolbar\";").append("\n");
+        buf.append(namespace).append("FCKeditor.ReplaceTextarea();").append(
+                "\n");
+        buf.append("//-->").append("\n");
+        buf.append("</script>").append("\n");
+        return buf.toString();
+    }
+
+    public String getFckeditorScriptSrc() {
+        return FacesContext.getCurrentInstance().getExternalContext()
+                .getRequestContextPath()
+                + "/fckeditor/fckeditor.js";
+    }
+
+    public AnnouncementService getAnnouncementService() {
+        return announcementService;
+    }
+
+    public void setAnnouncementService(AnnouncementService announcementService) {
+        this.announcementService = announcementService;
+    }
+
+    public AnnouncementDxo getAnnouncementDxo() {
+        return announcementDxo;
+    }
+
+    public void setAnnouncementDxo(AnnouncementDxo announcementDxo) {
+        this.announcementDxo = announcementDxo;
+    }
+
+    public LabelHelper getLabelHelper() {
+        return labelHelper;
+    }
+
+    public void setLabelHelper(LabelHelper labelHelper) {
+        this.labelHelper = labelHelper;
+    }
+
+    public Date getStartDate() {
+        if (startDate != null
+                && startDate.getTime() <= AnnouncementConstraints.MIN_DATE) {
+            return null;
+        }
+        return startDate;
+    }
+
+    public Date getEndDate() {
+        if (endDate != null
+                && endDate.getTime() >= AnnouncementConstraints.MAX_DATE) {
+            return null;
+        }
+        return endDate;
+    }
+
+    public String getDoFinishSaveValue() {
+        if (id == null) {
+            return labelHelper.getLabelValue("create");
+        } else {
+            return labelHelper.getLabelValue("update");
+        }
+    }
+
+    public String getDoFinishCreateNewValue() {
+        return labelHelper.getLabelValue("new");
+    }
+
+}


Property changes on: announcement/trunk/src/main/java/jp/sf/pal/announcement/web/edit/EditContentPage.java
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/java/jp/sf/pal/announcement/web/view/DisplayContentPage.java
===================================================================
--- announcement/trunk/src/main/java/jp/sf/pal/announcement/web/view/DisplayContentPage.java	                        (rev 0)
+++ announcement/trunk/src/main/java/jp/sf/pal/announcement/web/view/DisplayContentPage.java	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,53 @@
+package jp.sf.pal.announcement.web.view;
+
+import java.io.Serializable;
+
+import javax.portlet.PortletResponse;
+import javax.portlet.RenderResponse;
+
+import jp.sf.pal.announcement.db.exentity.Announcement;
+import jp.sf.pal.announcement.service.AnnouncementService;
+import jp.sf.pal.common.util.FacesMessageUtil;
+
+public class DisplayContentPage implements Serializable {
+
+    private static final long serialVersionUID = -3596529450894248441L;
+
+    public String content;
+
+    private AnnouncementService announcementService;
+
+    private PortletResponse response;
+
+    public Class<?> initialize() {
+        return null;
+    }
+
+    public Class<?> prerender() {
+        Announcement announcement = announcementService
+                .getCurrentAvailableAnnouncement();
+        content = announcement.getAnnouncementBodyAsOne().getContent();
+        if (response instanceof RenderResponse) {
+            ((RenderResponse) response).setTitle(announcement.getTitle());
+        }
+        FacesMessageUtil.renderMessages();
+        return null;
+    }
+
+    public AnnouncementService getAnnouncementService() {
+        return announcementService;
+    }
+
+    public void setAnnouncementService(AnnouncementService announcementService) {
+        this.announcementService = announcementService;
+    }
+
+    public PortletResponse getResponse() {
+        return response;
+    }
+
+    public void setResponse(PortletResponse response) {
+        this.response = response;
+    }
+
+}


Property changes on: announcement/trunk/src/main/java/jp/sf/pal/announcement/web/view/DisplayContentPage.java
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/resources/AMMessages.properties
===================================================================
--- announcement/trunk/src/main/resources/AMMessages.properties	                        (rev 0)
+++ announcement/trunk/src/main/resources/AMMessages.properties	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,10 @@
+EAM0001=Could not find the announcement(id={0}).
+EAM0002=Failed to delete the announcement(id={0}).
+EAM0003=Could not find the announcement(id={0}).
+EAM0004=Failed to create the announcement.
+EAM0005=Failed to update the announcement(id={0}).
+
+IAM0001=Deleted announcement({0}).
+IAM0002=Created announcement.
+IAM0003=Updated announcement({0}).
+


Property changes on: announcement/trunk/src/main/resources/AMMessages.properties
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/resources/app.dicon
===================================================================
--- announcement/trunk/src/main/resources/app.dicon	                        (rev 0)
+++ announcement/trunk/src/main/resources/app.dicon	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE components PUBLIC "-//SEASAR//DTD S2Container 2.4//EN"
+	"http://www.seasar.org/dtd/components24.dtd">
+<components>
+	<include path="convention.dicon"/>
+	<include path="aop.dicon"/>
+	<include path="app_aop.dicon"/>
+	<include path="teedaExtension.dicon"/>
+	<include path="dxo.dicon"/>
+	<include path="dbflute.dicon"/>
+</components>

Added: announcement/trunk/src/main/resources/appMessages.properties
===================================================================
--- announcement/trunk/src/main/resources/appMessages.properties	                        (rev 0)
+++ announcement/trunk/src/main/resources/appMessages.properties	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,7 @@
+could.not.find.announcement=Could not find the annnouncement(id={0}). If you see this error again, please contact to a site administrator.
+deleted.announcement=Deleted announcement(id={0}).
+failed.to.delete.announcement=Failed to delete the announcement(id={0}). If you see this error again, please contact to a site administrator.
+created.announcement=Created announcement.
+failed.to.create.announcement=Failed to create an announcement. If you see this error again, please contact to a site administrator.
+updated.announcement=Updated announcement(id={0}).
+failed.to.update.announcement=Failed to update the announcement(id={0}). If you see this error again, please contact to a site administrator.


Property changes on: announcement/trunk/src/main/resources/appMessages.properties
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/resources/appMessages_ja.properties
===================================================================
--- announcement/trunk/src/main/resources/appMessages_ja.properties	                        (rev 0)
+++ announcement/trunk/src/main/resources/appMessages_ja.properties	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,7 @@
+could.not.find.announcement=\u304a\u77e5\u3089\u305b\u60c5\u5831(id={0})\u3092\u898b\u3064\u3051\u3089\u308c\u307e\u305b\u3093\u3067\u3057\u305f\u3002\u518d\u5ea6\u3001\u3053\u306e\u30a8\u30e9\u30fc\u304c\u8868\u793a\u3055\u308c\u308b\u5834\u5408\u306f\u7ba1\u7406\u8005\u306b\u304a\u554f\u3044\u5408\u308f\u305b\u304f\u3060\u3055\u3044\u3002
+deleted.announcement=\u304a\u77e5\u3089\u305b\u60c5\u5831(id={0})\u3092\u524a\u9664\u3057\u307e\u3057\u305f\u3002
+failed.to.delete.announcement=\u304a\u77e5\u3089\u305b\u60c5\u5831(id={0})\u306e\u524a\u9664\u306b\u5931\u6557\u3057\u307e\u3057\u305f\u3002\u518d\u5ea6\u3001\u3053\u306e\u30a8\u30e9\u30fc\u304c\u8868\u793a\u3055\u308c\u308b\u5834\u5408\u306f\u7ba1\u7406\u8005\u306b\u304a\u554f\u3044\u5408\u308f\u305b\u304f\u3060\u3055\u3044\u3002
+created.announcement=\u304a\u77e5\u3089\u305b\u60c5\u5831\u3092\u4f5c\u6210\u3057\u307e\u3057\u305f\u3002
+failed.to.create.announcement=\u304a\u77e5\u3089\u305b\u60c5\u5831\u306e\u4f5c\u6210\u306b\u5931\u6557\u3057\u307e\u3057\u305f\u3002\u518d\u5ea6\u3001\u3053\u306e\u30a8\u30e9\u30fc\u304c\u8868\u793a\u3055\u308c\u308b\u5834\u5408\u306f\u7ba1\u7406\u8005\u306b\u304a\u554f\u3044\u5408\u308f\u305b\u304f\u3060\u3055\u3044\u3002
+updated.announcement=\u304a\u77e5\u3089\u305b\u60c5\u5831(id={0})\u3092\u66f4\u65b0\u3057\u307e\u3057\u305f\u3002
+failed.to.update.announcement=\u304a\u77e5\u3089\u305b\u60c5\u5831(id={0})\u306e\u66f4\u65b0\u306b\u5931\u6557\u3057\u307e\u3057\u305f\u3002\u518d\u5ea6\u3001\u3053\u306e\u30a8\u30e9\u30fc\u304c\u8868\u793a\u3055\u308c\u308b\u5834\u5408\u306f\u7ba1\u7406\u8005\u306b\u304a\u554f\u3044\u5408\u308f\u305b\u304f\u3060\u3055\u3044\u3002


Property changes on: announcement/trunk/src/main/resources/appMessages_ja.properties
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/resources/app_aop.dicon
===================================================================
--- announcement/trunk/src/main/resources/app_aop.dicon	                        (rev 0)
+++ announcement/trunk/src/main/resources/app_aop.dicon	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE components PUBLIC "-//SEASAR//DTD S2Container 2.4//EN"
+	"http://www.seasar.org/dtd/components24.dtd">
+<components namespace="app_aop">
+	<include path="convention.dicon"/>
+	<component name="actionSupportInterceptor" class="org.seasar.teeda.extension.interceptor.ActionSupportInterceptor" />
+	<component name="appFacesExceptionThrowsInterceptor" class="org.seasar.teeda.core.interceptor.AppFacesExceptionThrowsInterceptor" />
+</components>

Added: announcement/trunk/src/main/resources/convention.dicon
===================================================================
--- announcement/trunk/src/main/resources/convention.dicon	                        (rev 0)
+++ announcement/trunk/src/main/resources/convention.dicon	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE components PUBLIC "-//SEASAR2.1//DTD S2Container//EN"
+	"http://www.seasar.org/dtd/components21.dtd">
+<components>
+	<component class="org.seasar.framework.convention.impl.NamingConventionImpl">
+		<initMethod name="addRootPackageName">
+			<arg>"jp.sf.pal.announcement"</arg>
+		</initMethod>
+	</component>
+</components>

Added: announcement/trunk/src/main/resources/creator.dicon
===================================================================
--- announcement/trunk/src/main/resources/creator.dicon	                        (rev 0)
+++ announcement/trunk/src/main/resources/creator.dicon	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="Shift_JIS"?>
+<!DOCTYPE components PUBLIC "-//SEASAR2.1//DTD S2Container//EN"
+	"http://www.seasar.org/dtd/components21.dtd">
+<components>
+	<include path="convention.dicon"/>
+	<include path="customizer.dicon"/>
+	<component class="org.seasar.framework.container.creator.PageCreator"/>
+	<component class="org.seasar.framework.container.creator.ActionCreator"/>
+	<component class="org.seasar.framework.container.creator.DaoCreator"/>
+	<component class="org.seasar.framework.container.creator.DtoCreator"/>
+	<component class="org.seasar.framework.container.creator.DxoCreator"/>
+	<component class="org.seasar.framework.container.creator.HelperCreator"/>
+	<component class="org.seasar.framework.container.creator.LogicCreator"/>
+	<component class="org.seasar.framework.container.creator.ServiceCreator"/>
+	<component class="org.seasar.framework.container.creator.InterceptorCreator"/>
+	<component class="org.seasar.framework.container.creator.ValidatorCreator"/>
+	<component class="org.seasar.framework.container.creator.ConverterCreator"/>
+    <component class="jp.sf.pal.common.creator.PagerCreator"/>
+</components>

Added: announcement/trunk/src/main/resources/customizer.dicon
===================================================================
--- announcement/trunk/src/main/resources/customizer.dicon	                        (rev 0)
+++ announcement/trunk/src/main/resources/customizer.dicon	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,73 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE components PUBLIC "-//SEASAR//DTD S2Container 2.4//EN" 
+	"http://www.seasar.org/dtd/components24.dtd">
+<components>
+  <include path="default-customizer.dicon"/>
+
+  <component name="pageCustomizer" class="org.seasar.framework.container.customizer.CustomizerChain">
+    <initMethod name="addCustomizer">
+      <arg>traceCustomizer</arg>
+    </initMethod>
+    <initMethod name="addCustomizer">
+      <arg>
+        <component class="org.seasar.framework.container.customizer.AspectCustomizer">
+          <initMethod name="addInterceptorName">
+            <arg>"app_aop.appFacesExceptionThrowsInterceptor"</arg>
+          </initMethod>
+          <property name="pointcut">"do.*, initialize, prerender"</property>
+        </component>
+      </arg>
+    </initMethod>
+  </component>
+  <component name="actionCustomizer" class="org.seasar.framework.container.customizer.CustomizerChain">
+    <initMethod name="addCustomizer">
+      <arg>traceCustomizer</arg>
+    </initMethod>
+    <initMethod name="addCustomizer">
+      <arg>
+        <component class="org.seasar.framework.container.customizer.AspectCustomizer">
+          <initMethod name="addInterceptorName">
+            <arg>"app_aop.actionSupportInterceptor"</arg>
+          </initMethod>
+          <property name="pointcut">"do.*, initialize, prerender"</property>
+        </component>
+      </arg>
+    </initMethod>
+  </component>
+  <component name="serviceCustomizer" class="org.seasar.framework.container.customizer.CustomizerChain">
+    <initMethod name="addCustomizer">
+      <arg>traceCustomizer</arg>
+    </initMethod>
+    <initMethod name="addCustomizer">
+      <arg>requiredTxCustomizer</arg>
+    </initMethod>
+  </component>
+  <component name="logicCustomizer" class="org.seasar.framework.container.customizer.CustomizerChain">
+    <initMethod name="addCustomizer">
+      <arg>traceCustomizer</arg>
+    </initMethod>
+  </component>
+  <component name="daoCustomizer" class="org.seasar.framework.container.customizer.CustomizerChain">
+    <initMethod name="addCustomizer">
+      <arg>traceCustomizer</arg>
+    </initMethod>
+    <initMethod name="addCustomizer">
+      <arg>s2DaoCustomizer</arg>
+    </initMethod>
+  </component>
+  <component name="dxoCustomizer" class="org.seasar.framework.container.customizer.CustomizerChain">
+    <initMethod name="addCustomizer">
+      <arg>traceCustomizer</arg>
+    </initMethod>
+    <initMethod name="addCustomizer">
+      <arg>s2DxoCustomizer</arg>
+    </initMethod>
+  </component>
+  <component name="helperCustomizer" class="org.seasar.framework.container.customizer.CustomizerChain">
+    <initMethod name="addCustomizer">
+      <arg>traceCustomizer</arg>
+    </initMethod>
+  </component>
+  <component name="pagerCustomizer" class="org.seasar.framework.container.customizer.CustomizerChain">
+  </component>
+</components>

Added: announcement/trunk/src/main/resources/dbflute.dicon
===================================================================
--- announcement/trunk/src/main/resources/dbflute.dicon	                        (rev 0)
+++ announcement/trunk/src/main/resources/dbflute.dicon	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,56 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE components PUBLIC "-//SEASAR2.1//DTD S2Container//EN"
+    "http://www.seasar.org/dtd/components21.dtd">
+
+<components namespace="dbflute">
+    <include path="j2ee.dicon"/>
+
+    <!-- S2Dao component. -->
+    <component class="jp.sf.pal.announcement.db.allcommon.s2dao.S2DaoMetaDataFactoryImpl">
+        <property name="sqlFileEncoding">"UTF-8"</property>
+    </component>
+    <component name="interceptor" class="jp.sf.pal.announcement.db.allcommon.s2dao.S2DaoInterceptor"/>
+    <component class="org.seasar.dao.impl.AnnotationReaderFactoryImpl"/>
+    <component class="org.seasar.dao.impl.ValueTypeFactoryImpl"/>
+    <component class="jp.sf.pal.announcement.db.allcommon.s2dao.S2BeanMetaDataFactoryImpl"/>
+    <component class="org.seasar.dao.impl.DaoNamingConventionImpl"/>
+    <component class="org.seasar.dao.impl.NullBeanEnhancer"/>
+    <component class="jp.sf.pal.announcement.db.allcommon.s2dao.S2DaoMetaDataExtension$ResultSetHandlerFactoryExtension"/>
+    <component class="org.seasar.dao.impl.DtoMetaDataFactoryImpl"/>
+    <component class="jp.sf.pal.announcement.db.allcommon.s2dao.S2DaoPropertyTypeFactoryBuilderExtension"/>
+    <component class="org.seasar.dao.impl.RelationPropertyTypeFactoryBuilderImpl"/>
+    <component class="org.seasar.dao.impl.DefaultTableNaming"/>
+    <component class="org.seasar.dao.impl.DefaultColumnNaming"/>
+    <component class="org.seasar.dao.impl.ProcedureMetaDataFactoryImpl"/>
+    <component class="jp.sf.pal.announcement.db.allcommon.s2dao.S2DaoLatestSqlProvider"/>
+	<component name="dbfluteStringClobType" class="org.seasar.extension.jdbc.types.StringClobType" />
+
+    <!-- The selector of behavior. -->
+    <component name="behaviorSelector" class="jp.sf.pal.announcement.db.allcommon.CacheBehaviorSelector">
+        <destroyMethod name="destroy"/>
+    </component>
+
+    <!-- The selector of DAO. -->
+    <component name="daoSelector" class="jp.sf.pal.announcement.db.allcommon.CacheDaoSelector">
+        <destroyMethod name="destroy"/>
+    </component>
+
+    <!-- The dao of outsideSql. -->
+    <component class="jp.sf.pal.announcement.db.allcommon.cbean.outsidesql.OutsideSqlDao">
+        <aspect>dbflute.interceptor</aspect>
+    </component>
+
+
+    <!-- ANNOUNCEMENT -->
+    <component name="announcementDao" class="jp.sf.pal.announcement.db.exdao.AnnouncementDao">
+        <aspect>dbflute.interceptor</aspect>
+    </component>
+    <component name="announcementBhv" class="jp.sf.pal.announcement.db.exbhv.AnnouncementBhv"/>
+
+    <!-- ANNOUNCEMENT_BODY -->
+    <component name="announcementBodyDao" class="jp.sf.pal.announcement.db.exdao.AnnouncementBodyDao">
+        <aspect>dbflute.interceptor</aspect>
+    </component>
+    <component name="announcementBodyBhv" class="jp.sf.pal.announcement.db.exbhv.AnnouncementBodyBhv"/>
+
+</components>

Added: announcement/trunk/src/main/resources/env.txt
===================================================================
--- announcement/trunk/src/main/resources/env.txt	                        (rev 0)
+++ announcement/trunk/src/main/resources/env.txt	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1 @@
+product


Property changes on: announcement/trunk/src/main/resources/env.txt
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/resources/env_ut.txt
===================================================================
--- announcement/trunk/src/main/resources/env_ut.txt	                        (rev 0)
+++ announcement/trunk/src/main/resources/env_ut.txt	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1 @@
+ut
\ No newline at end of file


Property changes on: announcement/trunk/src/main/resources/env_ut.txt
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/resources/jdbc.dicon
===================================================================
--- announcement/trunk/src/main/resources/jdbc.dicon	                        (rev 0)
+++ announcement/trunk/src/main/resources/jdbc.dicon	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,158 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE components PUBLIC "-//SEASAR//DTD S2Container 2.4//EN"
+	"http://www.seasar.org/dtd/components24.dtd">
+<components namespace="jdbc">
+	<include path="jta.dicon"/>
+	<include path="jdbc-extension.dicon"/>
+
+	<component class="org.seasar.extension.jdbc.impl.BasicResultSetFactory"/>
+	<component class="org.seasar.extension.jdbc.impl.ConfigurableStatementFactory">
+		<arg>
+			<component class="org.seasar.extension.jdbc.impl.BasicStatementFactory"/>
+		</arg>
+		<property name="fetchSize">100</property>
+		<!--
+		<property name="maxRows">100</property>
+		-->
+	</component>
+	<!--
+	<component class="org.seasar.extension.jdbc.impl.OracleResultSetFactory"/>
+	<component class="org.seasar.extension.jdbc.impl.BooleanToIntStatementFactory"/>
+	-->
+	<!-- for Derby Embedded
+	<component name="xaDataSource"
+		class="org.seasar.extension.dbcp.impl.XADataSourceImpl">
+		<property name="driverClassName">
+			"org.apache.derby.jdbc.EmbeddedDriver"
+		</property>
+		<property name="URL">
+			"jdbc:derby:directory:" + container.getComponent(@java.lang.Class @ forName("javax.servlet.ServletContext")).getRealPath("/WEB-INF/db/announcement")
+		</property>
+		<property name="user">""</property>
+		<property name="password">""</property>
+	</component>
+    -->
+
+	<!-- for H2 -->
+    <!--
+	<component name="xaDataSource"
+		class="org.seasar.extension.dbcp.impl.XADataSourceImpl">
+		<property name="driverClassName">
+			"org.h2.Driver"
+		</property>
+		<property name="URL">
+			"jdbc:h2:tcp://localhost:9092/demo"
+		</property>
+		<property name="user">"sa"</property>
+		<property name="password">""</property>
+	</component>
+    -->
+	<!-- for Oracle -->
+	<!--
+	<component name="xaDataSource"
+		class="org.seasar.extension.dbcp.impl.XADataSourceImpl">
+		<property name="driverClassName">
+			"oracle.jdbc.driver.OracleDriver"
+		</property>
+		<property name="URL">
+			"jdbc:oracle:thin:@xxx:1521:xxx"
+		</property>
+		<property name="user">"xxx"</property>
+		<property name="password">"xxx"</property>
+	</component>
+	-->
+
+	<!-- for PostgreSQL -->
+	<!--
+	<component name="xaDataSource"
+		class="org.seasar.extension.dbcp.impl.XADataSourceImpl">
+		<property name="driverClassName">
+			"org.postgresql.Driver"
+        </property>
+        <property name="URL">
+          "jdbc:postgresql://localhost/TEST"
+        </property>
+        <property name="user">"xxxx"</property>
+        <property name="password">"xxxx"</property>
+    </component>
+    -->
+
+	<!-- MySQL
+	- MySQL4.0以下でマルチバイト文字を扱う場合には,URL指定の後に,
+		以下の接続パラメータを追加で指定してください.
+		useUnicode=true
+		characterEncoding=[MySQLのエンコーディングに対応した
+		Javaのエンコーディング名]
+		例:"jdbc:mysql://localhost:3306/test?useUnicode=true" +
+		"&amp;characterEncoding=Windows-31J"
+		
+	- MySQL5.0以降で,エンコーディングがeucjpmsの列を扱う場合には,
+		URL指定の後に,以下の接続パラメータを追加で指定してください.
+		characterEncoding=UTF-8またはWindows-31J
+		characterSetResults=UTF-8またはWindows-31J
+		例:"jdbc:mysql://localhost:3306/test?characterEncoding=UTF-8" +
+		"&amp;characterSetResults=UTF-8"
+		この指定をしない場合,Java側でUCS-2⇔EUC_JP_Solarisの変換が
+		行なわれるため,ユーザー定義外字などの一部の文字が化けます.
+		この指定をすることで,MySQL側でeucjpms⇔ucs2⇔utf8(cp932)の
+		変換が行なわれ,Java側でUCS-2⇔UTF-8(Windows-31J)の変換が
+		行なわれるようになります.この結果,文字化けを防げます.
+		なおJIS X 0212(補助漢字)を使用する場合は,Windows-31Jではなく
+		UTF-8を指定する必要があります.
+		
+	- 上記以外の場合は,my.confでdefault-character-setの設定を適切に
+		(cp932やutf8など.デフォルトのlatin1は不可)行なっていれば,
+		文字化けは防げます.
+    -->
+	<component name="xaDataSource"
+		class="org.seasar.extension.dbcp.impl.XADataSourceImpl">
+		<property name="driverClassName">
+			"com.mysql.jdbc.Driver"
+		</property>
+		<property name="URL">
+			"jdbc:mysql://localhost:3306/announcement?noDatetimeStringSync=true&amp;zeroDateTimeBehavior=convertToNull&amp;useUnicode=true&amp;characterEncoding=UTF-8&amp;autoReconnect=true"
+		</property>
+		<property name="user">"amuser"</property>
+		<property name="password">"am123"</property>
+	</component>
+
+	<!-- for SQLServer -->
+	<!--
+	<component name="xaDataSource"
+		class="org.seasar.extension.dbcp.impl.XADataSourceImpl">
+		<property name="driverClassName">
+			"net.sourceforge.jtds.jdbc.Driver"
+        </property>
+        <property name="URL">
+            "jdbc:jtds:sqlserver://localhost/TEST;instance=SQLEXPRESS"
+        </property>
+        <property name="user">"xxxx"</property>
+        <property name="password">"xxxx"</property>
+    </component>
+	-->
+
+	<component name="connectionPool"
+		class="org.seasar.extension.dbcp.impl.ConnectionPoolImpl">
+		<property name="timeout">600</property>
+		<property name="maxPoolSize">10</property>
+		<property name="allowLocalTx">true</property>
+		<destroyMethod name="close"/>
+	</component>
+
+	<component name="dataSource"
+		class="org.seasar.extension.dbcp.impl.DataSourceImpl"
+	/>
+
+	<!-- from JNDI -->
+	<!--
+	<component name="dataSource"
+		class="javax.sql.DataSource">
+		@org.seasar.extension.j2ee.JndiResourceLocator @ lookup("java:comp/env/jdbc/DataSource")
+	</component>
+	-->
+	
+	<!--
+	<component name="dataSource"
+		class="org.seasar.extension.datasource.impl.SelectableDataSourceProxy"/>
+	-->
+</components>

Added: announcement/trunk/src/main/resources/jp/sf/pal/announcement/web/edit/label.properties
===================================================================
--- announcement/trunk/src/main/resources/jp/sf/pal/announcement/web/edit/label.properties	                        (rev 0)
+++ announcement/trunk/src/main/resources/jp/sf/pal/announcement/web/edit/label.properties	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,21 @@
+title=Title
+startDate=Start Date
+endDate=End Date
+role=Role
+content=Content
+
+titleInput=Title:
+releaseDateInput=Release Date:
+roleInput=Role:
+
+listTitle=Title
+listStartDate=Start Date
+listEndDate=End Date
+listRole=Role
+listAction=Action
+
+edit=Edit
+delete=Delete
+new=New
+create=Create
+update=Update


Property changes on: announcement/trunk/src/main/resources/jp/sf/pal/announcement/web/edit/label.properties
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/resources/jp/sf/pal/announcement/web/edit/label_ja.properties
===================================================================
--- announcement/trunk/src/main/resources/jp/sf/pal/announcement/web/edit/label_ja.properties	                        (rev 0)
+++ announcement/trunk/src/main/resources/jp/sf/pal/announcement/web/edit/label_ja.properties	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,21 @@
+title=\u30bf\u30a4\u30c8\u30eb
+startDate=\u958b\u59cb\u65e5
+endDate=\u7d42\u4e86\u65e5
+role=\u30ed\u30fc\u30eb
+content=\u5185\u5bb9
+
+titleInput=\u30bf\u30a4\u30c8\u30eb:
+releaseDateInput=\u516c\u958b\u65e5:
+roleInput=\u30ed\u30fc\u30eb:
+
+listTitle=\u30bf\u30a4\u30c8\u30eb
+listStartDate=\u958b\u59cb\u65e5
+listEndDate=\u7d42\u4e86\u65e5
+listRole=\u30ed\u30fc\u30eb
+listAction=\u51e6\u7406
+
+edit=\u7de8\u96c6
+delete=\u524a\u9664
+new=\u30ea\u30bb\u30c3\u30c8
+create=\u4f5c\u6210
+update=\u66f4\u65b0


Property changes on: announcement/trunk/src/main/resources/jp/sf/pal/announcement/web/edit/label_ja.properties
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/resources/s2container.dicon
===================================================================
--- announcement/trunk/src/main/resources/s2container.dicon	                        (rev 0)
+++ announcement/trunk/src/main/resources/s2container.dicon	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE components PUBLIC "-//SEASAR//DTD S2Container 2.4//EN" 
+	"http://www.seasar.org/dtd/components24.dtd">
+<components>
+    <include condition="#ENV == 'ut'" path="warmdeploy.dicon"/>
+    <include condition="#ENV == 'ct'" path="hotdeploy.dicon"/>
+    <include condition="#ENV != 'ut' and #ENV != 'ct'" path="cooldeploy.dicon"/>
+</components>
\ No newline at end of file

Added: announcement/trunk/src/main/resources/teedaCustomize.dicon
===================================================================
--- announcement/trunk/src/main/resources/teedaCustomize.dicon	                        (rev 0)
+++ announcement/trunk/src/main/resources/teedaCustomize.dicon	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE components PUBLIC "-//SEASAR//DTD S2Container 2.4//EN"
+	"http://www.seasar.org/dtd/components24.dtd">
+<components>
+    <component class="org.seasar.teeda.core.render.DefaultComponentIdLookupStrategy" >
+        <property name="cooperateWithForeach">true</property>
+    </component>
+	<component class="org.seasar.teeda.core.application.impl.DefaultComponentLookupStrategy" />
+	<component class="org.seasar.teeda.extension.util.SimpleLabelHelperImpl" />
+</components>

Added: announcement/trunk/src/main/resources/teedaErrorPage.dicon
===================================================================
--- announcement/trunk/src/main/resources/teedaErrorPage.dicon	                        (rev 0)
+++ announcement/trunk/src/main/resources/teedaErrorPage.dicon	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE components PUBLIC "-//SEASAR//DTD S2Container 2.4//EN"
+	"http://www.seasar.org/dtd/components24.dtd">
+<components namespace="teedaErrorPage" >
+
+<!--
+	<component class="org.seasar.teeda.core.util.PortletErrorPageManagerImpl">
+		<initMethod name="addErrorPage">
+			<arg>@java.lang.Throwable @ class</arg>
+			<arg>"/view/error/error.html"</arg>
+		</initMethod>
+	</component>
+
+    <component class="org.seasar.teeda.extension.util.TeedaExtensionErrorPageManagerImpl">
+        <initMethod name="addErrorPage">
+			<arg>@java.lang.Throwable @ class</arg>
+            <arg>"/view/error/error.html"</arg>
+        </initMethod>
+    </component>
+-->
+</components>

Added: announcement/trunk/src/main/webapp/WEB-INF/faces-config.xml
===================================================================
--- announcement/trunk/src/main/webapp/WEB-INF/faces-config.xml	                        (rev 0)
+++ announcement/trunk/src/main/webapp/WEB-INF/faces-config.xml	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,19 @@
+<?xml version="1.0"?>
+
+<!DOCTYPE faces-config PUBLIC
+  "-//Sun Microsystems, Inc.//DTD JavaServer Faces Config 1.0//EN"
+  "http://java.sun.com/dtd/web-facesconfig_1_0.dtd">
+
+<!-- =========== FULL CONFIGURATION FILE ================================== -->
+
+<faces-config>
+	
+    <application>
+    	<message-bundle>appMessages</message-bundle>
+    	<locale-config>
+        	<default-locale>en</default-locale>
+        	<supported-locale>ja</supported-locale>
+    	</locale-config>
+	</application>
+	
+</faces-config>
\ No newline at end of file


Property changes on: announcement/trunk/src/main/webapp/WEB-INF/faces-config.xml
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/webapp/WEB-INF/portlet.xml
===================================================================
--- announcement/trunk/src/main/webapp/WEB-INF/portlet.xml	                        (rev 0)
+++ announcement/trunk/src/main/webapp/WEB-INF/portlet.xml	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,38 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<portlet-app version="1.0">
+  <portlet>
+    <portlet-name>AnnouncementPortlet</portlet-name>
+    <display-name>Announcement</display-name>
+    <description>Display and manage announcements.</description>
+    <portlet-class>org.apache.portals.bridges.portletfilter.FilterPortlet</portlet-class>
+    <init-param>
+      <name>portlet-class</name>
+      <value>org.seasar.teeda.core.portlet.FacesPortlet</value>
+    </init-param>
+    <init-param>
+      <name>portlet-filters</name>
+      <value>jp.sf.pal.announcement.filter.AnnouncementFilter,jp.sf.pal.facesresponse.FacesResponseFilter,jp.sf.pal.pooptimizer.OptimizerFilter,org.seasar.portlet.filter.S2PortletFilter,org.seasar.portlet.filter.HotdeployPortletFilter</value>
+    </init-param>
+    <init-param>
+      <name>view-page</name>
+      <value>/view/view/displayContent.html</value>
+    </init-param>
+    <init-param>
+      <name>edit-page</name>
+      <value>/view/edit/editContent.html</value>
+    </init-param>
+    <supports>
+      <mime-type>text/html</mime-type>
+      <portlet-mode>VIEW</portlet-mode>
+      <portlet-mode>EDIT</portlet-mode>
+    </supports>
+    <supported-locale>en</supported-locale>
+    <supported-locale>ja</supported-locale>
+<!-- resource-bundle></resource-bundle -->
+    <portlet-info>
+      <title>Announcement</title>
+      <short-title>Announcement</short-title>
+      <keywords>Announcement</keywords>
+    </portlet-info>
+  </portlet>
+</portlet-app>


Property changes on: announcement/trunk/src/main/webapp/WEB-INF/portlet.xml
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/webapp/WEB-INF/web.xml
===================================================================
--- announcement/trunk/src/main/webapp/WEB-INF/web.xml	                        (rev 0)
+++ announcement/trunk/src/main/webapp/WEB-INF/web.xml	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,99 @@
+<?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>
+  <context-param>
+    <param-name>javax.faces.STATE_SAVING_METHOD</param-name>
+    <param-value>server</param-value>
+    <description>
+      State saving method: "client" or "server" (= default)
+      See JSF Specification 2.5.2
+    </description>
+  </context-param>
+  <context-param>
+    <param-name>javax.faces.DEFAULT_SUFFIX</param-name>
+    <param-value>.html</param-value>
+  </context-param>
+  <filter>
+    <filter-name>s2filter</filter-name>
+    <filter-class>org.seasar.framework.container.filter.S2ContainerFilter</filter-class>
+  </filter>
+  <filter>
+    <filter-name>hotdeployfilter</filter-name>
+    <filter-class>org.seasar.framework.container.hotdeploy.HotdeployFilter</filter-class>
+  </filter>
+  <filter>
+    <filter-name>encodingfilter</filter-name>
+    <filter-class>org.seasar.extension.filter.EncodingFilter</filter-class>
+    <init-param>
+      <param-name>encoding</param-name>
+      <param-value>UTF-8</param-value>
+    </init-param>
+  </filter>
+  <filter-mapping>
+    <filter-name>s2filter</filter-name>
+    <url-pattern>/*</url-pattern>
+  </filter-mapping>
+  <filter-mapping>
+    <filter-name>hotdeployfilter</filter-name>
+    <url-pattern>/*</url-pattern>
+<!--
+        <dispatcher>REQUEST</dispatcher>
+        <dispatcher>FORWARD</dispatcher>
+         -->
+  </filter-mapping>
+  <filter-mapping>
+    <filter-name>encodingfilter</filter-name>
+    <url-pattern>/*</url-pattern>
+  </filter-mapping>
+  <listener>
+<!--<listener-class>org.seasar.teeda.core.webapp.TeedaConfigureListener</listener-class>-->
+    <listener-class>org.seasar.teeda.core.webapp.TeedaPortletExtendedConfigureListener</listener-class>
+  </listener>
+<!-- facesServlet -->
+  <servlet>
+    <servlet-name>facesServlet</servlet-name>
+    <servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
+    <load-on-startup>2</load-on-startup>
+  </servlet>
+  <servlet>
+    <servlet-name>s2servlet</servlet-name>
+<!--<servlet-class>org.seasar.framework.container.servlet.S2ContainerServlet</servlet-class>-->
+    <servlet-class>org.seasar.framework.container.servlet.PortletExtendedS2ContainerServlet</servlet-class>
+    <load-on-startup>1</load-on-startup>
+  </servlet>
+  <servlet-mapping>
+    <servlet-name>facesServlet</servlet-name>
+    <url-pattern>/view/*</url-pattern>
+  </servlet-mapping>
+  <servlet-mapping>
+    <servlet-name>s2servlet</servlet-name>
+    <url-pattern>/s2servlet</url-pattern>
+  </servlet-mapping>
+<!--
+    <session-config>
+        <session-timeout>1</session-timeout>
+    </session-config>
+-->
+  <welcome-file-list>
+    <welcome-file>index.html</welcome-file>
+  </welcome-file-list>
+  <security-constraint>
+    <web-resource-collection>
+      <web-resource-name>User Auth</web-resource-name>
+      <url-pattern>/view/*</url-pattern>
+    </web-resource-collection>
+    <auth-constraint>
+      <role-name>manager</role-name>
+    </auth-constraint>
+  </security-constraint>
+  <login-config>
+    <auth-method>BASIC</auth-method>
+    <realm-name>User Auth</realm-name>
+  </login-config>
+  <security-role>
+    <role-name>admin</role-name>
+  </security-role>
+  <security-role>
+    <role-name>manager</role-name>
+  </security-role>
+</web-app>


Property changes on: announcement/trunk/src/main/webapp/WEB-INF/web.xml
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/webapp/fckeditor/editor/_source/classes/fckcontextmenu.js
===================================================================
--- announcement/trunk/src/main/webapp/fckeditor/editor/_source/classes/fckcontextmenu.js	                        (rev 0)
+++ announcement/trunk/src/main/webapp/fckeditor/editor/_source/classes/fckcontextmenu.js	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,214 @@
+/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2008 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * FCKContextMenu Class: renders an control a context menu.
+ */
+
+var FCKContextMenu = function( parentWindow, langDir )
+{
+	this.CtrlDisable = false ;
+
+	var oPanel = this._Panel = new FCKPanel( parentWindow ) ;
+	oPanel.AppendStyleSheet( FCKConfig.SkinEditorCSS ) ;
+	oPanel.IsContextMenu = true ;
+
+	// The FCKTools.DisableSelection doesn't seems to work to avoid dragging of the icons in Mozilla
+	// so we stop the start of the dragging
+	if ( FCKBrowserInfo.IsGecko )
+		oPanel.Document.addEventListener( 'draggesture', function(e) {e.preventDefault(); return false;}, true ) ;
+
+	var oMenuBlock = this._MenuBlock = new FCKMenuBlock() ;
+	oMenuBlock.Panel = oPanel ;
+	oMenuBlock.OnClick = FCKTools.CreateEventListener( FCKContextMenu_MenuBlock_OnClick, this ) ;
+
+	this._Redraw = true ;
+}
+
+
+FCKContextMenu.prototype.SetMouseClickWindow = function( mouseClickWindow )
+{
+	if ( !FCKBrowserInfo.IsIE )
+	{
+		this._Document = mouseClickWindow.document ;
+		if ( FCKBrowserInfo.IsOpera && !( 'oncontextmenu' in document.createElement('foo') ) )
+		{
+			this._Document.addEventListener( 'mousedown', FCKContextMenu_Document_OnMouseDown, false ) ;
+			this._Document.addEventListener( 'mouseup', FCKContextMenu_Document_OnMouseUp, false ) ;
+		}
+		this._Document.addEventListener( 'contextmenu', FCKContextMenu_Document_OnContextMenu, false ) ;
+	}
+}
+
+/**
+ The customData parameter is just a value that will be send to the command that is executed,
+ so it's possible to reuse the same command for several items just by assigning different data for each one.
+*/
+FCKContextMenu.prototype.AddItem = function( name, label, iconPathOrStripInfoArrayOrIndex, isDisabled, customData )
+{
+	var oItem = this._MenuBlock.AddItem( name, label, iconPathOrStripInfoArrayOrIndex, isDisabled, customData ) ;
+	this._Redraw = true ;
+	return oItem ;
+}
+
+FCKContextMenu.prototype.AddSeparator = function()
+{
+	this._MenuBlock.AddSeparator() ;
+	this._Redraw = true ;
+}
+
+FCKContextMenu.prototype.RemoveAllItems = function()
+{
+	this._MenuBlock.RemoveAllItems() ;
+	this._Redraw = true ;
+}
+
+FCKContextMenu.prototype.AttachToElement = function( element )
+{
+	if ( FCKBrowserInfo.IsIE )
+		FCKTools.AddEventListenerEx( element, 'contextmenu', FCKContextMenu_AttachedElement_OnContextMenu, this ) ;
+	else
+		element._FCKContextMenu = this ;
+}
+
+function FCKContextMenu_Document_OnContextMenu( e )
+{
+	var el = e.target ;
+
+	while ( el )
+	{
+		if ( el._FCKContextMenu )
+		{
+			if ( el._FCKContextMenu.CtrlDisable && ( e.ctrlKey || e.metaKey ) )
+				return true ;
+
+			FCKTools.CancelEvent( e ) ;
+			FCKContextMenu_AttachedElement_OnContextMenu( e, el._FCKContextMenu, el ) ;
+			return false ;
+		}
+		el = el.parentNode ;
+	}
+	return true ;
+}
+
+var FCKContextMenu_OverrideButton ;
+
+function FCKContextMenu_Document_OnMouseDown( e )
+{
+	if( !e || e.button != 2 )
+		return false ;
+
+	var el = e.target ;
+
+	while ( el )
+	{
+		if ( el._FCKContextMenu )
+		{
+			if ( el._FCKContextMenu.CtrlDisable && ( e.ctrlKey || e.metaKey ) )
+				return true ;
+
+			var overrideButton = FCKContextMenu_OverrideButton ;
+			if( !overrideButton )
+			{
+				var doc = FCKTools.GetElementDocument( e.target ) ;
+				overrideButton = FCKContextMenu_OverrideButton = doc.createElement('input') ;
+				overrideButton.type = 'button' ;
+				var buttonHolder = doc.createElement('p') ;
+				doc.body.appendChild( buttonHolder ) ;
+				buttonHolder.appendChild( overrideButton ) ;
+			}
+
+			overrideButton.style.cssText = 'position:absolute;top:' + ( e.clientY - 2 ) +
+				'px;left:' + ( e.clientX - 2 ) +
+				'px;width:5px;height:5px;opacity:0.01' ;
+		}
+		el = el.parentNode ;
+	}
+	return false ;
+}
+
+function FCKContextMenu_Document_OnMouseUp( e )
+{
+	var overrideButton = FCKContextMenu_OverrideButton ;
+
+	if ( overrideButton )
+	{
+		var parent = overrideButton.parentNode ;
+		parent.parentNode.removeChild( parent ) ;
+		FCKContextMenu_OverrideButton = undefined ;
+
+		if( e && e.button == 2 )
+		{
+			FCKContextMenu_Document_OnContextMenu( e ) ;
+			return false ;
+		}
+	}
+	return true ;
+}
+
+function FCKContextMenu_AttachedElement_OnContextMenu( ev, fckContextMenu, el )
+{
+	if ( fckContextMenu.CtrlDisable && ( ev.ctrlKey || ev.metaKey ) )
+		return true ;
+
+	var eTarget = el || this ;
+
+	if ( fckContextMenu.OnBeforeOpen )
+		fckContextMenu.OnBeforeOpen.call( fckContextMenu, eTarget ) ;
+
+	if ( fckContextMenu._MenuBlock.Count() == 0 )
+		return false ;
+
+	if ( fckContextMenu._Redraw )
+	{
+		fckContextMenu._MenuBlock.Create( fckContextMenu._Panel.MainNode ) ;
+		fckContextMenu._Redraw = false ;
+	}
+
+	// This will avoid that the content of the context menu can be dragged in IE
+	// as the content of the panel is recreated we need to do it every time
+	FCKTools.DisableSelection( fckContextMenu._Panel.Document.body ) ;
+
+	var x = 0 ;
+	var y = 0 ;
+	if ( FCKBrowserInfo.IsIE )
+	{
+		x = ev.screenX ;
+		y = ev.screenY ;
+	}
+	else if ( FCKBrowserInfo.IsSafari )
+	{
+		x = ev.clientX ;
+		y = ev.clientY ;
+	}
+	else
+	{
+		x = ev.pageX ;
+		y = ev.pageY ;
+	}
+	fckContextMenu._Panel.Show( x, y, ev.currentTarget || null ) ;
+
+	return false ;
+}
+
+function FCKContextMenu_MenuBlock_OnClick( menuItem, contextMenu )
+{
+	contextMenu._Panel.Hide() ;
+	FCKTools.RunFunction( contextMenu.OnItemClick, contextMenu, menuItem ) ;
+}


Property changes on: announcement/trunk/src/main/webapp/fckeditor/editor/_source/classes/fckcontextmenu.js
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/webapp/fckeditor/editor/_source/classes/fckdataprocessor.js
===================================================================
--- announcement/trunk/src/main/webapp/fckeditor/editor/_source/classes/fckdataprocessor.js	                        (rev 0)
+++ announcement/trunk/src/main/webapp/fckeditor/editor/_source/classes/fckdataprocessor.js	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,119 @@
+/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2008 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * The Data Processor is responsible for transforming the input and output data
+ * in the editor. For more info:
+ * http://dev.fckeditor.net/wiki/Components/DataProcessor
+ *
+ * The default implementation offers the base XHTML compatibility features of
+ * FCKeditor. Further Data Processors may be implemented for other purposes.
+ *
+ */
+
+var FCKDataProcessor = function()
+{}
+
+FCKDataProcessor.prototype =
+{
+	/*
+	 * Returns a string representing the HTML format of "data". The returned
+	 * value will be loaded in the editor.
+	 * The HTML must be from <html> to </html>, including <head>, <body> and
+	 * eventually the DOCTYPE.
+	 * Note: HTML comments may already be part of the data because of the
+	 * pre-processing made with ProtectedSource.
+	 *     @param {String} data The data to be converted in the
+	 *            DataProcessor specific format.
+	 */
+	ConvertToHtml : function( data )
+	{
+		// The default data processor must handle two different cases depending
+		// on the FullPage setting. Custom Data Processors will not be
+		// compatible with FullPage, much probably.
+		if ( FCKConfig.FullPage )
+		{
+			// Save the DOCTYPE.
+			FCK.DocTypeDeclaration = data.match( FCKRegexLib.DocTypeTag ) ;
+
+			// Check if the <body> tag is available.
+			if ( !FCKRegexLib.HasBodyTag.test( data ) )
+				data = '<body>' + data + '</body>' ;
+
+			// Check if the <html> tag is available.
+			if ( !FCKRegexLib.HtmlOpener.test( data ) )
+				data = '<html dir="' + FCKConfig.ContentLangDirection + '">' + data + '</html>' ;
+
+			// Check if the <head> tag is available.
+			if ( !FCKRegexLib.HeadOpener.test( data ) )
+				data = data.replace( FCKRegexLib.HtmlOpener, '$&<head><title></title></head>' ) ;
+
+			return data ;
+		}
+		else
+		{
+			var html =
+				FCKConfig.DocType +
+				'<html dir="' + FCKConfig.ContentLangDirection + '"' ;
+
+			// On IE, if you are using a DOCTYPE different of HTML 4 (like
+			// XHTML), you must force the vertical scroll to show, otherwise
+			// the horizontal one may appear when the page needs vertical scrolling.
+			// TODO : Check it with IE7 and make it IE6- if it is the case.
+			if ( FCKBrowserInfo.IsIE && FCKConfig.DocType.length > 0 && !FCKRegexLib.Html4DocType.test( FCKConfig.DocType ) )
+				html += ' style="overflow-y: scroll"' ;
+
+			html += '><head><title></title></head>' +
+				'<body' + FCKConfig.GetBodyAttributes() + '>' +
+				data +
+				'</body></html>' ;
+
+			return html ;
+		}
+	},
+
+	/*
+	 * Converts a DOM (sub-)tree to a string in the data format.
+	 *     @param {Object} rootNode The node that contains the DOM tree to be
+	 *            converted to the data format.
+	 *     @param {Boolean} excludeRoot Indicates that the root node must not
+	 *            be included in the conversion, only its children.
+	 *     @param {Boolean} format Indicates that the data must be formatted
+	 *            for human reading. Not all Data Processors may provide it.
+	 */
+	ConvertToDataFormat : function( rootNode, excludeRoot, ignoreIfEmptyParagraph, format )
+	{
+		var data = FCKXHtml.GetXHTML( rootNode, !excludeRoot, format ) ;
+
+		if ( ignoreIfEmptyParagraph && FCKRegexLib.EmptyOutParagraph.test( data ) )
+			return '' ;
+
+		return data ;
+	},
+
+	/*
+	 * Makes any necessary changes to a piece of HTML for insertion in the
+	 * editor selection position.
+	 *     @param {String} html The HTML to be fixed.
+	 */
+	FixHtml : function( html )
+	{
+		return html ;
+	}
+} ;


Property changes on: announcement/trunk/src/main/webapp/fckeditor/editor/_source/classes/fckdataprocessor.js
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/webapp/fckeditor/editor/_source/classes/fckdocumentfragment_gecko.js
===================================================================
--- announcement/trunk/src/main/webapp/fckeditor/editor/_source/classes/fckdocumentfragment_gecko.js	                        (rev 0)
+++ announcement/trunk/src/main/webapp/fckeditor/editor/_source/classes/fckdocumentfragment_gecko.js	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,46 @@
+/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2008 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * This is a generic Document Fragment object. It is not intended to provide
+ * the W3C implementation, but is a way to fix the missing of a real Document
+ * Fragment in IE (where document.createDocumentFragment() returns a normal
+ * document instead), giving a standard interface for it.
+ * (IE Implementation)
+ */
+
+var FCKDocumentFragment = function( parentDocument, baseDocFrag )
+{
+	this.RootNode = baseDocFrag || parentDocument.createDocumentFragment() ;
+}
+
+FCKDocumentFragment.prototype =
+{
+
+	// Append the contents of this Document Fragment to another element.
+	AppendTo : function( targetNode )
+	{
+		targetNode.appendChild( this.RootNode ) ;
+	},
+
+	InsertAfterNode : function( existingNode )
+	{
+		FCKDomTools.InsertAfterNode( existingNode, this.RootNode ) ;
+	}
+}


Property changes on: announcement/trunk/src/main/webapp/fckeditor/editor/_source/classes/fckdocumentfragment_gecko.js
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/webapp/fckeditor/editor/_source/classes/fckdocumentfragment_ie.js
===================================================================
--- announcement/trunk/src/main/webapp/fckeditor/editor/_source/classes/fckdocumentfragment_ie.js	                        (rev 0)
+++ announcement/trunk/src/main/webapp/fckeditor/editor/_source/classes/fckdocumentfragment_ie.js	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,58 @@
+/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2008 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * This is a generic Document Fragment object. It is not intended to provide
+ * the W3C implementation, but is a way to fix the missing of a real Document
+ * Fragment in IE (where document.createDocumentFragment() returns a normal
+ * document instead), giving a standard interface for it.
+ * (IE Implementation)
+ */
+
+var FCKDocumentFragment = function( parentDocument )
+{
+	this._Document = parentDocument ;
+	this.RootNode = parentDocument.createElement( 'div' ) ;
+}
+
+// Append the contents of this Document Fragment to another node.
+FCKDocumentFragment.prototype =
+{
+
+	AppendTo : function( targetNode )
+	{
+		FCKDomTools.MoveChildren( this.RootNode, targetNode ) ;
+	},
+
+	AppendHtml : function( html )
+	{
+		var eTmpDiv = this._Document.createElement( 'div' ) ;
+		eTmpDiv.innerHTML = html ;
+		FCKDomTools.MoveChildren( eTmpDiv, this.RootNode ) ;
+	},
+
+	InsertAfterNode : function( existingNode )
+	{
+		var eRoot = this.RootNode ;
+		var eLast ;
+
+		while( ( eLast = eRoot.lastChild ) )
+			FCKDomTools.InsertAfterNode( existingNode, eRoot.removeChild( eLast ) ) ;
+	}
+} ;


Property changes on: announcement/trunk/src/main/webapp/fckeditor/editor/_source/classes/fckdocumentfragment_ie.js
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/webapp/fckeditor/editor/_source/classes/fckdomrange.js
===================================================================
--- announcement/trunk/src/main/webapp/fckeditor/editor/_source/classes/fckdomrange.js	                        (rev 0)
+++ announcement/trunk/src/main/webapp/fckeditor/editor/_source/classes/fckdomrange.js	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,924 @@
+/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2008 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * Class for working with a selection range, much like the W3C DOM Range, but
+ * it is not intended to be an implementation of the W3C interface.
+ */
+
+var FCKDomRange = function( sourceWindow )
+{
+	this.Window = sourceWindow ;
+	this._Cache = {} ;
+}
+
+FCKDomRange.prototype =
+{
+
+	_UpdateElementInfo : function()
+	{
+		var innerRange = this._Range ;
+
+		if ( !innerRange )
+			this.Release( true ) ;
+		else
+		{
+			// For text nodes, the node itself is the StartNode.
+			var eStart	= innerRange.startContainer ;
+			var eEnd	= innerRange.endContainer ;
+
+			var oElementPath = new FCKElementPath( eStart ) ;
+			this.StartNode			= eStart.nodeType == 3 ? eStart : eStart.childNodes[ innerRange.startOffset ] ;
+			this.StartContainer		= eStart ;
+			this.StartBlock			= oElementPath.Block ;
+			this.StartBlockLimit	= oElementPath.BlockLimit ;
+
+			if ( eStart != eEnd )
+				oElementPath = new FCKElementPath( eEnd ) ;
+
+			// The innerRange.endContainer[ innerRange.endOffset ] is not
+			// usually part of the range, but the marker for the range end. So,
+			// let's get the previous available node as the real end.
+			var eEndNode = eEnd ;
+			if ( innerRange.endOffset == 0 )
+			{
+				while ( eEndNode && !eEndNode.previousSibling )
+					eEndNode = eEndNode.parentNode ;
+
+				if ( eEndNode )
+					eEndNode = eEndNode.previousSibling ;
+			}
+			else if ( eEndNode.nodeType == 1 )
+				eEndNode = eEndNode.childNodes[ innerRange.endOffset - 1 ] ;
+
+			this.EndNode			= eEndNode ;
+			this.EndContainer		= eEnd ;
+			this.EndBlock			= oElementPath.Block ;
+			this.EndBlockLimit		= oElementPath.BlockLimit ;
+		}
+
+		this._Cache = {} ;
+	},
+
+	CreateRange : function()
+	{
+		return new FCKW3CRange( this.Window.document ) ;
+	},
+
+	DeleteContents : function()
+	{
+		if ( this._Range )
+		{
+			this._Range.deleteContents() ;
+			this._UpdateElementInfo() ;
+		}
+	},
+
+	ExtractContents : function()
+	{
+		if ( this._Range )
+		{
+			var docFrag = this._Range.extractContents() ;
+			this._UpdateElementInfo() ;
+			return docFrag ;
+		}
+		return null ;
+	},
+
+	CheckIsCollapsed : function()
+	{
+		if ( this._Range )
+			return this._Range.collapsed ;
+
+		return false ;
+	},
+
+	Collapse : function( toStart )
+	{
+		if ( this._Range )
+			this._Range.collapse( toStart ) ;
+
+		this._UpdateElementInfo() ;
+	},
+
+	Clone : function()
+	{
+		var oClone = FCKTools.CloneObject( this ) ;
+
+		if ( this._Range )
+			oClone._Range = this._Range.cloneRange() ;
+
+		return oClone ;
+	},
+
+	MoveToNodeContents : function( targetNode )
+	{
+		if ( !this._Range )
+			this._Range = this.CreateRange() ;
+
+		this._Range.selectNodeContents( targetNode ) ;
+
+		this._UpdateElementInfo() ;
+	},
+
+	MoveToElementStart : function( targetElement )
+	{
+		this.SetStart(targetElement,1) ;
+		this.SetEnd(targetElement,1) ;
+	},
+
+	// Moves to the first editing point inside a element. For example, in a
+	// element tree like "<p><b><i></i></b> Text</p>", the start editing point
+	// is "<p><b><i>^</i></b> Text</p>" (inside <i>).
+	MoveToElementEditStart : function( targetElement )
+	{
+		var editableElement ;
+
+		while ( targetElement && targetElement.nodeType == 1 )
+		{
+			if ( FCKDomTools.CheckIsEditable( targetElement ) )
+				editableElement = targetElement ;
+			else if ( editableElement )
+				break ;		// If we already found an editable element, stop the loop.
+
+			targetElement = targetElement.firstChild ;
+		}
+
+		if ( editableElement )
+			this.MoveToElementStart( editableElement ) ;
+	},
+
+	InsertNode : function( node )
+	{
+		if ( this._Range )
+			this._Range.insertNode( node ) ;
+	},
+
+	CheckIsEmpty : function()
+	{
+		if ( this.CheckIsCollapsed() )
+			return true ;
+
+		// Inserts the contents of the range in a div tag.
+		var eToolDiv = this.Window.document.createElement( 'div' ) ;
+		this._Range.cloneContents().AppendTo( eToolDiv ) ;
+
+		FCKDomTools.TrimNode( eToolDiv ) ;
+
+		return ( eToolDiv.innerHTML.length == 0 ) ;
+	},
+
+	/**
+	 * Checks if the start boundary of the current range is "visually" (like a
+	 * selection caret) at the beginning of the block. It means that some
+	 * things could be brefore the range, like spaces or empty inline elements,
+	 * but it would still be considered at the beginning of the block.
+	 */
+	CheckStartOfBlock : function()
+	{
+		var cache = this._Cache ;
+		var bIsStartOfBlock = cache.IsStartOfBlock ;
+
+		if ( bIsStartOfBlock != undefined )
+			return bIsStartOfBlock ;
+
+		// Take the block reference.
+		var block = this.StartBlock || this.StartBlockLimit ;
+
+		var container	= this._Range.startContainer ;
+		var offset		= this._Range.startOffset ;
+		var currentNode ;
+
+		if ( offset > 0 )
+		{
+			// First, check the start container. If it is a text node, get the
+			// substring of the node value before the range offset.
+			if ( container.nodeType == 3 )
+			{
+				var textValue = container.nodeValue.substr( 0, offset ).Trim() ;
+
+				// If we have some text left in the container, we are not at
+				// the end for the block.
+				if ( textValue.length != 0 )
+					return cache.IsStartOfBlock = false ;
+			}
+			else
+				currentNode = container.childNodes[ offset - 1 ] ;
+		}
+
+		// We'll not have a currentNode if the container was a text node, or
+		// the offset is zero.
+		if ( !currentNode )
+			currentNode = FCKDomTools.GetPreviousSourceNode( container, true, null, block ) ;
+
+		while ( currentNode )
+		{
+			switch ( currentNode.nodeType )
+			{
+				case 1 :
+					// It's not an inline element.
+					if ( !FCKListsLib.InlineChildReqElements[ currentNode.nodeName.toLowerCase() ] )
+						return cache.IsStartOfBlock = false ;
+
+					break ;
+
+				case 3 :
+					// It's a text node with real text.
+					if ( currentNode.nodeValue.Trim().length > 0 )
+						return cache.IsStartOfBlock = false ;
+			}
+
+			currentNode = FCKDomTools.GetPreviousSourceNode( currentNode, false, null, block ) ;
+		}
+
+		return cache.IsStartOfBlock = true ;
+	},
+
+	/**
+	 * Checks if the end boundary of the current range is "visually" (like a
+	 * selection caret) at the end of the block. It means that some things
+	 * could be after the range, like spaces, empty inline elements, or a
+	 * single <br>, but it would still be considered at the end of the block.
+	 */
+	CheckEndOfBlock : function( refreshSelection )
+	{
+		var isEndOfBlock = this._Cache.IsEndOfBlock ;
+
+		if ( isEndOfBlock != undefined )
+			return isEndOfBlock ;
+
+		// Take the block reference.
+		var block = this.EndBlock || this.EndBlockLimit ;
+
+		var container	= this._Range.endContainer ;
+		var offset			= this._Range.endOffset ;
+		var currentNode ;
+
+		// First, check the end container. If it is a text node, get the
+		// substring of the node value after the range offset.
+		if ( container.nodeType == 3 )
+		{
+			var textValue = container.nodeValue ;
+			if ( offset < textValue.length )
+			{
+				textValue = textValue.substr( offset ) ;
+
+				// If we have some text left in the container, we are not at
+				// the end for the block.
+				if ( textValue.Trim().length != 0 )
+					return this._Cache.IsEndOfBlock = false ;
+			}
+		}
+		else
+			currentNode = container.childNodes[ offset ] ;
+
+		// We'll not have a currentNode if the container was a text node, of
+		// the offset is out the container children limits (after it probably).
+		if ( !currentNode )
+			currentNode = FCKDomTools.GetNextSourceNode( container, true, null, block ) ;
+
+		var hadBr = false ;
+
+		while ( currentNode )
+		{
+			switch ( currentNode.nodeType )
+			{
+				case 1 :
+					var nodeName = currentNode.nodeName.toLowerCase() ;
+
+					// It's an inline element.
+					if ( FCKListsLib.InlineChildReqElements[ nodeName ] )
+						break ;
+
+					// It is the first <br> found.
+					if ( nodeName == 'br' && !hadBr )
+					{
+						hadBr = true ;
+						break ;
+					}
+
+					return this._Cache.IsEndOfBlock = false ;
+
+				case 3 :
+					// It's a text node with real text.
+					if ( currentNode.nodeValue.Trim().length > 0 )
+						return this._Cache.IsEndOfBlock = false ;
+			}
+
+			currentNode = FCKDomTools.GetNextSourceNode( currentNode, false, null, block ) ;
+		}
+
+		if ( refreshSelection )
+			this.Select() ;
+
+		return this._Cache.IsEndOfBlock = true ;
+	},
+
+	// This is an "intrusive" way to create a bookmark. It includes <span> tags
+	// in the range boundaries. The advantage of it is that it is possible to
+	// handle DOM mutations when moving back to the bookmark.
+	// Attention: the inclusion of nodes in the DOM is a design choice and
+	// should not be changed as there are other points in the code that may be
+	// using those nodes to perform operations. See GetBookmarkNode.
+	// For performance, includeNodes=true if intended to SelectBookmark.
+	CreateBookmark : function( includeNodes )
+	{
+		// Create the bookmark info (random IDs).
+		var oBookmark =
+		{
+			StartId	: (new Date()).valueOf() + Math.floor(Math.random()*1000) + 'S',
+			EndId	: (new Date()).valueOf() + Math.floor(Math.random()*1000) + 'E'
+		} ;
+
+		var oDoc = this.Window.document ;
+		var eStartSpan ;
+		var eEndSpan ;
+		var oClone ;
+
+		// For collapsed ranges, add just the start marker.
+		if ( !this.CheckIsCollapsed() )
+		{
+			eEndSpan = oDoc.createElement( 'span' ) ;
+			eEndSpan.style.display = 'none' ;
+			eEndSpan.id = oBookmark.EndId ;
+			eEndSpan.setAttribute( '_fck_bookmark', true ) ;
+
+			// For IE, it must have something inside, otherwise it may be
+			// removed during DOM operations.
+//			if ( FCKBrowserInfo.IsIE )
+				eEndSpan.innerHTML = '&nbsp;' ;
+
+			oClone = this.Clone() ;
+			oClone.Collapse( false ) ;
+			oClone.InsertNode( eEndSpan ) ;
+		}
+
+		eStartSpan = oDoc.createElement( 'span' ) ;
+		eStartSpan.style.display = 'none' ;
+		eStartSpan.id = oBookmark.StartId ;
+		eStartSpan.setAttribute( '_fck_bookmark', true ) ;
+
+		// For IE, it must have something inside, otherwise it may be removed
+		// during DOM operations.
+//		if ( FCKBrowserInfo.IsIE )
+			eStartSpan.innerHTML = '&nbsp;' ;
+
+		oClone = this.Clone() ;
+		oClone.Collapse( true ) ;
+		oClone.InsertNode( eStartSpan ) ;
+
+		if ( includeNodes )
+		{
+			oBookmark.StartNode = eStartSpan ;
+			oBookmark.EndNode = eEndSpan ;
+		}
+
+		// Update the range position.
+		if ( eEndSpan )
+		{
+			this.SetStart( eStartSpan, 4 ) ;
+			this.SetEnd( eEndSpan, 3 ) ;
+		}
+		else
+			this.MoveToPosition( eStartSpan, 4 ) ;
+
+		return oBookmark ;
+	},
+
+	// This one should be a part of a hypothetic "bookmark" object.
+	GetBookmarkNode : function( bookmark, start )
+	{
+		var doc = this.Window.document ;
+
+		if ( start )
+			return bookmark.StartNode || doc.getElementById( bookmark.StartId ) ;
+		else
+			return bookmark.EndNode || doc.getElementById( bookmark.EndId ) ;
+	},
+
+	MoveToBookmark : function( bookmark, preserveBookmark )
+	{
+		var eStartSpan	= this.GetBookmarkNode( bookmark, true ) ;
+		var eEndSpan	= this.GetBookmarkNode( bookmark, false ) ;
+
+		this.SetStart( eStartSpan, 3 ) ;
+
+		if ( !preserveBookmark )
+			FCKDomTools.RemoveNode( eStartSpan ) ;
+
+		// If collapsed, the end span will not be available.
+		if ( eEndSpan )
+		{
+			this.SetEnd( eEndSpan, 3 ) ;
+
+			if ( !preserveBookmark )
+				FCKDomTools.RemoveNode( eEndSpan ) ;
+		}
+		else
+			this.Collapse( true ) ;
+
+		this._UpdateElementInfo() ;
+	},
+
+	// Non-intrusive bookmark algorithm
+	CreateBookmark2 : function()
+	{
+		// If there is no range then get out of here.
+		// It happens on initial load in Safari #962 and if the editor it's hidden also in Firefox
+		if ( ! this._Range )
+			return { "Start" : 0, "End" : 0 } ;
+
+		// First, we record down the offset values
+		var bookmark =
+		{
+			"Start" : [ this._Range.startOffset ],
+			"End" : [ this._Range.endOffset ]
+		} ;
+		// Since we're treating the document tree as normalized, we need to backtrack the text lengths
+		// of previous text nodes into the offset value.
+		var curStart = this._Range.startContainer.previousSibling ;
+		var curEnd = this._Range.endContainer.previousSibling ;
+
+		// Also note that the node that we use for "address base" would change during backtracking.
+		var addrStart = this._Range.startContainer ;
+		var addrEnd = this._Range.endContainer ;
+		while ( curStart && addrStart.nodeType == 3 )
+		{
+			bookmark.Start[0] += curStart.length ;
+			addrStart = curStart ;
+			curStart = curStart.previousSibling ;
+		}
+		while ( curEnd && addrEnd.nodeType == 3 )
+		{
+			bookmark.End[0] += curEnd.length ;
+			addrEnd = curEnd ;
+			curEnd = curEnd.previousSibling ;
+		}
+
+		// If the object pointed to by the startOffset and endOffset are text nodes, we need
+		// to backtrack and add in the text offset to the bookmark addresses.
+		if ( addrStart.nodeType == 1 && addrStart.childNodes[bookmark.Start[0]] && addrStart.childNodes[bookmark.Start[0]].nodeType == 3 )
+		{
+			var curNode = addrStart.childNodes[bookmark.Start[0]] ;
+			var offset = 0 ;
+			while ( curNode.previousSibling && curNode.previousSibling.nodeType == 3 )
+			{
+				curNode = curNode.previousSibling ;
+				offset += curNode.length ;
+			}
+			addrStart = curNode ;
+			bookmark.Start[0] = offset ;
+		}
+		if ( addrEnd.nodeType == 1 && addrEnd.childNodes[bookmark.End[0]] && addrEnd.childNodes[bookmark.End[0]].nodeType == 3 )
+		{
+			var curNode = addrEnd.childNodes[bookmark.End[0]] ;
+			var offset = 0 ;
+			while ( curNode.previousSibling && curNode.previousSibling.nodeType == 3 )
+			{
+				curNode = curNode.previousSibling ;
+				offset += curNode.length ;
+			}
+			addrEnd = curNode ;
+			bookmark.End[0] = offset ;
+		}
+
+		// Then, we record down the precise position of the container nodes
+		// by walking up the DOM tree and counting their childNode index
+		bookmark.Start = FCKDomTools.GetNodeAddress( addrStart, true ).concat( bookmark.Start ) ;
+		bookmark.End = FCKDomTools.GetNodeAddress( addrEnd, true ).concat( bookmark.End ) ;
+		return bookmark;
+	},
+
+	MoveToBookmark2 : function( bookmark )
+	{
+		// Reverse the childNode counting algorithm in CreateBookmark2()
+		var curStart = FCKDomTools.GetNodeFromAddress( this.Window.document, bookmark.Start.slice( 0, -1 ), true ) ;
+		var curEnd = FCKDomTools.GetNodeFromAddress( this.Window.document, bookmark.End.slice( 0, -1 ), true ) ;
+
+		// Generate the W3C Range object and update relevant data
+		this.Release( true ) ;
+		this._Range = new FCKW3CRange( this.Window.document ) ;
+		var startOffset = bookmark.Start[ bookmark.Start.length - 1 ] ;
+		var endOffset = bookmark.End[ bookmark.End.length - 1 ] ;
+		while ( curStart.nodeType == 3 && startOffset > curStart.length )
+		{
+			if ( ! curStart.nextSibling || curStart.nextSibling.nodeType != 3 )
+				break ;
+			startOffset -= curStart.length ;
+			curStart = curStart.nextSibling ;
+		}
+		while ( curEnd.nodeType == 3 && endOffset > curEnd.length )
+		{
+			if ( ! curEnd.nextSibling || curEnd.nextSibling.nodeType != 3 )
+				break ;
+			endOffset -= curEnd.length ;
+			curEnd = curEnd.nextSibling ;
+		}
+		this._Range.setStart( curStart, startOffset ) ;
+		this._Range.setEnd( curEnd, endOffset ) ;
+		this._UpdateElementInfo() ;
+	},
+
+	MoveToPosition : function( targetElement, position )
+	{
+		this.SetStart( targetElement, position ) ;
+		this.Collapse( true ) ;
+	},
+
+	/*
+	 * Moves the position of the start boundary of the range to a specific position
+	 * relatively to a element.
+	 *		@position:
+	 *			1 = After Start		<target>^contents</target>
+	 *			2 = Before End		<target>contents^</target>
+	 *			3 = Before Start	^<target>contents</target>
+	 *			4 = After End		<target>contents</target>^
+	 */
+	SetStart : function( targetElement, position, noInfoUpdate )
+	{
+		var oRange = this._Range ;
+		if ( !oRange )
+			oRange = this._Range = this.CreateRange() ;
+
+		switch( position )
+		{
+			case 1 :		// After Start		<target>^contents</target>
+				oRange.setStart( targetElement, 0 ) ;
+				break ;
+
+			case 2 :		// Before End		<target>contents^</target>
+				oRange.setStart( targetElement, targetElement.childNodes.length ) ;
+				break ;
+
+			case 3 :		// Before Start		^<target>contents</target>
+				oRange.setStartBefore( targetElement ) ;
+				break ;
+
+			case 4 :		// After End		<target>contents</target>^
+				oRange.setStartAfter( targetElement ) ;
+		}
+
+		if ( !noInfoUpdate )
+			this._UpdateElementInfo() ;
+	},
+
+	/*
+	 * Moves the position of the start boundary of the range to a specific position
+	 * relatively to a element.
+	 *		@position:
+	 *			1 = After Start		<target>^contents</target>
+	 *			2 = Before End		<target>contents^</target>
+	 *			3 = Before Start	^<target>contents</target>
+	 *			4 = After End		<target>contents</target>^
+	 */
+	SetEnd : function( targetElement, position, noInfoUpdate )
+	{
+		var oRange = this._Range ;
+		if ( !oRange )
+			oRange = this._Range = this.CreateRange() ;
+
+		switch( position )
+		{
+			case 1 :		// After Start		<target>^contents</target>
+				oRange.setEnd( targetElement, 0 ) ;
+				break ;
+
+			case 2 :		// Before End		<target>contents^</target>
+				oRange.setEnd( targetElement, targetElement.childNodes.length ) ;
+				break ;
+
+			case 3 :		// Before Start		^<target>contents</target>
+				oRange.setEndBefore( targetElement ) ;
+				break ;
+
+			case 4 :		// After End		<target>contents</target>^
+				oRange.setEndAfter( targetElement ) ;
+		}
+
+		if ( !noInfoUpdate )
+			this._UpdateElementInfo() ;
+	},
+
+	Expand : function( unit )
+	{
+		var oNode, oSibling ;
+
+		switch ( unit )
+		{
+			// Expand the range to include all inline parent elements if we are
+			// are in their boundary limits.
+			// For example (where [ ] are the range limits):
+			//	Before =>		Some <b>[<i>Some sample text]</i></b>.
+			//	After =>		Some [<b><i>Some sample text</i></b>].
+			case 'inline_elements' :
+				// Expand the start boundary.
+				if ( this._Range.startOffset == 0 )
+				{
+					oNode = this._Range.startContainer ;
+
+					if ( oNode.nodeType != 1 )
+						oNode = oNode.previousSibling ? null : oNode.parentNode ;
+
+					if ( oNode )
+					{
+						while ( FCKListsLib.InlineNonEmptyElements[ oNode.nodeName.toLowerCase() ] )
+						{
+							this._Range.setStartBefore( oNode ) ;
+
+							if ( oNode != oNode.parentNode.firstChild )
+								break ;
+
+							oNode = oNode.parentNode ;
+						}
+					}
+				}
+
+				// Expand the end boundary.
+				oNode = this._Range.endContainer ;
+				var offset = this._Range.endOffset ;
+
+				if ( ( oNode.nodeType == 3 && offset >= oNode.nodeValue.length ) || ( oNode.nodeType == 1 && offset >= oNode.childNodes.length ) || ( oNode.nodeType != 1 && oNode.nodeType != 3 ) )
+				{
+					if ( oNode.nodeType != 1 )
+						oNode = oNode.nextSibling ? null : oNode.parentNode ;
+
+					if ( oNode )
+					{
+						while ( FCKListsLib.InlineNonEmptyElements[ oNode.nodeName.toLowerCase() ] )
+						{
+							this._Range.setEndAfter( oNode ) ;
+
+							if ( oNode != oNode.parentNode.lastChild )
+								break ;
+
+							oNode = oNode.parentNode ;
+						}
+					}
+				}
+
+				break ;
+
+			case 'block_contents' :
+			case 'list_contents' :
+				var boundarySet = FCKListsLib.BlockBoundaries ;
+				if ( unit == 'list_contents' || FCKConfig.EnterMode == 'br' )
+					boundarySet = FCKListsLib.ListBoundaries ;
+
+				if ( this.StartBlock && FCKConfig.EnterMode != 'br' && unit == 'block_contents' )
+					this.SetStart( this.StartBlock, 1 ) ;
+				else
+				{
+					// Get the start node for the current range.
+					oNode = this._Range.startContainer ;
+
+					// If it is an element, get the node right before of it (in source order).
+					if ( oNode.nodeType == 1 )
+					{
+						var lastNode = oNode.childNodes[ this._Range.startOffset ] ;
+						if ( lastNode )
+							oNode = FCKDomTools.GetPreviousSourceNode( lastNode, true ) ;
+						else
+							oNode = oNode.lastChild || oNode ;
+					}
+
+					// We must look for the left boundary, relative to the range
+					// start, which is limited by a block element.
+					while ( oNode
+							&& ( oNode.nodeType != 1
+								|| ( oNode != this.StartBlockLimit
+									&& !boundarySet[ oNode.nodeName.toLowerCase() ] ) ) )
+					{
+						this._Range.setStartBefore( oNode ) ;
+						oNode = oNode.previousSibling || oNode.parentNode ;
+					}
+				}
+
+				if ( this.EndBlock && FCKConfig.EnterMode != 'br' && unit == 'block_contents' && this.EndBlock.nodeName.toLowerCase() != 'li' )
+					this.SetEnd( this.EndBlock, 2 ) ;
+				else
+				{
+					oNode = this._Range.endContainer ;
+					if ( oNode.nodeType == 1 )
+						oNode = oNode.childNodes[ this._Range.endOffset ] || oNode.lastChild ;
+
+					// We must look for the right boundary, relative to the range
+					// end, which is limited by a block element.
+					while ( oNode
+							&& ( oNode.nodeType != 1
+								|| ( oNode != this.StartBlockLimit
+									&& !boundarySet[ oNode.nodeName.toLowerCase() ] ) ) )
+					{
+						this._Range.setEndAfter( oNode ) ;
+						oNode = oNode.nextSibling || oNode.parentNode ;
+					}
+
+					// In EnterMode='br', the end <br> boundary element must
+					// be included in the expanded range.
+					if ( oNode && oNode.nodeName.toLowerCase() == 'br' )
+						this._Range.setEndAfter( oNode ) ;
+				}
+
+				this._UpdateElementInfo() ;
+		}
+	},
+
+	/**
+	 * Split the block element for the current range. It deletes the contents
+	 * of the range and splits the block in the collapsed position, resulting
+	 * in two sucessive blocks. The range is then positioned in the middle of
+	 * them.
+	 *
+	 * It returns and object with the following properties:
+	 *		- PreviousBlock	: a reference to the block element that preceeds
+	 *		  the range after the split.
+	 *		- NextBlock : a reference to the block element that follows the
+	 *		  range after the split.
+	 *		- WasStartOfBlock : a boolean indicating that the range was
+	 *		  originaly at the start of the block.
+	 *		- WasEndOfBlock : a boolean indicating that the range was originaly
+	 *		  at the end of the block.
+	 *
+	 * If the range was originaly at the start of the block, no split will happen
+	 * and the PreviousBlock value will be null. The same is valid for the
+	 * NextBlock value if the range was at the end of the block.
+	 */
+	SplitBlock : function( forceBlockTag )
+	{
+		var blockTag = forceBlockTag || FCKConfig.EnterMode ;
+
+		if ( !this._Range )
+			this.MoveToSelection() ;
+
+		// The range boundaries must be in the same "block limit" element.
+		if ( this.StartBlockLimit == this.EndBlockLimit )
+		{
+			// Get the current blocks.
+			var eStartBlock		= this.StartBlock ;
+			var eEndBlock		= this.EndBlock ;
+			var oElementPath	= null ;
+
+			if ( blockTag != 'br' )
+			{
+				if ( !eStartBlock )
+				{
+					eStartBlock = this.FixBlock( true, blockTag ) ;
+					eEndBlock	= this.EndBlock ;	// FixBlock may have fixed the EndBlock too.
+				}
+
+				if ( !eEndBlock )
+					eEndBlock = this.FixBlock( false, blockTag ) ;
+			}
+
+			// Get the range position.
+			var bIsStartOfBlock	= ( eStartBlock != null && this.CheckStartOfBlock() ) ;
+			var bIsEndOfBlock	= ( eEndBlock != null && this.CheckEndOfBlock() ) ;
+
+			// Delete the current contents.
+			if ( !this.CheckIsEmpty() )
+				this.DeleteContents() ;
+
+			if ( eStartBlock && eEndBlock && eStartBlock == eEndBlock )
+			{
+				if ( bIsEndOfBlock )
+				{
+					oElementPath = new FCKElementPath( this.StartContainer ) ;
+					this.MoveToPosition( eEndBlock, 4 ) ;
+					eEndBlock = null ;
+				}
+				else if ( bIsStartOfBlock )
+				{
+					oElementPath = new FCKElementPath( this.StartContainer ) ;
+					this.MoveToPosition( eStartBlock, 3 ) ;
+					eStartBlock = null ;
+				}
+				else
+				{
+					// Extract the contents of the block from the selection point to the end of its contents.
+					this.SetEnd( eStartBlock, 2 ) ;
+					var eDocFrag = this.ExtractContents() ;
+
+					// Duplicate the block element after it.
+					eEndBlock = eStartBlock.cloneNode( false ) ;
+					eEndBlock.removeAttribute( 'id', false ) ;
+
+					// Place the extracted contents in the duplicated block.
+					eDocFrag.AppendTo( eEndBlock ) ;
+
+					FCKDomTools.InsertAfterNode( eStartBlock, eEndBlock ) ;
+
+					this.MoveToPosition( eStartBlock, 4 ) ;
+
+					// In Gecko, the last child node must be a bogus <br>.
+					// Note: bogus <br> added under <ul> or <ol> would cause lists to be incorrectly rendered.
+					if ( FCKBrowserInfo.IsGecko &&
+							! eStartBlock.nodeName.IEquals( ['ul', 'ol'] ) )
+						FCKTools.AppendBogusBr( eStartBlock ) ;
+				}
+			}
+
+			return {
+				PreviousBlock	: eStartBlock,
+				NextBlock		: eEndBlock,
+				WasStartOfBlock : bIsStartOfBlock,
+				WasEndOfBlock	: bIsEndOfBlock,
+				ElementPath		: oElementPath
+			} ;
+		}
+
+		return null ;
+	},
+
+	// Transform a block without a block tag in a valid block (orphan text in the body or td, usually).
+	FixBlock : function( isStart, blockTag )
+	{
+		// Bookmark the range so we can restore it later.
+		var oBookmark = this.CreateBookmark() ;
+
+		// Collapse the range to the requested ending boundary.
+		this.Collapse( isStart ) ;
+
+		// Expands it to the block contents.
+		this.Expand( 'block_contents' ) ;
+
+		// Create the fixed block.
+		var oFixedBlock = this.Window.document.createElement( blockTag ) ;
+
+		// Move the contents of the temporary range to the fixed block.
+		this.ExtractContents().AppendTo( oFixedBlock ) ;
+		FCKDomTools.TrimNode( oFixedBlock ) ;
+
+		// If the fixed block is empty (not counting bookmark nodes)
+		// Add a <br /> inside to expand it.
+		if ( FCKDomTools.CheckIsEmptyElement(oFixedBlock, function( element ) { return element.getAttribute('_fck_bookmark') != 'true' ; } )
+				&& FCKBrowserInfo.IsGeckoLike )
+				FCKTools.AppendBogusBr( oFixedBlock ) ;
+
+		// Insert the fixed block into the DOM.
+		this.InsertNode( oFixedBlock ) ;
+
+		// Move the range back to the bookmarked place.
+		this.MoveToBookmark( oBookmark ) ;
+
+		return oFixedBlock ;
+	},
+
+	Release : function( preserveWindow )
+	{
+		if ( !preserveWindow )
+			this.Window = null ;
+
+		this.StartNode = null ;
+		this.StartContainer = null ;
+		this.StartBlock = null ;
+		this.StartBlockLimit = null ;
+		this.EndNode = null ;
+		this.EndContainer = null ;
+		this.EndBlock = null ;
+		this.EndBlockLimit = null ;
+		this._Range = null ;
+		this._Cache = null ;
+	},
+
+	CheckHasRange : function()
+	{
+		return !!this._Range ;
+	},
+
+	GetTouchedStartNode : function()
+	{
+		var range = this._Range ;
+		var container = range.startContainer ;
+
+		if ( range.collapsed || container.nodeType != 1 )
+			return container ;
+
+		return container.childNodes[ range.startOffset ] || container ;
+	},
+
+	GetTouchedEndNode : function()
+	{
+		var range = this._Range ;
+		var container = range.endContainer ;
+
+		if ( range.collapsed || container.nodeType != 1 )
+			return container ;
+
+		return container.childNodes[ range.endOffset - 1 ] || container ;
+	}
+} ;


Property changes on: announcement/trunk/src/main/webapp/fckeditor/editor/_source/classes/fckdomrange.js
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/webapp/fckeditor/editor/_source/classes/fckdomrange_gecko.js
===================================================================
--- announcement/trunk/src/main/webapp/fckeditor/editor/_source/classes/fckdomrange_gecko.js	                        (rev 0)
+++ announcement/trunk/src/main/webapp/fckeditor/editor/_source/classes/fckdomrange_gecko.js	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,104 @@
+/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2008 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * Class for working with a selection range, much like the W3C DOM Range, but
+ * it is not intended to be an implementation of the W3C interface.
+ * (Gecko Implementation)
+ */
+
+FCKDomRange.prototype.MoveToSelection = function()
+{
+	this.Release( true ) ;
+
+	var oSel = this.Window.getSelection() ;
+
+	if ( oSel && oSel.rangeCount > 0 )
+	{
+		this._Range = FCKW3CRange.CreateFromRange( this.Window.document, oSel.getRangeAt(0) ) ;
+		this._UpdateElementInfo() ;
+	}
+	else
+		if ( this.Window.document )
+			this.MoveToElementStart( this.Window.document.body ) ;
+}
+
+FCKDomRange.prototype.Select = function()
+{
+	var oRange = this._Range ;
+	if ( oRange )
+	{
+		var startContainer = oRange.startContainer ;
+
+		// If we have a collapsed range, inside an empty element, we must add
+		// something to it, otherwise the caret will not be visible.
+		if ( oRange.collapsed && startContainer.nodeType == 1 && startContainer.childNodes.length == 0 )
+			startContainer.appendChild( oRange._Document.createTextNode('') ) ;
+
+		var oDocRange = this.Window.document.createRange() ;
+		oDocRange.setStart( startContainer, oRange.startOffset ) ;
+
+		try
+		{
+			oDocRange.setEnd( oRange.endContainer, oRange.endOffset ) ;
+		}
+		catch ( e )
+		{
+			// There is a bug in Firefox implementation (it would be too easy
+			// otherwise). The new start can't be after the end (W3C says it can).
+			// So, let's create a new range and collapse it to the desired point.
+			if ( e.toString().Contains( 'NS_ERROR_ILLEGAL_VALUE' ) )
+			{
+				oRange.collapse( true ) ;
+				oDocRange.setEnd( oRange.endContainer, oRange.endOffset ) ;
+			}
+			else
+				throw( e ) ;
+		}
+
+		var oSel = this.Window.getSelection() ;
+		oSel.removeAllRanges() ;
+
+		// We must add a clone otherwise Firefox will have rendering issues.
+		oSel.addRange( oDocRange ) ;
+	}
+}
+
+// Not compatible with bookmark created with CreateBookmark2.
+// The bookmark nodes will be deleted from the document.
+FCKDomRange.prototype.SelectBookmark = function( bookmark )
+{
+	var domRange = this.Window.document.createRange() ;
+
+	var startNode	= this.GetBookmarkNode( bookmark, true ) ;
+	var endNode		= this.GetBookmarkNode( bookmark, false ) ;
+
+	domRange.setStart( startNode.parentNode, FCKDomTools.GetIndexOf( startNode ) ) ;
+	FCKDomTools.RemoveNode( startNode ) ;
+
+	if ( endNode )
+	{
+		domRange.setEnd( endNode.parentNode, FCKDomTools.GetIndexOf( endNode ) ) ;
+		FCKDomTools.RemoveNode( endNode ) ;
+	}
+
+	var selection = this.Window.getSelection() ;
+	selection.removeAllRanges() ;
+	selection.addRange( domRange ) ;
+}


Property changes on: announcement/trunk/src/main/webapp/fckeditor/editor/_source/classes/fckdomrange_gecko.js
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/webapp/fckeditor/editor/_source/classes/fckdomrange_ie.js
===================================================================
--- announcement/trunk/src/main/webapp/fckeditor/editor/_source/classes/fckdomrange_ie.js	                        (rev 0)
+++ announcement/trunk/src/main/webapp/fckeditor/editor/_source/classes/fckdomrange_ie.js	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,199 @@
+/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2008 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * Class for working with a selection range, much like the W3C DOM Range, but
+ * it is not intended to be an implementation of the W3C interface.
+ * (IE Implementation)
+ */
+
+FCKDomRange.prototype.MoveToSelection = function()
+{
+	this.Release( true ) ;
+
+	this._Range = new FCKW3CRange( this.Window.document ) ;
+
+	var oSel = this.Window.document.selection ;
+
+	if ( oSel.type != 'Control' )
+	{
+		var eMarkerStart	= this._GetSelectionMarkerTag( true ) ;
+		var eMarkerEnd		= this._GetSelectionMarkerTag( false ) ;
+
+		if ( !eMarkerStart && !eMarkerEnd )
+		{
+			this._Range.setStart( this.Window.document.body, 0 ) ;
+			this._UpdateElementInfo() ;
+			return ;
+		}
+
+		// Set the start boundary.
+		this._Range.setStart( eMarkerStart.parentNode, FCKDomTools.GetIndexOf( eMarkerStart ) ) ;
+		eMarkerStart.parentNode.removeChild( eMarkerStart ) ;
+
+		// Set the end boundary.
+		this._Range.setEnd( eMarkerEnd.parentNode, FCKDomTools.GetIndexOf( eMarkerEnd ) ) ;
+		eMarkerEnd.parentNode.removeChild( eMarkerEnd ) ;
+
+		this._UpdateElementInfo() ;
+	}
+	else
+	{
+		var oControl = oSel.createRange().item(0) ;
+
+		if ( oControl )
+		{
+			this._Range.setStartBefore( oControl ) ;
+			this._Range.setEndAfter( oControl ) ;
+			this._UpdateElementInfo() ;
+		}
+	}
+}
+
+FCKDomRange.prototype.Select = function( forceExpand )
+{
+	if ( this._Range )
+		this.SelectBookmark( this.CreateBookmark( true ), forceExpand ) ;
+}
+
+// Not compatible with bookmark created with CreateBookmark2.
+// The bookmark nodes will be deleted from the document.
+FCKDomRange.prototype.SelectBookmark = function( bookmark, forceExpand )
+{
+	var bIsCollapsed = this.CheckIsCollapsed() ;
+	var bIsStartMakerAlone ;
+	var dummySpan ;
+
+	// Create marker tags for the start and end boundaries.
+	var eStartMarker = this.GetBookmarkNode( bookmark, true ) ;
+
+	if ( !eStartMarker )
+		return ;
+
+	var eEndMarker ;
+	if ( !bIsCollapsed )
+		eEndMarker = this.GetBookmarkNode( bookmark, false ) ;
+
+	// Create the main range which will be used for the selection.
+	var oIERange = this.Window.document.body.createTextRange() ;
+
+	// Position the range at the start boundary.
+	oIERange.moveToElementText( eStartMarker ) ;
+	oIERange.moveStart( 'character', 1 ) ;
+
+	if ( eEndMarker )
+	{
+		// Create a tool range for the end.
+		var oIERangeEnd = this.Window.document.body.createTextRange() ;
+
+		// Position the tool range at the end.
+		oIERangeEnd.moveToElementText( eEndMarker ) ;
+
+		// Move the end boundary of the main range to match the tool range.
+		oIERange.setEndPoint( 'EndToEnd', oIERangeEnd ) ;
+		oIERange.moveEnd( 'character', -1 ) ;
+	}
+	else
+	{
+		bIsStartMakerAlone = ( forceExpand || !eStartMarker.previousSibling || eStartMarker.previousSibling.nodeName.toLowerCase() == 'br' ) && !eStartMarker.nextSibing ;
+
+		// Append a temporary <span>&#65279;</span> before the selection.
+		// This is needed to avoid IE destroying selections inside empty
+		// inline elements, like <b></b> (#253).
+		// It is also needed when placing the selection right after an inline
+		// element to avoid the selection moving inside of it.
+		dummySpan = this.Window.document.createElement( 'span' ) ;
+		dummySpan.innerHTML = '&#65279;' ;	// Zero Width No-Break Space (U+FEFF). See #1359.
+		eStartMarker.parentNode.insertBefore( dummySpan, eStartMarker ) ;
+
+		if ( bIsStartMakerAlone )
+		{
+			// To expand empty blocks or line spaces after <br>, we need
+			// instead to have any char, which will be later deleted using the
+			// selection.
+			// \ufeff = Zero Width No-Break Space (U+FEFF). See #1359.
+			eStartMarker.parentNode.insertBefore( this.Window.document.createTextNode( '\ufeff' ), eStartMarker ) ;
+		}
+	}
+
+	if ( !this._Range )
+		this._Range = this.CreateRange() ;
+
+	// Remove the markers (reset the position, because of the changes in the DOM tree).
+	this._Range.setStartBefore( eStartMarker ) ;
+	eStartMarker.parentNode.removeChild( eStartMarker ) ;
+
+	if ( bIsCollapsed )
+	{
+		if ( bIsStartMakerAlone )
+		{
+			// Move the selection start to include the temporary &#65279;.
+			oIERange.moveStart( 'character', -1 ) ;
+
+			oIERange.select() ;
+
+			// Remove our temporary stuff.
+			this.Window.document.selection.clear() ;
+		}
+		else
+			oIERange.select() ;
+
+		FCKDomTools.RemoveNode( dummySpan ) ;
+	}
+	else
+	{
+		this._Range.setEndBefore( eEndMarker ) ;
+		eEndMarker.parentNode.removeChild( eEndMarker ) ;
+		oIERange.select() ;
+	}
+}
+
+FCKDomRange.prototype._GetSelectionMarkerTag = function( toStart )
+{
+	var doc = this.Window.document ;
+	var selection = doc.selection ;
+
+	// Get a range for the start boundary.
+	var oRange ;
+
+	// IE may throw an "unspecified error" on some cases (it happened when
+	// loading _samples/default.html), so try/catch.
+	try
+	{
+		oRange = selection.createRange() ;
+	}
+	catch (e)
+	{
+		return null ;
+	}
+
+	// IE might take the range object to the main window instead of inside the editor iframe window.
+	// This is known to happen when the editor window has not been selected before (See #933).
+	// We need to avoid that.
+	if ( oRange.parentElement().document != doc )
+		return null ;
+
+	oRange.collapse( toStart === true ) ;
+
+	// Paste a marker element at the collapsed range and get it from the DOM.
+	var sMarkerId = 'fck_dom_range_temp_' + (new Date()).valueOf() + '_' + Math.floor(Math.random()*1000) ;
+	oRange.pasteHTML( '<span id="' + sMarkerId + '"></span>' ) ;
+
+	return doc.getElementById( sMarkerId ) ;
+}


Property changes on: announcement/trunk/src/main/webapp/fckeditor/editor/_source/classes/fckdomrange_ie.js
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/webapp/fckeditor/editor/_source/classes/fckdomrangeiterator.js
===================================================================
--- announcement/trunk/src/main/webapp/fckeditor/editor/_source/classes/fckdomrangeiterator.js	                        (rev 0)
+++ announcement/trunk/src/main/webapp/fckeditor/editor/_source/classes/fckdomrangeiterator.js	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,327 @@
+/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2008 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * This class can be used to interate through nodes inside a range.
+ *
+ * During interation, the provided range can become invalid, due to document
+ * mutations, so CreateBookmark() used to restore it after processing, if
+ * needed.
+ */
+
+var FCKDomRangeIterator = function( range )
+{
+	/**
+	 * The FCKDomRange object that marks the interation boundaries.
+	 */
+	this.Range = range ;
+
+	/**
+	 * Indicates that <br> elements must be used as paragraph boundaries.
+	 */
+	this.ForceBrBreak = false ;
+
+	/**
+	 * Guarantees that the iterator will always return "real" block elements.
+	 * If "false", elements like <li>, <th> and <td> are returned. If "true", a
+	 * dedicated block element block element will be created inside those
+	 * elements to hold the selected content.
+	 */
+	this.EnforceRealBlocks = false ;
+}
+
+FCKDomRangeIterator.CreateFromSelection = function( targetWindow )
+{
+	var range = new FCKDomRange( targetWindow ) ;
+	range.MoveToSelection() ;
+	return new FCKDomRangeIterator( range ) ;
+}
+
+FCKDomRangeIterator.prototype =
+{
+	/**
+	 * Get the next paragraph element. It automatically breaks the document
+	 * when necessary to generate block elements for the paragraphs.
+	 */
+	GetNextParagraph : function()
+	{
+		// The block element to be returned.
+		var block ;
+
+		// The range object used to identify the paragraph contents.
+		var range ;
+
+		// Indicated that the current element in the loop is the last one.
+		var isLast ;
+
+		// Instructs to cleanup remaining BRs.
+		var removePreviousBr ;
+		var removeLastBr ;
+
+		var boundarySet = this.ForceBrBreak ? FCKListsLib.ListBoundaries : FCKListsLib.BlockBoundaries ;
+
+		// This is the first iteration. Let's initialize it.
+		if ( !this._LastNode )
+		{
+			var range = this.Range.Clone() ;
+			range.Expand( this.ForceBrBreak ? 'list_contents' : 'block_contents' ) ;
+
+			this._NextNode = range.GetTouchedStartNode() ;
+			this._LastNode = range.GetTouchedEndNode() ;
+
+			// Let's reuse this variable.
+			range = null ;
+		}
+
+		var currentNode = this._NextNode ;
+		var lastNode = this._LastNode ;
+
+		this._NextNode = null ;
+
+		while ( currentNode )
+		{
+			// closeRange indicates that a paragraph boundary has been found,
+			// so the range can be closed.
+			var closeRange = false ;
+
+			// includeNode indicates that the current node is good to be part
+			// of the range. By default, any non-element node is ok for it.
+			var includeNode = ( currentNode.nodeType != 1 ) ;
+
+			var continueFromSibling = false ;
+
+			// If it is an element node, let's check if it can be part of the
+			// range.
+			if ( !includeNode )
+			{
+				var nodeName = currentNode.nodeName.toLowerCase() ;
+
+				if ( boundarySet[ nodeName ] && ( !FCKBrowserInfo.IsIE || currentNode.scopeName == 'HTML' ) )
+				{
+					// <br> boundaries must be part of the range. It will
+					// happen only if ForceBrBreak.
+					if ( nodeName == 'br' )
+						includeNode = true ;
+					else if ( !range && currentNode.childNodes.length == 0 && nodeName != 'hr' )
+					{
+						// If we have found an empty block, and haven't started
+						// the range yet, it means we must return this block.
+						block = currentNode ;
+						isLast = currentNode == lastNode ;
+						break ;
+					}
+
+					// The range must finish right before the boundary,
+					// including possibly skipped empty spaces. (#1603)
+					if ( range )
+					{
+						range.SetEnd( currentNode, 3, true ) ;
+
+						// The found boundary must be set as the next one at this
+						// point. (#1717)
+						if ( nodeName != 'br' )
+							this._NextNode = currentNode ;
+					}
+
+					closeRange = true ;
+				}
+				else
+				{
+					// If we have child nodes, let's check them.
+					if ( currentNode.firstChild )
+					{
+						// If we don't have a range yet, let's start it.
+						if ( !range )
+						{
+							range = new FCKDomRange( this.Range.Window ) ;
+							range.SetStart( currentNode, 3, true ) ;
+						}
+
+						currentNode = currentNode.firstChild ;
+						continue ;
+					}
+					includeNode = true ;
+				}
+			}
+			else if ( currentNode.nodeType == 3 )
+			{
+				// Ignore normal whitespaces (i.e. not including &nbsp; or
+				// other unicode whitespaces) before/after a block node.
+				if ( /^[\r\n\t ]+$/.test( currentNode.nodeValue ) )
+					includeNode = false ;
+			}
+
+			// The current node is good to be part of the range and we are
+			// starting a new range, initialize it first.
+			if ( includeNode && !range )
+			{
+				range = new FCKDomRange( this.Range.Window ) ;
+				range.SetStart( currentNode, 3, true ) ;
+			}
+
+			// The last node has been found.
+			isLast = ( ( !closeRange || includeNode ) && currentNode == lastNode ) ;
+//			isLast = ( currentNode == lastNode && ( currentNode.nodeType != 1 || currentNode.childNodes.length == 0 ) ) ;
+
+			// If we are in an element boundary, let's check if it is time
+			// to close the range, otherwise we include the parent within it.
+			if ( range && !closeRange )
+			{
+				while ( !currentNode.nextSibling && !isLast )
+				{
+					var parentNode = currentNode.parentNode ;
+
+					if ( boundarySet[ parentNode.nodeName.toLowerCase() ] )
+					{
+						closeRange = true ;
+						isLast = isLast || ( parentNode == lastNode ) ;
+						break ;
+					}
+
+					currentNode = parentNode ;
+					includeNode = true ;
+					isLast = ( currentNode == lastNode ) ;
+					continueFromSibling = true ;
+				}
+			}
+
+			// Now finally include the node.
+			if ( includeNode )
+				range.SetEnd( currentNode, 4, true ) ;
+
+			// We have found a block boundary. Let's close the range and move out of the
+			// loop.
+			if ( ( closeRange || isLast ) && range )
+			{
+				range._UpdateElementInfo() ;
+
+				if ( range.StartNode == range.EndNode
+						&& range.StartNode.parentNode == range.StartBlockLimit
+						&& range.StartNode.getAttribute && range.StartNode.getAttribute( '_fck_bookmark' ) )
+					range = null ;
+				else
+					break ;
+			}
+
+			if ( isLast )
+				break ;
+
+			currentNode = FCKDomTools.GetNextSourceNode( currentNode, continueFromSibling, null, lastNode ) ;
+		}
+
+		// Now, based on the processed range, look for (or create) the block to be returned.
+		if ( !block )
+		{
+			// If no range has been found, this is the end.
+			if ( !range )
+			{
+				this._NextNode = null ;
+				return null ;
+			}
+
+			block = range.StartBlock ;
+
+			if ( !block
+				&& !this.EnforceRealBlocks
+				&& range.StartBlockLimit.nodeName.IEquals( 'DIV', 'TH', 'TD' )
+				&& range.CheckStartOfBlock()
+				&& range.CheckEndOfBlock() )
+			{
+				block = range.StartBlockLimit ;
+			}
+			else if ( !block || ( this.EnforceRealBlocks && block.nodeName.toLowerCase() == 'li' ) )
+			{
+				// Create the fixed block.
+				block = this.Range.Window.document.createElement( FCKConfig.EnterMode == 'p' ? 'p' : 'div' ) ;
+
+				// Move the contents of the temporary range to the fixed block.
+				range.ExtractContents().AppendTo( block ) ;
+				FCKDomTools.TrimNode( block ) ;
+
+				// Insert the fixed block into the DOM.
+				range.InsertNode( block ) ;
+
+				removePreviousBr = true ;
+				removeLastBr = true ;
+			}
+			else if ( block.nodeName.toLowerCase() != 'li' )
+			{
+				// If the range doesn't includes the entire contents of the
+				// block, we must split it, isolating the range in a dedicated
+				// block.
+				if ( !range.CheckStartOfBlock() || !range.CheckEndOfBlock() )
+				{
+					// The resulting block will be a clone of the current one.
+					block = block.cloneNode( false ) ;
+
+					// Extract the range contents, moving it to the new block.
+					range.ExtractContents().AppendTo( block ) ;
+					FCKDomTools.TrimNode( block ) ;
+
+					// Split the block. At this point, the range will be in the
+					// right position for our intents.
+					var splitInfo = range.SplitBlock() ;
+
+					removePreviousBr = !splitInfo.WasStartOfBlock ;
+					removeLastBr = !splitInfo.WasEndOfBlock ;
+
+					// Insert the new block into the DOM.
+					range.InsertNode( block ) ;
+				}
+			}
+			else if ( !isLast )
+			{
+				// LIs are returned as is, with all their children (due to the
+				// nested lists). But, the next node is the node right after
+				// the current range, which could be an <li> child (nested
+				// lists) or the next sibling <li>.
+
+				this._NextNode = block == lastNode ? null : FCKDomTools.GetNextSourceNode( range.EndNode, true, null, lastNode ) ;
+				return block ;
+			}
+		}
+
+		if ( removePreviousBr )
+		{
+			var previousSibling = block.previousSibling ;
+			if ( previousSibling && previousSibling.nodeType == 1 )
+			{
+				if ( previousSibling.nodeName.toLowerCase() == 'br' )
+					previousSibling.parentNode.removeChild( previousSibling ) ;
+				else if ( previousSibling.lastChild && previousSibling.lastChild.nodeName.IEquals( 'br' ) )
+					previousSibling.removeChild( previousSibling.lastChild ) ;
+			}
+		}
+
+		if ( removeLastBr )
+		{
+			var lastChild = block.lastChild ;
+			if ( lastChild && lastChild.nodeType == 1 && lastChild.nodeName.toLowerCase() == 'br' )
+				block.removeChild( lastChild ) ;
+		}
+
+		// Get a reference for the next element. This is important because the
+		// above block can be removed or changed, so we can rely on it for the
+		// next interation.
+		if ( !this._NextNode )
+			this._NextNode = ( isLast || block == lastNode ) ? null : FCKDomTools.GetNextSourceNode( block, true, null, lastNode ) ;
+
+		return block ;
+	}
+} ;


Property changes on: announcement/trunk/src/main/webapp/fckeditor/editor/_source/classes/fckdomrangeiterator.js
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/webapp/fckeditor/editor/_source/classes/fckeditingarea.js
===================================================================
--- announcement/trunk/src/main/webapp/fckeditor/editor/_source/classes/fckeditingarea.js	                        (rev 0)
+++ announcement/trunk/src/main/webapp/fckeditor/editor/_source/classes/fckeditingarea.js	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,363 @@
+/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2008 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * FCKEditingArea Class: renders an editable area.
+ */
+
+/**
+ * @constructor
+ * @param {String} targetElement The element that will hold the editing area. Any child element present in the target will be deleted.
+ */
+var FCKEditingArea = function( targetElement )
+{
+	this.TargetElement = targetElement ;
+	this.Mode = FCK_EDITMODE_WYSIWYG ;
+
+	if ( FCK.IECleanup )
+		FCK.IECleanup.AddItem( this, FCKEditingArea_Cleanup ) ;
+}
+
+
+/**
+ * @param {String} html The complete HTML for the page, including DOCTYPE and the <html> tag.
+ */
+FCKEditingArea.prototype.Start = function( html, secondCall )
+{
+	var eTargetElement	= this.TargetElement ;
+	var oTargetDocument	= FCKTools.GetElementDocument( eTargetElement ) ;
+
+	// Remove all child nodes from the target.
+	while( eTargetElement.firstChild )
+		eTargetElement.removeChild( eTargetElement.firstChild ) ;
+
+	if ( this.Mode == FCK_EDITMODE_WYSIWYG )
+	{
+		// For FF, document.domain must be set only when different, otherwhise
+		// we'll strangely have "Permission denied" issues.
+		if ( FCK_IS_CUSTOM_DOMAIN )
+			html = '<script>document.domain="' + FCK_RUNTIME_DOMAIN + '";</script>' + html ;
+
+		// IE has a bug with the <base> tag... it must have a </base> closer,
+		// otherwise the all successive tags will be set as children nodes of the <base>.
+		if ( FCKBrowserInfo.IsIE )
+			html = html.replace( /(<base[^>]*?)\s*\/?>(?!\s*<\/base>)/gi, '$1></base>' ) ;
+		else if ( !secondCall )
+		{
+			// Gecko moves some tags out of the body to the head, so we must use
+			// innerHTML to set the body contents (SF BUG 1526154).
+
+			// Extract the BODY contents from the html.
+			var oMatchBefore = html.match( FCKRegexLib.BeforeBody ) ;
+			var oMatchAfter = html.match( FCKRegexLib.AfterBody ) ;
+
+			if ( oMatchBefore && oMatchAfter )
+			{
+				var sBody = html.substr( oMatchBefore[1].length,
+					       html.length - oMatchBefore[1].length - oMatchAfter[1].length ) ;	// This is the BODY tag contents.
+
+				html =
+					oMatchBefore[1] +			// This is the HTML until the <body...> tag, inclusive.
+					'&nbsp;' +
+					oMatchAfter[1] ;			// This is the HTML from the </body> tag, inclusive.
+
+				// If nothing in the body, place a BOGUS tag so the cursor will appear.
+				if ( FCKBrowserInfo.IsGecko && ( sBody.length == 0 || FCKRegexLib.EmptyParagraph.test( sBody ) ) )
+					sBody = '<br type="_moz">' ;
+
+				this._BodyHTML = sBody ;
+
+			}
+			else
+				this._BodyHTML = html ;			// Invalid HTML input.
+		}
+
+		// Create the editing area IFRAME.
+		var oIFrame = this.IFrame = oTargetDocument.createElement( 'iframe' ) ;
+
+		// IE: Avoid JavaScript errors thrown by the editing are source (like tags events).
+		// See #1055.
+		var sOverrideError = '<script type="text/javascript" _fcktemp="true">window.onerror=function(){return true;};</script>' ;
+
+		oIFrame.frameBorder = 0 ;
+		oIFrame.style.width = oIFrame.style.height = '100%' ;
+
+		if ( FCK_IS_CUSTOM_DOMAIN && FCKBrowserInfo.IsIE )
+		{
+			window._FCKHtmlToLoad = html.replace( /<head>/i, '<head>' + sOverrideError ) ;
+			oIFrame.src = 'javascript:void( (function(){' +
+				'document.open() ;' +
+				'document.domain="' + document.domain + '" ;' +
+				'document.write( window.parent._FCKHtmlToLoad );' +
+				'document.close() ;' +
+				'window.parent._FCKHtmlToLoad = null ;' +
+				'})() )' ;
+		}
+		else if ( !FCKBrowserInfo.IsGecko )
+		{
+			// Firefox will render the tables inside the body in Quirks mode if the
+			// source of the iframe is set to javascript. see #515
+			oIFrame.src = 'javascript:void(0)' ;
+		}
+
+		// Append the new IFRAME to the target. For IE, it must be done after
+		// setting the "src", to avoid the "secure/unsecure" message under HTTPS.
+		eTargetElement.appendChild( oIFrame ) ;
+
+		// Get the window and document objects used to interact with the newly created IFRAME.
+		this.Window = oIFrame.contentWindow ;
+
+		// IE: Avoid JavaScript errors thrown by the editing are source (like tags events).
+		// TODO: This error handler is not being fired.
+		// this.Window.onerror = function() { alert( 'Error!' ) ; return true ; }
+
+		if ( !FCK_IS_CUSTOM_DOMAIN || !FCKBrowserInfo.IsIE )
+		{
+			var oDoc = this.Window.document ;
+
+			oDoc.open() ;
+			oDoc.write( html.replace( /<head>/i, '<head>' + sOverrideError ) ) ;
+			oDoc.close() ;
+		}
+
+		if ( FCKBrowserInfo.IsAIR )
+			FCKAdobeAIR.EditingArea_Start( oDoc, html ) ;
+
+		// Firefox 1.0.x is buggy... ohh yes... so let's do it two times and it
+		// will magically work.
+		if ( FCKBrowserInfo.IsGecko10 && !secondCall )
+		{
+			this.Start( html, true ) ;
+			return ;
+		}
+
+		if ( oIFrame.readyState && oIFrame.readyState != 'completed' )
+		{
+			var editArea = this ;
+			( oIFrame.onreadystatechange = function()
+			{
+				if ( oIFrame.readyState == 'complete' )
+				{
+					oIFrame.onreadystatechange = null ;
+					editArea.Window._FCKEditingArea = editArea ;
+					FCKEditingArea_CompleteStart.call( editArea.Window ) ;
+				}
+			// It happened that IE changed the state to "complete" after the
+			// "if" and before the "onreadystatechange" assignement, making we
+			// lost the event call, so we do a manual call just to be sure.
+			} )() ;
+		}
+		else
+		{
+			this.Window._FCKEditingArea = this ;
+
+			// FF 1.0.x is buggy... we must wait a lot to enable editing because
+			// sometimes the content simply disappears, for example when pasting
+			// "bla1!<img src='some_url'>!bla2" in the source and then switching
+			// back to design.
+			if ( FCKBrowserInfo.IsGecko10 )
+				this.Window.setTimeout( FCKEditingArea_CompleteStart, 500 ) ;
+			else
+				FCKEditingArea_CompleteStart.call( this.Window ) ;
+		}
+	}
+	else
+	{
+		var eTextarea = this.Textarea = oTargetDocument.createElement( 'textarea' ) ;
+		eTextarea.className = 'SourceField' ;
+		eTextarea.dir = 'ltr' ;
+		FCKDomTools.SetElementStyles( eTextarea,
+			{
+				width	: '100%',
+				height	: '100%',
+				border	: 'none',
+				resize	: 'none',
+				outline	: 'none'
+			} ) ;
+		eTargetElement.appendChild( eTextarea ) ;
+
+		eTextarea.value = html  ;
+
+		// Fire the "OnLoad" event.
+		FCKTools.RunFunction( this.OnLoad ) ;
+	}
+}
+
+// "this" here is FCKEditingArea.Window
+function FCKEditingArea_CompleteStart()
+{
+	// On Firefox, the DOM takes a little to become available. So we must wait for it in a loop.
+	if ( !this.document.body )
+	{
+		this.setTimeout( FCKEditingArea_CompleteStart, 50 ) ;
+		return ;
+	}
+
+	var oEditorArea = this._FCKEditingArea ;
+
+	// Save this reference to be re-used later.
+	oEditorArea.Document = oEditorArea.Window.document ;
+
+	oEditorArea.MakeEditable() ;
+
+	// Fire the "OnLoad" event.
+	FCKTools.RunFunction( oEditorArea.OnLoad ) ;
+}
+
+FCKEditingArea.prototype.MakeEditable = function()
+{
+	var oDoc = this.Document ;
+
+	if ( FCKBrowserInfo.IsIE )
+	{
+		// Kludge for #141 and #523
+		oDoc.body.disabled = true ;
+		oDoc.body.contentEditable = true ;
+		oDoc.body.removeAttribute( "disabled" ) ;
+
+		/* The following commands don't throw errors, but have no effect.
+		oDoc.execCommand( 'AutoDetect', false, false ) ;
+		oDoc.execCommand( 'KeepSelection', false, true ) ;
+		*/
+	}
+	else
+	{
+		try
+		{
+			// Disable Firefox 2 Spell Checker.
+			oDoc.body.spellcheck = ( this.FFSpellChecker !== false ) ;
+
+			if ( this._BodyHTML )
+			{
+				oDoc.body.innerHTML = this._BodyHTML ;
+				oDoc.body.offsetLeft ;		// Don't remove, this is a hack to fix Opera 9.50, see #2264.
+				this._BodyHTML = null ;
+			}
+
+			oDoc.designMode = 'on' ;
+
+			// Tell Gecko (Firefox 1.5+) to enable or not live resizing of objects (by Alfonso Martinez)
+			oDoc.execCommand( 'enableObjectResizing', false, !FCKConfig.DisableObjectResizing ) ;
+
+			// Disable the standard table editing features of Firefox.
+			oDoc.execCommand( 'enableInlineTableEditing', false, !FCKConfig.DisableFFTableHandles ) ;
+		}
+		catch (e)
+		{
+			// In Firefox if the iframe is initially hidden it can't be set to designMode and it raises an exception
+			// So we set up a DOM Mutation event Listener on the HTML, as it will raise several events when the document is  visible again
+			FCKTools.AddEventListener( this.Window.frameElement, 'DOMAttrModified', FCKEditingArea_Document_AttributeNodeModified ) ;
+		}
+
+	}
+}
+
+// This function processes the notifications of the DOM Mutation event on the document
+// We use it to know that the document will be ready to be editable again (or we hope so)
+function FCKEditingArea_Document_AttributeNodeModified( evt )
+{
+	var editingArea = evt.currentTarget.contentWindow._FCKEditingArea ;
+
+	// We want to run our function after the events no longer fire, so we can know that it's a stable situation
+	if ( editingArea._timer )
+		window.clearTimeout( editingArea._timer ) ;
+
+	editingArea._timer = FCKTools.SetTimeout( FCKEditingArea_MakeEditableByMutation, 1000, editingArea ) ;
+}
+
+// This function ideally should be called after the document is visible, it does clean up of the
+// mutation tracking and tries again to make the area editable.
+function FCKEditingArea_MakeEditableByMutation()
+{
+	// Clean up
+	delete this._timer ;
+	// Now we don't want to keep on getting this event
+	FCKTools.RemoveEventListener( this.Window.frameElement, 'DOMAttrModified', FCKEditingArea_Document_AttributeNodeModified ) ;
+	// Let's try now to set the editing area editable
+	// If it fails it will set up the Mutation Listener again automatically
+	this.MakeEditable() ;
+}
+
+FCKEditingArea.prototype.Focus = function()
+{
+	try
+	{
+		if ( this.Mode == FCK_EDITMODE_WYSIWYG )
+		{
+			if ( FCKBrowserInfo.IsIE )
+				this._FocusIE() ;
+			else
+				this.Window.focus() ;
+		}
+		else
+		{
+			var oDoc = FCKTools.GetElementDocument( this.Textarea ) ;
+			if ( (!oDoc.hasFocus || oDoc.hasFocus() ) && oDoc.activeElement == this.Textarea )
+				return ;
+
+			this.Textarea.focus() ;
+		}
+	}
+	catch(e) {}
+}
+
+FCKEditingArea.prototype._FocusIE = function()
+{
+	// In IE it can happen that the document is in theory focused but the
+	// active element is outside of it.
+	this.Document.body.setActive() ;
+
+	this.Window.focus() ;
+
+	// Kludge for #141... yet more code to workaround IE bugs
+	var range = this.Document.selection.createRange() ;
+
+	var parentNode = range.parentElement() ;
+	var parentTag = parentNode.nodeName.toLowerCase() ;
+
+	// Only apply the fix when in a block, and the block is empty.
+	if ( parentNode.childNodes.length > 0 ||
+		 !( FCKListsLib.BlockElements[parentTag] ||
+		    FCKListsLib.NonEmptyBlockElements[parentTag] ) )
+	{
+		return ;
+	}
+
+	// Force the selection to happen, in this way we guarantee the focus will
+	// be there.
+	range = new FCKDomRange( this.Window ) ;
+	range.MoveToElementEditStart( parentNode ) ;
+	range.Select() ;
+}
+
+function FCKEditingArea_Cleanup()
+{
+	if ( this.Document )
+		this.Document.body.innerHTML = "" ;
+	this.TargetElement = null ;
+	this.IFrame = null ;
+	this.Document = null ;
+	this.Textarea = null ;
+
+	if ( this.Window )
+	{
+		this.Window._FCKEditingArea = null ;
+		this.Window = null ;
+	}
+}


Property changes on: announcement/trunk/src/main/webapp/fckeditor/editor/_source/classes/fckeditingarea.js
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/webapp/fckeditor/editor/_source/classes/fckelementpath.js
===================================================================
--- announcement/trunk/src/main/webapp/fckeditor/editor/_source/classes/fckelementpath.js	                        (rev 0)
+++ announcement/trunk/src/main/webapp/fckeditor/editor/_source/classes/fckelementpath.js	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,89 @@
+/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2008 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * Manages the DOM ascensors element list of a specific DOM node
+ * (limited to body, inclusive).
+ */
+
+var FCKElementPath = function( lastNode )
+{
+	var eBlock = null ;
+	var eBlockLimit = null ;
+
+	var aElements = new Array() ;
+
+	var e = lastNode ;
+	while ( e )
+	{
+		if ( e.nodeType == 1 )
+		{
+			if ( !this.LastElement )
+				this.LastElement = e ;
+
+			var sElementName = e.nodeName.toLowerCase() ;
+			if ( FCKBrowserInfo.IsIE && e.scopeName != 'HTML' )
+				sElementName = e.scopeName.toLowerCase() + ':' + sElementName ;
+
+			if ( !eBlockLimit )
+			{
+				if ( !eBlock && FCKListsLib.PathBlockElements[ sElementName ] != null )
+					eBlock = e ;
+
+				if ( FCKListsLib.PathBlockLimitElements[ sElementName ] != null )
+				{
+					// DIV is considered the Block, if no block is available (#525)
+					// and if it doesn't contain other blocks.
+					if ( !eBlock && sElementName == 'div' && !FCKElementPath._CheckHasBlock( e ) )
+						eBlock = e ;
+					else
+						eBlockLimit = e ;
+				}
+			}
+
+			aElements.push( e ) ;
+
+			if ( sElementName == 'body' )
+				break ;
+		}
+		e = e.parentNode ;
+	}
+
+	this.Block = eBlock ;
+	this.BlockLimit = eBlockLimit ;
+	this.Elements = aElements ;
+}
+
+/**
+ * Check if an element contains any block element.
+ */
+FCKElementPath._CheckHasBlock = function( element )
+{
+	var childNodes = element.childNodes ;
+
+	for ( var i = 0, count = childNodes.length ; i < count ; i++ )
+	{
+		var child = childNodes[i] ;
+
+		if ( child.nodeType == 1 && FCKListsLib.BlockElements[ child.nodeName.toLowerCase() ] )
+			return true ;
+	}
+
+	return false ;
+}


Property changes on: announcement/trunk/src/main/webapp/fckeditor/editor/_source/classes/fckelementpath.js
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/webapp/fckeditor/editor/_source/classes/fckenterkey.js
===================================================================
--- announcement/trunk/src/main/webapp/fckeditor/editor/_source/classes/fckenterkey.js	                        (rev 0)
+++ announcement/trunk/src/main/webapp/fckeditor/editor/_source/classes/fckenterkey.js	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,691 @@
+/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2008 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * Controls the [Enter] keystroke behavior in a document.
+ */
+
+/*
+ *	Constructor.
+ *		@targetDocument : the target document.
+ *		@enterMode : the behavior for the <Enter> keystroke.
+ *			May be "p", "div", "br". Default is "p".
+ *		@shiftEnterMode : the behavior for the <Shift>+<Enter> keystroke.
+ *			May be "p", "div", "br". Defaults to "br".
+ */
+var FCKEnterKey = function( targetWindow, enterMode, shiftEnterMode, tabSpaces )
+{
+	this.Window			= targetWindow ;
+	this.EnterMode		= enterMode || 'p' ;
+	this.ShiftEnterMode	= shiftEnterMode || 'br' ;
+
+	// Setup the Keystroke Handler.
+	var oKeystrokeHandler = new FCKKeystrokeHandler( false ) ;
+	oKeystrokeHandler._EnterKey = this ;
+	oKeystrokeHandler.OnKeystroke = FCKEnterKey_OnKeystroke ;
+
+	oKeystrokeHandler.SetKeystrokes( [
+		[ 13		, 'Enter' ],
+		[ SHIFT + 13, 'ShiftEnter' ],
+		[ 8			, 'Backspace' ],
+		[ CTRL + 8	, 'CtrlBackspace' ],
+		[ 46		, 'Delete' ]
+	] ) ;
+
+	this.TabText = '' ;
+
+	// Safari by default inserts 4 spaces on TAB, while others make the editor
+	// loose focus. So, we need to handle it here to not include those spaces.
+	if ( tabSpaces > 0 || FCKBrowserInfo.IsSafari )
+	{
+		while ( tabSpaces-- )
+			this.TabText += '\xa0' ;
+
+		oKeystrokeHandler.SetKeystrokes( [ 9, 'Tab' ] );
+	}
+
+	oKeystrokeHandler.AttachToElement( targetWindow.document ) ;
+}
+
+
+function FCKEnterKey_OnKeystroke(  keyCombination, keystrokeValue )
+{
+	var oEnterKey = this._EnterKey ;
+
+	try
+	{
+		switch ( keystrokeValue )
+		{
+			case 'Enter' :
+				return oEnterKey.DoEnter() ;
+				break ;
+			case 'ShiftEnter' :
+				return oEnterKey.DoShiftEnter() ;
+				break ;
+			case 'Backspace' :
+				return oEnterKey.DoBackspace() ;
+				break ;
+			case 'Delete' :
+				return oEnterKey.DoDelete() ;
+				break ;
+			case 'Tab' :
+				return oEnterKey.DoTab() ;
+				break ;
+			case 'CtrlBackspace' :
+				return oEnterKey.DoCtrlBackspace() ;
+				break ;
+		}
+	}
+	catch (e)
+	{
+		// If for any reason we are not able to handle it, go
+		// ahead with the browser default behavior.
+	}
+
+	return false ;
+}
+
+/*
+ * Executes the <Enter> key behavior.
+ */
+FCKEnterKey.prototype.DoEnter = function( mode, hasShift )
+{
+	// Save an undo snapshot before doing anything
+	FCKUndo.SaveUndoStep() ;
+
+	this._HasShift = ( hasShift === true ) ;
+
+	var parentElement = FCKSelection.GetParentElement() ;
+	var parentPath = new FCKElementPath( parentElement ) ;
+	var sMode = mode || this.EnterMode ;
+
+	if ( sMode == 'br' || parentPath.Block && parentPath.Block.tagName.toLowerCase() == 'pre' )
+		return this._ExecuteEnterBr() ;
+	else
+		return this._ExecuteEnterBlock( sMode ) ;
+}
+
+/*
+ * Executes the <Shift>+<Enter> key behavior.
+ */
+FCKEnterKey.prototype.DoShiftEnter = function()
+{
+	return this.DoEnter( this.ShiftEnterMode, true ) ;
+}
+
+/*
+ * Executes the <Backspace> key behavior.
+ */
+FCKEnterKey.prototype.DoBackspace = function()
+{
+	var bCustom = false ;
+
+	// Get the current selection.
+	var oRange = new FCKDomRange( this.Window ) ;
+	oRange.MoveToSelection() ;
+
+	// Kludge for #247
+	if ( FCKBrowserInfo.IsIE && this._CheckIsAllContentsIncluded( oRange, this.Window.document.body ) )
+	{
+		this._FixIESelectAllBug( oRange ) ;
+		return true ;
+	}
+
+	var isCollapsed = oRange.CheckIsCollapsed() ;
+
+	if ( !isCollapsed )
+	{
+		// Bug #327, Backspace with an img selection would activate the default action in IE.
+		// Let's override that with our logic here.
+		if ( FCKBrowserInfo.IsIE && this.Window.document.selection.type.toLowerCase() == "control" )
+		{
+			var controls = this.Window.document.selection.createRange() ;
+			for ( var i = controls.length - 1 ; i >= 0 ; i-- )
+			{
+				var el = controls.item( i ) ;
+				el.parentNode.removeChild( el ) ;
+			}
+			return true ;
+		}
+
+		return false ;
+	}
+
+	// On IE, it is better for us handle the deletion if the caret is preceeded
+	// by a <br> (#1383).
+	if ( FCKBrowserInfo.IsIE )
+	{
+		var previousElement = FCKDomTools.GetPreviousSourceElement( oRange.StartNode, true ) ;
+
+		if ( previousElement && previousElement.nodeName.toLowerCase() == 'br' )
+		{
+			// Create a range that starts after the <br> and ends at the
+			// current range position.
+			var testRange = oRange.Clone() ;
+			testRange.SetStart( previousElement, 4 ) ;
+
+			// If that range is empty, we can proceed cleaning that <br> manually.
+			if ( testRange.CheckIsEmpty() )
+			{
+				previousElement.parentNode.removeChild( previousElement ) ;
+				return true ;
+			}
+		}
+	}
+
+	var oStartBlock = oRange.StartBlock ;
+	var oEndBlock = oRange.EndBlock ;
+
+	// The selection boundaries must be in the same "block limit" element
+	if ( oRange.StartBlockLimit == oRange.EndBlockLimit && oStartBlock && oEndBlock )
+	{
+		if ( !isCollapsed )
+		{
+			var bEndOfBlock = oRange.CheckEndOfBlock() ;
+
+			oRange.DeleteContents() ;
+
+			if ( oStartBlock != oEndBlock )
+			{
+				oRange.SetStart(oEndBlock,1) ;
+				oRange.SetEnd(oEndBlock,1) ;
+
+//				if ( bEndOfBlock )
+//					oEndBlock.parentNode.removeChild( oEndBlock ) ;
+			}
+
+			oRange.Select() ;
+
+			bCustom = ( oStartBlock == oEndBlock ) ;
+		}
+
+		if ( oRange.CheckStartOfBlock() )
+		{
+			var oCurrentBlock = oRange.StartBlock ;
+
+			var ePrevious = FCKDomTools.GetPreviousSourceElement( oCurrentBlock, true, [ 'BODY', oRange.StartBlockLimit.nodeName ], ['UL','OL'] ) ;
+
+			bCustom = this._ExecuteBackspace( oRange, ePrevious, oCurrentBlock ) ;
+		}
+		else if ( FCKBrowserInfo.IsGeckoLike )
+		{
+			// Firefox and Opera (#1095) loose the selection when executing
+			// CheckStartOfBlock, so we must reselect.
+			oRange.Select() ;
+		}
+	}
+
+	oRange.Release() ;
+	return bCustom ;
+}
+
+FCKEnterKey.prototype.DoCtrlBackspace = function()
+{
+	FCKUndo.SaveUndoStep() ;
+	var oRange = new FCKDomRange( this.Window ) ;
+	oRange.MoveToSelection() ;
+	if ( FCKBrowserInfo.IsIE && this._CheckIsAllContentsIncluded( oRange, this.Window.document.body ) )
+	{
+		this._FixIESelectAllBug( oRange ) ;
+		return true ;
+	}
+	return false ;
+}
+
+FCKEnterKey.prototype._ExecuteBackspace = function( range, previous, currentBlock )
+{
+	var bCustom = false ;
+
+	// We could be in a nested LI.
+	if ( !previous && currentBlock && currentBlock.nodeName.IEquals( 'LI' ) && currentBlock.parentNode.parentNode.nodeName.IEquals( 'LI' ) )
+	{
+		this._OutdentWithSelection( currentBlock, range ) ;
+		return true ;
+	}
+
+	if ( previous && previous.nodeName.IEquals( 'LI' ) )
+	{
+		var oNestedList = FCKDomTools.GetLastChild( previous, ['UL','OL'] ) ;
+
+		while ( oNestedList )
+		{
+			previous = FCKDomTools.GetLastChild( oNestedList, 'LI' ) ;
+			oNestedList = FCKDomTools.GetLastChild( previous, ['UL','OL'] ) ;
+		}
+	}
+
+	if ( previous && currentBlock )
+	{
+		// If we are in a LI, and the previous block is not an LI, we must outdent it.
+		if ( currentBlock.nodeName.IEquals( 'LI' ) && !previous.nodeName.IEquals( 'LI' ) )
+		{
+			this._OutdentWithSelection( currentBlock, range ) ;
+			return true ;
+		}
+
+		// Take a reference to the parent for post processing cleanup.
+		var oCurrentParent = currentBlock.parentNode ;
+
+		var sPreviousName = previous.nodeName.toLowerCase() ;
+		if ( FCKListsLib.EmptyElements[ sPreviousName ] != null || sPreviousName == 'table' )
+		{
+			FCKDomTools.RemoveNode( previous ) ;
+			bCustom = true ;
+		}
+		else
+		{
+			// Remove the current block.
+			FCKDomTools.RemoveNode( currentBlock ) ;
+
+			// Remove any empty tag left by the block removal.
+			while ( oCurrentParent.innerHTML.Trim().length == 0 )
+			{
+				var oParent = oCurrentParent.parentNode ;
+				oParent.removeChild( oCurrentParent ) ;
+				oCurrentParent = oParent ;
+			}
+
+			// Cleanup the previous and the current elements.
+			FCKDomTools.LTrimNode( currentBlock ) ;
+			FCKDomTools.RTrimNode( previous ) ;
+
+			// Append a space to the previous.
+			// Maybe it is not always desirable...
+			// previous.appendChild( this.Window.document.createTextNode( ' ' ) ) ;
+
+			// Set the range to the end of the previous element and bookmark it.
+			range.SetStart( previous, 2, true ) ;
+			range.Collapse( true ) ;
+			var oBookmark = range.CreateBookmark( true ) ;
+
+			// Move the contents of the block to the previous element and delete it.
+			// But for some block types (e.g. table), moving the children to the previous block makes no sense.
+			// So a check is needed. (See #1081)
+			if ( ! currentBlock.tagName.IEquals( [ 'TABLE' ] ) )
+				FCKDomTools.MoveChildren( currentBlock, previous ) ;
+
+			// Place the selection at the bookmark.
+			range.SelectBookmark( oBookmark ) ;
+
+			bCustom = true ;
+		}
+	}
+
+	return bCustom ;
+}
+
+/*
+ * Executes the <Delete> key behavior.
+ */
+FCKEnterKey.prototype.DoDelete = function()
+{
+	// Save an undo snapshot before doing anything
+	// This is to conform with the behavior seen in MS Word
+	FCKUndo.SaveUndoStep() ;
+
+	// The <Delete> has the same effect as the <Backspace>, so we have the same
+	// results if we just move to the next block and apply the same <Backspace> logic.
+
+	var bCustom = false ;
+
+	// Get the current selection.
+	var oRange = new FCKDomRange( this.Window ) ;
+	oRange.MoveToSelection() ;
+
+	// Kludge for #247
+	if ( FCKBrowserInfo.IsIE && this._CheckIsAllContentsIncluded( oRange, this.Window.document.body ) )
+	{
+		this._FixIESelectAllBug( oRange ) ;
+		return true ;
+	}
+
+	// There is just one special case for collapsed selections at the end of a block.
+	if ( oRange.CheckIsCollapsed() && oRange.CheckEndOfBlock( FCKBrowserInfo.IsGeckoLike ) )
+	{
+		var oCurrentBlock = oRange.StartBlock ;
+		var eCurrentCell = FCKTools.GetElementAscensor( oCurrentBlock, 'td' );
+
+		var eNext = FCKDomTools.GetNextSourceElement( oCurrentBlock, true, [ oRange.StartBlockLimit.nodeName ],
+				['UL','OL','TR'], true ) ;
+
+		// Bug #1323 : if we're in a table cell, and the next node belongs to a different cell, then don't
+		// delete anything.
+		if ( eCurrentCell )
+		{
+			var eNextCell = FCKTools.GetElementAscensor( eNext, 'td' );
+			if ( eNextCell != eCurrentCell )
+				return true ;
+		}
+
+		bCustom = this._ExecuteBackspace( oRange, oCurrentBlock, eNext ) ;
+	}
+
+	oRange.Release() ;
+	return bCustom ;
+}
+
+/*
+ * Executes the <Tab> key behavior.
+ */
+FCKEnterKey.prototype.DoTab = function()
+{
+	var oRange = new FCKDomRange( this.Window );
+	oRange.MoveToSelection() ;
+
+	// If the user pressed <tab> inside a table, we should give him the default behavior ( moving between cells )
+	// instead of giving him more non-breaking spaces. (Bug #973)
+	var node = oRange._Range.startContainer ;
+	while ( node )
+	{
+		if ( node.nodeType == 1 )
+		{
+			var tagName = node.tagName.toLowerCase() ;
+			if ( tagName == "tr" || tagName == "td" || tagName == "th" || tagName == "tbody" || tagName == "table" )
+				return false ;
+			else
+				break ;
+		}
+		node = node.parentNode ;
+	}
+
+	if ( this.TabText )
+	{
+		oRange.DeleteContents() ;
+		oRange.InsertNode( this.Window.document.createTextNode( this.TabText ) ) ;
+		oRange.Collapse( false ) ;
+		oRange.Select() ;
+	}
+	return true ;
+}
+
+FCKEnterKey.prototype._ExecuteEnterBlock = function( blockTag, range )
+{
+	// Get the current selection.
+	var oRange = range || new FCKDomRange( this.Window ) ;
+
+	var oSplitInfo = oRange.SplitBlock( blockTag ) ;
+
+	if ( oSplitInfo )
+	{
+		// Get the current blocks.
+		var ePreviousBlock	= oSplitInfo.PreviousBlock ;
+		var eNextBlock		= oSplitInfo.NextBlock ;
+
+		var bIsStartOfBlock	= oSplitInfo.WasStartOfBlock ;
+		var bIsEndOfBlock	= oSplitInfo.WasEndOfBlock ;
+
+		// If there is one block under a list item, modify the split so that the list item gets split as well. (Bug #1647)
+		if ( eNextBlock )
+		{
+			if ( eNextBlock.parentNode.nodeName.IEquals( 'li' ) )
+			{
+				FCKDomTools.BreakParent( eNextBlock, eNextBlock.parentNode ) ;
+				FCKDomTools.MoveNode( eNextBlock, eNextBlock.nextSibling, true ) ;
+			}
+		}
+		else if ( ePreviousBlock && ePreviousBlock.parentNode.nodeName.IEquals( 'li' ) )
+		{
+			FCKDomTools.BreakParent( ePreviousBlock, ePreviousBlock.parentNode ) ;
+			oRange.MoveToElementEditStart( ePreviousBlock.nextSibling );
+			FCKDomTools.MoveNode( ePreviousBlock, ePreviousBlock.previousSibling ) ;
+		}
+
+		// If we have both the previous and next blocks, it means that the
+		// boundaries were on separated blocks, or none of them where on the
+		// block limits (start/end).
+		if ( !bIsStartOfBlock && !bIsEndOfBlock )
+		{
+			// If the next block is an <li> with another list tree as the first child
+			// We'll need to append a placeholder or the list item wouldn't be editable. (Bug #1420)
+			if ( eNextBlock.nodeName.IEquals( 'li' ) && eNextBlock.firstChild
+					&& eNextBlock.firstChild.nodeName.IEquals( ['ul', 'ol'] ) )
+				eNextBlock.insertBefore( FCKTools.GetElementDocument( eNextBlock ).createTextNode( '\xa0' ), eNextBlock.firstChild ) ;
+			// Move the selection to the end block.
+			if ( eNextBlock )
+				oRange.MoveToElementEditStart( eNextBlock ) ;
+		}
+		else
+		{
+			if ( bIsStartOfBlock && bIsEndOfBlock && ePreviousBlock.tagName.toUpperCase() == 'LI' )
+			{
+				oRange.MoveToElementStart( ePreviousBlock ) ;
+				this._OutdentWithSelection( ePreviousBlock, oRange ) ;
+				oRange.Release() ;
+				return true ;
+			}
+
+			var eNewBlock ;
+
+			if ( ePreviousBlock )
+			{
+				var sPreviousBlockTag = ePreviousBlock.tagName.toUpperCase() ;
+
+				// If is a header tag, or we are in a Shift+Enter (#77),
+				// create a new block element (later in the code).
+				if ( !this._HasShift && !(/^H[1-6]$/).test( sPreviousBlockTag ) )
+				{
+					// Otherwise, duplicate the previous block.
+					eNewBlock = FCKDomTools.CloneElement( ePreviousBlock ) ;
+				}
+			}
+			else if ( eNextBlock )
+				eNewBlock = FCKDomTools.CloneElement( eNextBlock ) ;
+
+			if ( !eNewBlock )
+				eNewBlock = this.Window.document.createElement( blockTag ) ;
+
+			// Recreate the inline elements tree, which was available
+			// before the hitting enter, so the same styles will be
+			// available in the new block.
+			var elementPath = oSplitInfo.ElementPath ;
+			if ( elementPath )
+			{
+				for ( var i = 0, len = elementPath.Elements.length ; i < len ; i++ )
+				{
+					var element = elementPath.Elements[i] ;
+
+					if ( element == elementPath.Block || element == elementPath.BlockLimit )
+						break ;
+
+					if ( FCKListsLib.InlineChildReqElements[ element.nodeName.toLowerCase() ] )
+					{
+						element = FCKDomTools.CloneElement( element ) ;
+						FCKDomTools.MoveChildren( eNewBlock, element ) ;
+						eNewBlock.appendChild( element ) ;
+					}
+				}
+			}
+
+			if ( FCKBrowserInfo.IsGeckoLike )
+				FCKTools.AppendBogusBr( eNewBlock ) ;
+
+			oRange.InsertNode( eNewBlock ) ;
+
+			// This is tricky, but to make the new block visible correctly
+			// we must select it.
+			if ( FCKBrowserInfo.IsIE )
+			{
+				// Move the selection to the new block.
+				oRange.MoveToElementEditStart( eNewBlock ) ;
+				oRange.Select() ;
+			}
+
+			// Move the selection to the new block.
+			oRange.MoveToElementEditStart( bIsStartOfBlock && !bIsEndOfBlock ? eNextBlock : eNewBlock ) ;
+		}
+
+		if ( FCKBrowserInfo.IsGeckoLike )
+			FCKDomTools.ScrollIntoView( eNextBlock || eNewBlock, false ) ;
+
+		oRange.Select() ;
+	}
+
+	// Release the resources used by the range.
+	oRange.Release() ;
+
+	return true ;
+}
+
+FCKEnterKey.prototype._ExecuteEnterBr = function( blockTag )
+{
+	// Get the current selection.
+	var oRange = new FCKDomRange( this.Window ) ;
+	oRange.MoveToSelection() ;
+
+	// The selection boundaries must be in the same "block limit" element.
+	if ( oRange.StartBlockLimit == oRange.EndBlockLimit )
+	{
+		oRange.DeleteContents() ;
+
+		// Get the new selection (it is collapsed at this point).
+		oRange.MoveToSelection() ;
+
+		var bIsStartOfBlock	= oRange.CheckStartOfBlock() ;
+		var bIsEndOfBlock	= oRange.CheckEndOfBlock() ;
+
+		var sStartBlockTag = oRange.StartBlock ? oRange.StartBlock.tagName.toUpperCase() : '' ;
+
+		var bHasShift = this._HasShift ;
+		var bIsPre = false ;
+
+		if ( !bHasShift && sStartBlockTag == 'LI' )
+			return this._ExecuteEnterBlock( null, oRange ) ;
+
+		// If we are at the end of a header block.
+		if ( !bHasShift && bIsEndOfBlock && (/^H[1-6]$/).test( sStartBlockTag ) )
+		{
+			// Insert a BR after the current paragraph.
+			FCKDomTools.InsertAfterNode( oRange.StartBlock, this.Window.document.createElement( 'br' ) ) ;
+
+			// The space is required by Gecko only to make the cursor blink.
+			if ( FCKBrowserInfo.IsGecko )
+				FCKDomTools.InsertAfterNode( oRange.StartBlock, this.Window.document.createTextNode( '' ) ) ;
+
+			// IE and Gecko have different behaviors regarding the position.
+			oRange.SetStart( oRange.StartBlock.nextSibling, FCKBrowserInfo.IsIE ? 3 : 1 ) ;
+		}
+		else
+		{
+			var eLineBreak ;
+			bIsPre = sStartBlockTag.IEquals( 'pre' ) ;
+			if ( bIsPre )
+				eLineBreak = this.Window.document.createTextNode( FCKBrowserInfo.IsIE ? '\r' : '\n' ) ;
+			else
+				eLineBreak = this.Window.document.createElement( 'br' ) ;
+
+			oRange.InsertNode( eLineBreak ) ;
+
+			// The space is required by Gecko only to make the cursor blink.
+			if ( FCKBrowserInfo.IsGecko )
+				FCKDomTools.InsertAfterNode( eLineBreak, this.Window.document.createTextNode( '' ) ) ;
+
+			// If we are at the end of a block, we must be sure the bogus node is available in that block.
+			if ( bIsEndOfBlock && FCKBrowserInfo.IsGeckoLike )
+				FCKTools.AppendBogusBr( eLineBreak.parentNode ) ;
+
+			if ( FCKBrowserInfo.IsIE )
+				oRange.SetStart( eLineBreak, 4 ) ;
+			else
+				oRange.SetStart( eLineBreak.nextSibling, 1 ) ;
+
+			if ( ! FCKBrowserInfo.IsIE )
+			{
+				var dummy = null ;
+				if ( FCKBrowserInfo.IsOpera )
+					dummy = this.Window.document.createElement( 'span' ) ;
+				else
+					dummy = this.Window.document.createElement( 'br' ) ;
+
+				eLineBreak.parentNode.insertBefore( dummy, eLineBreak.nextSibling ) ;
+
+				if ( FCKBrowserInfo.IsSafari )
+					FCKDomTools.ScrollIntoView( dummy, false ) ;
+				else
+					dummy.scrollIntoView( false ) ;
+
+				dummy.parentNode.removeChild( dummy ) ;
+			}
+		}
+
+		// This collapse guarantees the cursor will be blinking.
+		oRange.Collapse( true ) ;
+
+		oRange.Select( bIsPre ) ;
+	}
+
+	// Release the resources used by the range.
+	oRange.Release() ;
+
+	return true ;
+}
+
+// Outdents a LI, maintaining the selection defined on a range.
+FCKEnterKey.prototype._OutdentWithSelection = function( li, range )
+{
+	var oBookmark = range.CreateBookmark() ;
+
+	FCKListHandler.OutdentListItem( li ) ;
+
+	range.MoveToBookmark( oBookmark ) ;
+	range.Select() ;
+}
+
+// Is all the contents under a node included by a range?
+FCKEnterKey.prototype._CheckIsAllContentsIncluded = function( range, node )
+{
+	var startOk = false ;
+	var endOk = false ;
+
+	/*
+	FCKDebug.Output( 'sc='+range.StartContainer.nodeName+
+			',so='+range._Range.startOffset+
+			',ec='+range.EndContainer.nodeName+
+			',eo='+range._Range.endOffset ) ;
+	*/
+	if ( range.StartContainer == node || range.StartContainer == node.firstChild )
+		startOk = ( range._Range.startOffset == 0 ) ;
+
+	if ( range.EndContainer == node || range.EndContainer == node.lastChild )
+	{
+		var nodeLength = range.EndContainer.nodeType == 3 ? range.EndContainer.length : range.EndContainer.childNodes.length ;
+		endOk = ( range._Range.endOffset == nodeLength ) ;
+	}
+
+	return startOk && endOk ;
+}
+
+// Kludge for #247
+FCKEnterKey.prototype._FixIESelectAllBug = function( range )
+{
+	var doc = this.Window.document ;
+	doc.body.innerHTML = '' ;
+	var editBlock ;
+	if ( FCKConfig.EnterMode.IEquals( ['div', 'p'] ) )
+	{
+		editBlock = doc.createElement( FCKConfig.EnterMode ) ;
+		doc.body.appendChild( editBlock ) ;
+	}
+	else
+		editBlock = doc.body ;
+
+	range.MoveToNodeContents( editBlock ) ;
+	range.Collapse( true ) ;
+	range.Select() ;
+	range.Release() ;
+}


Property changes on: announcement/trunk/src/main/webapp/fckeditor/editor/_source/classes/fckenterkey.js
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/webapp/fckeditor/editor/_source/classes/fckevents.js
===================================================================
--- announcement/trunk/src/main/webapp/fckeditor/editor/_source/classes/fckevents.js	                        (rev 0)
+++ announcement/trunk/src/main/webapp/fckeditor/editor/_source/classes/fckevents.js	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,71 @@
+/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2008 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * FCKEvents Class: used to handle events is a advanced way.
+ */
+
+var FCKEvents = function( eventsOwner )
+{
+	this.Owner = eventsOwner ;
+	this._RegisteredEvents = new Object() ;
+}
+
+FCKEvents.prototype.AttachEvent = function( eventName, functionPointer )
+{
+	var aTargets ;
+
+	if ( !( aTargets = this._RegisteredEvents[ eventName ] ) )
+		this._RegisteredEvents[ eventName ] = [ functionPointer ] ;
+	else
+	{
+		// Check that the event handler isn't already registered with the same listener
+		// It doesn't detect function pointers belonging to an object (at least in Gecko)
+		if ( aTargets.IndexOf( functionPointer ) == -1 )
+			aTargets.push( functionPointer ) ;
+	}
+}
+
+FCKEvents.prototype.FireEvent = function( eventName, params )
+{
+	var bReturnValue = true ;
+
+	var oCalls = this._RegisteredEvents[ eventName ] ;
+
+	if ( oCalls )
+	{
+		for ( var i = 0 ; i < oCalls.length ; i++ )
+		{
+			try
+			{
+				bReturnValue = ( oCalls[ i ]( this.Owner, params ) && bReturnValue ) ;
+			}
+			catch(e)
+			{
+				// Ignore the following error. It may happen if pointing to a
+				// script not anymore available (#934):
+				// -2146823277 = Can't execute code from a freed script
+				if ( e.number != -2146823277 )
+					throw e ;
+			}
+		}
+	}
+
+	return bReturnValue ;
+}


Property changes on: announcement/trunk/src/main/webapp/fckeditor/editor/_source/classes/fckevents.js
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/webapp/fckeditor/editor/_source/classes/fckhtmliterator.js
===================================================================
--- announcement/trunk/src/main/webapp/fckeditor/editor/_source/classes/fckhtmliterator.js	                        (rev 0)
+++ announcement/trunk/src/main/webapp/fckeditor/editor/_source/classes/fckhtmliterator.js	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,142 @@
+/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2008 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * This class can be used to interate through nodes inside a range.
+ *
+ * During interation, the provided range can become invalid, due to document
+ * mutations, so CreateBookmark() used to restore it after processing, if
+ * needed.
+ */
+
+var FCKHtmlIterator = function( source )
+{
+	this._sourceHtml = source ;
+}
+FCKHtmlIterator.prototype =
+{
+	Next : function()
+	{
+		var sourceHtml = this._sourceHtml ;
+		if ( sourceHtml == null )
+			return null ;
+
+		var match = FCKRegexLib.HtmlTag.exec( sourceHtml ) ;
+		var isTag = false ;
+		var value = "" ;
+		if ( match )
+		{
+			if ( match.index > 0 )
+			{
+				value = sourceHtml.substr( 0, match.index ) ;
+				this._sourceHtml = sourceHtml.substr( match.index ) ;
+			}
+			else
+			{
+				isTag = true ;
+				value = match[0] ;
+				this._sourceHtml = sourceHtml.substr( match[0].length ) ;
+			}
+		}
+		else
+		{
+			value = sourceHtml ;
+			this._sourceHtml = null ;
+		}
+		return { 'isTag' : isTag, 'value' : value } ;
+	},
+
+	Each : function( func )
+	{
+		var chunk ;
+		while ( ( chunk = this.Next() ) )
+			func( chunk.isTag, chunk.value ) ;
+	}
+} ;
+/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2008 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * This class can be used to interate through nodes inside a range.
+ *
+ * During interation, the provided range can become invalid, due to document
+ * mutations, so CreateBookmark() used to restore it after processing, if
+ * needed.
+ */
+
+var FCKHtmlIterator = function( source )
+{
+	this._sourceHtml = source ;
+}
+FCKHtmlIterator.prototype =
+{
+	Next : function()
+	{
+		var sourceHtml = this._sourceHtml ;
+		if ( sourceHtml == null )
+			return null ;
+
+		var match = FCKRegexLib.HtmlTag.exec( sourceHtml ) ;
+		var isTag = false ;
+		var value = "" ;
+		if ( match )
+		{
+			if ( match.index > 0 )
+			{
+				value = sourceHtml.substr( 0, match.index ) ;
+				this._sourceHtml = sourceHtml.substr( match.index ) ;
+			}
+			else
+			{
+				isTag = true ;
+				value = match[0] ;
+				this._sourceHtml = sourceHtml.substr( match[0].length ) ;
+			}
+		}
+		else
+		{
+			value = sourceHtml ;
+			this._sourceHtml = null ;
+		}
+		return { 'isTag' : isTag, 'value' : value } ;
+	},
+
+	Each : function( func )
+	{
+		var chunk ;
+		while ( ( chunk = this.Next() ) )
+			func( chunk.isTag, chunk.value ) ;
+	}
+} ;


Property changes on: announcement/trunk/src/main/webapp/fckeditor/editor/_source/classes/fckhtmliterator.js
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/webapp/fckeditor/editor/_source/classes/fckicon.js
===================================================================
--- announcement/trunk/src/main/webapp/fckeditor/editor/_source/classes/fckicon.js	                        (rev 0)
+++ announcement/trunk/src/main/webapp/fckeditor/editor/_source/classes/fckicon.js	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,103 @@
+/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2008 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * FCKIcon Class: renders an icon from a single image, a strip or even a
+ * spacer.
+ */
+
+var FCKIcon = function( iconPathOrStripInfoArray )
+{
+	var sTypeOf = iconPathOrStripInfoArray ? typeof( iconPathOrStripInfoArray ) : 'undefined' ;
+	switch ( sTypeOf )
+	{
+		case 'number' :
+			this.Path = FCKConfig.SkinPath + 'fck_strip.gif' ;
+			this.Size = 16 ;
+			this.Position = iconPathOrStripInfoArray ;
+			break ;
+
+		case 'undefined' :
+			this.Path = FCK_SPACER_PATH ;
+			break ;
+
+		case 'string' :
+			this.Path = iconPathOrStripInfoArray ;
+			break ;
+
+		default :
+			// It is an array in the format [ StripFilePath, IconSize, IconPosition ]
+			this.Path		= iconPathOrStripInfoArray[0] ;
+			this.Size		= iconPathOrStripInfoArray[1] ;
+			this.Position	= iconPathOrStripInfoArray[2] ;
+	}
+}
+
+FCKIcon.prototype.CreateIconElement = function( document )
+{
+	var eIcon, eIconImage ;
+
+	if ( this.Position )		// It is using an icons strip image.
+	{
+		var sPos = '-' + ( ( this.Position - 1 ) * this.Size ) + 'px' ;
+
+		if ( FCKBrowserInfo.IsIE )
+		{
+			// <div class="TB_Button_Image"><img src="strip.gif" style="top:-16px"></div>
+
+			eIcon = document.createElement( 'DIV' ) ;
+
+			eIconImage = eIcon.appendChild( document.createElement( 'IMG' ) ) ;
+			eIconImage.src = this.Path ;
+			eIconImage.style.top = sPos ;
+		}
+		else
+		{
+			// <img class="TB_Button_Image" src="spacer.gif" style="background-position: 0px -16px;background-image: url(strip.gif);">
+
+			eIcon = document.createElement( 'IMG' ) ;
+			eIcon.src = FCK_SPACER_PATH ;
+			eIcon.style.backgroundPosition	= '0px ' + sPos ;
+			eIcon.style.backgroundImage		= 'url("' + this.Path + '")' ;
+		}
+	}
+	else					// It is using a single icon image.
+	{
+		if ( FCKBrowserInfo.IsIE )
+		{
+			// IE makes the button 1px higher if using the <img> directly, so we
+			// are changing to the <div> system to clip the image correctly.
+			eIcon = document.createElement( 'DIV' ) ;
+
+			eIconImage = eIcon.appendChild( document.createElement( 'IMG' ) ) ;
+			eIconImage.src = this.Path ? this.Path : FCK_SPACER_PATH ;
+		}
+		else
+		{
+			// This is not working well with IE. See notes above.
+			// <img class="TB_Button_Image" src="smiley.gif">
+			eIcon = document.createElement( 'IMG' ) ;
+			eIcon.src = this.Path ? this.Path : FCK_SPACER_PATH ;
+		}
+	}
+
+	eIcon.className = 'TB_Button_Image' ;
+
+	return eIcon ;
+}


Property changes on: announcement/trunk/src/main/webapp/fckeditor/editor/_source/classes/fckicon.js
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/webapp/fckeditor/editor/_source/classes/fckiecleanup.js
===================================================================
--- announcement/trunk/src/main/webapp/fckeditor/editor/_source/classes/fckiecleanup.js	                        (rev 0)
+++ announcement/trunk/src/main/webapp/fckeditor/editor/_source/classes/fckiecleanup.js	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,68 @@
+/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2008 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * FCKIECleanup Class: a generic class used as a tool to remove IE leaks.
+ */
+
+var	FCKIECleanup = function( attachWindow )
+{
+	// If the attachWindow already have a cleanup object, just use that one.
+	if ( attachWindow._FCKCleanupObj )
+		this.Items = attachWindow._FCKCleanupObj.Items ;
+	else
+	{
+		this.Items = new Array() ;
+
+		attachWindow._FCKCleanupObj = this ;
+		FCKTools.AddEventListenerEx( attachWindow, 'unload', FCKIECleanup_Cleanup ) ;
+//		attachWindow.attachEvent( 'onunload', FCKIECleanup_Cleanup ) ;
+	}
+}
+
+FCKIECleanup.prototype.AddItem = function( dirtyItem, cleanupFunction )
+{
+	this.Items.push( [ dirtyItem, cleanupFunction ] ) ;
+}
+
+function FCKIECleanup_Cleanup()
+{
+	if ( !this._FCKCleanupObj || ( FCKConfig.MsWebBrowserControlCompat && !window.FCKUnloadFlag ) )
+		return ;
+
+	var aItems = this._FCKCleanupObj.Items ;
+
+	while ( aItems.length > 0 )
+	{
+
+		// It is important to remove from the end to the beginning (pop()),
+		// because of the order things get created in the editor. In the code,
+		// elements in deeper position in the DOM are placed at the end of the
+		// cleanup function, so we must cleanup then first, otherwise IE could
+		// throw some crazy memory errors (IE bug).
+		var oItem = aItems.pop() ;
+		if ( oItem )
+			oItem[1].call( oItem[0] ) ;
+	}
+
+	this._FCKCleanupObj = null ;
+
+	if ( CollectGarbage )
+		CollectGarbage() ;
+}


Property changes on: announcement/trunk/src/main/webapp/fckeditor/editor/_source/classes/fckiecleanup.js
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/webapp/fckeditor/editor/_source/classes/fckimagepreloader.js
===================================================================
--- announcement/trunk/src/main/webapp/fckeditor/editor/_source/classes/fckimagepreloader.js	                        (rev 0)
+++ announcement/trunk/src/main/webapp/fckeditor/editor/_source/classes/fckimagepreloader.js	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,64 @@
+/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2008 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * Preload a list of images, firing an event when complete.
+ */
+
+var FCKImagePreloader = function()
+{
+	this._Images = new Array() ;
+}
+
+FCKImagePreloader.prototype =
+{
+	AddImages : function( images )
+	{
+		if ( typeof( images ) == 'string' )
+			images = images.split( ';' ) ;
+
+		this._Images = this._Images.concat( images ) ;
+	},
+
+	Start : function()
+	{
+		var aImages = this._Images ;
+		this._PreloadCount = aImages.length ;
+
+		for ( var i = 0 ; i < aImages.length ; i++ )
+		{
+			var eImg = document.createElement( 'img' ) ;
+			FCKTools.AddEventListenerEx( eImg, 'load', _FCKImagePreloader_OnImage, this ) ;
+			FCKTools.AddEventListenerEx( eImg, 'error', _FCKImagePreloader_OnImage, this ) ;
+			eImg.src = aImages[i] ;
+
+			_FCKImagePreloader_ImageCache.push( eImg ) ;
+		}
+	}
+};
+
+// All preloaded images must be placed in a global array, otherwise the preload
+// magic will not happen.
+var _FCKImagePreloader_ImageCache = new Array() ;
+
+function _FCKImagePreloader_OnImage( ev, imagePreloader )
+{
+	if ( (--imagePreloader._PreloadCount) == 0 && imagePreloader.OnComplete )
+		imagePreloader.OnComplete() ;
+}


Property changes on: announcement/trunk/src/main/webapp/fckeditor/editor/_source/classes/fckimagepreloader.js
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/webapp/fckeditor/editor/_source/classes/fckkeystrokehandler.js
===================================================================
--- announcement/trunk/src/main/webapp/fckeditor/editor/_source/classes/fckkeystrokehandler.js	                        (rev 0)
+++ announcement/trunk/src/main/webapp/fckeditor/editor/_source/classes/fckkeystrokehandler.js	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,141 @@
+/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2008 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * Control keyboard keystroke combinations.
+ */
+
+var FCKKeystrokeHandler = function( cancelCtrlDefaults )
+{
+	this.Keystrokes = new Object() ;
+	this.CancelCtrlDefaults = ( cancelCtrlDefaults !== false ) ;
+}
+
+/*
+ * Listen to keystroke events in an element or DOM document object.
+ *		@target: The element or document to listen to keystroke events.
+ */
+FCKKeystrokeHandler.prototype.AttachToElement = function( target )
+{
+	// For newer browsers, it is enough to listen to the keydown event only.
+	// Some browsers instead, don't cancel key events in the keydown, but in the
+	// keypress. So we must do a longer trip in those cases.
+	FCKTools.AddEventListenerEx( target, 'keydown', _FCKKeystrokeHandler_OnKeyDown, this ) ;
+	if ( FCKBrowserInfo.IsGecko10 || FCKBrowserInfo.IsOpera || ( FCKBrowserInfo.IsGecko && FCKBrowserInfo.IsMac ) )
+		FCKTools.AddEventListenerEx( target, 'keypress', _FCKKeystrokeHandler_OnKeyPress, this ) ;
+}
+
+/*
+ * Sets a list of keystrokes. It can receive either a single array or "n"
+ * arguments, each one being an array of 1 or 2 elemenst. The first element
+ * is the keystroke combination, and the second is the value to assign to it.
+ * If the second element is missing, the keystroke definition is removed.
+ */
+FCKKeystrokeHandler.prototype.SetKeystrokes = function()
+{
+	// Look through the arguments.
+	for ( var i = 0 ; i < arguments.length ; i++ )
+	{
+		var keyDef = arguments[i] ;
+
+		// If the configuration for the keystrokes is missing some element or has any extra comma
+		// this item won't be valid, so skip it and keep on processing.
+		if ( !keyDef )
+			continue ;
+
+		if ( typeof( keyDef[0] ) == 'object' )		// It is an array with arrays defining the keystrokes.
+			this.SetKeystrokes.apply( this, keyDef ) ;
+		else
+		{
+			if ( keyDef.length == 1 )		// If it has only one element, remove the keystroke.
+				delete this.Keystrokes[ keyDef[0] ] ;
+			else							// Otherwise add it.
+				this.Keystrokes[ keyDef[0] ] = keyDef[1] === true ? true : keyDef ;
+		}
+	}
+}
+
+function _FCKKeystrokeHandler_OnKeyDown( ev, keystrokeHandler )
+{
+	// Get the key code.
+	var keystroke = ev.keyCode || ev.which ;
+
+	// Combine it with the CTRL, SHIFT and ALT states.
+	var keyModifiers = 0 ;
+
+	if ( ev.ctrlKey || ev.metaKey )
+		keyModifiers += CTRL ;
+
+	if ( ev.shiftKey )
+		keyModifiers += SHIFT ;
+
+	if ( ev.altKey )
+		keyModifiers += ALT ;
+
+	var keyCombination = keystroke + keyModifiers ;
+
+	var cancelIt = keystrokeHandler._CancelIt = false ;
+
+	// Look for its definition availability.
+	var keystrokeValue = keystrokeHandler.Keystrokes[ keyCombination ] ;
+
+//	FCKDebug.Output( 'KeyDown: ' + keyCombination + ' - Value: ' + keystrokeValue ) ;
+
+	// If the keystroke is defined
+	if ( keystrokeValue )
+	{
+		// If the keystroke has been explicitly set to "true" OR calling the
+		// "OnKeystroke" event, it doesn't return "true", the default behavior
+		// must be preserved.
+		if ( keystrokeValue === true || !( keystrokeHandler.OnKeystroke && keystrokeHandler.OnKeystroke.apply( keystrokeHandler, keystrokeValue ) ) )
+			return true ;
+
+		cancelIt = true ;
+	}
+
+	// By default, it will cancel all combinations with the CTRL key only (except positioning keys).
+	if ( cancelIt || ( keystrokeHandler.CancelCtrlDefaults && keyModifiers == CTRL && ( keystroke < 33 || keystroke > 40 ) ) )
+	{
+		keystrokeHandler._CancelIt = true ;
+
+		if ( ev.preventDefault )
+			return ev.preventDefault() ;
+
+		ev.returnValue = false ;
+		ev.cancelBubble = true ;
+		return false ;
+	}
+
+	return true ;
+}
+
+function _FCKKeystrokeHandler_OnKeyPress( ev, keystrokeHandler )
+{
+	if ( keystrokeHandler._CancelIt )
+	{
+//		FCKDebug.Output( 'KeyPress Cancel', 'Red') ;
+
+		if ( ev.preventDefault )
+			return ev.preventDefault() ;
+
+		return false ;
+	}
+
+	return true ;
+}


Property changes on: announcement/trunk/src/main/webapp/fckeditor/editor/_source/classes/fckkeystrokehandler.js
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/webapp/fckeditor/editor/_source/classes/fckmenublock.js
===================================================================
--- announcement/trunk/src/main/webapp/fckeditor/editor/_source/classes/fckmenublock.js	                        (rev 0)
+++ announcement/trunk/src/main/webapp/fckeditor/editor/_source/classes/fckmenublock.js	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,153 @@
+/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2008 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * Renders a list of menu items.
+ */
+
+var FCKMenuBlock = function()
+{
+	this._Items	= new Array() ;
+}
+
+
+FCKMenuBlock.prototype.Count = function()
+{
+	return this._Items.length ;
+}
+
+FCKMenuBlock.prototype.AddItem = function( name, label, iconPathOrStripInfoArrayOrIndex, isDisabled, customData )
+{
+	var oItem = new FCKMenuItem( this, name, label, iconPathOrStripInfoArrayOrIndex, isDisabled, customData ) ;
+
+	oItem.OnClick		= FCKTools.CreateEventListener( FCKMenuBlock_Item_OnClick, this ) ;
+	oItem.OnActivate	= FCKTools.CreateEventListener( FCKMenuBlock_Item_OnActivate, this ) ;
+
+	this._Items.push( oItem ) ;
+
+	return oItem ;
+}
+
+FCKMenuBlock.prototype.AddSeparator = function()
+{
+	this._Items.push( new FCKMenuSeparator() ) ;
+}
+
+FCKMenuBlock.prototype.RemoveAllItems = function()
+{
+	this._Items = new Array() ;
+
+	var eItemsTable = this._ItemsTable ;
+	if ( eItemsTable )
+	{
+		while ( eItemsTable.rows.length > 0 )
+			eItemsTable.deleteRow( 0 ) ;
+	}
+}
+
+FCKMenuBlock.prototype.Create = function( parentElement )
+{
+	if ( !this._ItemsTable )
+	{
+		if ( FCK.IECleanup )
+			FCK.IECleanup.AddItem( this, FCKMenuBlock_Cleanup ) ;
+
+		this._Window = FCKTools.GetElementWindow( parentElement ) ;
+
+		var oDoc = FCKTools.GetElementDocument( parentElement ) ;
+
+		var eTable = parentElement.appendChild( oDoc.createElement( 'table' ) ) ;
+		eTable.cellPadding = 0 ;
+		eTable.cellSpacing = 0 ;
+
+		FCKTools.DisableSelection( eTable ) ;
+
+		var oMainElement = eTable.insertRow(-1).insertCell(-1) ;
+		oMainElement.className = 'MN_Menu' ;
+
+		var eItemsTable = this._ItemsTable = oMainElement.appendChild( oDoc.createElement( 'table' ) ) ;
+		eItemsTable.cellPadding = 0 ;
+		eItemsTable.cellSpacing = 0 ;
+	}
+
+	for ( var i = 0 ; i < this._Items.length ; i++ )
+		this._Items[i].Create( this._ItemsTable ) ;
+}
+
+/* Events */
+
+function FCKMenuBlock_Item_OnClick( clickedItem, menuBlock )
+{
+	if ( menuBlock.Hide )
+		menuBlock.Hide() ;
+
+	FCKTools.RunFunction( menuBlock.OnClick, menuBlock, [ clickedItem ] ) ;
+}
+
+function FCKMenuBlock_Item_OnActivate( menuBlock )
+{
+	var oActiveItem = menuBlock._ActiveItem ;
+
+	if ( oActiveItem && oActiveItem != this )
+	{
+		// Set the focus to this menu block window (to fire OnBlur on opened panels).
+		if ( !FCKBrowserInfo.IsIE && oActiveItem.HasSubMenu && !this.HasSubMenu )
+		{
+			menuBlock._Window.focus() ;
+
+			// Due to the event model provided by Opera, we need to set
+			// HasFocus here as the above focus() call will not fire the focus
+			// event in the panel immediately (#1200).
+			menuBlock.Panel.HasFocus = true ;
+		}
+
+		oActiveItem.Deactivate() ;
+	}
+
+	menuBlock._ActiveItem = this ;
+}
+
+function FCKMenuBlock_Cleanup()
+{
+	this._Window = null ;
+	this._ItemsTable = null ;
+}
+
+// ################# //
+
+var FCKMenuSeparator = function()
+{}
+
+FCKMenuSeparator.prototype.Create = function( parentTable )
+{
+	var oDoc = FCKTools.GetElementDocument( parentTable ) ;
+
+	var r = parentTable.insertRow(-1) ;
+
+	var eCell = r.insertCell(-1) ;
+	eCell.className = 'MN_Separator MN_Icon' ;
+
+	eCell = r.insertCell(-1) ;
+	eCell.className = 'MN_Separator' ;
+	eCell.appendChild( oDoc.createElement( 'DIV' ) ).className = 'MN_Separator_Line' ;
+
+	eCell = r.insertCell(-1) ;
+	eCell.className = 'MN_Separator' ;
+	eCell.appendChild( oDoc.createElement( 'DIV' ) ).className = 'MN_Separator_Line' ;
+}


Property changes on: announcement/trunk/src/main/webapp/fckeditor/editor/_source/classes/fckmenublock.js
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/webapp/fckeditor/editor/_source/classes/fckmenublockpanel.js
===================================================================
--- announcement/trunk/src/main/webapp/fckeditor/editor/_source/classes/fckmenublockpanel.js	                        (rev 0)
+++ announcement/trunk/src/main/webapp/fckeditor/editor/_source/classes/fckmenublockpanel.js	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,54 @@
+/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2008 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * This class is a menu block that behaves like a panel. It's a mix of the
+ * FCKMenuBlock and FCKPanel classes.
+ */
+
+var FCKMenuBlockPanel = function()
+{
+	// Call the "base" constructor.
+	FCKMenuBlock.call( this ) ;
+}
+
+FCKMenuBlockPanel.prototype = new FCKMenuBlock() ;
+
+
+// Override the create method.
+FCKMenuBlockPanel.prototype.Create = function()
+{
+	var oPanel = this.Panel = ( this.Parent && this.Parent.Panel ? this.Parent.Panel.CreateChildPanel() : new FCKPanel() ) ;
+	oPanel.AppendStyleSheet( FCKConfig.SkinEditorCSS ) ;
+
+	// Call the "base" implementation.
+	FCKMenuBlock.prototype.Create.call( this, oPanel.MainNode ) ;
+}
+
+FCKMenuBlockPanel.prototype.Show = function( x, y, relElement )
+{
+	if ( !this.Panel.CheckIsOpened() )
+		this.Panel.Show( x, y, relElement ) ;
+}
+
+FCKMenuBlockPanel.prototype.Hide = function()
+{
+	if ( this.Panel.CheckIsOpened() )
+		this.Panel.Hide() ;
+}


Property changes on: announcement/trunk/src/main/webapp/fckeditor/editor/_source/classes/fckmenublockpanel.js
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/webapp/fckeditor/editor/_source/classes/fckmenuitem.js
===================================================================
--- announcement/trunk/src/main/webapp/fckeditor/editor/_source/classes/fckmenuitem.js	                        (rev 0)
+++ announcement/trunk/src/main/webapp/fckeditor/editor/_source/classes/fckmenuitem.js	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,161 @@
+/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2008 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * Defines and renders a menu items in a menu block.
+ */
+
+var FCKMenuItem = function( parentMenuBlock, name, label, iconPathOrStripInfoArray, isDisabled, customData )
+{
+	this.Name		= name ;
+	this.Label		= label || name ;
+	this.IsDisabled	= isDisabled ;
+
+	this.Icon = new FCKIcon( iconPathOrStripInfoArray ) ;
+
+	this.SubMenu			= new FCKMenuBlockPanel() ;
+	this.SubMenu.Parent		= parentMenuBlock ;
+	this.SubMenu.OnClick	= FCKTools.CreateEventListener( FCKMenuItem_SubMenu_OnClick, this ) ;
+	this.CustomData = customData ;
+
+	if ( FCK.IECleanup )
+		FCK.IECleanup.AddItem( this, FCKMenuItem_Cleanup ) ;
+}
+
+
+FCKMenuItem.prototype.AddItem = function( name, label, iconPathOrStripInfoArrayOrIndex, isDisabled, customData )
+{
+	this.HasSubMenu = true ;
+	return this.SubMenu.AddItem( name, label, iconPathOrStripInfoArrayOrIndex, isDisabled, customData ) ;
+}
+
+FCKMenuItem.prototype.AddSeparator = function()
+{
+	this.SubMenu.AddSeparator() ;
+}
+
+FCKMenuItem.prototype.Create = function( parentTable )
+{
+	var bHasSubMenu = this.HasSubMenu ;
+
+	var oDoc = FCKTools.GetElementDocument( parentTable ) ;
+
+	// Add a row in the table to hold the menu item.
+	var r = this.MainElement = parentTable.insertRow(-1) ;
+	r.className = this.IsDisabled ? 'MN_Item_Disabled' : 'MN_Item' ;
+
+	// Set the row behavior.
+	if ( !this.IsDisabled )
+	{
+		FCKTools.AddEventListenerEx( r, 'mouseover', FCKMenuItem_OnMouseOver, [ this ] ) ;
+		FCKTools.AddEventListenerEx( r, 'click', FCKMenuItem_OnClick, [ this ] ) ;
+
+		if ( !bHasSubMenu )
+			FCKTools.AddEventListenerEx( r, 'mouseout', FCKMenuItem_OnMouseOut, [ this ] ) ;
+	}
+
+	// Create the icon cell.
+	var eCell = r.insertCell(-1) ;
+	eCell.className = 'MN_Icon' ;
+	eCell.appendChild( this.Icon.CreateIconElement( oDoc ) ) ;
+
+	// Create the label cell.
+	eCell = r.insertCell(-1) ;
+	eCell.className = 'MN_Label' ;
+	eCell.noWrap = true ;
+	eCell.appendChild( oDoc.createTextNode( this.Label ) ) ;
+
+	// Create the arrow cell and setup the sub menu panel (if needed).
+	eCell = r.insertCell(-1) ;
+	if ( bHasSubMenu )
+	{
+		eCell.className = 'MN_Arrow' ;
+
+		// The arrow is a fixed size image.
+		var eArrowImg = eCell.appendChild( oDoc.createElement( 'IMG' ) ) ;
+		eArrowImg.src = FCK_IMAGES_PATH + 'arrow_' + FCKLang.Dir + '.gif' ;
+		eArrowImg.width	 = 4 ;
+		eArrowImg.height = 7 ;
+
+		this.SubMenu.Create() ;
+		this.SubMenu.Panel.OnHide = FCKTools.CreateEventListener( FCKMenuItem_SubMenu_OnHide, this ) ;
+	}
+}
+
+FCKMenuItem.prototype.Activate = function()
+{
+	this.MainElement.className = 'MN_Item_Over' ;
+
+	if ( this.HasSubMenu )
+	{
+		// Show the child menu block. The ( +2, -2 ) correction is done because
+		// of the padding in the skin. It is not a good solution because one
+		// could change the skin and so the final result would not be accurate.
+		// For now it is ok because we are controlling the skin.
+		this.SubMenu.Show( this.MainElement.offsetWidth + 2, -2, this.MainElement ) ;
+	}
+
+	FCKTools.RunFunction( this.OnActivate, this ) ;
+}
+
+FCKMenuItem.prototype.Deactivate = function()
+{
+	this.MainElement.className = 'MN_Item' ;
+
+	if ( this.HasSubMenu )
+		this.SubMenu.Hide() ;
+}
+
+/* Events */
+
+function FCKMenuItem_SubMenu_OnClick( clickedItem, listeningItem )
+{
+	FCKTools.RunFunction( listeningItem.OnClick, listeningItem, [ clickedItem ] ) ;
+}
+
+function FCKMenuItem_SubMenu_OnHide( menuItem )
+{
+	menuItem.Deactivate() ;
+}
+
+function FCKMenuItem_OnClick( ev, menuItem )
+{
+	if ( menuItem.HasSubMenu )
+		menuItem.Activate() ;
+	else
+	{
+		menuItem.Deactivate() ;
+		FCKTools.RunFunction( menuItem.OnClick, menuItem, [ menuItem ] ) ;
+	}
+}
+
+function FCKMenuItem_OnMouseOver( ev, menuItem )
+{
+	menuItem.Activate() ;
+}
+
+function FCKMenuItem_OnMouseOut( ev, menuItem )
+{
+	menuItem.Deactivate() ;
+}
+
+function FCKMenuItem_Cleanup()
+{
+	this.MainElement = null ;
+}


Property changes on: announcement/trunk/src/main/webapp/fckeditor/editor/_source/classes/fckmenuitem.js
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/webapp/fckeditor/editor/_source/classes/fckpanel.js
===================================================================
--- announcement/trunk/src/main/webapp/fckeditor/editor/_source/classes/fckpanel.js	                        (rev 0)
+++ announcement/trunk/src/main/webapp/fckeditor/editor/_source/classes/fckpanel.js	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,386 @@
+/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2008 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * Component that creates floating panels. It is used by many
+ * other components, like the toolbar items, context menu, etc...
+ */
+
+var FCKPanel = function( parentWindow )
+{
+	this.IsRTL			= ( FCKLang.Dir == 'rtl' ) ;
+	this.IsContextMenu	= false ;
+	this._LockCounter	= 0 ;
+
+	this._Window = parentWindow || window ;
+
+	var oDocument ;
+
+	if ( FCKBrowserInfo.IsIE )
+	{
+		// Create the Popup that will hold the panel.
+		// The popup has to be created before playing with domain hacks, see #1666.
+		this._Popup	= this._Window.createPopup() ;
+
+		// this._Window cannot be accessed while playing with domain hacks, but local variable is ok.
+		// See #1666.
+		var pDoc = this._Window.document ;
+
+		// This is a trick to IE6 (not IE7). The original domain must be set
+		// before creating the popup, so we are able to take a refence to the
+		// document inside of it, and the set the proper domain for it. (#123)
+		if ( FCK_IS_CUSTOM_DOMAIN && !FCKBrowserInfo.IsIE7 )
+		{
+			pDoc.domain = FCK_ORIGINAL_DOMAIN ;
+			document.domain = FCK_ORIGINAL_DOMAIN ;
+		}
+
+		oDocument = this.Document = this._Popup.document ;
+
+		// Set the proper domain inside the popup.
+		if ( FCK_IS_CUSTOM_DOMAIN )
+		{
+			oDocument.domain = FCK_RUNTIME_DOMAIN ;
+			pDoc.domain = FCK_RUNTIME_DOMAIN ;
+			document.domain = FCK_RUNTIME_DOMAIN ;
+		}
+
+		FCK.IECleanup.AddItem( this, FCKPanel_Cleanup ) ;
+	}
+	else
+	{
+		var oIFrame = this._IFrame = this._Window.document.createElement('iframe') ;
+		FCKTools.ResetStyles( oIFrame );
+		oIFrame.src					= 'javascript:void(0)' ;
+		oIFrame.allowTransparency	= true ;
+		oIFrame.frameBorder			= '0' ;
+		oIFrame.scrolling			= 'no' ;
+		oIFrame.style.width = oIFrame.style.height = '0px' ;
+		FCKDomTools.SetElementStyles( oIFrame,
+			{
+				position	: 'absolute',
+				zIndex		: FCKConfig.FloatingPanelsZIndex
+			} ) ;
+
+		this._Window.document.body.appendChild( oIFrame ) ;
+
+		var oIFrameWindow = oIFrame.contentWindow ;
+
+		oDocument = this.Document = oIFrameWindow.document ;
+
+		// Workaround for Safari 12256. Ticket #63
+		var sBase = '' ;
+		if ( FCKBrowserInfo.IsSafari )
+			sBase = '<base href="' + window.document.location + '">' ;
+
+		// Initialize the IFRAME document body.
+		oDocument.open() ;
+		oDocument.write( '<html><head>' + sBase + '<\/head><body style="margin:0px;padding:0px;"><\/body><\/html>' ) ;
+		oDocument.close() ;
+
+		if( FCKBrowserInfo.IsAIR )
+			FCKAdobeAIR.Panel_Contructor( oDocument, window.document.location ) ;
+
+		FCKTools.AddEventListenerEx( oIFrameWindow, 'focus', FCKPanel_Window_OnFocus, this ) ;
+		FCKTools.AddEventListenerEx( oIFrameWindow, 'blur', FCKPanel_Window_OnBlur, this ) ;
+	}
+
+	oDocument.dir = FCKLang.Dir ;
+
+	FCKTools.AddEventListener( oDocument, 'contextmenu', FCKTools.CancelEvent ) ;
+
+
+	// Create the main DIV that is used as the panel base.
+	this.MainNode = oDocument.body.appendChild( oDocument.createElement('DIV') ) ;
+
+	// The "float" property must be set so Firefox calculates the size correctly.
+	this.MainNode.style.cssFloat = this.IsRTL ? 'right' : 'left' ;
+}
+
+
+FCKPanel.prototype.AppendStyleSheet = function( styleSheet )
+{
+	FCKTools.AppendStyleSheet( this.Document, styleSheet ) ;
+}
+
+FCKPanel.prototype.Preload = function( x, y, relElement )
+{
+	// The offsetWidth and offsetHeight properties are not available if the
+	// element is not visible. So we must "show" the popup with no size to
+	// be able to use that values in the second call (IE only).
+	if ( this._Popup )
+		this._Popup.show( x, y, 0, 0, relElement ) ;
+}
+
+FCKPanel.prototype.Show = function( x, y, relElement, width, height )
+{
+	var iMainWidth ;
+	var eMainNode = this.MainNode ;
+
+	if ( this._Popup )
+	{
+		// The offsetWidth and offsetHeight properties are not available if the
+		// element is not visible. So we must "show" the popup with no size to
+		// be able to use that values in the second call.
+		this._Popup.show( x, y, 0, 0, relElement ) ;
+
+		// The following lines must be place after the above "show", otherwise it
+		// doesn't has the desired effect.
+		FCKDomTools.SetElementStyles( eMainNode,
+			{
+				width	: width ? width + 'px' : '',
+				height	: height ? height + 'px' : ''
+			} ) ;
+
+		iMainWidth = eMainNode.offsetWidth ;
+
+		if ( this.IsRTL )
+		{
+			if ( this.IsContextMenu )
+				x  = x - iMainWidth + 1 ;
+			else if ( relElement )
+				x  = ( x * -1 ) + relElement.offsetWidth - iMainWidth ;
+		}
+
+		// Second call: Show the Popup at the specified location, with the correct size.
+		this._Popup.show( x, y, iMainWidth, eMainNode.offsetHeight, relElement ) ;
+
+		if ( this.OnHide )
+		{
+			if ( this._Timer )
+				CheckPopupOnHide.call( this, true ) ;
+
+			this._Timer = FCKTools.SetInterval( CheckPopupOnHide, 100, this ) ;
+		}
+	}
+	else
+	{
+		// Do not fire OnBlur while the panel is opened.
+		if ( typeof( FCK.ToolbarSet.CurrentInstance.FocusManager ) != 'undefined' )
+			FCK.ToolbarSet.CurrentInstance.FocusManager.Lock() ;
+
+		if ( this.ParentPanel )
+		{
+			this.ParentPanel.Lock() ;
+
+			// Due to a bug on FF3, we must ensure that the parent panel will
+			// blur (#1584).
+			FCKPanel_Window_OnBlur( null, this.ParentPanel ) ;
+		}
+
+		// Toggle the iframe scrolling attribute to prevent the panel
+		// scrollbars from disappearing in FF Mac. (#191)
+		if ( FCKBrowserInfo.IsGecko && FCKBrowserInfo.IsMac )
+		{
+			this._IFrame.scrolling = '' ;
+			FCKTools.RunFunction( function(){ this._IFrame.scrolling = 'no'; }, this ) ;
+		}
+
+		// Be sure we'll not have more than one Panel opened at the same time.
+		// Do not unlock focus manager here because we're displaying another floating panel
+		// instead of returning the editor to a "no panel" state (Bug #1514).
+		if ( FCK.ToolbarSet.CurrentInstance.GetInstanceObject( 'FCKPanel' )._OpenedPanel &&
+				FCK.ToolbarSet.CurrentInstance.GetInstanceObject( 'FCKPanel' )._OpenedPanel != this )
+			FCK.ToolbarSet.CurrentInstance.GetInstanceObject( 'FCKPanel' )._OpenedPanel.Hide( false, true ) ;
+
+		FCKDomTools.SetElementStyles( eMainNode,
+			{
+				width	: width ? width + 'px' : '',
+				height	: height ? height + 'px' : ''
+			} ) ;
+
+		iMainWidth = eMainNode.offsetWidth ;
+
+		if ( !width )	this._IFrame.width	= 1 ;
+		if ( !height )	this._IFrame.height	= 1 ;
+
+		// This is weird... but with Firefox, we must get the offsetWidth before
+		// setting the _IFrame size (which returns "0"), and then after that,
+		// to return the correct width. Remove the first step and it will not
+		// work when the editor is in RTL.
+		//
+		// The "|| eMainNode.firstChild.offsetWidth" part has been added
+		// for Opera compatibility (see #570).
+		iMainWidth = eMainNode.offsetWidth || eMainNode.firstChild.offsetWidth ;
+
+		// Base the popup coordinates upon the coordinates of relElement.
+		var oPos = FCKTools.GetDocumentPosition( this._Window,
+			relElement.nodeType == 9 ?
+				( FCKTools.IsStrictMode( relElement ) ? relElement.documentElement : relElement.body ) :
+				relElement ) ;
+
+		// Minus the offsets provided by any positioned parent element of the panel iframe.
+		var positionedAncestor = FCKDomTools.GetPositionedAncestor( this._IFrame.parentNode ) ;
+		if ( positionedAncestor )
+		{
+			var nPos = FCKTools.GetDocumentPosition( FCKTools.GetElementWindow( positionedAncestor ), positionedAncestor ) ;
+			oPos.x -= nPos.x ;
+			oPos.y -= nPos.y ;
+		}
+
+		if ( this.IsRTL && !this.IsContextMenu )
+			x = ( x * -1 ) ;
+
+		x += oPos.x ;
+		y += oPos.y ;
+
+		if ( this.IsRTL )
+		{
+			if ( this.IsContextMenu )
+				x  = x - iMainWidth + 1 ;
+			else if ( relElement )
+				x  = x + relElement.offsetWidth - iMainWidth ;
+		}
+		else
+		{
+			var oViewPaneSize = FCKTools.GetViewPaneSize( this._Window ) ;
+			var oScrollPosition = FCKTools.GetScrollPosition( this._Window ) ;
+
+			var iViewPaneHeight	= oViewPaneSize.Height + oScrollPosition.Y ;
+			var iViewPaneWidth	= oViewPaneSize.Width + oScrollPosition.X ;
+
+			if ( ( x + iMainWidth ) > iViewPaneWidth )
+				x -= x + iMainWidth - iViewPaneWidth ;
+
+			if ( ( y + eMainNode.offsetHeight ) > iViewPaneHeight )
+				y -= y + eMainNode.offsetHeight - iViewPaneHeight ;
+		}
+
+		// Set the context menu DIV in the specified location.
+		FCKDomTools.SetElementStyles( this._IFrame,
+			{
+				left	: x + 'px',
+				top		: y + 'px'
+			} ) ;
+
+		// Move the focus to the IFRAME so we catch the "onblur".
+		this._IFrame.contentWindow.focus() ;
+		this._IsOpened = true ;
+
+		var me = this ;
+		this._resizeTimer = setTimeout( function()
+			{
+				var iWidth = eMainNode.offsetWidth || eMainNode.firstChild.offsetWidth ;
+				var iHeight = eMainNode.offsetHeight ;
+				me._IFrame.style.width = iWidth + 'px' ;
+				me._IFrame.style.height = iHeight + 'px' ;
+
+			}, 0 ) ;
+
+		FCK.ToolbarSet.CurrentInstance.GetInstanceObject( 'FCKPanel' )._OpenedPanel = this ;
+	}
+
+	FCKTools.RunFunction( this.OnShow, this ) ;
+}
+
+FCKPanel.prototype.Hide = function( ignoreOnHide, ignoreFocusManagerUnlock )
+{
+	if ( this._Popup )
+		this._Popup.hide() ;
+	else
+	{
+		if ( !this._IsOpened || this._LockCounter > 0 )
+			return ;
+
+		// Enable the editor to fire the "OnBlur".
+		if ( typeof( FCKFocusManager ) != 'undefined' && !ignoreFocusManagerUnlock )
+			FCKFocusManager.Unlock() ;
+
+		// It is better to set the sizes to 0, otherwise Firefox would have
+		// rendering problems.
+		this._IFrame.style.width = this._IFrame.style.height = '0px' ;
+
+		this._IsOpened = false ;
+
+		if ( this._resizeTimer )
+		{
+			clearTimeout( this._resizeTimer ) ;
+			this._resizeTimer = null ;
+		}
+
+		if ( this.ParentPanel )
+			this.ParentPanel.Unlock() ;
+
+		if ( !ignoreOnHide )
+			FCKTools.RunFunction( this.OnHide, this ) ;
+	}
+}
+
+FCKPanel.prototype.CheckIsOpened = function()
+{
+	if ( this._Popup )
+		return this._Popup.isOpen ;
+	else
+		return this._IsOpened ;
+}
+
+FCKPanel.prototype.CreateChildPanel = function()
+{
+	var oWindow = this._Popup ? FCKTools.GetDocumentWindow( this.Document ) : this._Window ;
+
+	var oChildPanel = new FCKPanel( oWindow ) ;
+	oChildPanel.ParentPanel = this ;
+
+	return oChildPanel ;
+}
+
+FCKPanel.prototype.Lock = function()
+{
+	this._LockCounter++ ;
+}
+
+FCKPanel.prototype.Unlock = function()
+{
+	if ( --this._LockCounter == 0 && !this.HasFocus )
+		this.Hide() ;
+}
+
+/* Events */
+
+function FCKPanel_Window_OnFocus( e, panel )
+{
+	panel.HasFocus = true ;
+}
+
+function FCKPanel_Window_OnBlur( e, panel )
+{
+	panel.HasFocus = false ;
+
+	if ( panel._LockCounter == 0 )
+		FCKTools.RunFunction( panel.Hide, panel ) ;
+}
+
+function CheckPopupOnHide( forceHide )
+{
+	if ( forceHide || !this._Popup.isOpen )
+	{
+		window.clearInterval( this._Timer ) ;
+		this._Timer = null ;
+
+		FCKTools.RunFunction( this.OnHide, this ) ;
+	}
+}
+
+function FCKPanel_Cleanup()
+{
+	this._Popup = null ;
+	this._Window = null ;
+	this.Document = null ;
+	this.MainNode = null ;
+}


Property changes on: announcement/trunk/src/main/webapp/fckeditor/editor/_source/classes/fckpanel.js
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/webapp/fckeditor/editor/_source/classes/fckplugin.js
===================================================================
--- announcement/trunk/src/main/webapp/fckeditor/editor/_source/classes/fckplugin.js	                        (rev 0)
+++ announcement/trunk/src/main/webapp/fckeditor/editor/_source/classes/fckplugin.js	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,56 @@
+/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2008 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * FCKPlugin Class: Represents a single plugin.
+ */
+
+var FCKPlugin = function( name, availableLangs, basePath )
+{
+	this.Name = name ;
+	this.BasePath = basePath ? basePath : FCKConfig.PluginsPath ;
+	this.Path = this.BasePath + name + '/' ;
+
+	if ( !availableLangs || availableLangs.length == 0 )
+		this.AvailableLangs = new Array() ;
+	else
+		this.AvailableLangs = availableLangs.split(',') ;
+}
+
+FCKPlugin.prototype.Load = function()
+{
+	// Load the language file, if defined.
+	if ( this.AvailableLangs.length > 0 )
+	{
+		var sLang ;
+
+		// Check if the plugin has the language file for the active language.
+		if ( this.AvailableLangs.IndexOf( FCKLanguageManager.ActiveLanguage.Code ) >= 0 )
+			sLang = FCKLanguageManager.ActiveLanguage.Code ;
+		else
+			// Load the default language file (first one) if the current one is not available.
+			sLang = this.AvailableLangs[0] ;
+
+		// Add the main plugin script.
+		LoadScript( this.Path + 'lang/' + sLang + '.js' ) ;
+	}
+
+	// Add the main plugin script.
+	LoadScript( this.Path + 'fckplugin.js' ) ;
+}


Property changes on: announcement/trunk/src/main/webapp/fckeditor/editor/_source/classes/fckplugin.js
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/webapp/fckeditor/editor/_source/classes/fckspecialcombo.js
===================================================================
--- announcement/trunk/src/main/webapp/fckeditor/editor/_source/classes/fckspecialcombo.js	                        (rev 0)
+++ announcement/trunk/src/main/webapp/fckeditor/editor/_source/classes/fckspecialcombo.js	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,376 @@
+/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2008 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * FCKSpecialCombo Class: represents a special combo.
+ */
+
+var FCKSpecialCombo = function( caption, fieldWidth, panelWidth, panelMaxHeight, parentWindow )
+{
+	// Default properties values.
+	this.FieldWidth		= fieldWidth || 100 ;
+	this.PanelWidth		= panelWidth || 150 ;
+	this.PanelMaxHeight	= panelMaxHeight || 150 ;
+	this.Label			= '&nbsp;' ;
+	this.Caption		= caption ;
+	this.Tooltip		= caption ;
+	this.Style			= FCK_TOOLBARITEM_ICONTEXT ;
+
+	this.Enabled = true ;
+
+	this.Items = new Object() ;
+
+	this._Panel = new FCKPanel( parentWindow || window ) ;
+	this._Panel.AppendStyleSheet( FCKConfig.SkinEditorCSS ) ;
+	this._PanelBox = this._Panel.MainNode.appendChild( this._Panel.Document.createElement( 'DIV' ) ) ;
+	this._PanelBox.className = 'SC_Panel' ;
+	this._PanelBox.style.width = this.PanelWidth + 'px' ;
+
+	this._PanelBox.innerHTML = '<table cellpadding="0" cellspacing="0" width="100%" style="TABLE-LAYOUT: fixed"><tr><td nowrap></td></tr></table>' ;
+
+	this._ItemsHolderEl = this._PanelBox.getElementsByTagName('TD')[0] ;
+
+	if ( FCK.IECleanup )
+		FCK.IECleanup.AddItem( this, FCKSpecialCombo_Cleanup ) ;
+
+//	this._Panel.StyleSheet = FCKConfig.SkinPath + 'fck_contextmenu.css' ;
+//	this._Panel.Create() ;
+//	this._Panel.PanelDiv.className += ' SC_Panel' ;
+//	this._Panel.PanelDiv.innerHTML = '<table cellpadding="0" cellspacing="0" width="100%" style="TABLE-LAYOUT: fixed"><tr><td nowrap></td></tr></table>' ;
+//	this._ItemsHolderEl = this._Panel.PanelDiv.getElementsByTagName('TD')[0] ;
+}
+
+function FCKSpecialCombo_ItemOnMouseOver()
+{
+	this.className += ' SC_ItemOver' ;
+}
+
+function FCKSpecialCombo_ItemOnMouseOut()
+{
+	this.className = this.originalClass ;
+}
+
+function FCKSpecialCombo_ItemOnClick( ev, specialCombo, itemId )
+{
+	this.className = this.originalClass ;
+
+	specialCombo._Panel.Hide() ;
+
+	specialCombo.SetLabel( this.FCKItemLabel ) ;
+
+	if ( typeof( specialCombo.OnSelect ) == 'function' )
+		specialCombo.OnSelect( itemId, this ) ;
+}
+
+FCKSpecialCombo.prototype.ClearItems = function ()
+{
+	if ( this.Items )
+		this.Items = {} ;
+
+	var itemsholder = this._ItemsHolderEl ;
+	while ( itemsholder.firstChild )
+		itemsholder.removeChild( itemsholder.firstChild ) ;
+}
+
+FCKSpecialCombo.prototype.AddItem = function( id, html, label, bgColor )
+{
+	// <div class="SC_Item" onmouseover="this.className='SC_Item SC_ItemOver';" onmouseout="this.className='SC_Item';"><b>Bold 1</b></div>
+	var oDiv = this._ItemsHolderEl.appendChild( this._Panel.Document.createElement( 'DIV' ) ) ;
+	oDiv.className = oDiv.originalClass = 'SC_Item' ;
+	oDiv.innerHTML = html ;
+	oDiv.FCKItemLabel = label || id ;
+	oDiv.Selected = false ;
+
+	// In IE, the width must be set so the borders are shown correctly when the content overflows.
+	if ( FCKBrowserInfo.IsIE )
+		oDiv.style.width = '100%' ;
+
+	if ( bgColor )
+		oDiv.style.backgroundColor = bgColor ;
+
+	FCKTools.AddEventListenerEx( oDiv, 'mouseover', FCKSpecialCombo_ItemOnMouseOver ) ;
+	FCKTools.AddEventListenerEx( oDiv, 'mouseout', FCKSpecialCombo_ItemOnMouseOut ) ;
+	FCKTools.AddEventListenerEx( oDiv, 'click', FCKSpecialCombo_ItemOnClick, [ this, id ] ) ;
+
+	this.Items[ id.toString().toLowerCase() ] = oDiv ;
+
+	return oDiv ;
+}
+
+FCKSpecialCombo.prototype.SelectItem = function( item )
+{
+	if ( typeof item == 'string' )
+		item = this.Items[ item.toString().toLowerCase() ] ;
+
+	if ( item )
+	{
+		item.className = item.originalClass = 'SC_ItemSelected' ;
+		item.Selected = true ;
+	}
+}
+
+FCKSpecialCombo.prototype.SelectItemByLabel = function( itemLabel, setLabel )
+{
+	for ( var id in this.Items )
+	{
+		var oDiv = this.Items[id] ;
+
+		if ( oDiv.FCKItemLabel == itemLabel )
+		{
+			oDiv.className = oDiv.originalClass = 'SC_ItemSelected' ;
+			oDiv.Selected = true ;
+
+			if ( setLabel )
+				this.SetLabel( itemLabel ) ;
+		}
+	}
+}
+
+FCKSpecialCombo.prototype.DeselectAll = function( clearLabel )
+{
+	for ( var i in this.Items )
+	{
+		if ( !this.Items[i] ) continue;
+		this.Items[i].className = this.Items[i].originalClass = 'SC_Item' ;
+		this.Items[i].Selected = false ;
+	}
+
+	if ( clearLabel )
+		this.SetLabel( '' ) ;
+}
+
+FCKSpecialCombo.prototype.SetLabelById = function( id )
+{
+	id = id ? id.toString().toLowerCase() : '' ;
+
+	var oDiv = this.Items[ id ] ;
+	this.SetLabel( oDiv ? oDiv.FCKItemLabel : '' ) ;
+}
+
+FCKSpecialCombo.prototype.SetLabel = function( text )
+{
+	text = ( !text || text.length == 0 ) ? '&nbsp;' : text ;
+
+	if ( text == this.Label )
+		return ;
+
+	this.Label = text ;
+
+	var labelEl = this._LabelEl ;
+	if ( labelEl )
+	{
+		labelEl.innerHTML = text ;
+
+		// It may happen that the label is some HTML, including tags. This
+		// would be a problem because when the user click on those tags, the
+		// combo will get the selection from the editing area. So we must
+		// disable any kind of selection here.
+		FCKTools.DisableSelection( labelEl ) ;
+	}
+}
+
+FCKSpecialCombo.prototype.SetEnabled = function( isEnabled )
+{
+	this.Enabled = isEnabled ;
+
+	// In IE it can happen when the page is reloaded that _OuterTable is null, so check its existence
+	if ( this._OuterTable )
+		this._OuterTable.className = isEnabled ? '' : 'SC_FieldDisabled' ;
+}
+
+FCKSpecialCombo.prototype.Create = function( targetElement )
+{
+	var oDoc = FCKTools.GetElementDocument( targetElement ) ;
+	var eOuterTable = this._OuterTable = targetElement.appendChild( oDoc.createElement( 'TABLE' ) ) ;
+	eOuterTable.cellPadding = 0 ;
+	eOuterTable.cellSpacing = 0 ;
+
+	eOuterTable.insertRow(-1) ;
+
+	var sClass ;
+	var bShowLabel ;
+
+	switch ( this.Style )
+	{
+		case FCK_TOOLBARITEM_ONLYICON :
+			sClass = 'TB_ButtonType_Icon' ;
+			bShowLabel = false;
+			break ;
+		case FCK_TOOLBARITEM_ONLYTEXT :
+			sClass = 'TB_ButtonType_Text' ;
+			bShowLabel = false;
+			break ;
+		case FCK_TOOLBARITEM_ICONTEXT :
+			bShowLabel = true;
+			break ;
+	}
+
+	if ( this.Caption && this.Caption.length > 0 && bShowLabel )
+	{
+		var oCaptionCell = eOuterTable.rows[0].insertCell(-1) ;
+		oCaptionCell.innerHTML = this.Caption ;
+		oCaptionCell.className = 'SC_FieldCaption' ;
+	}
+
+	// Create the main DIV element.
+	var oField = FCKTools.AppendElement( eOuterTable.rows[0].insertCell(-1), 'div' ) ;
+	if ( bShowLabel )
+	{
+		oField.className = 'SC_Field' ;
+		oField.style.width = this.FieldWidth + 'px' ;
+		oField.innerHTML = '<table width="100%" cellpadding="0" cellspacing="0" style="TABLE-LAYOUT: fixed;"><tbody><tr><td class="SC_FieldLabel"><label>&nbsp;</label></td><td class="SC_FieldButton">&nbsp;</td></tr></tbody></table>' ;
+
+		this._LabelEl = oField.getElementsByTagName('label')[0] ;		// Memory Leak
+		this._LabelEl.innerHTML = this.Label ;
+	}
+	else
+	{
+		oField.className = 'TB_Button_Off' ;
+		//oField.innerHTML = '<span className="SC_FieldCaption">' + this.Caption + '<table cellpadding="0" cellspacing="0" style="TABLE-LAYOUT: fixed;"><tbody><tr><td class="SC_FieldButton" style="border-left: none;">&nbsp;</td></tr></tbody></table>' ;
+		//oField.innerHTML = '<table cellpadding="0" cellspacing="0" style="TABLE-LAYOUT: fixed;"><tbody><tr><td class="SC_FieldButton" style="border-left: none;">&nbsp;</td></tr></tbody></table>' ;
+
+		// Gets the correct CSS class to use for the specified style (param).
+		oField.innerHTML = '<table title="' + this.Tooltip + '" class="' + sClass + '" cellspacing="0" cellpadding="0" border="0">' +
+				'<tr>' +
+					//'<td class="TB_Icon"><img src="' + FCKConfig.SkinPath + 'toolbar/' + this.Command.Name.toLowerCase() + '.gif" width="21" height="21"></td>' +
+					'<td><img class="TB_Button_Padding" src="' + FCK_SPACER_PATH + '" /></td>' +
+					'<td class="TB_Text">' + this.Caption + '</td>' +
+					'<td><img class="TB_Button_Padding" src="' + FCK_SPACER_PATH + '" /></td>' +
+					'<td class="TB_ButtonArrow"><img src="' + FCKConfig.SkinPath + 'images/toolbar.buttonarrow.gif" width="5" height="3"></td>' +
+					'<td><img class="TB_Button_Padding" src="' + FCK_SPACER_PATH + '" /></td>' +
+				'</tr>' +
+			'</table>' ;
+	}
+
+
+	// Events Handlers
+
+	FCKTools.AddEventListenerEx( oField, 'mouseover', FCKSpecialCombo_OnMouseOver, this ) ;
+	FCKTools.AddEventListenerEx( oField, 'mouseout', FCKSpecialCombo_OnMouseOut, this ) ;
+	FCKTools.AddEventListenerEx( oField, 'click', FCKSpecialCombo_OnClick, this ) ;
+
+	FCKTools.DisableSelection( this._Panel.Document.body ) ;
+}
+
+function FCKSpecialCombo_Cleanup()
+{
+	this._LabelEl = null ;
+	this._OuterTable = null ;
+	this._ItemsHolderEl = null ;
+	this._PanelBox = null ;
+
+	if ( this.Items )
+	{
+		for ( var key in this.Items )
+			this.Items[key] = null ;
+	}
+}
+
+function FCKSpecialCombo_OnMouseOver( ev, specialCombo )
+{
+	if ( specialCombo.Enabled )
+	{
+		switch ( specialCombo.Style )
+		{
+			case FCK_TOOLBARITEM_ONLYICON :
+				this.className = 'TB_Button_On_Over';
+				break ;
+			case FCK_TOOLBARITEM_ONLYTEXT :
+				this.className = 'TB_Button_On_Over';
+				break ;
+			case FCK_TOOLBARITEM_ICONTEXT :
+				this.className = 'SC_Field SC_FieldOver' ;
+				break ;
+		}
+	}
+}
+
+function FCKSpecialCombo_OnMouseOut( ev, specialCombo )
+{
+	switch ( specialCombo.Style )
+	{
+		case FCK_TOOLBARITEM_ONLYICON :
+			this.className = 'TB_Button_Off';
+			break ;
+		case FCK_TOOLBARITEM_ONLYTEXT :
+			this.className = 'TB_Button_Off';
+			break ;
+		case FCK_TOOLBARITEM_ICONTEXT :
+			this.className='SC_Field' ;
+			break ;
+	}
+}
+
+function FCKSpecialCombo_OnClick( e, specialCombo )
+{
+	// For Mozilla we must stop the event propagation to avoid it hiding
+	// the panel because of a click outside of it.
+//	if ( e )
+//	{
+//		e.stopPropagation() ;
+//		FCKPanelEventHandlers.OnDocumentClick( e ) ;
+//	}
+
+	if ( specialCombo.Enabled )
+	{
+		var oPanel			= specialCombo._Panel ;
+		var oPanelBox		= specialCombo._PanelBox ;
+		var oItemsHolder	= specialCombo._ItemsHolderEl ;
+		var iMaxHeight		= specialCombo.PanelMaxHeight ;
+
+		if ( specialCombo.OnBeforeClick )
+			specialCombo.OnBeforeClick( specialCombo ) ;
+
+		// This is a tricky thing. We must call the "Load" function, otherwise
+		// it will not be possible to retrieve "oItemsHolder.offsetHeight" (IE only).
+		if ( FCKBrowserInfo.IsIE )
+			oPanel.Preload( 0, this.offsetHeight, this ) ;
+
+		if ( oItemsHolder.offsetHeight > iMaxHeight )
+//		{
+			oPanelBox.style.height = iMaxHeight + 'px' ;
+
+//			if ( FCKBrowserInfo.IsGecko )
+//				oPanelBox.style.overflow = '-moz-scrollbars-vertical' ;
+//		}
+		else
+			oPanelBox.style.height = '' ;
+
+//		oPanel.PanelDiv.style.width = specialCombo.PanelWidth + 'px' ;
+
+		oPanel.Show( 0, this.offsetHeight, this ) ;
+	}
+
+//	return false ;
+}
+
+/*
+Sample Combo Field HTML output:
+
+<div class="SC_Field" style="width: 80px;">
+	<table width="100%" cellpadding="0" cellspacing="0" style="table-layout: fixed;">
+		<tbody>
+			<tr>
+				<td class="SC_FieldLabel"><label>&nbsp;</label></td>
+				<td class="SC_FieldButton">&nbsp;</td>
+			</tr>
+		</tbody>
+	</table>
+</div>
+*/


Property changes on: announcement/trunk/src/main/webapp/fckeditor/editor/_source/classes/fckspecialcombo.js
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/webapp/fckeditor/editor/_source/classes/fckstyle.js
===================================================================
--- announcement/trunk/src/main/webapp/fckeditor/editor/_source/classes/fckstyle.js	                        (rev 0)
+++ announcement/trunk/src/main/webapp/fckeditor/editor/_source/classes/fckstyle.js	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,1449 @@
+/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2008 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * FCKStyle Class: contains a style definition, and all methods to work with
+ * the style in a document.
+ */
+
+/**
+ * @param {Object} styleDesc A "style descriptor" object, containing the raw
+ * style definition in the following format:
+ *		'<style name>' : {
+ *			Element : '<element name>',
+ *			Attributes : {
+ *				'<att name>' : '<att value>',
+ *				...
+ *			},
+ *			Styles : {
+ *				'<style name>' : '<style value>',
+ *				...
+ *			},
+ *			Overrides : '<element name>'|{
+ *				Element : '<element name>',
+ *				Attributes : {
+ *					'<att name>' : '<att value>'|/<att regex>/
+ *				},
+ *				Styles : {
+ *					'<style name>' : '<style value>'|/<style regex>/
+ *				},
+ *			}
+ *		}
+ */
+var FCKStyle = function( styleDesc )
+{
+	this.Element = ( styleDesc.Element || 'span' ).toLowerCase() ;
+	this._StyleDesc = styleDesc ;
+}
+
+FCKStyle.prototype =
+{
+	/**
+	 * Get the style type, based on its element name:
+	 *		- FCK_STYLE_BLOCK  (0): Block Style
+	 *		- FCK_STYLE_INLINE (1): Inline Style
+	 *		- FCK_STYLE_OBJECT (2): Object Style
+	 */
+	GetType : function()
+	{
+		var type = this.GetType_$ ;
+
+		if ( type != undefined )
+			return type ;
+
+		var elementName = this.Element ;
+
+		if ( elementName == '#' || FCKListsLib.StyleBlockElements[ elementName ] )
+			type = FCK_STYLE_BLOCK ;
+		else if ( FCKListsLib.StyleObjectElements[ elementName ] )
+			type = FCK_STYLE_OBJECT ;
+		else
+			type = FCK_STYLE_INLINE ;
+
+		return ( this.GetType_$ = type ) ;
+	},
+
+	/**
+	 * Apply the style to the current selection.
+	 */
+	ApplyToSelection : function( targetWindow )
+	{
+		// Create a range for the current selection.
+		var range = new FCKDomRange( targetWindow ) ;
+		range.MoveToSelection() ;
+
+		this.ApplyToRange( range, true ) ;
+	},
+
+	/**
+	 * Apply the style to a FCKDomRange.
+	 */
+	ApplyToRange : function( range, selectIt, updateRange )
+	{
+		// ApplyToRange is not valid for FCK_STYLE_OBJECT types.
+		// Use ApplyToObject instead.
+
+		switch ( this.GetType() )
+		{
+			case FCK_STYLE_BLOCK :
+				this.ApplyToRange = this._ApplyBlockStyle ;
+				break ;
+			case FCK_STYLE_INLINE :
+				this.ApplyToRange = this._ApplyInlineStyle ;
+				break ;
+			default :
+				return ;
+		}
+
+		this.ApplyToRange( range, selectIt, updateRange ) ;
+	},
+
+	/**
+	 * Apply the style to an object. Valid for FCK_STYLE_BLOCK types only.
+	 */
+	ApplyToObject : function( objectElement )
+	{
+		if ( !objectElement )
+			return ;
+
+		this.BuildElement( null, objectElement ) ;
+	},
+
+	/**
+	 * Remove the style from the current selection.
+	 */
+	RemoveFromSelection : function( targetWindow )
+	{
+		// Create a range for the current selection.
+		var range = new FCKDomRange( targetWindow ) ;
+		range.MoveToSelection() ;
+
+		this.RemoveFromRange( range, true ) ;
+	},
+
+	/**
+	 * Remove the style from a FCKDomRange. Block type styles will have no
+	 * effect.
+	 */
+	RemoveFromRange : function( range, selectIt, updateRange )
+	{
+		var bookmark ;
+
+		// Create the attribute list to be used later for element comparisons.
+		var styleAttribs = this._GetAttribsForComparison() ;
+		var styleOverrides = this._GetOverridesForComparison() ;
+
+		// If collapsed, we are removing all conflicting styles from the range
+		// parent tree.
+		if ( range.CheckIsCollapsed() )
+		{
+			// Bookmark the range so we can re-select it after processing.
+			var bookmark = range.CreateBookmark( true ) ;
+
+			// Let's start from the bookmark <span> parent.
+			var bookmarkStart = range.GetBookmarkNode( bookmark, true ) ;
+
+			var path = new FCKElementPath( bookmarkStart.parentNode ) ;
+
+			// While looping through the path, we'll be saving references to
+			// parent elements if the range is in one of their boundaries. In
+			// this way, we are able to create a copy of those elements when
+			// removing a style if the range is in a boundary limit (see #1270).
+			var boundaryElements = [] ;
+
+			// Check if the range is in the boundary limits of an element
+			// (related to #1270).
+			var isBoundaryRight = !FCKDomTools.GetNextSibling( bookmarkStart ) ;
+			var isBoundary = isBoundaryRight || !FCKDomTools.GetPreviousSibling( bookmarkStart ) ;
+
+			// This is the last element to be removed in the boundary situation
+			// described at #1270.
+			var lastBoundaryElement ;
+			var boundaryLimitIndex = -1 ;
+
+			for ( var i = 0 ; i < path.Elements.length ; i++ )
+			{
+				var pathElement = path.Elements[i] ;
+				if ( this.CheckElementRemovable( pathElement ) )
+				{
+					if ( isBoundary
+						&& !FCKDomTools.CheckIsEmptyElement( pathElement,
+								function( el )
+								{
+									return ( el != bookmarkStart ) ;
+								} )
+						)
+					{
+						lastBoundaryElement = pathElement ;
+
+						// We'll be continuously including elements in the
+						// boundaryElements array, but only those added before
+						// setting lastBoundaryElement must be used later, so
+						// let's mark the current index here.
+						boundaryLimitIndex = boundaryElements.length - 1 ;
+					}
+					else
+					{
+						var pathElementName = pathElement.nodeName.toLowerCase() ;
+
+						if ( pathElementName == this.Element )
+						{
+							// Remove any attribute that conflict with this style, no
+							// matter their values.
+							for ( var att in styleAttribs )
+							{
+								if ( FCKDomTools.HasAttribute( pathElement, att ) )
+								{
+									switch ( att )
+									{
+										case 'style' :
+											this._RemoveStylesFromElement( pathElement ) ;
+											break ;
+
+										case 'class' :
+											// The 'class' element value must match (#1318).
+											if ( FCKDomTools.GetAttributeValue( pathElement, att ) != this.GetFinalAttributeValue( att ) )
+												continue ;
+
+											/*jsl:fallthru*/
+
+										default :
+											FCKDomTools.RemoveAttribute( pathElement, att ) ;
+									}
+								}
+							}
+						}
+
+						// Remove overrides defined to the same element name.
+						this._RemoveOverrides( pathElement, styleOverrides[ pathElementName ] ) ;
+
+						// Remove the element if no more attributes are available and it's an inline style element
+						if ( this.GetType() == FCK_STYLE_INLINE)
+							this._RemoveNoAttribElement( pathElement ) ;
+					}
+				}
+				else if ( isBoundary )
+					boundaryElements.push( pathElement ) ;
+
+				// Check if we are still in a boundary (at the same side).
+				isBoundary = isBoundary && ( ( isBoundaryRight && !FCKDomTools.GetNextSibling( pathElement ) ) || ( !isBoundaryRight && !FCKDomTools.GetPreviousSibling( pathElement ) ) ) ;
+
+				// If we are in an element that is not anymore a boundary, or
+				// we are at the last element, let's move things outside the
+				// boundary (if available).
+				if ( lastBoundaryElement && ( !isBoundary || ( i == path.Elements.length - 1 ) ) )
+				{
+					// Remove the bookmark node from the DOM.
+					var currentElement = FCKDomTools.RemoveNode( bookmarkStart ) ;
+
+					// Build the collapsed group of elements that are not
+					// removed by this style, but share the boundary.
+					// (see comment 1 and 2 at #1270)
+					for ( var j = 0 ; j <= boundaryLimitIndex ; j++ )
+					{
+						var newElement = FCKDomTools.CloneElement( boundaryElements[j] ) ;
+						newElement.appendChild( currentElement ) ;
+						currentElement = newElement ;
+					}
+
+					// Re-insert the bookmark node (and the collapsed elements)
+					// in the DOM, in the new position next to the styled element.
+					if ( isBoundaryRight )
+						FCKDomTools.InsertAfterNode( lastBoundaryElement, currentElement ) ;
+					else
+						lastBoundaryElement.parentNode.insertBefore( currentElement, lastBoundaryElement ) ;
+
+					isBoundary = false ;
+					lastBoundaryElement = null ;
+				}
+			}
+
+				// Re-select the original range.
+			if ( selectIt )
+				range.SelectBookmark( bookmark ) ;
+
+			if ( updateRange )
+				range.MoveToBookmark( bookmark ) ;
+
+			return ;
+		}
+
+		// Expand the range, if inside inline element boundaries.
+		range.Expand( 'inline_elements' ) ;
+
+		// Bookmark the range so we can re-select it after processing.
+		bookmark = range.CreateBookmark( true ) ;
+
+		// The style will be applied within the bookmark boundaries.
+		var startNode	= range.GetBookmarkNode( bookmark, true ) ;
+		var endNode		= range.GetBookmarkNode( bookmark, false ) ;
+
+		range.Release( true ) ;
+
+		// We need to check the selection boundaries (bookmark spans) to break
+		// the code in a way that we can properly remove partially selected nodes.
+		// For example, removing a <b> style from
+		//		<b>This is [some text</b> to show <b>the] problem</b>
+		// ... where [ and ] represent the selection, must result:
+		//		<b>This is </b>[some text to show the]<b> problem</b>
+		// The strategy is simple, we just break the partial nodes before the
+		// removal logic, having something that could be represented this way:
+		//		<b>This is </b>[<b>some text</b> to show <b>the</b>]<b> problem</b>
+
+		// Let's start checking the start boundary.
+		var path = new FCKElementPath( startNode ) ;
+		var pathElements = path.Elements ;
+		var pathElement ;
+
+		for ( var i = 1 ; i < pathElements.length ; i++ )
+		{
+			pathElement = pathElements[i] ;
+
+			if ( pathElement == path.Block || pathElement == path.BlockLimit )
+				break ;
+
+			// If this element can be removed (even partially).
+			if ( this.CheckElementRemovable( pathElement ) )
+				FCKDomTools.BreakParent( startNode, pathElement, range ) ;
+		}
+
+		// Now the end boundary.
+		path = new FCKElementPath( endNode ) ;
+		pathElements = path.Elements ;
+
+		for ( var i = 1 ; i < pathElements.length ; i++ )
+		{
+			pathElement = pathElements[i] ;
+
+			if ( pathElement == path.Block || pathElement == path.BlockLimit )
+				break ;
+
+			elementName = pathElement.nodeName.toLowerCase() ;
+
+			// If this element can be removed (even partially).
+			if ( this.CheckElementRemovable( pathElement ) )
+				FCKDomTools.BreakParent( endNode, pathElement, range ) ;
+		}
+
+		// Navigate through all nodes between the bookmarks.
+		var currentNode = FCKDomTools.GetNextSourceNode( startNode, true ) ;
+
+		while ( currentNode )
+		{
+			// Cache the next node to be processed. Do it now, because
+			// currentNode may be removed.
+			var nextNode = FCKDomTools.GetNextSourceNode( currentNode ) ;
+
+			// Remove elements nodes that match with this style rules.
+			if ( currentNode.nodeType == 1 )
+			{
+				var elementName = currentNode.nodeName.toLowerCase() ;
+
+				var mayRemove = ( elementName == this.Element ) ;
+				if ( mayRemove )
+				{
+					// Remove any attribute that conflict with this style, no matter
+					// their values.
+					for ( var att in styleAttribs )
+					{
+						if ( FCKDomTools.HasAttribute( currentNode, att ) )
+						{
+							switch ( att )
+							{
+								case 'style' :
+									this._RemoveStylesFromElement( currentNode ) ;
+									break ;
+
+								case 'class' :
+									// The 'class' element value must match (#1318).
+									if ( FCKDomTools.GetAttributeValue( currentNode, att ) != this.GetFinalAttributeValue( att ) )
+										continue ;
+
+									/*jsl:fallthru*/
+
+								default :
+									FCKDomTools.RemoveAttribute( currentNode, att ) ;
+							}
+						}
+					}
+				}
+				else
+					mayRemove = !!styleOverrides[ elementName ] ;
+
+				if ( mayRemove )
+				{
+					// Remove overrides defined to the same element name.
+					this._RemoveOverrides( currentNode, styleOverrides[ elementName ] ) ;
+
+					// Remove the element if no more attributes are available.
+					this._RemoveNoAttribElement( currentNode ) ;
+				}
+			}
+
+			// If we have reached the end of the selection, stop looping.
+			if ( nextNode == endNode )
+				break ;
+
+			currentNode = nextNode ;
+		}
+
+		this._FixBookmarkStart( startNode ) ;
+
+		// Re-select the original range.
+		if ( selectIt )
+			range.SelectBookmark( bookmark ) ;
+
+		if ( updateRange )
+			range.MoveToBookmark( bookmark ) ;
+	},
+
+	/**
+	 * Checks if an element, or any of its attributes, is removable by the
+	 * current style definition.
+	 */
+	CheckElementRemovable : function( element, fullMatch )
+	{
+		if ( !element )
+			return false ;
+
+		var elementName = element.nodeName.toLowerCase() ;
+
+		// If the element name is the same as the style name.
+		if ( elementName == this.Element )
+		{
+			// If no attributes are defined in the element.
+			if ( !fullMatch && !FCKDomTools.HasAttributes( element ) )
+				return true ;
+
+			// If any attribute conflicts with the style attributes.
+			var attribs = this._GetAttribsForComparison() ;
+			var allMatched = ( attribs._length == 0 ) ;
+			for ( var att in attribs )
+			{
+				if ( att == '_length' )
+					continue ;
+
+				if ( this._CompareAttributeValues( att, FCKDomTools.GetAttributeValue( element, att ), ( this.GetFinalAttributeValue( att ) || '' ) ) )
+				{
+					allMatched = true ;
+					if ( !fullMatch )
+						break ;
+				}
+				else
+				{
+					allMatched = false ;
+					if ( fullMatch )
+						return false ;
+				}
+			}
+			if ( allMatched )
+				return true ;
+		}
+
+		// Check if the element can be somehow overriden.
+		var override = this._GetOverridesForComparison()[ elementName ] ;
+		if ( override )
+		{
+			// If no attributes have been defined, remove the element.
+			if ( !( attribs = override.Attributes ) ) // Only one "="
+				return true ;
+
+			for ( var i = 0 ; i < attribs.length ; i++ )
+			{
+				var attName = attribs[i][0] ;
+				if ( FCKDomTools.HasAttribute( element, attName ) )
+				{
+					var attValue = attribs[i][1] ;
+
+					// Remove the attribute if:
+					//    - The override definition value is null ;
+					//    - The override definition valie is a string that
+					//      matches the attribute value exactly.
+					//    - The override definition value is a regex that
+					//      has matches in the attribute value.
+					if ( attValue == null ||
+							( typeof attValue == 'string' && FCKDomTools.GetAttributeValue( element, attName ) == attValue ) ||
+							attValue.test( FCKDomTools.GetAttributeValue( element, attName ) ) )
+						return true ;
+				}
+			}
+		}
+
+		return false ;
+	},
+
+	/**
+	 * Get the style state for an element path. Returns "true" if the element
+	 * is active in the path.
+	 */
+	CheckActive : function( elementPath )
+	{
+		switch ( this.GetType() )
+		{
+			case FCK_STYLE_BLOCK :
+				return this.CheckElementRemovable( elementPath.Block || elementPath.BlockLimit, true ) ;
+
+			case FCK_STYLE_INLINE :
+
+				var elements = elementPath.Elements ;
+
+				for ( var i = 0 ; i < elements.length ; i++ )
+				{
+					var element = elements[i] ;
+
+					if ( element == elementPath.Block || element == elementPath.BlockLimit )
+						continue ;
+
+					if ( this.CheckElementRemovable( element, true ) )
+						return true ;
+				}
+		}
+		return false ;
+	},
+
+	/**
+	 * Removes an inline style from inside an element tree. The element node
+	 * itself is not checked or removed, only the child tree inside of it.
+	 */
+	RemoveFromElement : function( element )
+	{
+		var attribs = this._GetAttribsForComparison() ;
+		var overrides = this._GetOverridesForComparison() ;
+
+		// Get all elements with the same name.
+		var innerElements = element.getElementsByTagName( this.Element ) ;
+
+		for ( var i = innerElements.length - 1 ; i >= 0 ; i-- )
+		{
+			var innerElement = innerElements[i] ;
+
+			// Remove any attribute that conflict with this style, no matter
+			// their values.
+			for ( var att in attribs )
+			{
+				if ( FCKDomTools.HasAttribute( innerElement, att ) )
+				{
+					switch ( att )
+					{
+						case 'style' :
+							this._RemoveStylesFromElement( innerElement ) ;
+							break ;
+
+						case 'class' :
+							// The 'class' element value must match (#1318).
+							if ( FCKDomTools.GetAttributeValue( innerElement, att ) != this.GetFinalAttributeValue( att ) )
+								continue ;
+
+							/*jsl:fallthru*/
+
+						default :
+							FCKDomTools.RemoveAttribute( innerElement, att ) ;
+					}
+				}
+			}
+
+			// Remove overrides defined to the same element name.
+			this._RemoveOverrides( innerElement, overrides[ this.Element ] ) ;
+
+			// Remove the element if no more attributes are available.
+			this._RemoveNoAttribElement( innerElement ) ;
+		}
+
+		// Now remove any other element with different name that is
+		// defined to be overriden.
+		for ( var overrideElement in overrides )
+		{
+			if ( overrideElement != this.Element )
+			{
+				// Get all elements.
+				innerElements = element.getElementsByTagName( overrideElement ) ;
+
+				for ( var i = innerElements.length - 1 ; i >= 0 ; i-- )
+				{
+					var innerElement = innerElements[i] ;
+					this._RemoveOverrides( innerElement, overrides[ overrideElement ] ) ;
+					this._RemoveNoAttribElement( innerElement ) ;
+				}
+			}
+		}
+	},
+
+	_RemoveStylesFromElement : function( element )
+	{
+		var elementStyle = element.style.cssText ;
+		var pattern = this.GetFinalStyleValue() ;
+
+		if ( elementStyle.length > 0 && pattern.length == 0 )
+			return ;
+
+		pattern = '(^|;)\\s*(' +
+			pattern.replace( /\s*([^ ]+):.*?(;|$)/g, '$1|' ).replace( /\|$/, '' ) +
+			'):[^;]+' ;
+
+		var regex = new RegExp( pattern, 'gi' ) ;
+
+		elementStyle = elementStyle.replace( regex, '' ).Trim() ;
+
+		if ( elementStyle.length == 0 || elementStyle == ';' )
+			FCKDomTools.RemoveAttribute( element, 'style' ) ;
+		else
+			element.style.cssText = elementStyle.replace( regex, '' ) ;
+	},
+
+	/**
+	 * Remove all attributes that are defined to be overriden,
+	 */
+	_RemoveOverrides : function( element, override )
+	{
+		var attributes = override && override.Attributes ;
+
+		if ( attributes )
+		{
+			for ( var i = 0 ; i < attributes.length ; i++ )
+			{
+				var attName = attributes[i][0] ;
+
+				if ( FCKDomTools.HasAttribute( element, attName ) )
+				{
+					var attValue	= attributes[i][1] ;
+
+					// Remove the attribute if:
+					//    - The override definition value is null ;
+					//    - The override definition valie is a string that
+					//      matches the attribute value exactly.
+					//    - The override definition value is a regex that
+					//      has matches in the attribute value.
+					if ( attValue == null ||
+							( attValue.test && attValue.test( FCKDomTools.GetAttributeValue( element, attName ) ) ) ||
+							( typeof attValue == 'string' && FCKDomTools.GetAttributeValue( element, attName ) == attValue ) )
+						FCKDomTools.RemoveAttribute( element, attName ) ;
+				}
+			}
+		}
+	},
+
+	/**
+	 * If the element has no more attributes, remove it.
+	 */
+	_RemoveNoAttribElement : function( element )
+	{
+		// If no more attributes remained in the element, remove it,
+		// leaving its children.
+		if ( !FCKDomTools.HasAttributes( element ) )
+		{
+			// Removing elements may open points where merging is possible,
+			// so let's cache the first and last nodes for later checking.
+			var firstChild	= element.firstChild ;
+			var lastChild	= element.lastChild ;
+
+			FCKDomTools.RemoveNode( element, true ) ;
+
+			// Check the cached nodes for merging.
+			this._MergeSiblings( firstChild ) ;
+
+			if ( firstChild != lastChild )
+				this._MergeSiblings( lastChild ) ;
+		}
+	},
+
+	/**
+	 * Creates a DOM element for this style object.
+	 */
+	BuildElement : function( targetDoc, element )
+	{
+		// Create the element.
+		var el = element || targetDoc.createElement( this.Element ) ;
+
+		// Assign all defined attributes.
+		var attribs	= this._StyleDesc.Attributes ;
+		var attValue ;
+		if ( attribs )
+		{
+			for ( var att in attribs )
+			{
+				attValue = this.GetFinalAttributeValue( att ) ;
+
+				if ( att.toLowerCase() == 'class' )
+					el.className = attValue ;
+				else
+					el.setAttribute( att, attValue ) ;
+			}
+		}
+
+		// Assign the style attribute.
+		if ( this._GetStyleText().length > 0 )
+			el.style.cssText = this.GetFinalStyleValue() ;
+
+		return el ;
+	},
+
+	_CompareAttributeValues : function( attName, valueA, valueB )
+	{
+		if ( attName == 'style' && valueA && valueB )
+		{
+			valueA = valueA.replace( /;$/, '' ).toLowerCase() ;
+			valueB = valueB.replace( /;$/, '' ).toLowerCase() ;
+		}
+
+		// Return true if they match or if valueA is null and valueB is an empty string
+		return ( valueA == valueB || ( ( valueA === null || valueA === '' ) && ( valueB === null || valueB === '' ) ) )
+	},
+
+	GetFinalAttributeValue : function( attName )
+	{
+		var attValue = this._StyleDesc.Attributes ;
+		var attValue = attValue ? attValue[ attName ] : null ;
+
+		if ( !attValue && attName == 'style' )
+			return this.GetFinalStyleValue() ;
+
+		if ( attValue && this._Variables )
+			// Using custom Replace() to guarantee the correct scope.
+			attValue = attValue.Replace( FCKRegexLib.StyleVariableAttName, this._GetVariableReplace, this ) ;
+
+		return attValue ;
+	},
+
+	GetFinalStyleValue : function()
+	{
+		var attValue = this._GetStyleText() ;
+
+		if ( attValue.length > 0 && this._Variables )
+		{
+			// Using custom Replace() to guarantee the correct scope.
+			attValue = attValue.Replace( FCKRegexLib.StyleVariableAttName, this._GetVariableReplace, this ) ;
+			attValue = FCKTools.NormalizeCssText( attValue ) ;
+		}
+
+		return attValue ;
+	},
+
+	_GetVariableReplace : function()
+	{
+		// The second group in the regex is the variable name.
+		return this._Variables[ arguments[2] ] || arguments[0] ;
+	},
+
+	/**
+	 * Set the value of a variable attribute or style, to be used when
+	 * appliying the style.
+	 */
+	SetVariable : function( name, value )
+	{
+		var variables = this._Variables ;
+
+		if ( !variables )
+			variables = this._Variables = {} ;
+
+		this._Variables[ name ] = value ;
+	},
+
+	/**
+	 * Converting from a PRE block to a non-PRE block in formatting operations.
+	 */
+	_FromPre : function( doc, block, newBlock )
+	{
+		var innerHTML = block.innerHTML ;
+
+		// Trim the first and last linebreaks immediately after and before <pre>, </pre>,
+		// if they exist.
+		// This is done because the linebreaks are not rendered.
+		innerHTML = innerHTML.replace( /(\r\n|\r)/g, '\n' ) ;
+		innerHTML = innerHTML.replace( /^[ \t]*\n/, '' ) ;
+		innerHTML = innerHTML.replace( /\n$/, '' ) ;
+
+		// 1. Convert spaces or tabs at the beginning or at the end to &nbsp;
+		innerHTML = innerHTML.replace( /^[ \t]+|[ \t]+$/g, function( match, offset, s )
+				{
+					if ( match.length == 1 )	// one space, preserve it
+						return '&nbsp;' ;
+					else if ( offset == 0 )		// beginning of block
+						return new Array( match.length ).join( '&nbsp;' ) + ' ' ;
+					else				// end of block
+						return ' ' + new Array( match.length ).join( '&nbsp;' ) ;
+				} ) ;
+
+		// 2. Convert \n to <BR>.
+		// 3. Convert contiguous (i.e. non-singular) spaces or tabs to &nbsp;
+		var htmlIterator = new FCKHtmlIterator( innerHTML ) ;
+		var results = [] ;
+		htmlIterator.Each( function( isTag, value )
+			{
+				if ( !isTag )
+				{
+					value = value.replace( /\n/g, '<BR>' ) ;
+					value = value.replace( /[ \t]{2,}/g,
+							function ( match )
+							{
+								return new Array( match.length ).join( '&nbsp;' ) + ' ' ;
+							} ) ;
+				}
+				results.push( value ) ;
+			} ) ;
+		newBlock.innerHTML = results.join( '' ) ;
+		return newBlock ;
+	},
+
+	/**
+	 * Converting from a non-PRE block to a PRE block in formatting operations.
+	 */
+	_ToPre : function( doc, block, newBlock )
+	{
+		// Handle converting from a regular block to a <pre> block.
+		var innerHTML = block.innerHTML.Trim() ;
+
+		// 1. Delete ANSI whitespaces immediately before and after <BR> because they are not visible.
+		// 2. Mark down any <BR /> nodes here so they can be turned into \n in the next step and avoid being compressed.
+		innerHTML = innerHTML.replace( /[ \t\r\n]*(<br[^>]*>)[ \t\r\n]*/gi, '<BR />' ) ;
+
+		// 3. Compress other ANSI whitespaces since they're only visible as one single space previously.
+		// 4. Convert &nbsp; to spaces since &nbsp; is no longer needed in <PRE>.
+		// 5. Convert any <BR /> to \n. This must not be done earlier because the \n would then get compressed.
+		var htmlIterator = new FCKHtmlIterator( innerHTML ) ;
+		var results = [] ;
+		htmlIterator.Each( function( isTag, value )
+			{
+				if ( !isTag )
+					value = value.replace( /([ \t\n\r]+|&nbsp;)/g, ' ' ) ;
+				else if ( isTag && value == '<BR />' )
+					value = '\n' ;
+				results.push( value ) ;
+			} ) ;
+
+		// Assigning innerHTML to <PRE> in IE causes all linebreaks to be reduced to spaces.
+		// Assigning outerHTML to <PRE> in IE doesn't work if the <PRE> isn't contained in another node
+		// since the node reference is changed after outerHTML assignment.
+		// So, we need some hacks to workaround IE bugs here.
+		if ( FCKBrowserInfo.IsIE )
+		{
+			var temp = doc.createElement( 'div' ) ;
+			temp.appendChild( newBlock ) ;
+			newBlock.outerHTML = '<PRE>\n' + results.join( '' ) + '</PRE>' ;
+			newBlock = temp.removeChild( temp.firstChild ) ;
+		}
+		else
+			newBlock.innerHTML = results.join( '' ) ;
+		return newBlock ;
+	},
+
+	/**
+	 * Apply an inline style to a FCKDomRange.
+	 *
+	 * TODO
+	 *	- Implement the "#" style handling.
+	 *	- Properly handle block containers like <div> and <blockquote>.
+	 */
+	_ApplyBlockStyle : function( range, selectIt, updateRange )
+	{
+		// Bookmark the range so we can re-select it after processing.
+		var bookmark ;
+
+		if ( selectIt )
+			bookmark = range.CreateBookmark() ;
+
+		var iterator = new FCKDomRangeIterator( range ) ;
+		iterator.EnforceRealBlocks = true ;
+
+		var block ;
+		var doc = range.Window.document ;
+
+		var preBlocks = [] ;
+		var convertedPreBlocks = [] ;
+
+		while( ( block = iterator.GetNextParagraph() ) )		// Only one =
+		{
+			// Create the new node right before the current one.
+			var newBlock = this.BuildElement( doc ) ;
+
+			// Move everything from the current node to the new one.
+			var newBlockIsPre = newBlock.nodeName.IEquals( 'pre' ) ;
+			var blockIsPre = block.nodeName.IEquals( 'pre' ) ;
+			if ( newBlockIsPre && !blockIsPre )
+			{
+				newBlock = this._ToPre( doc, block, newBlock ) ;
+				preBlocks.push( newBlock ) ;
+			}
+			else if ( !newBlockIsPre && blockIsPre )
+			{
+				newBlock = this._FromPre( doc, block, newBlock ) ;
+				convertedPreBlocks.push( newBlock ) ;
+			}
+			else	// Convering from a regular block to another regular block.
+				FCKDomTools.MoveChildren( block, newBlock ) ;
+
+			// Replace the current block.
+			block.parentNode.insertBefore( newBlock, block ) ;
+			FCKDomTools.RemoveNode( block ) ;
+		}
+
+		// Merge adjacent <PRE> blocks for #1229.
+		for ( var i = 0 ; i < preBlocks.length - 1 ; i++ )
+		{
+			// Check if the next block in HTML equals the next <PRE> block generated.
+			if ( FCKDomTools.GetNextSourceElement( preBlocks[i], true, [], [], true ) != preBlocks[i+1] )
+				continue ;
+
+			// Merge the upper <PRE> block's content into the lower <PRE> block.
+			// Remove the upper <PRE> block.
+			preBlocks[i+1].innerHTML = preBlocks[i].innerHTML + '\n\n' + preBlocks[i+1].innerHTML ;
+			FCKDomTools.RemoveNode( preBlocks[i] ) ;
+		}
+
+		// Split converted <PRE> blocks for #1229.
+		for ( var i = 0 ; i < convertedPreBlocks.length ; i++ )
+		{
+			var currentBlock = convertedPreBlocks[i] ;
+			var lastNewBlock = null ;
+			for ( var j = 0 ; j < currentBlock.childNodes.length ; j++ )
+			{
+				var cursor = currentBlock.childNodes[j] ;
+
+				// If we have two <BR>s, and they're not at the beginning or the end,
+				// then we'll split up the contents following them into another block.
+				if ( cursor.nodeName.IEquals( 'br' ) && j != 0 && j != currentBlock.childNodes.length - 2
+						&& cursor.nextSibling && cursor.nextSibling.nodeName.IEquals( 'br' ) )
+				{
+					FCKDomTools.RemoveNode( cursor.nextSibling ) ;
+					FCKDomTools.RemoveNode( cursor ) ;
+					j-- ;	// restart at current index at next iteration
+					lastNewBlock = FCKDomTools.InsertAfterNode( lastNewBlock || currentBlock, doc.createElement( currentBlock.nodeName ) ) ;
+					continue ;
+				}
+
+				if ( lastNewBlock )
+				{
+					FCKDomTools.MoveNode( cursor, lastNewBlock ) ;
+					j-- ;	// restart at current index at next iteration
+				}
+			}
+		}
+
+		// Re-select the original range.
+		if ( selectIt )
+			range.SelectBookmark( bookmark ) ;
+
+		if ( updateRange )
+			range.MoveToBookmark( bookmark ) ;
+	},
+
+	/**
+	 * Apply an inline style to a FCKDomRange.
+	 *
+	 * TODO
+	 *	- Merge elements, when applying styles to similar elements that enclose
+	 *    the entire selection, outputing:
+	 *        <span style="color: #ff0000; background-color: #ffffff">XYZ</span>
+	 *    instead of:
+	 *        <span style="color: #ff0000;"><span style="background-color: #ffffff">XYZ</span></span>
+	 */
+	_ApplyInlineStyle : function( range, selectIt, updateRange )
+	{
+		var doc = range.Window.document ;
+
+		if ( range.CheckIsCollapsed() )
+		{
+			// Create the element to be inserted in the DOM.
+			var collapsedElement = this.BuildElement( doc ) ;
+			range.InsertNode( collapsedElement ) ;
+			range.MoveToPosition( collapsedElement, 2 ) ;
+			range.Select() ;
+
+			return ;
+		}
+
+		// The general idea here is navigating through all nodes inside the
+		// current selection, working on distinct range blocks, defined by the
+		// DTD compatibility between the style element and the nodes inside the
+		// ranges.
+		//
+		// For example, suppose we have the following selection (where [ and ]
+		// are the boundaries), and we apply a <b> style there:
+		//
+		//		<p>Here we [have <b>some</b> text.<p>
+		//		<p>And some here] here.</p>
+		//
+		// Two different ranges will be detected:
+		//
+		//		"have <b>some</b> text."
+		//		"And some here"
+		//
+		// Both ranges will be extracted, moved to a <b> element, and
+		// re-inserted, resulting in the following output:
+		//
+		//		<p>Here we [<b>have some text.</b><p>
+		//		<p><b>And some here</b>] here.</p>
+		//
+		// Note that the <b> element at <b>some</b> is also removed because it
+		// is not needed anymore.
+
+		var elementName = this.Element ;
+
+		// Get the DTD definition for the element. Defaults to "span".
+		var elementDTD = FCK.DTD[ elementName ] || FCK.DTD.span ;
+
+		// Create the attribute list to be used later for element comparisons.
+		var styleAttribs = this._GetAttribsForComparison() ;
+		var styleNode ;
+
+		// Expand the range, if inside inline element boundaries.
+		range.Expand( 'inline_elements' ) ;
+
+		// Bookmark the range so we can re-select it after processing.
+		var bookmark = range.CreateBookmark( true ) ;
+
+		// The style will be applied within the bookmark boundaries.
+		var startNode	= range.GetBookmarkNode( bookmark, true ) ;
+		var endNode		= range.GetBookmarkNode( bookmark, false ) ;
+
+		// We'll be reusing the range to apply the styles. So, release it here
+		// to indicate that it has not been initialized.
+		range.Release( true ) ;
+
+		// Let's start the nodes lookup from the node right after the bookmark
+		// span.
+		var currentNode = FCKDomTools.GetNextSourceNode( startNode, true ) ;
+
+		while ( currentNode )
+		{
+			var applyStyle = false ;
+
+			var nodeType = currentNode.nodeType ;
+			var nodeName = nodeType == 1 ? currentNode.nodeName.toLowerCase() : null ;
+
+			// Check if the current node can be a child of the style element.
+			if ( !nodeName || elementDTD[ nodeName ] )
+			{
+				// Check if the style element can be a child of the current
+				// node parent or if the element is not defined in the DTD.
+				if ( ( FCK.DTD[ currentNode.parentNode.nodeName.toLowerCase() ] || FCK.DTD.span )[ elementName ] || !FCK.DTD[ elementName ] )
+				{
+					// This node will be part of our range, so if it has not
+					// been started, place its start right before the node.
+					if ( !range.CheckHasRange() )
+						range.SetStart( currentNode, 3 ) ;
+
+					// Non element nodes, or empty elements can be added
+					// completely to the range.
+					if ( nodeType != 1 || currentNode.childNodes.length == 0 )
+					{
+						var includedNode = currentNode ;
+						var parentNode = includedNode.parentNode ;
+
+						// This node is about to be included completelly, but,
+						// if this is the last node in its parent, we must also
+						// check if the parent itself can be added completelly
+						// to the range.
+						while ( includedNode == parentNode.lastChild
+							&& elementDTD[ parentNode.nodeName.toLowerCase() ] )
+						{
+							includedNode = parentNode ;
+						}
+
+						range.SetEnd( includedNode, 4 ) ;
+
+						// If the included node is the last node in its parent
+						// and its parent can't be inside the style node, apply
+						// the style immediately.
+						if ( includedNode == includedNode.parentNode.lastChild && !elementDTD[ includedNode.parentNode.nodeName.toLowerCase() ] )
+							applyStyle = true ;
+					}
+					else
+					{
+						// Element nodes will not be added directly. We need to
+						// check their children because the selection could end
+						// inside the node, so let's place the range end right
+						// before the element.
+						range.SetEnd( currentNode, 3 ) ;
+					}
+				}
+				else
+					applyStyle = true ;
+			}
+			else
+				applyStyle = true ;
+
+			// Get the next node to be processed.
+			currentNode = FCKDomTools.GetNextSourceNode( currentNode ) ;
+
+			// If we have reached the end of the selection, just apply the
+			// style ot the range, and stop looping.
+			if ( currentNode == endNode )
+			{
+				currentNode = null ;
+				applyStyle = true ;
+			}
+
+			// Apply the style if we have something to which apply it.
+			if ( applyStyle && range.CheckHasRange() && !range.CheckIsCollapsed() )
+			{
+				// Build the style element, based on the style object definition.
+				styleNode = this.BuildElement( doc ) ;
+
+				// Move the contents of the range to the style element.
+				range.ExtractContents().AppendTo( styleNode ) ;
+
+				// If it is not empty.
+				if ( styleNode.innerHTML.RTrim().length > 0 )
+				{
+					// Insert it in the range position (it is collapsed after
+					// ExtractContents.
+					range.InsertNode( styleNode ) ;
+
+					// Here we do some cleanup, removing all duplicated
+					// elements from the style element.
+					this.RemoveFromElement( styleNode ) ;
+
+					// Let's merge our new style with its neighbors, if possible.
+					this._MergeSiblings( styleNode, this._GetAttribsForComparison() ) ;
+
+					// As the style system breaks text nodes constantly, let's normalize
+					// things for performance.
+					// With IE, some paragraphs get broken when calling normalize()
+					// repeatedly. Also, for IE, we must normalize body, not documentElement.
+					// IE is also known for having a "crash effect" with normalize().
+					// We should try to normalize with IE too in some way, somewhere.
+					if ( !FCKBrowserInfo.IsIE )
+						styleNode.normalize() ;
+				}
+
+				// Style applied, let's release the range, so it gets marked to
+				// re-initialization in the next loop.
+				range.Release( true ) ;
+			}
+		}
+
+		this._FixBookmarkStart( startNode ) ;
+
+		// Re-select the original range.
+		if ( selectIt )
+			range.SelectBookmark( bookmark ) ;
+
+		if ( updateRange )
+			range.MoveToBookmark( bookmark ) ;
+	},
+
+	_FixBookmarkStart : function( startNode )
+	{
+		// After appliying or removing an inline style, the start boundary of
+		// the selection must be placed inside all inline elements it is
+		// bordering.
+		var startSibling ;
+		while ( ( startSibling = startNode.nextSibling ) )	// Only one "=".
+		{
+			if ( startSibling.nodeType == 1
+				&& FCKListsLib.InlineNonEmptyElements[ startSibling.nodeName.toLowerCase() ] )
+			{
+				// If it is an empty inline element, we can safely remove it.
+				if ( !startSibling.firstChild )
+					FCKDomTools.RemoveNode( startSibling ) ;
+				else
+					FCKDomTools.MoveNode( startNode, startSibling, true ) ;
+				continue ;
+			}
+
+			// Empty text nodes can be safely removed to not disturb.
+			if ( startSibling.nodeType == 3 && startSibling.length == 0 )
+			{
+				FCKDomTools.RemoveNode( startSibling ) ;
+				continue ;
+			}
+
+			break ;
+		}
+	},
+
+	/**
+	 * Merge an element with its similar siblings.
+	 * "attribs" is and object computed with _CreateAttribsForComparison.
+	 */
+	_MergeSiblings : function( element, attribs )
+	{
+		if ( !element || element.nodeType != 1 || !FCKListsLib.InlineNonEmptyElements[ element.nodeName.toLowerCase() ] )
+			return ;
+
+		this._MergeNextSibling( element, attribs ) ;
+		this._MergePreviousSibling( element, attribs ) ;
+	},
+
+	/**
+	 * Merge an element with its similar siblings after it.
+	 * "attribs" is and object computed with _CreateAttribsForComparison.
+	 */
+	_MergeNextSibling : function( element, attribs )
+	{
+		// Check the next sibling.
+		var sibling = element.nextSibling ;
+
+		// Check if the next sibling is a bookmark element. In this case, jump it.
+		var hasBookmark = ( sibling && sibling.nodeType == 1 && sibling.getAttribute( '_fck_bookmark' ) ) ;
+		if ( hasBookmark )
+			sibling = sibling.nextSibling ;
+
+		if ( sibling && sibling.nodeType == 1 && sibling.nodeName == element.nodeName )
+		{
+			if ( !attribs )
+				attribs = this._CreateElementAttribsForComparison( element ) ;
+
+			if ( this._CheckAttributesMatch( sibling, attribs ) )
+			{
+				// Save the last child to be checked too (to merge things like <b><i></i></b><b><i></i></b>).
+				var innerSibling = element.lastChild ;
+
+				if ( hasBookmark )
+					FCKDomTools.MoveNode( element.nextSibling, element ) ;
+
+				// Move contents from the sibling.
+				FCKDomTools.MoveChildren( sibling, element ) ;
+				FCKDomTools.RemoveNode( sibling ) ;
+
+				// Now check the last inner child (see two comments above).
+				if ( innerSibling )
+					this._MergeNextSibling( innerSibling ) ;
+			}
+		}
+	},
+
+	/**
+	 * Merge an element with its similar siblings before it.
+	 * "attribs" is and object computed with _CreateAttribsForComparison.
+	 */
+	_MergePreviousSibling : function( element, attribs )
+	{
+		// Check the previous sibling.
+		var sibling = element.previousSibling ;
+
+		// Check if the previous sibling is a bookmark element. In this case, jump it.
+		var hasBookmark = ( sibling && sibling.nodeType == 1 && sibling.getAttribute( '_fck_bookmark' ) ) ;
+		if ( hasBookmark )
+			sibling = sibling.previousSibling ;
+
+		if ( sibling && sibling.nodeType == 1 && sibling.nodeName == element.nodeName )
+		{
+			if ( !attribs )
+				attribs = this._CreateElementAttribsForComparison( element ) ;
+
+			if ( this._CheckAttributesMatch( sibling, attribs ) )
+			{
+				// Save the first child to be checked too (to merge things like <b><i></i></b><b><i></i></b>).
+				var innerSibling = element.firstChild ;
+
+				if ( hasBookmark )
+					FCKDomTools.MoveNode( element.previousSibling, element, true ) ;
+
+				// Move contents to the sibling.
+				FCKDomTools.MoveChildren( sibling, element, true ) ;
+				FCKDomTools.RemoveNode( sibling ) ;
+
+				// Now check the first inner child (see two comments above).
+				if ( innerSibling )
+					this._MergePreviousSibling( innerSibling ) ;
+			}
+		}
+	},
+
+	/**
+	 * Build the cssText based on the styles definition.
+	 */
+	_GetStyleText : function()
+	{
+		var stylesDef = this._StyleDesc.Styles ;
+
+		// Builds the StyleText.
+		var stylesText = ( this._StyleDesc.Attributes ? this._StyleDesc.Attributes['style'] || '' : '' ) ;
+
+		if ( stylesText.length > 0 )
+			stylesText += ';' ;
+
+		for ( var style in stylesDef )
+			stylesText += style + ':' + stylesDef[style] + ';' ;
+
+		// Browsers make some changes to the style when applying them. So, here
+		// we normalize it to the browser format. We'll not do that if there
+		// are variables inside the style.
+		if ( stylesText.length > 0 && !( /#\(/.test( stylesText ) ) )
+		{
+			stylesText = FCKTools.NormalizeCssText( stylesText ) ;
+		}
+
+		return (this._GetStyleText = function() { return stylesText ; })() ;
+	},
+
+	/**
+	 * Get the the collection used to compare the attributes defined in this
+	 * style with attributes in an element. All information in it is lowercased.
+	 */
+	_GetAttribsForComparison : function()
+	{
+		// If we have already computed it, just return it.
+		var attribs = this._GetAttribsForComparison_$ ;
+		if ( attribs )
+			return attribs ;
+
+		attribs = new Object() ;
+
+		// Loop through all defined attributes.
+		var styleAttribs = this._StyleDesc.Attributes ;
+		if ( styleAttribs )
+		{
+			for ( var styleAtt in styleAttribs )
+			{
+				attribs[ styleAtt.toLowerCase() ] = styleAttribs[ styleAtt ].toLowerCase() ;
+			}
+		}
+
+		// Includes the style definitions.
+		if ( this._GetStyleText().length > 0 )
+		{
+			attribs['style'] = this._GetStyleText().toLowerCase() ;
+		}
+
+		// Appends the "length" information to the object.
+		FCKTools.AppendLengthProperty( attribs, '_length' ) ;
+
+		// Return it, saving it to the next request.
+		return ( this._GetAttribsForComparison_$ = attribs ) ;
+	},
+
+	/**
+	 * Get the the collection used to compare the elements and attributes,
+	 * defined in this style overrides, with other element. All information in
+	 * it is lowercased.
+	 */
+	_GetOverridesForComparison : function()
+	{
+		// If we have already computed it, just return it.
+		var overrides = this._GetOverridesForComparison_$ ;
+		if ( overrides )
+			return overrides ;
+
+		overrides = new Object() ;
+
+		var overridesDesc = this._StyleDesc.Overrides ;
+
+		if ( overridesDesc )
+		{
+			// The override description can be a string, object or array.
+			// Internally, well handle arrays only, so transform it if needed.
+			if ( !FCKTools.IsArray( overridesDesc ) )
+				overridesDesc = [ overridesDesc ] ;
+
+			// Loop through all override definitions.
+			for ( var i = 0 ; i < overridesDesc.length ; i++ )
+			{
+				var override = overridesDesc[i] ;
+				var elementName ;
+				var overrideEl ;
+				var attrs ;
+
+				// If can be a string with the element name.
+				if ( typeof override == 'string' )
+					elementName = override.toLowerCase() ;
+				// Or an object.
+				else
+				{
+					elementName = override.Element ? override.Element.toLowerCase() : this.Element ;
+					attrs = override.Attributes ;
+				}
+
+				// We can have more than one override definition for the same
+				// element name, so we attempt to simply append information to
+				// it if it already exists.
+				overrideEl = overrides[ elementName ] || ( overrides[ elementName ] = {} ) ;
+
+				if ( attrs )
+				{
+					// The returning attributes list is an array, because we
+					// could have different override definitions for the same
+					// attribute name.
+					var overrideAttrs = ( overrideEl.Attributes = overrideEl.Attributes || new Array() ) ;
+					for ( var attName in attrs )
+					{
+						// Each item in the attributes array is also an array,
+						// where [0] is the attribute name and [1] is the
+						// override value.
+						overrideAttrs.push( [ attName.toLowerCase(), attrs[ attName ] ] ) ;
+					}
+				}
+			}
+		}
+
+		return ( this._GetOverridesForComparison_$ = overrides ) ;
+	},
+
+	/*
+	 * Create and object containing all attributes specified in an element,
+	 * added by a "_length" property. All values are lowercased.
+	 */
+	_CreateElementAttribsForComparison : function( element )
+	{
+		var attribs = new Object() ;
+		var attribsCount = 0 ;
+
+		for ( var i = 0 ; i < element.attributes.length ; i++ )
+		{
+			var att = element.attributes[i] ;
+
+			if ( att.specified )
+			{
+				attribs[ att.nodeName.toLowerCase() ] = FCKDomTools.GetAttributeValue( element, att ).toLowerCase() ;
+				attribsCount++ ;
+			}
+		}
+
+		attribs._length = attribsCount ;
+
+		return attribs ;
+	},
+
+	/**
+	 * Checks is the element attributes have a perfect match with the style
+	 * attributes.
+	 */
+	_CheckAttributesMatch : function( element, styleAttribs )
+	{
+		// Loop through all specified attributes. The same number of
+		// attributes must be found and their values must match to
+		// declare them as equal.
+
+		var elementAttrbs = element.attributes ;
+		var matchCount = 0 ;
+
+		for ( var i = 0 ; i < elementAttrbs.length ; i++ )
+		{
+			var att = elementAttrbs[i] ;
+			if ( att.specified )
+			{
+				var attName = att.nodeName.toLowerCase() ;
+				var styleAtt = styleAttribs[ attName ] ;
+
+				// The attribute is not defined in the style.
+				if ( !styleAtt )
+					break ;
+
+				// The values are different.
+				if ( styleAtt != FCKDomTools.GetAttributeValue( element, att ).toLowerCase() )
+					break ;
+
+				matchCount++ ;
+			}
+		}
+
+		return ( matchCount == styleAttribs._length ) ;
+	}
+} ;


Property changes on: announcement/trunk/src/main/webapp/fckeditor/editor/_source/classes/fckstyle.js
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/webapp/fckeditor/editor/_source/classes/fcktoolbar.js
===================================================================
--- announcement/trunk/src/main/webapp/fckeditor/editor/_source/classes/fcktoolbar.js	                        (rev 0)
+++ announcement/trunk/src/main/webapp/fckeditor/editor/_source/classes/fcktoolbar.js	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,103 @@
+/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2008 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * FCKToolbar Class: represents a toolbar in the toolbarset. It is a group of
+ * toolbar items.
+ */
+
+var FCKToolbar = function()
+{
+	this.Items = new Array() ;
+}
+
+FCKToolbar.prototype.AddItem = function( item )
+{
+	return this.Items[ this.Items.length ] = item ;
+}
+
+FCKToolbar.prototype.AddButton = function( name, label, tooltip, iconPathOrStripInfoArrayOrIndex, style, state )
+{
+	if ( typeof( iconPathOrStripInfoArrayOrIndex ) == 'number' )
+		 iconPathOrStripInfoArrayOrIndex = [ this.DefaultIconsStrip, this.DefaultIconSize, iconPathOrStripInfoArrayOrIndex ] ;
+
+	var oButton = new FCKToolbarButtonUI( name, label, tooltip, iconPathOrStripInfoArrayOrIndex, style, state ) ;
+	oButton._FCKToolbar = this ;
+	oButton.OnClick = FCKToolbar_OnItemClick ;
+
+	return this.AddItem( oButton ) ;
+}
+
+function FCKToolbar_OnItemClick( item )
+{
+	var oToolbar = item._FCKToolbar ;
+
+	if ( oToolbar.OnItemClick )
+		oToolbar.OnItemClick( oToolbar, item ) ;
+}
+
+FCKToolbar.prototype.AddSeparator = function()
+{
+	this.AddItem( new FCKToolbarSeparator() ) ;
+}
+
+FCKToolbar.prototype.Create = function( parentElement )
+{
+	var oDoc = FCKTools.GetElementDocument( parentElement ) ;
+
+	var e = oDoc.createElement( 'table' ) ;
+	e.className = 'TB_Toolbar' ;
+	e.style.styleFloat = e.style.cssFloat = ( FCKLang.Dir == 'ltr' ? 'left' : 'right' ) ;
+	e.dir = FCKLang.Dir ;
+	e.cellPadding = 0 ;
+	e.cellSpacing = 0 ;
+
+	var targetRow = e.insertRow(-1) ;
+
+	// Insert the start cell.
+	var eCell ;
+
+	if ( !this.HideStart )
+	{
+		eCell = targetRow.insertCell(-1) ;
+		eCell.appendChild( oDoc.createElement( 'div' ) ).className = 'TB_Start' ;
+	}
+
+	for ( var i = 0 ; i < this.Items.length ; i++ )
+	{
+		this.Items[i].Create( targetRow.insertCell(-1) ) ;
+	}
+
+	// Insert the ending cell.
+	if ( !this.HideEnd )
+	{
+		eCell = targetRow.insertCell(-1) ;
+		eCell.appendChild( oDoc.createElement( 'div' ) ).className = 'TB_End' ;
+	}
+
+	parentElement.appendChild( e ) ;
+}
+
+var FCKToolbarSeparator = function()
+{}
+
+FCKToolbarSeparator.prototype.Create = function( parentElement )
+{
+	FCKTools.AppendElement( parentElement, 'div' ).className = 'TB_Separator' ;
+}


Property changes on: announcement/trunk/src/main/webapp/fckeditor/editor/_source/classes/fcktoolbar.js
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/webapp/fckeditor/editor/_source/classes/fcktoolbarbreak_gecko.js
===================================================================
--- announcement/trunk/src/main/webapp/fckeditor/editor/_source/classes/fcktoolbarbreak_gecko.js	                        (rev 0)
+++ announcement/trunk/src/main/webapp/fckeditor/editor/_source/classes/fcktoolbarbreak_gecko.js	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,36 @@
+/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2008 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * FCKToolbarBreak Class: breaks the toolbars.
+ * It makes it possible to force the toolbar to break to a new line.
+ * This is the Gecko specific implementation.
+ */
+
+var FCKToolbarBreak = function()
+{}
+
+FCKToolbarBreak.prototype.Create = function( targetElement )
+{
+	var oBreakDiv = targetElement.ownerDocument.createElement( 'div' ) ;
+
+	oBreakDiv.style.clear = oBreakDiv.style.cssFloat = FCKLang.Dir == 'rtl' ? 'right' : 'left' ;
+
+	targetElement.appendChild( oBreakDiv ) ;
+}


Property changes on: announcement/trunk/src/main/webapp/fckeditor/editor/_source/classes/fcktoolbarbreak_gecko.js
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/webapp/fckeditor/editor/_source/classes/fcktoolbarbreak_ie.js
===================================================================
--- announcement/trunk/src/main/webapp/fckeditor/editor/_source/classes/fcktoolbarbreak_ie.js	                        (rev 0)
+++ announcement/trunk/src/main/webapp/fckeditor/editor/_source/classes/fcktoolbarbreak_ie.js	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,38 @@
+/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2008 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * FCKToolbarBreak Class: breaks the toolbars.
+ * It makes it possible to force the toolbar to break to a new line.
+ * This is the IE specific implementation.
+ */
+
+var FCKToolbarBreak = function()
+{}
+
+FCKToolbarBreak.prototype.Create = function( targetElement )
+{
+	var oBreakDiv = FCKTools.GetElementDocument( targetElement ).createElement( 'div' ) ;
+
+	oBreakDiv.className = 'TB_Break' ;
+
+	oBreakDiv.style.clear = FCKLang.Dir == 'rtl' ? 'left' : 'right' ;
+
+	targetElement.appendChild( oBreakDiv ) ;
+}


Property changes on: announcement/trunk/src/main/webapp/fckeditor/editor/_source/classes/fcktoolbarbreak_ie.js
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/webapp/fckeditor/editor/_source/classes/fcktoolbarbutton.js
===================================================================
--- announcement/trunk/src/main/webapp/fckeditor/editor/_source/classes/fcktoolbarbutton.js	                        (rev 0)
+++ announcement/trunk/src/main/webapp/fckeditor/editor/_source/classes/fcktoolbarbutton.js	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,81 @@
+/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2008 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * FCKToolbarButton Class: represents a button in the toolbar.
+ */
+
+var FCKToolbarButton = function( commandName, label, tooltip, style, sourceView, contextSensitive, icon )
+{
+	this.CommandName		= commandName ;
+	this.Label				= label ;
+	this.Tooltip			= tooltip ;
+	this.Style				= style ;
+	this.SourceView			= sourceView ? true : false ;
+	this.ContextSensitive	= contextSensitive ? true : false ;
+
+	if ( icon == null )
+		this.IconPath = FCKConfig.SkinPath + 'toolbar/' + commandName.toLowerCase() + '.gif' ;
+	else if ( typeof( icon ) == 'number' )
+		this.IconPath = [ FCKConfig.SkinPath + 'fck_strip.gif', 16, icon ] ;
+	else
+		this.IconPath = icon ;
+}
+
+FCKToolbarButton.prototype.Create = function( targetElement )
+{
+	this._UIButton = new FCKToolbarButtonUI( this.CommandName, this.Label, this.Tooltip, this.IconPath, this.Style ) ;
+	this._UIButton.OnClick = this.Click ;
+	this._UIButton._ToolbarButton = this ;
+	this._UIButton.Create( targetElement ) ;
+}
+
+FCKToolbarButton.prototype.RefreshState = function()
+{
+	var uiButton = this._UIButton ;
+
+	if ( !uiButton )
+		return ;
+
+	// Gets the actual state.
+	var eState = FCK.ToolbarSet.CurrentInstance.Commands.GetCommand( this.CommandName ).GetState() ;
+
+	// If there are no state changes than do nothing and return.
+	if ( eState == uiButton.State ) return ;
+
+	// Sets the actual state.
+	uiButton.ChangeState( eState ) ;
+}
+
+FCKToolbarButton.prototype.Click = function()
+{
+	var oToolbarButton = this._ToolbarButton || this ;
+	FCK.ToolbarSet.CurrentInstance.Commands.GetCommand( oToolbarButton.CommandName ).Execute() ;
+}
+
+FCKToolbarButton.prototype.Enable = function()
+{
+	this.RefreshState() ;
+}
+
+FCKToolbarButton.prototype.Disable = function()
+{
+	// Sets the actual state.
+	this._UIButton.ChangeState( FCK_TRISTATE_DISABLED ) ;
+}


Property changes on: announcement/trunk/src/main/webapp/fckeditor/editor/_source/classes/fcktoolbarbutton.js
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/webapp/fckeditor/editor/_source/classes/fcktoolbarbuttonui.js
===================================================================
--- announcement/trunk/src/main/webapp/fckeditor/editor/_source/classes/fcktoolbarbuttonui.js	                        (rev 0)
+++ announcement/trunk/src/main/webapp/fckeditor/editor/_source/classes/fcktoolbarbuttonui.js	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,198 @@
+/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2008 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * FCKToolbarButtonUI Class: interface representation of a toolbar button.
+ */
+
+var FCKToolbarButtonUI = function( name, label, tooltip, iconPathOrStripInfoArray, style, state )
+{
+	this.Name		= name ;
+	this.Label		= label || name ;
+	this.Tooltip	= tooltip || this.Label ;
+	this.Style		= style || FCK_TOOLBARITEM_ONLYICON ;
+	this.State		= state || FCK_TRISTATE_OFF ;
+
+	this.Icon = new FCKIcon( iconPathOrStripInfoArray ) ;
+
+	if ( FCK.IECleanup )
+		FCK.IECleanup.AddItem( this, FCKToolbarButtonUI_Cleanup ) ;
+}
+
+
+FCKToolbarButtonUI.prototype._CreatePaddingElement = function( document )
+{
+	var oImg = document.createElement( 'IMG' ) ;
+	oImg.className = 'TB_Button_Padding' ;
+	oImg.src = FCK_SPACER_PATH ;
+	return oImg ;
+}
+
+FCKToolbarButtonUI.prototype.Create = function( parentElement )
+{
+	var oDoc = FCKTools.GetElementDocument( parentElement ) ;
+
+	// Create the Main Element.
+	var oMainElement = this.MainElement = oDoc.createElement( 'DIV' ) ;
+	oMainElement.title = this.Tooltip ;
+
+	// The following will prevent the button from catching the focus.
+	if ( FCKBrowserInfo.IsGecko )
+		 oMainElement.onmousedown	= FCKTools.CancelEvent ;
+
+	FCKTools.AddEventListenerEx( oMainElement, 'mouseover', FCKToolbarButtonUI_OnMouseOver, this ) ;
+	FCKTools.AddEventListenerEx( oMainElement, 'mouseout', FCKToolbarButtonUI_OnMouseOut, this ) ;
+	FCKTools.AddEventListenerEx( oMainElement, 'click', FCKToolbarButtonUI_OnClick, this ) ;
+
+	this.ChangeState( this.State, true ) ;
+
+	if ( this.Style == FCK_TOOLBARITEM_ONLYICON && !this.ShowArrow )
+	{
+		// <td><div class="TB_Button_On" title="Smiley">{Image}</div></td>
+
+		oMainElement.appendChild( this.Icon.CreateIconElement( oDoc ) ) ;
+	}
+	else
+	{
+		// <td><div class="TB_Button_On" title="Smiley"><table cellpadding="0" cellspacing="0"><tr><td>{Image}</td><td nowrap>Toolbar Button</td><td><img class="TB_Button_Padding"></td></tr></table></div></td>
+		// <td><div class="TB_Button_On" title="Smiley"><table cellpadding="0" cellspacing="0"><tr><td><img class="TB_Button_Padding"></td><td nowrap>Toolbar Button</td><td><img class="TB_Button_Padding"></td></tr></table></div></td>
+
+		var oTable = oMainElement.appendChild( oDoc.createElement( 'TABLE' ) ) ;
+		oTable.cellPadding = 0 ;
+		oTable.cellSpacing = 0 ;
+
+		var oRow = oTable.insertRow(-1) ;
+
+		// The Image cell (icon or padding).
+		var oCell = oRow.insertCell(-1) ;
+
+		if ( this.Style == FCK_TOOLBARITEM_ONLYICON || this.Style == FCK_TOOLBARITEM_ICONTEXT )
+			oCell.appendChild( this.Icon.CreateIconElement( oDoc ) ) ;
+		else
+			oCell.appendChild( this._CreatePaddingElement( oDoc ) ) ;
+
+		if ( this.Style == FCK_TOOLBARITEM_ONLYTEXT || this.Style == FCK_TOOLBARITEM_ICONTEXT )
+		{
+			// The Text cell.
+			oCell = oRow.insertCell(-1) ;
+			oCell.className = 'TB_Button_Text' ;
+			oCell.noWrap = true ;
+			oCell.appendChild( oDoc.createTextNode( this.Label ) ) ;
+		}
+
+		if ( this.ShowArrow )
+		{
+			if ( this.Style != FCK_TOOLBARITEM_ONLYICON )
+			{
+				// A padding cell.
+				oRow.insertCell(-1).appendChild( this._CreatePaddingElement( oDoc ) ) ;
+			}
+
+			oCell = oRow.insertCell(-1) ;
+			var eImg = oCell.appendChild( oDoc.createElement( 'IMG' ) ) ;
+			eImg.src	= FCKConfig.SkinPath + 'images/toolbar.buttonarrow.gif' ;
+			eImg.width	= 5 ;
+			eImg.height	= 3 ;
+		}
+
+		// The last padding cell.
+		oCell = oRow.insertCell(-1) ;
+		oCell.appendChild( this._CreatePaddingElement( oDoc ) ) ;
+	}
+
+	parentElement.appendChild( oMainElement ) ;
+}
+
+FCKToolbarButtonUI.prototype.ChangeState = function( newState, force )
+{
+	if ( !force && this.State == newState )
+		return ;
+
+	var e = this.MainElement ;
+
+	// In IE it can happen when the page is reloaded that MainElement is null, so exit here
+	if ( !e )
+		return ;
+
+	switch ( parseInt( newState, 10 ) )
+	{
+		case FCK_TRISTATE_OFF :
+			e.className		= 'TB_Button_Off' ;
+			break ;
+
+		case FCK_TRISTATE_ON :
+			e.className		= 'TB_Button_On' ;
+			break ;
+
+		case FCK_TRISTATE_DISABLED :
+			e.className		= 'TB_Button_Disabled' ;
+			break ;
+	}
+
+	this.State = newState ;
+}
+
+function FCKToolbarButtonUI_OnMouseOver( ev, button )
+{
+	if ( button.State == FCK_TRISTATE_OFF )
+		this.className = 'TB_Button_Off_Over' ;
+	else if ( button.State == FCK_TRISTATE_ON )
+		this.className = 'TB_Button_On_Over' ;
+}
+
+function FCKToolbarButtonUI_OnMouseOut( ev, button )
+{
+	if ( button.State == FCK_TRISTATE_OFF )
+		this.className = 'TB_Button_Off' ;
+	else if ( button.State == FCK_TRISTATE_ON )
+		this.className = 'TB_Button_On' ;
+}
+
+function FCKToolbarButtonUI_OnClick( ev, button )
+{
+	if ( button.OnClick && button.State != FCK_TRISTATE_DISABLED )
+		button.OnClick( button ) ;
+}
+
+function FCKToolbarButtonUI_Cleanup()
+{
+	// This one should not cause memory leak, but just for safety, let's clean
+	// it up.
+	this.MainElement = null ;
+}
+
+/*
+	Sample outputs:
+
+	This is the base structure. The variation is the image that is marked as {Image}:
+		<td><div class="TB_Button_On" title="Smiley">{Image}</div></td>
+		<td><div class="TB_Button_On" title="Smiley"><table cellpadding="0" cellspacing="0"><tr><td>{Image}</td><td nowrap>Toolbar Button</td><td><img class="TB_Button_Padding"></td></tr></table></div></td>
+		<td><div class="TB_Button_On" title="Smiley"><table cellpadding="0" cellspacing="0"><tr><td><img class="TB_Button_Padding"></td><td nowrap>Toolbar Button</td><td><img class="TB_Button_Padding"></td></tr></table></div></td>
+
+	These are samples of possible {Image} values:
+
+		Strip - IE version:
+			<div class="TB_Button_Image"><img src="strip.gif" style="top:-16px"></div>
+
+		Strip : Firefox, Safari and Opera version
+			<img class="TB_Button_Image" style="background-position: 0px -16px;background-image: url(strip.gif);">
+
+		No-Strip : Browser independent:
+			<img class="TB_Button_Image" src="smiley.gif">
+*/


Property changes on: announcement/trunk/src/main/webapp/fckeditor/editor/_source/classes/fcktoolbarbuttonui.js
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/webapp/fckeditor/editor/_source/classes/fcktoolbarfontformatcombo.js
===================================================================
--- announcement/trunk/src/main/webapp/fckeditor/editor/_source/classes/fcktoolbarfontformatcombo.js	                        (rev 0)
+++ announcement/trunk/src/main/webapp/fckeditor/editor/_source/classes/fcktoolbarfontformatcombo.js	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,139 @@
+/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2008 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * FCKToolbarPanelButton Class: Handles the Fonts combo selector.
+ */
+
+var FCKToolbarFontFormatCombo = function( tooltip, style )
+{
+	if ( tooltip === false )
+		return ;
+
+	this.CommandName = 'FontFormat' ;
+	this.Label		= this.GetLabel() ;
+	this.Tooltip	= tooltip ? tooltip : this.Label ;
+	this.Style		= style ? style : FCK_TOOLBARITEM_ICONTEXT ;
+
+	this.NormalLabel = 'Normal' ;
+
+	this.PanelWidth = 190 ;
+
+	this.DefaultLabel = FCKConfig.DefaultFontFormatLabel || '' ;
+}
+
+// Inherit from FCKToolbarSpecialCombo.
+FCKToolbarFontFormatCombo.prototype = new FCKToolbarStyleCombo( false ) ;
+
+FCKToolbarFontFormatCombo.prototype.GetLabel = function()
+{
+	return FCKLang.FontFormat ;
+}
+
+FCKToolbarFontFormatCombo.prototype.GetStyles = function()
+{
+	var styles = {} ;
+
+	// Get the format names from the language file.
+	var aNames = FCKLang['FontFormats'].split(';') ;
+	var oNames = {
+		p		: aNames[0],
+		pre		: aNames[1],
+		address	: aNames[2],
+		h1		: aNames[3],
+		h2		: aNames[4],
+		h3		: aNames[5],
+		h4		: aNames[6],
+		h5		: aNames[7],
+		h6		: aNames[8],
+		div		: aNames[9] || ( aNames[0] + ' (DIV)')
+	} ;
+
+	// Get the available formats from the configuration file.
+	var elements = FCKConfig.FontFormats.split(';') ;
+
+	for ( var i = 0 ; i < elements.length ; i++ )
+	{
+		var elementName = elements[ i ] ;
+		var style = FCKStyles.GetStyle( '_FCK_' + elementName ) ;
+		if ( style )
+		{
+			style.Label = oNames[ elementName ] ;
+			styles[ '_FCK_' + elementName ] = style ;
+		}
+		else
+			alert( "The FCKConfig.CoreStyles['" + elementName + "'] setting was not found. Please check the fckconfig.js file" ) ;
+	}
+
+	return styles ;
+}
+
+FCKToolbarFontFormatCombo.prototype.RefreshActiveItems = function( targetSpecialCombo )
+{
+	var startElement = FCK.ToolbarSet.CurrentInstance.Selection.GetBoundaryParentElement( true ) ;
+
+	if ( startElement )
+	{
+		var path = new FCKElementPath( startElement ) ;
+		var blockElement = path.Block ;
+
+		if ( blockElement )
+		{
+			for ( var i in targetSpecialCombo.Items )
+			{
+				var item = targetSpecialCombo.Items[i] ;
+				var style = item.Style ;
+
+				if ( style.CheckElementRemovable( blockElement ) )
+				{
+					targetSpecialCombo.SetLabel( style.Label ) ;
+					return ;
+				}
+			}
+		}
+	}
+
+	targetSpecialCombo.SetLabel( this.DefaultLabel ) ;
+}
+
+FCKToolbarFontFormatCombo.prototype.StyleCombo_OnBeforeClick = function( targetSpecialCombo )
+{
+	// Clear the current selection.
+	targetSpecialCombo.DeselectAll() ;
+
+	var startElement = FCK.ToolbarSet.CurrentInstance.Selection.GetBoundaryParentElement( true ) ;
+
+	if ( startElement )
+	{
+		var path = new FCKElementPath( startElement ) ;
+		var blockElement = path.Block ;
+
+		for ( var i in targetSpecialCombo.Items )
+		{
+			var item = targetSpecialCombo.Items[i] ;
+			var style = item.Style ;
+
+			if ( style.CheckElementRemovable( blockElement ) )
+			{
+				targetSpecialCombo.SelectItem( item ) ;
+				return ;
+			}
+		}
+	}
+}


Property changes on: announcement/trunk/src/main/webapp/fckeditor/editor/_source/classes/fcktoolbarfontformatcombo.js
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/webapp/fckeditor/editor/_source/classes/fcktoolbarfontscombo.js
===================================================================
--- announcement/trunk/src/main/webapp/fckeditor/editor/_source/classes/fcktoolbarfontscombo.js	                        (rev 0)
+++ announcement/trunk/src/main/webapp/fckeditor/editor/_source/classes/fcktoolbarfontscombo.js	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,98 @@
+/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2008 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * FCKToolbarPanelButton Class: Handles the Fonts combo selector.
+ */
+
+var FCKToolbarFontsCombo = function( tooltip, style )
+{
+	this.CommandName	= 'FontName' ;
+	this.Label		= this.GetLabel() ;
+	this.Tooltip	= tooltip ? tooltip : this.Label ;
+	this.Style		= style ? style : FCK_TOOLBARITEM_ICONTEXT ;
+
+	this.DefaultLabel = FCKConfig.DefaultFontLabel || '' ;
+}
+
+// Inherit from FCKToolbarSpecialCombo.
+FCKToolbarFontsCombo.prototype = new FCKToolbarFontFormatCombo( false ) ;
+
+FCKToolbarFontsCombo.prototype.GetLabel = function()
+{
+	return FCKLang.Font ;
+}
+
+FCKToolbarFontsCombo.prototype.GetStyles = function()
+{
+	var baseStyle = FCKStyles.GetStyle( '_FCK_FontFace' ) ;
+
+	if ( !baseStyle )
+	{
+		alert( "The FCKConfig.CoreStyles['Size'] setting was not found. Please check the fckconfig.js file" ) ;
+		return {} ;
+	}
+
+	var styles = {} ;
+
+	var fonts = FCKConfig.FontNames.split(';') ;
+
+	for ( var i = 0 ; i < fonts.length ; i++ )
+	{
+		var fontParts = fonts[i].split('/') ;
+		var font = fontParts[0] ;
+		var caption = fontParts[1] || font ;
+
+		var style = FCKTools.CloneObject( baseStyle ) ;
+
+		style.SetVariable( 'Font', font ) ;
+		style.Label = caption ;
+
+		styles[ caption ] = style ;
+	}
+
+	return styles ;
+}
+
+FCKToolbarFontsCombo.prototype.RefreshActiveItems = FCKToolbarStyleCombo.prototype.RefreshActiveItems ;
+
+FCKToolbarFontsCombo.prototype.StyleCombo_OnBeforeClick = function( targetSpecialCombo )
+{
+	// Clear the current selection.
+	targetSpecialCombo.DeselectAll() ;
+
+	var startElement = FCKSelection.GetBoundaryParentElement( true ) ;
+
+	if ( startElement )
+	{
+		var path = new FCKElementPath( startElement ) ;
+
+		for ( var i in targetSpecialCombo.Items )
+		{
+			var item = targetSpecialCombo.Items[i] ;
+			var style = item.Style ;
+
+			if ( style.CheckActive( path ) )
+			{
+				targetSpecialCombo.SelectItem( item ) ;
+				return ;
+			}
+		}
+	}
+}


Property changes on: announcement/trunk/src/main/webapp/fckeditor/editor/_source/classes/fcktoolbarfontscombo.js
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/webapp/fckeditor/editor/_source/classes/fcktoolbarfontsizecombo.js
===================================================================
--- announcement/trunk/src/main/webapp/fckeditor/editor/_source/classes/fcktoolbarfontsizecombo.js	                        (rev 0)
+++ announcement/trunk/src/main/webapp/fckeditor/editor/_source/classes/fcktoolbarfontsizecombo.js	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,76 @@
+/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2008 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * FCKToolbarPanelButton Class: Handles the Fonts combo selector.
+ */
+
+var FCKToolbarFontSizeCombo = function( tooltip, style )
+{
+	this.CommandName	= 'FontSize' ;
+	this.Label		= this.GetLabel() ;
+	this.Tooltip	= tooltip ? tooltip : this.Label ;
+	this.Style		= style ? style : FCK_TOOLBARITEM_ICONTEXT ;
+
+	this.DefaultLabel = FCKConfig.DefaultFontSizeLabel || '' ;
+
+	this.FieldWidth = 70 ;
+}
+
+// Inherit from FCKToolbarSpecialCombo.
+FCKToolbarFontSizeCombo.prototype = new FCKToolbarFontFormatCombo( false ) ;
+
+FCKToolbarFontSizeCombo.prototype.GetLabel = function()
+{
+	return FCKLang.FontSize ;
+}
+
+FCKToolbarFontSizeCombo.prototype.GetStyles = function()
+{
+	var baseStyle = FCKStyles.GetStyle( '_FCK_Size' ) ;
+
+	if ( !baseStyle )
+	{
+		alert( "The FCKConfig.CoreStyles['FontFace'] setting was not found. Please check the fckconfig.js file" ) ;
+		return {} ;
+	}
+
+	var styles = {} ;
+
+	var fonts = FCKConfig.FontSizes.split(';') ;
+
+	for ( var i = 0 ; i < fonts.length ; i++ )
+	{
+		var fontParts = fonts[i].split('/') ;
+		var font = fontParts[0] ;
+		var caption = fontParts[1] || font ;
+
+		var style = FCKTools.CloneObject( baseStyle ) ;
+		style.SetVariable( 'Size', font ) ;
+		style.Label = caption ;
+
+		styles[ caption ] = style ;
+	}
+
+	return styles ;
+}
+
+FCKToolbarFontSizeCombo.prototype.RefreshActiveItems = FCKToolbarStyleCombo.prototype.RefreshActiveItems ;
+
+FCKToolbarFontSizeCombo.prototype.StyleCombo_OnBeforeClick = FCKToolbarFontsCombo.prototype.StyleCombo_OnBeforeClick ;


Property changes on: announcement/trunk/src/main/webapp/fckeditor/editor/_source/classes/fcktoolbarfontsizecombo.js
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/webapp/fckeditor/editor/_source/classes/fcktoolbarpanelbutton.js
===================================================================
--- announcement/trunk/src/main/webapp/fckeditor/editor/_source/classes/fcktoolbarpanelbutton.js	                        (rev 0)
+++ announcement/trunk/src/main/webapp/fckeditor/editor/_source/classes/fcktoolbarpanelbutton.js	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,103 @@
+/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2008 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * FCKToolbarPanelButton Class: represents a special button in the toolbar
+ * that shows a panel when pressed.
+ */
+
+var FCKToolbarPanelButton = function( commandName, label, tooltip, style, icon )
+{
+	this.CommandName = commandName ;
+
+	var oIcon ;
+
+	if ( icon == null )
+		oIcon = FCKConfig.SkinPath + 'toolbar/' + commandName.toLowerCase() + '.gif' ;
+	else if ( typeof( icon ) == 'number' )
+		oIcon = [ FCKConfig.SkinPath + 'fck_strip.gif', 16, icon ] ;
+
+	var oUIButton = this._UIButton = new FCKToolbarButtonUI( commandName, label, tooltip, oIcon, style ) ;
+	oUIButton._FCKToolbarPanelButton = this ;
+	oUIButton.ShowArrow = true ;
+	oUIButton.OnClick = FCKToolbarPanelButton_OnButtonClick ;
+}
+
+FCKToolbarPanelButton.prototype.TypeName = 'FCKToolbarPanelButton' ;
+
+FCKToolbarPanelButton.prototype.Create = function( parentElement )
+{
+	parentElement.className += 'Menu' ;
+
+	this._UIButton.Create( parentElement ) ;
+
+	var oPanel = FCK.ToolbarSet.CurrentInstance.Commands.GetCommand( this.CommandName )._Panel ;
+	this.RegisterPanel( oPanel ) ;
+}
+
+FCKToolbarPanelButton.prototype.RegisterPanel = function( oPanel )
+{
+	if ( oPanel._FCKToolbarPanelButton )
+		return ;
+
+	oPanel._FCKToolbarPanelButton = this ;
+
+	var eLineDiv = oPanel.Document.body.appendChild( oPanel.Document.createElement( 'div' ) ) ;
+	eLineDiv.style.position = 'absolute' ;
+	eLineDiv.style.top = '0px' ;
+
+	var eLine = oPanel._FCKToolbarPanelButtonLineDiv = eLineDiv.appendChild( oPanel.Document.createElement( 'IMG' ) ) ;
+	eLine.className = 'TB_ConnectionLine' ;
+	eLine.style.position = 'absolute' ;
+//	eLine.style.backgroundColor = 'Red' ;
+	eLine.src = FCK_SPACER_PATH ;
+
+	oPanel.OnHide = FCKToolbarPanelButton_OnPanelHide ;
+}
+
+/*
+	Events
+*/
+
+function FCKToolbarPanelButton_OnButtonClick( toolbarButton )
+{
+	var oButton = this._FCKToolbarPanelButton ;
+	var e = oButton._UIButton.MainElement ;
+
+	oButton._UIButton.ChangeState( FCK_TRISTATE_ON ) ;
+
+	// oButton.LineImg.style.width = ( e.offsetWidth - 2 ) + 'px' ;
+
+	var oCommand = FCK.ToolbarSet.CurrentInstance.Commands.GetCommand( oButton.CommandName ) ;
+	var oPanel = oCommand._Panel ;
+	oPanel._FCKToolbarPanelButtonLineDiv.style.width = ( e.offsetWidth - 2 ) + 'px' ;
+	oCommand.Execute( 0, e.offsetHeight - 1, e ) ; // -1 to be over the border
+}
+
+function FCKToolbarPanelButton_OnPanelHide()
+{
+	var oMenuButton = this._FCKToolbarPanelButton ;
+	oMenuButton._UIButton.ChangeState( FCK_TRISTATE_OFF ) ;
+}
+
+// The Panel Button works like a normal button so the refresh state functions
+// defined for the normal button can be reused here.
+FCKToolbarPanelButton.prototype.RefreshState	= FCKToolbarButton.prototype.RefreshState ;
+FCKToolbarPanelButton.prototype.Enable			= FCKToolbarButton.prototype.Enable ;
+FCKToolbarPanelButton.prototype.Disable			= FCKToolbarButton.prototype.Disable ;


Property changes on: announcement/trunk/src/main/webapp/fckeditor/editor/_source/classes/fcktoolbarpanelbutton.js
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/webapp/fckeditor/editor/_source/classes/fcktoolbarspecialcombo.js
===================================================================
--- announcement/trunk/src/main/webapp/fckeditor/editor/_source/classes/fcktoolbarspecialcombo.js	                        (rev 0)
+++ announcement/trunk/src/main/webapp/fckeditor/editor/_source/classes/fcktoolbarspecialcombo.js	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,146 @@
+/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2008 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * FCKToolbarSpecialCombo Class: This is a "abstract" base class to be used
+ * by the special combo toolbar elements like font name, font size, paragraph format, etc...
+ *
+ * The following properties and methods must be implemented when inheriting from
+ * this class:
+ * 	- Property:	CommandName							[ The command name to be executed ]
+ * 	- Method:	GetLabel()							[ Returns the label ]
+ * 	-			CreateItems( targetSpecialCombo )	[ Add all items in the special combo ]
+ */
+
+var FCKToolbarSpecialCombo = function()
+{
+	this.SourceView			= false ;
+	this.ContextSensitive	= true ;
+	this.FieldWidth			= null ;
+	this.PanelWidth			= null ;
+	this.PanelMaxHeight		= null ;
+	//this._LastValue			= null ;
+}
+
+
+FCKToolbarSpecialCombo.prototype.DefaultLabel = '' ;
+
+function FCKToolbarSpecialCombo_OnSelect( itemId, item )
+{
+	FCK.ToolbarSet.CurrentInstance.Commands.GetCommand( this.CommandName ).Execute( itemId, item ) ;
+}
+
+FCKToolbarSpecialCombo.prototype.Create = function( targetElement )
+{
+	this._Combo = new FCKSpecialCombo( this.GetLabel(), this.FieldWidth, this.PanelWidth, this.PanelMaxHeight, FCKBrowserInfo.IsIE ? window : FCKTools.GetElementWindow( targetElement ).parent ) ;
+
+	/*
+	this._Combo.FieldWidth		= this.FieldWidth		!= null ? this.FieldWidth		: 100 ;
+	this._Combo.PanelWidth		= this.PanelWidth		!= null ? this.PanelWidth		: 150 ;
+	this._Combo.PanelMaxHeight	= this.PanelMaxHeight	!= null ? this.PanelMaxHeight	: 150 ;
+	*/
+
+	//this._Combo.Command.Name = this.Command.Name;
+//	this._Combo.Label	= this.Label ;
+	this._Combo.Tooltip	= this.Tooltip ;
+	this._Combo.Style	= this.Style ;
+
+	this.CreateItems( this._Combo ) ;
+
+	this._Combo.Create( targetElement ) ;
+
+	this._Combo.CommandName = this.CommandName ;
+
+	this._Combo.OnSelect = FCKToolbarSpecialCombo_OnSelect ;
+}
+
+function FCKToolbarSpecialCombo_RefreshActiveItems( combo, value )
+{
+	combo.DeselectAll() ;
+	combo.SelectItem( value ) ;
+	combo.SetLabelById( value ) ;
+}
+
+FCKToolbarSpecialCombo.prototype.RefreshState = function()
+{
+	// Gets the actual state.
+	var eState ;
+
+//	if ( FCK.EditMode == FCK_EDITMODE_SOURCE && ! this.SourceView )
+//		eState = FCK_TRISTATE_DISABLED ;
+//	else
+//	{
+		var sValue = FCK.ToolbarSet.CurrentInstance.Commands.GetCommand( this.CommandName ).GetState() ;
+
+//		FCKDebug.Output( 'RefreshState of Special Combo "' + this.TypeOf + '" - State: ' + sValue ) ;
+
+		if ( sValue != FCK_TRISTATE_DISABLED )
+		{
+			eState = FCK_TRISTATE_ON ;
+
+			if ( this.RefreshActiveItems )
+				this.RefreshActiveItems( this._Combo, sValue ) ;
+			else
+			{
+				if ( this._LastValue !== sValue)
+				{
+					this._LastValue = sValue ;
+
+					if ( !sValue || sValue.length == 0 )
+					{
+						this._Combo.DeselectAll() ;
+						this._Combo.SetLabel( this.DefaultLabel ) ;
+					}
+					else
+						FCKToolbarSpecialCombo_RefreshActiveItems( this._Combo, sValue ) ;
+				}
+			}
+		}
+		else
+			eState = FCK_TRISTATE_DISABLED ;
+//	}
+
+	// If there are no state changes then do nothing and return.
+	if ( eState == this.State ) return ;
+
+	if ( eState == FCK_TRISTATE_DISABLED )
+	{
+		this._Combo.DeselectAll() ;
+		this._Combo.SetLabel( '' ) ;
+	}
+
+	// Sets the actual state.
+	this.State = eState ;
+
+	// Updates the graphical state.
+	this._Combo.SetEnabled( eState != FCK_TRISTATE_DISABLED ) ;
+}
+
+FCKToolbarSpecialCombo.prototype.Enable = function()
+{
+	this.RefreshState() ;
+}
+
+FCKToolbarSpecialCombo.prototype.Disable = function()
+{
+	this.State = FCK_TRISTATE_DISABLED ;
+	this._Combo.DeselectAll() ;
+	this._Combo.SetLabel( '' ) ;
+	this._Combo.SetEnabled( false ) ;
+}


Property changes on: announcement/trunk/src/main/webapp/fckeditor/editor/_source/classes/fcktoolbarspecialcombo.js
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/webapp/fckeditor/editor/_source/classes/fcktoolbarstylecombo.js
===================================================================
--- announcement/trunk/src/main/webapp/fckeditor/editor/_source/classes/fcktoolbarstylecombo.js	                        (rev 0)
+++ announcement/trunk/src/main/webapp/fckeditor/editor/_source/classes/fcktoolbarstylecombo.js	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,200 @@
+/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2008 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * FCKToolbarPanelButton Class: Handles the Fonts combo selector.
+ */
+
+var FCKToolbarStyleCombo = function( tooltip, style )
+{
+	if ( tooltip === false )
+		return ;
+
+	this.CommandName = 'Style' ;
+	this.Label		= this.GetLabel() ;
+	this.Tooltip	= tooltip ? tooltip : this.Label ;
+	this.Style		= style ? style : FCK_TOOLBARITEM_ICONTEXT ;
+
+	this.DefaultLabel = FCKConfig.DefaultStyleLabel || '' ;
+}
+
+// Inherit from FCKToolbarSpecialCombo.
+FCKToolbarStyleCombo.prototype = new FCKToolbarSpecialCombo ;
+
+FCKToolbarStyleCombo.prototype.GetLabel = function()
+{
+	return FCKLang.Style ;
+}
+
+FCKToolbarStyleCombo.prototype.GetStyles = function()
+{
+	var styles = {} ;
+	var allStyles = FCK.ToolbarSet.CurrentInstance.Styles.GetStyles() ;
+
+	for ( var styleName in allStyles )
+	{
+		var style = allStyles[ styleName ] ;
+		if ( !style.IsCore )
+			styles[ styleName ] = style ;
+	}
+	return styles ;
+}
+
+FCKToolbarStyleCombo.prototype.CreateItems = function( targetSpecialCombo )
+{
+	var targetDoc = targetSpecialCombo._Panel.Document ;
+
+	// Add the Editor Area CSS to the panel so the style classes are previewed correctly.
+	FCKTools.AppendStyleSheet( targetDoc, FCKConfig.ToolbarComboPreviewCSS ) ;
+	FCKTools.AppendStyleString( targetDoc, FCKConfig.EditorAreaStyles ) ;
+	targetDoc.body.className += ' ForceBaseFont' ;
+
+	// Add ID and Class to the body.
+	FCKConfig.ApplyBodyAttributes( targetDoc.body ) ;
+
+	// Get the styles list.
+	var styles = this.GetStyles() ;
+
+	for ( var styleName in styles )
+	{
+		var style = styles[ styleName ] ;
+
+		// Object type styles have no preview.
+		var caption = style.GetType() == FCK_STYLE_OBJECT ?
+			styleName :
+			FCKToolbarStyleCombo_BuildPreview( style, style.Label || styleName ) ;
+
+		var item = targetSpecialCombo.AddItem( styleName, caption ) ;
+
+		item.Style = style ;
+	}
+
+	// We must prepare the list before showing it.
+	targetSpecialCombo.OnBeforeClick = this.StyleCombo_OnBeforeClick ;
+}
+
+FCKToolbarStyleCombo.prototype.RefreshActiveItems = function( targetSpecialCombo )
+{
+	var startElement = FCK.ToolbarSet.CurrentInstance.Selection.GetBoundaryParentElement( true ) ;
+
+	if ( startElement )
+	{
+		var path = new FCKElementPath( startElement ) ;
+		var elements = path.Elements ;
+
+		for ( var e = 0 ; e < elements.length ; e++ )
+		{
+			for ( var i in targetSpecialCombo.Items )
+			{
+				var item = targetSpecialCombo.Items[i] ;
+				var style = item.Style ;
+
+				if ( style.CheckElementRemovable( elements[ e ], true ) )
+				{
+					targetSpecialCombo.SetLabel( style.Label || style.Name ) ;
+					return ;
+				}
+			}
+		}
+	}
+
+	targetSpecialCombo.SetLabel( this.DefaultLabel ) ;
+}
+
+FCKToolbarStyleCombo.prototype.StyleCombo_OnBeforeClick = function( targetSpecialCombo )
+{
+	// Two things are done here:
+	//	- In a control selection, get the element name, so we'll display styles
+	//	  for that element only.
+	//	- Select the styles that are active for the current selection.
+
+	// Clear the current selection.
+	targetSpecialCombo.DeselectAll() ;
+
+	var startElement ;
+	var path ;
+	var tagName ;
+
+	var selection = FCK.ToolbarSet.CurrentInstance.Selection ;
+
+	if ( selection.GetType() == 'Control' )
+	{
+		startElement = selection.GetSelectedElement() ;
+		tagName = startElement.nodeName.toLowerCase() ;
+	}
+	else
+	{
+		startElement = selection.GetBoundaryParentElement( true ) ;
+		path = new FCKElementPath( startElement ) ;
+	}
+
+	for ( var i in targetSpecialCombo.Items )
+	{
+		var item = targetSpecialCombo.Items[i] ;
+		var style = item.Style ;
+
+		if ( ( tagName && style.Element == tagName ) || ( !tagName && style.GetType() != FCK_STYLE_OBJECT ) )
+		{
+			item.style.display = '' ;
+
+			if ( ( path && style.CheckActive( path ) ) || ( !path && style.CheckElementRemovable( startElement, true ) ) )
+				targetSpecialCombo.SelectItem( style.Name ) ;
+		}
+		else
+			item.style.display = 'none' ;
+	}
+}
+
+function FCKToolbarStyleCombo_BuildPreview( style, caption )
+{
+	var styleType = style.GetType() ;
+	var html = [] ;
+
+	if ( styleType == FCK_STYLE_BLOCK )
+		html.push( '<div class="BaseFont">' ) ;
+
+	var elementName = style.Element ;
+
+	// Avoid <bdo> in the preview.
+	if ( elementName == 'bdo' )
+		elementName = 'span' ;
+
+	html = [ '<', elementName ] ;
+
+	// Assign all defined attributes.
+	var attribs	= style._StyleDesc.Attributes ;
+	if ( attribs )
+	{
+		for ( var att in attribs )
+		{
+			html.push( ' ', att, '="', style.GetFinalAttributeValue( att ), '"' ) ;
+		}
+	}
+
+	// Assign the style attribute.
+	if ( style._GetStyleText().length > 0 )
+		html.push( ' style="', style.GetFinalStyleValue(), '"' ) ;
+
+	html.push( '>', caption, '</', elementName, '>' ) ;
+
+	if ( styleType == FCK_STYLE_BLOCK )
+		html.push( '</div>' ) ;
+
+	return html.join( '' ) ;
+}


Property changes on: announcement/trunk/src/main/webapp/fckeditor/editor/_source/classes/fcktoolbarstylecombo.js
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/webapp/fckeditor/editor/_source/classes/fckw3crange.js
===================================================================
--- announcement/trunk/src/main/webapp/fckeditor/editor/_source/classes/fckw3crange.js	                        (rev 0)
+++ announcement/trunk/src/main/webapp/fckeditor/editor/_source/classes/fckw3crange.js	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,451 @@
+/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2008 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * This class partially implements the W3C DOM Range for browser that don't
+ * support the standards (like IE):
+ * http://www.w3.org/TR/DOM-Level-2-Traversal-Range/ranges.html
+ */
+
+var FCKW3CRange = function( parentDocument )
+{
+	this._Document = parentDocument ;
+
+	this.startContainer	= null ;
+	this.startOffset	= null ;
+	this.endContainer	= null ;
+	this.endOffset		= null ;
+	this.collapsed		= true ;
+}
+
+FCKW3CRange.CreateRange = function( parentDocument )
+{
+	// We could opt to use the Range implementation of the browsers. The problem
+	// is that every browser have different bugs on their implementations,
+	// mostly related to different interpretations of the W3C specifications.
+	// So, for now, let's use our implementation and pray for browsers fixings
+	// soon. Otherwise will go crazy on trying to find out workarounds.
+	/*
+	// Get the browser implementation of the range, if available.
+	if ( parentDocument.createRange )
+	{
+		var range = parentDocument.createRange() ;
+		if ( typeof( range.startContainer ) != 'undefined' )
+			return range ;
+	}
+	*/
+	return new FCKW3CRange( parentDocument ) ;
+}
+
+FCKW3CRange.CreateFromRange = function( parentDocument, sourceRange )
+{
+	var range = FCKW3CRange.CreateRange( parentDocument ) ;
+	range.setStart( sourceRange.startContainer, sourceRange.startOffset ) ;
+	range.setEnd( sourceRange.endContainer, sourceRange.endOffset ) ;
+	return range ;
+}
+
+FCKW3CRange.prototype =
+{
+
+	_UpdateCollapsed : function()
+	{
+      this.collapsed = ( this.startContainer == this.endContainer && this.startOffset == this.endOffset ) ;
+	},
+
+	// W3C requires a check for the new position. If it is after the end
+	// boundary, the range should be collapsed to the new start. It seams we
+	// will not need this check for our use of this class so we can ignore it for now.
+	setStart : function( refNode, offset )
+	{
+		this.startContainer	= refNode ;
+		this.startOffset	= offset ;
+
+		if ( !this.endContainer )
+		{
+			this.endContainer	= refNode ;
+			this.endOffset		= offset ;
+		}
+
+		this._UpdateCollapsed() ;
+	},
+
+	// W3C requires a check for the new position. If it is before the start
+	// boundary, the range should be collapsed to the new end. It seams we
+	// will not need this check for our use of this class so we can ignore it for now.
+	setEnd : function( refNode, offset )
+	{
+		this.endContainer	= refNode ;
+		this.endOffset		= offset ;
+
+		if ( !this.startContainer )
+		{
+			this.startContainer	= refNode ;
+			this.startOffset	= offset ;
+		}
+
+		this._UpdateCollapsed() ;
+	},
+
+	setStartAfter : function( refNode )
+	{
+		this.setStart( refNode.parentNode, FCKDomTools.GetIndexOf( refNode ) + 1 ) ;
+	},
+
+	setStartBefore : function( refNode )
+	{
+		this.setStart( refNode.parentNode, FCKDomTools.GetIndexOf( refNode ) ) ;
+	},
+
+	setEndAfter : function( refNode )
+	{
+		this.setEnd( refNode.parentNode, FCKDomTools.GetIndexOf( refNode ) + 1 ) ;
+	},
+
+	setEndBefore : function( refNode )
+	{
+		this.setEnd( refNode.parentNode, FCKDomTools.GetIndexOf( refNode ) ) ;
+	},
+
+	collapse : function( toStart )
+	{
+		if ( toStart )
+		{
+			this.endContainer	= this.startContainer ;
+			this.endOffset		= this.startOffset ;
+		}
+		else
+		{
+			this.startContainer	= this.endContainer ;
+			this.startOffset	= this.endOffset ;
+		}
+
+		this.collapsed = true ;
+	},
+
+	selectNodeContents : function( refNode )
+	{
+		this.setStart( refNode, 0 ) ;
+		this.setEnd( refNode, refNode.nodeType == 3 ? refNode.data.length : refNode.childNodes.length ) ;
+	},
+
+	insertNode : function( newNode )
+	{
+		var startContainer = this.startContainer ;
+		var startOffset = this.startOffset ;
+
+		// If we are in a text node.
+		if ( startContainer.nodeType == 3 )
+		{
+			startContainer.splitText( startOffset ) ;
+
+			// Check if it is necessary to update the end boundary.
+			if ( startContainer == this.endContainer )
+				this.setEnd( startContainer.nextSibling, this.endOffset - this.startOffset ) ;
+
+			// Insert the new node it after the text node.
+			FCKDomTools.InsertAfterNode( startContainer, newNode ) ;
+
+			return ;
+		}
+		else
+		{
+			// Simply insert the new node before the current start node.
+			startContainer.insertBefore( newNode, startContainer.childNodes[ startOffset ] || null ) ;
+
+			// Check if it is necessary to update the end boundary.
+			if ( startContainer == this.endContainer )
+			{
+				this.endOffset++ ;
+				this.collapsed = false ;
+			}
+		}
+	},
+
+	deleteContents : function()
+	{
+		if ( this.collapsed )
+			return ;
+
+		this._ExecContentsAction( 0 ) ;
+	},
+
+	extractContents : function()
+	{
+		var docFrag = new FCKDocumentFragment( this._Document ) ;
+
+		if ( !this.collapsed )
+			this._ExecContentsAction( 1, docFrag ) ;
+
+		return docFrag ;
+	},
+
+	// The selection may be lost when cloning (due to the splitText() call).
+	cloneContents : function()
+	{
+		var docFrag = new FCKDocumentFragment( this._Document ) ;
+
+		if ( !this.collapsed )
+			this._ExecContentsAction( 2, docFrag ) ;
+
+		return docFrag ;
+	},
+
+	_ExecContentsAction : function( action, docFrag )
+	{
+		var startNode	= this.startContainer ;
+		var endNode		= this.endContainer ;
+
+		var startOffset	= this.startOffset ;
+		var endOffset	= this.endOffset ;
+
+		var removeStartNode	= false ;
+		var removeEndNode	= false ;
+
+		// Check the start and end nodes and make the necessary removals or changes.
+
+		// Start from the end, otherwise DOM mutations (splitText) made in the
+		// start boundary may interfere on the results here.
+
+		// For text containers, we must simply split the node and point to the
+		// second part. The removal will be handled by the rest of the code .
+		if ( endNode.nodeType == 3 )
+			endNode = endNode.splitText( endOffset ) ;
+		else
+		{
+			// If the end container has children and the offset is pointing
+			// to a child, then we should start from it.
+			if ( endNode.childNodes.length > 0 )
+			{
+				// If the offset points after the last node.
+				if ( endOffset > endNode.childNodes.length - 1 )
+				{
+					// Let's create a temporary node and mark it for removal.
+					endNode = FCKDomTools.InsertAfterNode( endNode.lastChild, this._Document.createTextNode('') ) ;
+					removeEndNode = true ;
+				}
+				else
+					endNode = endNode.childNodes[ endOffset ] ;
+			}
+		}
+
+		// For text containers, we must simply split the node. The removal will
+		// be handled by the rest of the code .
+		if ( startNode.nodeType == 3 )
+		{
+			startNode.splitText( startOffset ) ;
+
+			// In cases the end node is the same as the start node, the above
+			// splitting will also split the end, so me must move the end to
+			// the second part of the split.
+			if ( startNode == endNode )
+				endNode = startNode.nextSibling ;
+		}
+		else
+		{
+			// If the start container has children and the offset is pointing
+			// to a child, then we should start from its previous sibling.
+
+			// If the offset points to the first node, we don't have a
+			// sibling, so let's use the first one, but mark it for removal.
+			if ( startOffset == 0 )
+			{
+				// Let's create a temporary node and mark it for removal.
+				startNode = startNode.insertBefore( this._Document.createTextNode(''), startNode.firstChild ) ;
+				removeStartNode = true ;
+			}
+			else if ( startOffset > startNode.childNodes.length - 1 )
+			{
+				// Let's create a temporary node and mark it for removal.
+				startNode = startNode.appendChild( this._Document.createTextNode('') ) ;
+				removeStartNode = true ;
+			}
+			else
+				startNode = startNode.childNodes[ startOffset ].previousSibling ;
+		}
+
+		// Get the parent nodes tree for the start and end boundaries.
+		var startParents	= FCKDomTools.GetParents( startNode ) ;
+		var endParents		= FCKDomTools.GetParents( endNode ) ;
+
+		// Compare them, to find the top most siblings.
+		var i, topStart, topEnd ;
+
+		for ( i = 0 ; i < startParents.length ; i++ )
+		{
+			topStart	= startParents[i] ;
+			topEnd		= endParents[i] ;
+
+			// The compared nodes will match until we find the top most
+			// siblings (different nodes that have the same parent).
+			// "i" will hold the index in the parents array for the top
+			// most element.
+			if ( topStart != topEnd )
+				break ;
+		}
+
+		var clone, levelStartNode, levelClone, currentNode, currentSibling ;
+
+		if ( docFrag )
+			clone = docFrag.RootNode ;
+
+		// Remove all successive sibling nodes for every node in the
+		// startParents tree.
+		for ( var j = i ; j < startParents.length ; j++ )
+		{
+			levelStartNode = startParents[j] ;
+
+			// For Extract and Clone, we must clone this level.
+			if ( clone && levelStartNode != startNode )		// action = 0 = Delete
+				levelClone = clone.appendChild( levelStartNode.cloneNode( levelStartNode == startNode ) ) ;
+
+			currentNode = levelStartNode.nextSibling ;
+
+			while( currentNode )
+			{
+				// Stop processing when the current node matches a node in the
+				// endParents tree or if it is the endNode.
+				if ( currentNode == endParents[j] || currentNode == endNode )
+					break ;
+
+				// Cache the next sibling.
+				currentSibling = currentNode.nextSibling ;
+
+				// If cloning, just clone it.
+				if ( action == 2 )	// 2 = Clone
+					clone.appendChild( currentNode.cloneNode( true ) ) ;
+				else
+				{
+					// Both Delete and Extract will remove the node.
+					currentNode.parentNode.removeChild( currentNode ) ;
+
+					// When Extracting, move the removed node to the docFrag.
+					if ( action == 1 )	// 1 = Extract
+						clone.appendChild( currentNode ) ;
+				}
+
+				currentNode = currentSibling ;
+			}
+
+			if ( clone )
+				clone = levelClone ;
+		}
+
+		if ( docFrag )
+			clone = docFrag.RootNode ;
+
+		// Remove all previous sibling nodes for every node in the
+		// endParents tree.
+		for ( var k = i ; k < endParents.length ; k++ )
+		{
+			levelStartNode = endParents[k] ;
+
+			// For Extract and Clone, we must clone this level.
+			if ( action > 0 && levelStartNode != endNode )		// action = 0 = Delete
+				levelClone = clone.appendChild( levelStartNode.cloneNode( levelStartNode == endNode ) ) ;
+
+			// The processing of siblings may have already been done by the parent.
+			if ( !startParents[k] || levelStartNode.parentNode != startParents[k].parentNode )
+			{
+				currentNode = levelStartNode.previousSibling ;
+
+				while( currentNode )
+				{
+					// Stop processing when the current node matches a node in the
+					// startParents tree or if it is the startNode.
+					if ( currentNode == startParents[k] || currentNode == startNode )
+						break ;
+
+					// Cache the next sibling.
+					currentSibling = currentNode.previousSibling ;
+
+					// If cloning, just clone it.
+					if ( action == 2 )	// 2 = Clone
+						clone.insertBefore( currentNode.cloneNode( true ), clone.firstChild ) ;
+					else
+					{
+						// Both Delete and Extract will remove the node.
+						currentNode.parentNode.removeChild( currentNode ) ;
+
+						// When Extracting, mode the removed node to the docFrag.
+						if ( action == 1 )	// 1 = Extract
+							clone.insertBefore( currentNode, clone.firstChild ) ;
+					}
+
+					currentNode = currentSibling ;
+				}
+			}
+
+			if ( clone )
+				clone = levelClone ;
+		}
+
+		if ( action == 2 )		// 2 = Clone.
+		{
+			// No changes in the DOM should be done, so fix the split text (if any).
+
+			var startTextNode = this.startContainer ;
+			if ( startTextNode.nodeType == 3 )
+			{
+				startTextNode.data += startTextNode.nextSibling.data ;
+				startTextNode.parentNode.removeChild( startTextNode.nextSibling ) ;
+			}
+
+			var endTextNode = this.endContainer ;
+			if ( endTextNode.nodeType == 3 && endTextNode.nextSibling )
+			{
+				endTextNode.data += endTextNode.nextSibling.data ;
+				endTextNode.parentNode.removeChild( endTextNode.nextSibling ) ;
+			}
+		}
+		else
+		{
+			// Collapse the range.
+
+			// If a node has been partially selected, collapse the range between
+			// topStart and topEnd. Otherwise, simply collapse it to the start. (W3C specs).
+			if ( topStart && topEnd && ( startNode.parentNode != topStart.parentNode || endNode.parentNode != topEnd.parentNode ) )
+			{
+				var endIndex = FCKDomTools.GetIndexOf( topEnd ) ;
+
+				// If the start node is to be removed, we must correct the
+				// index to reflect the removal.
+				if ( removeStartNode && topEnd.parentNode == startNode.parentNode )
+					endIndex-- ;
+
+				this.setStart( topEnd.parentNode, endIndex ) ;
+			}
+
+			// Collapse it to the start.
+			this.collapse( true ) ;
+		}
+
+		// Cleanup any marked node.
+		if( removeStartNode )
+			startNode.parentNode.removeChild( startNode ) ;
+
+		if( removeEndNode && endNode.parentNode )
+			endNode.parentNode.removeChild( endNode ) ;
+	},
+
+	cloneRange : function()
+	{
+		return FCKW3CRange.CreateFromRange( this._Document, this ) ;
+	}
+} ;


Property changes on: announcement/trunk/src/main/webapp/fckeditor/editor/_source/classes/fckw3crange.js
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/webapp/fckeditor/editor/_source/classes/fckxml.js
===================================================================
--- announcement/trunk/src/main/webapp/fckeditor/editor/_source/classes/fckxml.js	                        (rev 0)
+++ announcement/trunk/src/main/webapp/fckeditor/editor/_source/classes/fckxml.js	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,108 @@
+/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2008 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * FCKXml Class: class to load and manipulate XML files.
+ * (IE specific implementation)
+ */
+
+var FCKXml = function()
+{
+	this.Error = false ;
+}
+
+FCKXml.GetAttribute = function( node, attName, defaultValue )
+{
+	var attNode = node.attributes.getNamedItem( attName ) ;
+	return attNode ? attNode.value : defaultValue ;
+}
+
+/**
+ * Transforms a XML element node in a JavaScript object. Attributes defined for
+ * the element will be available as properties, as long as child  element
+ * nodes, but the later will generate arrays with property names prefixed with "$".
+ *
+ * For example, the following XML element:
+ *
+ *		<SomeNode name="Test" key="2">
+ *			<MyChild id="10">
+ *				<OtherLevel name="Level 3" />
+ *			</MyChild>
+ *			<MyChild id="25" />
+ *			<AnotherChild price="499" />
+ *		</SomeNode>
+ *
+ * ... results in the following object:
+ *
+ *		{
+ *			name : "Test",
+ *			key : "2",
+ *			$MyChild :
+ *			[
+ *				{
+ *					id : "10",
+ *					$OtherLevel :
+ *					{
+ *						name : "Level 3"
+ *					}
+ *				},
+ *				{
+ *					id : "25"
+ *				}
+ *			],
+ *			$AnotherChild :
+ *			[
+ *				{
+ *					price : "499"
+ *				}
+ *			]
+ *		}
+ */
+FCKXml.TransformToObject = function( element )
+{
+	if ( !element )
+		return null ;
+
+	var obj = {} ;
+
+	var attributes = element.attributes ;
+	for ( var i = 0 ; i < attributes.length ; i++ )
+	{
+		var att = attributes[i] ;
+		obj[ att.name ] = att.value ;
+	}
+
+	var childNodes = element.childNodes ;
+	for ( i = 0 ; i < childNodes.length ; i++ )
+	{
+		var child = childNodes[i] ;
+
+		if ( child.nodeType == 1 )
+		{
+			var childName = '$' + child.nodeName ;
+			var childList = obj[ childName ] ;
+			if ( !childList )
+				childList = obj[ childName ] = [] ;
+
+			childList.push( this.TransformToObject( child ) ) ;
+		}
+	}
+
+	return obj ;
+}


Property changes on: announcement/trunk/src/main/webapp/fckeditor/editor/_source/classes/fckxml.js
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/webapp/fckeditor/editor/_source/classes/fckxml_gecko.js
===================================================================
--- announcement/trunk/src/main/webapp/fckeditor/editor/_source/classes/fckxml_gecko.js	                        (rev 0)
+++ announcement/trunk/src/main/webapp/fckeditor/editor/_source/classes/fckxml_gecko.js	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,106 @@
+/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2008 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * FCKXml Class: class to load and manipulate XML files.
+ */
+
+FCKXml.prototype =
+{
+	LoadUrl : function( urlToCall )
+	{
+		this.Error = false ;
+
+		var oXml ;
+		var oXmlHttp = FCKTools.CreateXmlObject( 'XmlHttp' ) ;
+		oXmlHttp.open( 'GET', urlToCall, false ) ;
+		oXmlHttp.send( null ) ;
+
+		if ( oXmlHttp.status == 200 || oXmlHttp.status == 304 || ( oXmlHttp.status == 0 && oXmlHttp.readyState == 4 ) )
+		{
+			oXml = oXmlHttp.responseXML ;
+			// #1426: Fallback if responseXML isn't set for some
+			// reason (e.g. improperly configured web server)
+			if ( !oXml )
+				oXml = (new DOMParser()).parseFromString( oXmlHttp.responseText, 'text/xml' ) ;
+		}
+		else
+			oXml = null ;
+
+		if ( oXml )
+		{
+			// Try to access something on it.
+			try
+			{
+				var test = oXml.firstChild ;
+			}
+			catch (e)
+			{
+				// If document.domain has been changed (#123), we'll have a security
+				// error at this point. The workaround here is parsing the responseText:
+				// http://alexander.kirk.at/2006/07/27/firefox-15-xmlhttprequest-reqresponsexml-and-documentdomain/
+				oXml = (new DOMParser()).parseFromString( oXmlHttp.responseText, 'text/xml' ) ;
+			}
+		}
+
+		if ( !oXml || !oXml.firstChild )
+		{
+			this.Error = true ;
+			if ( window.confirm( 'Error loading "' + urlToCall + '" (HTTP Status: ' + oXmlHttp.status + ').\r\nDo you want to see the server response dump?' ) )
+				alert( oXmlHttp.responseText ) ;
+		}
+
+		this.DOMDocument = oXml ;
+	},
+
+	SelectNodes : function( xpath, contextNode )
+	{
+		if ( this.Error )
+			return new Array() ;
+
+		var aNodeArray = new Array();
+
+		var xPathResult = this.DOMDocument.evaluate( xpath, contextNode ? contextNode : this.DOMDocument,
+				this.DOMDocument.createNSResolver(this.DOMDocument.documentElement), XPathResult.ORDERED_NODE_ITERATOR_TYPE, null) ;
+		if ( xPathResult )
+		{
+			var oNode = xPathResult.iterateNext() ;
+			while( oNode )
+			{
+				aNodeArray[aNodeArray.length] = oNode ;
+				oNode = xPathResult.iterateNext();
+			}
+		}
+		return aNodeArray ;
+	},
+
+	SelectSingleNode : function( xpath, contextNode )
+	{
+		if ( this.Error )
+			return null ;
+
+		var xPathResult = this.DOMDocument.evaluate( xpath, contextNode ? contextNode : this.DOMDocument,
+				this.DOMDocument.createNSResolver(this.DOMDocument.documentElement), 9, null);
+
+		if ( xPathResult && xPathResult.singleNodeValue )
+			return xPathResult.singleNodeValue ;
+		else
+			return null ;
+	}
+} ;


Property changes on: announcement/trunk/src/main/webapp/fckeditor/editor/_source/classes/fckxml_gecko.js
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/webapp/fckeditor/editor/_source/classes/fckxml_ie.js
===================================================================
--- announcement/trunk/src/main/webapp/fckeditor/editor/_source/classes/fckxml_ie.js	                        (rev 0)
+++ announcement/trunk/src/main/webapp/fckeditor/editor/_source/classes/fckxml_ie.js	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,93 @@
+/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2008 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * FCKXml Class: class to load and manipulate XML files.
+ * (IE specific implementation)
+ */
+
+FCKXml.prototype =
+{
+	LoadUrl : function( urlToCall )
+	{
+		this.Error = false ;
+
+		var oXmlHttp = FCKTools.CreateXmlObject( 'XmlHttp' ) ;
+
+		if ( !oXmlHttp )
+		{
+			this.Error = true ;
+			return ;
+		}
+
+		oXmlHttp.open( "GET", urlToCall, false ) ;
+
+		oXmlHttp.send( null ) ;
+
+		if ( oXmlHttp.status == 200 || oXmlHttp.status == 304 || ( oXmlHttp.status == 0 && oXmlHttp.readyState == 4 ) )
+		{
+			this.DOMDocument = oXmlHttp.responseXML ;
+
+			// #1426: Fallback if responseXML isn't set for some
+			// reason (e.g. improperly configured web server)
+			if ( !this.DOMDocument || this.DOMDocument.firstChild == null )
+			{
+				this.DOMDocument = FCKTools.CreateXmlObject( 'DOMDocument' ) ;
+				this.DOMDocument.async = false ;
+				this.DOMDocument.resolveExternals = false ;
+				this.DOMDocument.loadXML( oXmlHttp.responseText ) ;
+			}
+		}
+		else
+		{
+			this.DOMDocument = null ;
+		}
+
+		if ( this.DOMDocument == null || this.DOMDocument.firstChild == null )
+		{
+			this.Error = true ;
+			if (window.confirm( 'Error loading "' + urlToCall + '"\r\nDo you want to see more info?' ) )
+				alert( 'URL requested: "' + urlToCall + '"\r\n' +
+							'Server response:\r\nStatus: ' + oXmlHttp.status + '\r\n' +
+							'Response text:\r\n' + oXmlHttp.responseText ) ;
+		}
+	},
+
+	SelectNodes : function( xpath, contextNode )
+	{
+		if ( this.Error )
+			return new Array() ;
+
+		if ( contextNode )
+			return contextNode.selectNodes( xpath ) ;
+		else
+			return this.DOMDocument.selectNodes( xpath ) ;
+	},
+
+	SelectSingleNode : function( xpath, contextNode )
+	{
+		if ( this.Error )
+			return null ;
+
+		if ( contextNode )
+			return contextNode.selectSingleNode( xpath ) ;
+		else
+			return this.DOMDocument.selectSingleNode( xpath ) ;
+	}
+} ;


Property changes on: announcement/trunk/src/main/webapp/fckeditor/editor/_source/classes/fckxml_ie.js
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/webapp/fckeditor/editor/_source/commandclasses/fck_othercommands.js
===================================================================
--- announcement/trunk/src/main/webapp/fckeditor/editor/_source/commandclasses/fck_othercommands.js	                        (rev 0)
+++ announcement/trunk/src/main/webapp/fckeditor/editor/_source/commandclasses/fck_othercommands.js	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,518 @@
+/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2008 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * Definition of other commands that are not available internaly in the
+ * browser (see FCKNamedCommand).
+ */
+
+// ### General Dialog Box Commands.
+var FCKDialogCommand = function( name, title, url, width, height, getStateFunction, getStateParam, customValue )
+{
+	this.Name	= name ;
+	this.Title	= title ;
+	this.Url	= url ;
+	this.Width	= width ;
+	this.Height	= height ;
+	this.CustomValue = customValue ;
+
+	this.GetStateFunction	= getStateFunction ;
+	this.GetStateParam		= getStateParam ;
+
+	this.Resizable = false ;
+}
+
+FCKDialogCommand.prototype.Execute = function()
+{
+	FCKDialog.OpenDialog( 'FCKDialog_' + this.Name , this.Title, this.Url, this.Width, this.Height, this.CustomValue, null, this.Resizable ) ;
+}
+
+FCKDialogCommand.prototype.GetState = function()
+{
+	if ( this.GetStateFunction )
+		return this.GetStateFunction( this.GetStateParam ) ;
+	else
+		return FCK.EditMode == FCK_EDITMODE_WYSIWYG ? FCK_TRISTATE_OFF : FCK_TRISTATE_DISABLED ;
+}
+
+// Generic Undefined command (usually used when a command is under development).
+var FCKUndefinedCommand = function()
+{
+	this.Name = 'Undefined' ;
+}
+
+FCKUndefinedCommand.prototype.Execute = function()
+{
+	alert( FCKLang.NotImplemented ) ;
+}
+
+FCKUndefinedCommand.prototype.GetState = function()
+{
+	return FCK_TRISTATE_OFF ;
+}
+
+
+// ### FormatBlock
+var FCKFormatBlockCommand = function()
+{}
+
+FCKFormatBlockCommand.prototype =
+{
+	Name : 'FormatBlock',
+
+	Execute : FCKStyleCommand.prototype.Execute,
+
+	GetState : function()
+	{
+		return FCK.EditorDocument ? FCK_TRISTATE_OFF : FCK_TRISTATE_DISABLED ;
+	}
+};
+
+// ### FontName
+
+var FCKFontNameCommand = function()
+{}
+
+FCKFontNameCommand.prototype =
+{
+	Name		: 'FontName',
+	Execute		: FCKStyleCommand.prototype.Execute,
+	GetState	: FCKFormatBlockCommand.prototype.GetState
+};
+
+// ### FontSize
+var FCKFontSizeCommand = function()
+{}
+
+FCKFontSizeCommand.prototype =
+{
+	Name		: 'FontSize',
+	Execute		: FCKStyleCommand.prototype.Execute,
+	GetState	: FCKFormatBlockCommand.prototype.GetState
+};
+
+// ### Preview
+var FCKPreviewCommand = function()
+{
+	this.Name = 'Preview' ;
+}
+
+FCKPreviewCommand.prototype.Execute = function()
+{
+     FCK.Preview() ;
+}
+
+FCKPreviewCommand.prototype.GetState = function()
+{
+	return FCK_TRISTATE_OFF ;
+}
+
+// ### Save
+var FCKSaveCommand = function()
+{
+	this.Name = 'Save' ;
+}
+
+FCKSaveCommand.prototype.Execute = function()
+{
+	// Get the linked field form.
+	var oForm = FCK.GetParentForm() ;
+
+	if ( typeof( oForm.onsubmit ) == 'function' )
+	{
+		var bRet = oForm.onsubmit() ;
+		if ( bRet != null && bRet === false )
+			return ;
+	}
+
+	// Submit the form.
+	// If there's a button named "submit" then the form.submit() function is masked and
+	// can't be called in Mozilla, so we call the click() method of that button.
+	if ( typeof( oForm.submit ) == 'function' )
+		oForm.submit() ;
+	else
+		oForm.submit.click() ;
+}
+
+FCKSaveCommand.prototype.GetState = function()
+{
+	return FCK_TRISTATE_OFF ;
+}
+
+// ### NewPage
+var FCKNewPageCommand = function()
+{
+	this.Name = 'NewPage' ;
+}
+
+FCKNewPageCommand.prototype.Execute = function()
+{
+	FCKUndo.SaveUndoStep() ;
+	FCK.SetData( '' ) ;
+	FCKUndo.Typing = true ;
+	FCK.Focus() ;
+}
+
+FCKNewPageCommand.prototype.GetState = function()
+{
+	return FCK_TRISTATE_OFF ;
+}
+
+// ### Source button
+var FCKSourceCommand = function()
+{
+	this.Name = 'Source' ;
+}
+
+FCKSourceCommand.prototype.Execute = function()
+{
+	if ( FCKConfig.SourcePopup )	// Until v2.2, it was mandatory for FCKBrowserInfo.IsGecko.
+	{
+		var iWidth	= FCKConfig.ScreenWidth * 0.65 ;
+		var iHeight	= FCKConfig.ScreenHeight * 0.65 ;
+		FCKDialog.OpenDialog( 'FCKDialog_Source', FCKLang.Source, 'dialog/fck_source.html', iWidth, iHeight, null, null, true ) ;
+	}
+	else
+	    FCK.SwitchEditMode() ;
+}
+
+FCKSourceCommand.prototype.GetState = function()
+{
+	return ( FCK.EditMode == FCK_EDITMODE_WYSIWYG ? FCK_TRISTATE_OFF : FCK_TRISTATE_ON ) ;
+}
+
+// ### Undo
+var FCKUndoCommand = function()
+{
+	this.Name = 'Undo' ;
+}
+
+FCKUndoCommand.prototype.Execute = function()
+{
+	FCKUndo.Undo() ;
+}
+
+FCKUndoCommand.prototype.GetState = function()
+{
+	if ( FCK.EditMode != FCK_EDITMODE_WYSIWYG )
+		return FCK_TRISTATE_DISABLED ;
+	return ( FCKUndo.CheckUndoState() ? FCK_TRISTATE_OFF : FCK_TRISTATE_DISABLED ) ;
+}
+
+// ### Redo
+var FCKRedoCommand = function()
+{
+	this.Name = 'Redo' ;
+}
+
+FCKRedoCommand.prototype.Execute = function()
+{
+	FCKUndo.Redo() ;
+}
+
+FCKRedoCommand.prototype.GetState = function()
+{
+	if ( FCK.EditMode != FCK_EDITMODE_WYSIWYG )
+		return FCK_TRISTATE_DISABLED ;
+	return ( FCKUndo.CheckRedoState() ? FCK_TRISTATE_OFF : FCK_TRISTATE_DISABLED ) ;
+}
+
+// ### Page Break
+var FCKPageBreakCommand = function()
+{
+	this.Name = 'PageBreak' ;
+}
+
+FCKPageBreakCommand.prototype.Execute = function()
+{
+	// Take an undo snapshot before changing the document
+	FCKUndo.SaveUndoStep() ;
+
+//	var e = FCK.EditorDocument.createElement( 'CENTER' ) ;
+//	e.style.pageBreakAfter = 'always' ;
+
+	// Tidy was removing the empty CENTER tags, so the following solution has
+	// been found. It also validates correctly as XHTML 1.0 Strict.
+	var e = FCK.EditorDocument.createElement( 'DIV' ) ;
+	e.style.pageBreakAfter = 'always' ;
+	e.innerHTML = '<span style="DISPLAY:none">&nbsp;</span>' ;
+
+	var oFakeImage = FCKDocumentProcessor_CreateFakeImage( 'FCK__PageBreak', e ) ;
+	var oRange = new FCKDomRange( FCK.EditorWindow ) ;
+	oRange.MoveToSelection() ;
+	var oSplitInfo = oRange.SplitBlock() ;
+	oRange.InsertNode( oFakeImage ) ;
+
+	FCK.Events.FireEvent( 'OnSelectionChange' ) ;
+}
+
+FCKPageBreakCommand.prototype.GetState = function()
+{
+	if ( FCK.EditMode != FCK_EDITMODE_WYSIWYG )
+		return FCK_TRISTATE_DISABLED ;
+	return 0 ; // FCK_TRISTATE_OFF
+}
+
+// FCKUnlinkCommand - by Johnny Egeland (johnn****@coret*****)
+var FCKUnlinkCommand = function()
+{
+	this.Name = 'Unlink' ;
+}
+
+FCKUnlinkCommand.prototype.Execute = function()
+{
+	// Take an undo snapshot before changing the document
+	FCKUndo.SaveUndoStep() ;
+
+	if ( FCKBrowserInfo.IsGeckoLike )
+	{
+		var oLink = FCK.Selection.MoveToAncestorNode( 'A' ) ;
+		// The unlink command can generate a span in Firefox, so let's do it our way. See #430
+		if ( oLink )
+			FCKTools.RemoveOuterTags( oLink ) ;
+
+		return ;
+	}
+
+	FCK.ExecuteNamedCommand( this.Name ) ;
+}
+
+FCKUnlinkCommand.prototype.GetState = function()
+{
+	if ( FCK.EditMode != FCK_EDITMODE_WYSIWYG )
+		return FCK_TRISTATE_DISABLED ;
+	var state = FCK.GetNamedCommandState( this.Name ) ;
+
+	// Check that it isn't an anchor
+	if ( state == FCK_TRISTATE_OFF && FCK.EditMode == FCK_EDITMODE_WYSIWYG )
+	{
+		var oLink = FCKSelection.MoveToAncestorNode( 'A' ) ;
+		var bIsAnchor = ( oLink && oLink.name.length > 0 && oLink.href.length == 0 ) ;
+		if ( bIsAnchor )
+			state = FCK_TRISTATE_DISABLED ;
+	}
+
+	return state ;
+}
+
+// FCKSelectAllCommand
+var FCKSelectAllCommand = function()
+{
+	this.Name = 'SelectAll' ;
+}
+
+FCKSelectAllCommand.prototype.Execute = function()
+{
+	if ( FCK.EditMode == FCK_EDITMODE_WYSIWYG )
+	{
+		FCK.ExecuteNamedCommand( 'SelectAll' ) ;
+	}
+	else
+	{
+		// Select the contents of the textarea
+		var textarea = FCK.EditingArea.Textarea ;
+		if ( FCKBrowserInfo.IsIE )
+		{
+			textarea.createTextRange().execCommand( 'SelectAll' ) ;
+		}
+		else
+		{
+			textarea.selectionStart = 0 ;
+			textarea.selectionEnd = textarea.value.length ;
+		}
+		textarea.focus() ;
+	}
+}
+
+FCKSelectAllCommand.prototype.GetState = function()
+{
+	if ( FCK.EditMode != FCK_EDITMODE_WYSIWYG )
+		return FCK_TRISTATE_DISABLED ;
+	return FCK_TRISTATE_OFF ;
+}
+
+// FCKPasteCommand
+var FCKPasteCommand = function()
+{
+	this.Name = 'Paste' ;
+}
+
+FCKPasteCommand.prototype =
+{
+	Execute : function()
+	{
+		if ( FCKBrowserInfo.IsIE )
+			FCK.Paste() ;
+		else
+			FCK.ExecuteNamedCommand( 'Paste' ) ;
+	},
+
+	GetState : function()
+	{
+		if ( FCK.EditMode != FCK_EDITMODE_WYSIWYG )
+			return FCK_TRISTATE_DISABLED ;
+		return FCK.GetNamedCommandState( 'Paste' ) ;
+	}
+} ;
+
+// FCKRuleCommand
+var FCKRuleCommand = function()
+{
+	this.Name = 'Rule' ;
+}
+
+FCKRuleCommand.prototype =
+{
+	Execute : function()
+	{
+		FCKUndo.SaveUndoStep() ;
+		FCK.InsertElement( 'hr' ) ;
+	},
+
+	GetState : function()
+	{
+		if ( FCK.EditMode != FCK_EDITMODE_WYSIWYG )
+			return FCK_TRISTATE_DISABLED ;
+		return FCK.GetNamedCommandState( 'InsertHorizontalRule' ) ;
+	}
+} ;
+
+// FCKCutCopyCommand
+var FCKCutCopyCommand = function( isCut )
+{
+	this.Name = isCut ? 'Cut' : 'Copy' ;
+}
+
+FCKCutCopyCommand.prototype =
+{
+	Execute : function()
+	{
+		var enabled = false ;
+
+		if ( FCKBrowserInfo.IsIE )
+		{
+			// The following seems to be the only reliable way to detect that
+			// cut/copy is enabled in IE. It will fire the oncut/oncopy event
+			// only if the security settings enabled the command to execute.
+
+			var onEvent = function()
+			{
+				enabled = true ;
+			} ;
+
+			var eventName = 'on' + this.Name.toLowerCase() ;
+
+			FCK.EditorDocument.body.attachEvent( eventName, onEvent ) ;
+			FCK.ExecuteNamedCommand( this.Name ) ;
+			FCK.EditorDocument.body.detachEvent( eventName, onEvent ) ;
+		}
+		else
+		{
+			try
+			{
+				// Other browsers throw an error if the command is disabled.
+				FCK.ExecuteNamedCommand( this.Name ) ;
+				enabled = true ;
+			}
+			catch(e){}
+		}
+
+		if ( !enabled )
+			alert( FCKLang[ 'PasteError' + this.Name ] ) ;
+	},
+
+	GetState : function()
+	{
+		// Strangely, the Cut command happens to have the correct states for
+		// both Copy and Cut in all browsers.
+		return FCK.EditMode != FCK_EDITMODE_WYSIWYG ?
+				FCK_TRISTATE_DISABLED :
+				FCK.GetNamedCommandState( 'Cut' ) ;
+	}
+};
+
+var FCKAnchorDeleteCommand = function()
+{
+	this.Name = 'AnchorDelete' ;
+}
+
+FCKAnchorDeleteCommand.prototype =
+{
+	Execute : function()
+	{
+		if (FCK.Selection.GetType() == 'Control')
+		{
+			FCK.Selection.Delete();
+		}
+		else
+		{
+			var oFakeImage = FCK.Selection.GetSelectedElement() ;
+			if ( oFakeImage )
+			{
+				if ( oFakeImage.tagName == 'IMG' && oFakeImage.getAttribute('_fckanchor') )
+					oAnchor = FCK.GetRealElement( oFakeImage ) ;
+				else
+					oFakeImage = null ;
+			}
+
+			//Search for a real anchor
+			if ( !oFakeImage )
+			{
+				oAnchor = FCK.Selection.MoveToAncestorNode( 'A' ) ;
+				if ( oAnchor )
+					FCK.Selection.SelectNode( oAnchor ) ;
+			}
+
+			// If it's also a link, then just remove the name and exit
+			if ( oAnchor.href.length != 0 )
+			{
+				oAnchor.removeAttribute( 'name' ) ;
+				// Remove temporary class for IE
+				if ( FCKBrowserInfo.IsIE )
+					oAnchor.className = oAnchor.className.replace( FCKRegexLib.FCK_Class, '' ) ;
+				return ;
+			}
+
+			// We need to remove the anchor
+			// If we got a fake image, then just remove it and we're done
+			if ( oFakeImage )
+			{
+				oFakeImage.parentNode.removeChild( oFakeImage ) ;
+				return ;
+			}
+			// Empty anchor, so just remove it
+			if ( oAnchor.innerHTML.length == 0 )
+			{
+				oAnchor.parentNode.removeChild( oAnchor ) ;
+				return ;
+			}
+			// Anchor with content, leave the content
+			FCKTools.RemoveOuterTags( oAnchor ) ;
+		}
+		if ( FCKBrowserInfo.IsGecko )
+			FCK.Selection.Collapse( true ) ;
+	},
+
+	GetState : function()
+	{
+		if ( FCK.EditMode != FCK_EDITMODE_WYSIWYG )
+			return FCK_TRISTATE_DISABLED ;
+		return FCK.GetNamedCommandState( 'Unlink') ;
+	}
+};


Property changes on: announcement/trunk/src/main/webapp/fckeditor/editor/_source/commandclasses/fck_othercommands.js
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/webapp/fckeditor/editor/_source/commandclasses/fckblockquotecommand.js
===================================================================
--- announcement/trunk/src/main/webapp/fckeditor/editor/_source/commandclasses/fckblockquotecommand.js	                        (rev 0)
+++ announcement/trunk/src/main/webapp/fckeditor/editor/_source/commandclasses/fckblockquotecommand.js	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,250 @@
+/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2008 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * FCKBlockQuoteCommand Class: adds or removes blockquote tags.
+ */
+
+var FCKBlockQuoteCommand = function()
+{
+}
+
+FCKBlockQuoteCommand.prototype =
+{
+	Execute : function()
+	{
+		FCKUndo.SaveUndoStep() ;
+
+		var state = this.GetState() ;
+
+		var range = new FCKDomRange( FCK.EditorWindow ) ;
+		range.MoveToSelection() ;
+
+		var bookmark = range.CreateBookmark() ;
+
+		// Kludge for #1592: if the bookmark nodes are in the beginning of
+		// blockquote, then move them to the nearest block element in the
+		// blockquote.
+		if ( FCKBrowserInfo.IsIE )
+		{
+			var bStart	= range.GetBookmarkNode( bookmark, true ) ;
+			var bEnd	= range.GetBookmarkNode( bookmark, false ) ;
+
+			var cursor ;
+
+			if ( bStart
+					&& bStart.parentNode.nodeName.IEquals( 'blockquote' )
+					&& !bStart.previousSibling )
+			{
+				cursor = bStart ;
+				while ( ( cursor = cursor.nextSibling ) )
+				{
+					if ( FCKListsLib.BlockElements[ cursor.nodeName.toLowerCase() ] )
+						FCKDomTools.MoveNode( bStart, cursor, true ) ;
+				}
+			}
+
+			if ( bEnd
+					&& bEnd.parentNode.nodeName.IEquals( 'blockquote' )
+					&& !bEnd.previousSibling )
+			{
+				cursor = bEnd ;
+				while ( ( cursor = cursor.nextSibling ) )
+				{
+					if ( FCKListsLib.BlockElements[ cursor.nodeName.toLowerCase() ] )
+					{
+						if ( cursor.firstChild == bStart )
+							FCKDomTools.InsertAfterNode( bStart, bEnd ) ;
+						else
+							FCKDomTools.MoveNode( bEnd, cursor, true ) ;
+					}
+				}
+			}
+		}
+
+		var iterator = new FCKDomRangeIterator( range ) ;
+		var block ;
+
+		if ( state == FCK_TRISTATE_OFF )
+		{
+			iterator.EnforceRealBlocks = true ;
+			var paragraphs = [] ;
+			while ( ( block = iterator.GetNextParagraph() ) )
+				paragraphs.push( block ) ;
+
+			// If no paragraphs, create one from the current selection position.
+			if ( paragraphs.length < 1 )
+			{
+				para = range.Window.document.createElement( FCKConfig.EnterMode.IEquals( 'p' ) ? 'p' : 'div' ) ;
+				range.InsertNode( para ) ;
+				para.appendChild( range.Window.document.createTextNode( '\ufeff' ) ) ;
+				range.MoveToBookmark( bookmark ) ;
+				range.MoveToNodeContents( para ) ;
+				range.Collapse( true ) ;
+				bookmark = range.CreateBookmark() ;
+				paragraphs.push( para ) ;
+			}
+
+			// Make sure all paragraphs have the same parent.
+			var commonParent = paragraphs[0].parentNode ;
+			var tmp = [] ;
+			for ( var i = 0 ; i < paragraphs.length ; i++ )
+			{
+				block = paragraphs[i] ;
+				commonParent = FCKDomTools.GetCommonParents( block.parentNode, commonParent ).pop() ;
+			}
+			var lastBlock = null ;
+			while ( paragraphs.length > 0 )
+			{
+				block = paragraphs.shift() ;
+				while ( block.parentNode != commonParent )
+					block = block.parentNode ;
+				if ( block != lastBlock )
+					tmp.push( block ) ;
+				lastBlock = block ;
+			}
+
+			// If any of the selected blocks is a blockquote, remove it to prevent nested blockquotes.
+			while ( tmp.length > 0 )
+			{
+				block = tmp.shift() ;
+				if ( block.nodeName.IEquals( 'blockquote' ) )
+				{
+					var docFrag = FCKTools.GetElementDocument( block ).createDocumentFragment() ;
+					while ( block.firstChild )
+					{
+						docFrag.appendChild( block.removeChild( block.firstChild ) ) ;
+						paragraphs.push( docFrag.lastChild ) ;
+					}
+					block.parentNode.replaceChild( docFrag, block ) ;
+				}
+				else
+					paragraphs.push( block ) ;
+			}
+
+			// Now we have all the blocks to be included in a new blockquote node.
+			var bqBlock = range.Window.document.createElement( 'blockquote' ) ;
+			commonParent.insertBefore( bqBlock, paragraphs[0] ) ;
+			while ( paragraphs.length > 0 )
+			{
+				block = paragraphs.shift() ;
+				bqBlock.appendChild( block ) ;
+			}
+		}
+		else if ( state == FCK_TRISTATE_ON )
+		{
+			var moveOutNodes = [] ;
+			while ( ( block = iterator.GetNextParagraph() ) )
+			{
+				var bqParent = null ;
+				var bqChild = null ;
+				while ( block.parentNode )
+				{
+					if ( block.parentNode.nodeName.IEquals( 'blockquote' ) )
+					{
+						bqParent = block.parentNode ;
+						bqChild = block ;
+						break ;
+					}
+					block = block.parentNode ;
+				}
+
+				if ( bqParent && bqChild )
+					moveOutNodes.push( bqChild ) ;
+			}
+
+			var movedNodes = [] ;
+			while ( moveOutNodes.length > 0 )
+			{
+				var node = moveOutNodes.shift() ;
+				var bqBlock = node.parentNode ;
+
+				// If the node is located at the beginning or the end, just take it out without splitting.
+				// Otherwise, split the blockquote node and move the paragraph in between the two blockquote nodes.
+				if ( node == node.parentNode.firstChild )
+				{
+					bqBlock.parentNode.insertBefore( bqBlock.removeChild( node ), bqBlock ) ;
+					if ( ! bqBlock.firstChild )
+						bqBlock.parentNode.removeChild( bqBlock ) ;
+				}
+				else if ( node == node.parentNode.lastChild )
+				{
+					bqBlock.parentNode.insertBefore( bqBlock.removeChild( node ), bqBlock.nextSibling ) ;
+					if ( ! bqBlock.firstChild )
+						bqBlock.parentNode.removeChild( bqBlock ) ;
+				}
+				else
+					FCKDomTools.BreakParent( node, node.parentNode, range ) ;
+
+				movedNodes.push( node ) ;
+			}
+
+			if ( FCKConfig.EnterMode.IEquals( 'br' ) )
+			{
+				while ( movedNodes.length )
+				{
+					var node = movedNodes.shift() ;
+					var firstTime = true ;
+					if ( node.nodeName.IEquals( 'div' ) )
+					{
+						var docFrag = FCKTools.GetElementDocument( node ).createDocumentFragment() ;
+						var needBeginBr = firstTime && node.previousSibling &&
+							!FCKListsLib.BlockBoundaries[node.previousSibling.nodeName.toLowerCase()] ;
+						if ( firstTime && needBeginBr )
+							docFrag.appendChild( FCKTools.GetElementDocument( node ).createElement( 'br' ) ) ;
+						var needEndBr = node.nextSibling &&
+							!FCKListsLib.BlockBoundaries[node.nextSibling.nodeName.toLowerCase()] ;
+						while ( node.firstChild )
+							docFrag.appendChild( node.removeChild( node.firstChild ) ) ;
+						if ( needEndBr )
+							docFrag.appendChild( FCKTools.GetElementDocument( node ).createElement( 'br' ) ) ;
+						node.parentNode.replaceChild( docFrag, node ) ;
+						firstTime = false ;
+					}
+				}
+			}
+		}
+		range.MoveToBookmark( bookmark ) ;
+		range.Select() ;
+
+		FCK.Focus() ;
+		FCK.Events.FireEvent( 'OnSelectionChange' ) ;
+	},
+
+	GetState : function()
+	{
+		// Disabled if not WYSIWYG.
+		if ( FCK.EditMode != FCK_EDITMODE_WYSIWYG || ! FCK.EditorWindow )
+			return FCK_TRISTATE_DISABLED ;
+
+		var path = new FCKElementPath( FCKSelection.GetBoundaryParentElement( true ) ) ;
+		var firstBlock = path.Block || path.BlockLimit ;
+
+		if ( !firstBlock || firstBlock.nodeName.toLowerCase() == 'body' )
+			return FCK_TRISTATE_OFF ;
+
+		// See if the first block has a blockquote parent.
+		for ( var i = 0 ; i < path.Elements.length ; i++ )
+		{
+			if ( path.Elements[i].nodeName.IEquals( 'blockquote' ) )
+				return FCK_TRISTATE_ON ;
+		}
+		return FCK_TRISTATE_OFF ;
+	}
+} ;


Property changes on: announcement/trunk/src/main/webapp/fckeditor/editor/_source/commandclasses/fckblockquotecommand.js
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/webapp/fckeditor/editor/_source/commandclasses/fckcorestylecommand.js
===================================================================
--- announcement/trunk/src/main/webapp/fckeditor/editor/_source/commandclasses/fckcorestylecommand.js	                        (rev 0)
+++ announcement/trunk/src/main/webapp/fckeditor/editor/_source/commandclasses/fckcorestylecommand.js	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,61 @@
+/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2008 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * FCKCoreStyleCommand Class: controls the execution of a core style. Core
+ * styles are usually represented as buttons in the toolbar., like Bold and
+ * Italic.
+ */
+
+ var FCKCoreStyleCommand = function( coreStyleName )
+ {
+ 	this.Name = 'CoreStyle' ;
+ 	this.StyleName = '_FCK_' + coreStyleName ;
+ 	this.IsActive = false ;
+
+ 	FCKStyles.AttachStyleStateChange( this.StyleName, this._OnStyleStateChange, this ) ;
+ }
+
+ FCKCoreStyleCommand.prototype =
+ {
+	Execute : function()
+	{
+		FCKUndo.SaveUndoStep() ;
+
+		if ( this.IsActive )
+			FCKStyles.RemoveStyle( this.StyleName ) ;
+		else
+			FCKStyles.ApplyStyle( this.StyleName ) ;
+
+		FCK.Focus() ;
+		FCK.Events.FireEvent( 'OnSelectionChange' ) ;
+	},
+
+	GetState : function()
+	{
+		if ( FCK.EditMode != FCK_EDITMODE_WYSIWYG )
+			return FCK_TRISTATE_DISABLED ;
+		return this.IsActive ? FCK_TRISTATE_ON : FCK_TRISTATE_OFF ;
+	},
+
+	_OnStyleStateChange : function( styleName, isActive )
+	{
+		this.IsActive = isActive ;
+	}
+ };


Property changes on: announcement/trunk/src/main/webapp/fckeditor/editor/_source/commandclasses/fckcorestylecommand.js
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/webapp/fckeditor/editor/_source/commandclasses/fckfitwindow.js
===================================================================
--- announcement/trunk/src/main/webapp/fckeditor/editor/_source/commandclasses/fckfitwindow.js	                        (rev 0)
+++ announcement/trunk/src/main/webapp/fckeditor/editor/_source/commandclasses/fckfitwindow.js	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,181 @@
+/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2008 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * Stretch the editor to full window size and back.
+ */
+
+var FCKFitWindow = function()
+{
+	this.Name = 'FitWindow' ;
+}
+
+FCKFitWindow.prototype.Execute = function()
+{
+	var eEditorFrame		= window.frameElement ;
+	var eEditorFrameStyle	= eEditorFrame.style ;
+
+	var eMainWindow			= parent ;
+	var eDocEl				= eMainWindow.document.documentElement ;
+	var eBody				= eMainWindow.document.body ;
+	var eBodyStyle			= eBody.style ;
+	var eParent ;
+
+	// No original style properties known? Go fullscreen.
+	if ( !this.IsMaximized )
+	{
+		// Registering an event handler when the window gets resized.
+		if( FCKBrowserInfo.IsIE )
+			eMainWindow.attachEvent( 'onresize', FCKFitWindow_Resize ) ;
+		else
+			eMainWindow.addEventListener( 'resize', FCKFitWindow_Resize, true ) ;
+
+		// Save the scrollbars position.
+		this._ScrollPos = FCKTools.GetScrollPosition( eMainWindow ) ;
+
+		// Save and reset the styles for the entire node tree. They could interfere in the result.
+		eParent = eEditorFrame ;
+		// The extra () is to avoid a warning with strict error checking. This is ok.
+		while( (eParent = eParent.parentNode) )
+		{
+			if ( eParent.nodeType == 1 )
+			{
+				eParent._fckSavedStyles = FCKTools.SaveStyles( eParent ) ;
+				eParent.style.zIndex = FCKConfig.FloatingPanelsZIndex - 1 ;
+			}
+		}
+
+		// Hide IE scrollbars (in strict mode).
+		if ( FCKBrowserInfo.IsIE )
+		{
+			this.documentElementOverflow = eDocEl.style.overflow ;
+			eDocEl.style.overflow	= 'hidden' ;
+			eBodyStyle.overflow		= 'hidden' ;
+		}
+		else
+		{
+			// Hide the scroolbars in Firefox.
+			eBodyStyle.overflow = 'hidden' ;
+			eBodyStyle.width = '0px' ;
+			eBodyStyle.height = '0px' ;
+		}
+
+		// Save the IFRAME styles.
+		this._EditorFrameStyles = FCKTools.SaveStyles( eEditorFrame ) ;
+
+		// Resize.
+		var oViewPaneSize = FCKTools.GetViewPaneSize( eMainWindow ) ;
+
+		eEditorFrameStyle.position	= "absolute";
+		eEditorFrame.offsetLeft ;		// Kludge for Safari 3.1 browser bug, do not remove. See #2066.
+		eEditorFrameStyle.zIndex	= FCKConfig.FloatingPanelsZIndex - 1;
+		eEditorFrameStyle.left		= "0px";
+		eEditorFrameStyle.top		= "0px";
+		eEditorFrameStyle.width		= oViewPaneSize.Width + "px";
+		eEditorFrameStyle.height	= oViewPaneSize.Height + "px";
+
+		// Giving the frame some (huge) borders on his right and bottom
+		// side to hide the background that would otherwise show when the
+		// editor is in fullsize mode and the window is increased in size
+		// not for IE, because IE immediately adapts the editor on resize,
+		// without showing any of the background oddly in firefox, the
+		// editor seems not to fill the whole frame, so just setting the
+		// background of it to white to cover the page laying behind it anyway.
+		if ( !FCKBrowserInfo.IsIE )
+		{
+			eEditorFrameStyle.borderRight = eEditorFrameStyle.borderBottom = "9999px solid white" ;
+			eEditorFrameStyle.backgroundColor		= "white";
+		}
+
+		// Scroll to top left.
+		eMainWindow.scrollTo(0, 0);
+
+		// Is the editor still not on the top left? Let's find out and fix that as well. (Bug #174)
+		var editorPos = FCKTools.GetWindowPosition( eMainWindow, eEditorFrame ) ;
+		if ( editorPos.x != 0 )
+			eEditorFrameStyle.left = ( -1 * editorPos.x ) + "px" ;
+		if ( editorPos.y != 0 )
+			eEditorFrameStyle.top = ( -1 * editorPos.y ) + "px" ;
+
+		this.IsMaximized = true ;
+	}
+	else	// Resize to original size.
+	{
+		// Remove the event handler of window resizing.
+		if( FCKBrowserInfo.IsIE )
+			eMainWindow.detachEvent( "onresize", FCKFitWindow_Resize ) ;
+		else
+			eMainWindow.removeEventListener( "resize", FCKFitWindow_Resize, true ) ;
+
+		// Restore the CSS position for the entire node tree.
+		eParent = eEditorFrame ;
+		// The extra () is to avoid a warning with strict error checking. This is ok.
+		while( (eParent = eParent.parentNode) )
+		{
+			if ( eParent._fckSavedStyles )
+			{
+				FCKTools.RestoreStyles( eParent, eParent._fckSavedStyles ) ;
+				eParent._fckSavedStyles = null ;
+			}
+		}
+
+		// Restore IE scrollbars
+		if ( FCKBrowserInfo.IsIE )
+			eDocEl.style.overflow = this.documentElementOverflow ;
+
+		// Restore original size
+		FCKTools.RestoreStyles( eEditorFrame, this._EditorFrameStyles ) ;
+
+		// Restore the window scroll position.
+		eMainWindow.scrollTo( this._ScrollPos.X, this._ScrollPos.Y ) ;
+
+		this.IsMaximized = false ;
+	}
+
+	FCKToolbarItems.GetItem('FitWindow').RefreshState() ;
+
+	// It seams that Firefox restarts the editing area when making this changes.
+	// On FF 1.0.x, the area is not anymore editable. On FF 1.5+, the special
+	//configuration, like DisableFFTableHandles and DisableObjectResizing get
+	//lost, so we must reset it. Also, the cursor position and selection are
+	//also lost, even if you comment the following line (MakeEditable).
+	// if ( FCKBrowserInfo.IsGecko10 )	// Initially I thought it was a FF 1.0 only problem.
+	if ( FCK.EditMode == FCK_EDITMODE_WYSIWYG )
+		FCK.EditingArea.MakeEditable() ;
+
+	FCK.Focus() ;
+}
+
+FCKFitWindow.prototype.GetState = function()
+{
+	if ( FCKConfig.ToolbarLocation != 'In' )
+		return FCK_TRISTATE_DISABLED ;
+	else
+		return ( this.IsMaximized ? FCK_TRISTATE_ON : FCK_TRISTATE_OFF );
+}
+
+function FCKFitWindow_Resize()
+{
+	var oViewPaneSize = FCKTools.GetViewPaneSize( parent ) ;
+
+	var eEditorFrameStyle = window.frameElement.style ;
+
+	eEditorFrameStyle.width		= oViewPaneSize.Width + 'px' ;
+	eEditorFrameStyle.height	= oViewPaneSize.Height + 'px' ;
+}


Property changes on: announcement/trunk/src/main/webapp/fckeditor/editor/_source/commandclasses/fckfitwindow.js
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/webapp/fckeditor/editor/_source/commandclasses/fckindentcommands.js
===================================================================
--- announcement/trunk/src/main/webapp/fckeditor/editor/_source/commandclasses/fckindentcommands.js	                        (rev 0)
+++ announcement/trunk/src/main/webapp/fckeditor/editor/_source/commandclasses/fckindentcommands.js	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,282 @@
+/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2008 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * FCKIndentCommand Class: controls block indentation.
+ */
+
+var FCKIndentCommand = function( name, offset )
+{
+	this.Name = name ;
+	this.Offset = offset ;
+	this.IndentCSSProperty = FCKConfig.ContentLangDirection.IEquals( 'ltr' ) ? 'marginLeft' : 'marginRight' ;
+}
+
+FCKIndentCommand._InitIndentModeParameters = function()
+{
+	if ( FCKConfig.IndentClasses && FCKConfig.IndentClasses.length > 0 )
+	{
+		this._UseIndentClasses = true ;
+		this._IndentClassMap = {} ;
+		for ( var i = 0 ; i < FCKConfig.IndentClasses.length ;i++ )
+			this._IndentClassMap[FCKConfig.IndentClasses[i]] = i + 1 ;
+		this._ClassNameRegex = new RegExp( '(?:^|\\s+)(' + FCKConfig.IndentClasses.join( '|' ) + ')(?=$|\\s)' ) ;
+	}
+	else
+		this._UseIndentClasses = false ;
+}
+
+
+FCKIndentCommand.prototype =
+{
+	Execute : function()
+	{
+		// Save an undo snapshot before doing anything.
+		FCKUndo.SaveUndoStep() ;
+
+		var range = new FCKDomRange( FCK.EditorWindow ) ;
+		range.MoveToSelection() ;
+		var bookmark = range.CreateBookmark() ;
+
+		// Two cases to handle here: either we're in a list, or not.
+		// If we're in a list, then the indent/outdent operations would be done on the list nodes.
+		// Otherwise, apply the operation on the nearest block nodes.
+		var nearestListBlock = FCKDomTools.GetCommonParentNode( range.StartNode || range.StartContainer ,
+				range.EndNode || range.EndContainer,
+				['ul', 'ol'] ) ;
+		if ( nearestListBlock )
+			this._IndentList( range, nearestListBlock ) ;
+		else
+			this._IndentBlock( range ) ;
+
+		range.MoveToBookmark( bookmark ) ;
+		range.Select() ;
+
+		FCK.Focus() ;
+		FCK.Events.FireEvent( 'OnSelectionChange' ) ;
+	},
+
+	GetState : function()
+	{
+		// Disabled if not WYSIWYG.
+		if ( FCK.EditMode != FCK_EDITMODE_WYSIWYG || ! FCK.EditorWindow )
+			return FCK_TRISTATE_DISABLED ;
+
+		// Initialize parameters if not already initialzed.
+		if ( FCKIndentCommand._UseIndentClasses == undefined )
+			FCKIndentCommand._InitIndentModeParameters() ;
+
+		// If we're not in a list, and the starting block's indentation is zero, and the current
+		// command is the outdent command, then we should return FCK_TRISTATE_DISABLED.
+		var startContainer = FCKSelection.GetBoundaryParentElement( true ) ;
+		var endContainer = FCKSelection.GetBoundaryParentElement( false ) ;
+		var listNode = FCKDomTools.GetCommonParentNode( startContainer, endContainer, ['ul','ol'] ) ;
+
+		if ( listNode )
+		{
+			if ( this.Name.IEquals( 'outdent' ) )
+				return FCK_TRISTATE_OFF ;
+			var firstItem = FCKTools.GetElementAscensor( startContainer, 'li' ) ;
+			if ( !firstItem || !firstItem.previousSibling )
+				return FCK_TRISTATE_DISABLED ;
+			return FCK_TRISTATE_OFF ;
+		}
+		if ( ! FCKIndentCommand._UseIndentClasses && this.Name.IEquals( 'indent' ) )
+			return FCK_TRISTATE_OFF;
+
+		var path = new FCKElementPath( startContainer ) ;
+		var firstBlock = path.Block || path.BlockLimit ;
+		if ( !firstBlock )
+			return FCK_TRISTATE_DISABLED ;
+
+		if ( FCKIndentCommand._UseIndentClasses )
+		{
+			var indentClass = firstBlock.className.match( FCKIndentCommand._ClassNameRegex ) ;
+			var indentStep = 0 ;
+			if ( indentClass != null )
+			{
+				indentClass = indentClass[1] ;
+				indentStep = FCKIndentCommand._IndentClassMap[indentClass] ;
+			}
+			if ( ( this.Name == 'outdent' && indentStep == 0 ) ||
+					( this.Name == 'indent' && indentStep == FCKConfig.IndentClasses.length ) )
+				return FCK_TRISTATE_DISABLED ;
+			return FCK_TRISTATE_OFF ;
+		}
+		else
+		{
+			var indent = parseInt( firstBlock.style[this.IndentCSSProperty], 10 ) ;
+			if ( isNaN( indent ) )
+				indent = 0 ;
+			if ( indent <= 0 )
+				return FCK_TRISTATE_DISABLED ;
+			return FCK_TRISTATE_OFF ;
+		}
+	},
+
+	_IndentBlock : function( range )
+	{
+		var iterator = new FCKDomRangeIterator( range ) ;
+		iterator.EnforceRealBlocks = true ;
+
+		range.Expand( 'block_contents' ) ;
+		var commonParents = FCKDomTools.GetCommonParents( range.StartContainer, range.EndContainer ) ;
+		var nearestParent = commonParents[commonParents.length - 1] ;
+		var block ;
+
+		while ( ( block = iterator.GetNextParagraph() ) )
+		{
+			// We don't want to indent subtrees recursively, so only perform the indent operation
+			// if the block itself is the nearestParent, or the block's parent is the nearestParent.
+			if ( ! ( block == nearestParent || block.parentNode == nearestParent ) )
+				continue ;
+
+			if ( FCKIndentCommand._UseIndentClasses )
+			{
+				// Transform current class name to indent step index.
+				var indentClass = block.className.match( FCKIndentCommand._ClassNameRegex ) ;
+				var indentStep = 0 ;
+				if ( indentClass != null )
+				{
+					indentClass = indentClass[1] ;
+					indentStep = FCKIndentCommand._IndentClassMap[indentClass] ;
+				}
+
+				// Operate on indent step index, transform indent step index back to class name.
+				if ( this.Name.IEquals( 'outdent' ) )
+					indentStep-- ;
+				else if ( this.Name.IEquals( 'indent' ) )
+					indentStep++ ;
+				indentStep = Math.min( indentStep, FCKConfig.IndentClasses.length ) ;
+				indentStep = Math.max( indentStep, 0 ) ;
+				var className = block.className.replace( FCKIndentCommand._ClassNameRegex, '' ) ;
+				if ( indentStep < 1 )
+					block.className = className ;
+				else
+					block.className = ( className.length > 0 ? className + ' ' : '' ) +
+						FCKConfig.IndentClasses[indentStep - 1] ;
+			}
+			else
+			{
+				// Offset distance is assumed to be in pixels for now.
+				var currentOffset = parseInt( block.style[this.IndentCSSProperty], 10 ) ;
+				if ( isNaN( currentOffset ) )
+					currentOffset = 0 ;
+				currentOffset += this.Offset ;
+				currentOffset = Math.max( currentOffset, 0 ) ;
+				currentOffset = Math.ceil( currentOffset / this.Offset ) * this.Offset ;
+				block.style[this.IndentCSSProperty] = currentOffset ? currentOffset + FCKConfig.IndentUnit : '' ;
+				if ( block.getAttribute( 'style' ) == '' )
+					block.removeAttribute( 'style' ) ;
+			}
+		}
+	},
+
+	_IndentList : function( range, listNode )
+	{
+		// Our starting and ending points of the range might be inside some blocks under a list item...
+		// So before playing with the iterator, we need to expand the block to include the list items.
+		var startContainer = range.StartContainer ;
+		var endContainer = range.EndContainer ;
+		while ( startContainer && startContainer.parentNode != listNode )
+			startContainer = startContainer.parentNode ;
+		while ( endContainer && endContainer.parentNode != listNode )
+			endContainer = endContainer.parentNode ;
+
+		if ( ! startContainer || ! endContainer )
+			return ;
+
+		// Now we can iterate over the individual items on the same tree depth.
+		var block = startContainer ;
+		var itemsToMove = [] ;
+		var stopFlag = false ;
+		while ( stopFlag == false )
+		{
+			if ( block == endContainer )
+				stopFlag = true ;
+			itemsToMove.push( block ) ;
+			block = block.nextSibling ;
+		}
+		if ( itemsToMove.length < 1 )
+			return ;
+
+		// Do indent or outdent operations on the array model of the list, not the list's DOM tree itself.
+		// The array model demands that it knows as much as possible about the surrounding lists, we need
+		// to feed it the further ancestor node that is still a list.
+		var listParents = FCKDomTools.GetParents( listNode ) ;
+		for ( var i = 0 ; i < listParents.length ; i++ )
+		{
+			if ( listParents[i].nodeName.IEquals( ['ul', 'ol'] ) )
+			{
+				listNode = listParents[i] ;
+				break ;
+			}
+		}
+		var indentOffset = this.Name.IEquals( 'indent' ) ? 1 : -1 ;
+		var startItem = itemsToMove[0] ;
+		var lastItem = itemsToMove[ itemsToMove.length - 1 ] ;
+		var markerObj = {} ;
+
+		// Convert the list DOM tree into a one dimensional array.
+		var listArray = FCKDomTools.ListToArray( listNode, markerObj ) ;
+
+		// Apply indenting or outdenting on the array.
+		var baseIndent = listArray[lastItem._FCK_ListArray_Index].indent ;
+		for ( var i = startItem._FCK_ListArray_Index ; i <= lastItem._FCK_ListArray_Index ; i++ )
+			listArray[i].indent += indentOffset ;
+		for ( var i = lastItem._FCK_ListArray_Index + 1 ; i < listArray.length && listArray[i].indent > baseIndent ; i++ )
+			listArray[i].indent += indentOffset ;
+
+		/* For debug use only
+		var PrintArray = function( listArray, doc )
+		{
+			var s = [] ;
+			for ( var i = 0 ; i < listArray.length ; i++ )
+			{
+				for ( var j in listArray[i] )
+				{
+					if ( j != 'contents' )
+						s.push( j + ":" + listArray[i][j] + "; " ) ;
+					else
+					{
+						var docFrag = doc.createDocumentFragment() ;
+						var tmpNode = doc.createElement( 'span' ) ;
+						for ( var k = 0 ; k < listArray[i][j].length ; k++ )
+							docFrag.appendChild( listArray[i][j][k].cloneNode( true ) ) ;
+						tmpNode.appendChild( docFrag ) ;
+						s.push( j + ":" + tmpNode.innerHTML + "; ") ;
+					}
+				}
+				s.push( '\n' ) ;
+			}
+			alert( s.join('') ) ;
+		}
+		PrintArray( listArray, FCK.EditorDocument ) ;
+		*/
+
+		// Convert the array back to a DOM forest (yes we might have a few subtrees now).
+		// And replace the old list with the new forest.
+		var newList = FCKDomTools.ArrayToList( listArray ) ;
+		if ( newList )
+			listNode.parentNode.replaceChild( newList.listNode, listNode ) ;
+
+		// Clean up the markers.
+		FCKDomTools.ClearAllMarkers( markerObj ) ;
+	}
+} ;


Property changes on: announcement/trunk/src/main/webapp/fckeditor/editor/_source/commandclasses/fckindentcommands.js
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/webapp/fckeditor/editor/_source/commandclasses/fckjustifycommands.js
===================================================================
--- announcement/trunk/src/main/webapp/fckeditor/editor/_source/commandclasses/fckjustifycommands.js	                        (rev 0)
+++ announcement/trunk/src/main/webapp/fckeditor/editor/_source/commandclasses/fckjustifycommands.js	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,173 @@
+/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2008 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * FCKJustifyCommand Class: controls block justification.
+ */
+
+var FCKJustifyCommand = function( alignValue )
+{
+	this.AlignValue = alignValue ;
+
+	// Detect whether this is the instance for the default alignment.
+	var contentDir = FCKConfig.ContentLangDirection.toLowerCase() ;
+	this.IsDefaultAlign = ( alignValue == 'left' && contentDir == 'ltr' ) ||
+						  ( alignValue == 'right' && contentDir == 'rtl' ) ;
+
+	// Get the class name to be used by this instance.
+	var cssClassName = this._CssClassName = ( function()
+	{
+		var classes = FCKConfig.JustifyClasses ;
+		if ( classes )
+		{
+			switch ( alignValue )
+			{
+				case 'left' :
+					return classes[0] || null ;
+				case 'center' :
+					return classes[1] || null ;
+				case 'right' :
+					return classes[2] || null ;
+				case 'justify' :
+					return classes[3] || null ;
+			}
+		}
+		return null ;
+	} )() ;
+
+	if ( cssClassName && cssClassName.length > 0 )
+		this._CssClassRegex = new RegExp( '(?:^|\\s+)' + cssClassName + '(?=$|\\s)' ) ;
+}
+
+FCKJustifyCommand._GetClassNameRegex = function()
+{
+	var regex = FCKJustifyCommand._ClassRegex ;
+	if ( regex != undefined )
+		return regex ;
+
+	var names = [] ;
+
+	var classes = FCKConfig.JustifyClasses ;
+	if ( classes )
+	{
+		for ( var i = 0 ; i < 4 ; i++ )
+		{
+			var className = classes[i] ;
+			if ( className && className.length > 0 )
+				names.push( className ) ;
+		}
+	}
+
+	if ( names.length > 0 )
+		regex = new RegExp( '(?:^|\\s+)(?:' + names.join( '|' ) + ')(?=$|\\s)' ) ;
+	else
+		regex = null ;
+
+	return FCKJustifyCommand._ClassRegex = regex ;
+}
+
+FCKJustifyCommand.prototype =
+{
+	Execute : function()
+	{
+		// Save an undo snapshot before doing anything.
+		FCKUndo.SaveUndoStep() ;
+
+		var range = new FCKDomRange( FCK.EditorWindow ) ;
+		range.MoveToSelection() ;
+
+		var currentState = this.GetState() ;
+		if ( currentState == FCK_TRISTATE_DISABLED )
+			return ;
+
+		// Store a bookmark of the selection since the paragraph iterator might
+		// change the DOM tree and break selections.
+		var bookmark = range.CreateBookmark() ;
+
+		var cssClassName = this._CssClassName ;
+
+		// Apply alignment setting for each paragraph.
+		var iterator = new FCKDomRangeIterator( range ) ;
+		var block ;
+		while ( ( block = iterator.GetNextParagraph() ) )
+		{
+			block.removeAttribute( 'align' ) ;
+
+			if ( cssClassName )
+			{
+				// Remove the any of the alignment classes from the className.
+				var className = block.className.replace( FCKJustifyCommand._GetClassNameRegex(), '' ) ;
+
+				// Append the desired class name.
+				if ( currentState == FCK_TRISTATE_OFF )
+				{
+					if ( className.length > 0 )
+						className += ' ' ;
+					block.className = className + cssClassName ;
+				}
+				else if ( className.length == 0 )
+					FCKDomTools.RemoveAttribute( block, 'class' ) ;
+			}
+			else
+			{
+				var style = block.style ;
+				if ( currentState == FCK_TRISTATE_OFF )
+					style.textAlign = this.AlignValue ;
+				else
+				{
+					style.textAlign = '' ;
+					if ( style.cssText.length == 0 )
+						block.removeAttribute( 'style' ) ;
+				}
+			}
+		}
+
+		// Restore previous selection.
+		range.MoveToBookmark( bookmark ) ;
+		range.Select() ;
+
+		FCK.Focus() ;
+		FCK.Events.FireEvent( 'OnSelectionChange' ) ;
+	},
+
+	GetState : function()
+	{
+		// Disabled if not WYSIWYG.
+		if ( FCK.EditMode != FCK_EDITMODE_WYSIWYG || ! FCK.EditorWindow )
+			return FCK_TRISTATE_DISABLED ;
+
+		// Retrieve the first selected block.
+		var path = new FCKElementPath( FCKSelection.GetBoundaryParentElement( true ) ) ;
+		var firstBlock = path.Block || path.BlockLimit ;
+
+		if ( !firstBlock || firstBlock.nodeName.toLowerCase() == 'body' )
+			return FCK_TRISTATE_OFF ;
+
+		// Check if the desired style is already applied to the block.
+		var currentAlign ;
+		if ( FCKBrowserInfo.IsIE )
+			currentAlign = firstBlock.currentStyle.textAlign ;
+		else
+			currentAlign = FCK.EditorWindow.getComputedStyle( firstBlock, '' ).getPropertyValue( 'text-align' );
+		currentAlign = currentAlign.replace( /(-moz-|-webkit-|start|auto)/i, '' );
+		if ( ( !currentAlign && this.IsDefaultAlign ) || currentAlign == this.AlignValue )
+			return FCK_TRISTATE_ON ;
+		return FCK_TRISTATE_OFF ;
+	}
+} ;


Property changes on: announcement/trunk/src/main/webapp/fckeditor/editor/_source/commandclasses/fckjustifycommands.js
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/webapp/fckeditor/editor/_source/commandclasses/fcklistcommands.js
===================================================================
--- announcement/trunk/src/main/webapp/fckeditor/editor/_source/commandclasses/fcklistcommands.js	                        (rev 0)
+++ announcement/trunk/src/main/webapp/fckeditor/editor/_source/commandclasses/fcklistcommands.js	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,382 @@
+/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2008 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * Implementation for the "Insert/Remove Ordered/Unordered List" commands.
+ */
+
+var FCKListCommand = function( name, tagName )
+{
+	this.Name = name ;
+	this.TagName = tagName ;
+}
+
+FCKListCommand.prototype =
+{
+	GetState : function()
+	{
+		// Disabled if not WYSIWYG.
+		if ( FCK.EditMode != FCK_EDITMODE_WYSIWYG || ! FCK.EditorWindow )
+			return FCK_TRISTATE_DISABLED ;
+
+		// We'll use the style system's convention to determine list state here...
+		// If the starting block is a descendant of an <ol> or <ul> node, then we're in a list.
+		var startContainer = FCKSelection.GetBoundaryParentElement( true ) ;
+		var listNode = startContainer ;
+		while ( listNode )
+		{
+			if ( listNode.nodeName.IEquals( [ 'ul', 'ol' ] ) )
+				break ;
+			listNode = listNode.parentNode ;
+		}
+		if ( listNode && listNode.nodeName.IEquals( this.TagName ) )
+			return FCK_TRISTATE_ON ;
+		else
+			return FCK_TRISTATE_OFF ;
+	},
+
+	Execute : function()
+	{
+		FCKUndo.SaveUndoStep() ;
+
+		var doc = FCK.EditorDocument ;
+		var range = new FCKDomRange( FCK.EditorWindow ) ;
+		range.MoveToSelection() ;
+		var state = this.GetState() ;
+
+		// Midas lists rule #1 says we can create a list even in an empty document.
+		// But FCKDomRangeIterator wouldn't run if the document is really empty.
+		// So create a paragraph if the document is empty and we're going to create a list.
+		if ( state == FCK_TRISTATE_OFF )
+		{
+			FCKDomTools.TrimNode( doc.body ) ;
+			if ( ! doc.body.firstChild )
+			{
+				var paragraph = doc.createElement( 'p' ) ;
+				doc.body.appendChild( paragraph ) ;
+				range.MoveToNodeContents( paragraph ) ;
+			}
+		}
+
+		var bookmark = range.CreateBookmark() ;
+
+		// Group the blocks up because there are many cases where multiple lists have to be created,
+		// or multiple lists have to be cancelled.
+		var listGroups = [] ;
+		var markerObj = {} ;
+		var iterator = new FCKDomRangeIterator( range ) ;
+		var block ;
+
+		iterator.ForceBrBreak = ( state == FCK_TRISTATE_OFF ) ;
+		var nextRangeExists = true ;
+		var rangeQueue = null ;
+		while ( nextRangeExists )
+		{
+			while ( ( block = iterator.GetNextParagraph() ) )
+			{
+				var path = new FCKElementPath( block ) ;
+				var listNode = null ;
+				var processedFlag = false ;
+				var blockLimit = path.BlockLimit ;
+
+				// First, try to group by a list ancestor.
+				for ( var i = path.Elements.length - 1 ; i >= 0 ; i-- )
+				{
+					var el = path.Elements[i] ;
+					if ( el.nodeName.IEquals( ['ol', 'ul'] ) )
+					{
+						// If we've encountered a list inside a block limit
+						// The last group object of the block limit element should
+						// no longer be valid. Since paragraphs after the list
+						// should belong to a different group of paragraphs before
+						// the list. (Bug #1309)
+						if ( blockLimit._FCK_ListGroupObject )
+							blockLimit._FCK_ListGroupObject = null ;
+
+						var groupObj = el._FCK_ListGroupObject ;
+						if ( groupObj )
+							groupObj.contents.push( block ) ;
+						else
+						{
+							groupObj = { 'root' : el, 'contents' : [ block ] } ;
+							listGroups.push( groupObj ) ;
+							FCKDomTools.SetElementMarker( markerObj, el, '_FCK_ListGroupObject', groupObj ) ;
+						}
+						processedFlag = true ;
+						break ;
+					}
+				}
+
+				if ( processedFlag )
+					continue ;
+
+				// No list ancestor? Group by block limit.
+				var root = blockLimit ;
+				if ( root._FCK_ListGroupObject )
+					root._FCK_ListGroupObject.contents.push( block ) ;
+				else
+				{
+					var groupObj = { 'root' : root, 'contents' : [ block ] } ;
+					FCKDomTools.SetElementMarker( markerObj, root, '_FCK_ListGroupObject', groupObj ) ;
+					listGroups.push( groupObj ) ;
+				}
+			}
+
+			if ( FCKBrowserInfo.IsIE )
+				nextRangeExists = false ;
+			else
+			{
+				if ( rangeQueue == null )
+				{
+					rangeQueue = [] ;
+					var selectionObject = FCKSelection.GetSelection() ;
+					if ( selectionObject && listGroups.length == 0 )
+						rangeQueue.push( selectionObject.getRangeAt( 0 ) ) ;
+					for ( var i = 1 ; selectionObject && i < selectionObject.rangeCount ; i++ )
+						rangeQueue.push( selectionObject.getRangeAt( i ) ) ;
+				}
+				if ( rangeQueue.length < 1 )
+					nextRangeExists = false ;
+				else
+				{
+					var internalRange = FCKW3CRange.CreateFromRange( doc, rangeQueue.shift() ) ;
+					range._Range = internalRange ;
+					range._UpdateElementInfo() ;
+					if ( range.StartNode.nodeName.IEquals( 'td' ) )
+						range.SetStart( range.StartNode, 1 ) ;
+					if ( range.EndNode.nodeName.IEquals( 'td' ) )
+						range.SetEnd( range.EndNode, 2 ) ;
+					iterator = new FCKDomRangeIterator( range ) ;
+					iterator.ForceBrBreak = ( state == FCK_TRISTATE_OFF ) ;
+				}
+			}
+		}
+
+		// Now we have two kinds of list groups, groups rooted at a list, and groups rooted at a block limit element.
+		// We either have to build lists or remove lists, for removing a list does not makes sense when we are looking
+		// at the group that's not rooted at lists. So we have three cases to handle.
+		var listsCreated = [] ;
+		while ( listGroups.length > 0 )
+		{
+			var groupObj = listGroups.shift() ;
+			if ( state == FCK_TRISTATE_OFF )
+			{
+				if ( groupObj.root.nodeName.IEquals( ['ul', 'ol'] ) )
+					this._ChangeListType( groupObj, markerObj, listsCreated ) ;
+				else
+					this._CreateList( groupObj, listsCreated ) ;
+			}
+			else if ( state == FCK_TRISTATE_ON && groupObj.root.nodeName.IEquals( ['ul', 'ol'] ) )
+				this._RemoveList( groupObj, markerObj ) ;
+		}
+
+		// For all new lists created, merge adjacent, same type lists.
+		for ( var i = 0 ; i < listsCreated.length ; i++ )
+		{
+			var listNode = listsCreated[i] ;
+			var stopFlag = false ;
+			var currentNode = listNode ;
+			while ( ! stopFlag )
+			{
+				currentNode = currentNode.nextSibling ;
+				if ( currentNode && currentNode.nodeType == 3 && currentNode.nodeValue.search( /^[\n\r\t ]*$/ ) == 0 )
+					continue ;
+				stopFlag = true ;
+			}
+
+			if ( currentNode && currentNode.nodeName.IEquals( this.TagName ) )
+			{
+				currentNode.parentNode.removeChild( currentNode ) ;
+				while ( currentNode.firstChild )
+					listNode.appendChild( currentNode.removeChild( currentNode.firstChild ) ) ;
+			}
+
+			stopFlag = false ;
+			currentNode = listNode ;
+			while ( ! stopFlag )
+			{
+				currentNode = currentNode.previousSibling ;
+				if ( currentNode && currentNode.nodeType == 3 && currentNode.nodeValue.search( /^[\n\r\t ]*$/ ) == 0 )
+					continue ;
+				stopFlag = true ;
+			}
+			if ( currentNode && currentNode.nodeName.IEquals( this.TagName ) )
+			{
+				currentNode.parentNode.removeChild( currentNode ) ;
+				while ( currentNode.lastChild )
+					listNode.insertBefore( currentNode.removeChild( currentNode.lastChild ),
+						       listNode.firstChild ) ;
+			}
+		}
+
+		// Clean up, restore selection and update toolbar button states.
+		FCKDomTools.ClearAllMarkers( markerObj ) ;
+		range.MoveToBookmark( bookmark ) ;
+		range.Select() ;
+
+		FCK.Focus() ;
+		FCK.Events.FireEvent( 'OnSelectionChange' ) ;
+	},
+
+	_ChangeListType : function( groupObj, markerObj, listsCreated )
+	{
+		// This case is easy...
+		// 1. Convert the whole list into a one-dimensional array.
+		// 2. Change the list type by modifying the array.
+		// 3. Recreate the whole list by converting the array to a list.
+		// 4. Replace the original list with the recreated list.
+		var listArray = FCKDomTools.ListToArray( groupObj.root, markerObj ) ;
+		var selectedListItems = [] ;
+		for ( var i = 0 ; i < groupObj.contents.length ; i++ )
+		{
+			var itemNode = groupObj.contents[i] ;
+			itemNode = FCKTools.GetElementAscensor( itemNode, 'li' ) ;
+			if ( ! itemNode || itemNode._FCK_ListItem_Processed )
+				continue ;
+			selectedListItems.push( itemNode ) ;
+			FCKDomTools.SetElementMarker( markerObj, itemNode, '_FCK_ListItem_Processed', true ) ;
+		}
+		var fakeParent = FCKTools.GetElementDocument( groupObj.root ).createElement( this.TagName ) ;
+		for ( var i = 0 ; i < selectedListItems.length ; i++ )
+		{
+			var listIndex = selectedListItems[i]._FCK_ListArray_Index ;
+			listArray[listIndex].parent = fakeParent ;
+		}
+		var newList = FCKDomTools.ArrayToList( listArray, markerObj ) ;
+		for ( var i = 0 ; i < newList.listNode.childNodes.length ; i++ )
+		{
+			if ( newList.listNode.childNodes[i].nodeName.IEquals( this.TagName ) )
+				listsCreated.push( newList.listNode.childNodes[i] ) ;
+		}
+		groupObj.root.parentNode.replaceChild( newList.listNode, groupObj.root ) ;
+	},
+
+	_CreateList : function( groupObj, listsCreated )
+	{
+		var contents = groupObj.contents ;
+		var doc = FCKTools.GetElementDocument( groupObj.root ) ;
+		var listContents = [] ;
+
+		// It is possible to have the contents returned by DomRangeIterator to be the same as the root.
+		// e.g. when we're running into table cells.
+		// In such a case, enclose the childNodes of contents[0] into a <div>.
+		if ( contents.length == 1 && contents[0] == groupObj.root )
+		{
+			var divBlock = doc.createElement( 'div' );
+			while ( contents[0].firstChild )
+				divBlock.appendChild( contents[0].removeChild( contents[0].firstChild ) ) ;
+			contents[0].appendChild( divBlock ) ;
+			contents[0] = divBlock ;
+		}
+
+		// Calculate the common parent node of all content blocks.
+		var commonParent = groupObj.contents[0].parentNode ;
+		for ( var i = 0 ; i < contents.length ; i++ )
+			commonParent = FCKDomTools.GetCommonParents( commonParent, contents[i].parentNode ).pop() ;
+
+		// We want to insert things that are in the same tree level only, so calculate the contents again
+		// by expanding the selected blocks to the same tree level.
+		for ( var i = 0 ; i < contents.length ; i++ )
+		{
+			var contentNode = contents[i] ;
+			while ( contentNode.parentNode )
+			{
+				if ( contentNode.parentNode == commonParent )
+				{
+					listContents.push( contentNode ) ;
+					break ;
+				}
+				contentNode = contentNode.parentNode ;
+			}
+		}
+
+		if ( listContents.length < 1 )
+			return ;
+
+		// Insert the list to the DOM tree.
+		var insertAnchor = listContents[listContents.length - 1].nextSibling ;
+		var listNode = doc.createElement( this.TagName ) ;
+		listsCreated.push( listNode ) ;
+		while ( listContents.length )
+		{
+			var contentBlock = listContents.shift() ;
+			var docFrag = doc.createDocumentFragment() ;
+			while ( contentBlock.firstChild )
+				docFrag.appendChild( contentBlock.removeChild( contentBlock.firstChild ) ) ;
+			contentBlock.parentNode.removeChild( contentBlock ) ;
+			var listItem = doc.createElement( 'li' ) ;
+			listItem.appendChild( docFrag ) ;
+			listNode.appendChild( listItem ) ;
+		}
+		commonParent.insertBefore( listNode, insertAnchor ) ;
+	},
+
+	_RemoveList : function( groupObj, markerObj )
+	{
+		// This is very much like the change list type operation.
+		// Except that we're changing the selected items' indent to -1 in the list array.
+		var listArray = FCKDomTools.ListToArray( groupObj.root, markerObj ) ;
+		var selectedListItems = [] ;
+		for ( var i = 0 ; i < groupObj.contents.length ; i++ )
+		{
+			var itemNode = groupObj.contents[i] ;
+			itemNode = FCKTools.GetElementAscensor( itemNode, 'li' ) ;
+			if ( ! itemNode || itemNode._FCK_ListItem_Processed )
+				continue ;
+			selectedListItems.push( itemNode ) ;
+			FCKDomTools.SetElementMarker( markerObj, itemNode, '_FCK_ListItem_Processed', true ) ;
+		}
+
+		var lastListIndex = null ;
+		for ( var i = 0 ; i < selectedListItems.length ; i++ )
+		{
+			var listIndex = selectedListItems[i]._FCK_ListArray_Index ;
+			listArray[listIndex].indent = -1 ;
+			lastListIndex = listIndex ;
+		}
+
+		// After cutting parts of the list out with indent=-1, we still have to maintain the array list
+		// model's nextItem.indent <= currentItem.indent + 1 invariant. Otherwise the array model of the
+		// list cannot be converted back to a real DOM list.
+		for ( var i = lastListIndex + 1; i < listArray.length ; i++ )
+		{
+			if ( listArray[i].indent > listArray[i-1].indent + 1 )
+			{
+				var indentOffset = listArray[i-1].indent + 1 - listArray[i].indent ;
+				var oldIndent = listArray[i].indent ;
+				while ( listArray[i] && listArray[i].indent >= oldIndent)
+				{
+					listArray[i].indent += indentOffset ;
+					i++ ;
+				}
+				i-- ;
+			}
+		}
+
+		var newList = FCKDomTools.ArrayToList( listArray, markerObj ) ;
+		// If groupObj.root is the last element in its parent, or its nextSibling is a <br>, then we should
+		// not add a <br> after the final item. So, check for the cases and trim the <br>.
+		if ( groupObj.root.nextSibling == null || groupObj.root.nextSibling.nodeName.IEquals( 'br' ) )
+		{
+			if ( newList.listNode.lastChild.nodeName.IEquals( 'br' ) )
+				newList.listNode.removeChild( newList.listNode.lastChild ) ;
+		}
+		groupObj.root.parentNode.replaceChild( newList.listNode, groupObj.root ) ;
+	}
+};


Property changes on: announcement/trunk/src/main/webapp/fckeditor/editor/_source/commandclasses/fcklistcommands.js
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/webapp/fckeditor/editor/_source/commandclasses/fcknamedcommand.js
===================================================================
--- announcement/trunk/src/main/webapp/fckeditor/editor/_source/commandclasses/fcknamedcommand.js	                        (rev 0)
+++ announcement/trunk/src/main/webapp/fckeditor/editor/_source/commandclasses/fcknamedcommand.js	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,39 @@
+/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2008 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * FCKNamedCommand Class: represents an internal browser command.
+ */
+
+var FCKNamedCommand = function( commandName )
+{
+	this.Name = commandName ;
+}
+
+FCKNamedCommand.prototype.Execute = function()
+{
+	FCK.ExecuteNamedCommand( this.Name ) ;
+}
+
+FCKNamedCommand.prototype.GetState = function()
+{
+	if ( FCK.EditMode != FCK_EDITMODE_WYSIWYG )
+		return FCK_TRISTATE_DISABLED ;
+	return FCK.GetNamedCommandState( this.Name ) ;
+}


Property changes on: announcement/trunk/src/main/webapp/fckeditor/editor/_source/commandclasses/fcknamedcommand.js
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/webapp/fckeditor/editor/_source/commandclasses/fckpasteplaintextcommand.js
===================================================================
--- announcement/trunk/src/main/webapp/fckeditor/editor/_source/commandclasses/fckpasteplaintextcommand.js	                        (rev 0)
+++ announcement/trunk/src/main/webapp/fckeditor/editor/_source/commandclasses/fckpasteplaintextcommand.js	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,40 @@
+/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2008 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * FCKPastePlainTextCommand Class: represents the
+ * "Paste as Plain Text" command.
+ */
+
+var FCKPastePlainTextCommand = function()
+{
+	this.Name = 'PasteText' ;
+}
+
+FCKPastePlainTextCommand.prototype.Execute = function()
+{
+	FCK.PasteAsPlainText() ;
+}
+
+FCKPastePlainTextCommand.prototype.GetState = function()
+{
+	if ( FCK.EditMode != FCK_EDITMODE_WYSIWYG )
+		return FCK_TRISTATE_DISABLED ;
+	return FCK.GetNamedCommandState( 'Paste' ) ;
+}


Property changes on: announcement/trunk/src/main/webapp/fckeditor/editor/_source/commandclasses/fckpasteplaintextcommand.js
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/webapp/fckeditor/editor/_source/commandclasses/fckpastewordcommand.js
===================================================================
--- announcement/trunk/src/main/webapp/fckeditor/editor/_source/commandclasses/fckpastewordcommand.js	                        (rev 0)
+++ announcement/trunk/src/main/webapp/fckeditor/editor/_source/commandclasses/fckpastewordcommand.js	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,40 @@
+/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2008 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * FCKPasteWordCommand Class: represents the "Paste from Word" command.
+ */
+
+var FCKPasteWordCommand = function()
+{
+	this.Name = 'PasteWord' ;
+}
+
+FCKPasteWordCommand.prototype.Execute = function()
+{
+	FCK.PasteFromWord() ;
+}
+
+FCKPasteWordCommand.prototype.GetState = function()
+{
+	if ( FCK.EditMode != FCK_EDITMODE_WYSIWYG || FCKConfig.ForcePasteAsPlainText )
+		return FCK_TRISTATE_DISABLED ;
+	else
+		return FCK.GetNamedCommandState( 'Paste' ) ;
+}


Property changes on: announcement/trunk/src/main/webapp/fckeditor/editor/_source/commandclasses/fckpastewordcommand.js
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/webapp/fckeditor/editor/_source/commandclasses/fckremoveformatcommand.js
===================================================================
--- announcement/trunk/src/main/webapp/fckeditor/editor/_source/commandclasses/fckremoveformatcommand.js	                        (rev 0)
+++ announcement/trunk/src/main/webapp/fckeditor/editor/_source/commandclasses/fckremoveformatcommand.js	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,45 @@
+/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2008 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * FCKRemoveFormatCommand Class: controls the execution of a core style. Core
+ * styles are usually represented as buttons in the toolbar., like Bold and
+ * Italic.
+ */
+
+ var FCKRemoveFormatCommand = function()
+ {
+ 	this.Name = 'RemoveFormat' ;
+ }
+
+ FCKRemoveFormatCommand.prototype =
+ {
+	Execute : function()
+	{
+		FCKStyles.RemoveAll() ;
+
+		FCK.Focus() ;
+		FCK.Events.FireEvent( 'OnSelectionChange' ) ;
+	},
+
+	GetState : function()
+	{
+		return FCK.EditorWindow ? FCK_TRISTATE_OFF : FCK_TRISTATE_DISABLED ;
+	}
+ };


Property changes on: announcement/trunk/src/main/webapp/fckeditor/editor/_source/commandclasses/fckremoveformatcommand.js
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/webapp/fckeditor/editor/_source/commandclasses/fckshowblocks.js
===================================================================
--- announcement/trunk/src/main/webapp/fckeditor/editor/_source/commandclasses/fckshowblocks.js	                        (rev 0)
+++ announcement/trunk/src/main/webapp/fckeditor/editor/_source/commandclasses/fckshowblocks.js	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,74 @@
+/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2008 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * FCKShowBlockCommand Class: the "Show Blocks" command.
+ */
+
+var FCKShowBlockCommand = function( name, defaultState )
+{
+	this.Name = name ;
+	if ( defaultState != undefined )
+		this._SavedState = defaultState ;
+	else
+		this._SavedState = null ;
+}
+
+FCKShowBlockCommand.prototype.Execute = function()
+{
+	var state = this.GetState() ;
+
+	if ( state == FCK_TRISTATE_DISABLED )
+		return ;
+
+	var body = FCK.EditorDocument.body ;
+
+	if ( state == FCK_TRISTATE_ON )
+		body.className = body.className.replace( /(^| )FCK__ShowBlocks/g, '' ) ;
+	else
+		body.className += ' FCK__ShowBlocks' ;
+
+	FCK.Events.FireEvent( 'OnSelectionChange' ) ;
+}
+
+FCKShowBlockCommand.prototype.GetState = function()
+{
+	if ( FCK.EditMode != FCK_EDITMODE_WYSIWYG )
+		return FCK_TRISTATE_DISABLED ;
+
+	// On some cases FCK.EditorDocument.body is not yet available
+	if ( !FCK.EditorDocument )
+		return FCK_TRISTATE_OFF ;
+
+	if ( /FCK__ShowBlocks(?:\s|$)/.test( FCK.EditorDocument.body.className ) )
+		return FCK_TRISTATE_ON ;
+
+	return FCK_TRISTATE_OFF ;
+}
+
+FCKShowBlockCommand.prototype.SaveState = function()
+{
+	this._SavedState = this.GetState() ;
+}
+
+FCKShowBlockCommand.prototype.RestoreState = function()
+{
+	if ( this._SavedState != null && this.GetState() != this._SavedState )
+		this.Execute() ;
+}


Property changes on: announcement/trunk/src/main/webapp/fckeditor/editor/_source/commandclasses/fckshowblocks.js
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/webapp/fckeditor/editor/_source/commandclasses/fckspellcheckcommand_gecko.js
===================================================================
--- announcement/trunk/src/main/webapp/fckeditor/editor/_source/commandclasses/fckspellcheckcommand_gecko.js	                        (rev 0)
+++ announcement/trunk/src/main/webapp/fckeditor/editor/_source/commandclasses/fckspellcheckcommand_gecko.js	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,41 @@
+/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2008 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * FCKStyleCommand Class: represents the "Spell Check" command.
+ * (Gecko specific implementation)
+ */
+
+var FCKSpellCheckCommand = function()
+{
+	this.Name = 'SpellCheck' ;
+	this.IsEnabled = ( FCKConfig.SpellChecker == 'SpellerPages' ) ;
+}
+
+FCKSpellCheckCommand.prototype.Execute = function()
+{
+	FCKDialog.OpenDialog( 'FCKDialog_SpellCheck', 'Spell Check', 'dialog/fck_spellerpages.html', 440, 480 ) ;
+}
+
+FCKSpellCheckCommand.prototype.GetState = function()
+{
+	if ( FCK.EditMode != FCK_EDITMODE_WYSIWYG )
+		return FCK_TRISTATE_DISABLED ;
+	return this.IsEnabled ? FCK_TRISTATE_OFF : FCK_TRISTATE_DISABLED ;
+}


Property changes on: announcement/trunk/src/main/webapp/fckeditor/editor/_source/commandclasses/fckspellcheckcommand_gecko.js
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/webapp/fckeditor/editor/_source/commandclasses/fckspellcheckcommand_ie.js
===================================================================
--- announcement/trunk/src/main/webapp/fckeditor/editor/_source/commandclasses/fckspellcheckcommand_ie.js	                        (rev 0)
+++ announcement/trunk/src/main/webapp/fckeditor/editor/_source/commandclasses/fckspellcheckcommand_ie.js	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,69 @@
+/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2008 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * FCKStyleCommand Class: represents the "Spell Check" command.
+ * (IE specific implementation)
+ */
+
+var FCKSpellCheckCommand = function()
+{
+	this.Name = 'SpellCheck' ;
+	this.IsEnabled = ( FCKConfig.SpellChecker == 'ieSpell' || FCKConfig.SpellChecker == 'SpellerPages' ) ;
+}
+
+FCKSpellCheckCommand.prototype.Execute = function()
+{
+	switch ( FCKConfig.SpellChecker )
+	{
+		case 'ieSpell' :
+			this._RunIeSpell() ;
+			break ;
+
+		case 'SpellerPages' :
+			FCKDialog.OpenDialog( 'FCKDialog_SpellCheck', 'Spell Check', 'dialog/fck_spellerpages.html', 440, 480 ) ;
+			break ;
+	}
+}
+
+FCKSpellCheckCommand.prototype._RunIeSpell = function()
+{
+	try
+	{
+		var oIeSpell = new ActiveXObject( "ieSpell.ieSpellExtension" ) ;
+		oIeSpell.CheckAllLinkedDocuments( FCK.EditorDocument ) ;
+	}
+	catch( e )
+	{
+		if( e.number == -2146827859 )
+		{
+			if ( confirm( FCKLang.IeSpellDownload ) )
+				window.open( FCKConfig.IeSpellDownloadUrl , 'IeSpellDownload' ) ;
+		}
+		else
+			alert( 'Error Loading ieSpell: ' + e.message + ' (' + e.number + ')' ) ;
+	}
+}
+
+FCKSpellCheckCommand.prototype.GetState = function()
+{
+	if ( FCK.EditMode != FCK_EDITMODE_WYSIWYG )
+		return FCK_TRISTATE_DISABLED ;
+	return this.IsEnabled ? FCK_TRISTATE_OFF : FCK_TRISTATE_DISABLED ;
+}


Property changes on: announcement/trunk/src/main/webapp/fckeditor/editor/_source/commandclasses/fckspellcheckcommand_ie.js
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/webapp/fckeditor/editor/_source/commandclasses/fckstylecommand.js
===================================================================
--- announcement/trunk/src/main/webapp/fckeditor/editor/_source/commandclasses/fckstylecommand.js	                        (rev 0)
+++ announcement/trunk/src/main/webapp/fckeditor/editor/_source/commandclasses/fckstylecommand.js	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,60 @@
+/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2008 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * FCKStyleCommand Class: represents the "Style" command.
+ */
+
+var FCKStyleCommand = function()
+{}
+
+FCKStyleCommand.prototype =
+{
+	Name : 'Style',
+
+	Execute : function( styleName, styleComboItem )
+	{
+		FCKUndo.SaveUndoStep() ;
+
+		if ( styleComboItem.Selected )
+			FCK.Styles.RemoveStyle( styleComboItem.Style ) ;
+		else
+			FCK.Styles.ApplyStyle( styleComboItem.Style ) ;
+
+		FCKUndo.SaveUndoStep() ;
+
+		FCK.Focus() ;
+		FCK.Events.FireEvent( 'OnSelectionChange' ) ;
+	},
+
+	GetState : function()
+	{
+		if ( FCK.EditMode != FCK_EDITMODE_WYSIWYG || !FCK.EditorDocument )
+			return FCK_TRISTATE_DISABLED ;
+
+		if ( FCKSelection.GetType() == 'Control' )
+		{
+			var el = FCKSelection.GetSelectedElement() ;
+			if ( !el || !FCKStyles.CheckHasObjectStyle( el.nodeName.toLowerCase() ) )
+				return FCK_TRISTATE_DISABLED ;
+		}
+
+		return FCK_TRISTATE_OFF ;
+	}
+};


Property changes on: announcement/trunk/src/main/webapp/fckeditor/editor/_source/commandclasses/fckstylecommand.js
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/webapp/fckeditor/editor/_source/commandclasses/fcktablecommand.js
===================================================================
--- announcement/trunk/src/main/webapp/fckeditor/editor/_source/commandclasses/fcktablecommand.js	                        (rev 0)
+++ announcement/trunk/src/main/webapp/fckeditor/editor/_source/commandclasses/fcktablecommand.js	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,106 @@
+/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2008 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * FCKPastePlainTextCommand Class: represents the
+ * "Paste as Plain Text" command.
+ */
+
+var FCKTableCommand = function( command )
+{
+	this.Name = command ;
+}
+
+FCKTableCommand.prototype.Execute = function()
+{
+	FCKUndo.SaveUndoStep() ;
+
+	if ( ! FCKBrowserInfo.IsGecko )
+	{
+		switch ( this.Name )
+		{
+			case 'TableMergeRight' :
+				return FCKTableHandler.MergeRight() ;
+			case 'TableMergeDown' :
+				return FCKTableHandler.MergeDown() ;
+		}
+	}
+
+	switch ( this.Name )
+	{
+		case 'TableInsertRowAfter' :
+			return FCKTableHandler.InsertRow( false ) ;
+		case 'TableInsertRowBefore' :
+			return FCKTableHandler.InsertRow( true ) ;
+		case 'TableDeleteRows' :
+			return FCKTableHandler.DeleteRows() ;
+		case 'TableInsertColumnAfter' :
+			return FCKTableHandler.InsertColumn( false ) ;
+		case 'TableInsertColumnBefore' :
+			return FCKTableHandler.InsertColumn( true ) ;
+		case 'TableDeleteColumns' :
+			return FCKTableHandler.DeleteColumns() ;
+		case 'TableInsertCellAfter' :
+			return FCKTableHandler.InsertCell( null, false ) ;
+		case 'TableInsertCellBefore' :
+			return FCKTableHandler.InsertCell( null, true ) ;
+		case 'TableDeleteCells' :
+			return FCKTableHandler.DeleteCells() ;
+		case 'TableMergeCells' :
+			return FCKTableHandler.MergeCells() ;
+		case 'TableHorizontalSplitCell' :
+			return FCKTableHandler.HorizontalSplitCell() ;
+		case 'TableVerticalSplitCell' :
+			return FCKTableHandler.VerticalSplitCell() ;
+		case 'TableDelete' :
+			return FCKTableHandler.DeleteTable() ;
+		default :
+			return alert( FCKLang.UnknownCommand.replace( /%1/g, this.Name ) ) ;
+	}
+}
+
+FCKTableCommand.prototype.GetState = function()
+{
+	if ( FCK.EditorDocument != null && FCKSelection.HasAncestorNode( 'TABLE' ) )
+	{
+		switch ( this.Name )
+		{
+			case 'TableHorizontalSplitCell' :
+			case 'TableVerticalSplitCell' :
+				if ( FCKTableHandler.GetSelectedCells().length == 1 )
+					return FCK_TRISTATE_OFF ;
+				else
+					return FCK_TRISTATE_DISABLED ;
+			case 'TableMergeCells' :
+				if ( FCKTableHandler.CheckIsSelectionRectangular()
+						&& FCKTableHandler.GetSelectedCells().length > 1 )
+					return FCK_TRISTATE_OFF ;
+				else
+					return FCK_TRISTATE_DISABLED ;
+			case 'TableMergeRight' :
+				return FCKTableHandler.GetMergeRightTarget() ? FCK_TRISTATE_OFF : FCK_TRISTATE_DISABLED ;
+			case 'TableMergeDown' :
+				return FCKTableHandler.GetMergeDownTarget() ? FCK_TRISTATE_OFF : FCK_TRISTATE_DISABLED ;
+			default :
+				return FCK_TRISTATE_OFF ;
+		}
+	}
+	else
+		return FCK_TRISTATE_DISABLED;
+}


Property changes on: announcement/trunk/src/main/webapp/fckeditor/editor/_source/commandclasses/fcktablecommand.js
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/webapp/fckeditor/editor/_source/commandclasses/fcktextcolorcommand.js
===================================================================
--- announcement/trunk/src/main/webapp/fckeditor/editor/_source/commandclasses/fcktextcolorcommand.js	                        (rev 0)
+++ announcement/trunk/src/main/webapp/fckeditor/editor/_source/commandclasses/fcktextcolorcommand.js	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,201 @@
+/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2008 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * FCKTextColorCommand Class: represents the text color comand. It shows the
+ * color selection panel.
+ */
+
+// FCKTextColorCommand Constructor
+//		type: can be 'ForeColor' or 'BackColor'.
+var FCKTextColorCommand = function( type )
+{
+	this.Name = type == 'ForeColor' ? 'TextColor' : 'BGColor' ;
+	this.Type = type ;
+
+	var oWindow ;
+
+	if ( FCKBrowserInfo.IsIE )
+		oWindow = window ;
+	else if ( FCK.ToolbarSet._IFrame )
+		oWindow = FCKTools.GetElementWindow( FCK.ToolbarSet._IFrame ) ;
+	else
+		oWindow = window.parent ;
+
+	this._Panel = new FCKPanel( oWindow ) ;
+	this._Panel.AppendStyleSheet( FCKConfig.SkinEditorCSS ) ;
+	this._Panel.MainNode.className = 'FCK_Panel' ;
+	this._CreatePanelBody( this._Panel.Document, this._Panel.MainNode ) ;
+	FCK.ToolbarSet.ToolbarItems.GetItem( this.Name ).RegisterPanel( this._Panel ) ;
+
+	FCKTools.DisableSelection( this._Panel.Document.body ) ;
+}
+
+FCKTextColorCommand.prototype.Execute = function( panelX, panelY, relElement )
+{
+	// Show the Color Panel at the desired position.
+	this._Panel.Show( panelX, panelY, relElement ) ;
+}
+
+FCKTextColorCommand.prototype.SetColor = function( color )
+{
+	FCKUndo.SaveUndoStep() ;
+
+	var style = FCKStyles.GetStyle( '_FCK_' +
+		( this.Type == 'ForeColor' ? 'Color' : 'BackColor' ) ) ;
+
+	if ( !color || color.length == 0 )
+		FCK.Styles.RemoveStyle( style ) ;
+	else
+	{
+		style.SetVariable( 'Color', color ) ;
+		FCKStyles.ApplyStyle( style ) ;
+	}
+
+	FCKUndo.SaveUndoStep() ;
+
+	FCK.Focus() ;
+	FCK.Events.FireEvent( 'OnSelectionChange' ) ;
+}
+
+FCKTextColorCommand.prototype.GetState = function()
+{
+	if ( FCK.EditMode != FCK_EDITMODE_WYSIWYG )
+		return FCK_TRISTATE_DISABLED ;
+	return FCK_TRISTATE_OFF ;
+}
+
+function FCKTextColorCommand_OnMouseOver()
+{
+	this.className = 'ColorSelected' ;
+}
+
+function FCKTextColorCommand_OnMouseOut()
+{
+	this.className = 'ColorDeselected' ;
+}
+
+function FCKTextColorCommand_OnClick( ev, command, color )
+{
+	this.className = 'ColorDeselected' ;
+	command.SetColor( color ) ;
+	command._Panel.Hide() ;
+}
+
+function FCKTextColorCommand_AutoOnClick( ev, command )
+{
+	this.className = 'ColorDeselected' ;
+	command.SetColor( '' ) ;
+	command._Panel.Hide() ;
+}
+
+function FCKTextColorCommand_MoreOnClick( ev, command )
+{
+	this.className = 'ColorDeselected' ;
+	command._Panel.Hide() ;
+	FCKDialog.OpenDialog( 'FCKDialog_Color', FCKLang.DlgColorTitle, 'dialog/fck_colorselector.html', 410, 320,
+			FCKTools.Bind( command, command.SetColor ) ) ;
+}
+
+FCKTextColorCommand.prototype._CreatePanelBody = function( targetDocument, targetDiv )
+{
+	function CreateSelectionDiv()
+	{
+		var oDiv = targetDocument.createElement( "DIV" ) ;
+		oDiv.className = 'ColorDeselected' ;
+		FCKTools.AddEventListenerEx( oDiv, 'mouseover', FCKTextColorCommand_OnMouseOver ) ;
+		FCKTools.AddEventListenerEx( oDiv, 'mouseout', FCKTextColorCommand_OnMouseOut ) ;
+
+		return oDiv ;
+	}
+
+	// Create the Table that will hold all colors.
+	var oTable = targetDiv.appendChild( targetDocument.createElement( "TABLE" ) ) ;
+	oTable.className = 'ForceBaseFont' ;		// Firefox 1.5 Bug.
+	oTable.style.tableLayout = 'fixed' ;
+	oTable.cellPadding = 0 ;
+	oTable.cellSpacing = 0 ;
+	oTable.border = 0 ;
+	oTable.width = 150 ;
+
+	var oCell = oTable.insertRow(-1).insertCell(-1) ;
+	oCell.colSpan = 8 ;
+
+	// Create the Button for the "Automatic" color selection.
+	var oDiv = oCell.appendChild( CreateSelectionDiv() ) ;
+	oDiv.innerHTML =
+		'<table cellspacing="0" cellpadding="0" width="100%" border="0">\
+			<tr>\
+				<td><div class="ColorBoxBorder"><div class="ColorBox" style="background-color: #000000"></div></div></td>\
+				<td nowrap width="100%" align="center">' + FCKLang.ColorAutomatic + '</td>\
+			</tr>\
+		</table>' ;
+
+	FCKTools.AddEventListenerEx( oDiv, 'click', FCKTextColorCommand_AutoOnClick, this ) ;
+
+	// Dirty hack for Opera, Safari and Firefox 3.
+	if ( !FCKBrowserInfo.IsIE )
+		oDiv.style.width = '96%' ;
+
+	// Create an array of colors based on the configuration file.
+	var aColors = FCKConfig.FontColors.toString().split(',') ;
+
+	// Create the colors table based on the array.
+	var iCounter = 0 ;
+	while ( iCounter < aColors.length )
+	{
+		var oRow = oTable.insertRow(-1) ;
+
+		for ( var i = 0 ; i < 8 ; i++, iCounter++ )
+		{
+			// The div will be created even if no more colors are available.
+			// Extra divs will be hidden later in the code. (#1597)
+			if ( iCounter < aColors.length )
+			{
+				var colorParts = aColors[iCounter].split('/') ;
+				var colorValue = '#' + colorParts[0] ;
+				var colorName = colorParts[1] || colorValue ;
+			}
+
+			oDiv = oRow.insertCell(-1).appendChild( CreateSelectionDiv() ) ;
+			oDiv.innerHTML = '<div class="ColorBoxBorder"><div class="ColorBox" style="background-color: ' + colorValue + '"></div></div>' ;
+
+			if ( iCounter >= aColors.length )
+				oDiv.style.visibility = 'hidden' ;
+			else
+				FCKTools.AddEventListenerEx( oDiv, 'click', FCKTextColorCommand_OnClick, [ this, colorName ] ) ;
+		}
+	}
+
+	// Create the Row and the Cell for the "More Colors..." button.
+	if ( FCKConfig.EnableMoreFontColors )
+	{
+		oCell = oTable.insertRow(-1).insertCell(-1) ;
+		oCell.colSpan = 8 ;
+
+		oDiv = oCell.appendChild( CreateSelectionDiv() ) ;
+		oDiv.innerHTML = '<table width="100%" cellpadding="0" cellspacing="0" border="0"><tr><td nowrap align="center">' + FCKLang.ColorMoreColors + '</td></tr></table>' ;
+
+		FCKTools.AddEventListenerEx( oDiv, 'click', FCKTextColorCommand_MoreOnClick, this ) ;
+	}
+
+	// Dirty hack for Opera, Safari and Firefox 3.
+	if ( !FCKBrowserInfo.IsIE )
+		oDiv.style.width = '96%' ;
+}


Property changes on: announcement/trunk/src/main/webapp/fckeditor/editor/_source/commandclasses/fcktextcolorcommand.js
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/webapp/fckeditor/editor/_source/fckconstants.js
===================================================================
--- announcement/trunk/src/main/webapp/fckeditor/editor/_source/fckconstants.js	                        (rev 0)
+++ announcement/trunk/src/main/webapp/fckeditor/editor/_source/fckconstants.js	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,56 @@
+/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2008 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * Defines some constants used by the editor. These constants are also
+ * globally available in the page where the editor is placed.
+ */
+
+// Editor Instance Status.
+var FCK_STATUS_NOTLOADED	= window.parent.FCK_STATUS_NOTLOADED	= 0 ;
+var FCK_STATUS_ACTIVE		= window.parent.FCK_STATUS_ACTIVE		= 1 ;
+var FCK_STATUS_COMPLETE		= window.parent.FCK_STATUS_COMPLETE		= 2 ;
+
+// Tristate Operations.
+var FCK_TRISTATE_OFF		= window.parent.FCK_TRISTATE_OFF		= 0 ;
+var FCK_TRISTATE_ON			= window.parent.FCK_TRISTATE_ON			= 1 ;
+var FCK_TRISTATE_DISABLED	= window.parent.FCK_TRISTATE_DISABLED	= -1 ;
+
+// For unknown values.
+var FCK_UNKNOWN				= window.parent.FCK_UNKNOWN				= -9 ;
+
+// Toolbar Items Style.
+var FCK_TOOLBARITEM_ONLYICON	= window.parent.FCK_TOOLBARITEM_ONLYICON	= 0 ;
+var FCK_TOOLBARITEM_ONLYTEXT	= window.parent.FCK_TOOLBARITEM_ONLYTEXT	= 1 ;
+var FCK_TOOLBARITEM_ICONTEXT	= window.parent.FCK_TOOLBARITEM_ICONTEXT	= 2 ;
+
+// Edit Mode
+var FCK_EDITMODE_WYSIWYG	= window.parent.FCK_EDITMODE_WYSIWYG	= 0 ;
+var FCK_EDITMODE_SOURCE		= window.parent.FCK_EDITMODE_SOURCE		= 1 ;
+
+var FCK_IMAGES_PATH = 'images/' ;		// Check usage.
+var FCK_SPACER_PATH = 'images/spacer.gif' ;
+
+var CTRL	= 1000 ;
+var SHIFT	= 2000 ;
+var ALT		= 4000 ;
+
+var FCK_STYLE_BLOCK		= 0 ;
+var FCK_STYLE_INLINE	= 1 ;
+var FCK_STYLE_OBJECT	= 2 ;


Property changes on: announcement/trunk/src/main/webapp/fckeditor/editor/_source/fckconstants.js
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/webapp/fckeditor/editor/_source/fckeditorapi.js
===================================================================
--- announcement/trunk/src/main/webapp/fckeditor/editor/_source/fckeditorapi.js	                        (rev 0)
+++ announcement/trunk/src/main/webapp/fckeditor/editor/_source/fckeditorapi.js	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,178 @@
+/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2008 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * Create the FCKeditorAPI object that is available as a global object in
+ * the page where the editor is placed in.
+ */
+
+var FCKeditorAPI ;
+
+function InitializeAPI()
+{
+	var oParentWindow = window.parent ;
+
+	if ( !( FCKeditorAPI = oParentWindow.FCKeditorAPI ) )
+	{
+		// Make the FCKeditorAPI object available in the parent window. Use
+		// eval so this core runs in the parent's scope and so it will still be
+		// available if the editor instance is removed ("Can't execute code
+		// from a freed script" error).
+
+		// Note: we check the existence of oEditor.GetParentForm because some external
+		// code (like JSON) can extend the Object prototype and we get then extra oEditor
+		// objects that aren't really FCKeditor instances.
+		var sScript =
+			'window.FCKeditorAPI = {' +
+				'Version : "2.6.2",' +
+				'VersionBuild : "19417",' +
+				'Instances : new Object(),' +
+
+				'GetInstance : function( name )' +
+				'{' +
+					'return this.Instances[ name ];' +
+				'},' +
+
+				'_FormSubmit : function()' +
+				'{' +
+					'for ( var name in FCKeditorAPI.Instances )' +
+					'{' +
+						'var oEditor = FCKeditorAPI.Instances[ name ] ;' +
+						'if ( oEditor.GetParentForm && oEditor.GetParentForm() == this )' +
+							'oEditor.UpdateLinkedField() ;' +
+					'}' +
+					'this._FCKOriginalSubmit() ;' +
+				'},' +
+
+				'_FunctionQueue	: {' +
+					'Functions : new Array(),' +
+					'IsRunning : false,' +
+
+					'Add : function( f )' +
+					'{' +
+						'this.Functions.push( f );' +
+						'if ( !this.IsRunning )' +
+							'this.StartNext();' +
+					'},' +
+
+					'StartNext : function()' +
+					'{' +
+						'var aQueue = this.Functions ;' +
+						'if ( aQueue.length > 0 )' +
+						'{' +
+							'this.IsRunning = true;' +
+							'aQueue[0].call();' +
+						'}' +
+						'else ' +
+							'this.IsRunning = false;' +
+					'},' +
+
+					'Remove : function( f )' +
+					'{' +
+						'var aQueue = this.Functions;' +
+						'var i = 0, fFunc;' +
+						'while( (fFunc = aQueue[ i ]) )' +
+						'{' +
+							'if ( fFunc == f )' +
+								'aQueue.splice( i,1 );' +
+							'i++ ;' +
+						'}' +
+						'this.StartNext();' +
+					'}' +
+				'}' +
+			'}' ;
+
+		// In IE, the "eval" function is not always available (it works with
+		// the JavaScript samples, but not with the ASP ones, for example).
+		// So, let's use the execScript instead.
+		if ( oParentWindow.execScript )
+			oParentWindow.execScript( sScript, 'JavaScript' ) ;
+		else
+		{
+			if ( FCKBrowserInfo.IsGecko10 )
+			{
+				// FF 1.0.4 gives an error with the request bellow. The
+				// following seams to work well.
+				eval.call( oParentWindow, sScript ) ;
+			}
+			else if( FCKBrowserInfo.IsAIR )
+			{
+				FCKAdobeAIR.FCKeditorAPI_Evaluate( oParentWindow, sScript ) ;
+			}
+			else if ( FCKBrowserInfo.IsSafari || FCKBrowserInfo.IsGecko19 )
+			{
+				// oParentWindow.eval in Safari and Gran Paradiso executes in the calling window
+				// environment, instead of the parent one. The following should make it work.
+				var oParentDocument = oParentWindow.document ;
+				var eScript = oParentDocument.createElement('script') ;
+				eScript.appendChild( oParentDocument.createTextNode( sScript ) ) ;
+				oParentDocument.documentElement.appendChild( eScript ) ;
+			}
+			else
+				oParentWindow.eval( sScript ) ;
+		}
+
+		FCKeditorAPI = oParentWindow.FCKeditorAPI ;
+
+		// The __Instances properly has been changed to the public Instances,
+		// but we should still have the "deprecated" version of it.
+		FCKeditorAPI.__Instances = FCKeditorAPI.Instances ;
+	}
+
+	// Add the current instance to the FCKeditorAPI's instances collection.
+	FCKeditorAPI.Instances[ FCK.Name ] = FCK ;
+}
+
+// Attach to the form onsubmit event and to the form.submit().
+function _AttachFormSubmitToAPI()
+{
+	// Get the linked field form.
+	var oForm = FCK.GetParentForm() ;
+
+	if ( oForm )
+	{
+		// Attach to the onsubmit event.
+		FCKTools.AddEventListener( oForm, 'submit', FCK.UpdateLinkedField ) ;
+
+		// IE sees oForm.submit function as an 'object'.
+		if ( !oForm._FCKOriginalSubmit && ( typeof( oForm.submit ) == 'function' || ( !oForm.submit.tagName && !oForm.submit.length ) ) )
+		{
+			// Save the original submit.
+			oForm._FCKOriginalSubmit = oForm.submit ;
+
+			// Create our replacement for the submit.
+			oForm.submit = FCKeditorAPI._FormSubmit ;
+		}
+	}
+}
+
+function FCKeditorAPI_Cleanup()
+{
+	if ( window.FCKConfig && FCKConfig.MsWebBrowserControlCompat
+			&& !window.FCKUnloadFlag )
+		return ;
+	delete FCKeditorAPI.Instances[ FCK.Name ] ;
+}
+function FCKeditorAPI_ConfirmCleanup()
+{
+	if ( window.FCKConfig && FCKConfig.MsWebBrowserControlCompat )
+		window.FCKUnloadFlag = true ;
+}
+FCKTools.AddEventListener( window, 'unload', FCKeditorAPI_Cleanup ) ;
+FCKTools.AddEventListener( window, 'beforeunload', FCKeditorAPI_ConfirmCleanup) ;


Property changes on: announcement/trunk/src/main/webapp/fckeditor/editor/_source/fckeditorapi.js
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/webapp/fckeditor/editor/_source/fckjscoreextensions.js
===================================================================
--- announcement/trunk/src/main/webapp/fckeditor/editor/_source/fckjscoreextensions.js	                        (rev 0)
+++ announcement/trunk/src/main/webapp/fckeditor/editor/_source/fckjscoreextensions.js	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,166 @@
+/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2008 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * Extensions to the JavaScript Core.
+ *
+ * All custom extensions functions are PascalCased to differ from the standard
+ * camelCased ones.
+ */
+
+String.prototype.Contains = function( textToCheck )
+{
+	return ( this.indexOf( textToCheck ) > -1 ) ;
+}
+
+String.prototype.Equals = function()
+{
+	var aArgs = arguments ;
+
+	// The arguments could also be a single array.
+	if ( aArgs.length == 1 && aArgs[0].pop )
+		aArgs = aArgs[0] ;
+
+	for ( var i = 0 ; i < aArgs.length ; i++ )
+	{
+		if ( this == aArgs[i] )
+			return true ;
+	}
+	return false ;
+}
+
+String.prototype.IEquals = function()
+{
+	var thisUpper = this.toUpperCase() ;
+
+	var aArgs = arguments ;
+
+	// The arguments could also be a single array.
+	if ( aArgs.length == 1 && aArgs[0].pop )
+		aArgs = aArgs[0] ;
+
+	for ( var i = 0 ; i < aArgs.length ; i++ )
+	{
+		if ( thisUpper == aArgs[i].toUpperCase() )
+			return true ;
+	}
+	return false ;
+}
+
+String.prototype.ReplaceAll = function( searchArray, replaceArray )
+{
+	var replaced = this ;
+
+	for ( var i = 0 ; i < searchArray.length ; i++ )
+	{
+		replaced = replaced.replace( searchArray[i], replaceArray[i] ) ;
+	}
+
+	return replaced ;
+}
+
+String.prototype.StartsWith = function( value )
+{
+	return ( this.substr( 0, value.length ) == value ) ;
+}
+
+// Extends the String object, creating a "EndsWith" method on it.
+String.prototype.EndsWith = function( value, ignoreCase )
+{
+	var L1 = this.length ;
+	var L2 = value.length ;
+
+	if ( L2 > L1 )
+		return false ;
+
+	if ( ignoreCase )
+	{
+		var oRegex = new RegExp( value + '$' , 'i' ) ;
+		return oRegex.test( this ) ;
+	}
+	else
+		return ( L2 == 0 || this.substr( L1 - L2, L2 ) == value ) ;
+}
+
+String.prototype.Remove = function( start, length )
+{
+	var s = '' ;
+
+	if ( start > 0 )
+		s = this.substring( 0, start ) ;
+
+	if ( start + length < this.length )
+		s += this.substring( start + length , this.length ) ;
+
+	return s ;
+}
+
+String.prototype.Trim = function()
+{
+	// We are not using \s because we don't want "non-breaking spaces to be caught".
+	return this.replace( /(^[ \t\n\r]*)|([ \t\n\r]*$)/g, '' ) ;
+}
+
+String.prototype.LTrim = function()
+{
+	// We are not using \s because we don't want "non-breaking spaces to be caught".
+	return this.replace( /^[ \t\n\r]*/g, '' ) ;
+}
+
+String.prototype.RTrim = function()
+{
+	// We are not using \s because we don't want "non-breaking spaces to be caught".
+	return this.replace( /[ \t\n\r]*$/g, '' ) ;
+}
+
+String.prototype.ReplaceNewLineChars = function( replacement )
+{
+	return this.replace( /\n/g, replacement ) ;
+}
+
+String.prototype.Replace = function( regExp, replacement, thisObj )
+{
+	if ( typeof replacement == 'function' )
+	{
+		return this.replace( regExp,
+			function()
+			{
+				return replacement.apply( thisObj || this, arguments ) ;
+			} ) ;
+	}
+	else
+		return this.replace( regExp, replacement ) ;
+}
+
+Array.prototype.AddItem = function( item )
+{
+	var i = this.length ;
+	this[ i ] = item ;
+	return i ;
+}
+
+Array.prototype.IndexOf = function( value )
+{
+	for ( var i = 0 ; i < this.length ; i++ )
+	{
+		if ( this[i] == value )
+			return i ;
+	}
+	return -1 ;
+}


Property changes on: announcement/trunk/src/main/webapp/fckeditor/editor/_source/fckjscoreextensions.js
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/webapp/fckeditor/editor/_source/fckscriptloader.js
===================================================================
--- announcement/trunk/src/main/webapp/fckeditor/editor/_source/fckscriptloader.js	                        (rev 0)
+++ announcement/trunk/src/main/webapp/fckeditor/editor/_source/fckscriptloader.js	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,122 @@
+/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2008 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * This is a utility object which can be used to load specific components of
+ * FCKeditor, including all dependencies.
+ */
+
+var FCK_GENERIC = 1 ;
+var FCK_GENERIC_SPECIFIC = 2 ;
+var FCK_SPECIFIC = 3 ;
+
+var FCKScriptLoader = new Object() ;
+FCKScriptLoader.FCKeditorPath = '/fckeditor/' ;
+
+FCKScriptLoader._Scripts = new Object() ;
+FCKScriptLoader._LoadedScripts = new Object() ;
+
+FCKScriptLoader._IsIE = (/msie/).test( navigator.userAgent.toLowerCase() ) ;
+
+FCKScriptLoader.Load = function( scriptName )
+{
+	// Check if the script has already been loaded.
+	if ( scriptName in FCKScriptLoader._LoadedScripts )
+		return ;
+
+	FCKScriptLoader._LoadedScripts[ scriptName ] = true ;
+
+	var oScriptInfo = this._Scripts[ scriptName ] ;
+
+	if ( !oScriptInfo )
+	{
+		alert( 'FCKScriptLoader: The script "' + scriptName + '" could not be loaded' ) ;
+		return ;
+	}
+
+	for ( var i = 0 ; i < oScriptInfo.Dependency.length ; i++ )
+	{
+		this.Load( oScriptInfo.Dependency[i] ) ;
+	}
+
+	var sBaseScriptName = oScriptInfo.BasePath + scriptName.toLowerCase() ;
+
+	if ( oScriptInfo.Compatibility == FCK_GENERIC || oScriptInfo.Compatibility == FCK_GENERIC_SPECIFIC )
+		this._LoadScript( sBaseScriptName + '.js' ) ;
+
+	if ( oScriptInfo.Compatibility == FCK_SPECIFIC || oScriptInfo.Compatibility == FCK_GENERIC_SPECIFIC )
+	{
+		if ( this._IsIE )
+			this._LoadScript( sBaseScriptName + '_ie.js' ) ;
+		else
+			this._LoadScript( sBaseScriptName + '_gecko.js' ) ;
+	}
+}
+
+FCKScriptLoader._LoadScript = function( scriptPathFromSource )
+{
+	document.write( '<script type="text/javascript" src="' + this.FCKeditorPath + 'editor/_source/' + scriptPathFromSource + '"><\/script>' ) ;
+}
+
+FCKScriptLoader.AddScript = function( scriptName, scriptBasePath, dependency, compatibility )
+{
+	this._Scripts[ scriptName ] =
+	{
+		BasePath : scriptBasePath || '',
+		Dependency : dependency || [],
+		Compatibility : compatibility || FCK_GENERIC
+	} ;
+}
+
+/*
+ * ####################################
+ * ### Scripts Definition List
+ */
+
+FCKScriptLoader.AddScript( 'FCKConstants' ) ;
+FCKScriptLoader.AddScript( 'FCKJSCoreExtensions' ) ;
+
+FCKScriptLoader.AddScript( 'FCK_Xhtml10Transitional', '../dtd/' ) ;
+
+FCKScriptLoader.AddScript( 'FCKDataProcessor'	, 'classes/'	, ['FCKConfig','FCKBrowserInfo','FCKRegexLib','FCKXHtml'] ) ;
+FCKScriptLoader.AddScript( 'FCKDocumentFragment', 'classes/'	, ['FCKDomTools'], FCK_SPECIFIC ) ;
+FCKScriptLoader.AddScript( 'FCKDomRange'		, 'classes/'	, ['FCKBrowserInfo','FCKJSCoreExtensions','FCKW3CRange','FCKElementPath','FCKDomTools','FCKTools','FCKDocumentFragment'], FCK_GENERIC_SPECIFIC ) ;
+FCKScriptLoader.AddScript( 'FCKDomRangeIterator', 'classes/'	, ['FCKDomRange','FCKListsLib'], FCK_GENERIC ) ;
+FCKScriptLoader.AddScript( 'FCKElementPath'		, 'classes/'	, ['FCKListsLib'], FCK_GENERIC ) ;
+FCKScriptLoader.AddScript( 'FCKEnterKey'		, 'classes/'	, ['FCKDomRange','FCKDomTools','FCKTools','FCKKeystrokeHandler','FCKListHandler'], FCK_GENERIC ) ;
+FCKScriptLoader.AddScript( 'FCKPanel'			, 'classes/'	, ['FCKBrowserInfo','FCKConfig','FCKTools'], FCK_GENERIC ) ;
+FCKScriptLoader.AddScript( 'FCKImagePreloader'	, 'classes/' ) ;
+FCKScriptLoader.AddScript( 'FCKKeystrokeHandler', 'classes/'	, ['FCKConstants','FCKBrowserInfo','FCKTools'], FCK_GENERIC ) ;
+FCKScriptLoader.AddScript( 'FCKStyle'			, 'classes/'	, ['FCKConstants','FCKDomRange','FCKDomRangeIterator','FCKDomTools','FCKListsLib','FCK_Xhtml10Transitional'], FCK_GENERIC ) ;
+FCKScriptLoader.AddScript( 'FCKW3CRange'		, 'classes/'	, ['FCKDomTools','FCKTools','FCKDocumentFragment'], FCK_GENERIC ) ;
+
+FCKScriptLoader.AddScript( 'FCKBrowserInfo'		, 'internals/'	, ['FCKJSCoreExtensions'] ) ;
+FCKScriptLoader.AddScript( 'FCKCodeFormatter'	, 'internals/' ) ;
+FCKScriptLoader.AddScript( 'FCKConfig'			, 'internals/'	, ['FCKBrowserInfo','FCKConstants'] ) ;
+FCKScriptLoader.AddScript( 'FCKDebug'			, 'internals/'	, ['FCKConfig'] ) ;
+FCKScriptLoader.AddScript( 'FCKDomTools'		, 'internals/'	, ['FCKJSCoreExtensions','FCKBrowserInfo','FCKTools','FCKDomRange'], FCK_GENERIC ) ;
+FCKScriptLoader.AddScript( 'FCKListsLib'		, 'internals/' ) ;
+FCKScriptLoader.AddScript( 'FCKListHandler'		, 'internals/'	, ['FCKConfig', 'FCKDocumentFragment', 'FCKJSCoreExtensions','FCKDomTools'], FCK_GENERIC ) ;
+FCKScriptLoader.AddScript( 'FCKRegexLib'		, 'internals/' ) ;
+FCKScriptLoader.AddScript( 'FCKStyles'			, 'internals/'	, ['FCKConfig', 'FCKDocumentFragment', 'FCKDomRange','FCKDomTools','FCKElementPath','FCKTools'], FCK_GENERIC ) ;
+FCKScriptLoader.AddScript( 'FCKTools'			, 'internals/'	, ['FCKJSCoreExtensions','FCKBrowserInfo'], FCK_GENERIC_SPECIFIC ) ;
+FCKScriptLoader.AddScript( 'FCKXHtml'			, 'internals/'	, ['FCKBrowserInfo','FCKCodeFormatter','FCKConfig','FCKDomTools','FCKListsLib','FCKRegexLib','FCKTools','FCKXHtmlEntities'], FCK_GENERIC_SPECIFIC ) ;
+FCKScriptLoader.AddScript( 'FCKXHtmlEntities'	, 'internals/'	, ['FCKConfig'] ) ;
+
+// ####################################


Property changes on: announcement/trunk/src/main/webapp/fckeditor/editor/_source/fckscriptloader.js
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/webapp/fckeditor/editor/_source/internals/fck.js
===================================================================
--- announcement/trunk/src/main/webapp/fckeditor/editor/_source/internals/fck.js	                        (rev 0)
+++ announcement/trunk/src/main/webapp/fckeditor/editor/_source/internals/fck.js	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,1221 @@
+/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2008 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * Creation and initialization of the "FCK" object. This is the main object
+ * that represents an editor instance.
+ */
+
+// FCK represents the active editor instance.
+var FCK =
+{
+	Name			: FCKURLParams[ 'InstanceName' ],
+	Status			: FCK_STATUS_NOTLOADED,
+	EditMode		: FCK_EDITMODE_WYSIWYG,
+	Toolbar			: null,
+	HasFocus		: false,
+	DataProcessor	: new FCKDataProcessor(),
+
+	GetInstanceObject	: (function()
+	{
+		var w = window ;
+		return function( name )
+		{
+			return w[name] ;
+		}
+	})(),
+
+	AttachToOnSelectionChange : function( functionPointer )
+	{
+		this.Events.AttachEvent( 'OnSelectionChange', functionPointer ) ;
+	},
+
+	GetLinkedFieldValue : function()
+	{
+		return this.LinkedField.value ;
+	},
+
+	GetParentForm : function()
+	{
+		return this.LinkedField.form ;
+	} ,
+
+	// # START : IsDirty implementation
+
+	StartupValue : '',
+
+	IsDirty : function()
+	{
+		if ( this.EditMode == FCK_EDITMODE_SOURCE )
+			return ( this.StartupValue != this.EditingArea.Textarea.value ) ;
+		else
+		{
+			// It can happen switching between design and source mode in Gecko
+			if ( ! this.EditorDocument )
+				return false ;
+
+			return ( this.StartupValue != this.EditorDocument.body.innerHTML ) ;
+		}
+	},
+
+	ResetIsDirty : function()
+	{
+		if ( this.EditMode == FCK_EDITMODE_SOURCE )
+			this.StartupValue = this.EditingArea.Textarea.value ;
+		else if ( this.EditorDocument.body )
+			this.StartupValue = this.EditorDocument.body.innerHTML ;
+	},
+
+	// # END : IsDirty implementation
+
+	StartEditor : function()
+	{
+		this.TempBaseTag = FCKConfig.BaseHref.length > 0 ? '<base href="' + FCKConfig.BaseHref + '" _fcktemp="true"></base>' : '' ;
+
+		// Setup the keystroke handler.
+		var oKeystrokeHandler = FCK.KeystrokeHandler = new FCKKeystrokeHandler() ;
+		oKeystrokeHandler.OnKeystroke = _FCK_KeystrokeHandler_OnKeystroke ;
+
+		// Set the config keystrokes.
+		oKeystrokeHandler.SetKeystrokes( FCKConfig.Keystrokes ) ;
+
+		// In IE7, if the editor tries to access the clipboard by code, a dialog is
+		// shown to the user asking if the application is allowed to access or not.
+		// Due to the IE implementation of it, the KeystrokeHandler will not work
+		//well in this case, so we must leave the pasting keys to have their default behavior.
+		if ( FCKBrowserInfo.IsIE7 )
+		{
+			if ( ( CTRL + 86 /*V*/ ) in oKeystrokeHandler.Keystrokes )
+				oKeystrokeHandler.SetKeystrokes( [ CTRL + 86, true ] ) ;
+
+			if ( ( SHIFT + 45 /*INS*/ ) in oKeystrokeHandler.Keystrokes )
+				oKeystrokeHandler.SetKeystrokes( [ SHIFT + 45, true ] ) ;
+		}
+
+		// Retain default behavior for Ctrl-Backspace. (Bug #362)
+		oKeystrokeHandler.SetKeystrokes( [ CTRL + 8, true ] ) ;
+
+		this.EditingArea = new FCKEditingArea( document.getElementById( 'xEditingArea' ) ) ;
+		this.EditingArea.FFSpellChecker = FCKConfig.FirefoxSpellChecker ;
+
+		// Set the editor's startup contents.
+		this.SetData( this.GetLinkedFieldValue(), true ) ;
+
+		// Tab key handling for source mode.
+		FCKTools.AddEventListener( document, "keydown", this._TabKeyHandler ) ;
+
+		// Add selection change listeners. They must be attached only once.
+		this.AttachToOnSelectionChange( _FCK_PaddingNodeListener ) ;
+		if ( FCKBrowserInfo.IsGecko )
+			this.AttachToOnSelectionChange( this._ExecCheckEmptyBlock ) ;
+
+	},
+
+	Focus : function()
+	{
+		FCK.EditingArea.Focus() ;
+	},
+
+	SetStatus : function( newStatus )
+	{
+		this.Status = newStatus ;
+
+		if ( newStatus == FCK_STATUS_ACTIVE )
+		{
+			FCKFocusManager.AddWindow( window, true ) ;
+
+			if ( FCKBrowserInfo.IsIE )
+				FCKFocusManager.AddWindow( window.frameElement, true ) ;
+
+			// Force the focus in the editor.
+			if ( FCKConfig.StartupFocus )
+				FCK.Focus() ;
+		}
+
+		this.Events.FireEvent( 'OnStatusChange', newStatus ) ;
+
+	},
+
+	// Fixes the body by moving all inline and text nodes to appropriate block
+	// elements.
+	FixBody : function()
+	{
+		var sBlockTag = FCKConfig.EnterMode ;
+
+		// In 'br' mode, no fix must be done.
+		if ( sBlockTag != 'p' && sBlockTag != 'div' )
+			return ;
+
+		var oDocument = this.EditorDocument ;
+
+		if ( !oDocument )
+			return ;
+
+		var oBody = oDocument.body ;
+
+		if ( !oBody )
+			return ;
+
+		FCKDomTools.TrimNode( oBody ) ;
+
+		var oNode = oBody.firstChild ;
+		var oNewBlock ;
+
+		while ( oNode )
+		{
+			var bMoveNode = false ;
+
+			switch ( oNode.nodeType )
+			{
+				// Element Node.
+				case 1 :
+					var nodeName = oNode.nodeName.toLowerCase() ;
+					if ( !FCKListsLib.BlockElements[ nodeName ] &&
+							nodeName != 'li' &&
+							!oNode.getAttribute('_fckfakelement') &&
+							oNode.getAttribute('_moz_dirty') == null )
+						bMoveNode = true ;
+					break ;
+
+				// Text Node.
+				case 3 :
+					// Ignore space only or empty text.
+					if ( oNewBlock || oNode.nodeValue.Trim().length > 0 )
+						bMoveNode = true ;
+					break;
+
+				// Comment Node
+				case 8 :
+					if ( oNewBlock )
+						bMoveNode = true ;
+					break;
+			}
+
+			if ( bMoveNode )
+			{
+				var oParent = oNode.parentNode ;
+
+				if ( !oNewBlock )
+					oNewBlock = oParent.insertBefore( oDocument.createElement( sBlockTag ), oNode ) ;
+
+				oNewBlock.appendChild( oParent.removeChild( oNode ) ) ;
+
+				oNode = oNewBlock.nextSibling ;
+			}
+			else
+			{
+				if ( oNewBlock )
+				{
+					FCKDomTools.TrimNode( oNewBlock ) ;
+					oNewBlock = null ;
+				}
+				oNode = oNode.nextSibling ;
+			}
+		}
+
+		if ( oNewBlock )
+			FCKDomTools.TrimNode( oNewBlock ) ;
+	},
+
+	GetData : function( format )
+	{
+		// We assume that if the user is in source editing, the editor value must
+		// represent the exact contents of the source, as the user wanted it to be.
+		if ( FCK.EditMode == FCK_EDITMODE_SOURCE )
+				return FCK.EditingArea.Textarea.value ;
+
+		this.FixBody() ;
+
+		var oDoc = FCK.EditorDocument ;
+		if ( !oDoc )
+			return null ;
+
+		var isFullPage = FCKConfig.FullPage ;
+
+		// Call the Data Processor to generate the output data.
+		var data = FCK.DataProcessor.ConvertToDataFormat(
+			isFullPage ? oDoc.documentElement : oDoc.body,
+			!isFullPage,
+			FCKConfig.IgnoreEmptyParagraphValue,
+			format ) ;
+
+		// Restore protected attributes.
+		data = FCK.ProtectEventsRestore( data ) ;
+
+		if ( FCKBrowserInfo.IsIE )
+			data = data.replace( FCKRegexLib.ToReplace, '$1' ) ;
+
+		if ( isFullPage )
+		{
+			if ( FCK.DocTypeDeclaration && FCK.DocTypeDeclaration.length > 0 )
+				data = FCK.DocTypeDeclaration + '\n' + data ;
+
+			if ( FCK.XmlDeclaration && FCK.XmlDeclaration.length > 0 )
+				data = FCK.XmlDeclaration + '\n' + data ;
+		}
+
+		return FCKConfig.ProtectedSource.Revert( data ) ;
+	},
+
+	UpdateLinkedField : function()
+	{
+		var value = FCK.GetXHTML( FCKConfig.FormatOutput ) ;
+
+		if ( FCKConfig.HtmlEncodeOutput )
+			value = FCKTools.HTMLEncode( value ) ;
+
+		FCK.LinkedField.value = value ;
+		FCK.Events.FireEvent( 'OnAfterLinkedFieldUpdate' ) ;
+	},
+
+	RegisteredDoubleClickHandlers : new Object(),
+
+	OnDoubleClick : function( element )
+	{
+		var oCalls = FCK.RegisteredDoubleClickHandlers[ element.tagName.toUpperCase() ] ;
+
+		if ( oCalls )
+		{
+			for ( var i = 0 ; i < oCalls.length ; i++ )
+				oCalls[ i ]( element ) ;
+		}
+
+		// Generic handler for any element
+		oCalls = FCK.RegisteredDoubleClickHandlers[ '*' ] ;
+
+		if ( oCalls )
+		{
+			for ( var i = 0 ; i < oCalls.length ; i++ )
+				oCalls[ i ]( element ) ;
+		}
+
+	},
+
+	// Register objects that can handle double click operations.
+	RegisterDoubleClickHandler : function( handlerFunction, tag )
+	{
+		var nodeName = tag || '*' ;
+		nodeName = nodeName.toUpperCase() ;
+
+		var aTargets ;
+
+		if ( !( aTargets = FCK.RegisteredDoubleClickHandlers[ nodeName ] ) )
+			FCK.RegisteredDoubleClickHandlers[ nodeName ] = [ handlerFunction ] ;
+		else
+		{
+			// Check that the event handler isn't already registered with the same listener
+			// It doesn't detect function pointers belonging to an object (at least in Gecko)
+			if ( aTargets.IndexOf( handlerFunction ) == -1 )
+				aTargets.push( handlerFunction ) ;
+		}
+
+	},
+
+	OnAfterSetHTML : function()
+	{
+		FCKDocumentProcessor.Process( FCK.EditorDocument ) ;
+		FCKUndo.SaveUndoStep() ;
+
+		FCK.Events.FireEvent( 'OnSelectionChange' ) ;
+		FCK.Events.FireEvent( 'OnAfterSetHTML' ) ;
+	},
+
+	// Saves URLs on links and images on special attributes, so they don't change when
+	// moving around.
+	ProtectUrls : function( html )
+	{
+		// <A> href
+		html = html.replace( FCKRegexLib.ProtectUrlsA	, '$& _fcksavedurl=$1' ) ;
+
+		// <IMG> src
+		html = html.replace( FCKRegexLib.ProtectUrlsImg	, '$& _fcksavedurl=$1' ) ;
+
+		// <AREA> href
+		html = html.replace( FCKRegexLib.ProtectUrlsArea	, '$& _fcksavedurl=$1' ) ;
+
+		return html ;
+	},
+
+	// Saves event attributes (like onclick) so they don't get executed while
+	// editing.
+	ProtectEvents : function( html )
+	{
+		return html.replace( FCKRegexLib.TagsWithEvent, _FCK_ProtectEvents_ReplaceTags ) ;
+	},
+
+	ProtectEventsRestore : function( html )
+	{
+		return html.replace( FCKRegexLib.ProtectedEvents, _FCK_ProtectEvents_RestoreEvents ) ;
+	},
+
+	ProtectTags : function( html )
+	{
+		var sTags = FCKConfig.ProtectedTags ;
+
+		// IE doesn't support <abbr> and it breaks it. Let's protect it.
+		if ( FCKBrowserInfo.IsIE )
+			sTags += sTags.length > 0 ? '|ABBR|XML|EMBED|OBJECT' : 'ABBR|XML|EMBED|OBJECT' ;
+
+		var oRegex ;
+		if ( sTags.length > 0 )
+		{
+			oRegex = new RegExp( '<(' + sTags + ')(?!\w|:)', 'gi' ) ;
+			html = html.replace( oRegex, '<FCK:$1' ) ;
+
+			oRegex = new RegExp( '<\/(' + sTags + ')>', 'gi' ) ;
+			html = html.replace( oRegex, '<\/FCK:$1>' ) ;
+		}
+
+		// Protect some empty elements. We must do it separately because the
+		// original tag may not contain the closing slash, like <hr>:
+		//		- <meta> tags get executed, so if you have a redirect meta, the
+		//		  content will move to the target page.
+		//		- <hr> may destroy the document structure if not well
+		//		  positioned. The trick is protect it here and restore them in
+		//		  the FCKDocumentProcessor.
+		sTags = 'META' ;
+		if ( FCKBrowserInfo.IsIE )
+			sTags += '|HR' ;
+
+		oRegex = new RegExp( '<((' + sTags + ')(?=\\s|>|/)[\\s\\S]*?)/?>', 'gi' ) ;
+		html = html.replace( oRegex, '<FCK:$1 />' ) ;
+
+		return html ;
+	},
+
+	SetData : function( data, resetIsDirty )
+	{
+		this.EditingArea.Mode = FCK.EditMode ;
+
+		// If there was an onSelectionChange listener in IE we must remove it to avoid crashes #1498
+		if ( FCKBrowserInfo.IsIE && FCK.EditorDocument )
+		{
+			FCK.EditorDocument.detachEvent("onselectionchange", Doc_OnSelectionChange ) ;
+		}
+
+		if ( FCK.EditMode == FCK_EDITMODE_WYSIWYG )
+		{
+			// Save the resetIsDirty for later use (async)
+			this._ForceResetIsDirty = ( resetIsDirty === true ) ;
+
+			// Protect parts of the code that must remain untouched (and invisible)
+			// during editing.
+			data = FCKConfig.ProtectedSource.Protect( data ) ;
+
+			// Call the Data Processor to transform the data.
+			data = FCK.DataProcessor.ConvertToHtml( data ) ;
+
+			// Fix for invalid self-closing tags (see #152).
+			data = data.replace( FCKRegexLib.InvalidSelfCloseTags, '$1></$2>' ) ;
+
+			// Protect event attributes (they could get fired in the editing area).
+			data = FCK.ProtectEvents( data ) ;
+
+			// Protect some things from the browser itself.
+			data = FCK.ProtectUrls( data ) ;
+			data = FCK.ProtectTags( data ) ;
+
+			// Insert the base tag (FCKConfig.BaseHref), if not exists in the source.
+			// The base must be the first tag in the HEAD, to get relative
+			// links on styles, for example.
+			if ( FCK.TempBaseTag.length > 0 && !FCKRegexLib.HasBaseTag.test( data ) )
+				data = data.replace( FCKRegexLib.HeadOpener, '$&' + FCK.TempBaseTag ) ;
+
+			// Build the HTML for the additional things we need on <head>.
+			var sHeadExtra = '' ;
+
+			if ( !FCKConfig.FullPage )
+				sHeadExtra += _FCK_GetEditorAreaStyleTags() ;
+
+			if ( FCKBrowserInfo.IsIE )
+				sHeadExtra += FCK._GetBehaviorsStyle() ;
+			else if ( FCKConfig.ShowBorders )
+				sHeadExtra += FCKTools.GetStyleHtml( FCK_ShowTableBordersCSS, true ) ;
+
+			sHeadExtra += FCKTools.GetStyleHtml( FCK_InternalCSS, true ) ;
+
+			// Attention: do not change it before testing it well (sample07)!
+			// This is tricky... if the head ends with <meta ... content type>,
+			// Firefox will break. But, it works if we place our extra stuff as
+			// the last elements in the HEAD.
+			data = data.replace( FCKRegexLib.HeadCloser, sHeadExtra + '$&' ) ;
+
+			// Load the HTML in the editing area.
+			this.EditingArea.OnLoad = _FCK_EditingArea_OnLoad ;
+			this.EditingArea.Start( data ) ;
+		}
+		else
+		{
+			// Remove the references to the following elements, as the editing area
+			// IFRAME will be removed.
+			FCK.EditorWindow	= null ;
+			FCK.EditorDocument	= null ;
+			FCKDomTools.PaddingNode = null ;
+
+			this.EditingArea.OnLoad = null ;
+			this.EditingArea.Start( data ) ;
+
+			// Enables the context menu in the textarea.
+			this.EditingArea.Textarea._FCKShowContextMenu = true ;
+
+			// Removes the enter key handler.
+			FCK.EnterKeyHandler = null ;
+
+			if ( resetIsDirty )
+				this.ResetIsDirty() ;
+
+			// Listen for keystroke events.
+			FCK.KeystrokeHandler.AttachToElement( this.EditingArea.Textarea ) ;
+
+			this.EditingArea.Textarea.focus() ;
+
+			FCK.Events.FireEvent( 'OnAfterSetHTML' ) ;
+		}
+
+		if ( FCKBrowserInfo.IsGecko )
+			window.onresize() ;
+	},
+
+	// This collection is used by the browser specific implementations to tell
+	// which named commands must be handled separately.
+	RedirectNamedCommands : new Object(),
+
+	ExecuteNamedCommand : function( commandName, commandParameter, noRedirect, noSaveUndo )
+	{
+		if ( !noSaveUndo )
+			FCKUndo.SaveUndoStep() ;
+
+		if ( !noRedirect && FCK.RedirectNamedCommands[ commandName ] != null )
+			FCK.ExecuteRedirectedNamedCommand( commandName, commandParameter ) ;
+		else
+		{
+			FCK.Focus() ;
+			FCK.EditorDocument.execCommand( commandName, false, commandParameter ) ;
+			FCK.Events.FireEvent( 'OnSelectionChange' ) ;
+		}
+
+		if ( !noSaveUndo )
+		FCKUndo.SaveUndoStep() ;
+	},
+
+	GetNamedCommandState : function( commandName )
+	{
+		try
+		{
+
+			// Bug #50 : Safari never returns positive state for the Paste command, override that.
+			if ( FCKBrowserInfo.IsSafari && FCK.EditorWindow && commandName.IEquals( 'Paste' ) )
+				return FCK_TRISTATE_OFF ;
+
+			if ( !FCK.EditorDocument.queryCommandEnabled( commandName ) )
+				return FCK_TRISTATE_DISABLED ;
+			else
+			{
+				return FCK.EditorDocument.queryCommandState( commandName ) ? FCK_TRISTATE_ON : FCK_TRISTATE_OFF ;
+			}
+		}
+		catch ( e )
+		{
+			return FCK_TRISTATE_OFF ;
+		}
+	},
+
+	GetNamedCommandValue : function( commandName )
+	{
+		var sValue = '' ;
+		var eState = FCK.GetNamedCommandState( commandName ) ;
+
+		if ( eState == FCK_TRISTATE_DISABLED )
+			return null ;
+
+		try
+		{
+			sValue = this.EditorDocument.queryCommandValue( commandName ) ;
+		}
+		catch(e) {}
+
+		return sValue ? sValue : '' ;
+	},
+
+	Paste : function( _callListenersOnly )
+	{
+		// First call 'OnPaste' listeners.
+		if ( FCK.Status != FCK_STATUS_COMPLETE || !FCK.Events.FireEvent( 'OnPaste' ) )
+			return false ;
+
+		// Then call the default implementation.
+		return _callListenersOnly || FCK._ExecPaste() ;
+	},
+
+	PasteFromWord : function()
+	{
+		FCKDialog.OpenDialog( 'FCKDialog_Paste', FCKLang.PasteFromWord, 'dialog/fck_paste.html', 400, 330, 'Word' ) ;
+	},
+
+	Preview : function()
+	{
+		var sHTML ;
+
+		if ( FCKConfig.FullPage )
+		{
+			if ( FCK.TempBaseTag.length > 0 )
+				sHTML = FCK.TempBaseTag + FCK.GetXHTML() ;
+			else
+				sHTML = FCK.GetXHTML() ;
+		}
+		else
+		{
+			sHTML =
+				FCKConfig.DocType +
+				'<html dir="' + FCKConfig.ContentLangDirection + '">' +
+				'<head>' +
+				FCK.TempBaseTag +
+				'<title>' + FCKLang.Preview + '</title>' +
+				_FCK_GetEditorAreaStyleTags() +
+				'</head><body' + FCKConfig.GetBodyAttributes() + '>' +
+				FCK.GetXHTML() +
+				'</body></html>' ;
+		}
+
+		var iWidth	= FCKConfig.ScreenWidth * 0.8 ;
+		var iHeight	= FCKConfig.ScreenHeight * 0.7 ;
+		var iLeft	= ( FCKConfig.ScreenWidth - iWidth ) / 2 ;
+
+		var sOpenUrl = '' ;
+		if ( FCK_IS_CUSTOM_DOMAIN && FCKBrowserInfo.IsIE)
+		{
+			window._FCKHtmlToLoad = sHTML ;
+			sOpenUrl = 'javascript:void( (function(){' +
+				'document.open() ;' +
+				'document.domain="' + document.domain + '" ;' +
+				'document.write( window.opener._FCKHtmlToLoad );' +
+				'document.close() ;' +
+				'window.opener._FCKHtmlToLoad = null ;' +
+				'})() )' ;
+		}
+
+		var oWindow = window.open( sOpenUrl, null, 'toolbar=yes,location=no,status=yes,menubar=yes,scrollbars=yes,resizable=yes,width=' + iWidth + ',height=' + iHeight + ',left=' + iLeft ) ;
+
+		if ( !FCK_IS_CUSTOM_DOMAIN || !FCKBrowserInfo.IsIE)
+		{
+			oWindow.document.write( sHTML );
+			oWindow.document.close();
+		}
+
+	},
+
+	SwitchEditMode : function( noUndo )
+	{
+		var bIsWysiwyg = ( FCK.EditMode == FCK_EDITMODE_WYSIWYG ) ;
+
+		// Save the current IsDirty state, so we may restore it after the switch.
+		var bIsDirty = FCK.IsDirty() ;
+
+		var sHtml ;
+
+		// Update the HTML in the view output to show.
+		if ( bIsWysiwyg )
+		{
+			FCKCommands.GetCommand( 'ShowBlocks' ).SaveState() ;
+			if ( !noUndo && FCKBrowserInfo.IsIE )
+				FCKUndo.SaveUndoStep() ;
+
+			sHtml = FCK.GetXHTML( FCKConfig.FormatSource ) ;
+
+			if ( sHtml == null )
+				return false ;
+		}
+		else
+			sHtml = this.EditingArea.Textarea.value ;
+
+		FCK.EditMode = bIsWysiwyg ? FCK_EDITMODE_SOURCE : FCK_EDITMODE_WYSIWYG ;
+
+		FCK.SetData( sHtml, !bIsDirty ) ;
+
+		// Set the Focus.
+		FCK.Focus() ;
+
+		// Update the toolbar (Running it directly causes IE to fail).
+		FCKTools.RunFunction( FCK.ToolbarSet.RefreshModeState, FCK.ToolbarSet ) ;
+
+		return true ;
+	},
+
+	InsertElement : function( element )
+	{
+		// The parameter may be a string (element name), so transform it in an element.
+		if ( typeof element == 'string' )
+			element = this.EditorDocument.createElement( element ) ;
+
+		var elementName = element.nodeName.toLowerCase() ;
+
+		FCKSelection.Restore() ;
+
+		// Create a range for the selection. V3 will have a new selection
+		// object that may internally supply this feature.
+		var range = new FCKDomRange( this.EditorWindow ) ;
+
+		// Move to the selection and delete it.
+		range.MoveToSelection() ;
+		range.DeleteContents() ;
+
+		if ( FCKListsLib.BlockElements[ elementName ] != null )
+		{
+			if ( range.StartBlock )
+			{
+				if ( range.CheckStartOfBlock() )
+					range.MoveToPosition( range.StartBlock, 3 ) ;
+				else if ( range.CheckEndOfBlock() )
+					range.MoveToPosition( range.StartBlock, 4 ) ;
+				else
+					range.SplitBlock() ;
+			}
+
+			range.InsertNode( element ) ;
+
+			var next = FCKDomTools.GetNextSourceElement( element, false, null, [ 'hr','br','param','img','area','input' ], true ) ;
+
+			// Be sure that we have something after the new element, so we can move the cursor there.
+			if ( !next && FCKConfig.EnterMode != 'br')
+			{
+				next = this.EditorDocument.body.appendChild( this.EditorDocument.createElement( FCKConfig.EnterMode ) ) ;
+
+				if ( FCKBrowserInfo.IsGeckoLike )
+					FCKTools.AppendBogusBr( next ) ;
+			}
+
+			if ( FCKListsLib.EmptyElements[ elementName ] == null )
+				range.MoveToElementEditStart( element ) ;
+			else if ( next )
+				range.MoveToElementEditStart( next ) ;
+			else
+				range.MoveToPosition( element, 4 ) ;
+
+			if ( FCKBrowserInfo.IsGecko )
+			{
+				if ( next )
+					next.scrollIntoView( false ) ;
+				element.scrollIntoView( false ) ;
+			}
+		}
+		else
+		{
+			// Insert the node.
+			range.InsertNode( element ) ;
+
+			// Move the selection right after the new element.
+			// DISCUSSION: Should we select the element instead?
+			range.SetStart( element, 4 ) ;
+			range.SetEnd( element, 4 ) ;
+		}
+
+		range.Select() ;
+		range.Release() ;
+
+		// REMOVE IT: The focus should not really be set here. It is up to the
+		// calling code to reset the focus if needed.
+		this.Focus() ;
+
+		return element ;
+	},
+
+	_InsertBlockElement : function( blockElement )
+	{
+	},
+
+	_IsFunctionKey : function( keyCode )
+	{
+		// keys that are captured but do not change editor contents
+		if ( keyCode >= 16 && keyCode <= 20 )
+			// shift, ctrl, alt, pause, capslock
+			return true ;
+		if ( keyCode == 27 || ( keyCode >= 33 && keyCode <= 40 ) )
+			// esc, page up, page down, end, home, left, up, right, down
+			return true ;
+		if ( keyCode == 45 )
+			// insert, no effect on FCKeditor, yet
+			return true ;
+		return false ;
+	},
+
+	_KeyDownListener : function( evt )
+	{
+		if (! evt)
+			evt = FCK.EditorWindow.event ;
+		if ( FCK.EditorWindow )
+		{
+			if ( !FCK._IsFunctionKey(evt.keyCode) // do not capture function key presses, like arrow keys or shift/alt/ctrl
+					&& !(evt.ctrlKey || evt.metaKey) // do not capture Ctrl hotkeys, as they have their snapshot capture logic
+					&& !(evt.keyCode == 46) ) // do not capture Del, it has its own capture logic in fckenterkey.js
+				FCK._KeyDownUndo() ;
+		}
+		return true ;
+	},
+
+	_KeyDownUndo : function()
+	{
+		if ( !FCKUndo.Typing )
+		{
+			FCKUndo.SaveUndoStep() ;
+			FCKUndo.Typing = true ;
+			FCK.Events.FireEvent( "OnSelectionChange" ) ;
+		}
+
+		FCKUndo.TypesCount++ ;
+		FCKUndo.Changed = 1 ;
+
+		if ( FCKUndo.TypesCount > FCKUndo.MaxTypes )
+		{
+			FCKUndo.TypesCount = 0 ;
+			FCKUndo.SaveUndoStep() ;
+		}
+	},
+
+	_TabKeyHandler : function( evt )
+	{
+		if ( ! evt )
+			evt = window.event ;
+
+		var keystrokeValue = evt.keyCode ;
+
+		// Pressing <Tab> in source mode should produce a tab space in the text area, not
+		// changing the focus to something else.
+		if ( keystrokeValue == 9 && FCK.EditMode != FCK_EDITMODE_WYSIWYG )
+		{
+			if ( FCKBrowserInfo.IsIE )
+			{
+				var range = document.selection.createRange() ;
+				if ( range.parentElement() != FCK.EditingArea.Textarea )
+					return true ;
+				range.text = '\t' ;
+				range.select() ;
+			}
+			else
+			{
+				var a = [] ;
+				var el = FCK.EditingArea.Textarea ;
+				var selStart = el.selectionStart ;
+				var selEnd = el.selectionEnd ;
+				a.push( el.value.substr(0, selStart ) ) ;
+				a.push( '\t' ) ;
+				a.push( el.value.substr( selEnd ) ) ;
+				el.value = a.join( '' ) ;
+				el.setSelectionRange( selStart + 1, selStart + 1 ) ;
+			}
+
+			if ( evt.preventDefault )
+				return evt.preventDefault() ;
+
+			return evt.returnValue = false ;
+		}
+
+		return true ;
+	}
+} ;
+
+FCK.Events = new FCKEvents( FCK ) ;
+
+// DEPRECATED in favor or "GetData".
+FCK.GetHTML	= FCK.GetXHTML = FCK.GetData ;
+
+// DEPRECATED in favor of "SetData".
+FCK.SetHTML = FCK.SetData ;
+
+// InsertElementAndGetIt and CreateElement are Deprecated : returns the same value as InsertElement.
+FCK.InsertElementAndGetIt = FCK.CreateElement = FCK.InsertElement ;
+
+// Replace all events attributes (like onclick).
+function _FCK_ProtectEvents_ReplaceTags( tagMatch )
+{
+	return tagMatch.replace( FCKRegexLib.EventAttributes, _FCK_ProtectEvents_ReplaceEvents ) ;
+}
+
+// Replace an event attribute with its respective __fckprotectedatt attribute.
+// The original event markup will be encoded and saved as the value of the new
+// attribute.
+function _FCK_ProtectEvents_ReplaceEvents( eventMatch, attName )
+{
+	return ' ' + attName + '_fckprotectedatt="' + encodeURIComponent( eventMatch ) + '"' ;
+}
+
+function _FCK_ProtectEvents_RestoreEvents( match, encodedOriginal )
+{
+	return decodeURIComponent( encodedOriginal ) ;
+}
+
+function _FCK_MouseEventsListener( evt )
+{
+	if ( ! evt )
+		evt = window.event ;
+	if ( evt.type == 'mousedown' )
+		FCK.MouseDownFlag = true ;
+	else if ( evt.type == 'mouseup' )
+		FCK.MouseDownFlag = false ;
+	else if ( evt.type == 'mousemove' )
+		FCK.Events.FireEvent( 'OnMouseMove', evt ) ;
+}
+
+function _FCK_PaddingNodeListener()
+{
+	if ( FCKConfig.EnterMode.IEquals( 'br' ) )
+		return ;
+	FCKDomTools.EnforcePaddingNode( FCK.EditorDocument, FCKConfig.EnterMode ) ;
+
+	if ( ! FCKBrowserInfo.IsIE && FCKDomTools.PaddingNode )
+	{
+		// Prevent the caret from going between the body and the padding node in Firefox.
+		// i.e. <body>|<p></p></body>
+		var sel = FCKSelection.GetSelection() ;
+		if ( sel && sel.rangeCount == 1 )
+		{
+			var range = sel.getRangeAt( 0 ) ;
+			if ( range.collapsed && range.startContainer == FCK.EditorDocument.body && range.startOffset == 0 )
+			{
+				range.selectNodeContents( FCKDomTools.PaddingNode ) ;
+				range.collapse( true ) ;
+				sel.removeAllRanges() ;
+				sel.addRange( range ) ;
+			}
+		}
+	}
+	else if ( FCKDomTools.PaddingNode )
+	{
+		// Prevent the caret from going into an empty body but not into the padding node in IE.
+		// i.e. <body><p></p>|</body>
+		var parentElement = FCKSelection.GetParentElement() ;
+		var paddingNode = FCKDomTools.PaddingNode ;
+		if ( parentElement && parentElement.nodeName.IEquals( 'body' ) )
+		{
+			if ( FCK.EditorDocument.body.childNodes.length == 1
+					&& FCK.EditorDocument.body.firstChild == paddingNode )
+			{
+				/*
+				 * Bug #1764: Don't move the selection if the
+				 * current selection isn't in the editor
+				 * document.
+				 */
+				if ( FCKSelection._GetSelectionDocument( FCK.EditorDocument.selection ) != FCK.EditorDocument )
+					return ;
+
+				var range = FCK.EditorDocument.body.createTextRange() ;
+				var clearContents = false ;
+				if ( !paddingNode.childNodes.firstChild )
+				{
+					paddingNode.appendChild( FCKTools.GetElementDocument( paddingNode ).createTextNode( '\ufeff' ) ) ;
+					clearContents = true ;
+				}
+				range.moveToElementText( paddingNode ) ;
+				range.select() ;
+				if ( clearContents )
+					range.pasteHTML( '' ) ;
+			}
+		}
+	}
+}
+
+function _FCK_EditingArea_OnLoad()
+{
+	// Get the editor's window and document (DOM)
+	FCK.EditorWindow	= FCK.EditingArea.Window ;
+	FCK.EditorDocument	= FCK.EditingArea.Document ;
+
+	FCK.InitializeBehaviors() ;
+
+	// Listen for mousedown and mouseup events for tracking drag and drops.
+	FCK.MouseDownFlag = false ;
+	FCKTools.AddEventListener( FCK.EditorDocument, 'mousemove', _FCK_MouseEventsListener ) ;
+	FCKTools.AddEventListener( FCK.EditorDocument, 'mousedown', _FCK_MouseEventsListener ) ;
+	FCKTools.AddEventListener( FCK.EditorDocument, 'mouseup', _FCK_MouseEventsListener ) ;
+
+	// Most of the CTRL key combos do not work under Safari for onkeydown and onkeypress (See #1119)
+	// But we can use the keyup event to override some of these...
+	if ( FCKBrowserInfo.IsSafari )
+	{
+		var undoFunc = function( evt )
+		{
+			if ( ! ( evt.ctrlKey || evt.metaKey ) )
+				return ;
+			if ( FCK.EditMode != FCK_EDITMODE_WYSIWYG )
+				return ;
+			switch ( evt.keyCode )
+			{
+				case 89:
+					FCKUndo.Redo() ;
+					break ;
+				case 90:
+					FCKUndo.Undo() ;
+					break ;
+			}
+		}
+
+		FCKTools.AddEventListener( FCK.EditorDocument, 'keyup', undoFunc ) ;
+	}
+
+	// Create the enter key handler
+	FCK.EnterKeyHandler = new FCKEnterKey( FCK.EditorWindow, FCKConfig.EnterMode, FCKConfig.ShiftEnterMode, FCKConfig.TabSpaces ) ;
+
+	// Listen for keystroke events.
+	FCK.KeystrokeHandler.AttachToElement( FCK.EditorDocument ) ;
+
+	if ( FCK._ForceResetIsDirty )
+		FCK.ResetIsDirty() ;
+
+	// This is a tricky thing for IE. In some cases, even if the cursor is
+	// blinking in the editing, the keystroke handler doesn't catch keyboard
+	// events. We must activate the editing area to make it work. (#142).
+	if ( FCKBrowserInfo.IsIE && FCK.HasFocus )
+		FCK.EditorDocument.body.setActive() ;
+
+	FCK.OnAfterSetHTML() ;
+
+	// Restore show blocks status.
+	FCKCommands.GetCommand( 'ShowBlocks' ).RestoreState() ;
+
+	// Check if it is not a startup call, otherwise complete the startup.
+	if ( FCK.Status != FCK_STATUS_NOTLOADED )
+		return ;
+
+	FCK.SetStatus( FCK_STATUS_ACTIVE ) ;
+}
+
+function _FCK_GetEditorAreaStyleTags()
+{
+	return FCKTools.GetStyleHtml( FCKConfig.EditorAreaCSS ) +
+		FCKTools.GetStyleHtml( FCKConfig.EditorAreaStyles ) ;
+}
+
+function _FCK_KeystrokeHandler_OnKeystroke( keystroke, keystrokeValue )
+{
+	if ( FCK.Status != FCK_STATUS_COMPLETE )
+		return false ;
+
+	if ( FCK.EditMode == FCK_EDITMODE_WYSIWYG )
+	{
+		switch ( keystrokeValue )
+		{
+			case 'Paste' :
+				return !FCK.Paste() ;
+
+			case 'Cut' :
+				FCKUndo.SaveUndoStep() ;
+				return false ;
+		}
+	}
+	else
+	{
+		// In source mode, some actions must have their default behavior.
+		if ( keystrokeValue.Equals( 'Paste', 'Undo', 'Redo', 'SelectAll', 'Cut' ) )
+			return false ;
+	}
+
+	// The return value indicates if the default behavior of the keystroke must
+	// be cancelled. Let's do that only if the Execute() call explicitly returns "false".
+	var oCommand = FCK.Commands.GetCommand( keystrokeValue ) ;
+
+	// If the command is disabled then ignore the keystroke
+	if ( oCommand.GetState() == FCK_TRISTATE_DISABLED )
+		return false ;
+
+	return ( oCommand.Execute.apply( oCommand, FCKTools.ArgumentsToArray( arguments, 2 ) ) !== false ) ;
+}
+
+// Set the FCK.LinkedField reference to the field that will be used to post the
+// editor data.
+(function()
+{
+	// There is a bug on IE... getElementById returns any META tag that has the
+	// name set to the ID you are looking for. So the best way in to get the array
+	// by names and look for the correct one.
+	// As ASP.Net generates a ID that is different from the Name, we must also
+	// look for the field based on the ID (the first one is the ID).
+
+	var oDocument = window.parent.document ;
+
+	// Try to get the field using the ID.
+	var eLinkedField = oDocument.getElementById( FCK.Name ) ;
+
+	var i = 0;
+	while ( eLinkedField || i == 0 )
+	{
+		if ( eLinkedField && eLinkedField.tagName.toLowerCase().Equals( 'input', 'textarea' ) )
+		{
+			FCK.LinkedField = eLinkedField ;
+			break ;
+		}
+
+		eLinkedField = oDocument.getElementsByName( FCK.Name )[i++] ;
+	}
+})() ;
+
+var FCKTempBin =
+{
+	Elements : new Array(),
+
+	AddElement : function( element )
+	{
+		var iIndex = this.Elements.length ;
+		this.Elements[ iIndex ] = element ;
+		return iIndex ;
+	},
+
+	RemoveElement : function( index )
+	{
+		var e = this.Elements[ index ] ;
+		this.Elements[ index ] = null ;
+		return e ;
+	},
+
+	Reset : function()
+	{
+		var i = 0 ;
+		while ( i < this.Elements.length )
+			this.Elements[ i++ ] = null ;
+		this.Elements.length = 0 ;
+	}
+} ;
+
+
+
+// # Focus Manager: Manages the focus in the editor.
+var FCKFocusManager = FCK.FocusManager =
+{
+	IsLocked : false,
+
+	AddWindow : function( win, sendToEditingArea )
+	{
+		var oTarget ;
+
+		if ( FCKBrowserInfo.IsIE )
+			oTarget = win.nodeType == 1 ? win : win.frameElement ? win.frameElement : win.document ;
+		else if ( FCKBrowserInfo.IsSafari )
+			oTarget = win ;
+		else
+			oTarget = win.document ;
+
+		FCKTools.AddEventListener( oTarget, 'blur', FCKFocusManager_Win_OnBlur ) ;
+		FCKTools.AddEventListener( oTarget, 'focus', sendToEditingArea ? FCKFocusManager_Win_OnFocus_Area : FCKFocusManager_Win_OnFocus ) ;
+	},
+
+	RemoveWindow : function( win )
+	{
+		if ( FCKBrowserInfo.IsIE )
+			oTarget = win.nodeType == 1 ? win : win.frameElement ? win.frameElement : win.document ;
+		else
+			oTarget = win.document ;
+
+		FCKTools.RemoveEventListener( oTarget, 'blur', FCKFocusManager_Win_OnBlur ) ;
+		FCKTools.RemoveEventListener( oTarget, 'focus', FCKFocusManager_Win_OnFocus_Area ) ;
+		FCKTools.RemoveEventListener( oTarget, 'focus', FCKFocusManager_Win_OnFocus ) ;
+	},
+
+	Lock : function()
+	{
+		this.IsLocked = true ;
+	},
+
+	Unlock : function()
+	{
+		if ( this._HasPendingBlur )
+			FCKFocusManager._Timer = window.setTimeout( FCKFocusManager_FireOnBlur, 100 ) ;
+
+		this.IsLocked = false ;
+	},
+
+	_ResetTimer : function()
+	{
+		this._HasPendingBlur = false ;
+
+		if ( this._Timer )
+		{
+			window.clearTimeout( this._Timer ) ;
+			delete this._Timer ;
+		}
+	}
+} ;
+
+function FCKFocusManager_Win_OnBlur()
+{
+	if ( typeof(FCK) != 'undefined' && FCK.HasFocus )
+	{
+		FCKFocusManager._ResetTimer() ;
+		FCKFocusManager._Timer = window.setTimeout( FCKFocusManager_FireOnBlur, 100 ) ;
+	}
+}
+
+function FCKFocusManager_FireOnBlur()
+{
+	if ( FCKFocusManager.IsLocked )
+		FCKFocusManager._HasPendingBlur = true ;
+	else
+	{
+		FCK.HasFocus = false ;
+		FCK.Events.FireEvent( "OnBlur" ) ;
+	}
+}
+
+function FCKFocusManager_Win_OnFocus_Area()
+{
+	// Check if we are already focusing the editor (to avoid loops).
+	if ( FCKFocusManager._IsFocusing )
+		return ;
+
+	FCKFocusManager._IsFocusing = true ;
+
+	FCK.Focus() ;
+	FCKFocusManager_Win_OnFocus() ;
+
+	// The above FCK.Focus() call may trigger other focus related functions.
+	// So, to avoid a loop, we delay the focusing mark removal, so it get
+	// executed after all othre functions have been run.
+	FCKTools.RunFunction( function()
+		{
+			delete FCKFocusManager._IsFocusing ;
+		} ) ;
+}
+
+function FCKFocusManager_Win_OnFocus()
+{
+	FCKFocusManager._ResetTimer() ;
+
+	if ( !FCK.HasFocus && !FCKFocusManager.IsLocked )
+	{
+		FCK.HasFocus = true ;
+		FCK.Events.FireEvent( "OnFocus" ) ;
+	}
+}
+
+/*
+ * #1633 : Protect the editor iframe from external styles.
+ * Notice that we can't use FCKTools.ResetStyles here since FCKTools isn't
+ * loaded yet.
+ */
+(function()
+{
+	var el = window.frameElement ;
+	var width = el.width ;
+	var height = el.height ;
+	if ( /^\d+$/.test( width ) ) width += 'px' ;
+	if ( /^\d+$/.test( height ) ) height += 'px' ;
+	var style = el.style ;
+	style.border = style.padding = style.margin = 0 ;
+	style.backgroundColor = 'transparent';
+	style.backgroundImage = 'none';
+	style.width = width ;
+	style.height = height ;
+})() ;


Property changes on: announcement/trunk/src/main/webapp/fckeditor/editor/_source/internals/fck.js
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/webapp/fckeditor/editor/_source/internals/fck_contextmenu.js
===================================================================
--- announcement/trunk/src/main/webapp/fckeditor/editor/_source/internals/fck_contextmenu.js	                        (rev 0)
+++ announcement/trunk/src/main/webapp/fckeditor/editor/_source/internals/fck_contextmenu.js	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,325 @@
+/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2008 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * Defines the FCK.ContextMenu object that is responsible for all
+ * Context Menu operations in the editing area.
+ */
+
+FCK.ContextMenu = new Object() ;
+FCK.ContextMenu.Listeners = new Array() ;
+
+FCK.ContextMenu.RegisterListener = function( listener )
+{
+	if ( listener )
+		this.Listeners.push( listener ) ;
+}
+
+function FCK_ContextMenu_Init()
+{
+	var oInnerContextMenu = FCK.ContextMenu._InnerContextMenu = new FCKContextMenu( FCKBrowserInfo.IsIE ? window : window.parent, FCKLang.Dir ) ;
+	oInnerContextMenu.CtrlDisable	= FCKConfig.BrowserContextMenuOnCtrl ;
+	oInnerContextMenu.OnBeforeOpen	= FCK_ContextMenu_OnBeforeOpen ;
+	oInnerContextMenu.OnItemClick	= FCK_ContextMenu_OnItemClick ;
+
+	// Get the registering function.
+	var oMenu = FCK.ContextMenu ;
+
+	// Register all configured context menu listeners.
+	for ( var i = 0 ; i < FCKConfig.ContextMenu.length ; i++ )
+		oMenu.RegisterListener( FCK_ContextMenu_GetListener( FCKConfig.ContextMenu[i] ) ) ;
+}
+
+function FCK_ContextMenu_GetListener( listenerName )
+{
+	switch ( listenerName )
+	{
+		case 'Generic' :
+			return {
+			AddItems : function( menu, tag, tagName )
+			{
+				menu.AddItem( 'Cut'		, FCKLang.Cut	, 7, FCKCommands.GetCommand( 'Cut' ).GetState() == FCK_TRISTATE_DISABLED ) ;
+				menu.AddItem( 'Copy'	, FCKLang.Copy	, 8, FCKCommands.GetCommand( 'Copy' ).GetState() == FCK_TRISTATE_DISABLED ) ;
+				menu.AddItem( 'Paste'	, FCKLang.Paste	, 9, FCKCommands.GetCommand( 'Paste' ).GetState() == FCK_TRISTATE_DISABLED ) ;
+			}} ;
+
+		case 'Table' :
+			return {
+			AddItems : function( menu, tag, tagName )
+			{
+				var bIsTable	= ( tagName == 'TABLE' ) ;
+				var bIsCell		= ( !bIsTable && FCKSelection.HasAncestorNode( 'TABLE' ) ) ;
+
+				if ( bIsCell )
+				{
+					menu.AddSeparator() ;
+					var oItem = menu.AddItem( 'Cell'	, FCKLang.CellCM ) ;
+					oItem.AddItem( 'TableInsertCellBefore'	, FCKLang.InsertCellBefore, 69 ) ;
+					oItem.AddItem( 'TableInsertCellAfter'	, FCKLang.InsertCellAfter, 58 ) ;
+					oItem.AddItem( 'TableDeleteCells'	, FCKLang.DeleteCells, 59 ) ;
+					if ( FCKBrowserInfo.IsGecko )
+						oItem.AddItem( 'TableMergeCells'	, FCKLang.MergeCells, 60,
+							FCKCommands.GetCommand( 'TableMergeCells' ).GetState() == FCK_TRISTATE_DISABLED ) ;
+					else
+					{
+						oItem.AddItem( 'TableMergeRight'	, FCKLang.MergeRight, 60,
+							FCKCommands.GetCommand( 'TableMergeRight' ).GetState() == FCK_TRISTATE_DISABLED ) ;
+						oItem.AddItem( 'TableMergeDown'		, FCKLang.MergeDown, 60,
+							FCKCommands.GetCommand( 'TableMergeDown' ).GetState() == FCK_TRISTATE_DISABLED ) ;
+					}
+					oItem.AddItem( 'TableHorizontalSplitCell'	, FCKLang.HorizontalSplitCell, 61,
+						FCKCommands.GetCommand( 'TableHorizontalSplitCell' ).GetState() == FCK_TRISTATE_DISABLED ) ;
+					oItem.AddItem( 'TableVerticalSplitCell'	, FCKLang.VerticalSplitCell, 61,
+						FCKCommands.GetCommand( 'TableVerticalSplitCell' ).GetState() == FCK_TRISTATE_DISABLED ) ;
+					oItem.AddSeparator() ;
+					oItem.AddItem( 'TableCellProp'		, FCKLang.CellProperties, 57,
+						FCKCommands.GetCommand( 'TableCellProp' ).GetState() == FCK_TRISTATE_DISABLED ) ;
+
+					menu.AddSeparator() ;
+					oItem = menu.AddItem( 'Row'			, FCKLang.RowCM ) ;
+					oItem.AddItem( 'TableInsertRowBefore'		, FCKLang.InsertRowBefore, 70 ) ;
+					oItem.AddItem( 'TableInsertRowAfter'		, FCKLang.InsertRowAfter, 62 ) ;
+					oItem.AddItem( 'TableDeleteRows'	, FCKLang.DeleteRows, 63 ) ;
+
+					menu.AddSeparator() ;
+					oItem = menu.AddItem( 'Column'		, FCKLang.ColumnCM ) ;
+					oItem.AddItem( 'TableInsertColumnBefore', FCKLang.InsertColumnBefore, 71 ) ;
+					oItem.AddItem( 'TableInsertColumnAfter'	, FCKLang.InsertColumnAfter, 64 ) ;
+					oItem.AddItem( 'TableDeleteColumns'	, FCKLang.DeleteColumns, 65 ) ;
+				}
+
+				if ( bIsTable || bIsCell )
+				{
+					menu.AddSeparator() ;
+					menu.AddItem( 'TableDelete'			, FCKLang.TableDelete ) ;
+					menu.AddItem( 'TableProp'			, FCKLang.TableProperties, 39 ) ;
+				}
+			}} ;
+
+		case 'Link' :
+			return {
+			AddItems : function( menu, tag, tagName )
+			{
+				var bInsideLink = ( tagName == 'A' || FCKSelection.HasAncestorNode( 'A' ) ) ;
+
+				if ( bInsideLink || FCK.GetNamedCommandState( 'Unlink' ) != FCK_TRISTATE_DISABLED )
+				{
+					// Go up to the anchor to test its properties
+					var oLink = FCKSelection.MoveToAncestorNode( 'A' ) ;
+					var bIsAnchor = ( oLink && oLink.name.length > 0 && oLink.href.length == 0 ) ;
+					// If it isn't a link then don't add the Link context menu
+					if ( bIsAnchor )
+						return ;
+
+					menu.AddSeparator() ;
+					if ( bInsideLink )
+						menu.AddItem( 'Link', FCKLang.EditLink		, 34 ) ;
+					menu.AddItem( 'Unlink'	, FCKLang.RemoveLink	, 35 ) ;
+				}
+			}} ;
+
+		case 'Image' :
+			return {
+			AddItems : function( menu, tag, tagName )
+			{
+				if ( tagName == 'IMG' && !tag.getAttribute( '_fckfakelement' ) )
+				{
+					menu.AddSeparator() ;
+					menu.AddItem( 'Image', FCKLang.ImageProperties, 37 ) ;
+				}
+			}} ;
+
+		case 'Anchor' :
+			return {
+			AddItems : function( menu, tag, tagName )
+			{
+				// Go up to the anchor to test its properties
+				var oLink = FCKSelection.MoveToAncestorNode( 'A' ) ;
+				var bIsAnchor = ( oLink && oLink.name.length > 0 ) ;
+
+				if ( bIsAnchor || ( tagName == 'IMG' && tag.getAttribute( '_fckanchor' ) ) )
+				{
+					menu.AddSeparator() ;
+					menu.AddItem( 'Anchor', FCKLang.AnchorProp, 36 ) ;
+					menu.AddItem( 'AnchorDelete', FCKLang.AnchorDelete ) ;
+				}
+			}} ;
+
+		case 'Flash' :
+			return {
+			AddItems : function( menu, tag, tagName )
+			{
+				if ( tagName == 'IMG' && tag.getAttribute( '_fckflash' ) )
+				{
+					menu.AddSeparator() ;
+					menu.AddItem( 'Flash', FCKLang.FlashProperties, 38 ) ;
+				}
+			}} ;
+
+		case 'Form' :
+			return {
+			AddItems : function( menu, tag, tagName )
+			{
+				if ( FCKSelection.HasAncestorNode('FORM') )
+				{
+					menu.AddSeparator() ;
+					menu.AddItem( 'Form', FCKLang.FormProp, 48 ) ;
+				}
+			}} ;
+
+		case 'Checkbox' :
+			return {
+			AddItems : function( menu, tag, tagName )
+			{
+				if ( tagName == 'INPUT' && tag.type == 'checkbox' )
+				{
+					menu.AddSeparator() ;
+					menu.AddItem( 'Checkbox', FCKLang.CheckboxProp, 49 ) ;
+				}
+			}} ;
+
+		case 'Radio' :
+			return {
+			AddItems : function( menu, tag, tagName )
+			{
+				if ( tagName == 'INPUT' && tag.type == 'radio' )
+				{
+					menu.AddSeparator() ;
+					menu.AddItem( 'Radio', FCKLang.RadioButtonProp, 50 ) ;
+				}
+			}} ;
+
+		case 'TextField' :
+			return {
+			AddItems : function( menu, tag, tagName )
+			{
+				if ( tagName == 'INPUT' && ( tag.type == 'text' || tag.type == 'password' ) )
+				{
+					menu.AddSeparator() ;
+					menu.AddItem( 'TextField', FCKLang.TextFieldProp, 51 ) ;
+				}
+			}} ;
+
+		case 'HiddenField' :
+			return {
+			AddItems : function( menu, tag, tagName )
+			{
+				if ( tagName == 'IMG' && tag.getAttribute( '_fckinputhidden' ) )
+				{
+					menu.AddSeparator() ;
+					menu.AddItem( 'HiddenField', FCKLang.HiddenFieldProp, 56 ) ;
+				}
+			}} ;
+
+		case 'ImageButton' :
+			return {
+			AddItems : function( menu, tag, tagName )
+			{
+				if ( tagName == 'INPUT' && tag.type == 'image' )
+				{
+					menu.AddSeparator() ;
+					menu.AddItem( 'ImageButton', FCKLang.ImageButtonProp, 55 ) ;
+				}
+			}} ;
+
+		case 'Button' :
+			return {
+			AddItems : function( menu, tag, tagName )
+			{
+				if ( tagName == 'INPUT' && ( tag.type == 'button' || tag.type == 'submit' || tag.type == 'reset' ) )
+				{
+					menu.AddSeparator() ;
+					menu.AddItem( 'Button', FCKLang.ButtonProp, 54 ) ;
+				}
+			}} ;
+
+		case 'Select' :
+			return {
+			AddItems : function( menu, tag, tagName )
+			{
+				if ( tagName == 'SELECT' )
+				{
+					menu.AddSeparator() ;
+					menu.AddItem( 'Select', FCKLang.SelectionFieldProp, 53 ) ;
+				}
+			}} ;
+
+		case 'Textarea' :
+			return {
+			AddItems : function( menu, tag, tagName )
+			{
+				if ( tagName == 'TEXTAREA' )
+				{
+					menu.AddSeparator() ;
+					menu.AddItem( 'Textarea', FCKLang.TextareaProp, 52 ) ;
+				}
+			}} ;
+
+		case 'BulletedList' :
+			return {
+			AddItems : function( menu, tag, tagName )
+			{
+				if ( FCKSelection.HasAncestorNode('UL') )
+				{
+					menu.AddSeparator() ;
+					menu.AddItem( 'BulletedList', FCKLang.BulletedListProp, 27 ) ;
+				}
+			}} ;
+
+		case 'NumberedList' :
+			return {
+			AddItems : function( menu, tag, tagName )
+			{
+				if ( FCKSelection.HasAncestorNode('OL') )
+				{
+					menu.AddSeparator() ;
+					menu.AddItem( 'NumberedList', FCKLang.NumberedListProp, 26 ) ;
+				}
+			}} ;
+	}
+	return null ;
+}
+
+function FCK_ContextMenu_OnBeforeOpen()
+{
+	// Update the UI.
+	FCK.Events.FireEvent( 'OnSelectionChange' ) ;
+
+	// Get the actual selected tag (if any).
+	var oTag, sTagName ;
+
+	// The extra () is to avoid a warning with strict error checking. This is ok.
+	if ( (oTag = FCKSelection.GetSelectedElement()) )
+		sTagName = oTag.tagName ;
+
+	// Cleanup the current menu items.
+	var oMenu = FCK.ContextMenu._InnerContextMenu ;
+	oMenu.RemoveAllItems() ;
+
+	// Loop through the listeners.
+	var aListeners = FCK.ContextMenu.Listeners ;
+	for ( var i = 0 ; i < aListeners.length ; i++ )
+		aListeners[i].AddItems( oMenu, oTag, sTagName ) ;
+}
+
+function FCK_ContextMenu_OnItemClick( item )
+{
+	FCK.Focus() ;
+	FCKCommands.GetCommand( item.Name ).Execute( item.CustomData ) ;
+}


Property changes on: announcement/trunk/src/main/webapp/fckeditor/editor/_source/internals/fck_contextmenu.js
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/webapp/fckeditor/editor/_source/internals/fck_gecko.js
===================================================================
--- announcement/trunk/src/main/webapp/fckeditor/editor/_source/internals/fck_gecko.js	                        (rev 0)
+++ announcement/trunk/src/main/webapp/fckeditor/editor/_source/internals/fck_gecko.js	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,487 @@
+/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2008 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * Creation and initialization of the "FCK" object. This is the main
+ * object that represents an editor instance.
+ * (Gecko specific implementations)
+ */
+
+FCK.Description = "FCKeditor for Gecko Browsers" ;
+
+FCK.InitializeBehaviors = function()
+{
+	// When calling "SetData", the editing area IFRAME gets a fixed height. So we must recalculate it.
+	if ( window.onresize )		// Not for Safari/Opera.
+		window.onresize() ;
+
+	FCKFocusManager.AddWindow( this.EditorWindow ) ;
+
+	this.ExecOnSelectionChange = function()
+	{
+		FCK.Events.FireEvent( "OnSelectionChange" ) ;
+	}
+
+	this._ExecDrop = function( evt )
+	{
+		if ( FCK.MouseDownFlag )
+		{
+			FCK.MouseDownFlag = false ;
+			return ;
+		}
+
+		if ( FCKConfig.ForcePasteAsPlainText )
+		{
+			if ( evt.dataTransfer )
+			{
+				var text = evt.dataTransfer.getData( 'Text' ) ;
+				text = FCKTools.HTMLEncode( text ) ;
+				text = FCKTools.ProcessLineBreaks( window, FCKConfig, text ) ;
+				FCK.InsertHtml( text ) ;
+			}
+			else if ( FCKConfig.ShowDropDialog )
+				FCK.PasteAsPlainText() ;
+
+			evt.preventDefault() ;
+			evt.stopPropagation() ;
+		}
+	}
+
+	this._ExecCheckCaret = function( evt )
+	{
+		if ( FCK.EditMode != FCK_EDITMODE_WYSIWYG )
+			return ;
+
+		if ( evt.type == 'keypress' )
+		{
+			var keyCode = evt.keyCode ;
+			// ignore if positioning key is not pressed.
+			// left or up arrow keys need to be processed as well, since <a> links can be expanded in Gecko's editor
+			// when the caret moved left or up from another block element below.
+			if ( keyCode < 33 || keyCode > 40 )
+				return ;
+		}
+
+		var blockEmptyStop = function( node )
+		{
+			if ( node.nodeType != 1 )
+				return false ;
+			var tag = node.tagName.toLowerCase() ;
+			return ( FCKListsLib.BlockElements[tag] || FCKListsLib.EmptyElements[tag] ) ;
+		}
+
+		var moveCursor = function()
+		{
+			var selection = FCKSelection.GetSelection() ;
+			var range = selection.getRangeAt(0) ;
+			if ( ! range || ! range.collapsed )
+				return ;
+
+			var node = range.endContainer ;
+
+			// only perform the patched behavior if we're at the end of a text node.
+			if ( node.nodeType != 3 )
+				return ;
+
+			if ( node.nodeValue.length != range.endOffset )
+				return ;
+
+			// only perform the patched behavior if we're in an <a> tag, or the End key is pressed.
+			var parentTag = node.parentNode.tagName.toLowerCase() ;
+			if ( ! (  parentTag == 'a' || ( !FCKBrowserInfo.IsOpera && String(node.parentNode.contentEditable) == 'false' ) ||
+					( ! ( FCKListsLib.BlockElements[parentTag] || FCKListsLib.NonEmptyBlockElements[parentTag] )
+					  && keyCode == 35 ) ) )
+				return ;
+
+			// our caret has moved to just after the last character of a text node under an unknown tag, how to proceed?
+			// first, see if there are other text nodes by DFS walking from this text node.
+			// 	- if the DFS has scanned all nodes under my parent, then go the next step.
+			//	- if there is a text node after me but still under my parent, then do nothing and return.
+			var nextTextNode = FCKTools.GetNextTextNode( node, node.parentNode, blockEmptyStop ) ;
+			if ( nextTextNode )
+				return ;
+
+			// we're pretty sure we need to move the caret forcefully from here.
+			range = FCK.EditorDocument.createRange() ;
+
+			nextTextNode = FCKTools.GetNextTextNode( node, node.parentNode.parentNode, blockEmptyStop ) ;
+			if ( nextTextNode )
+			{
+				// Opera thinks the dummy empty text node we append beyond the end of <a> nodes occupies a caret
+				// position. So if the user presses the left key and we reset the caret position here, the user
+				// wouldn't be able to go back.
+				if ( FCKBrowserInfo.IsOpera && keyCode == 37 )
+					return ;
+
+				// now we want to get out of our current parent node, adopt the next parent, and move the caret to
+				// the appropriate text node under our new parent.
+				// our new parent might be our current parent's siblings if we are lucky.
+				range.setStart( nextTextNode, 0 ) ;
+				range.setEnd( nextTextNode, 0 ) ;
+			}
+			else
+			{
+				// no suitable next siblings under our grandparent! what to do next?
+				while ( node.parentNode
+					&& node.parentNode != FCK.EditorDocument.body
+					&& node.parentNode != FCK.EditorDocument.documentElement
+					&& node == node.parentNode.lastChild
+					&& ( ! FCKListsLib.BlockElements[node.parentNode.tagName.toLowerCase()]
+					  && ! FCKListsLib.NonEmptyBlockElements[node.parentNode.tagName.toLowerCase()] ) )
+					node = node.parentNode ;
+
+
+				if ( FCKListsLib.BlockElements[ parentTag ]
+						|| FCKListsLib.EmptyElements[ parentTag ]
+						|| node == FCK.EditorDocument.body )
+				{
+					// if our parent is a block node, move to the end of our parent.
+					range.setStart( node, node.childNodes.length ) ;
+					range.setEnd( node, node.childNodes.length ) ;
+				}
+				else
+				{
+					// things are a little bit more interesting if our parent is not a block node
+					// due to the weired ways how Gecko's caret acts...
+					var stopNode = node.nextSibling ;
+
+					// find out the next block/empty element at our grandparent, we'll
+					// move the caret just before it.
+					while ( stopNode )
+					{
+						if ( stopNode.nodeType != 1 )
+						{
+							stopNode = stopNode.nextSibling ;
+							continue ;
+						}
+
+						var stopTag = stopNode.tagName.toLowerCase() ;
+						if ( FCKListsLib.BlockElements[stopTag] || FCKListsLib.EmptyElements[stopTag]
+							|| FCKListsLib.NonEmptyBlockElements[stopTag] )
+							break ;
+						stopNode = stopNode.nextSibling ;
+					}
+
+					// note that the dummy marker below is NEEDED, otherwise the caret's behavior will
+					// be broken in Gecko.
+					var marker = FCK.EditorDocument.createTextNode( '' ) ;
+					if ( stopNode )
+						node.parentNode.insertBefore( marker, stopNode ) ;
+					else
+						node.parentNode.appendChild( marker ) ;
+					range.setStart( marker, 0 ) ;
+					range.setEnd( marker, 0 ) ;
+				}
+			}
+
+			selection.removeAllRanges() ;
+			selection.addRange( range ) ;
+			FCK.Events.FireEvent( "OnSelectionChange" ) ;
+		}
+
+		setTimeout( moveCursor, 1 ) ;
+	}
+
+	this.ExecOnSelectionChangeTimer = function()
+	{
+		if ( FCK.LastOnChangeTimer )
+			window.clearTimeout( FCK.LastOnChangeTimer ) ;
+
+		FCK.LastOnChangeTimer = window.setTimeout( FCK.ExecOnSelectionChange, 100 ) ;
+	}
+
+	this.EditorDocument.addEventListener( 'mouseup', this.ExecOnSelectionChange, false ) ;
+
+	// On Gecko, firing the "OnSelectionChange" event on every key press started to be too much
+	// slow. So, a timer has been implemented to solve performance issues when typing to quickly.
+	this.EditorDocument.addEventListener( 'keyup', this.ExecOnSelectionChangeTimer, false ) ;
+
+	this._DblClickListener = function( e )
+	{
+		FCK.OnDoubleClick( e.target ) ;
+		e.stopPropagation() ;
+	}
+	this.EditorDocument.addEventListener( 'dblclick', this._DblClickListener, true ) ;
+
+	// Record changes for the undo system when there are key down events.
+	this.EditorDocument.addEventListener( 'keydown', this._KeyDownListener, false ) ;
+
+	// Hooks for data object drops
+	if ( FCKBrowserInfo.IsGecko )
+	{
+		this.EditorWindow.addEventListener( 'dragdrop', this._ExecDrop, true ) ;
+	}
+	else if ( FCKBrowserInfo.IsSafari )
+	{
+		var cancelHandler = function( evt ){ if ( ! FCK.MouseDownFlag ) evt.returnValue = false ; }
+		this.EditorDocument.addEventListener( 'dragenter', cancelHandler, true ) ;
+		this.EditorDocument.addEventListener( 'dragover', cancelHandler, true ) ;
+		this.EditorDocument.addEventListener( 'drop', this._ExecDrop, true ) ;
+		this.EditorDocument.addEventListener( 'mousedown',
+			function( ev )
+			{
+				var element = ev.srcElement ;
+
+				if ( element.nodeName.IEquals( 'IMG', 'HR', 'INPUT', 'TEXTAREA', 'SELECT' ) )
+				{
+					FCKSelection.SelectNode( element ) ;
+				}
+			}, true ) ;
+
+		this.EditorDocument.addEventListener( 'mouseup',
+			function( ev )
+			{
+				if ( ev.srcElement.nodeName.IEquals( 'INPUT', 'TEXTAREA', 'SELECT' ) )
+					ev.preventDefault()
+			}, true ) ;
+
+		this.EditorDocument.addEventListener( 'click',
+			function( ev )
+			{
+				if ( ev.srcElement.nodeName.IEquals( 'INPUT', 'TEXTAREA', 'SELECT' ) )
+					ev.preventDefault()
+			}, true ) ;
+	}
+
+	// Kludge for buggy Gecko caret positioning logic (Bug #393 and #1056)
+	if ( FCKBrowserInfo.IsGecko || FCKBrowserInfo.IsOpera )
+	{
+		this.EditorDocument.addEventListener( 'keypress', this._ExecCheckCaret, false ) ;
+		this.EditorDocument.addEventListener( 'click', this._ExecCheckCaret, false ) ;
+	}
+
+	// Reset the context menu.
+	FCK.ContextMenu._InnerContextMenu.SetMouseClickWindow( FCK.EditorWindow ) ;
+	FCK.ContextMenu._InnerContextMenu.AttachToElement( FCK.EditorDocument ) ;
+}
+
+FCK.MakeEditable = function()
+{
+	this.EditingArea.MakeEditable() ;
+}
+
+// Disable the context menu in the editor (outside the editing area).
+function Document_OnContextMenu( e )
+{
+	if ( !e.target._FCKShowContextMenu )
+		e.preventDefault() ;
+}
+document.oncontextmenu = Document_OnContextMenu ;
+
+// GetNamedCommandState overload for Gecko.
+FCK._BaseGetNamedCommandState = FCK.GetNamedCommandState ;
+FCK.GetNamedCommandState = function( commandName )
+{
+	switch ( commandName )
+	{
+		case 'Unlink' :
+			return FCKSelection.HasAncestorNode('A') ? FCK_TRISTATE_OFF : FCK_TRISTATE_DISABLED ;
+		default :
+			return FCK._BaseGetNamedCommandState( commandName ) ;
+	}
+}
+
+// Named commands to be handled by this browsers specific implementation.
+FCK.RedirectNamedCommands =
+{
+	Print	: true,
+	Paste	: true
+} ;
+
+// ExecuteNamedCommand overload for Gecko.
+FCK.ExecuteRedirectedNamedCommand = function( commandName, commandParameter )
+{
+	switch ( commandName )
+	{
+		case 'Print' :
+			FCK.EditorWindow.print() ;
+			break ;
+		case 'Paste' :
+			try
+			{
+				// Force the paste dialog for Safari (#50).
+				if ( FCKBrowserInfo.IsSafari )
+					throw '' ;
+
+				if ( FCK.Paste() )
+					FCK.ExecuteNamedCommand( 'Paste', null, true ) ;
+			}
+			catch (e)	{ FCKDialog.OpenDialog( 'FCKDialog_Paste', FCKLang.Paste, 'dialog/fck_paste.html', 400, 330, 'Security' ) ; }
+			break ;
+		default :
+			FCK.ExecuteNamedCommand( commandName, commandParameter ) ;
+	}
+}
+
+FCK._ExecPaste = function()
+{
+	// Save a snapshot for undo before actually paste the text
+	FCKUndo.SaveUndoStep() ;
+
+	if ( FCKConfig.ForcePasteAsPlainText )
+	{
+		FCK.PasteAsPlainText() ;
+		return false ;
+	}
+
+	/* For now, the AutoDetectPasteFromWord feature is IE only. */
+	return true ;
+}
+
+//**
+// FCK.InsertHtml: Inserts HTML at the current cursor location. Deletes the
+// selected content if any.
+FCK.InsertHtml = function( html )
+{
+	var doc = FCK.EditorDocument ;
+
+	html = FCKConfig.ProtectedSource.Protect( html ) ;
+	html = FCK.ProtectEvents( html ) ;
+	html = FCK.ProtectUrls( html ) ;
+	html = FCK.ProtectTags( html ) ;
+
+	// Save an undo snapshot first.
+	FCKUndo.SaveUndoStep() ;
+
+	if ( FCKBrowserInfo.IsGecko )
+	{
+		// Using the following trick, &nbsp; present at the beginning and at
+		// the end of the HTML are preserved (#2248).
+		html = '<span id="__fakeFCKRemove1__" style="display:none;">fakeFCKRemove</span>' + html + '<span id="__fakeFCKRemove2__" style="display:none;">fakeFCKRemove</span>' ;
+	}
+
+	// Insert the HTML code.
+	doc.execCommand( 'inserthtml', false, html ) ;
+
+	if ( FCKBrowserInfo.IsGecko )
+	{
+		// Remove the fake nodes.
+		FCKDomTools.RemoveNode( doc.getElementById('__fakeFCKRemove1__') ) ;
+		FCKDomTools.RemoveNode( doc.getElementById('__fakeFCKRemove2__') ) ;
+	}
+
+	this.Focus() ;
+
+	// Save the caret position before calling document processor.
+	var range = new FCKDomRange( this.EditorWindow ) ;
+	range.MoveToSelection() ;
+	var bookmark = range.CreateBookmark() ;
+
+	FCKDocumentProcessor.Process( doc ) ;
+
+	// Restore caret position, ignore any errors in case the document
+	// processor removed the bookmark <span>s for some reason.
+	try
+	{
+		range.MoveToBookmark( bookmark ) ;
+		range.Select() ;
+	}
+	catch ( e ) {}
+
+	// For some strange reason the SaveUndoStep() call doesn't activate the undo button at the first InsertHtml() call.
+	this.Events.FireEvent( "OnSelectionChange" ) ;
+}
+
+FCK.PasteAsPlainText = function()
+{
+	// TODO: Implement the "Paste as Plain Text" code.
+
+	// If the function is called immediately Firefox 2 does automatically paste the contents as soon as the new dialog is created
+	// so we run it in a Timeout and the paste event can be cancelled
+	FCKTools.RunFunction( FCKDialog.OpenDialog, FCKDialog, ['FCKDialog_Paste', FCKLang.PasteAsText, 'dialog/fck_paste.html', 400, 330, 'PlainText'] ) ;
+
+/*
+	var sText = FCKTools.HTMLEncode( clipboardData.getData("Text") ) ;
+	sText = sText.replace( /\n/g, '<BR>' ) ;
+	this.InsertHtml( sText ) ;
+*/
+}
+/*
+FCK.PasteFromWord = function()
+{
+	// TODO: Implement the "Paste as Plain Text" code.
+
+	FCKDialog.OpenDialog( 'FCKDialog_Paste', FCKLang.PasteFromWord, 'dialog/fck_paste.html', 400, 330, 'Word' ) ;
+
+//	FCK.CleanAndPaste( FCK.GetClipboardHTML() ) ;
+}
+*/
+FCK.GetClipboardHTML = function()
+{
+	return '' ;
+}
+
+FCK.CreateLink = function( url, noUndo )
+{
+	// Creates the array that will be returned. It contains one or more created links (see #220).
+	var aCreatedLinks = new Array() ;
+
+	// Only for Safari, a collapsed selection may create a link. All other
+	// browser will have no links created. So, we check it here and return
+	// immediatelly, having the same cross browser behavior.
+	if ( FCKSelection.GetSelection().isCollapsed )
+		return aCreatedLinks ;
+
+	FCK.ExecuteNamedCommand( 'Unlink', null, false, !!noUndo ) ;
+
+	if ( url.length > 0 )
+	{
+		// Generate a temporary name for the link.
+		var sTempUrl = 'javascript:void(0);/*' + ( new Date().getTime() ) + '*/' ;
+
+		// Use the internal "CreateLink" command to create the link.
+		FCK.ExecuteNamedCommand( 'CreateLink', sTempUrl, false, !!noUndo ) ;
+
+		// Retrieve the just created links using XPath.
+		var oLinksInteractor = this.EditorDocument.evaluate("//a[@href='" + sTempUrl + "']", this.EditorDocument.body, null, XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE, null) ;
+
+		// Add all links to the returning array.
+		for ( var i = 0 ; i < oLinksInteractor.snapshotLength ; i++ )
+		{
+			var oLink = oLinksInteractor.snapshotItem( i ) ;
+			oLink.href = url ;
+
+			aCreatedLinks.push( oLink ) ;
+		}
+	}
+
+	return aCreatedLinks ;
+}
+
+FCK._FillEmptyBlock = function( emptyBlockNode )
+{
+	if ( ! emptyBlockNode || emptyBlockNode.nodeType != 1 )
+		return ;
+	var nodeTag = emptyBlockNode.tagName.toLowerCase() ;
+	if ( nodeTag != 'p' && nodeTag != 'div' )
+		return ;
+	if ( emptyBlockNode.firstChild )
+		return ;
+	FCKTools.AppendBogusBr( emptyBlockNode ) ;
+}
+
+FCK._ExecCheckEmptyBlock = function()
+{
+	FCK._FillEmptyBlock( FCK.EditorDocument.body.firstChild ) ;
+	var sel = FCKSelection.GetSelection() ;
+	if ( !sel || sel.rangeCount < 1 )
+		return ;
+	var range = sel.getRangeAt( 0 );
+	FCK._FillEmptyBlock( range.startContainer ) ;
+}


Property changes on: announcement/trunk/src/main/webapp/fckeditor/editor/_source/internals/fck_gecko.js
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/webapp/fckeditor/editor/_source/internals/fck_ie.js
===================================================================
--- announcement/trunk/src/main/webapp/fckeditor/editor/_source/internals/fck_ie.js	                        (rev 0)
+++ announcement/trunk/src/main/webapp/fckeditor/editor/_source/internals/fck_ie.js	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,454 @@
+/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2008 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * Creation and initialization of the "FCK" object. This is the main
+ * object that represents an editor instance.
+ * (IE specific implementations)
+ */
+
+FCK.Description = "FCKeditor for Internet Explorer 5.5+" ;
+
+FCK._GetBehaviorsStyle = function()
+{
+	if ( !FCK._BehaviorsStyle )
+	{
+		var sBasePath = FCKConfig.BasePath ;
+		var sTableBehavior = '' ;
+		var sStyle ;
+
+		// The behaviors should be pointed using the BasePath to avoid security
+		// errors when using a different BaseHref.
+		sStyle = '<style type="text/css" _fcktemp="true">' ;
+
+		if ( FCKConfig.ShowBorders )
+			sTableBehavior = 'url(' + sBasePath + 'css/behaviors/showtableborders.htc)' ;
+
+		// Disable resize handlers.
+		sStyle += 'INPUT,TEXTAREA,SELECT,.FCK__Anchor,.FCK__PageBreak,.FCK__InputHidden' ;
+
+		if ( FCKConfig.DisableObjectResizing )
+		{
+			sStyle += ',IMG' ;
+			sTableBehavior += ' url(' + sBasePath + 'css/behaviors/disablehandles.htc)' ;
+		}
+
+		sStyle += ' { behavior: url(' + sBasePath + 'css/behaviors/disablehandles.htc) ; }' ;
+
+		if ( sTableBehavior.length > 0 )
+			sStyle += 'TABLE { behavior: ' + sTableBehavior + ' ; }' ;
+
+		sStyle += '</style>' ;
+		FCK._BehaviorsStyle = sStyle ;
+	}
+
+	return FCK._BehaviorsStyle ;
+}
+
+function Doc_OnMouseUp()
+{
+	if ( FCK.EditorWindow.event.srcElement.tagName == 'HTML' )
+	{
+		FCK.Focus() ;
+		FCK.EditorWindow.event.cancelBubble	= true ;
+		FCK.EditorWindow.event.returnValue	= false ;
+	}
+}
+
+function Doc_OnPaste()
+{
+	var body = FCK.EditorDocument.body ;
+
+	body.detachEvent( 'onpaste', Doc_OnPaste ) ;
+
+	var ret = FCK.Paste( !FCKConfig.ForcePasteAsPlainText && !FCKConfig.AutoDetectPasteFromWord ) ;
+
+	body.attachEvent( 'onpaste', Doc_OnPaste ) ;
+
+	return ret ;
+}
+
+function Doc_OnDblClick()
+{
+	FCK.OnDoubleClick( FCK.EditorWindow.event.srcElement ) ;
+	FCK.EditorWindow.event.cancelBubble = true ;
+}
+
+function Doc_OnSelectionChange()
+{
+	// Don't fire the event if no document is loaded.
+	if ( !FCK.IsSelectionChangeLocked && FCK.EditorDocument )
+		FCK.Events.FireEvent( "OnSelectionChange" ) ;
+}
+
+function Doc_OnDrop()
+{
+	if ( FCK.MouseDownFlag )
+	{
+		FCK.MouseDownFlag = false ;
+		return ;
+	}
+
+	if ( FCKConfig.ForcePasteAsPlainText )
+	{
+		var evt = FCK.EditorWindow.event ;
+
+		if ( FCK._CheckIsPastingEnabled() || FCKConfig.ShowDropDialog )
+			FCK.PasteAsPlainText( evt.dataTransfer.getData( 'Text' ) ) ;
+
+		evt.returnValue = false ;
+		evt.cancelBubble = true ;
+	}
+}
+
+FCK.InitializeBehaviors = function( dontReturn )
+{
+	// Set the focus to the editable area when clicking in the document area.
+	// TODO: The cursor must be positioned at the end.
+	this.EditorDocument.attachEvent( 'onmouseup', Doc_OnMouseUp ) ;
+
+	// Intercept pasting operations
+	this.EditorDocument.body.attachEvent( 'onpaste', Doc_OnPaste ) ;
+
+	// Intercept drop operations
+	this.EditorDocument.body.attachEvent( 'ondrop', Doc_OnDrop ) ;
+
+	// Reset the context menu.
+	FCK.ContextMenu._InnerContextMenu.AttachToElement( FCK.EditorDocument.body ) ;
+
+	this.EditorDocument.attachEvent("onkeydown", FCK._KeyDownListener ) ;
+
+	this.EditorDocument.attachEvent("ondblclick", Doc_OnDblClick ) ;
+
+	// Catch cursor selection changes.
+	this.EditorDocument.attachEvent("onselectionchange", Doc_OnSelectionChange ) ;
+
+	FCKTools.AddEventListener( FCK.EditorDocument, 'mousedown', Doc_OnMouseDown ) ;
+}
+
+FCK.InsertHtml = function( html )
+{
+	html = FCKConfig.ProtectedSource.Protect( html ) ;
+	html = FCK.ProtectEvents( html ) ;
+	html = FCK.ProtectUrls( html ) ;
+	html = FCK.ProtectTags( html ) ;
+
+//	FCK.Focus() ;
+	FCKSelection.Restore() ;
+	FCK.EditorWindow.focus() ;
+
+	FCKUndo.SaveUndoStep() ;
+
+	// Gets the actual selection.
+	var oSel = FCKSelection.GetSelection() ;
+
+	// Deletes the actual selection contents.
+	if ( oSel.type.toLowerCase() == 'control' )
+		oSel.clear() ;
+
+	// Using the following trick, any comment in the beginning of the HTML will
+	// be preserved.
+	html = '<span id="__fakeFCKRemove__" style="display:none;">fakeFCKRemove</span>' + html ;
+
+	// Insert the HTML.
+	oSel.createRange().pasteHTML( html ) ;
+
+	// Remove the fake node
+	FCK.EditorDocument.getElementById('__fakeFCKRemove__').removeNode( true ) ;
+
+	FCKDocumentProcessor.Process( FCK.EditorDocument ) ;
+
+	// For some strange reason the SaveUndoStep() call doesn't activate the undo button at the first InsertHtml() call.
+	this.Events.FireEvent( "OnSelectionChange" ) ;
+}
+
+FCK.SetInnerHtml = function( html )		// IE Only
+{
+	var oDoc = FCK.EditorDocument ;
+	// Using the following trick, any comment in the beginning of the HTML will
+	// be preserved.
+	oDoc.body.innerHTML = '<div id="__fakeFCKRemove__">&nbsp;</div>' + html ;
+	oDoc.getElementById('__fakeFCKRemove__').removeNode( true ) ;
+}
+
+function FCK_PreloadImages()
+{
+	var oPreloader = new FCKImagePreloader() ;
+
+	// Add the configured images.
+	oPreloader.AddImages( FCKConfig.PreloadImages ) ;
+
+	// Add the skin icons strip.
+	oPreloader.AddImages( FCKConfig.SkinPath + 'fck_strip.gif' ) ;
+
+	oPreloader.OnComplete = LoadToolbarSetup ;
+	oPreloader.Start() ;
+}
+
+// Disable the context menu in the editor (outside the editing area).
+function Document_OnContextMenu()
+{
+	return ( event.srcElement._FCKShowContextMenu == true ) ;
+}
+document.oncontextmenu = Document_OnContextMenu ;
+
+function FCK_Cleanup()
+{
+	this.LinkedField = null ;
+	this.EditorWindow = null ;
+	this.EditorDocument = null ;
+}
+
+FCK._ExecPaste = function()
+{
+	// As we call ExecuteNamedCommand('Paste'), it would enter in a loop. So, let's use a semaphore.
+	if ( FCK._PasteIsRunning )
+		return true ;
+
+	if ( FCKConfig.ForcePasteAsPlainText )
+	{
+		FCK.PasteAsPlainText() ;
+		return false ;
+	}
+
+	var sHTML = FCK._CheckIsPastingEnabled( true ) ;
+
+	if ( sHTML === false )
+		FCKTools.RunFunction( FCKDialog.OpenDialog, FCKDialog, ['FCKDialog_Paste', FCKLang.Paste, 'dialog/fck_paste.html', 400, 330, 'Security'] ) ;
+	else
+	{
+		if ( FCKConfig.AutoDetectPasteFromWord && sHTML.length > 0 )
+		{
+			var re = /<\w[^>]*(( class="?MsoNormal"?)|(="mso-))/gi ;
+			if ( re.test( sHTML ) )
+			{
+				if ( confirm( FCKLang.PasteWordConfirm ) )
+				{
+					FCK.PasteFromWord() ;
+					return false ;
+				}
+			}
+		}
+
+		// Instead of inserting the retrieved HTML, let's leave the OS work for us,
+		// by calling FCK.ExecuteNamedCommand( 'Paste' ). It could give better results.
+
+		// Enable the semaphore to avoid a loop.
+		FCK._PasteIsRunning = true ;
+
+		FCK.ExecuteNamedCommand( 'Paste' ) ;
+
+		// Removes the semaphore.
+		delete FCK._PasteIsRunning ;
+	}
+
+	// Let's always make a custom implementation (return false), otherwise
+	// the new Keyboard Handler may conflict with this code, and the CTRL+V code
+	// could result in a simple "V" being pasted.
+	return false ;
+}
+
+FCK.PasteAsPlainText = function( forceText )
+{
+	if ( !FCK._CheckIsPastingEnabled() )
+	{
+		FCKDialog.OpenDialog( 'FCKDialog_Paste', FCKLang.PasteAsText, 'dialog/fck_paste.html', 400, 330, 'PlainText' ) ;
+		return ;
+	}
+
+	// Get the data available in the clipboard in text format.
+	var sText = null ;
+	if ( ! forceText )
+		sText = clipboardData.getData("Text") ;
+	else
+		sText = forceText ;
+
+	if ( sText && sText.length > 0 )
+	{
+		// Replace the carriage returns with <BR>
+		sText = FCKTools.HTMLEncode( sText ) ;
+		sText = FCKTools.ProcessLineBreaks( window, FCKConfig, sText ) ;
+
+		var closeTagIndex = sText.search( '</p>' ) ;
+		var startTagIndex = sText.search( '<p>' ) ;
+
+		if ( ( closeTagIndex != -1 && startTagIndex != -1 && closeTagIndex < startTagIndex )
+				|| ( closeTagIndex != -1 && startTagIndex == -1 ) )
+		{
+			var prefix = sText.substr( 0, closeTagIndex ) ;
+			sText = sText.substr( closeTagIndex + 4 ) ;
+			this.InsertHtml( prefix ) ;
+		}
+
+		// Insert the resulting data in the editor.
+		FCKUndo.SaveLocked = true ;
+		this.InsertHtml( sText ) ;
+		FCKUndo.SaveLocked = false ;
+	}
+}
+
+FCK._CheckIsPastingEnabled = function( returnContents )
+{
+	// The following seams to be the only reliable way to check is script
+	// pasting operations are enabled in the security settings of IE6 and IE7.
+	// It adds a little bit of overhead to the check, but so far that's the
+	// only way, mainly because of IE7.
+
+	FCK._PasteIsEnabled = false ;
+
+	document.body.attachEvent( 'onpaste', FCK_CheckPasting_Listener ) ;
+
+	// The execCommand in GetClipboardHTML will fire the "onpaste", only if the
+	// security settings are enabled.
+	var oReturn = FCK.GetClipboardHTML() ;
+
+	document.body.detachEvent( 'onpaste', FCK_CheckPasting_Listener ) ;
+
+	if ( FCK._PasteIsEnabled )
+	{
+		if ( !returnContents )
+			oReturn = true ;
+	}
+	else
+		oReturn = false ;
+
+	delete FCK._PasteIsEnabled ;
+
+	return oReturn ;
+}
+
+function FCK_CheckPasting_Listener()
+{
+	FCK._PasteIsEnabled = true ;
+}
+
+FCK.GetClipboardHTML = function()
+{
+	var oDiv = document.getElementById( '___FCKHiddenDiv' ) ;
+
+	if ( !oDiv )
+	{
+		oDiv = document.createElement( 'DIV' ) ;
+		oDiv.id = '___FCKHiddenDiv' ;
+
+		var oDivStyle = oDiv.style ;
+		oDivStyle.position		= 'absolute' ;
+		oDivStyle.visibility	= oDivStyle.overflow	= 'hidden' ;
+		oDivStyle.width			= oDivStyle.height		= 1 ;
+
+		document.body.appendChild( oDiv ) ;
+	}
+
+	oDiv.innerHTML = '' ;
+
+	var oTextRange = document.body.createTextRange() ;
+	oTextRange.moveToElementText( oDiv ) ;
+	oTextRange.execCommand( 'Paste' ) ;
+
+	var sData = oDiv.innerHTML ;
+	oDiv.innerHTML = '' ;
+
+	return sData ;
+}
+
+FCK.CreateLink = function( url, noUndo )
+{
+	// Creates the array that will be returned. It contains one or more created links (see #220).
+	var aCreatedLinks = new Array() ;
+
+	// Remove any existing link in the selection.
+	FCK.ExecuteNamedCommand( 'Unlink', null, false, !!noUndo ) ;
+
+	if ( url.length > 0 )
+	{
+		// If there are several images, and you try to link each one, all the images get inside the link:
+		// <img><img> -> <a><img></a><img> -> <a><img><img></a> due to the call to 'CreateLink' (bug in IE)
+		if (FCKSelection.GetType() == 'Control')
+		{
+			// Create a link
+			var oLink = this.EditorDocument.createElement( 'A' ) ;
+			oLink.href = url ;
+
+			// Get the selected object
+			var oControl = FCKSelection.GetSelectedElement() ;
+			// Put the link just before the object
+			oControl.parentNode.insertBefore(oLink, oControl) ;
+			// Move the object inside the link
+			oControl.parentNode.removeChild( oControl ) ;
+			oLink.appendChild( oControl ) ;
+
+			return [ oLink ] ;
+		}
+
+		// Generate a temporary name for the link.
+		var sTempUrl = 'javascript:void(0);/*' + ( new Date().getTime() ) + '*/' ;
+
+		// Use the internal "CreateLink" command to create the link.
+		FCK.ExecuteNamedCommand( 'CreateLink', sTempUrl, false, !!noUndo ) ;
+
+		// Look for the just create link.
+		var oLinks = this.EditorDocument.links ;
+
+		for ( i = 0 ; i < oLinks.length ; i++ )
+		{
+			var oLink = oLinks[i] ;
+
+			// Check it this a newly created link.
+			// getAttribute must be used. oLink.url may cause problems with IE7 (#555).
+			if ( oLink.getAttribute( 'href', 2 ) == sTempUrl )
+			{
+				var sInnerHtml = oLink.innerHTML ;	// Save the innerHTML (IE changes it if it is like an URL).
+				oLink.href = url ;
+				oLink.innerHTML = sInnerHtml ;		// Restore the innerHTML.
+
+				// If the last child is a <br> move it outside the link or it
+				// will be too easy to select this link again #388.
+				var oLastChild = oLink.lastChild ;
+				if ( oLastChild && oLastChild.nodeName == 'BR' )
+				{
+					// Move the BR after the link.
+					FCKDomTools.InsertAfterNode( oLink, oLink.removeChild( oLastChild ) ) ;
+				}
+
+				aCreatedLinks.push( oLink ) ;
+			}
+		}
+	}
+
+	return aCreatedLinks ;
+}
+
+function _FCK_RemoveDisabledAtt()
+{
+	this.removeAttribute( 'disabled' ) ;
+}
+
+function Doc_OnMouseDown( evt )
+{
+	var e = evt.srcElement ;
+
+	// Radio buttons and checkboxes should not be allowed to be triggered in IE
+	// in editable mode. Otherwise the whole browser window may be locked by
+	// the buttons. (#1782)
+	if ( e.nodeName.IEquals( 'input' ) && e.type.IEquals( ['radio', 'checkbox'] ) && !e.disabled )
+	{
+		e.disabled = true ;
+		FCKTools.SetTimeout( _FCK_RemoveDisabledAtt, 1, e ) ;
+	}
+}


Property changes on: announcement/trunk/src/main/webapp/fckeditor/editor/_source/internals/fck_ie.js
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/webapp/fckeditor/editor/_source/internals/fckbrowserinfo.js
===================================================================
--- announcement/trunk/src/main/webapp/fckeditor/editor/_source/internals/fckbrowserinfo.js	                        (rev 0)
+++ announcement/trunk/src/main/webapp/fckeditor/editor/_source/internals/fckbrowserinfo.js	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,61 @@
+/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2008 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * Contains browser detection information.
+ */
+
+var s = navigator.userAgent.toLowerCase() ;
+
+var FCKBrowserInfo =
+{
+	IsIE		: /*@cc_on!@*/false,
+	IsIE7		: /*@cc_on!@*/false && ( parseInt( s.match( /msie (\d+)/ )[1], 10 ) >= 7 ),
+	IsIE6		: /*@cc_on!@*/false && ( parseInt( s.match( /msie (\d+)/ )[1], 10 ) >= 6 ),
+	IsSafari	: s.Contains(' applewebkit/'),		// Read "IsWebKit"
+	IsOpera		: !!window.opera,
+	IsAIR		: s.Contains(' adobeair/'),
+	IsMac		: s.Contains('macintosh')
+} ;
+
+// Completes the browser info with further Gecko information.
+(function( browserInfo )
+{
+	browserInfo.IsGecko = ( navigator.product == 'Gecko' ) && !browserInfo.IsSafari && !browserInfo.IsOpera ;
+	browserInfo.IsGeckoLike = ( browserInfo.IsGecko || browserInfo.IsSafari || browserInfo.IsOpera ) ;
+
+	if ( browserInfo.IsGecko )
+	{
+		var geckoMatch = s.match( /rv:(\d+\.\d+)/ ) ;
+		var geckoVersion = geckoMatch && parseFloat( geckoMatch[1] ) ;
+
+		// Actually "10" refers to Gecko versions before Firefox 1.5, when
+		// Gecko 1.8 (build 20051111) has been released.
+
+		// Some browser (like Mozilla 1.7.13) may have a Gecko build greater
+		// than 20051111, so we must also check for the revision number not to
+		// be 1.7 (we are assuming that rv < 1.7 will not have build > 20051111).
+
+		if ( geckoVersion )
+		{
+			browserInfo.IsGecko10 = ( geckoVersion < 1.8 ) ;
+			browserInfo.IsGecko19 = ( geckoVersion > 1.8 ) ;
+		}
+	}
+})(FCKBrowserInfo) ;


Property changes on: announcement/trunk/src/main/webapp/fckeditor/editor/_source/internals/fckbrowserinfo.js
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/webapp/fckeditor/editor/_source/internals/fckcodeformatter.js
===================================================================
--- announcement/trunk/src/main/webapp/fckeditor/editor/_source/internals/fckcodeformatter.js	                        (rev 0)
+++ announcement/trunk/src/main/webapp/fckeditor/editor/_source/internals/fckcodeformatter.js	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,100 @@
+/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2008 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * Format the HTML.
+ */
+
+var FCKCodeFormatter = new Object() ;
+
+FCKCodeFormatter.Init = function()
+{
+	var oRegex = this.Regex = new Object() ;
+
+	// Regex for line breaks.
+	oRegex.BlocksOpener = /\<(P|DIV|H1|H2|H3|H4|H5|H6|ADDRESS|PRE|OL|UL|LI|TITLE|META|LINK|BASE|SCRIPT|LINK|TD|TH|AREA|OPTION)[^\>]*\>/gi ;
+	oRegex.BlocksCloser = /\<\/(P|DIV|H1|H2|H3|H4|H5|H6|ADDRESS|PRE|OL|UL|LI|TITLE|META|LINK|BASE|SCRIPT|LINK|TD|TH|AREA|OPTION)[^\>]*\>/gi ;
+
+	oRegex.NewLineTags	= /\<(BR|HR)[^\>]*\>/gi ;
+
+	oRegex.MainTags = /\<\/?(HTML|HEAD|BODY|FORM|TABLE|TBODY|THEAD|TR)[^\>]*\>/gi ;
+
+	oRegex.LineSplitter = /\s*\n+\s*/g ;
+
+	// Regex for indentation.
+	oRegex.IncreaseIndent = /^\<(HTML|HEAD|BODY|FORM|TABLE|TBODY|THEAD|TR|UL|OL)[ \/\>]/i ;
+	oRegex.DecreaseIndent = /^\<\/(HTML|HEAD|BODY|FORM|TABLE|TBODY|THEAD|TR|UL|OL)[ \>]/i ;
+	oRegex.FormatIndentatorRemove = new RegExp( '^' + FCKConfig.FormatIndentator ) ;
+
+	oRegex.ProtectedTags = /(<PRE[^>]*>)([\s\S]*?)(<\/PRE>)/gi ;
+}
+
+FCKCodeFormatter._ProtectData = function( outer, opener, data, closer )
+{
+	return opener + '___FCKpd___' + FCKCodeFormatter.ProtectedData.AddItem( data ) + closer ;
+}
+
+FCKCodeFormatter.Format = function( html )
+{
+	if ( !this.Regex )
+		this.Init() ;
+
+	// Protected content that remain untouched during the
+	// process go in the following array.
+	FCKCodeFormatter.ProtectedData = new Array() ;
+
+	var sFormatted = html.replace( this.Regex.ProtectedTags, FCKCodeFormatter._ProtectData ) ;
+
+	// Line breaks.
+	sFormatted		= sFormatted.replace( this.Regex.BlocksOpener, '\n$&' ) ;
+	sFormatted		= sFormatted.replace( this.Regex.BlocksCloser, '$&\n' ) ;
+	sFormatted		= sFormatted.replace( this.Regex.NewLineTags, '$&\n' ) ;
+	sFormatted		= sFormatted.replace( this.Regex.MainTags, '\n$&\n' ) ;
+
+	// Indentation.
+	var sIndentation = '' ;
+
+	var asLines = sFormatted.split( this.Regex.LineSplitter ) ;
+	sFormatted = '' ;
+
+	for ( var i = 0 ; i < asLines.length ; i++ )
+	{
+		var sLine = asLines[i] ;
+
+		if ( sLine.length == 0 )
+			continue ;
+
+		if ( this.Regex.DecreaseIndent.test( sLine ) )
+			sIndentation = sIndentation.replace( this.Regex.FormatIndentatorRemove, '' ) ;
+
+		sFormatted += sIndentation + sLine + '\n' ;
+
+		if ( this.Regex.IncreaseIndent.test( sLine ) )
+			sIndentation += FCKConfig.FormatIndentator ;
+	}
+
+	// Now we put back the protected data.
+	for ( var j = 0 ; j < FCKCodeFormatter.ProtectedData.length ; j++ )
+	{
+		var oRegex = new RegExp( '___FCKpd___' + j ) ;
+		sFormatted = sFormatted.replace( oRegex, FCKCodeFormatter.ProtectedData[j].replace( /\$/g, '$$$$' ) ) ;
+	}
+
+	return sFormatted.Trim() ;
+}


Property changes on: announcement/trunk/src/main/webapp/fckeditor/editor/_source/internals/fckcodeformatter.js
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/webapp/fckeditor/editor/_source/internals/fckcommands.js
===================================================================
--- announcement/trunk/src/main/webapp/fckeditor/editor/_source/internals/fckcommands.js	                        (rev 0)
+++ announcement/trunk/src/main/webapp/fckeditor/editor/_source/internals/fckcommands.js	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,167 @@
+/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2008 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * Define all commands available in the editor.
+ */
+
+var FCKCommands = FCK.Commands = new Object() ;
+FCKCommands.LoadedCommands = new Object() ;
+
+FCKCommands.RegisterCommand = function( commandName, command )
+{
+	this.LoadedCommands[ commandName ] = command ;
+}
+
+FCKCommands.GetCommand = function( commandName )
+{
+	var oCommand = FCKCommands.LoadedCommands[ commandName ] ;
+
+	if ( oCommand )
+		return oCommand ;
+
+	switch ( commandName )
+	{
+		case 'Bold'			:
+		case 'Italic'		:
+		case 'Underline'	:
+		case 'StrikeThrough':
+		case 'Subscript'	:
+		case 'Superscript'	: oCommand = new FCKCoreStyleCommand( commandName ) ; break ;
+
+		case 'RemoveFormat'	: oCommand = new FCKRemoveFormatCommand() ; break ;
+
+		case 'DocProps'		: oCommand = new FCKDialogCommand( 'DocProps'	, FCKLang.DocProps				, 'dialog/fck_docprops.html'	, 400, 380, FCKCommands.GetFullPageState ) ; break ;
+		case 'Templates'	: oCommand = new FCKDialogCommand( 'Templates'	, FCKLang.DlgTemplatesTitle		, 'dialog/fck_template.html'	, 380, 450 ) ; break ;
+		case 'Link'			: oCommand = new FCKDialogCommand( 'Link'		, FCKLang.DlgLnkWindowTitle		, 'dialog/fck_link.html'		, 400, 300 ) ; break ;
+		case 'Unlink'		: oCommand = new FCKUnlinkCommand() ; break ;
+		case 'Anchor'		: oCommand = new FCKDialogCommand( 'Anchor'		, FCKLang.DlgAnchorTitle		, 'dialog/fck_anchor.html'		, 370, 160 ) ; break ;
+		case 'AnchorDelete'	: oCommand = new FCKAnchorDeleteCommand() ; break ;
+		case 'BulletedList'	: oCommand = new FCKDialogCommand( 'BulletedList', FCKLang.BulletedListProp		, 'dialog/fck_listprop.html?UL'	, 370, 160 ) ; break ;
+		case 'NumberedList'	: oCommand = new FCKDialogCommand( 'NumberedList', FCKLang.NumberedListProp		, 'dialog/fck_listprop.html?OL'	, 370, 160 ) ; break ;
+		case 'About'		: oCommand = new FCKDialogCommand( 'About'		, FCKLang.About					, 'dialog/fck_about.html'		, 420, 330, function(){ return FCK_TRISTATE_OFF ; } ) ; break ;
+		case 'Find'			: oCommand = new FCKDialogCommand( 'Find'		, FCKLang.DlgFindAndReplaceTitle, 'dialog/fck_replace.html'		, 340, 230, null, null, 'Find' ) ; break ;
+		case 'Replace'		: oCommand = new FCKDialogCommand( 'Replace'	, FCKLang.DlgFindAndReplaceTitle, 'dialog/fck_replace.html'		, 340, 230, null, null, 'Replace' ) ; break ;
+
+		case 'Image'		: oCommand = new FCKDialogCommand( 'Image'		, FCKLang.DlgImgTitle			, 'dialog/fck_image.html'		, 450, 390 ) ; break ;
+		case 'Flash'		: oCommand = new FCKDialogCommand( 'Flash'		, FCKLang.DlgFlashTitle			, 'dialog/fck_flash.html'		, 450, 390 ) ; break ;
+		case 'SpecialChar'	: oCommand = new FCKDialogCommand( 'SpecialChar', FCKLang.DlgSpecialCharTitle	, 'dialog/fck_specialchar.html'	, 400, 290 ) ; break ;
+		case 'Smiley'		: oCommand = new FCKDialogCommand( 'Smiley'		, FCKLang.DlgSmileyTitle		, 'dialog/fck_smiley.html'		, FCKConfig.SmileyWindowWidth, FCKConfig.SmileyWindowHeight ) ; break ;
+		case 'Table'		: oCommand = new FCKDialogCommand( 'Table'		, FCKLang.DlgTableTitle			, 'dialog/fck_table.html'		, 480, 250 ) ; break ;
+		case 'TableProp'	: oCommand = new FCKDialogCommand( 'Table'		, FCKLang.DlgTableTitle			, 'dialog/fck_table.html?Parent', 480, 250 ) ; break ;
+		case 'TableCellProp': oCommand = new FCKDialogCommand( 'TableCell'	, FCKLang.DlgCellTitle			, 'dialog/fck_tablecell.html'	, 550, 240 ) ; break ;
+
+		case 'Style'		: oCommand = new FCKStyleCommand() ; break ;
+
+		case 'FontName'		: oCommand = new FCKFontNameCommand() ; break ;
+		case 'FontSize'		: oCommand = new FCKFontSizeCommand() ; break ;
+		case 'FontFormat'	: oCommand = new FCKFormatBlockCommand() ; break ;
+
+		case 'Source'		: oCommand = new FCKSourceCommand() ; break ;
+		case 'Preview'		: oCommand = new FCKPreviewCommand() ; break ;
+		case 'Save'			: oCommand = new FCKSaveCommand() ; break ;
+		case 'NewPage'		: oCommand = new FCKNewPageCommand() ; break ;
+		case 'PageBreak'	: oCommand = new FCKPageBreakCommand() ; break ;
+		case 'Rule'			: oCommand = new FCKRuleCommand() ; break ;
+
+		case 'TextColor'	: oCommand = new FCKTextColorCommand('ForeColor') ; break ;
+		case 'BGColor'		: oCommand = new FCKTextColorCommand('BackColor') ; break ;
+
+		case 'Paste'		: oCommand = new FCKPasteCommand() ; break ;
+		case 'PasteText'	: oCommand = new FCKPastePlainTextCommand() ; break ;
+		case 'PasteWord'	: oCommand = new FCKPasteWordCommand() ; break ;
+
+		case 'JustifyLeft'	: oCommand = new FCKJustifyCommand( 'left' ) ; break ;
+		case 'JustifyCenter'	: oCommand = new FCKJustifyCommand( 'center' ) ; break ;
+		case 'JustifyRight'	: oCommand = new FCKJustifyCommand( 'right' ) ; break ;
+		case 'JustifyFull'	: oCommand = new FCKJustifyCommand( 'justify' ) ; break ;
+		case 'Indent'	: oCommand = new FCKIndentCommand( 'indent', FCKConfig.IndentLength ) ; break ;
+		case 'Outdent'	: oCommand = new FCKIndentCommand( 'outdent', FCKConfig.IndentLength * -1 ) ; break ;
+		case 'Blockquote'	: oCommand = new FCKBlockQuoteCommand() ; break ;
+
+		case 'TableInsertRowAfter'		: oCommand = new FCKTableCommand('TableInsertRowAfter') ; break ;
+		case 'TableInsertRowBefore'		: oCommand = new FCKTableCommand('TableInsertRowBefore') ; break ;
+		case 'TableDeleteRows'			: oCommand = new FCKTableCommand('TableDeleteRows') ; break ;
+		case 'TableInsertColumnAfter'	: oCommand = new FCKTableCommand('TableInsertColumnAfter') ; break ;
+		case 'TableInsertColumnBefore'	: oCommand = new FCKTableCommand('TableInsertColumnBefore') ; break ;
+		case 'TableDeleteColumns'		: oCommand = new FCKTableCommand('TableDeleteColumns') ; break ;
+		case 'TableInsertCellAfter'		: oCommand = new FCKTableCommand('TableInsertCellAfter') ; break ;
+		case 'TableInsertCellBefore'	: oCommand = new FCKTableCommand('TableInsertCellBefore') ; break ;
+		case 'TableDeleteCells'			: oCommand = new FCKTableCommand('TableDeleteCells') ; break ;
+		case 'TableMergeCells'			: oCommand = new FCKTableCommand('TableMergeCells') ; break ;
+		case 'TableMergeRight'			: oCommand = new FCKTableCommand('TableMergeRight') ; break ;
+		case 'TableMergeDown'			: oCommand = new FCKTableCommand('TableMergeDown') ; break ;
+		case 'TableHorizontalSplitCell'	: oCommand = new FCKTableCommand('TableHorizontalSplitCell') ; break ;
+		case 'TableVerticalSplitCell'	: oCommand = new FCKTableCommand('TableVerticalSplitCell') ; break ;
+		case 'TableDelete'				: oCommand = new FCKTableCommand('TableDelete') ; break ;
+
+		case 'Form'			: oCommand = new FCKDialogCommand( 'Form'		, FCKLang.Form			, 'dialog/fck_form.html'		, 380, 210 ) ; break ;
+		case 'Checkbox'		: oCommand = new FCKDialogCommand( 'Checkbox'	, FCKLang.Checkbox		, 'dialog/fck_checkbox.html'	, 380, 200 ) ; break ;
+		case 'Radio'		: oCommand = new FCKDialogCommand( 'Radio'		, FCKLang.RadioButton	, 'dialog/fck_radiobutton.html'	, 380, 200 ) ; break ;
+		case 'TextField'	: oCommand = new FCKDialogCommand( 'TextField'	, FCKLang.TextField		, 'dialog/fck_textfield.html'	, 380, 210 ) ; break ;
+		case 'Textarea'		: oCommand = new FCKDialogCommand( 'Textarea'	, FCKLang.Textarea		, 'dialog/fck_textarea.html'	, 380, 210 ) ; break ;
+		case 'HiddenField'	: oCommand = new FCKDialogCommand( 'HiddenField', FCKLang.HiddenField	, 'dialog/fck_hiddenfield.html'	, 380, 190 ) ; break ;
+		case 'Button'		: oCommand = new FCKDialogCommand( 'Button'		, FCKLang.Button		, 'dialog/fck_button.html'		, 380, 210 ) ; break ;
+		case 'Select'		: oCommand = new FCKDialogCommand( 'Select'		, FCKLang.SelectionField, 'dialog/fck_select.html'		, 400, 340 ) ; break ;
+		case 'ImageButton'	: oCommand = new FCKDialogCommand( 'ImageButton', FCKLang.ImageButton	, 'dialog/fck_image.html?ImageButton', 450, 390 ) ; break ;
+
+		case 'SpellCheck'	: oCommand = new FCKSpellCheckCommand() ; break ;
+		case 'FitWindow'	: oCommand = new FCKFitWindow() ; break ;
+
+		case 'Undo'	: oCommand = new FCKUndoCommand() ; break ;
+		case 'Redo'	: oCommand = new FCKRedoCommand() ; break ;
+		case 'Copy'	: oCommand = new FCKCutCopyCommand( false ) ; break ;
+		case 'Cut'	: oCommand = new FCKCutCopyCommand( true ) ; break ;
+
+		case 'SelectAll'			: oCommand = new FCKSelectAllCommand() ; break ;
+		case 'InsertOrderedList'	: oCommand = new FCKListCommand( 'insertorderedlist', 'ol' ) ; break ;
+		case 'InsertUnorderedList'	: oCommand = new FCKListCommand( 'insertunorderedlist', 'ul' ) ; break ;
+		case 'ShowBlocks' : oCommand = new FCKShowBlockCommand( 'ShowBlocks', FCKConfig.StartupShowBlocks ? FCK_TRISTATE_ON : FCK_TRISTATE_OFF ) ; break ;
+
+		// Generic Undefined command (usually used when a command is under development).
+		case 'Undefined'	: oCommand = new FCKUndefinedCommand() ; break ;
+
+		// By default we assume that it is a named command.
+		default:
+			if ( FCKRegexLib.NamedCommands.test( commandName ) )
+				oCommand = new FCKNamedCommand( commandName ) ;
+			else
+			{
+				alert( FCKLang.UnknownCommand.replace( /%1/g, commandName ) ) ;
+				return null ;
+			}
+	}
+
+	FCKCommands.LoadedCommands[ commandName ] = oCommand ;
+
+	return oCommand ;
+}
+
+// Gets the state of the "Document Properties" button. It must be enabled only
+// when "Full Page" editing is available.
+FCKCommands.GetFullPageState = function()
+{
+	return FCKConfig.FullPage ? FCK_TRISTATE_OFF : FCK_TRISTATE_DISABLED ;
+}
+
+
+FCKCommands.GetBooleanState = function( isDisabled )
+{
+	return isDisabled ? FCK_TRISTATE_DISABLED : FCK_TRISTATE_OFF ;
+}


Property changes on: announcement/trunk/src/main/webapp/fckeditor/editor/_source/internals/fckcommands.js
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/webapp/fckeditor/editor/_source/internals/fckconfig.js
===================================================================
--- announcement/trunk/src/main/webapp/fckeditor/editor/_source/internals/fckconfig.js	                        (rev 0)
+++ announcement/trunk/src/main/webapp/fckeditor/editor/_source/internals/fckconfig.js	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,237 @@
+/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2008 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * Creates and initializes the FCKConfig object.
+ */
+
+var FCKConfig = FCK.Config = new Object() ;
+
+/*
+	For the next major version (probably 3.0) we should move all this stuff to
+	another dedicated object and leave FCKConfig as a holder object for settings only).
+*/
+
+// Editor Base Path
+if ( document.location.protocol == 'file:' )
+{
+	FCKConfig.BasePath = decodeURIComponent( document.location.pathname.substr(1) ) ;
+	FCKConfig.BasePath = FCKConfig.BasePath.replace( /\\/gi, '/' ) ;
+
+	// The way to address local files is different according to the OS.
+	// In Windows it is file:// but in MacOs it is file:/// so let's get it automatically
+	var sFullProtocol = document.location.href.match( /^(file\:\/{2,3})/ )[1] ;
+	// #945 Opera does strange things with files loaded from the disk, and it fails in Mac to load xml files
+	if ( FCKBrowserInfo.IsOpera )
+		sFullProtocol += 'localhost/' ;
+
+	FCKConfig.BasePath = sFullProtocol + FCKConfig.BasePath.substring( 0, FCKConfig.BasePath.lastIndexOf( '/' ) + 1) ;
+}
+else
+	FCKConfig.BasePath = document.location.protocol + '//' + document.location.host +
+		document.location.pathname.substring( 0, document.location.pathname.lastIndexOf( '/' ) + 1) ;
+
+FCKConfig.FullBasePath = FCKConfig.BasePath ;
+
+FCKConfig.EditorPath = FCKConfig.BasePath.replace( /editor\/$/, '' ) ;
+
+// There is a bug in Gecko. If the editor is hidden on startup, an error is
+// thrown when trying to get the screen dimensions.
+try
+{
+	FCKConfig.ScreenWidth	= screen.width ;
+	FCKConfig.ScreenHeight	= screen.height ;
+}
+catch (e)
+{
+	FCKConfig.ScreenWidth	= 800 ;
+	FCKConfig.ScreenHeight	= 600 ;
+}
+
+// Override the actual configuration values with the values passed throw the
+// hidden field "<InstanceName>___Config".
+FCKConfig.ProcessHiddenField = function()
+{
+	this.PageConfig = new Object() ;
+
+	// Get the hidden field.
+	var oConfigField = window.parent.document.getElementById( FCK.Name + '___Config' ) ;
+
+	// Do nothing if the config field was not defined.
+	if ( ! oConfigField ) return ;
+
+	var aCouples = oConfigField.value.split('&') ;
+
+	for ( var i = 0 ; i < aCouples.length ; i++ )
+	{
+		if ( aCouples[i].length == 0 )
+			continue ;
+
+		var aConfig = aCouples[i].split( '=' ) ;
+		var sKey = decodeURIComponent( aConfig[0] ) ;
+		var sVal = decodeURIComponent( aConfig[1] ) ;
+
+		if ( sKey == 'CustomConfigurationsPath' )	// The Custom Config File path must be loaded immediately.
+			FCKConfig[ sKey ] = sVal ;
+
+		else if ( sVal.toLowerCase() == "true" )	// If it is a boolean TRUE.
+			this.PageConfig[ sKey ] = true ;
+
+		else if ( sVal.toLowerCase() == "false" )	// If it is a boolean FALSE.
+			this.PageConfig[ sKey ] = false ;
+
+		else if ( sVal.length > 0 && !isNaN( sVal ) )	// If it is a number.
+			this.PageConfig[ sKey ] = parseInt( sVal, 10 ) ;
+
+		else										// In any other case it is a string.
+			this.PageConfig[ sKey ] = sVal ;
+	}
+}
+
+function FCKConfig_LoadPageConfig()
+{
+	var oPageConfig = FCKConfig.PageConfig ;
+	for ( var sKey in oPageConfig )
+		FCKConfig[ sKey ] = oPageConfig[ sKey ] ;
+}
+
+function FCKConfig_PreProcess()
+{
+	var oConfig = FCKConfig ;
+
+	// Force debug mode if fckdebug=true in the QueryString (main page).
+	if ( oConfig.AllowQueryStringDebug )
+	{
+		try
+		{
+			if ( (/fckdebug=true/i).test( window.top.location.search ) )
+				oConfig.Debug = true ;
+		}
+		catch (e) { /* Ignore it. Much probably we are inside a FRAME where the "top" is in another domain (security error). */ }
+	}
+
+	// Certifies that the "PluginsPath" configuration ends with a slash.
+	if ( !oConfig.PluginsPath.EndsWith('/') )
+		oConfig.PluginsPath += '/' ;
+
+	// If no ToolbarComboPreviewCSS, point it to EditorAreaCSS.
+	var sComboPreviewCSS = oConfig.ToolbarComboPreviewCSS ;
+	if ( !sComboPreviewCSS || sComboPreviewCSS.length == 0 )
+		oConfig.ToolbarComboPreviewCSS = oConfig.EditorAreaCSS ;
+
+	// Turn the attributes that will be removed in the RemoveFormat from a string to an array
+	oConfig.RemoveAttributesArray = (oConfig.RemoveAttributes || '').split( ',' );
+
+	if ( !FCKConfig.SkinEditorCSS || FCKConfig.SkinEditorCSS.length == 0 )
+		FCKConfig.SkinEditorCSS = FCKConfig.SkinPath + 'fck_editor.css' ;
+
+	if ( !FCKConfig.SkinDialogCSS || FCKConfig.SkinDialogCSS.length == 0 )
+		FCKConfig.SkinDialogCSS = FCKConfig.SkinPath + 'fck_dialog.css' ;
+}
+
+// Define toolbar sets collection.
+FCKConfig.ToolbarSets = new Object() ;
+
+// Defines the plugins collection.
+FCKConfig.Plugins = new Object() ;
+FCKConfig.Plugins.Items = new Array() ;
+
+FCKConfig.Plugins.Add = function( name, langs, path )
+{
+	FCKConfig.Plugins.Items.AddItem( [name, langs, path] ) ;
+}
+
+// FCKConfig.ProtectedSource: object that holds a collection of Regular
+// Expressions that defined parts of the raw HTML that must remain untouched
+// like custom tags, scripts, server side code, etc...
+FCKConfig.ProtectedSource = new Object() ;
+
+// Generates a string used to identify and locate the Protected Tags comments.
+FCKConfig.ProtectedSource._CodeTag = (new Date()).valueOf() ;
+
+// Initialize the regex array with the default ones.
+FCKConfig.ProtectedSource.RegexEntries = [
+	// First of any other protection, we must protect all comments to avoid
+	// loosing them (of course, IE related).
+	/<!--[\s\S]*?-->/g ,
+
+	// Script tags will also be forced to be protected, otherwise IE will execute them.
+	/<script[\s\S]*?<\/script>/gi,
+
+	// <noscript> tags (get lost in IE and messed up in FF).
+	/<noscript[\s\S]*?<\/noscript>/gi
+] ;
+
+FCKConfig.ProtectedSource.Add = function( regexPattern )
+{
+	this.RegexEntries.AddItem( regexPattern ) ;
+}
+
+FCKConfig.ProtectedSource.Protect = function( html )
+{
+	var codeTag = this._CodeTag ;
+	function _Replace( protectedSource )
+	{
+		var index = FCKTempBin.AddElement( protectedSource ) ;
+		return '<!--{' + codeTag + index + '}-->' ;
+	}
+
+	for ( var i = 0 ; i < this.RegexEntries.length ; i++ )
+	{
+		html = html.replace( this.RegexEntries[i], _Replace ) ;
+	}
+
+	return html ;
+}
+
+FCKConfig.ProtectedSource.Revert = function( html, clearBin )
+{
+	function _Replace( m, opener, index )
+	{
+		var protectedValue = clearBin ? FCKTempBin.RemoveElement( index ) : FCKTempBin.Elements[ index ] ;
+		// There could be protected source inside another one.
+		return FCKConfig.ProtectedSource.Revert( protectedValue, clearBin ) ;
+	}
+
+	var regex = new RegExp( "(<|&lt;)!--\\{" + this._CodeTag + "(\\d+)\\}--(>|&gt;)", "g" ) ;
+	return html.replace( regex, _Replace ) ;
+}
+
+// Returns a string with the attributes that must be appended to the body
+FCKConfig.GetBodyAttributes = function()
+{
+	var bodyAttributes = '' ;
+	// Add id and class to the body.
+	if ( this.BodyId && this.BodyId.length > 0 )
+		bodyAttributes += ' id="' + this.BodyId + '"' ;
+	if ( this.BodyClass && this.BodyClass.length > 0 )
+		bodyAttributes += ' class="' + this.BodyClass + '"' ;
+
+	return bodyAttributes ;
+}
+
+// Sets the body attributes directly on the node
+FCKConfig.ApplyBodyAttributes = function( oBody )
+{
+	// Add ID and Class to the body
+	if ( this.BodyId && this.BodyId.length > 0 )
+		oBody.id = FCKConfig.BodyId ;
+	if ( this.BodyClass && this.BodyClass.length > 0 )
+		oBody.className += ' ' + FCKConfig.BodyClass ;
+}


Property changes on: announcement/trunk/src/main/webapp/fckeditor/editor/_source/internals/fckconfig.js
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/webapp/fckeditor/editor/_source/internals/fckdebug.js
===================================================================
--- announcement/trunk/src/main/webapp/fckeditor/editor/_source/internals/fckdebug.js	                        (rev 0)
+++ announcement/trunk/src/main/webapp/fckeditor/editor/_source/internals/fckdebug.js	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,59 @@
+/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2008 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * Debug window control and operations.
+ */
+
+// Public function defined here must be declared in fckdebug_empty.js.
+
+var FCKDebug =
+{
+	Output : function( message, color, noParse )
+	{
+		if ( ! FCKConfig.Debug )
+			return ;
+
+		try
+		{
+			this._GetWindow().Output( message, color ) ;
+		}
+		catch ( e ) {}	 // Ignore errors
+	},
+
+	OutputObject : function( anyObject, color )
+	{
+		if ( ! FCKConfig.Debug )
+			return ;
+
+		try
+		{
+			this._GetWindow().OutputObject( anyObject, color ) ;
+		}
+		catch ( e ) {}	 // Ignore errors
+	},
+
+	_GetWindow : function()
+	{
+		if ( !this.DebugWindow || this.DebugWindow.closed )
+			this.DebugWindow = window.open( FCKConfig.BasePath + 'fckdebug.html', 'FCKeditorDebug', 'menubar=no,scrollbars=yes,resizable=yes,location=no,toolbar=no,width=600,height=500', true ) ;
+
+		return this.DebugWindow ;
+	}
+} ;


Property changes on: announcement/trunk/src/main/webapp/fckeditor/editor/_source/internals/fckdebug.js
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/webapp/fckeditor/editor/_source/internals/fckdebug_empty.js
===================================================================
--- announcement/trunk/src/main/webapp/fckeditor/editor/_source/internals/fckdebug_empty.js	                        (rev 0)
+++ announcement/trunk/src/main/webapp/fckeditor/editor/_source/internals/fckdebug_empty.js	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,31 @@
+/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2008 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * Debug window control and operations (empty for the compressed files - #2043).
+ */
+
+var FCKDebug =
+{
+	Output : function()
+	{},
+
+	OutputObject : function()
+	{}
+} ;


Property changes on: announcement/trunk/src/main/webapp/fckeditor/editor/_source/internals/fckdebug_empty.js
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/webapp/fckeditor/editor/_source/internals/fckdialog.js
===================================================================
--- announcement/trunk/src/main/webapp/fckeditor/editor/_source/internals/fckdialog.js	                        (rev 0)
+++ announcement/trunk/src/main/webapp/fckeditor/editor/_source/internals/fckdialog.js	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,239 @@
+/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2008 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * Dialog windows operations.
+ */
+
+var FCKDialog = ( function()
+{
+	var topDialog ;
+	var baseZIndex ;
+	var cover ;
+
+	// The document that holds the dialog.
+	var topWindow = window.parent ;
+
+	while ( topWindow.parent && topWindow.parent != topWindow )
+	{
+		try
+		{
+			if ( topWindow.parent.document.domain != document.domain )
+				break ;
+			if ( topWindow.parent.document.getElementsByTagName( 'frameset' ).length > 0 )
+				break ;
+		}
+		catch ( e )
+		{
+			break ;
+		}
+		topWindow = topWindow.parent ;
+	}
+
+	var topDocument = topWindow.document ;
+
+	var getZIndex = function()
+	{
+		if ( !baseZIndex )
+			baseZIndex = FCKConfig.FloatingPanelsZIndex + 999 ;
+		return ++baseZIndex ;
+	}
+
+	// TODO : This logic is not actually working when reducing the window, only
+	// when enlarging it.
+	var resizeHandler = function()
+	{
+		if ( !cover )
+			return ;
+
+		var relElement = FCKTools.IsStrictMode( topDocument ) ? topDocument.documentElement : topDocument.body ;
+
+		FCKDomTools.SetElementStyles( cover,
+			{
+				'width' : Math.max( relElement.scrollWidth,
+					relElement.clientWidth,
+					topDocument.scrollWidth || 0 ) - 1 + 'px',
+				'height' : Math.max( relElement.scrollHeight,
+					relElement.clientHeight,
+					topDocument.scrollHeight || 0 ) - 1 + 'px'
+			} ) ;
+	}
+
+	return {
+		/**
+		 * Opens a dialog window using the standard dialog template.
+		 */
+		OpenDialog : function( dialogName, dialogTitle, dialogPage, width, height, customValue, parentWindow, resizable )
+		{
+			if ( !topDialog )
+				this.DisplayMainCover() ;
+
+			// Setup the dialog info to be passed to the dialog.
+			var dialogInfo =
+			{
+				Title : dialogTitle,
+				Page : dialogPage,
+				Editor : window,
+				CustomValue : customValue,		// Optional
+				TopWindow : topWindow
+			}
+
+			FCK.ToolbarSet.CurrentInstance.Selection.Save() ;
+
+			// Calculate the dialog position, centering it on the screen.
+			var viewSize = FCKTools.GetViewPaneSize( topWindow ) ;
+			var scrollPosition = { 'X' : 0, 'Y' : 0 } ;
+			var useAbsolutePosition = FCKBrowserInfo.IsIE && ( !FCKBrowserInfo.IsIE7 || !FCKTools.IsStrictMode( topWindow.document ) ) ;
+			if ( useAbsolutePosition )
+				scrollPosition = FCKTools.GetScrollPosition( topWindow ) ;
+			var iTop  = Math.max( scrollPosition.Y + ( viewSize.Height - height - 20 ) / 2, 0 ) ;
+			var iLeft = Math.max( scrollPosition.X + ( viewSize.Width - width - 20 )  / 2, 0 ) ;
+
+			// Setup the IFRAME that will hold the dialog.
+			var dialog = topDocument.createElement( 'iframe' ) ;
+			FCKTools.ResetStyles( dialog ) ;
+			dialog.src = FCKConfig.BasePath + 'fckdialog.html' ;
+
+			// Dummy URL for testing whether the code in fckdialog.js alone leaks memory.
+			// dialog.src = 'about:blank';
+
+			dialog.frameBorder = 0 ;
+			dialog.allowTransparency = true ;
+			FCKDomTools.SetElementStyles( dialog,
+					{
+						'position'	: ( useAbsolutePosition ) ? 'absolute' : 'fixed',
+						'top'		: iTop + 'px',
+						'left'		: iLeft + 'px',
+						'width'		: width + 'px',
+						'height'	: height + 'px',
+						'zIndex'	: getZIndex()
+					} ) ;
+
+			// Save the dialog info to be used by the dialog page once loaded.
+			dialog._DialogArguments = dialogInfo ;
+
+			// Append the IFRAME to the target document.
+			topDocument.body.appendChild( dialog ) ;
+
+			// Keep record of the dialog's parent/child relationships.
+			dialog._ParentDialog = topDialog ;
+			topDialog = dialog ;
+		},
+
+		/**
+		 * (For internal use)
+		 * Called when the top dialog is closed.
+		 */
+		OnDialogClose : function( dialogWindow )
+		{
+			var dialog = dialogWindow.frameElement ;
+			FCKDomTools.RemoveNode( dialog ) ;
+
+			if ( dialog._ParentDialog )		// Nested Dialog.
+			{
+				topDialog = dialog._ParentDialog ;
+				dialog._ParentDialog.contentWindow.SetEnabled( true ) ;
+			}
+			else							// First Dialog.
+			{
+				// Set the Focus in the browser, so the "OnBlur" event is not
+				// fired. In IE, there is no need to do that because the dialog
+				// already moved the selection to the editing area before
+				// closing (EnsureSelection). Also, the Focus() call here
+				// causes memory leak on IE7 (weird).
+				if ( !FCKBrowserInfo.IsIE )
+					FCK.Focus() ;
+
+				this.HideMainCover() ;
+				// Bug #1918: Assigning topDialog = null directly causes IE6 to crash.
+				setTimeout( function(){ topDialog = null ; }, 0 ) ;
+
+				// Release the previously saved selection.
+				FCK.ToolbarSet.CurrentInstance.Selection.Release() ;
+			}
+		},
+
+		DisplayMainCover : function()
+		{
+			// Setup the DIV that will be used to cover.
+			cover = topDocument.createElement( 'div' ) ;
+			FCKTools.ResetStyles( cover ) ;
+			FCKDomTools.SetElementStyles( cover,
+				{
+					'position' : 'absolute',
+					'zIndex' : getZIndex(),
+					'top' : '0px',
+					'left' : '0px',
+					'backgroundColor' : FCKConfig.BackgroundBlockerColor
+				} ) ;
+			FCKDomTools.SetOpacity( cover, FCKConfig.BackgroundBlockerOpacity ) ;
+
+			// For IE6-, we need to fill the cover with a transparent IFRAME,
+			// to properly block <select> fields.
+			if ( FCKBrowserInfo.IsIE && !FCKBrowserInfo.IsIE7 )
+			{
+				var iframe = topDocument.createElement( 'iframe' ) ;
+				FCKTools.ResetStyles( iframe ) ;
+				iframe.hideFocus = true ;
+				iframe.frameBorder = 0 ;
+				iframe.src = FCKTools.GetVoidUrl() ;
+				FCKDomTools.SetElementStyles( iframe,
+					{
+						'width' : '100%',
+						'height' : '100%',
+						'position' : 'absolute',
+						'left' : '0px',
+						'top' : '0px',
+						'filter' : 'progid:DXImageTransform.Microsoft.Alpha(opacity=0)'
+					} ) ;
+				cover.appendChild( iframe ) ;
+			}
+
+			// We need to manually adjust the cover size on resize.
+			FCKTools.AddEventListener( topWindow, 'resize', resizeHandler ) ;
+			resizeHandler() ;
+
+			topDocument.body.appendChild( cover ) ;
+
+			FCKFocusManager.Lock() ;
+
+			// Prevent the user from refocusing the disabled
+			// editing window by pressing Tab. (Bug #2065)
+			var el = FCK.ToolbarSet.CurrentInstance.GetInstanceObject( 'frameElement' ) ;
+			el._fck_originalTabIndex = el.tabIndex ;
+			el.tabIndex = -1 ;
+		},
+
+		HideMainCover : function()
+		{
+			FCKDomTools.RemoveNode( cover ) ;
+			FCKFocusManager.Unlock() ;
+
+			// Revert the tab index hack. (Bug #2065)
+			var el = FCK.ToolbarSet.CurrentInstance.GetInstanceObject( 'frameElement' ) ;
+			el.tabIndex = el._fck_originalTabIndex ;
+			FCKDomTools.ClearElementJSProperty( el, '_fck_originalTabIndex' ) ;
+		},
+
+		GetCover : function()
+		{
+			return cover ;
+		}
+	} ;
+} )() ;


Property changes on: announcement/trunk/src/main/webapp/fckeditor/editor/_source/internals/fckdialog.js
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/webapp/fckeditor/editor/_source/internals/fckdocumentprocessor.js
===================================================================
--- announcement/trunk/src/main/webapp/fckeditor/editor/_source/internals/fckdocumentprocessor.js	                        (rev 0)
+++ announcement/trunk/src/main/webapp/fckeditor/editor/_source/internals/fckdocumentprocessor.js	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,265 @@
+/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2008 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * Advanced document processors.
+ */
+
+var FCKDocumentProcessor = new Object() ;
+FCKDocumentProcessor._Items = new Array() ;
+
+FCKDocumentProcessor.AppendNew = function()
+{
+	var oNewItem = new Object() ;
+	this._Items.AddItem( oNewItem ) ;
+	return oNewItem ;
+}
+
+FCKDocumentProcessor.Process = function( document )
+{
+	var bIsDirty = FCK.IsDirty() ;
+	var oProcessor, i = 0 ;
+	while( ( oProcessor = this._Items[i++] ) )
+		oProcessor.ProcessDocument( document ) ;
+	if ( !bIsDirty )
+		FCK.ResetIsDirty() ;
+}
+
+var FCKDocumentProcessor_CreateFakeImage = function( fakeClass, realElement )
+{
+	var oImg = FCKTools.GetElementDocument( realElement ).createElement( 'IMG' ) ;
+	oImg.className = fakeClass ;
+	oImg.src = FCKConfig.BasePath + 'images/spacer.gif' ;
+	oImg.setAttribute( '_fckfakelement', 'true', 0 ) ;
+	oImg.setAttribute( '_fckrealelement', FCKTempBin.AddElement( realElement ), 0 ) ;
+	return oImg ;
+}
+
+// Link Anchors
+if ( FCKBrowserInfo.IsIE || FCKBrowserInfo.IsOpera )
+{
+	var FCKAnchorsProcessor = FCKDocumentProcessor.AppendNew() ;
+	FCKAnchorsProcessor.ProcessDocument = function( document )
+	{
+		var aLinks = document.getElementsByTagName( 'A' ) ;
+
+		var oLink ;
+		var i = aLinks.length - 1 ;
+		while ( i >= 0 && ( oLink = aLinks[i--] ) )
+		{
+			// If it is anchor. Doesn't matter if it's also a link (even better: we show that it's both a link and an anchor)
+			if ( oLink.name.length > 0 )
+			{
+				//if the anchor has some content then we just add a temporary class
+				if ( oLink.innerHTML !== '' )
+				{
+					if ( FCKBrowserInfo.IsIE )
+						oLink.className += ' FCK__AnchorC' ;
+				}
+				else
+				{
+					var oImg = FCKDocumentProcessor_CreateFakeImage( 'FCK__Anchor', oLink.cloneNode(true) ) ;
+					oImg.setAttribute( '_fckanchor', 'true', 0 ) ;
+
+					oLink.parentNode.insertBefore( oImg, oLink ) ;
+					oLink.parentNode.removeChild( oLink ) ;
+				}
+			}
+		}
+	}
+}
+
+// Page Breaks
+var FCKPageBreaksProcessor = FCKDocumentProcessor.AppendNew() ;
+FCKPageBreaksProcessor.ProcessDocument = function( document )
+{
+	var aDIVs = document.getElementsByTagName( 'DIV' ) ;
+
+	var eDIV ;
+	var i = aDIVs.length - 1 ;
+	while ( i >= 0 && ( eDIV = aDIVs[i--] ) )
+	{
+		if ( eDIV.style.pageBreakAfter == 'always' && eDIV.childNodes.length == 1 && eDIV.childNodes[0].style && eDIV.childNodes[0].style.display == 'none' )
+		{
+			var oFakeImage = FCKDocumentProcessor_CreateFakeImage( 'FCK__PageBreak', eDIV.cloneNode(true) ) ;
+
+			eDIV.parentNode.insertBefore( oFakeImage, eDIV ) ;
+			eDIV.parentNode.removeChild( eDIV ) ;
+		}
+	}
+/*
+	var aCenters = document.getElementsByTagName( 'CENTER' ) ;
+
+	var oCenter ;
+	var i = aCenters.length - 1 ;
+	while ( i >= 0 && ( oCenter = aCenters[i--] ) )
+	{
+		if ( oCenter.style.pageBreakAfter == 'always' && oCenter.innerHTML.Trim().length == 0 )
+		{
+			var oFakeImage = FCKDocumentProcessor_CreateFakeImage( 'FCK__PageBreak', oCenter.cloneNode(true) ) ;
+
+			oCenter.parentNode.insertBefore( oFakeImage, oCenter ) ;
+			oCenter.parentNode.removeChild( oCenter ) ;
+		}
+	}
+*/
+}
+
+// EMBED and OBJECT tags.
+FCKEmbedAndObjectProcessor = (function()
+{
+	var customProcessors = [] ;
+
+	var processElement = function( el )
+	{
+		var clone = el.cloneNode( true ) ;
+		var replaceElement ;
+		var fakeImg = replaceElement = FCKDocumentProcessor_CreateFakeImage( 'FCK__UnknownObject', clone ) ;
+		FCKEmbedAndObjectProcessor.RefreshView( fakeImg, el ) ;
+
+		for ( var i = 0 ; i < customProcessors.length ; i++ )
+			replaceElement = customProcessors[i]( el, replaceElement ) || replaceElement ;
+
+		if ( replaceElement != fakeImg )
+			FCKTempBin.RemoveElement( fakeImg.getAttribute( '_fckrealelement' ) ) ;
+
+		el.parentNode.replaceChild( replaceElement, el ) ;
+	}
+
+	return FCKTools.Merge( FCKDocumentProcessor.AppendNew(),
+		       {
+				ProcessDocument : function( doc )
+				{
+					// Firefox 3 would sometimes throw an unknown exception while accessing EMBEDs and OBJECTs
+					// without the setTimeout().
+					FCKTools.RunFunction( function()
+						{
+							// Process OBJECTs first, since EMBEDs can sometimes go inside OBJECTS (e.g. Flash).
+							var aObjects = doc.getElementsByTagName( 'object' );
+							for ( var i = aObjects.length - 1 ; i >= 0 ; i-- )
+								processElement( aObjects[i] ) ;
+
+							// Now process any EMBEDs left.
+							var aEmbeds = doc.getElementsByTagName( 'embed' ) ;
+							for ( var i = aEmbeds.length - 1 ; i >= 0 ; i-- )
+								processElement( aEmbeds[i] ) ;
+						} ) ;
+				},
+
+				RefreshView : function( placeHolder, original )
+				{
+					if ( original.getAttribute( 'width' ) > 0 )
+						placeHolder.style.width = FCKTools.ConvertHtmlSizeToStyle( original.getAttribute( 'width' ) ) ;
+
+					if ( original.getAttribute( 'height' ) > 0 )
+						placeHolder.style.height = FCKTools.ConvertHtmlSizeToStyle( original.getAttribute( 'height' ) ) ;
+				},
+
+				AddCustomHandler : function( func )
+				{
+					customProcessors.push( func ) ;
+				}
+			} ) ;
+} )() ;
+
+FCK.GetRealElement = function( fakeElement )
+{
+	var e = FCKTempBin.Elements[ fakeElement.getAttribute('_fckrealelement') ] ;
+
+	if ( fakeElement.getAttribute('_fckflash') )
+	{
+		if ( fakeElement.style.width.length > 0 )
+				e.width = FCKTools.ConvertStyleSizeToHtml( fakeElement.style.width ) ;
+
+		if ( fakeElement.style.height.length > 0 )
+				e.height = FCKTools.ConvertStyleSizeToHtml( fakeElement.style.height ) ;
+	}
+
+	return e ;
+}
+
+// HR Processor.
+// This is a IE only (tricky) thing. We protect all HR tags before loading them
+// (see FCK.ProtectTags). Here we put the HRs back.
+if ( FCKBrowserInfo.IsIE )
+{
+	FCKDocumentProcessor.AppendNew().ProcessDocument = function( document )
+	{
+		var aHRs = document.getElementsByTagName( 'HR' ) ;
+
+		var eHR ;
+		var i = aHRs.length - 1 ;
+		while ( i >= 0 && ( eHR = aHRs[i--] ) )
+		{
+			// Create the replacement HR.
+			var newHR = document.createElement( 'hr' ) ;
+			newHR.mergeAttributes( eHR, true ) ;
+
+			// We must insert the new one after it. insertBefore will not work in all cases.
+			FCKDomTools.InsertAfterNode( eHR, newHR ) ;
+
+			eHR.parentNode.removeChild( eHR ) ;
+		}
+	}
+}
+
+// INPUT:hidden Processor.
+FCKDocumentProcessor.AppendNew().ProcessDocument = function( document )
+{
+	var aInputs = document.getElementsByTagName( 'INPUT' ) ;
+
+	var oInput ;
+	var i = aInputs.length - 1 ;
+	while ( i >= 0 && ( oInput = aInputs[i--] ) )
+	{
+		if ( oInput.type == 'hidden' )
+		{
+			var oImg = FCKDocumentProcessor_CreateFakeImage( 'FCK__InputHidden', oInput.cloneNode(true) ) ;
+			oImg.setAttribute( '_fckinputhidden', 'true', 0 ) ;
+
+			oInput.parentNode.insertBefore( oImg, oInput ) ;
+			oInput.parentNode.removeChild( oInput ) ;
+		}
+	}
+}
+
+// Flash handler.
+FCKEmbedAndObjectProcessor.AddCustomHandler( function( el, fakeImg )
+	{
+		if ( ! ( el.nodeName.IEquals( 'embed' ) && ( el.type == 'application/x-shockwave-flash' || /\.swf($|#|\?)/i.test( el.src ) ) ) )
+			return ;
+		fakeImg.className = 'FCK__Flash' ;
+		fakeImg.setAttribute( '_fckflash', 'true', 0 );
+	} ) ;
+
+// Buggy <span class="Apple-style-span"> tags added by Safari.
+if ( FCKBrowserInfo.IsSafari )
+{
+	FCKDocumentProcessor.AppendNew().ProcessDocument = function( doc )
+	{
+		var spans = doc.getElementsByClassName ?
+			doc.getElementsByClassName( 'Apple-style-span' ) :
+			Array.prototype.filter.call(
+					doc.getElementsByTagName( 'span' ),
+					function( item ){ return item.className == 'Apple-style-span' ; }
+					) ;
+		for ( var i = spans.length - 1 ; i >= 0 ; i-- )
+			FCKDomTools.RemoveNode( spans[i], true ) ;
+	}
+}


Property changes on: announcement/trunk/src/main/webapp/fckeditor/editor/_source/internals/fckdocumentprocessor.js
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/webapp/fckeditor/editor/_source/internals/fckdomtools.js
===================================================================
--- announcement/trunk/src/main/webapp/fckeditor/editor/_source/internals/fckdomtools.js	                        (rev 0)
+++ announcement/trunk/src/main/webapp/fckeditor/editor/_source/internals/fckdomtools.js	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,1025 @@
+/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2008 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * Utility functions to work with the DOM.
+ */
+
+var FCKDomTools =
+{
+	/**
+	 * Move all child nodes from one node to another.
+	 */
+	MoveChildren : function( source, target, toTargetStart )
+	{
+		if ( source == target )
+			return ;
+
+		var eChild ;
+
+		if ( toTargetStart )
+		{
+			while ( (eChild = source.lastChild) )
+				target.insertBefore( source.removeChild( eChild ), target.firstChild ) ;
+		}
+		else
+		{
+			while ( (eChild = source.firstChild) )
+				target.appendChild( source.removeChild( eChild ) ) ;
+		}
+	},
+
+	MoveNode : function( source, target, toTargetStart )
+	{
+		if ( toTargetStart )
+			target.insertBefore( FCKDomTools.RemoveNode( source ), target.firstChild ) ;
+		else
+			target.appendChild( FCKDomTools.RemoveNode( source ) ) ;
+	},
+
+	// Remove blank spaces from the beginning and the end of the contents of a node.
+	TrimNode : function( node )
+	{
+		this.LTrimNode( node ) ;
+		this.RTrimNode( node ) ;
+	},
+
+	LTrimNode : function( node )
+	{
+		var eChildNode ;
+
+		while ( (eChildNode = node.firstChild) )
+		{
+			if ( eChildNode.nodeType == 3 )
+			{
+				var sTrimmed = eChildNode.nodeValue.LTrim() ;
+				var iOriginalLength = eChildNode.nodeValue.length ;
+
+				if ( sTrimmed.length == 0 )
+				{
+					node.removeChild( eChildNode ) ;
+					continue ;
+				}
+				else if ( sTrimmed.length < iOriginalLength )
+				{
+					eChildNode.splitText( iOriginalLength - sTrimmed.length ) ;
+					node.removeChild( node.firstChild ) ;
+				}
+			}
+			break ;
+		}
+	},
+
+	RTrimNode : function( node )
+	{
+		var eChildNode ;
+
+		while ( (eChildNode = node.lastChild) )
+		{
+			if ( eChildNode.nodeType == 3 )
+			{
+				var sTrimmed = eChildNode.nodeValue.RTrim() ;
+				var iOriginalLength = eChildNode.nodeValue.length ;
+
+				if ( sTrimmed.length == 0 )
+				{
+					// If the trimmed text node is empty, just remove it.
+
+					// Use "eChildNode.parentNode" instead of "node" to avoid IE bug (#81).
+					eChildNode.parentNode.removeChild( eChildNode ) ;
+					continue ;
+				}
+				else if ( sTrimmed.length < iOriginalLength )
+				{
+					// If the trimmed text length is less than the original
+					// length, strip all spaces from the end by splitting
+					// the text and removing the resulting useless node.
+
+					eChildNode.splitText( sTrimmed.length ) ;
+					// Use "node.lastChild.parentNode" instead of "node" to avoid IE bug (#81).
+					node.lastChild.parentNode.removeChild( node.lastChild ) ;
+				}
+			}
+			break ;
+		}
+
+		if ( !FCKBrowserInfo.IsIE && !FCKBrowserInfo.IsOpera )
+		{
+			eChildNode = node.lastChild ;
+
+			if ( eChildNode && eChildNode.nodeType == 1 && eChildNode.nodeName.toLowerCase() == 'br' )
+			{
+				// Use "eChildNode.parentNode" instead of "node" to avoid IE bug (#324).
+				eChildNode.parentNode.removeChild( eChildNode ) ;
+			}
+		}
+	},
+
+	RemoveNode : function( node, excludeChildren )
+	{
+		if ( excludeChildren )
+		{
+			// Move all children before the node.
+			var eChild ;
+			while ( (eChild = node.firstChild) )
+				node.parentNode.insertBefore( node.removeChild( eChild ), node ) ;
+		}
+
+		return node.parentNode.removeChild( node ) ;
+	},
+
+	GetFirstChild : function( node, childNames )
+	{
+		// If childNames is a string, transform it in a Array.
+		if ( typeof ( childNames ) == 'string' )
+			childNames = [ childNames ] ;
+
+		var eChild = node.firstChild ;
+		while( eChild )
+		{
+			if ( eChild.nodeType == 1 && eChild.tagName.Equals.apply( eChild.tagName, childNames ) )
+				return eChild ;
+
+			eChild = eChild.nextSibling ;
+		}
+
+		return null ;
+	},
+
+	GetLastChild : function( node, childNames )
+	{
+		// If childNames is a string, transform it in a Array.
+		if ( typeof ( childNames ) == 'string' )
+			childNames = [ childNames ] ;
+
+		var eChild = node.lastChild ;
+		while( eChild )
+		{
+			if ( eChild.nodeType == 1 && ( !childNames || eChild.tagName.Equals( childNames ) ) )
+				return eChild ;
+
+			eChild = eChild.previousSibling ;
+		}
+
+		return null ;
+	},
+
+	/*
+	 * Gets the previous element (nodeType=1) in the source order. Returns
+	 * "null" If no element is found.
+	 *		@param {Object} currentNode The node to start searching from.
+	 *		@param {Boolean} ignoreSpaceTextOnly Sets how text nodes will be
+	 *				handled. If set to "true", only white spaces text nodes
+	 *				will be ignored, while non white space text nodes will stop
+	 *				the search, returning null. If "false" or omitted, all
+	 *				text nodes are ignored.
+	 *		@param {string[]} stopSearchElements An array of element names that
+	 *				will cause the search to stop when found, returning null.
+	 *				May be omitted (or null).
+	 *		@param {string[]} ignoreElements An array of element names that
+	 *				must be ignored during the search.
+	 */
+	GetPreviousSourceElement : function( currentNode, ignoreSpaceTextOnly, stopSearchElements, ignoreElements )
+	{
+		if ( !currentNode )
+			return null ;
+
+		if ( stopSearchElements && currentNode.nodeType == 1 && currentNode.nodeName.IEquals( stopSearchElements ) )
+			return null ;
+
+		if ( currentNode.previousSibling )
+			currentNode = currentNode.previousSibling ;
+		else
+			return this.GetPreviousSourceElement( currentNode.parentNode, ignoreSpaceTextOnly, stopSearchElements, ignoreElements ) ;
+
+		while ( currentNode )
+		{
+			if ( currentNode.nodeType == 1 )
+			{
+				if ( stopSearchElements && currentNode.nodeName.IEquals( stopSearchElements ) )
+					break ;
+
+				if ( !ignoreElements || !currentNode.nodeName.IEquals( ignoreElements ) )
+					return currentNode ;
+			}
+			else if ( ignoreSpaceTextOnly && currentNode.nodeType == 3 && currentNode.nodeValue.RTrim().length > 0 )
+				break ;
+
+			if ( currentNode.lastChild )
+				currentNode = currentNode.lastChild ;
+			else
+				return this.GetPreviousSourceElement( currentNode, ignoreSpaceTextOnly, stopSearchElements, ignoreElements ) ;
+		}
+
+		return null ;
+	},
+
+	/*
+	 * Gets the next element (nodeType=1) in the source order. Returns
+	 * "null" If no element is found.
+	 *		@param {Object} currentNode The node to start searching from.
+	 *		@param {Boolean} ignoreSpaceTextOnly Sets how text nodes will be
+	 *				handled. If set to "true", only white spaces text nodes
+	 *				will be ignored, while non white space text nodes will stop
+	 *				the search, returning null. If "false" or omitted, all
+	 *				text nodes are ignored.
+	 *		@param {string[]} stopSearchElements An array of element names that
+	 *				will cause the search to stop when found, returning null.
+	 *				May be omitted (or null).
+	 *		@param {string[]} ignoreElements An array of element names that
+	 *				must be ignored during the search.
+	 */
+	GetNextSourceElement : function( currentNode, ignoreSpaceTextOnly, stopSearchElements, ignoreElements, startFromSibling )
+	{
+		while( ( currentNode = this.GetNextSourceNode( currentNode, startFromSibling ) ) )	// Only one "=".
+		{
+			if ( currentNode.nodeType == 1 )
+			{
+				if ( stopSearchElements && currentNode.nodeName.IEquals( stopSearchElements ) )
+					break ;
+
+				if ( ignoreElements && currentNode.nodeName.IEquals( ignoreElements ) )
+					return this.GetNextSourceElement( currentNode, ignoreSpaceTextOnly, stopSearchElements, ignoreElements ) ;
+
+				return currentNode ;
+			}
+			else if ( ignoreSpaceTextOnly && currentNode.nodeType == 3 && currentNode.nodeValue.RTrim().length > 0 )
+				break ;
+		}
+
+		return null ;
+	},
+
+	/*
+	 * Get the next DOM node available in source order.
+	 */
+	GetNextSourceNode : function( currentNode, startFromSibling, nodeType, stopSearchNode )
+	{
+		if ( !currentNode )
+			return null ;
+
+		var node ;
+
+		if ( !startFromSibling && currentNode.firstChild )
+			node = currentNode.firstChild ;
+		else
+		{
+			if ( stopSearchNode && currentNode == stopSearchNode )
+				return null ;
+
+			node = currentNode.nextSibling ;
+
+			if ( !node && ( !stopSearchNode || stopSearchNode != currentNode.parentNode ) )
+				return this.GetNextSourceNode( currentNode.parentNode, true, nodeType, stopSearchNode ) ;
+		}
+
+		if ( nodeType && node && node.nodeType != nodeType )
+			return this.GetNextSourceNode( node, false, nodeType, stopSearchNode ) ;
+
+		return node ;
+	},
+
+	/*
+	 * Get the next DOM node available in source order.
+	 */
+	GetPreviousSourceNode : function( currentNode, startFromSibling, nodeType, stopSearchNode )
+	{
+		if ( !currentNode )
+			return null ;
+
+		var node ;
+
+		if ( !startFromSibling && currentNode.lastChild )
+			node = currentNode.lastChild ;
+		else
+		{
+			if ( stopSearchNode && currentNode == stopSearchNode )
+				return null ;
+
+			node = currentNode.previousSibling ;
+
+			if ( !node && ( !stopSearchNode || stopSearchNode != currentNode.parentNode ) )
+				return this.GetPreviousSourceNode( currentNode.parentNode, true, nodeType, stopSearchNode ) ;
+		}
+
+		if ( nodeType && node && node.nodeType != nodeType )
+			return this.GetPreviousSourceNode( node, false, nodeType, stopSearchNode ) ;
+
+		return node ;
+	},
+
+	// Inserts a element after a existing one.
+	InsertAfterNode : function( existingNode, newNode )
+	{
+		return existingNode.parentNode.insertBefore( newNode, existingNode.nextSibling ) ;
+	},
+
+	GetParents : function( node )
+	{
+		var parents = new Array() ;
+
+		while ( node )
+		{
+			parents.unshift( node ) ;
+			node = node.parentNode ;
+		}
+
+		return parents ;
+	},
+
+	GetCommonParents : function( node1, node2 )
+	{
+		var p1 = this.GetParents( node1 ) ;
+		var p2 = this.GetParents( node2 ) ;
+		var retval = [] ;
+		for ( var i = 0 ; i < p1.length ; i++ )
+		{
+			if ( p1[i] == p2[i] )
+				retval.push( p1[i] ) ;
+		}
+		return retval ;
+	},
+
+	GetCommonParentNode : function( node1, node2, tagList )
+	{
+		var tagMap = {} ;
+		if ( ! tagList.pop )
+			tagList = [ tagList ] ;
+		while ( tagList.length > 0 )
+			tagMap[tagList.pop().toLowerCase()] = 1 ;
+
+		var commonParents = this.GetCommonParents( node1, node2 ) ;
+		var currentParent = null ;
+		while ( ( currentParent = commonParents.pop() ) )
+		{
+			if ( tagMap[currentParent.nodeName.toLowerCase()] )
+				return currentParent ;
+		}
+		return null ;
+	},
+
+	GetIndexOf : function( node )
+	{
+		var currentNode = node.parentNode ? node.parentNode.firstChild : null ;
+		var currentIndex = -1 ;
+
+		while ( currentNode )
+		{
+			currentIndex++ ;
+
+			if ( currentNode == node )
+				return currentIndex ;
+
+			currentNode = currentNode.nextSibling ;
+		}
+
+		return -1 ;
+	},
+
+	PaddingNode : null,
+
+	EnforcePaddingNode : function( doc, tagName )
+	{
+		// In IE it can happen when the page is reloaded that doc or doc.body is null, so exit here
+		try
+		{
+			if ( !doc || !doc.body )
+				return ;
+		}
+		catch (e)
+		{
+			return ;
+		}
+
+		this.CheckAndRemovePaddingNode( doc, tagName, true ) ;
+		try
+		{
+			if ( doc.body.lastChild && ( doc.body.lastChild.nodeType != 1
+					|| doc.body.lastChild.tagName.toLowerCase() == tagName.toLowerCase() ) )
+				return ;
+		}
+		catch (e)
+		{
+			return ;
+		}
+
+		var node = doc.createElement( tagName ) ;
+		if ( FCKBrowserInfo.IsGecko && FCKListsLib.NonEmptyBlockElements[ tagName ] )
+			FCKTools.AppendBogusBr( node ) ;
+		this.PaddingNode = node ;
+		if ( doc.body.childNodes.length == 1
+				&& doc.body.firstChild.nodeType == 1
+				&& doc.body.firstChild.tagName.toLowerCase() == 'br'
+				&& ( doc.body.firstChild.getAttribute( '_moz_dirty' ) != null
+					|| doc.body.firstChild.getAttribute( 'type' ) == '_moz' ) )
+			doc.body.replaceChild( node, doc.body.firstChild ) ;
+		else
+			doc.body.appendChild( node ) ;
+	},
+
+	CheckAndRemovePaddingNode : function( doc, tagName, dontRemove )
+	{
+		var paddingNode = this.PaddingNode ;
+		if ( ! paddingNode )
+			return ;
+
+		// If the padding node is changed, remove its status as a padding node.
+		try
+		{
+			if ( paddingNode.parentNode != doc.body
+				|| paddingNode.tagName.toLowerCase() != tagName
+				|| ( paddingNode.childNodes.length > 1 )
+				|| ( paddingNode.firstChild && paddingNode.firstChild.nodeValue != '\xa0'
+					&& String(paddingNode.firstChild.tagName).toLowerCase() != 'br' ) )
+			{
+				this.PaddingNode = null ;
+				return ;
+			}
+		}
+		catch (e)
+		{
+				this.PaddingNode = null ;
+				return ;
+		}
+
+		// Now we're sure the padding node exists, and it is unchanged, and it
+		// isn't the only node in doc.body, remove it.
+		if ( !dontRemove )
+		{
+			if ( paddingNode.parentNode.childNodes.length > 1 )
+				paddingNode.parentNode.removeChild( paddingNode ) ;
+			this.PaddingNode = null ;
+		}
+	},
+
+	HasAttribute : function( element, attributeName )
+	{
+		if ( element.hasAttribute )
+			return element.hasAttribute( attributeName ) ;
+		else
+		{
+			var att = element.attributes[ attributeName ] ;
+			return ( att != undefined && att.specified ) ;
+		}
+	},
+
+	/**
+	 * Checks if an element has "specified" attributes.
+	 */
+	HasAttributes : function( element )
+	{
+		var attributes = element.attributes ;
+
+		for ( var i = 0 ; i < attributes.length ; i++ )
+		{
+			if ( FCKBrowserInfo.IsIE && attributes[i].nodeName == 'class' )
+			{
+				// IE has a strange bug. If calling removeAttribute('className'),
+				// the attributes collection will still contain the "class"
+				// attribute, which will be marked as "specified", even if the
+				// outerHTML of the element is not displaying the class attribute.
+				// Note : I was not able to reproduce it outside the editor,
+				// but I've faced it while working on the TC of #1391.
+				if ( element.className.length > 0 )
+					return true ;
+			}
+			else if ( attributes[i].specified )
+				return true ;
+		}
+
+		return false ;
+	},
+
+	/**
+	 * Remove an attribute from an element.
+	 */
+	RemoveAttribute : function( element, attributeName )
+	{
+		if ( FCKBrowserInfo.IsIE && attributeName.toLowerCase() == 'class' )
+			attributeName = 'className' ;
+
+		return element.removeAttribute( attributeName, 0 ) ;
+	},
+
+	/**
+	 * Removes an array of attributes from an element
+	 */
+	RemoveAttributes : function (element, aAttributes )
+	{
+		for ( var i = 0 ; i < aAttributes.length ; i++ )
+			this.RemoveAttribute( element, aAttributes[i] );
+	},
+
+	GetAttributeValue : function( element, att )
+	{
+		var attName = att ;
+
+		if ( typeof att == 'string' )
+			att = element.attributes[ att ] ;
+		else
+			attName = att.nodeName ;
+
+		if ( att && att.specified )
+		{
+			// IE returns "null" for the nodeValue of a "style" attribute.
+			if ( attName == 'style' )
+				return element.style.cssText ;
+			// There are two cases when the nodeValue must be used:
+			//		- for the "class" attribute (all browsers).
+			//		- for events attributes (IE only).
+			else if ( attName == 'class' || attName.indexOf('on') == 0 )
+				return att.nodeValue ;
+			else
+			{
+				// Use getAttribute to get its value  exactly as it is
+				// defined.
+				return element.getAttribute( attName, 2 ) ;
+			}
+		}
+		return null ;
+	},
+
+	/**
+	 * Checks whether one element contains the other.
+	 */
+	Contains : function( mainElement, otherElement )
+	{
+		// IE supports contains, but only for element nodes.
+		if ( mainElement.contains && otherElement.nodeType == 1 )
+			return mainElement.contains( otherElement ) ;
+
+		while ( ( otherElement = otherElement.parentNode ) )	// Only one "="
+		{
+			if ( otherElement == mainElement )
+				return true ;
+		}
+		return false ;
+	},
+
+	/**
+	 * Breaks a parent element in the position of one of its contained elements.
+	 * For example, in the following case:
+	 *		<b>This <i>is some<span /> sample</i> test text</b>
+	 * If element = <span />, we have these results:
+	 *		<b>This <i>is some</i><span /><i> sample</i> test text</b>			(If parent = <i>)
+	 *		<b>This <i>is some</i></b><span /><b><i> sample</i> test text</b>	(If parent = <b>)
+	 */
+	BreakParent : function( element, parent, reusableRange )
+	{
+		var range = reusableRange || new FCKDomRange( FCKTools.GetElementWindow( element ) ) ;
+
+		// We'll be extracting part of this element, so let's use our
+		// range to get the correct piece.
+		range.SetStart( element, 4 ) ;
+		range.SetEnd( parent, 4 ) ;
+
+		// Extract it.
+		var docFrag = range.ExtractContents() ;
+
+		// Move the element outside the broken element.
+		range.InsertNode( element.parentNode.removeChild( element ) ) ;
+
+		// Re-insert the extracted piece after the element.
+		docFrag.InsertAfterNode( element ) ;
+
+		range.Release( !!reusableRange ) ;
+	},
+
+	/**
+	 * Retrieves a uniquely identifiable tree address of a DOM tree node.
+	 * The tree address returns is an array of integers, with each integer
+	 * indicating a child index from a DOM tree node, starting from
+	 * document.documentElement.
+	 *
+	 * For example, assuming <body> is the second child from <html> (<head>
+	 * being the first), and we'd like to address the third child under the
+	 * fourth child of body, the tree address returned would be:
+	 * [1, 3, 2]
+	 *
+	 * The tree address cannot be used for finding back the DOM tree node once
+	 * the DOM tree structure has been modified.
+	 */
+	GetNodeAddress : function( node, normalized )
+	{
+		var retval = [] ;
+		while ( node && node != FCKTools.GetElementDocument( node ).documentElement )
+		{
+			var parentNode = node.parentNode ;
+			var currentIndex = -1 ;
+			for( var i = 0 ; i < parentNode.childNodes.length ; i++ )
+			{
+				var candidate = parentNode.childNodes[i] ;
+				if ( normalized === true &&
+						candidate.nodeType == 3 &&
+						candidate.previousSibling &&
+						candidate.previousSibling.nodeType == 3 )
+					continue;
+				currentIndex++ ;
+				if ( parentNode.childNodes[i] == node )
+					break ;
+			}
+			retval.unshift( currentIndex ) ;
+			node = node.parentNode ;
+		}
+		return retval ;
+	},
+
+	/**
+	 * The reverse transformation of FCKDomTools.GetNodeAddress(). This
+	 * function returns the DOM node pointed to by its index address.
+	 */
+	GetNodeFromAddress : function( doc, addr, normalized )
+	{
+		var cursor = doc.documentElement ;
+		for ( var i = 0 ; i < addr.length ; i++ )
+		{
+			var target = addr[i] ;
+			if ( ! normalized )
+			{
+				cursor = cursor.childNodes[target] ;
+				continue ;
+			}
+
+			var currentIndex = -1 ;
+			for (var j = 0 ; j < cursor.childNodes.length ; j++ )
+			{
+				var candidate = cursor.childNodes[j] ;
+				if ( normalized === true &&
+						candidate.nodeType == 3 &&
+						candidate.previousSibling &&
+						candidate.previousSibling.nodeType == 3 )
+					continue ;
+				currentIndex++ ;
+				if ( currentIndex == target )
+				{
+					cursor = candidate ;
+					break ;
+				}
+			}
+		}
+		return cursor ;
+	},
+
+	CloneElement : function( element )
+	{
+		element = element.cloneNode( false ) ;
+
+		// The "id" attribute should never be cloned to avoid duplication.
+		element.removeAttribute( 'id', false ) ;
+
+		return element ;
+	},
+
+	ClearElementJSProperty : function( element, attrName )
+	{
+		if ( FCKBrowserInfo.IsIE )
+			element.removeAttribute( attrName ) ;
+		else
+			delete element[attrName] ;
+	},
+
+	SetElementMarker : function ( markerObj, element, attrName, value)
+	{
+		var id = String( parseInt( Math.random() * 0xfffffff, 10 ) ) ;
+		element._FCKMarkerId = id ;
+		element[attrName] = value ;
+		if ( ! markerObj[id] )
+			markerObj[id] = { 'element' : element, 'markers' : {} } ;
+		markerObj[id]['markers'][attrName] = value ;
+	},
+
+	ClearElementMarkers : function( markerObj, element, clearMarkerObj )
+	{
+		var id = element._FCKMarkerId ;
+		if ( ! id )
+			return ;
+		this.ClearElementJSProperty( element, '_FCKMarkerId' ) ;
+		for ( var j in markerObj[id]['markers'] )
+			this.ClearElementJSProperty( element, j ) ;
+		if ( clearMarkerObj )
+			delete markerObj[id] ;
+	},
+
+	ClearAllMarkers : function( markerObj )
+	{
+		for ( var i in markerObj )
+			this.ClearElementMarkers( markerObj, markerObj[i]['element'], true ) ;
+	},
+
+	/**
+	 * Convert a DOM list tree into a data structure that is easier to
+	 * manipulate. This operation should be non-intrusive in the sense that it
+	 * does not change the DOM tree, with the exception that it may add some
+	 * markers to the list item nodes when markerObj is specified.
+	 */
+	ListToArray : function( listNode, markerObj, baseArray, baseIndentLevel, grandparentNode )
+	{
+		if ( ! listNode.nodeName.IEquals( ['ul', 'ol'] ) )
+			return [] ;
+
+		if ( ! baseIndentLevel )
+			baseIndentLevel = 0 ;
+		if ( ! baseArray )
+			baseArray = [] ;
+		// Iterate over all list items to get their contents and look for inner lists.
+		for ( var i = 0 ; i < listNode.childNodes.length ; i++ )
+		{
+			var listItem = listNode.childNodes[i] ;
+			if ( ! listItem.nodeName.IEquals( 'li' ) )
+				continue ;
+			var itemObj = { 'parent' : listNode, 'indent' : baseIndentLevel, 'contents' : [] } ;
+			if ( ! grandparentNode )
+			{
+				itemObj.grandparent = listNode.parentNode ;
+				if ( itemObj.grandparent && itemObj.grandparent.nodeName.IEquals( 'li' ) )
+					itemObj.grandparent = itemObj.grandparent.parentNode ;
+			}
+			else
+				itemObj.grandparent = grandparentNode ;
+			if ( markerObj )
+				this.SetElementMarker( markerObj, listItem, '_FCK_ListArray_Index', baseArray.length ) ;
+			baseArray.push( itemObj ) ;
+			for ( var j = 0 ; j < listItem.childNodes.length ; j++ )
+			{
+				var child = listItem.childNodes[j] ;
+				if ( child.nodeName.IEquals( ['ul', 'ol'] ) )
+					// Note the recursion here, it pushes inner list items with
+					// +1 indentation in the correct order.
+					this.ListToArray( child, markerObj, baseArray, baseIndentLevel + 1, itemObj.grandparent ) ;
+				else
+					itemObj.contents.push( child ) ;
+			}
+		}
+		return baseArray ;
+	},
+
+	// Convert our internal representation of a list back to a DOM forest.
+	ArrayToList : function( listArray, markerObj, baseIndex )
+	{
+		if ( baseIndex == undefined )
+			baseIndex = 0 ;
+		if ( ! listArray || listArray.length < baseIndex + 1 )
+			return null ;
+		var doc = FCKTools.GetElementDocument( listArray[baseIndex].parent ) ;
+		var retval = doc.createDocumentFragment() ;
+		var rootNode = null ;
+		var currentIndex = baseIndex ;
+		var indentLevel = Math.max( listArray[baseIndex].indent, 0 ) ;
+		var currentListItem = null ;
+		while ( true )
+		{
+			var item = listArray[currentIndex] ;
+			if ( item.indent == indentLevel )
+			{
+				if ( ! rootNode || listArray[currentIndex].parent.nodeName != rootNode.nodeName )
+				{
+					rootNode = listArray[currentIndex].parent.cloneNode( false ) ;
+					retval.appendChild( rootNode ) ;
+				}
+				currentListItem = doc.createElement( 'li' ) ;
+				rootNode.appendChild( currentListItem ) ;
+				for ( var i = 0 ; i < item.contents.length ; i++ )
+					currentListItem.appendChild( item.contents[i].cloneNode( true ) ) ;
+				currentIndex++ ;
+			}
+			else if ( item.indent == Math.max( indentLevel, 0 ) + 1 )
+			{
+				var listData = this.ArrayToList( listArray, null, currentIndex ) ;
+				currentListItem.appendChild( listData.listNode ) ;
+				currentIndex = listData.nextIndex ;
+			}
+			else if ( item.indent == -1 && baseIndex == 0 && item.grandparent )
+			{
+				var currentListItem ;
+				if ( item.grandparent.nodeName.IEquals( ['ul', 'ol'] ) )
+					currentListItem = doc.createElement( 'li' ) ;
+				else
+				{
+					if ( FCKConfig.EnterMode.IEquals( ['div', 'p'] ) && ! item.grandparent.nodeName.IEquals( 'td' ) )
+						currentListItem = doc.createElement( FCKConfig.EnterMode ) ;
+					else
+						currentListItem = doc.createDocumentFragment() ;
+				}
+				for ( var i = 0 ; i < item.contents.length ; i++ )
+					currentListItem.appendChild( item.contents[i].cloneNode( true ) ) ;
+				if ( currentListItem.nodeType == 11 )
+				{
+					if ( currentListItem.lastChild &&
+							currentListItem.lastChild.getAttribute &&
+							currentListItem.lastChild.getAttribute( 'type' ) == '_moz' )
+						currentListItem.removeChild( currentListItem.lastChild );
+					currentListItem.appendChild( doc.createElement( 'br' ) ) ;
+				}
+				if ( currentListItem.nodeName.IEquals( FCKConfig.EnterMode ) && currentListItem.firstChild )
+				{
+					this.TrimNode( currentListItem ) ;
+					if ( FCKListsLib.BlockBoundaries[currentListItem.firstChild.nodeName.toLowerCase()] )
+					{
+						var tmp = doc.createDocumentFragment() ;
+						while ( currentListItem.firstChild )
+							tmp.appendChild( currentListItem.removeChild( currentListItem.firstChild ) ) ;
+						currentListItem = tmp ;
+					}
+				}
+				if ( FCKBrowserInfo.IsGeckoLike && currentListItem.nodeName.IEquals( ['div', 'p'] ) )
+					FCKTools.AppendBogusBr( currentListItem ) ;
+				retval.appendChild( currentListItem ) ;
+				rootNode = null ;
+				currentIndex++ ;
+			}
+			else
+				return null ;
+
+			if ( listArray.length <= currentIndex || Math.max( listArray[currentIndex].indent, 0 ) < indentLevel )
+			{
+				break ;
+			}
+		}
+
+		// Clear marker attributes for the new list tree made of cloned nodes, if any.
+		if ( markerObj )
+		{
+			var currentNode = retval.firstChild ;
+			while ( currentNode )
+			{
+				if ( currentNode.nodeType == 1 )
+					this.ClearElementMarkers( markerObj, currentNode ) ;
+				currentNode = this.GetNextSourceNode( currentNode ) ;
+			}
+		}
+
+		return { 'listNode' : retval, 'nextIndex' : currentIndex } ;
+	},
+
+	/**
+	 * Get the next sibling node for a node. If "includeEmpties" is false,
+	 * only element or non empty text nodes are returned.
+	 */
+	GetNextSibling : function( node, includeEmpties )
+	{
+		node = node.nextSibling ;
+
+		while ( node && !includeEmpties && node.nodeType != 1 && ( node.nodeType != 3 || node.nodeValue.length == 0 ) )
+			node = node.nextSibling ;
+
+		return node ;
+	},
+
+	/**
+	 * Get the previous sibling node for a node. If "includeEmpties" is false,
+	 * only element or non empty text nodes are returned.
+	 */
+	GetPreviousSibling : function( node, includeEmpties )
+	{
+		node = node.previousSibling ;
+
+		while ( node && !includeEmpties && node.nodeType != 1 && ( node.nodeType != 3 || node.nodeValue.length == 0 ) )
+			node = node.previousSibling ;
+
+		return node ;
+	},
+
+	/**
+	 * Checks if an element has no "useful" content inside of it
+	 * node tree. No "useful" content means empty text node or a signle empty
+	 * inline node.
+	 * elementCheckCallback may point to a function that returns a boolean
+	 * indicating that a child element must be considered in the element check.
+	 */
+	CheckIsEmptyElement : function( element, elementCheckCallback )
+	{
+		var child = element.firstChild ;
+		var elementChild ;
+
+		while ( child )
+		{
+			if ( child.nodeType == 1 )
+			{
+				if ( elementChild || !FCKListsLib.InlineNonEmptyElements[ child.nodeName.toLowerCase() ] )
+					return false ;
+
+				if ( !elementCheckCallback || elementCheckCallback( child ) === true )
+					elementChild = child ;
+			}
+			else if ( child.nodeType == 3 && child.nodeValue.length > 0 )
+				return false ;
+
+			child = child.nextSibling ;
+		}
+
+		return elementChild ? this.CheckIsEmptyElement( elementChild, elementCheckCallback ) : true ;
+	},
+
+	SetElementStyles : function( element, styleDict )
+	{
+		var style = element.style ;
+		for ( var styleName in styleDict )
+			style[ styleName ] = styleDict[ styleName ] ;
+	},
+
+	SetOpacity : function( element, opacity )
+	{
+		if ( FCKBrowserInfo.IsIE )
+		{
+			opacity = Math.round( opacity * 100 ) ;
+			element.style.filter = ( opacity > 100 ? '' : 'progid:DXImageTransform.Microsoft.Alpha(opacity=' + opacity + ')' ) ;
+		}
+		else
+			element.style.opacity = opacity ;
+	},
+
+	GetCurrentElementStyle : function( element, propertyName )
+	{
+		if ( FCKBrowserInfo.IsIE )
+			return element.currentStyle[ propertyName ] ;
+		else
+			return element.ownerDocument.defaultView.getComputedStyle( element, '' ).getPropertyValue( propertyName ) ;
+	},
+
+	GetPositionedAncestor : function( element )
+	{
+		var currentElement = element ;
+
+		while ( currentElement != FCKTools.GetElementDocument( currentElement ).documentElement )
+		{
+			if ( this.GetCurrentElementStyle( currentElement, 'position' ) != 'static' )
+				return currentElement ;
+
+			if ( currentElement == FCKTools.GetElementDocument( currentElement ).documentElement
+					&& currentWindow != w )
+				currentElement = currentWindow.frameElement ;
+			else
+				currentElement = currentElement.parentNode ;
+		}
+
+		return null ;
+	},
+
+	/**
+	 * Current implementation for ScrollIntoView (due to #1462 and #2279). We
+	 * don't have a complete implementation here, just the things that fit our
+	 * needs.
+	 */
+	ScrollIntoView : function( element, alignTop )
+	{
+		// Get the element window.
+		var window = FCKTools.GetElementWindow( element ) ;
+		var windowHeight = FCKTools.GetViewPaneSize( window ).Height ;
+
+		// Starts the offset that will be scrolled with the negative value of
+		// the visible window height.
+		var offset = windowHeight * -1 ;
+
+		// Appends the height it we are about to align the bottoms.
+		if ( alignTop === false )
+		{
+			offset += element.offsetHeight ;
+
+			// Consider the margin in the scroll, which is ok for our current
+			// needs, but needs investigation if we will be using this function
+			// in other places.
+			offset += parseInt( this.GetCurrentElementStyle( element, 'marginBottom' ) || 0, 10 ) ;
+		}
+
+		// Appends the offsets for the entire element hierarchy.
+		offset += element.offsetTop ;
+		while ( ( element = element.offsetParent ) )
+			offset += element.offsetTop || 0 ;
+
+		// Scroll the window to the desired position, if not already visible.
+		var currentScroll = FCKTools.GetScrollPosition( window ).Y ;
+		if ( offset > 0 && offset > currentScroll )
+			window.scrollTo( 0, offset ) ;
+	},
+
+	/**
+	 * Check if the element can be edited inside the browser.
+	 */
+	CheckIsEditable : function( element )
+	{
+		// Get the element name.
+		var nodeName = element.nodeName.toLowerCase() ;
+
+		// Get the element DTD (defaults to span for unknown elements).
+		var childDTD = FCK.DTD[ nodeName ] || FCK.DTD.span ;
+
+		// In the DTD # == text node.
+		return ( childDTD['#'] && !FCKListsLib.NonEditableElements[ nodeName ] ) ;
+	}
+} ;


Property changes on: announcement/trunk/src/main/webapp/fckeditor/editor/_source/internals/fckdomtools.js
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/webapp/fckeditor/editor/_source/internals/fcklanguagemanager.js
===================================================================
--- announcement/trunk/src/main/webapp/fckeditor/editor/_source/internals/fcklanguagemanager.js	                        (rev 0)
+++ announcement/trunk/src/main/webapp/fckeditor/editor/_source/internals/fcklanguagemanager.js	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,164 @@
+/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2008 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * Defines the FCKLanguageManager object that is used for language
+ * operations.
+ */
+
+var FCKLanguageManager = FCK.Language =
+{
+	AvailableLanguages :
+	{
+		af		: 'Afrikaans',
+		ar		: 'Arabic',
+		bg		: 'Bulgarian',
+		bn		: 'Bengali/Bangla',
+		bs		: 'Bosnian',
+		ca		: 'Catalan',
+		cs		: 'Czech',
+		da		: 'Danish',
+		de		: 'German',
+		el		: 'Greek',
+		en		: 'English',
+		'en-au'	: 'English (Australia)',
+		'en-ca'	: 'English (Canadian)',
+		'en-uk'	: 'English (United Kingdom)',
+		eo		: 'Esperanto',
+		es		: 'Spanish',
+		et		: 'Estonian',
+		eu		: 'Basque',
+		fa		: 'Persian',
+		fi		: 'Finnish',
+		fo		: 'Faroese',
+		fr		: 'French',
+		'fr-ca'	: 'French (Canada)',
+		gl		: 'Galician',
+		gu		: 'Gujarati',
+		he		: 'Hebrew',
+		hi		: 'Hindi',
+		hr		: 'Croatian',
+		hu		: 'Hungarian',
+		it		: 'Italian',
+		ja		: 'Japanese',
+		km		: 'Khmer',
+		ko		: 'Korean',
+		lt		: 'Lithuanian',
+		lv		: 'Latvian',
+		mn		: 'Mongolian',
+		ms		: 'Malay',
+		nb		: 'Norwegian Bokmal',
+		nl		: 'Dutch',
+		no		: 'Norwegian',
+		pl		: 'Polish',
+		pt		: 'Portuguese (Portugal)',
+		'pt-br'	: 'Portuguese (Brazil)',
+		ro		: 'Romanian',
+		ru		: 'Russian',
+		sk		: 'Slovak',
+		sl		: 'Slovenian',
+		sr		: 'Serbian (Cyrillic)',
+		'sr-latn'	: 'Serbian (Latin)',
+		sv		: 'Swedish',
+		th		: 'Thai',
+		tr		: 'Turkish',
+		uk		: 'Ukrainian',
+		vi		: 'Vietnamese',
+		zh		: 'Chinese Traditional',
+		'zh-cn'	: 'Chinese Simplified'
+	},
+
+	GetActiveLanguage : function()
+	{
+		if ( FCKConfig.AutoDetectLanguage )
+		{
+			var sUserLang ;
+
+			// IE accepts "navigator.userLanguage" while Gecko "navigator.language".
+			if ( navigator.userLanguage )
+				sUserLang = navigator.userLanguage.toLowerCase() ;
+			else if ( navigator.language )
+				sUserLang = navigator.language.toLowerCase() ;
+			else
+			{
+				// Firefox 1.0 PR has a bug: it doens't support the "language" property.
+				return FCKConfig.DefaultLanguage ;
+			}
+
+			// Some language codes are set in 5 characters,
+			// like "pt-br" for Brazilian Portuguese.
+			if ( sUserLang.length >= 5 )
+			{
+				sUserLang = sUserLang.substr(0,5) ;
+				if ( this.AvailableLanguages[sUserLang] ) return sUserLang ;
+			}
+
+			// If the user's browser is set to, for example, "pt-br" but only the
+			// "pt" language file is available then get that file.
+			if ( sUserLang.length >= 2 )
+			{
+				sUserLang = sUserLang.substr(0,2) ;
+				if ( this.AvailableLanguages[sUserLang] ) return sUserLang ;
+			}
+		}
+
+		return this.DefaultLanguage ;
+	},
+
+	TranslateElements : function( targetDocument, tag, propertyToSet, encode )
+	{
+		var e = targetDocument.getElementsByTagName(tag) ;
+		var sKey, s ;
+		for ( var i = 0 ; i < e.length ; i++ )
+		{
+			// The extra () is to avoid a warning with strict error checking. This is ok.
+			if ( (sKey = e[i].getAttribute( 'fckLang' )) )
+			{
+				// The extra () is to avoid a warning with strict error checking. This is ok.
+				if ( (s = FCKLang[ sKey ]) )
+				{
+					if ( encode )
+						s = FCKTools.HTMLEncode( s ) ;
+					e[i][ propertyToSet ] = s ;
+				}
+			}
+		}
+	},
+
+	TranslatePage : function( targetDocument )
+	{
+		this.TranslateElements( targetDocument, 'INPUT', 'value' ) ;
+		this.TranslateElements( targetDocument, 'SPAN', 'innerHTML' ) ;
+		this.TranslateElements( targetDocument, 'LABEL', 'innerHTML' ) ;
+		this.TranslateElements( targetDocument, 'OPTION', 'innerHTML', true ) ;
+		this.TranslateElements( targetDocument, 'LEGEND', 'innerHTML' ) ;
+	},
+
+	Initialize : function()
+	{
+		if ( this.AvailableLanguages[ FCKConfig.DefaultLanguage ] )
+			this.DefaultLanguage = FCKConfig.DefaultLanguage ;
+		else
+			this.DefaultLanguage = 'en' ;
+
+		this.ActiveLanguage = new Object() ;
+		this.ActiveLanguage.Code = this.GetActiveLanguage() ;
+		this.ActiveLanguage.Name = this.AvailableLanguages[ this.ActiveLanguage.Code ] ;
+	}
+} ;


Property changes on: announcement/trunk/src/main/webapp/fckeditor/editor/_source/internals/fcklanguagemanager.js
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/webapp/fckeditor/editor/_source/internals/fcklisthandler.js
===================================================================
--- announcement/trunk/src/main/webapp/fckeditor/editor/_source/internals/fcklisthandler.js	                        (rev 0)
+++ announcement/trunk/src/main/webapp/fckeditor/editor/_source/internals/fcklisthandler.js	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,152 @@
+/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2008 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * Tool object to manage HTML lists items (UL, OL and LI).
+ */
+
+var FCKListHandler =
+{
+	OutdentListItem : function( listItem )
+	{
+		var eParent = listItem.parentNode ;
+
+		// It may happen that a LI is not in a UL or OL (Orphan).
+		if ( eParent.tagName.toUpperCase().Equals( 'UL','OL' ) )
+		{
+			var oDocument = FCKTools.GetElementDocument( listItem ) ;
+			var oDogFrag = new FCKDocumentFragment( oDocument ) ;
+
+			// All children and successive siblings will be moved to a a DocFrag.
+			var eNextSiblings = oDogFrag.RootNode ;
+			var eHasLiSibling = false ;
+
+			// If we have nested lists inside it, let's move it to the list of siblings.
+			var eChildList = FCKDomTools.GetFirstChild( listItem, ['UL','OL'] ) ;
+			if ( eChildList )
+			{
+				eHasLiSibling = true ;
+
+				var eChild ;
+				// The extra () is to avoid a warning with strict error checking. This is ok.
+				while ( (eChild = eChildList.firstChild) )
+					eNextSiblings.appendChild( eChildList.removeChild( eChild ) ) ;
+
+				FCKDomTools.RemoveNode( eChildList ) ;
+			}
+
+			// Move all successive siblings.
+			var eSibling ;
+			var eHasSuccessiveLiSibling = false ;
+			// The extra () is to avoid a warning with strict error checking. This is ok.
+			while ( (eSibling = listItem.nextSibling) )
+			{
+				if ( !eHasLiSibling && eSibling.nodeType == 1 && eSibling.nodeName.toUpperCase() == 'LI' )
+					eHasSuccessiveLiSibling = eHasLiSibling = true ;
+
+				eNextSiblings.appendChild( eSibling.parentNode.removeChild( eSibling ) ) ;
+
+				// If a sibling is a incorrectly nested UL or OL, consider only its children.
+				if ( !eHasSuccessiveLiSibling && eSibling.nodeType == 1 && eSibling.nodeName.toUpperCase().Equals( 'UL','OL' ) )
+					FCKDomTools.RemoveNode( eSibling, true ) ;
+			}
+
+			// If we are in a list chain.
+			var sParentParentTag = eParent.parentNode.tagName.toUpperCase() ;
+			var bWellNested = ( sParentParentTag == 'LI' ) ;
+			if ( bWellNested || sParentParentTag.Equals( 'UL','OL' ) )
+			{
+				if ( eHasLiSibling )
+				{
+					var eChildList = eParent.cloneNode( false ) ;
+					oDogFrag.AppendTo( eChildList ) ;
+					listItem.appendChild( eChildList ) ;
+				}
+				else if ( bWellNested )
+					oDogFrag.InsertAfterNode( eParent.parentNode ) ;
+				else
+					oDogFrag.InsertAfterNode( eParent ) ;
+
+				// Move the LI after its parent.parentNode (the upper LI in the hierarchy).
+				if ( bWellNested )
+					FCKDomTools.InsertAfterNode( eParent.parentNode, eParent.removeChild( listItem ) ) ;
+				else
+					FCKDomTools.InsertAfterNode( eParent, eParent.removeChild( listItem ) ) ;
+			}
+			else
+			{
+				if ( eHasLiSibling )
+				{
+					var eNextList = eParent.cloneNode( false ) ;
+					oDogFrag.AppendTo( eNextList ) ;
+					FCKDomTools.InsertAfterNode( eParent, eNextList ) ;
+				}
+
+				var eBlock = oDocument.createElement( FCKConfig.EnterMode == 'p' ? 'p' : 'div' ) ;
+				FCKDomTools.MoveChildren( eParent.removeChild( listItem ), eBlock ) ;
+				FCKDomTools.InsertAfterNode( eParent, eBlock ) ;
+
+				if ( FCKConfig.EnterMode == 'br' )
+				{
+					// We need the bogus to make it work properly. In Gecko, we
+					// need it before the new block, on IE, after it.
+					if ( FCKBrowserInfo.IsGecko )
+						eBlock.parentNode.insertBefore( FCKTools.CreateBogusBR( oDocument ), eBlock ) ;
+					else
+						FCKDomTools.InsertAfterNode( eBlock, FCKTools.CreateBogusBR( oDocument ) ) ;
+
+					FCKDomTools.RemoveNode( eBlock, true ) ;
+				}
+			}
+
+			if ( this.CheckEmptyList( eParent ) )
+				FCKDomTools.RemoveNode( eParent, true ) ;
+		}
+	},
+
+	CheckEmptyList : function( listElement )
+	{
+		return ( FCKDomTools.GetFirstChild( listElement, 'LI' ) == null ) ;
+	},
+
+	// Check if the list has contents (excluding nested lists).
+	CheckListHasContents : function( listElement )
+	{
+		var eChildNode = listElement.firstChild ;
+
+		while ( eChildNode )
+		{
+			switch ( eChildNode.nodeType )
+			{
+				case 1 :
+					if ( !eChildNode.nodeName.IEquals( 'UL','LI' ) )
+						return true ;
+					break ;
+
+				case 3 :
+					if ( eChildNode.nodeValue.Trim().length > 0 )
+						return true ;
+			}
+
+			eChildNode = eChildNode.nextSibling ;
+		}
+
+		return false ;
+	}
+} ;


Property changes on: announcement/trunk/src/main/webapp/fckeditor/editor/_source/internals/fcklisthandler.js
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/webapp/fckeditor/editor/_source/internals/fcklistslib.js
===================================================================
--- announcement/trunk/src/main/webapp/fckeditor/editor/_source/internals/fcklistslib.js	                        (rev 0)
+++ announcement/trunk/src/main/webapp/fckeditor/editor/_source/internals/fcklistslib.js	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,63 @@
+/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2008 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * Library of keys collections.
+ *
+ * Test have shown that check for the existence of a key in an object is the
+ * most efficient list entry check (10x faster that regex). Example:
+ *		if ( FCKListsLib.<ListName>[key] != null )
+ */
+
+var FCKListsLib =
+{
+	// We are not handling <ins> and <del> as block elements, for now.
+	BlockElements : { address:1,blockquote:1,center:1,div:1,dl:1,fieldset:1,form:1,h1:1,h2:1,h3:1,h4:1,h5:1,h6:1,hr:1,marquee:1,noscript:1,ol:1,p:1,pre:1,script:1,table:1,ul:1 },
+
+	// Block elements that may be filled with &nbsp; if empty.
+	NonEmptyBlockElements : { p:1,div:1,form:1,h1:1,h2:1,h3:1,h4:1,h5:1,h6:1,address:1,pre:1,ol:1,ul:1,li:1,td:1,th:1 },
+
+	// Inline elements which MUST have child nodes.
+	InlineChildReqElements : { abbr:1,acronym:1,b:1,bdo:1,big:1,cite:1,code:1,del:1,dfn:1,em:1,font:1,i:1,ins:1,label:1,kbd:1,q:1,samp:1,small:1,span:1,strike:1,strong:1,sub:1,sup:1,tt:1,u:1,'var':1 },
+
+	// Inline elements which are not marked as empty "Empty" in the XHTML DTD.
+	InlineNonEmptyElements : { a:1,abbr:1,acronym:1,b:1,bdo:1,big:1,cite:1,code:1,del:1,dfn:1,em:1,font:1,i:1,ins:1,label:1,kbd:1,q:1,samp:1,small:1,span:1,strike:1,strong:1,sub:1,sup:1,tt:1,u:1,'var':1 },
+
+	// Elements marked as empty "Empty" in the XHTML DTD.
+	EmptyElements : { base:1,col:1,meta:1,link:1,hr:1,br:1,param:1,img:1,area:1,input:1 },
+
+	// Elements that may be considered the "Block boundary" in an element path.
+	PathBlockElements : { address:1,blockquote:1,dl:1,h1:1,h2:1,h3:1,h4:1,h5:1,h6:1,p:1,pre:1,li:1,dt:1,de:1 },
+
+	// Elements that may be considered the "Block limit" in an element path.
+	PathBlockLimitElements : { body:1,div:1,td:1,th:1,caption:1,form:1 },
+
+	// Block elements for the Styles System.
+	StyleBlockElements : { address:1,div:1,h1:1,h2:1,h3:1,h4:1,h5:1,h6:1,p:1,pre:1 },
+
+	// Object elements for the Styles System.
+	StyleObjectElements : { img:1,hr:1,li:1,table:1,tr:1,td:1,embed:1,object:1,ol:1,ul:1 },
+
+	// Elements that accept text nodes, but are not possible to edit in the browser.
+	NonEditableElements : { button:1,option:1,script:1,iframe:1,textarea:1,object:1,embed:1,map:1,applet:1 },
+
+	// Elements used to separate block contents.
+	BlockBoundaries : { p:1,div:1,h1:1,h2:1,h3:1,h4:1,h5:1,h6:1,hr:1,address:1,pre:1,ol:1,ul:1,li:1,dt:1,de:1,table:1,thead:1,tbody:1,tfoot:1,tr:1,th:1,td:1,caption:1,col:1,colgroup:1,blockquote:1,body:1 },
+	ListBoundaries  : { p:1,div:1,h1:1,h2:1,h3:1,h4:1,h5:1,h6:1,hr:1,address:1,pre:1,ol:1,ul:1,li:1,dt:1,de:1,table:1,thead:1,tbody:1,tfoot:1,tr:1,th:1,td:1,caption:1,col:1,colgroup:1,blockquote:1,body:1,br:1 }
+} ;


Property changes on: announcement/trunk/src/main/webapp/fckeditor/editor/_source/internals/fcklistslib.js
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/webapp/fckeditor/editor/_source/internals/fckplugins.js
===================================================================
--- announcement/trunk/src/main/webapp/fckeditor/editor/_source/internals/fckplugins.js	                        (rev 0)
+++ announcement/trunk/src/main/webapp/fckeditor/editor/_source/internals/fckplugins.js	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,46 @@
+/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2008 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * Defines the FCKPlugins object that is responsible for loading the Plugins.
+ */
+
+var FCKPlugins = FCK.Plugins = new Object() ;
+FCKPlugins.ItemsCount = 0 ;
+FCKPlugins.Items = new Object() ;
+
+FCKPlugins.Load = function()
+{
+	var oItems = FCKPlugins.Items ;
+
+	// build the plugins collection.
+	for ( var i = 0 ; i < FCKConfig.Plugins.Items.length ; i++ )
+	{
+		var oItem = FCKConfig.Plugins.Items[i] ;
+		var oPlugin = oItems[ oItem[0] ] = new FCKPlugin( oItem[0], oItem[1], oItem[2] ) ;
+		FCKPlugins.ItemsCount++ ;
+	}
+
+	// Load all items in the plugins collection.
+	for ( var s in oItems )
+		oItems[s].Load() ;
+
+	// This is a self destroyable function (must be called once).
+	FCKPlugins.Load = null ;
+}


Property changes on: announcement/trunk/src/main/webapp/fckeditor/editor/_source/internals/fckplugins.js
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/webapp/fckeditor/editor/_source/internals/fckregexlib.js
===================================================================
--- announcement/trunk/src/main/webapp/fckeditor/editor/_source/internals/fckregexlib.js	                        (rev 0)
+++ announcement/trunk/src/main/webapp/fckeditor/editor/_source/internals/fckregexlib.js	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,100 @@
+/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2008 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * These are some Regular Expressions used by the editor.
+ */
+
+var FCKRegexLib =
+{
+// This is the Regular expression used by the SetData method for the "&apos;" entity.
+AposEntity		: /&apos;/gi ,
+
+// Used by the Styles combo to identify styles that can't be applied to text.
+ObjectElements	: /^(?:IMG|TABLE|TR|TD|TH|INPUT|SELECT|TEXTAREA|HR|OBJECT|A|UL|OL|LI)$/i ,
+
+// List all named commands (commands that can be interpreted by the browser "execCommand" method.
+NamedCommands	: /^(?:Cut|Copy|Paste|Print|SelectAll|RemoveFormat|Unlink|Undo|Redo|Bold|Italic|Underline|StrikeThrough|Subscript|Superscript|JustifyLeft|JustifyCenter|JustifyRight|JustifyFull|Outdent|Indent|InsertOrderedList|InsertUnorderedList|InsertHorizontalRule)$/i ,
+
+BeforeBody	: /(^[\s\S]*\<body[^\>]*\>)/i,
+AfterBody	: /(\<\/body\>[\s\S]*$)/i,
+
+// Temporary text used to solve some browser specific limitations.
+ToReplace		: /___fcktoreplace:([\w]+)/ig ,
+
+// Get the META http-equiv attribute from the tag.
+MetaHttpEquiv	: /http-equiv\s*=\s*["']?([^"' ]+)/i ,
+
+HasBaseTag		: /<base /i ,
+HasBodyTag		: /<body[\s|>]/i ,
+
+HtmlOpener		: /<html\s?[^>]*>/i ,
+HeadOpener		: /<head\s?[^>]*>/i ,
+HeadCloser		: /<\/head\s*>/i ,
+
+// Temporary classes (Tables without border, Anchors with content) used in IE
+FCK_Class		: /\s*FCK__[^ ]*(?=\s+|$)/ ,
+
+// Validate element names (it must be in lowercase).
+ElementName		: /(^[a-z_:][\w.\-:]*\w$)|(^[a-z_]$)/ ,
+
+// Used in conjunction with the FCKConfig.ForceSimpleAmpersand configuration option.
+ForceSimpleAmpersand : /___FCKAmp___/g ,
+
+// Get the closing parts of the tags with no closing tags, like <br/>... gets the "/>" part.
+SpaceNoClose	: /\/>/g ,
+
+// Empty elements may be <p></p> or even a simple opening <p> (see #211).
+EmptyParagraph	: /^<(p|div|address|h\d|center)(?=[ >])[^>]*>\s*(<\/\1>)?$/ ,
+
+EmptyOutParagraph : /^<(p|div|address|h\d|center)(?=[ >])[^>]*>(?:\s*|&nbsp;)(<\/\1>)?$/ ,
+
+TagBody			: /></ ,
+
+GeckoEntitiesMarker : /#\?-\:/g ,
+
+// We look for the "src" and href attribute with the " or ' or without one of
+// them. We have to do all in one, otherwise we will have problems with URLs
+// like "thumbnail.php?src=someimage.jpg" (SF-BUG 1554141).
+ProtectUrlsImg	: /<img(?=\s).*?\ssrc=((?:(?:\s*)("|').*?\2)|(?:[^"'][^ >]+))/gi ,
+ProtectUrlsA	: /<a(?=\s).*?\shref=((?:(?:\s*)("|').*?\2)|(?:[^"'][^ >]+))/gi ,
+ProtectUrlsArea	: /<area(?=\s).*?\shref=((?:(?:\s*)("|').*?\2)|(?:[^"'][^ >]+))/gi ,
+
+Html4DocType	: /HTML 4\.0 Transitional/i ,
+DocTypeTag		: /<!DOCTYPE[^>]*>/i ,
+HtmlDocType		: /DTD HTML/ ,
+
+// These regex are used to save the original event attributes in the HTML.
+TagsWithEvent	: /<[^\>]+ on\w+[\s\r\n]*=[\s\r\n]*?('|")[\s\S]+?\>/g ,
+EventAttributes	: /\s(on\w+)[\s\r\n]*=[\s\r\n]*?('|")([\s\S]*?)\2/g,
+ProtectedEvents : /\s\w+_fckprotectedatt="([^"]+)"/g,
+
+StyleProperties : /\S+\s*:/g,
+
+// [a-zA-Z0-9:]+ seams to be more efficient than [\w:]+
+InvalidSelfCloseTags : /(<(?!base|meta|link|hr|br|param|img|area|input)([a-zA-Z0-9:]+)[^>]*)\/>/gi,
+
+// All variables defined in a style attribute or style definition. The variable
+// name is returned with $2.
+StyleVariableAttName : /#\(\s*("|')(.+?)\1[^\)]*\s*\)/g,
+
+RegExp : /^\/(.*)\/([gim]*)$/,
+
+HtmlTag : /<[^\s<>](?:"[^"]*"|'[^']*'|[^<])*>/
+} ;


Property changes on: announcement/trunk/src/main/webapp/fckeditor/editor/_source/internals/fckregexlib.js
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/webapp/fckeditor/editor/_source/internals/fckselection.js
===================================================================
--- announcement/trunk/src/main/webapp/fckeditor/editor/_source/internals/fckselection.js	                        (rev 0)
+++ announcement/trunk/src/main/webapp/fckeditor/editor/_source/internals/fckselection.js	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,42 @@
+/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2008 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * Active selection functions.
+ */
+
+var FCKSelection = FCK.Selection =
+{
+	GetParentBlock : function()
+	{
+		var retval = this.GetParentElement() ;
+		while ( retval )
+		{
+			if ( FCKListsLib.BlockBoundaries[retval.nodeName.toLowerCase()] )
+				break ;
+			retval = retval.parentNode ;
+		}
+		return retval ;
+	},
+
+	ApplyStyle : function( styleDefinition )
+	{
+		FCKStyles.ApplyStyle( new FCKStyle( styleDefinition ) ) ;
+	}
+} ;


Property changes on: announcement/trunk/src/main/webapp/fckeditor/editor/_source/internals/fckselection.js
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/webapp/fckeditor/editor/_source/internals/fckselection_gecko.js
===================================================================
--- announcement/trunk/src/main/webapp/fckeditor/editor/_source/internals/fckselection_gecko.js	                        (rev 0)
+++ announcement/trunk/src/main/webapp/fckeditor/editor/_source/internals/fckselection_gecko.js	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,220 @@
+/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2008 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * Active selection functions. (Gecko specific implementation)
+ */
+
+// Get the selection type (like document.select.type in IE).
+FCKSelection.GetType = function()
+{
+	// By default set the type to "Text".
+	var type = 'Text' ;
+
+	// Check if the actual selection is a Control (IMG, TABLE, HR, etc...).
+
+	var sel ;
+	try { sel = this.GetSelection() ; } catch (e) {}
+
+	if ( sel && sel.rangeCount == 1 )
+	{
+		var range = sel.getRangeAt(0) ;
+		if ( range.startContainer == range.endContainer
+			&& ( range.endOffset - range.startOffset ) == 1
+			&& range.startContainer.nodeType == 1
+			&& FCKListsLib.StyleObjectElements[ range.startContainer.childNodes[ range.startOffset ].nodeName.toLowerCase() ] )
+		{
+			type = 'Control' ;
+		}
+	}
+
+	return type ;
+}
+
+// Retrieves the selected element (if any), just in the case that a single
+// element (object like and image or a table) is selected.
+FCKSelection.GetSelectedElement = function()
+{
+	var selection = !!FCK.EditorWindow && this.GetSelection() ;
+	if ( !selection || selection.rangeCount < 1 )
+		return null ;
+
+	var range = selection.getRangeAt( 0 ) ;
+	if ( range.startContainer != range.endContainer || range.startContainer.nodeType != 1 || range.startOffset != range.endOffset - 1 )
+		return null ;
+
+	var node = range.startContainer.childNodes[ range.startOffset ] ;
+	if ( node.nodeType != 1 )
+		return null ;
+
+	return node ;
+}
+
+FCKSelection.GetParentElement = function()
+{
+	if ( this.GetType() == 'Control' )
+		return FCKSelection.GetSelectedElement().parentNode ;
+	else
+	{
+		var oSel = this.GetSelection() ;
+		if ( oSel )
+		{
+			// make the common case fast - for collapsed/nearly collapsed selections just return anchor.parent.
+			if ( oSel.anchorNode && oSel.anchorNode == oSel.focusNode )
+				return oSel.anchorNode.parentNode ;
+
+			// looks like we're having a large selection here. To make the behavior same as IE's TextRange.parentElement(),
+			// we need to find the nearest ancestor node which encapsulates both the beginning and the end of the selection.
+			// TODO: A simpler logic can be found.
+			var anchorPath = new FCKElementPath( oSel.anchorNode ) ;
+			var focusPath = new FCKElementPath( oSel.focusNode ) ;
+			var deepPath = null ;
+			var shallowPath = null ;
+			if ( anchorPath.Elements.length > focusPath.Elements.length )
+			{
+				deepPath = anchorPath.Elements ;
+				shallowPath = focusPath.Elements ;
+			}
+			else
+			{
+				deepPath = focusPath.Elements ;
+				shallowPath = anchorPath.Elements ;
+			}
+
+			var deepPathBase = deepPath.length - shallowPath.length ;
+			for( var i = 0 ; i < shallowPath.length ; i++)
+			{
+				if ( deepPath[deepPathBase + i] == shallowPath[i])
+					return shallowPath[i];
+			}
+			return null ;
+		}
+	}
+	return null ;
+}
+
+FCKSelection.GetBoundaryParentElement = function( startBoundary )
+{
+	if ( ! FCK.EditorWindow )
+		return null ;
+	if ( this.GetType() == 'Control' )
+		return FCKSelection.GetSelectedElement().parentNode ;
+	else
+	{
+		var oSel = this.GetSelection() ;
+		if ( oSel && oSel.rangeCount > 0 )
+		{
+			var range = oSel.getRangeAt( startBoundary ? 0 : ( oSel.rangeCount - 1 ) ) ;
+
+			var element = startBoundary ? range.startContainer : range.endContainer ;
+
+			return ( element.nodeType == 1 ? element : element.parentNode ) ;
+		}
+	}
+	return null ;
+}
+
+FCKSelection.SelectNode = function( element )
+{
+	var oRange = FCK.EditorDocument.createRange() ;
+	oRange.selectNode( element ) ;
+
+	var oSel = this.GetSelection() ;
+	oSel.removeAllRanges() ;
+	oSel.addRange( oRange ) ;
+}
+
+FCKSelection.Collapse = function( toStart )
+{
+	var oSel = this.GetSelection() ;
+
+	if ( toStart == null || toStart === true )
+		oSel.collapseToStart() ;
+	else
+		oSel.collapseToEnd() ;
+}
+
+// The "nodeTagName" parameter must be Upper Case.
+FCKSelection.HasAncestorNode = function( nodeTagName )
+{
+	var oContainer = this.GetSelectedElement() ;
+	if ( ! oContainer && FCK.EditorWindow )
+	{
+		try		{ oContainer = this.GetSelection().getRangeAt(0).startContainer ; }
+		catch(e){}
+	}
+
+	while ( oContainer )
+	{
+		if ( oContainer.nodeType == 1 && oContainer.nodeName.IEquals( nodeTagName ) ) return true ;
+		oContainer = oContainer.parentNode ;
+	}
+
+	return false ;
+}
+
+// The "nodeTagName" parameter must be Upper Case.
+FCKSelection.MoveToAncestorNode = function( nodeTagName )
+{
+	var oNode ;
+
+	var oContainer = this.GetSelectedElement() ;
+	if ( ! oContainer )
+		oContainer = this.GetSelection().getRangeAt(0).startContainer ;
+
+	while ( oContainer )
+	{
+		if ( oContainer.nodeName.IEquals( nodeTagName ) )
+			return oContainer ;
+
+		oContainer = oContainer.parentNode ;
+	}
+	return null ;
+}
+
+FCKSelection.Delete = function()
+{
+	// Gets the actual selection.
+	var oSel = this.GetSelection() ;
+
+	// Deletes the actual selection contents.
+	for ( var i = 0 ; i < oSel.rangeCount ; i++ )
+	{
+		oSel.getRangeAt(i).deleteContents() ;
+	}
+
+	return oSel ;
+}
+
+/**
+ * Returns the native selection object.
+ */
+FCKSelection.GetSelection = function()
+{
+	return FCK.EditorWindow.getSelection() ;
+}
+
+// The following are IE only features (we don't need then in other browsers
+// currently).
+FCKSelection.Save = function()
+{}
+FCKSelection.Restore = function()
+{}
+FCKSelection.Release = function()
+{}


Property changes on: announcement/trunk/src/main/webapp/fckeditor/editor/_source/internals/fckselection_gecko.js
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/webapp/fckeditor/editor/_source/internals/fckselection_ie.js
===================================================================
--- announcement/trunk/src/main/webapp/fckeditor/editor/_source/internals/fckselection_ie.js	                        (rev 0)
+++ announcement/trunk/src/main/webapp/fckeditor/editor/_source/internals/fckselection_ie.js	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,278 @@
+/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2008 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * Active selection functions. (IE specific implementation)
+ */
+
+// Get the selection type.
+FCKSelection.GetType = function()
+{
+	// It is possible that we can still get a text range object even when type=='None' is returned by IE.
+	// So we'd better check the object returned by createRange() rather than by looking at the type.
+	try
+	{
+		var ieType = FCKSelection.GetSelection().type ;
+		if ( ieType == 'Control' || ieType == 'Text' )
+			return ieType ;
+
+		if ( this.GetSelection().createRange().parentElement )
+			return 'Text' ;
+	}
+	catch(e)
+	{
+		// Nothing to do, it will return None properly.
+	}
+
+	return 'None' ;
+} ;
+
+// Retrieves the selected element (if any), just in the case that a single
+// element (object like and image or a table) is selected.
+FCKSelection.GetSelectedElement = function()
+{
+	if ( this.GetType() == 'Control' )
+	{
+		var oRange = this.GetSelection().createRange() ;
+
+		if ( oRange && oRange.item )
+			return this.GetSelection().createRange().item(0) ;
+	}
+	return null ;
+} ;
+
+FCKSelection.GetParentElement = function()
+{
+	switch ( this.GetType() )
+	{
+		case 'Control' :
+			var el = FCKSelection.GetSelectedElement() ;
+			return el ? el.parentElement : null ;
+
+		case 'None' :
+			return null ;
+
+		default :
+			return this.GetSelection().createRange().parentElement() ;
+	}
+} ;
+
+FCKSelection.GetBoundaryParentElement = function( startBoundary )
+{
+	switch ( this.GetType() )
+	{
+		case 'Control' :
+			var el = FCKSelection.GetSelectedElement() ;
+			return el ? el.parentElement : null ;
+
+		case 'None' :
+			return null ;
+
+		default :
+			var doc = FCK.EditorDocument ;
+
+			var range = doc.selection.createRange() ;
+			range.collapse( startBoundary !== false ) ;
+
+			var el = range.parentElement() ;
+
+			// It may happen that range is comming from outside "doc", so we
+			// must check it (#1204).
+			return FCKTools.GetElementDocument( el ) == doc ? el : null ;
+	}
+} ;
+
+FCKSelection.SelectNode = function( node )
+{
+	FCK.Focus() ;
+	this.GetSelection().empty() ;
+	var oRange ;
+	try
+	{
+		// Try to select the node as a control.
+		oRange = FCK.EditorDocument.body.createControlRange() ;
+		oRange.addElement( node ) ;
+	}
+	catch(e)
+	{
+		// If failed, select it as a text range.
+		oRange = FCK.EditorDocument.body.createTextRange() ;
+		oRange.moveToElementText( node ) ;
+	}
+
+	oRange.select() ;
+} ;
+
+FCKSelection.Collapse = function( toStart )
+{
+	FCK.Focus() ;
+	if ( this.GetType() == 'Text' )
+	{
+		var oRange = this.GetSelection().createRange() ;
+		oRange.collapse( toStart == null || toStart === true ) ;
+		oRange.select() ;
+	}
+} ;
+
+// The "nodeTagName" parameter must be Upper Case.
+FCKSelection.HasAncestorNode = function( nodeTagName )
+{
+	var oContainer ;
+
+	if ( this.GetSelection().type == "Control" )
+	{
+		oContainer = this.GetSelectedElement() ;
+	}
+	else
+	{
+		var oRange  = this.GetSelection().createRange() ;
+		oContainer = oRange.parentElement() ;
+	}
+
+	while ( oContainer )
+	{
+		if ( oContainer.nodeName.IEquals( nodeTagName ) ) return true ;
+		oContainer = oContainer.parentNode ;
+	}
+
+	return false ;
+} ;
+
+// The "nodeTagName" parameter must be UPPER CASE.
+FCKSelection.MoveToAncestorNode = function( nodeTagName )
+{
+	var oNode, oRange ;
+
+	if ( ! FCK.EditorDocument )
+		return null ;
+
+	if ( this.GetSelection().type == "Control" )
+	{
+		oRange = this.GetSelection().createRange() ;
+		for ( i = 0 ; i < oRange.length ; i++ )
+		{
+			if (oRange(i).parentNode)
+			{
+				oNode = oRange(i).parentNode ;
+				break ;
+			}
+		}
+	}
+	else
+	{
+		oRange  = this.GetSelection().createRange() ;
+		oNode = oRange.parentElement() ;
+	}
+
+	while ( oNode && oNode.nodeName != nodeTagName )
+		oNode = oNode.parentNode ;
+
+	return oNode ;
+} ;
+
+FCKSelection.Delete = function()
+{
+	// Gets the actual selection.
+	var oSel = this.GetSelection() ;
+
+	// Deletes the actual selection contents.
+	if ( oSel.type.toLowerCase() != "none" )
+	{
+		oSel.clear() ;
+	}
+
+	return oSel ;
+} ;
+
+/**
+ * Returns the native selection object.
+ */
+FCKSelection.GetSelection = function()
+{
+	this.Restore() ;
+	return FCK.EditorDocument.selection ;
+}
+
+FCKSelection.Save = function()
+{
+	// Ensures the editor has the selection focus. (#1801)
+	FCK.Focus() ;
+
+	var editorDocument = FCK.EditorDocument ;
+
+	if ( !editorDocument )
+		return ;
+
+	var selection = editorDocument.selection ;
+	var range ;
+
+	if ( selection )
+	{
+		range = selection.createRange() ;
+
+		// Ensure that the range comes from the editor document.
+		if ( range )
+		{
+			if ( range.parentElement && FCKTools.GetElementDocument( range.parentElement() ) != editorDocument )
+				range = null ;
+			else if ( range.item && FCKTools.GetElementDocument( range.item(0) )!= editorDocument )
+				range = null ;
+		}
+	}
+
+	this.SelectionData = range ;
+}
+
+FCKSelection._GetSelectionDocument = function( selection )
+{
+	var range = selection.createRange() ;
+	if ( !range )
+		return null;
+	else if ( range.item )
+		return FCKTools.GetElementDocument( range.item( 0 ) ) ;
+	else
+		return FCKTools.GetElementDocument( range.parentElement() ) ;
+}
+
+FCKSelection.Restore = function()
+{
+	if ( this.SelectionData )
+	{
+		FCK.IsSelectionChangeLocked = true ;
+
+		try
+		{
+			// Don't repeat the restore process if the editor document is already selected.
+			if ( this._GetSelectionDocument( FCK.EditorDocument.selection ) == FCK.EditorDocument )
+			{
+				FCK.IsSelectionChangeLocked = false ;
+				return ;
+			}
+			this.SelectionData.select() ;
+		}
+		catch ( e ) {}
+
+		FCK.IsSelectionChangeLocked = false ;
+	}
+}
+
+FCKSelection.Release = function()
+{
+	delete this.SelectionData ;
+}


Property changes on: announcement/trunk/src/main/webapp/fckeditor/editor/_source/internals/fckselection_ie.js
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/webapp/fckeditor/editor/_source/internals/fckstyles.js
===================================================================
--- announcement/trunk/src/main/webapp/fckeditor/editor/_source/internals/fckstyles.js	                        (rev 0)
+++ announcement/trunk/src/main/webapp/fckeditor/editor/_source/internals/fckstyles.js	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,381 @@
+/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2008 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * Handles styles in a give document.
+ */
+
+var FCKStyles = FCK.Styles =
+{
+	_Callbacks : {},
+	_ObjectStyles : {},
+
+	ApplyStyle : function( style )
+	{
+		if ( typeof style == 'string' )
+			style = this.GetStyles()[ style ] ;
+
+		if ( style )
+		{
+			if ( style.GetType() == FCK_STYLE_OBJECT )
+				style.ApplyToObject( FCKSelection.GetSelectedElement() ) ;
+			else
+				style.ApplyToSelection( FCK.EditorWindow ) ;
+
+			FCK.Events.FireEvent( 'OnSelectionChange' ) ;
+		}
+	},
+
+	RemoveStyle : function( style )
+	{
+		if ( typeof style == 'string' )
+			style = this.GetStyles()[ style ] ;
+
+		if ( style )
+		{
+			style.RemoveFromSelection( FCK.EditorWindow ) ;
+			FCK.Events.FireEvent( 'OnSelectionChange' ) ;
+		}
+	},
+
+	/**
+	 * Defines a callback function to be called when the current state of a
+	 * specific style changes.
+	 */
+	AttachStyleStateChange : function( styleName, callback, callbackOwner )
+	{
+		var callbacks = this._Callbacks[ styleName ] ;
+
+		if ( !callbacks )
+			callbacks = this._Callbacks[ styleName ] = [] ;
+
+		callbacks.push( [ callback, callbackOwner ] ) ;
+	},
+
+	CheckSelectionChanges : function()
+	{
+		var startElement = FCKSelection.GetBoundaryParentElement( true ) ;
+
+		if ( !startElement )
+			return ;
+
+		// Walks the start node parents path, checking all styles that are being listened.
+		var path = new FCKElementPath( startElement ) ;
+		var styles = this.GetStyles() ;
+
+		for ( var styleName in styles )
+		{
+			var callbacks = this._Callbacks[ styleName ] ;
+
+			if ( callbacks )
+			{
+				var style = styles[ styleName ] ;
+				var state = style.CheckActive( path ) ;
+
+				if ( state != ( style._LastState || null ) )
+				{
+					style._LastState = state ;
+
+					for ( var i = 0 ; i < callbacks.length ; i++ )
+					{
+						var callback = callbacks[i][0] ;
+						var callbackOwner = callbacks[i][1] ;
+
+						callback.call( callbackOwner || window, styleName, state ) ;
+					}
+				}
+			}
+		}
+	},
+
+	CheckStyleInSelection : function( styleName )
+	{
+		return false ;
+	},
+
+	_GetRemoveFormatTagsRegex : function ()
+	{
+		var regex = new RegExp( '^(?:' + FCKConfig.RemoveFormatTags.replace( /,/g,'|' ) + ')$', 'i' ) ;
+
+		return (this._GetRemoveFormatTagsRegex = function()
+		{
+			return regex ;
+		})
+		&& regex  ;
+	},
+
+	/**
+	 * Remove all styles from the current selection.
+	 * TODO:
+	 *  - This is almost a duplication of FCKStyle.RemoveFromRange. We should
+	 *    try to merge things.
+	 */
+	RemoveAll : function()
+	{
+		var range = new FCKDomRange( FCK.EditorWindow ) ;
+		range.MoveToSelection() ;
+
+		if ( range.CheckIsCollapsed() )
+			return ;
+
+			// Expand the range, if inside inline element boundaries.
+		range.Expand( 'inline_elements' ) ;
+
+		// Get the bookmark nodes.
+		// Bookmark the range so we can re-select it after processing.
+		var bookmark = range.CreateBookmark( true ) ;
+
+		// The style will be applied within the bookmark boundaries.
+		var startNode	= range.GetBookmarkNode( bookmark, true ) ;
+		var endNode		= range.GetBookmarkNode( bookmark, false ) ;
+
+		range.Release( true ) ;
+
+		var tagsRegex = this._GetRemoveFormatTagsRegex() ;
+
+		// We need to check the selection boundaries (bookmark spans) to break
+		// the code in a way that we can properly remove partially selected nodes.
+		// For example, removing a <b> style from
+		//		<b>This is [some text</b> to show <b>the] problem</b>
+		// ... where [ and ] represent the selection, must result:
+		//		<b>This is </b>[some text to show the]<b> problem</b>
+		// The strategy is simple, we just break the partial nodes before the
+		// removal logic, having something that could be represented this way:
+		//		<b>This is </b>[<b>some text</b> to show <b>the</b>]<b> problem</b>
+
+		// Let's start checking the start boundary.
+		var path = new FCKElementPath( startNode ) ;
+		var pathElements = path.Elements ;
+		var pathElement ;
+
+		for ( var i = 1 ; i < pathElements.length ; i++ )
+		{
+			pathElement = pathElements[i] ;
+
+			if ( pathElement == path.Block || pathElement == path.BlockLimit )
+				break ;
+
+			// If this element can be removed (even partially).
+			if ( tagsRegex.test( pathElement.nodeName ) )
+				FCKDomTools.BreakParent( startNode, pathElement, range ) ;
+		}
+
+		// Now the end boundary.
+		path = new FCKElementPath( endNode ) ;
+		pathElements = path.Elements ;
+
+		for ( var i = 1 ; i < pathElements.length ; i++ )
+		{
+			pathElement = pathElements[i] ;
+
+			if ( pathElement == path.Block || pathElement == path.BlockLimit )
+				break ;
+
+			elementName = pathElement.nodeName.toLowerCase() ;
+
+			// If this element can be removed (even partially).
+			if ( tagsRegex.test( pathElement.nodeName ) )
+				FCKDomTools.BreakParent( endNode, pathElement, range ) ;
+		}
+
+		// Navigate through all nodes between the bookmarks.
+		var currentNode = FCKDomTools.GetNextSourceNode( startNode, true, 1 ) ;
+
+		while ( currentNode )
+		{
+			// If we have reached the end of the selection, stop looping.
+			if ( currentNode == endNode )
+				break ;
+
+			// Cache the next node to be processed. Do it now, because
+			// currentNode may be removed.
+			var nextNode = FCKDomTools.GetNextSourceNode( currentNode, false, 1 ) ;
+
+			// Remove elements nodes that match with this style rules.
+			if ( tagsRegex.test( currentNode.nodeName ) )
+				FCKDomTools.RemoveNode( currentNode, true ) ;
+			else
+				FCKDomTools.RemoveAttributes( currentNode, FCKConfig.RemoveAttributesArray );
+
+			currentNode = nextNode ;
+		}
+
+		range.SelectBookmark( bookmark ) ;
+
+		FCK.Events.FireEvent( 'OnSelectionChange' ) ;
+	},
+
+	GetStyle : function( styleName )
+	{
+		return this.GetStyles()[ styleName ] ;
+	},
+
+	GetStyles : function()
+	{
+		var styles = this._GetStyles ;
+		if ( !styles )
+		{
+			styles = this._GetStyles = FCKTools.Merge(
+				this._LoadStylesCore(),
+				this._LoadStylesCustom(),
+				this._LoadStylesXml() ) ;
+		}
+		return styles ;
+	},
+
+	CheckHasObjectStyle : function( elementName )
+	{
+		return !!this._ObjectStyles[ elementName ] ;
+	},
+
+	_LoadStylesCore : function()
+	{
+		var styles = {};
+		var styleDefs = FCKConfig.CoreStyles ;
+
+		for ( var styleName in styleDefs )
+		{
+			// Core styles are prefixed with _FCK_.
+			var style = styles[ '_FCK_' + styleName ] = new FCKStyle( styleDefs[ styleName ] ) ;
+			style.IsCore = true ;
+		}
+		return styles ;
+	},
+
+	_LoadStylesCustom : function()
+	{
+		var styles = {};
+		var styleDefs = FCKConfig.CustomStyles ;
+
+		if ( styleDefs )
+		{
+			for ( var styleName in styleDefs )
+			{
+				var style = styles[ styleName ] = new FCKStyle( styleDefs[ styleName ] ) ;
+				style.Name = styleName ;
+			}
+		}
+
+		return styles ;
+	},
+
+	_LoadStylesXml : function()
+	{
+		var styles = {};
+
+		var stylesXmlPath = FCKConfig.StylesXmlPath ;
+
+		if ( !stylesXmlPath || stylesXmlPath.length == 0 )
+			return styles ;
+
+		// Load the XML file into a FCKXml object.
+		var xml = new FCKXml() ;
+		xml.LoadUrl( stylesXmlPath ) ;
+
+		var stylesXmlObj = FCKXml.TransformToObject( xml.SelectSingleNode( 'Styles' ) ) ;
+
+		// Get the "Style" nodes defined in the XML file.
+		var styleNodes = stylesXmlObj.$Style ;
+
+		// Check that it did contain some valid nodes
+		if ( !styleNodes )
+			return styles ;
+
+		// Add each style to our "Styles" collection.
+		for ( var i = 0 ; i < styleNodes.length ; i++ )
+		{
+			var styleNode = styleNodes[i] ;
+
+			var element = ( styleNode.element || '' ).toLowerCase() ;
+
+			if ( element.length == 0 )
+				throw( 'The element name is required. Error loading "' + stylesXmlPath + '"' ) ;
+
+			var styleDef = {
+				Element : element,
+				Attributes : {},
+				Styles : {},
+				Overrides : []
+			} ;
+
+			// Get the attributes defined for the style (if any).
+			var attNodes = styleNode.$Attribute || [] ;
+
+			// Add the attributes to the style definition object.
+			for ( var j = 0 ; j < attNodes.length ; j++ )
+			{
+				styleDef.Attributes[ attNodes[j].name ] = attNodes[j].value ;
+			}
+
+			// Get the styles defined for the style (if any).
+			var cssStyleNodes = styleNode.$Style || [] ;
+
+			// Add the attributes to the style definition object.
+			for ( j = 0 ; j < cssStyleNodes.length ; j++ )
+			{
+				styleDef.Styles[ cssStyleNodes[j].name ] = cssStyleNodes[j].value ;
+			}
+
+			// Load override definitions.
+			var cssStyleOverrideNodes = styleNode.$Override ;
+			if ( cssStyleOverrideNodes )
+			{
+				for ( j = 0 ; j < cssStyleOverrideNodes.length ; j++ )
+				{
+					var overrideNode = cssStyleOverrideNodes[j] ;
+					var overrideDef =
+					{
+						Element : overrideNode.element
+					} ;
+
+					var overrideAttNode = overrideNode.$Attribute ;
+					if ( overrideAttNode )
+					{
+						overrideDef.Attributes = {} ;
+						for ( var k = 0 ; k < overrideAttNode.length ; k++ )
+						{
+							var overrideAttValue = overrideAttNode[k].value || null ;
+							if ( overrideAttValue )
+							{
+								// Check if the override attribute value is a regular expression.
+								var regexMatch = overrideAttValue && FCKRegexLib.RegExp.exec( overrideAttValue ) ;
+								if ( regexMatch )
+									overrideAttValue = new RegExp( regexMatch[1], regexMatch[2] || '' ) ;
+							}
+							overrideDef.Attributes[ overrideAttNode[k].name ] = overrideAttValue ;
+						}
+					}
+
+					styleDef.Overrides.push( overrideDef ) ;
+				}
+			}
+
+			var style = new FCKStyle( styleDef ) ;
+			style.Name = styleNode.name || element ;
+
+			if ( style.GetType() == FCK_STYLE_OBJECT )
+				this._ObjectStyles[ element ] = true ;
+
+			// Add the style to the "Styles" collection using it's name as the key.
+			styles[ style.Name ] = style ;
+		}
+
+		return styles ;
+	}
+} ;


Property changes on: announcement/trunk/src/main/webapp/fckeditor/editor/_source/internals/fckstyles.js
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/webapp/fckeditor/editor/_source/internals/fcktablehandler.js
===================================================================
--- announcement/trunk/src/main/webapp/fckeditor/editor/_source/internals/fcktablehandler.js	                        (rev 0)
+++ announcement/trunk/src/main/webapp/fckeditor/editor/_source/internals/fcktablehandler.js	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,858 @@
+/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2008 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * Manage table operations.
+ */
+
+var FCKTableHandler = new Object() ;
+
+FCKTableHandler.InsertRow = function( insertBefore )
+{
+	// Get the row where the selection is placed in.
+	var oRow = FCKSelection.MoveToAncestorNode( 'TR' ) ;
+	if ( !oRow ) return ;
+
+	// Create a clone of the row.
+	var oNewRow = oRow.cloneNode( true ) ;
+
+	// Insert the new row (copy) before of it.
+	oRow.parentNode.insertBefore( oNewRow, oRow ) ;
+
+	// Clean one of the rows to produce the illusion of inserting an empty row before or after.
+	FCKTableHandler.ClearRow( insertBefore ? oNewRow : oRow ) ;
+}
+
+FCKTableHandler.DeleteRows = function( row )
+{
+	// If no row has been passed as a parameter,
+	// then get the row( s ) containing the cells where the selection is placed in.
+	// If user selected multiple rows ( by selecting multiple cells ), walk
+	// the selected cell list and delete the rows containing the selected cells
+	if ( ! row )
+	{
+		var aCells = FCKTableHandler.GetSelectedCells() ;
+		var aRowsToDelete = new Array() ;
+		//queue up the rows -- it's possible ( and likely ) that we may get duplicates
+		for ( var i = 0; i < aCells.length; i++ )
+		{
+			var oRow = FCKTools.GetElementAscensor( aCells[i],'TR' ) ;
+			aRowsToDelete[oRow.rowIndex] = oRow ;
+		}
+		for ( var i = aRowsToDelete.length; i >= 0; i-- )
+		{
+			if ( aRowsToDelete[i] )
+				FCKTableHandler.DeleteRows( aRowsToDelete[i] );
+		}
+		return ;
+	}
+
+	// Get the row's table.
+	var oTable = FCKTools.GetElementAscensor( row, 'TABLE' ) ;
+
+	// If just one row is available then delete the entire table.
+	if ( oTable.rows.length == 1 )
+	{
+		FCKTableHandler.DeleteTable( oTable ) ;
+		return ;
+	}
+
+	// Delete the row.
+	row.parentNode.removeChild( row ) ;
+}
+
+FCKTableHandler.DeleteTable = function( table )
+{
+	// If no table has been passed as a parameter,
+	// then get the table where the selection is placed in.
+	if ( !table )
+	{
+		table = FCKSelection.GetSelectedElement() ;
+		if ( !table || table.tagName != 'TABLE' )
+			table = FCKSelection.MoveToAncestorNode( 'TABLE' ) ;
+	}
+	if ( !table ) return ;
+
+	// Delete the table.
+	FCKSelection.SelectNode( table ) ;
+	FCKSelection.Collapse();
+
+	// if the table is wrapped with a singleton <p> ( or something similar ), remove
+	// the surrounding tag -- which likely won't show after deletion anyway
+	if ( table.parentNode.childNodes.length == 1 )
+		table.parentNode.parentNode.removeChild( table.parentNode );
+	else
+		table.parentNode.removeChild( table  ) ;
+}
+
+FCKTableHandler.InsertColumn = function( insertBefore )
+{
+	// Get the cell where the selection is placed in.
+	var oCell = null ;
+	var nodes = this.GetSelectedCells() ;
+
+	if ( nodes && nodes.length )
+		oCell = nodes[ insertBefore ? 0 : ( nodes.length - 1 ) ] ;
+
+	if ( ! oCell )
+		return ;
+
+	// Get the cell's table.
+	var oTable = FCKTools.GetElementAscensor( oCell, 'TABLE' ) ;
+
+	var iIndex = oCell.cellIndex ;
+
+	// Loop throw all rows available in the table.
+	for ( var i = 0 ; i < oTable.rows.length ; i++ )
+	{
+		// Get the row.
+		var oRow = oTable.rows[i] ;
+
+		// If the row doens't have enough cells, ignore it.
+		if ( oRow.cells.length < ( iIndex + 1 ) )
+			continue ;
+
+		oCell = oRow.cells[iIndex].cloneNode(false) ;
+
+		if ( FCKBrowserInfo.IsGeckoLike )
+			FCKTools.AppendBogusBr( oCell ) ;
+
+		// Get back the currently selected cell.
+		var oBaseCell = oRow.cells[iIndex] ;
+
+		if ( insertBefore )
+			oRow.insertBefore( oCell, oBaseCell ) ;
+		else if ( oBaseCell.nextSibling )
+			oRow.insertBefore( oCell, oBaseCell.nextSibling ) ;
+		else
+			oRow.appendChild( oCell ) ;
+	}
+}
+
+FCKTableHandler.DeleteColumns = function( oCell )
+{
+	// if user selected multiple cols ( by selecting multiple cells ), walk
+	// the selected cell list and delete the rows containing the selected cells
+	if ( !oCell  )
+	{
+		var aColsToDelete = FCKTableHandler.GetSelectedCells();
+		for ( var i = aColsToDelete.length; i >= 0; i--  )
+		{
+			if ( aColsToDelete[i]  )
+				FCKTableHandler.DeleteColumns( aColsToDelete[i]  );
+		}
+		return;
+	}
+
+	if ( !oCell ) return ;
+
+	// Get the cell's table.
+	var oTable = FCKTools.GetElementAscensor( oCell, 'TABLE' ) ;
+
+	// Get the cell index.
+	var iIndex = oCell.cellIndex ;
+
+	// Loop throw all rows (from down to up, because it's possible that some
+	// rows will be deleted).
+	for ( var i = oTable.rows.length - 1 ; i >= 0 ; i-- )
+	{
+		// Get the row.
+		var oRow = oTable.rows[i] ;
+
+		// If the cell to be removed is the first one and the row has just one cell.
+		if ( iIndex == 0 && oRow.cells.length == 1 )
+		{
+			// Remove the entire row.
+			FCKTableHandler.DeleteRows( oRow ) ;
+			continue ;
+		}
+
+		// If the cell to be removed exists the delete it.
+		if ( oRow.cells[iIndex] )
+			oRow.removeChild( oRow.cells[iIndex] ) ;
+	}
+}
+
+FCKTableHandler.InsertCell = function( cell, insertBefore )
+{
+	// Get the cell where the selection is placed in.
+	var oCell = null ;
+	var nodes = this.GetSelectedCells() ;
+	if ( nodes && nodes.length )
+		oCell = nodes[ insertBefore ? 0 : ( nodes.length - 1 ) ] ;
+	if ( ! oCell )
+		return null ;
+
+	// Create the new cell element to be added.
+	var oNewCell = FCK.EditorDocument.createElement( 'TD' ) ;
+	if ( FCKBrowserInfo.IsGeckoLike )
+		FCKTools.AppendBogusBr( oNewCell ) ;
+
+	if ( !insertBefore && oCell.cellIndex == oCell.parentNode.cells.length - 1 )
+		oCell.parentNode.appendChild( oNewCell ) ;
+	else
+		oCell.parentNode.insertBefore( oNewCell, insertBefore ? oCell : oCell.nextSibling ) ;
+
+	return oNewCell ;
+}
+
+FCKTableHandler.DeleteCell = function( cell )
+{
+	// If this is the last cell in the row.
+	if ( cell.parentNode.cells.length == 1 )
+	{
+		// Delete the entire row.
+		FCKTableHandler.DeleteRows( FCKTools.GetElementAscensor( cell, 'TR' ) ) ;
+		return ;
+	}
+
+	// Delete the cell from the row.
+	cell.parentNode.removeChild( cell ) ;
+}
+
+FCKTableHandler.DeleteCells = function()
+{
+	var aCells = FCKTableHandler.GetSelectedCells() ;
+
+	for ( var i = aCells.length - 1 ; i >= 0  ; i-- )
+	{
+		FCKTableHandler.DeleteCell( aCells[i] ) ;
+	}
+}
+
+FCKTableHandler._MarkCells = function( cells, label )
+{
+	for ( var i = 0 ; i < cells.length ; i++ )
+		cells[i][label] = true ;
+}
+
+FCKTableHandler._UnmarkCells = function( cells, label )
+{
+	for ( var i = 0 ; i < cells.length ; i++ )
+	{
+		if ( FCKBrowserInfo.IsIE )
+			cells[i].removeAttribute( label ) ;
+		else
+			delete cells[i][label] ;
+	}
+}
+
+FCKTableHandler._ReplaceCellsByMarker = function( tableMap, marker, substitute )
+{
+	for ( var i = 0 ; i < tableMap.length ; i++ )
+	{
+		for ( var j = 0 ; j < tableMap[i].length ; j++ )
+		{
+			if ( tableMap[i][j][marker] )
+				tableMap[i][j] = substitute ;
+		}
+	}
+}
+
+FCKTableHandler._GetMarkerGeometry = function( tableMap, rowIdx, colIdx, markerName )
+{
+	var selectionWidth = 0 ;
+	var selectionHeight = 0 ;
+	var cellsLeft = 0 ;
+	var cellsUp = 0 ;
+	for ( var i = colIdx ; tableMap[rowIdx][i] && tableMap[rowIdx][i][markerName] ; i++ )
+		selectionWidth++ ;
+	for ( var i = colIdx - 1 ; tableMap[rowIdx][i] && tableMap[rowIdx][i][markerName] ; i-- )
+	{
+		selectionWidth++ ;
+		cellsLeft++ ;
+	}
+	for ( var i = rowIdx ; tableMap[i] && tableMap[i][colIdx] && tableMap[i][colIdx][markerName] ; i++ )
+		selectionHeight++ ;
+	for ( var i = rowIdx - 1 ; tableMap[i] && tableMap[i][colIdx] && tableMap[i][colIdx][markerName] ; i-- )
+	{
+		selectionHeight++ ;
+		cellsUp++ ;
+	}
+	return { 'width' : selectionWidth, 'height' : selectionHeight, 'x' : cellsLeft, 'y' : cellsUp } ;
+}
+
+FCKTableHandler.CheckIsSelectionRectangular = function()
+{
+	// If every row and column in an area on a plane are of the same width and height,
+	// Then the area is a rectangle.
+	var cells = FCKTableHandler.GetSelectedCells() ;
+	if ( cells.length < 1 )
+		return false ;
+
+	this._MarkCells( cells, '_CellSelected' ) ;
+
+	var tableMap = this._CreateTableMap( cells[0].parentNode.parentNode ) ;
+	var rowIdx = cells[0].parentNode.rowIndex ;
+	var colIdx = this._GetCellIndexSpan( tableMap, rowIdx, cells[0] ) ;
+
+	var geometry = this._GetMarkerGeometry( tableMap, rowIdx, colIdx, '_CellSelected' ) ;
+	var baseColIdx = colIdx - geometry.x ;
+	var baseRowIdx = rowIdx - geometry.y ;
+
+	if ( geometry.width >= geometry.height )
+	{
+		for ( colIdx = baseColIdx ; colIdx < baseColIdx + geometry.width ; colIdx++ )
+		{
+			rowIdx = baseRowIdx + ( colIdx - baseColIdx ) % geometry.height ;
+			if ( ! tableMap[rowIdx] || ! tableMap[rowIdx][colIdx] )
+			{
+				this._UnmarkCells( cells, '_CellSelected' ) ;
+				return false ;
+			}
+			var g = this._GetMarkerGeometry( tableMap, rowIdx, colIdx, '_CellSelected' ) ;
+			if ( g.width != geometry.width || g.height != geometry.height )
+			{
+				this._UnmarkCells( cells, '_CellSelected' ) ;
+				return false ;
+			}
+		}
+	}
+	else
+	{
+		for ( rowIdx = baseRowIdx ; rowIdx < baseRowIdx + geometry.height ; rowIdx++ )
+		{
+			colIdx = baseColIdx + ( rowIdx - baseRowIdx ) % geometry.width ;
+			if ( ! tableMap[rowIdx] || ! tableMap[rowIdx][colIdx] )
+			{
+				this._UnmarkCells( cells, '_CellSelected' ) ;
+				return false ;
+			}
+			var g = this._GetMarkerGeometry( tableMap, rowIdx, colIdx, '_CellSelected' ) ;
+			if ( g.width != geometry.width || g.height != geometry.height )
+			{
+				this._UnmarkCells( cells, '_CellSelected' ) ;
+				return false ;
+			}
+		}
+	}
+
+	this._UnmarkCells( cells, '_CellSelected' ) ;
+	return true ;
+}
+
+FCKTableHandler.MergeCells = function()
+{
+	// Get all selected cells.
+	var cells = this.GetSelectedCells() ;
+	if ( cells.length < 2 )
+		return ;
+
+	// Assume the selected cells are already in a rectangular geometry.
+	// Because the checking is already done by FCKTableCommand.
+	var refCell = cells[0] ;
+	var tableMap = this._CreateTableMap( refCell.parentNode.parentNode ) ;
+	var rowIdx = refCell.parentNode.rowIndex ;
+	var colIdx = this._GetCellIndexSpan( tableMap, rowIdx, refCell ) ;
+
+	this._MarkCells( cells, '_SelectedCells' ) ;
+	var selectionGeometry = this._GetMarkerGeometry( tableMap, rowIdx, colIdx, '_SelectedCells' ) ;
+
+	var baseColIdx = colIdx - selectionGeometry.x ;
+	var baseRowIdx = rowIdx - selectionGeometry.y ;
+	var cellContents = FCKTools.GetElementDocument( refCell ).createDocumentFragment() ;
+	for ( var i = 0 ; i < selectionGeometry.height ; i++ )
+	{
+		var rowChildNodesCount = 0 ;
+		for ( var j = 0 ; j < selectionGeometry.width ; j++ )
+		{
+			var currentCell = tableMap[baseRowIdx + i][baseColIdx + j] ;
+			while ( currentCell.childNodes.length > 0 )
+			{
+				var node = currentCell.removeChild( currentCell.firstChild ) ;
+				if ( node.nodeType != 1
+					|| ( node.getAttribute( 'type', 2 ) != '_moz' && node.getAttribute( '_moz_dirty' ) != null ) )
+				{
+					cellContents.appendChild( node ) ;
+					rowChildNodesCount++ ;
+				}
+			}
+		}
+		if ( rowChildNodesCount > 0 )
+			cellContents.appendChild( FCKTools.GetElementDocument( refCell ).createElement( 'br' ) ) ;
+	}
+
+	this._ReplaceCellsByMarker( tableMap, '_SelectedCells', refCell ) ;
+	this._UnmarkCells( cells, '_SelectedCells' ) ;
+	this._InstallTableMap( tableMap, refCell.parentNode.parentNode ) ;
+	refCell.appendChild( cellContents ) ;
+
+	if ( FCKBrowserInfo.IsGeckoLike && ( ! refCell.firstChild ) )
+		FCKTools.AppendBogusBr( refCell ) ;
+
+	this._MoveCaretToCell( refCell, false ) ;
+}
+
+FCKTableHandler.MergeRight = function()
+{
+	var target = this.GetMergeRightTarget() ;
+	if ( target == null )
+		return ;
+	var refCell = target.refCell ;
+	var tableMap = target.tableMap ;
+	var nextCell = target.nextCell ;
+
+	var cellContents = FCK.EditorDocument.createDocumentFragment() ;
+	while ( nextCell && nextCell.childNodes && nextCell.childNodes.length > 0 )
+		cellContents.appendChild( nextCell.removeChild( nextCell.firstChild ) ) ;
+
+	nextCell.parentNode.removeChild( nextCell ) ;
+	refCell.appendChild( cellContents ) ;
+	this._MarkCells( [nextCell], '_Replace' ) ;
+	this._ReplaceCellsByMarker( tableMap, '_Replace', refCell ) ;
+	this._InstallTableMap( tableMap, refCell.parentNode.parentNode ) ;
+
+	this._MoveCaretToCell( refCell, false ) ;
+}
+
+FCKTableHandler.MergeDown = function()
+{
+	var target = this.GetMergeDownTarget() ;
+	if ( target == null )
+		return ;
+	var refCell = target.refCell ;
+	var tableMap = target.tableMap ;
+	var nextCell = target.nextCell ;
+
+	var cellContents = FCKTools.GetElementDocument( refCell ).createDocumentFragment() ;
+	while ( nextCell && nextCell.childNodes && nextCell.childNodes.length > 0 )
+		cellContents.appendChild( nextCell.removeChild( nextCell.firstChild ) ) ;
+	if ( cellContents.firstChild )
+		cellContents.insertBefore( FCKTools.GetElementDocument( nextCell ).createElement( 'br' ), cellContents.firstChild ) ;
+	refCell.appendChild( cellContents ) ;
+	this._MarkCells( [nextCell], '_Replace' ) ;
+	this._ReplaceCellsByMarker( tableMap, '_Replace', refCell ) ;
+	this._InstallTableMap( tableMap, refCell.parentNode.parentNode ) ;
+
+	this._MoveCaretToCell( refCell, false ) ;
+}
+
+FCKTableHandler.HorizontalSplitCell = function()
+{
+	var cells = FCKTableHandler.GetSelectedCells() ;
+	if ( cells.length != 1 )
+		return ;
+
+	var refCell = cells[0] ;
+	var tableMap = this._CreateTableMap( refCell.parentNode.parentNode ) ;
+	var rowIdx = refCell.parentNode.rowIndex ;
+	var colIdx = FCKTableHandler._GetCellIndexSpan( tableMap, rowIdx, refCell ) ;
+	var cellSpan = isNaN( refCell.colSpan ) ? 1 : refCell.colSpan ;
+
+	if ( cellSpan > 1 )
+	{
+		// Splittng a multi-column cell - original cell gets ceil(colSpan/2) columns,
+		// new cell gets floor(colSpan/2).
+		var newCellSpan = Math.ceil( cellSpan / 2 ) ;
+		var newCell = FCKTools.GetElementDocument( refCell ).createElement( 'td' ) ;
+		if ( FCKBrowserInfo.IsGeckoLike )
+			FCKTools.AppendBogusBr( newCell ) ;
+		var startIdx = colIdx + newCellSpan ;
+		var endIdx = colIdx + cellSpan ;
+		var rowSpan = isNaN( refCell.rowSpan ) ? 1 : refCell.rowSpan ;
+		for ( var r = rowIdx ; r < rowIdx + rowSpan ; r++ )
+		{
+			for ( var i = startIdx ; i < endIdx ; i++ )
+				tableMap[r][i] = newCell ;
+		}
+	}
+	else
+	{
+		// Splitting a single-column cell - add a new cell, and expand
+		// cells crossing the same column.
+		var newTableMap = [] ;
+		for ( var i = 0 ; i < tableMap.length ; i++ )
+		{
+			var newRow = tableMap[i].slice( 0, colIdx ) ;
+			if ( tableMap[i].length <= colIdx )
+			{
+				newTableMap.push( newRow ) ;
+				continue ;
+			}
+			if ( tableMap[i][colIdx] == refCell )
+			{
+				newRow.push( refCell ) ;
+				newRow.push( FCKTools.GetElementDocument( refCell ).createElement( 'td' ) ) ;
+				if ( FCKBrowserInfo.IsGeckoLike )
+					FCKTools.AppendBogusBr( newRow[newRow.length - 1] ) ;
+			}
+			else
+			{
+				newRow.push( tableMap[i][colIdx] ) ;
+				newRow.push( tableMap[i][colIdx] ) ;
+			}
+			for ( var j = colIdx + 1 ; j < tableMap[i].length ; j++ )
+				newRow.push( tableMap[i][j] ) ;
+			newTableMap.push( newRow ) ;
+		}
+		tableMap = newTableMap ;
+	}
+
+	this._InstallTableMap( tableMap, refCell.parentNode.parentNode ) ;
+}
+
+FCKTableHandler.VerticalSplitCell = function()
+{
+	var cells = FCKTableHandler.GetSelectedCells() ;
+	if ( cells.length != 1 )
+		return ;
+
+	var currentCell = cells[0] ;
+	var tableMap = this._CreateTableMap( currentCell.parentNode.parentNode ) ;
+	var cellIndex = FCKTableHandler._GetCellIndexSpan( tableMap, currentCell.parentNode.rowIndex, currentCell ) ;
+	var currentRowSpan = currentCell.rowSpan ;
+	var currentRowIndex = currentCell.parentNode.rowIndex ;
+	if ( isNaN( currentRowSpan ) )
+		currentRowSpan = 1 ;
+
+	if ( currentRowSpan > 1 )
+	{
+		// 1. Set the current cell's rowSpan to 1.
+		currentCell.rowSpan = Math.ceil( currentRowSpan / 2 ) ;
+
+		// 2. Find the appropriate place to insert a new cell at the next row.
+		var newCellRowIndex = currentRowIndex + Math.ceil( currentRowSpan / 2 ) ;
+		var insertMarker = null ;
+		for ( var i = cellIndex+1 ; i < tableMap[newCellRowIndex].length ; i++ )
+		{
+			if ( tableMap[newCellRowIndex][i].parentNode.rowIndex == newCellRowIndex )
+			{
+				insertMarker = tableMap[newCellRowIndex][i] ;
+				break ;
+			}
+		}
+
+		// 3. Insert the new cell to the indicated place, with the appropriate rowSpan, next row.
+		var newCell = FCK.EditorDocument.createElement( 'td' ) ;
+		newCell.rowSpan = Math.floor( currentRowSpan / 2 ) ;
+		if ( FCKBrowserInfo.IsGeckoLike )
+			FCKTools.AppendBogusBr( newCell ) ;
+		currentCell.parentNode.parentNode.rows[newCellRowIndex].insertBefore( newCell, insertMarker ) ;
+	}
+	else
+	{
+		// 1. Insert a new row.
+		var newCellRowIndex = currentRowIndex + 1 ;
+		var newRow = FCK.EditorDocument.createElement( 'tr' ) ;
+		currentCell.parentNode.parentNode.insertBefore( newRow, currentCell.parentNode.parentNode.rows[newCellRowIndex] ) ;
+
+		// 2. +1 to rowSpan for all cells crossing currentCell's row.
+		for ( var i = 0 ; i < tableMap[currentRowIndex].length ; )
+		{
+			var colSpan = tableMap[currentRowIndex][i].colSpan ;
+			if ( isNaN( colSpan ) || colSpan < 1 )
+				colSpan = 1 ;
+			if ( i == cellIndex )
+			{
+				i += colSpan ;
+				continue ;
+			}
+			var rowSpan = tableMap[currentRowIndex][i].rowSpan ;
+			if ( isNaN( rowSpan ) )
+				rowSpan = 1 ;
+			tableMap[currentRowIndex][i].rowSpan = rowSpan + 1 ;
+			i += colSpan ;
+		}
+
+		// 3. Insert a new cell to new row.
+		var newCell = FCK.EditorDocument.createElement( 'td' ) ;
+		if ( FCKBrowserInfo.IsGeckoLike )
+			FCKTools.AppendBogusBr( newCell	) ;
+		newRow.appendChild( newCell ) ;
+	}
+}
+
+// Get the cell index from a TableMap.
+FCKTableHandler._GetCellIndexSpan = function( tableMap, rowIndex, cell )
+{
+	if ( tableMap.length < rowIndex + 1 )
+		return null ;
+
+	var oRow = tableMap[ rowIndex ] ;
+
+	for ( var c = 0 ; c < oRow.length ; c++ )
+	{
+		if ( oRow[c] == cell )
+			return c ;
+	}
+
+	return null ;
+}
+
+// Get the cell location from a TableMap. Returns an array with an [x,y] location
+FCKTableHandler._GetCellLocation = function( tableMap, cell  )
+{
+	for ( var i = 0 ; i < tableMap.length; i++ )
+	{
+		for ( var c = 0 ; c < tableMap[i].length ; c++  )
+		{
+			if ( tableMap[i][c] == cell  ) return [i,c];
+		}
+	}
+	return null ;
+}
+
+// Get the cells available in a column of a TableMap.
+FCKTableHandler._GetColumnCells = function( tableMap, columnIndex )
+{
+	var aCollCells = new Array() ;
+
+	for ( var r = 0 ; r < tableMap.length ; r++ )
+	{
+		var oCell = tableMap[r][columnIndex] ;
+		if ( oCell && ( aCollCells.length == 0 || aCollCells[ aCollCells.length - 1 ] != oCell ) )
+			aCollCells[ aCollCells.length ] = oCell ;
+	}
+
+	return aCollCells ;
+}
+
+// This function is quite hard to explain. It creates a matrix representing all cells in a table.
+// The difference here is that the "spanned" cells (colSpan and rowSpan) are duplicated on the matrix
+// cells that are "spanned". For example, a row with 3 cells where the second cell has colSpan=2 and rowSpan=3
+// will produce a bi-dimensional matrix with the following values (representing the cells):
+//		Cell1, Cell2, Cell2, Cell 3
+//		Cell4, Cell2, Cell2, Cell 5
+FCKTableHandler._CreateTableMap = function( table )
+{
+	var aRows = table.rows ;
+
+	// Row and Column counters.
+	var r = -1 ;
+
+	var aMap = new Array() ;
+
+	for ( var i = 0 ; i < aRows.length ; i++ )
+	{
+		r++ ;
+		if ( !aMap[r] )
+			aMap[r] = new Array() ;
+
+		var c = -1 ;
+
+		for ( var j = 0 ; j < aRows[i].cells.length ; j++ )
+		{
+			var oCell = aRows[i].cells[j] ;
+
+			c++ ;
+			while ( aMap[r][c] )
+				c++ ;
+
+			var iColSpan = isNaN( oCell.colSpan ) ? 1 : oCell.colSpan ;
+			var iRowSpan = isNaN( oCell.rowSpan ) ? 1 : oCell.rowSpan ;
+
+			for ( var rs = 0 ; rs < iRowSpan ; rs++ )
+			{
+				if ( !aMap[r + rs] )
+					aMap[r + rs] = new Array() ;
+
+				for ( var cs = 0 ; cs < iColSpan ; cs++ )
+				{
+					aMap[r + rs][c + cs] = aRows[i].cells[j] ;
+				}
+			}
+
+			c += iColSpan - 1 ;
+		}
+	}
+	return aMap ;
+}
+
+// This function is the inverse of _CreateTableMap - it takes in a table map and converts it to an HTML table.
+FCKTableHandler._InstallTableMap = function( tableMap, table )
+{
+	// Clear the table of all rows first.
+	while ( table.rows.length > 0 )
+	{
+		var row = table.rows[0] ;
+		row.parentNode.removeChild( row ) ;
+	}
+
+	// Disconnect all the cells in tableMap from their parents, set all colSpan and rowSpan attributes to 1.
+	for ( var i = 0 ; i < tableMap.length ; i++ )
+	{
+		for ( var j = 0 ; j < tableMap[i].length ; j++ )
+		{
+			var cell = tableMap[i][j] ;
+			if ( cell.parentNode )
+				cell.parentNode.removeChild( cell ) ;
+			cell.colSpan = cell.rowSpan = 1 ;
+		}
+	}
+
+	// Scan by rows and set colSpan.
+	var maxCol = 0 ;
+	for ( var i = 0 ; i < tableMap.length ; i++ )
+	{
+		for ( var j = 0 ; j < tableMap[i].length ; j++ )
+		{
+			var cell = tableMap[i][j] ;
+			if ( ! cell)
+				continue ;
+			if ( j > maxCol )
+				maxCol = j ;
+			if ( cell._colScanned === true )
+				continue ;
+			if ( tableMap[i][j-1] == cell )
+				cell.colSpan++ ;
+			if ( tableMap[i][j+1] != cell )
+				cell._colScanned = true ;
+		}
+	}
+
+	// Scan by columns and set rowSpan.
+	for ( var i = 0 ; i <= maxCol ; i++ )
+	{
+		for ( var j = 0 ; j < tableMap.length ; j++ )
+		{
+			if ( ! tableMap[j] )
+				continue ;
+			var cell = tableMap[j][i] ;
+			if ( ! cell || cell._rowScanned === true )
+				continue ;
+			if ( tableMap[j-1] && tableMap[j-1][i] == cell )
+				cell.rowSpan++ ;
+			if ( ! tableMap[j+1] || tableMap[j+1][i] != cell )
+				cell._rowScanned = true ;
+		}
+	}
+
+	// Clear all temporary flags.
+	for ( var i = 0 ; i < tableMap.length ; i++ )
+	{
+		for ( var j = 0 ; j < tableMap[i].length ; j++)
+		{
+			var cell = tableMap[i][j] ;
+			if ( FCKBrowserInfo.IsIE )
+			{
+				cell.removeAttribute( '_colScanned' ) ;
+				cell.removeAttribute( '_rowScanned' ) ;
+			}
+			else
+			{
+				delete cell._colScanned ;
+				delete cell._rowScanned ;
+			}
+		}
+	}
+
+	// Insert physical rows and columns to the table.
+	for ( var i = 0 ; i < tableMap.length ; i++ )
+	{
+		var rowObj = FCKTools.GetElementDocument( table ).createElement( 'tr' ) ;
+		for ( var j = 0 ; j < tableMap[i].length ; )
+		{
+			var cell = tableMap[i][j] ;
+			if ( tableMap[i-1] && tableMap[i-1][j] == cell )
+			{
+				j += cell.colSpan ;
+				continue ;
+			}
+			rowObj.appendChild( cell ) ;
+			j += cell.colSpan ;
+			if ( cell.colSpan == 1 )
+				cell.removeAttribute( 'colspan' ) ;
+			if ( cell.rowSpan == 1 )
+				cell.removeAttribute( 'rowspan' ) ;
+		}
+		table.appendChild( rowObj ) ;
+	}
+}
+
+FCKTableHandler._MoveCaretToCell = function ( refCell, toStart )
+{
+	var range = new FCKDomRange( FCK.EditorWindow ) ;
+	range.MoveToNodeContents( refCell ) ;
+	range.Collapse( toStart ) ;
+	range.Select() ;
+}
+
+FCKTableHandler.ClearRow = function( tr )
+{
+	// Get the array of row's cells.
+	var aCells = tr.cells ;
+
+	// Replace the contents of each cell with "nothing".
+	for ( var i = 0 ; i < aCells.length ; i++ )
+	{
+		aCells[i].innerHTML = '' ;
+
+		if ( FCKBrowserInfo.IsGeckoLike )
+			FCKTools.AppendBogusBr( aCells[i] ) ;
+	}
+}
+
+FCKTableHandler.GetMergeRightTarget = function()
+{
+	var cells = this.GetSelectedCells() ;
+	if ( cells.length != 1 )
+		return null ;
+
+	var refCell = cells[0] ;
+	var tableMap = this._CreateTableMap( refCell.parentNode.parentNode ) ;
+	var rowIdx = refCell.parentNode.rowIndex ;
+	var colIdx = this._GetCellIndexSpan( tableMap, rowIdx, refCell ) ;
+	var nextColIdx = colIdx + ( isNaN( refCell.colSpan ) ? 1 : refCell.colSpan ) ;
+	var nextCell = tableMap[rowIdx][nextColIdx] ;
+
+	if ( ! nextCell )
+		return null ;
+
+	// The two cells must have the same vertical geometry, otherwise merging does not make sense.
+	this._MarkCells( [refCell, nextCell], '_SizeTest' ) ;
+	var refGeometry = this._GetMarkerGeometry( tableMap, rowIdx, colIdx, '_SizeTest' ) ;
+	var nextGeometry = this._GetMarkerGeometry( tableMap, rowIdx, nextColIdx, '_SizeTest' ) ;
+	this._UnmarkCells( [refCell, nextCell], '_SizeTest' ) ;
+
+	if ( refGeometry.height != nextGeometry.height || refGeometry.y != nextGeometry.y )
+		return null ;
+
+	return { 'refCell' : refCell, 'nextCell' : nextCell, 'tableMap' : tableMap } ;
+}
+
+FCKTableHandler.GetMergeDownTarget = function()
+{
+	var cells = this.GetSelectedCells() ;
+	if ( cells.length != 1 )
+		return null ;
+
+	var refCell = cells[0] ;
+	var tableMap = this._CreateTableMap( refCell.parentNode.parentNode ) ;
+	var rowIdx = refCell.parentNode.rowIndex ;
+	var colIdx = this._GetCellIndexSpan( tableMap, rowIdx, refCell ) ;
+	var newRowIdx = rowIdx + ( isNaN( refCell.rowSpan ) ? 1 : refCell.rowSpan ) ;
+	if ( ! tableMap[newRowIdx] )
+		return null ;
+
+	var nextCell = tableMap[newRowIdx][colIdx] ;
+
+	if ( ! nextCell )
+		return null ;
+
+	// The two cells must have the same horizontal geometry, otherwise merging does not makes sense.
+	this._MarkCells( [refCell, nextCell], '_SizeTest' ) ;
+	var refGeometry = this._GetMarkerGeometry( tableMap, rowIdx, colIdx, '_SizeTest' ) ;
+	var nextGeometry = this._GetMarkerGeometry( tableMap, newRowIdx, colIdx, '_SizeTest' ) ;
+	this._UnmarkCells( [refCell, nextCell], '_SizeTest' ) ;
+
+	if ( refGeometry.width != nextGeometry.width || refGeometry.x != nextGeometry.x )
+		return null ;
+
+	return { 'refCell' : refCell, 'nextCell' : nextCell, 'tableMap' : tableMap } ;
+}


Property changes on: announcement/trunk/src/main/webapp/fckeditor/editor/_source/internals/fcktablehandler.js
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/webapp/fckeditor/editor/_source/internals/fcktablehandler_gecko.js
===================================================================
--- announcement/trunk/src/main/webapp/fckeditor/editor/_source/internals/fcktablehandler_gecko.js	                        (rev 0)
+++ announcement/trunk/src/main/webapp/fckeditor/editor/_source/internals/fcktablehandler_gecko.js	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,56 @@
+/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2008 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * Manage table operations (non-IE).
+ */
+
+FCKTableHandler.GetSelectedCells = function()
+{
+	var aCells = new Array() ;
+
+	var oSelection = FCKSelection.GetSelection() ;
+
+	// If the selection is a text.
+	if ( oSelection.rangeCount == 1 && oSelection.anchorNode.nodeType == 3 )
+	{
+		var oParent = FCKTools.GetElementAscensor( oSelection.anchorNode, 'TD,TH' ) ;
+
+		if ( oParent )
+			aCells[0] = oParent ;
+
+		return aCells ;
+	}
+
+	for ( var i = 0 ; i < oSelection.rangeCount ; i++ )
+	{
+		var oRange = oSelection.getRangeAt(i) ;
+		var oCell ;
+
+		if ( oRange.startContainer.tagName.Equals( 'TD', 'TH' ) )
+			oCell = oRange.startContainer ;
+		else
+			oCell = oRange.startContainer.childNodes[ oRange.startOffset ] ;
+
+		if ( oCell.tagName.Equals( 'TD', 'TH' ) )
+			aCells[aCells.length] = oCell ;
+	}
+
+	return aCells ;
+}


Property changes on: announcement/trunk/src/main/webapp/fckeditor/editor/_source/internals/fcktablehandler_gecko.js
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/webapp/fckeditor/editor/_source/internals/fcktablehandler_ie.js
===================================================================
--- announcement/trunk/src/main/webapp/fckeditor/editor/_source/internals/fcktablehandler_ie.js	                        (rev 0)
+++ announcement/trunk/src/main/webapp/fckeditor/editor/_source/internals/fcktablehandler_ie.js	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,64 @@
+/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2008 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * Manage table operations (IE specific).
+ */
+
+FCKTableHandler.GetSelectedCells = function()
+{
+	if ( FCKSelection.GetType() == 'Control' )
+	{
+		var td = FCKSelection.MoveToAncestorNode( 'TD' ) ;
+		return td ? [ td ] : [] ;
+	}
+
+	var aCells = new Array() ;
+
+	var oRange = FCKSelection.GetSelection().createRange() ;
+//	var oParent = oRange.parentElement() ;
+	var oParent = FCKSelection.GetParentElement() ;
+
+	if ( oParent && oParent.tagName.Equals( 'TD', 'TH' ) )
+		aCells[0] = oParent ;
+	else
+	{
+		oParent = FCKSelection.MoveToAncestorNode( 'TABLE' ) ;
+
+		if ( oParent )
+		{
+			// Loops throw all cells checking if the cell is, or part of it, is inside the selection
+			// and then add it to the selected cells collection.
+			for ( var i = 0 ; i < oParent.cells.length ; i++ )
+			{
+				var oCellRange = FCK.EditorDocument.body.createTextRange() ;
+				oCellRange.moveToElementText( oParent.cells[i] ) ;
+
+				if ( oRange.inRange( oCellRange )
+					|| ( oRange.compareEndPoints('StartToStart',oCellRange) >= 0 &&  oRange.compareEndPoints('StartToEnd',oCellRange) <= 0 )
+					|| ( oRange.compareEndPoints('EndToStart',oCellRange) >= 0 &&  oRange.compareEndPoints('EndToEnd',oCellRange) <= 0 ) )
+				{
+					aCells[aCells.length] = oParent.cells[i] ;
+				}
+			}
+		}
+	}
+
+	return aCells ;
+}


Property changes on: announcement/trunk/src/main/webapp/fckeditor/editor/_source/internals/fcktablehandler_ie.js
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/webapp/fckeditor/editor/_source/internals/fcktoolbaritems.js
===================================================================
--- announcement/trunk/src/main/webapp/fckeditor/editor/_source/internals/fcktoolbaritems.js	                        (rev 0)
+++ announcement/trunk/src/main/webapp/fckeditor/editor/_source/internals/fcktoolbaritems.js	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,123 @@
+/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2008 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * Toolbar items definitions.
+ */
+
+var FCKToolbarItems = new Object() ;
+FCKToolbarItems.LoadedItems = new Object() ;
+
+FCKToolbarItems.RegisterItem = function( itemName, item )
+{
+	this.LoadedItems[ itemName ] = item ;
+}
+
+FCKToolbarItems.GetItem = function( itemName )
+{
+	var oItem = FCKToolbarItems.LoadedItems[ itemName ] ;
+
+	if ( oItem )
+		return oItem ;
+
+	switch ( itemName )
+	{
+		case 'Source'			: oItem = new FCKToolbarButton( 'Source'	, FCKLang.Source, null, FCK_TOOLBARITEM_ICONTEXT, true, true, 1 ) ; break ;
+		case 'DocProps'			: oItem = new FCKToolbarButton( 'DocProps'	, FCKLang.DocProps, null, null, null, null, 2 ) ; break ;
+		case 'Save'				: oItem = new FCKToolbarButton( 'Save'		, FCKLang.Save, null, null, true, null, 3 ) ; break ;
+		case 'NewPage'			: oItem = new FCKToolbarButton( 'NewPage'	, FCKLang.NewPage, null, null, true, null, 4  ) ; break ;
+		case 'Preview'			: oItem = new FCKToolbarButton( 'Preview'	, FCKLang.Preview, null, null, true, null, 5  ) ; break ;
+		case 'Templates'		: oItem = new FCKToolbarButton( 'Templates'	, FCKLang.Templates, null, null, null, null, 6 ) ; break ;
+		case 'About'			: oItem = new FCKToolbarButton( 'About'		, FCKLang.About, null, null, true, null, 47  ) ; break ;
+
+		case 'Cut'				: oItem = new FCKToolbarButton( 'Cut'		, FCKLang.Cut, null, null, false, true, 7 ) ; break ;
+		case 'Copy'				: oItem = new FCKToolbarButton( 'Copy'		, FCKLang.Copy, null, null, false, true, 8 ) ; break ;
+		case 'Paste'			: oItem = new FCKToolbarButton( 'Paste'		, FCKLang.Paste, null, null, false, true, 9 ) ; break ;
+		case 'PasteText'		: oItem = new FCKToolbarButton( 'PasteText'	, FCKLang.PasteText, null, null, false, true, 10 ) ; break ;
+		case 'PasteWord'		: oItem = new FCKToolbarButton( 'PasteWord'	, FCKLang.PasteWord, null, null, false, true, 11 ) ; break ;
+		case 'Print'			: oItem = new FCKToolbarButton( 'Print'		, FCKLang.Print, null, null, false, true, 12 ) ; break ;
+		case 'SpellCheck'		: oItem = new FCKToolbarButton( 'SpellCheck', FCKLang.SpellCheck, null, null, null, null, 13 ) ; break ;
+		case 'Undo'				: oItem = new FCKToolbarButton( 'Undo'		, FCKLang.Undo, null, null, false, true, 14 ) ; break ;
+		case 'Redo'				: oItem = new FCKToolbarButton( 'Redo'		, FCKLang.Redo, null, null, false, true, 15 ) ; break ;
+		case 'SelectAll'		: oItem = new FCKToolbarButton( 'SelectAll'	, FCKLang.SelectAll, null, null, true, null, 18 ) ; break ;
+		case 'RemoveFormat'		: oItem = new FCKToolbarButton( 'RemoveFormat', FCKLang.RemoveFormat, null, null, false, true, 19 ) ; break ;
+		case 'FitWindow'		: oItem = new FCKToolbarButton( 'FitWindow'	, FCKLang.FitWindow, null, null, true, true, 66 ) ; break ;
+
+		case 'Bold'				: oItem = new FCKToolbarButton( 'Bold'		, FCKLang.Bold, null, null, false, true, 20 ) ; break ;
+		case 'Italic'			: oItem = new FCKToolbarButton( 'Italic'	, FCKLang.Italic, null, null, false, true, 21 ) ; break ;
+		case 'Underline'		: oItem = new FCKToolbarButton( 'Underline'	, FCKLang.Underline, null, null, false, true, 22 ) ; break ;
+		case 'StrikeThrough'	: oItem = new FCKToolbarButton( 'StrikeThrough'	, FCKLang.StrikeThrough, null, null, false, true, 23 ) ; break ;
+		case 'Subscript'		: oItem = new FCKToolbarButton( 'Subscript'		, FCKLang.Subscript, null, null, false, true, 24 ) ; break ;
+		case 'Superscript'		: oItem = new FCKToolbarButton( 'Superscript'	, FCKLang.Superscript, null, null, false, true, 25 ) ; break ;
+
+		case 'OrderedList'		: oItem = new FCKToolbarButton( 'InsertOrderedList'		, FCKLang.NumberedListLbl, FCKLang.NumberedList, null, false, true, 26 ) ; break ;
+		case 'UnorderedList'	: oItem = new FCKToolbarButton( 'InsertUnorderedList'	, FCKLang.BulletedListLbl, FCKLang.BulletedList, null, false, true, 27 ) ; break ;
+		case 'Outdent'			: oItem = new FCKToolbarButton( 'Outdent'	, FCKLang.DecreaseIndent, null, null, false, true, 28 ) ; break ;
+		case 'Indent'			: oItem = new FCKToolbarButton( 'Indent'	, FCKLang.IncreaseIndent, null, null, false, true, 29 ) ; break ;
+		case 'Blockquote'			: oItem = new FCKToolbarButton( 'Blockquote'	, FCKLang.Blockquote, null, null, false, true, 73 ) ; break ;
+
+		case 'Link'				: oItem = new FCKToolbarButton( 'Link'		, FCKLang.InsertLinkLbl, FCKLang.InsertLink, null, false, true, 34 ) ; break ;
+		case 'Unlink'			: oItem = new FCKToolbarButton( 'Unlink'	, FCKLang.RemoveLink, null, null, false, true, 35 ) ; break ;
+		case 'Anchor'			: oItem = new FCKToolbarButton( 'Anchor'	, FCKLang.Anchor, null, null, null, null, 36 ) ; break ;
+
+		case 'Image'			: oItem = new FCKToolbarButton( 'Image'			, FCKLang.InsertImageLbl, FCKLang.InsertImage, null, false, true, 37 ) ; break ;
+		case 'Flash'			: oItem = new FCKToolbarButton( 'Flash'			, FCKLang.InsertFlashLbl, FCKLang.InsertFlash, null, false, true, 38 ) ; break ;
+		case 'Table'			: oItem = new FCKToolbarButton( 'Table'			, FCKLang.InsertTableLbl, FCKLang.InsertTable, null, false, true, 39 ) ; break ;
+		case 'SpecialChar'		: oItem = new FCKToolbarButton( 'SpecialChar'	, FCKLang.InsertSpecialCharLbl, FCKLang.InsertSpecialChar, null, false, true, 42 ) ; break ;
+		case 'Smiley'			: oItem = new FCKToolbarButton( 'Smiley'		, FCKLang.InsertSmileyLbl, FCKLang.InsertSmiley, null, false, true, 41 ) ; break ;
+		case 'PageBreak'		: oItem = new FCKToolbarButton( 'PageBreak'		, FCKLang.PageBreakLbl, FCKLang.PageBreak, null, false, true, 43 ) ; break ;
+
+		case 'Rule'				: oItem = new FCKToolbarButton( 'Rule'			, FCKLang.InsertLineLbl, FCKLang.InsertLine, null, false, true, 40 ) ; break ;
+
+		case 'JustifyLeft'		: oItem = new FCKToolbarButton( 'JustifyLeft'	, FCKLang.LeftJustify, null, null, false, true, 30 ) ; break ;
+		case 'JustifyCenter'	: oItem = new FCKToolbarButton( 'JustifyCenter'	, FCKLang.CenterJustify, null, null, false, true, 31 ) ; break ;
+		case 'JustifyRight'		: oItem = new FCKToolbarButton( 'JustifyRight'	, FCKLang.RightJustify, null, null, false, true, 32 ) ; break ;
+		case 'JustifyFull'		: oItem = new FCKToolbarButton( 'JustifyFull'	, FCKLang.BlockJustify, null, null, false, true, 33 ) ; break ;
+
+		case 'Style'			: oItem = new FCKToolbarStyleCombo() ; break ;
+		case 'FontName'			: oItem = new FCKToolbarFontsCombo() ; break ;
+		case 'FontSize'			: oItem = new FCKToolbarFontSizeCombo() ; break ;
+		case 'FontFormat'		: oItem = new FCKToolbarFontFormatCombo() ; break ;
+
+		case 'TextColor'		: oItem = new FCKToolbarPanelButton( 'TextColor', FCKLang.TextColor, null, null, 45 ) ; break ;
+		case 'BGColor'			: oItem = new FCKToolbarPanelButton( 'BGColor'	, FCKLang.BGColor, null, null, 46 ) ; break ;
+
+		case 'Find'				: oItem = new FCKToolbarButton( 'Find'		, FCKLang.Find, null, null, null, null, 16 ) ; break ;
+		case 'Replace'			: oItem = new FCKToolbarButton( 'Replace'	, FCKLang.Replace, null, null, null, null, 17 ) ; break ;
+
+		case 'Form'				: oItem = new FCKToolbarButton( 'Form'			, FCKLang.Form, null, null, null, null, 48 ) ; break ;
+		case 'Checkbox'			: oItem = new FCKToolbarButton( 'Checkbox'		, FCKLang.Checkbox, null, null, null, null, 49 ) ; break ;
+		case 'Radio'			: oItem = new FCKToolbarButton( 'Radio'			, FCKLang.RadioButton, null, null, null, null, 50 ) ; break ;
+		case 'TextField'		: oItem = new FCKToolbarButton( 'TextField'		, FCKLang.TextField, null, null, null, null, 51 ) ; break ;
+		case 'Textarea'			: oItem = new FCKToolbarButton( 'Textarea'		, FCKLang.Textarea, null, null, null, null, 52 ) ; break ;
+		case 'HiddenField'		: oItem = new FCKToolbarButton( 'HiddenField'	, FCKLang.HiddenField, null, null, null, null, 56 ) ; break ;
+		case 'Button'			: oItem = new FCKToolbarButton( 'Button'		, FCKLang.Button, null, null, null, null, 54 ) ; break ;
+		case 'Select'			: oItem = new FCKToolbarButton( 'Select'		, FCKLang.SelectionField, null, null, null, null, 53 ) ; break ;
+		case 'ImageButton'		: oItem = new FCKToolbarButton( 'ImageButton'	, FCKLang.ImageButton, null, null, null, null, 55 ) ; break ;
+		case 'ShowBlocks'		: oItem = new FCKToolbarButton( 'ShowBlocks'	, FCKLang.ShowBlocks, null, null, null, true, 72 ) ; break ;
+
+		default:
+			alert( FCKLang.UnknownToolbarItem.replace( /%1/g, itemName ) ) ;
+			return null ;
+	}
+
+	FCKToolbarItems.LoadedItems[ itemName ] = oItem ;
+
+	return oItem ;
+}


Property changes on: announcement/trunk/src/main/webapp/fckeditor/editor/_source/internals/fcktoolbaritems.js
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/webapp/fckeditor/editor/_source/internals/fcktoolbarset.js
===================================================================
--- announcement/trunk/src/main/webapp/fckeditor/editor/_source/internals/fcktoolbarset.js	                        (rev 0)
+++ announcement/trunk/src/main/webapp/fckeditor/editor/_source/internals/fcktoolbarset.js	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,399 @@
+/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2008 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * Defines the FCKToolbarSet object that is used to load and draw the
+ * toolbar.
+ */
+
+function FCKToolbarSet_Create( overhideLocation )
+{
+	var oToolbarSet ;
+
+	var sLocation = overhideLocation || FCKConfig.ToolbarLocation ;
+	switch ( sLocation )
+	{
+		case 'In' :
+			document.getElementById( 'xToolbarRow' ).style.display = '' ;
+			oToolbarSet = new FCKToolbarSet( document ) ;
+			break ;
+		case 'None' :
+			oToolbarSet = new FCKToolbarSet( document ) ;
+			break ;
+
+//		case 'OutTop' :
+			// Not supported.
+
+		default :
+			FCK.Events.AttachEvent( 'OnBlur', FCK_OnBlur ) ;
+			FCK.Events.AttachEvent( 'OnFocus', FCK_OnFocus ) ;
+
+			var eToolbarTarget ;
+
+			// Out:[TargetWindow]([TargetId])
+			var oOutMatch = sLocation.match( /^Out:(.+)\((\w+)\)$/ ) ;
+			if ( oOutMatch )
+			{
+				if ( FCKBrowserInfo.IsAIR )
+					FCKAdobeAIR.ToolbarSet_GetOutElement( window, oOutMatch ) ;
+				else
+					eToolbarTarget = eval( 'parent.' + oOutMatch[1] ).document.getElementById( oOutMatch[2] ) ;
+			}
+			else
+			{
+				// Out:[TargetId]
+				oOutMatch = sLocation.match( /^Out:(\w+)$/ ) ;
+				if ( oOutMatch )
+					eToolbarTarget = parent.document.getElementById( oOutMatch[1] ) ;
+			}
+
+			if ( !eToolbarTarget )
+			{
+				alert( 'Invalid value for "ToolbarLocation"' ) ;
+				return arguments.callee( 'In' );
+			}
+
+			// If it is a shared toolbar, it may be already available in the target element.
+			oToolbarSet = eToolbarTarget.__FCKToolbarSet ;
+			if ( oToolbarSet )
+				break ;
+
+			// Create the IFRAME that will hold the toolbar inside the target element.
+			var eToolbarIFrame = FCKTools.GetElementDocument( eToolbarTarget ).createElement( 'iframe' ) ;
+			eToolbarIFrame.src = 'javascript:void(0)' ;
+			eToolbarIFrame.frameBorder = 0 ;
+			eToolbarIFrame.width = '100%' ;
+			eToolbarIFrame.height = '10' ;
+			eToolbarTarget.appendChild( eToolbarIFrame ) ;
+			eToolbarIFrame.unselectable = 'on' ;
+
+			// Write the basic HTML for the toolbar (copy from the editor main page).
+			var eTargetDocument = eToolbarIFrame.contentWindow.document ;
+
+			// Workaround for Safari 12256. Ticket #63
+			var sBase = '' ;
+			if ( FCKBrowserInfo.IsSafari )
+				sBase = '<base href="' + window.document.location + '">' ;
+
+			// Initialize the IFRAME document body.
+			eTargetDocument.open() ;
+			eTargetDocument.write( '<html><head>' + sBase + '<script type="text/javascript"> var adjust = function() { window.frameElement.height = document.body.scrollHeight ; }; '
+					+ 'window.onresize = window.onload = '
+					+ 'function(){'		// poll scrollHeight until it no longer changes for 1 sec.
+					+ 'var timer = null;'
+					+ 'var lastHeight = -1;'
+					+ 'var lastChange = 0;'
+					+ 'var poller = function(){'
+					+ 'var currentHeight = document.body.scrollHeight || 0;'
+					+ 'var currentTime = (new Date()).getTime();'
+					+ 'if (currentHeight != lastHeight){'
+					+ 'lastChange = currentTime;'
+					+ 'adjust();'
+					+ 'lastHeight = document.body.scrollHeight;'
+					+ '}'
+					+ 'if (lastChange < currentTime - 1000) clearInterval(timer);'
+					+ '};'
+					+ 'timer = setInterval(poller, 100);'
+					+ '}'
+					+ '</script></head><body style="overflow: hidden">' + document.getElementById( 'xToolbarSpace' ).innerHTML + '</body></html>' ) ;
+			eTargetDocument.close() ;
+
+			if( FCKBrowserInfo.IsAIR )
+				FCKAdobeAIR.ToolbarSet_InitOutFrame( eTargetDocument ) ;
+
+			FCKTools.AddEventListener( eTargetDocument, 'contextmenu', FCKTools.CancelEvent ) ;
+
+			// Load external resources (must be done here, otherwise Firefox will not
+			// have the document DOM ready to be used right away.
+			FCKTools.AppendStyleSheet( eTargetDocument, FCKConfig.SkinEditorCSS ) ;
+
+			oToolbarSet = eToolbarTarget.__FCKToolbarSet = new FCKToolbarSet( eTargetDocument ) ;
+			oToolbarSet._IFrame = eToolbarIFrame ;
+
+			if ( FCK.IECleanup )
+				FCK.IECleanup.AddItem( eToolbarTarget, FCKToolbarSet_Target_Cleanup ) ;
+	}
+
+	oToolbarSet.CurrentInstance = FCK ;
+	if ( !oToolbarSet.ToolbarItems )
+		oToolbarSet.ToolbarItems = FCKToolbarItems ;
+
+	FCK.AttachToOnSelectionChange( oToolbarSet.RefreshItemsState ) ;
+
+	return oToolbarSet ;
+}
+
+function FCK_OnBlur( editorInstance )
+{
+	var eToolbarSet = editorInstance.ToolbarSet ;
+
+	if ( eToolbarSet.CurrentInstance == editorInstance )
+		eToolbarSet.Disable() ;
+}
+
+function FCK_OnFocus( editorInstance )
+{
+	var oToolbarset = editorInstance.ToolbarSet ;
+	var oInstance = editorInstance || FCK ;
+
+	// Unregister the toolbar window from the current instance.
+	oToolbarset.CurrentInstance.FocusManager.RemoveWindow( oToolbarset._IFrame.contentWindow ) ;
+
+	// Set the new current instance.
+	oToolbarset.CurrentInstance = oInstance ;
+
+	// Register the toolbar window in the current instance.
+	oInstance.FocusManager.AddWindow( oToolbarset._IFrame.contentWindow, true ) ;
+
+	oToolbarset.Enable() ;
+}
+
+function FCKToolbarSet_Cleanup()
+{
+	this._TargetElement = null ;
+	this._IFrame = null ;
+}
+
+function FCKToolbarSet_Target_Cleanup()
+{
+	this.__FCKToolbarSet = null ;
+}
+
+var FCKToolbarSet = function( targetDocument )
+{
+	this._Document = targetDocument ;
+
+	// Get the element that will hold the elements structure.
+	this._TargetElement	= targetDocument.getElementById( 'xToolbar' ) ;
+
+	// Setup the expand and collapse handlers.
+	var eExpandHandle	= targetDocument.getElementById( 'xExpandHandle' ) ;
+	var eCollapseHandle	= targetDocument.getElementById( 'xCollapseHandle' ) ;
+
+	eExpandHandle.title		= FCKLang.ToolbarExpand ;
+	FCKTools.AddEventListener( eExpandHandle, 'click', FCKToolbarSet_Expand_OnClick ) ;
+
+	eCollapseHandle.title	= FCKLang.ToolbarCollapse ;
+	FCKTools.AddEventListener( eCollapseHandle, 'click', FCKToolbarSet_Collapse_OnClick ) ;
+
+	// Set the toolbar state at startup.
+	if ( !FCKConfig.ToolbarCanCollapse || FCKConfig.ToolbarStartExpanded )
+		this.Expand() ;
+	else
+		this.Collapse() ;
+
+	// Enable/disable the collapse handler
+	eCollapseHandle.style.display = FCKConfig.ToolbarCanCollapse ? '' : 'none' ;
+
+	if ( FCKConfig.ToolbarCanCollapse )
+		eCollapseHandle.style.display = '' ;
+	else
+		targetDocument.getElementById( 'xTBLeftBorder' ).style.display = '' ;
+
+	// Set the default properties.
+	this.Toolbars = new Array() ;
+	this.IsLoaded = false ;
+
+	if ( FCK.IECleanup )
+		FCK.IECleanup.AddItem( this, FCKToolbarSet_Cleanup ) ;
+}
+
+function FCKToolbarSet_Expand_OnClick()
+{
+	FCK.ToolbarSet.Expand() ;
+}
+
+function FCKToolbarSet_Collapse_OnClick()
+{
+	FCK.ToolbarSet.Collapse() ;
+}
+
+FCKToolbarSet.prototype.Expand = function()
+{
+	this._ChangeVisibility( false ) ;
+}
+
+FCKToolbarSet.prototype.Collapse = function()
+{
+	this._ChangeVisibility( true ) ;
+}
+
+FCKToolbarSet.prototype._ChangeVisibility = function( collapse )
+{
+	this._Document.getElementById( 'xCollapsed' ).style.display = collapse ? '' : 'none' ;
+	this._Document.getElementById( 'xExpanded' ).style.display = collapse ? 'none' : '' ;
+
+	if ( FCKBrowserInfo.IsGecko )
+	{
+		// I had to use "setTimeout" because Gecko was not responding in a right
+		// way when calling window.onresize() directly.
+		FCKTools.RunFunction( window.onresize ) ;
+	}
+}
+
+FCKToolbarSet.prototype.Load = function( toolbarSetName )
+{
+	this.Name = toolbarSetName ;
+
+	this.Items = new Array() ;
+
+	// Reset the array of toolbar items that are active only on WYSIWYG mode.
+	this.ItemsWysiwygOnly = new Array() ;
+
+	// Reset the array of toolbar items that are sensitive to the cursor position.
+	this.ItemsContextSensitive = new Array() ;
+
+	// Cleanup the target element.
+	this._TargetElement.innerHTML = '' ;
+
+	var ToolbarSet = FCKConfig.ToolbarSets[toolbarSetName] ;
+
+	if ( !ToolbarSet )
+	{
+		alert( FCKLang.UnknownToolbarSet.replace( /%1/g, toolbarSetName ) ) ;
+		return ;
+	}
+
+	this.Toolbars = new Array() ;
+
+	for ( var x = 0 ; x < ToolbarSet.length ; x++ )
+	{
+		var oToolbarItems = ToolbarSet[x] ;
+
+		// If the configuration for the toolbar is missing some element or has any extra comma
+		// this item won't be valid, so skip it and keep on processing.
+		if ( !oToolbarItems )
+			continue ;
+
+		var oToolbar ;
+
+		if ( typeof( oToolbarItems ) == 'string' )
+		{
+			if ( oToolbarItems == '/' )
+				oToolbar = new FCKToolbarBreak() ;
+		}
+		else
+		{
+			oToolbar = new FCKToolbar() ;
+
+			for ( var j = 0 ; j < oToolbarItems.length ; j++ )
+			{
+				var sItem = oToolbarItems[j] ;
+
+				if ( sItem == '-')
+					oToolbar.AddSeparator() ;
+				else
+				{
+					var oItem = FCKToolbarItems.GetItem( sItem ) ;
+					if ( oItem )
+					{
+						oToolbar.AddItem( oItem ) ;
+
+						this.Items.push( oItem ) ;
+
+						if ( !oItem.SourceView )
+							this.ItemsWysiwygOnly.push( oItem ) ;
+
+						if ( oItem.ContextSensitive )
+							this.ItemsContextSensitive.push( oItem ) ;
+					}
+				}
+			}
+
+			// oToolbar.AddTerminator() ;
+		}
+
+		oToolbar.Create( this._TargetElement ) ;
+
+		this.Toolbars[ this.Toolbars.length ] = oToolbar ;
+	}
+
+	FCKTools.DisableSelection( this._Document.getElementById( 'xCollapseHandle' ).parentNode ) ;
+
+	if ( FCK.Status != FCK_STATUS_COMPLETE )
+		FCK.Events.AttachEvent( 'OnStatusChange', this.RefreshModeState ) ;
+	else
+		this.RefreshModeState() ;
+
+	this.IsLoaded = true ;
+	this.IsEnabled = true ;
+
+	FCKTools.RunFunction( this.OnLoad ) ;
+}
+
+FCKToolbarSet.prototype.Enable = function()
+{
+	if ( this.IsEnabled )
+		return ;
+
+	this.IsEnabled = true ;
+
+	var aItems = this.Items ;
+	for ( var i = 0 ; i < aItems.length ; i++ )
+		aItems[i].RefreshState() ;
+}
+
+FCKToolbarSet.prototype.Disable = function()
+{
+	if ( !this.IsEnabled )
+		return ;
+
+	this.IsEnabled = false ;
+
+	var aItems = this.Items ;
+	for ( var i = 0 ; i < aItems.length ; i++ )
+		aItems[i].Disable() ;
+}
+
+FCKToolbarSet.prototype.RefreshModeState = function( editorInstance )
+{
+	if ( FCK.Status != FCK_STATUS_COMPLETE )
+		return ;
+
+	var oToolbarSet = editorInstance ? editorInstance.ToolbarSet : this ;
+	var aItems = oToolbarSet.ItemsWysiwygOnly ;
+
+	if ( FCK.EditMode == FCK_EDITMODE_WYSIWYG )
+	{
+		// Enable all buttons that are available on WYSIWYG mode only.
+		for ( var i = 0 ; i < aItems.length ; i++ )
+			aItems[i].Enable() ;
+
+		// Refresh the buttons state.
+		oToolbarSet.RefreshItemsState( editorInstance ) ;
+	}
+	else
+	{
+		// Refresh the buttons state.
+		oToolbarSet.RefreshItemsState( editorInstance ) ;
+
+		// Disable all buttons that are available on WYSIWYG mode only.
+		for ( var j = 0 ; j < aItems.length ; j++ )
+			aItems[j].Disable() ;
+	}
+}
+
+FCKToolbarSet.prototype.RefreshItemsState = function( editorInstance )
+{
+
+	var aItems = ( editorInstance ? editorInstance.ToolbarSet : this ).ItemsContextSensitive ;
+
+	for ( var i = 0 ; i < aItems.length ; i++ )
+		aItems[i].RefreshState() ;
+}


Property changes on: announcement/trunk/src/main/webapp/fckeditor/editor/_source/internals/fcktoolbarset.js
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/webapp/fckeditor/editor/_source/internals/fcktools.js
===================================================================
--- announcement/trunk/src/main/webapp/fckeditor/editor/_source/internals/fcktools.js	                        (rev 0)
+++ announcement/trunk/src/main/webapp/fckeditor/editor/_source/internals/fcktools.js	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,749 @@
+/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2008 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * Utility functions.
+ */
+
+var FCKTools = new Object() ;
+
+FCKTools.CreateBogusBR = function( targetDocument )
+{
+	var eBR = targetDocument.createElement( 'br' ) ;
+//	eBR.setAttribute( '_moz_editor_bogus_node', 'TRUE' ) ;
+	eBR.setAttribute( 'type', '_moz' ) ;
+	return eBR ;
+}
+
+/**
+ * Fixes relative URL entries defined inside CSS styles by appending a prefix
+ * to them.
+ * @param (String) cssStyles The CSS styles definition possibly containing url()
+ *		paths.
+ * @param (String) urlFixPrefix The prefix to append to relative URLs.
+ */
+FCKTools.FixCssUrls = function( urlFixPrefix, cssStyles )
+{
+	if ( !urlFixPrefix || urlFixPrefix.length == 0 )
+		return cssStyles ;
+
+	return cssStyles.replace( /url\s*\(([\s'"]*)(.*?)([\s"']*)\)/g, function( match, opener, path, closer )
+		{
+			if ( /^\/|^\w?:/.test( path ) )
+				return match ;
+			else
+				return 'url(' + opener + urlFixPrefix + path + closer + ')' ;
+		} ) ;
+}
+
+FCKTools._GetUrlFixedCss = function( cssStyles, urlFixPrefix )
+{
+	var match = cssStyles.match( /^([^|]+)\|([\s\S]*)/ ) ;
+
+	if ( match )
+		return FCKTools.FixCssUrls( match[1], match[2] ) ;
+	else
+		return cssStyles ;
+}
+
+/**
+ * Appends a <link css> or <style> element to the document.
+ * @param (Object) documentElement The DOM document object to which append the
+ *		stylesheet.
+ * @param (Variant) cssFileOrDef A String pointing to the CSS file URL or an
+ *		Array with many CSS file URLs or the CSS definitions for the <style>
+ *		element.
+ * @return {Array} An array containing all elements created in the target
+ *		document. It may include <link> or <style> elements, depending on the
+ *		value passed with cssFileOrDef.
+ */
+FCKTools.AppendStyleSheet = function( domDocument, cssFileOrArrayOrDef )
+{
+	if ( !cssFileOrArrayOrDef )
+		return [] ;
+
+	if ( typeof( cssFileOrArrayOrDef ) == 'string' )
+	{
+		// Test if the passed argument is an URL.
+		if ( /[\\\/\.][^{}]*$/.test( cssFileOrArrayOrDef ) )
+		{
+			// The string may have several URLs separated by comma.
+			return this.AppendStyleSheet( domDocument, cssFileOrArrayOrDef.split(',') ) ;
+		}
+		else
+			return [ this.AppendStyleString( domDocument, FCKTools._GetUrlFixedCss( cssFileOrArrayOrDef ) ) ] ;
+	}
+	else
+	{
+		var styles = [] ;
+		for ( var i = 0 ; i < cssFileOrArrayOrDef.length ; i++ )
+			styles.push( this._AppendStyleSheet( domDocument, cssFileOrArrayOrDef[i] ) ) ;
+		return styles ;
+	}
+}
+
+FCKTools.GetStyleHtml = (function()
+{
+	var getStyle = function( styleDef, markTemp )
+	{
+		if ( styleDef.length == 0 )
+			return '' ;
+
+		var temp = markTemp ? ' _fcktemp="true"' : '' ;
+		return '<' + 'style type="text/css"' + temp + '>' + styleDef + '<' + '/style>' ;
+	}
+
+	var getLink = function( cssFileUrl, markTemp )
+	{
+		if ( cssFileUrl.length == 0 )
+			return '' ;
+
+		var temp = markTemp ? ' _fcktemp="true"' : '' ;
+		return '<' + 'link href="' + cssFileUrl + '" type="text/css" rel="stylesheet" ' + temp + '/>' ;
+	}
+
+	return function( cssFileOrArrayOrDef, markTemp )
+	{
+		if ( !cssFileOrArrayOrDef )
+			return '' ;
+
+		if ( typeof( cssFileOrArrayOrDef ) == 'string' )
+		{
+			// Test if the passed argument is an URL.
+			if ( /[\\\/\.][^{}]*$/.test( cssFileOrArrayOrDef ) )
+			{
+				// The string may have several URLs separated by comma.
+				return this.GetStyleHtml( cssFileOrArrayOrDef.split(','), markTemp ) ;
+			}
+			else
+				return getStyle( this._GetUrlFixedCss( cssFileOrArrayOrDef ), markTemp ) ;
+		}
+		else
+		{
+			var html = '' ;
+
+			for ( var i = 0 ; i < cssFileOrArrayOrDef.length ; i++ )
+				html += getLink( cssFileOrArrayOrDef[i], markTemp ) ;
+
+			return html ;
+		}
+	}
+})() ;
+
+FCKTools.GetElementDocument = function ( element )
+{
+	return element.ownerDocument || element.document ;
+}
+
+// Get the window object where the element is placed in.
+FCKTools.GetElementWindow = function( element )
+{
+	return this.GetDocumentWindow( this.GetElementDocument( element ) ) ;
+}
+
+FCKTools.GetDocumentWindow = function( document )
+{
+	// With Safari, there is not way to retrieve the window from the document, so we must fix it.
+	if ( FCKBrowserInfo.IsSafari && !document.parentWindow )
+		this.FixDocumentParentWindow( window.top ) ;
+
+	return document.parentWindow || document.defaultView ;
+}
+
+/*
+	This is a Safari specific function that fix the reference to the parent
+	window from the document object.
+*/
+FCKTools.FixDocumentParentWindow = function( targetWindow )
+{
+	if ( targetWindow.document )
+		targetWindow.document.parentWindow = targetWindow ;
+
+	for ( var i = 0 ; i < targetWindow.frames.length ; i++ )
+		FCKTools.FixDocumentParentWindow( targetWindow.frames[i] ) ;
+}
+
+FCKTools.HTMLEncode = function( text )
+{
+	if ( !text )
+		return '' ;
+
+	text = text.replace( /&/g, '&amp;' ) ;
+	text = text.replace( /</g, '&lt;' ) ;
+	text = text.replace( />/g, '&gt;' ) ;
+
+	return text ;
+}
+
+FCKTools.HTMLDecode = function( text )
+{
+	if ( !text )
+		return '' ;
+
+	text = text.replace( /&gt;/g, '>' ) ;
+	text = text.replace( /&lt;/g, '<' ) ;
+	text = text.replace( /&amp;/g, '&' ) ;
+
+	return text ;
+}
+
+FCKTools._ProcessLineBreaksForPMode = function( oEditor, text, liState, node, strArray )
+{
+	var closeState = 0 ;
+	var blockStartTag = "<p>" ;
+	var blockEndTag = "</p>" ;
+	var lineBreakTag = "<br />" ;
+	if ( liState )
+	{
+		blockStartTag = "<li>" ;
+		blockEndTag = "</li>" ;
+		closeState = 1 ;
+	}
+
+	// Are we currently inside a <p> tag now?
+	// If yes, close it at the next double line break.
+	while ( node && node != oEditor.FCK.EditorDocument.body )
+	{
+		if ( node.tagName.toLowerCase() == 'p' )
+		{
+			closeState = 1 ;
+			break;
+		}
+		node = node.parentNode ;
+	}
+
+	for ( var i = 0 ; i < text.length ; i++ )
+	{
+		var c = text.charAt( i ) ;
+		if ( c == '\r' )
+			continue ;
+
+		if ( c != '\n' )
+		{
+			strArray.push( c ) ;
+			continue ;
+		}
+
+		// Now we have encountered a line break.
+		// Check if the next character is also a line break.
+		var n = text.charAt( i + 1 ) ;
+		if ( n == '\r' )
+		{
+			i++ ;
+			n = text.charAt( i + 1 ) ;
+		}
+		if ( n == '\n' )
+		{
+			i++ ;	// ignore next character - we have already processed it.
+			if ( closeState )
+				strArray.push( blockEndTag ) ;
+			strArray.push( blockStartTag ) ;
+			closeState = 1 ;
+		}
+		else
+			strArray.push( lineBreakTag ) ;
+	}
+}
+
+FCKTools._ProcessLineBreaksForDivMode = function( oEditor, text, liState, node, strArray )
+{
+	var closeState = 0 ;
+	var blockStartTag = "<div>" ;
+	var blockEndTag = "</div>" ;
+	if ( liState )
+	{
+		blockStartTag = "<li>" ;
+		blockEndTag = "</li>" ;
+		closeState = 1 ;
+	}
+
+	// Are we currently inside a <div> tag now?
+	// If yes, close it at the next double line break.
+	while ( node && node != oEditor.FCK.EditorDocument.body )
+	{
+		if ( node.tagName.toLowerCase() == 'div' )
+		{
+			closeState = 1 ;
+			break ;
+		}
+		node = node.parentNode ;
+	}
+
+	for ( var i = 0 ; i < text.length ; i++ )
+	{
+		var c = text.charAt( i ) ;
+		if ( c == '\r' )
+			continue ;
+
+		if ( c != '\n' )
+		{
+			strArray.push( c ) ;
+			continue ;
+		}
+
+		if ( closeState )
+		{
+			if ( strArray[ strArray.length - 1 ] == blockStartTag )
+			{
+				// A div tag must have some contents inside for it to be visible.
+				strArray.push( "&nbsp;" ) ;
+			}
+			strArray.push( blockEndTag ) ;
+		}
+		strArray.push( blockStartTag ) ;
+		closeState = 1 ;
+	}
+	if ( closeState )
+		strArray.push( blockEndTag ) ;
+}
+
+FCKTools._ProcessLineBreaksForBrMode = function( oEditor, text, liState, node, strArray )
+{
+	var closeState = 0 ;
+	var blockStartTag = "<br />" ;
+	var blockEndTag = "" ;
+	if ( liState )
+	{
+		blockStartTag = "<li>" ;
+		blockEndTag = "</li>" ;
+		closeState = 1 ;
+	}
+
+	for ( var i = 0 ; i < text.length ; i++ )
+	{
+		var c = text.charAt( i ) ;
+		if ( c == '\r' )
+			continue ;
+
+		if ( c != '\n' )
+		{
+			strArray.push( c ) ;
+			continue ;
+		}
+
+		if ( closeState && blockEndTag.length )
+			strArray.push ( blockEndTag ) ;
+		strArray.push( blockStartTag ) ;
+		closeState = 1 ;
+	}
+}
+
+FCKTools.ProcessLineBreaks = function( oEditor, oConfig, text )
+{
+	var enterMode = oConfig.EnterMode.toLowerCase() ;
+	var strArray = [] ;
+
+	// Is the caret or selection inside an <li> tag now?
+	var liState = 0 ;
+	var range = new oEditor.FCKDomRange( oEditor.FCK.EditorWindow ) ;
+	range.MoveToSelection() ;
+	var node = range._Range.startContainer ;
+	while ( node && node.nodeType != 1 )
+		node = node.parentNode ;
+	if ( node && node.tagName.toLowerCase() == 'li' )
+		liState = 1 ;
+
+	if ( enterMode == 'p' )
+		this._ProcessLineBreaksForPMode( oEditor, text, liState, node, strArray ) ;
+	else if ( enterMode == 'div' )
+		this._ProcessLineBreaksForDivMode( oEditor, text, liState, node, strArray ) ;
+	else if ( enterMode == 'br' )
+		this._ProcessLineBreaksForBrMode( oEditor, text, liState, node, strArray ) ;
+	return strArray.join( "" ) ;
+}
+
+/**
+ * Adds an option to a SELECT element.
+ */
+FCKTools.AddSelectOption = function( selectElement, optionText, optionValue )
+{
+	var oOption = FCKTools.GetElementDocument( selectElement ).createElement( "OPTION" ) ;
+
+	oOption.text	= optionText ;
+	oOption.value	= optionValue ;
+
+	selectElement.options.add(oOption) ;
+
+	return oOption ;
+}
+
+FCKTools.RunFunction = function( func, thisObject, paramsArray, timerWindow )
+{
+	if ( func )
+		this.SetTimeout( func, 0, thisObject, paramsArray, timerWindow ) ;
+}
+
+FCKTools.SetTimeout = function( func, milliseconds, thisObject, paramsArray, timerWindow )
+{
+	return ( timerWindow || window ).setTimeout(
+		function()
+		{
+			if ( paramsArray )
+				func.apply( thisObject, [].concat( paramsArray ) ) ;
+			else
+				func.apply( thisObject ) ;
+		},
+		milliseconds ) ;
+}
+
+FCKTools.SetInterval = function( func, milliseconds, thisObject, paramsArray, timerWindow )
+{
+	return ( timerWindow || window ).setInterval(
+		function()
+		{
+			func.apply( thisObject, paramsArray || [] ) ;
+		},
+		milliseconds ) ;
+}
+
+FCKTools.ConvertStyleSizeToHtml = function( size )
+{
+	return size.EndsWith( '%' ) ? size : parseInt( size, 10 ) ;
+}
+
+FCKTools.ConvertHtmlSizeToStyle = function( size )
+{
+	return size.EndsWith( '%' ) ? size : ( size + 'px' ) ;
+}
+
+// START iCM MODIFICATIONS
+// Amended to accept a list of one or more ascensor tag names
+// Amended to check the element itself before working back up through the parent hierarchy
+FCKTools.GetElementAscensor = function( element, ascensorTagNames )
+{
+//	var e = element.parentNode ;
+	var e = element ;
+	var lstTags = "," + ascensorTagNames.toUpperCase() + "," ;
+
+	while ( e )
+	{
+		if ( lstTags.indexOf( "," + e.nodeName.toUpperCase() + "," ) != -1 )
+			return e ;
+
+		e = e.parentNode ;
+	}
+	return null ;
+}
+// END iCM MODIFICATIONS
+
+FCKTools.CreateEventListener = function( func, params )
+{
+	var f = function()
+	{
+		var aAllParams = [] ;
+
+		for ( var i = 0 ; i < arguments.length ; i++ )
+			aAllParams.push( arguments[i] ) ;
+
+		func.apply( this, aAllParams.concat( params ) ) ;
+	}
+
+	return f ;
+}
+
+FCKTools.IsStrictMode = function( document )
+{
+	// There is no compatMode in Safari, but it seams that it always behave as
+	// CSS1Compat, so let's assume it as the default for that browser.
+	return ( 'CSS1Compat' == ( document.compatMode || ( FCKBrowserInfo.IsSafari ? 'CSS1Compat' : null ) ) ) ;
+}
+
+// Transforms a "arguments" object to an array.
+FCKTools.ArgumentsToArray = function( args, startIndex, maxLength )
+{
+	startIndex = startIndex || 0 ;
+	maxLength = maxLength || args.length ;
+
+	var argsArray = new Array() ;
+
+	for ( var i = startIndex ; i < startIndex + maxLength && i < args.length ; i++ )
+		argsArray.push( args[i] ) ;
+
+	return argsArray ;
+}
+
+FCKTools.CloneObject = function( sourceObject )
+{
+	var fCloneCreator = function() {} ;
+	fCloneCreator.prototype = sourceObject ;
+	return new fCloneCreator ;
+}
+
+// Appends a bogus <br> at the end of the element, if not yet available.
+FCKTools.AppendBogusBr = function( element )
+{
+	if ( !element )
+		return ;
+
+	var eLastChild = this.GetLastItem( element.getElementsByTagName('br') ) ;
+
+	if ( !eLastChild || ( eLastChild.getAttribute( 'type', 2 ) != '_moz' && eLastChild.getAttribute( '_moz_dirty' ) == null ) )
+	{
+		var doc = this.GetElementDocument( element ) ;
+
+		if ( FCKBrowserInfo.IsOpera )
+			element.appendChild( doc.createTextNode('') ) ;
+		else
+			element.appendChild( this.CreateBogusBR( doc ) ) ;
+	}
+}
+
+FCKTools.GetLastItem = function( list )
+{
+	if ( list.length > 0 )
+		return list[ list.length - 1 ] ;
+
+	return null ;
+}
+
+FCKTools.GetDocumentPosition = function( w, node )
+{
+	var x = 0 ;
+	var y = 0 ;
+	var curNode = node ;
+	var prevNode = null ;
+	var curWindow = FCKTools.GetElementWindow( curNode ) ;
+	while ( curNode && !( curWindow == w && ( curNode == w.document.body || curNode == w.document.documentElement ) ) )
+	{
+		x += curNode.offsetLeft - curNode.scrollLeft ;
+		y += curNode.offsetTop - curNode.scrollTop ;
+
+		if ( ! FCKBrowserInfo.IsOpera )
+		{
+			var scrollNode = prevNode ;
+			while ( scrollNode && scrollNode != curNode )
+			{
+				x -= scrollNode.scrollLeft ;
+				y -= scrollNode.scrollTop ;
+				scrollNode = scrollNode.parentNode ;
+			}
+		}
+
+		prevNode = curNode ;
+		if ( curNode.offsetParent )
+			curNode = curNode.offsetParent ;
+		else
+		{
+			if ( curWindow != w )
+			{
+				curNode = curWindow.frameElement ;
+				prevNode = null ;
+				if ( curNode )
+					curWindow = curNode.contentWindow.parent ;
+			}
+			else
+				curNode = null ;
+		}
+	}
+
+	// document.body is a special case when it comes to offsetTop and offsetLeft values.
+	// 1. It matters if document.body itself is a positioned element;
+	// 2. It matters is when we're in IE and the element has no positioned ancestor.
+	// Otherwise the values should be ignored.
+	if ( FCKDomTools.GetCurrentElementStyle( w.document.body, 'position') != 'static'
+			|| ( FCKBrowserInfo.IsIE && FCKDomTools.GetPositionedAncestor( node ) == null ) )
+	{
+		x += w.document.body.offsetLeft ;
+		y += w.document.body.offsetTop ;
+	}
+
+	return { "x" : x, "y" : y } ;
+}
+
+FCKTools.GetWindowPosition = function( w, node )
+{
+	var pos = this.GetDocumentPosition( w, node ) ;
+	var scroll = FCKTools.GetScrollPosition( w ) ;
+	pos.x -= scroll.X ;
+	pos.y -= scroll.Y ;
+	return pos ;
+}
+
+FCKTools.ProtectFormStyles = function( formNode )
+{
+	if ( !formNode || formNode.nodeType != 1 || formNode.tagName.toLowerCase() != 'form' )
+		return [] ;
+	var hijackRecord = [] ;
+	var hijackNames = [ 'style', 'className' ] ;
+	for ( var i = 0 ; i < hijackNames.length ; i++ )
+	{
+		var name = hijackNames[i] ;
+		if ( formNode.elements.namedItem( name ) )
+		{
+			var hijackNode = formNode.elements.namedItem( name ) ;
+			hijackRecord.push( [ hijackNode, hijackNode.nextSibling ] ) ;
+			formNode.removeChild( hijackNode ) ;
+		}
+	}
+	return hijackRecord ;
+}
+
+FCKTools.RestoreFormStyles = function( formNode, hijackRecord )
+{
+	if ( !formNode || formNode.nodeType != 1 || formNode.tagName.toLowerCase() != 'form' )
+		return ;
+	if ( hijackRecord.length > 0 )
+	{
+		for ( var i = hijackRecord.length - 1 ; i >= 0 ; i-- )
+		{
+			var node = hijackRecord[i][0] ;
+			var sibling = hijackRecord[i][1] ;
+			if ( sibling )
+				formNode.insertBefore( node, sibling ) ;
+			else
+				formNode.appendChild( node ) ;
+		}
+	}
+}
+
+// Perform a one-step DFS walk.
+FCKTools.GetNextNode = function( node, limitNode )
+{
+	if ( node.firstChild )
+		return node.firstChild ;
+	else if ( node.nextSibling )
+		return node.nextSibling ;
+	else
+	{
+		var ancestor = node.parentNode ;
+		while ( ancestor )
+		{
+			if ( ancestor == limitNode )
+				return null ;
+			if ( ancestor.nextSibling )
+				return ancestor.nextSibling ;
+			else
+				ancestor = ancestor.parentNode ;
+		}
+	}
+	return null ;
+}
+
+FCKTools.GetNextTextNode = function( textnode, limitNode, checkStop )
+{
+	node = this.GetNextNode( textnode, limitNode ) ;
+	if ( checkStop && node && checkStop( node ) )
+		return null ;
+	while ( node && node.nodeType != 3 )
+	{
+		node = this.GetNextNode( node, limitNode ) ;
+		if ( checkStop && node && checkStop( node ) )
+			return null ;
+	}
+	return node ;
+}
+
+/**
+ * Merge all objects passed by argument into a single object.
+ */
+FCKTools.Merge = function()
+{
+	var args = arguments ;
+	var o = args[0] ;
+
+	for ( var i = 1 ; i < args.length ; i++ )
+	{
+		var arg = args[i] ;
+		for ( var p in arg )
+			o[p] = arg[p] ;
+	}
+
+	return o ;
+}
+
+/**
+ * Check if the passed argument is a real Array. It may not working when
+ * calling it cross windows.
+ */
+FCKTools.IsArray = function( it )
+{
+	return ( it instanceof Array ) ;
+}
+
+/**
+ * Appends a "length" property to an object, containing the number of
+ * properties available on it, excluded the append property itself.
+ */
+FCKTools.AppendLengthProperty = function( targetObject, propertyName )
+{
+	var counter = 0 ;
+
+	for ( var n in targetObject )
+		counter++ ;
+
+	return targetObject[ propertyName || 'length' ] = counter ;
+}
+
+/**
+ * Gets the browser parsed version of a css text (style attribute value). On
+ * some cases, the browser makes changes to the css text, returning a different
+ * value. For example, hexadecimal colors get transformed to rgb().
+ */
+FCKTools.NormalizeCssText = function( unparsedCssText )
+{
+	// Injects the style in a temporary span object, so the browser parses it,
+	// retrieving its final format.
+	var tempSpan = document.createElement( 'span' ) ;
+	tempSpan.style.cssText = unparsedCssText ;
+	return tempSpan.style.cssText ;
+}
+
+/**
+ * Binding the "this" reference to an object for a function.
+ */
+FCKTools.Bind = function( subject, func )
+{
+  return function(){ return func.apply( subject, arguments ) ; } ;
+}
+
+/**
+ * Retrieve the correct "empty iframe" URL for the current browser, which
+ * causes the minimum fuzz (e.g. security warnings in HTTPS, DNS error in
+ * IE5.5, etc.) for that browser, making the iframe ready to DOM use whithout
+ * having to loading an external file.
+ */
+FCKTools.GetVoidUrl = function()
+{
+	if ( FCK_IS_CUSTOM_DOMAIN )
+		return "javascript: void( function(){" +
+			"document.open();" +
+			"document.write('<html><head><title></title></head><body></body></html>');" +
+			"document.domain = '" + FCK_RUNTIME_DOMAIN + "';" +
+			"document.close();" +
+			"}() ) ;";
+
+	if ( FCKBrowserInfo.IsIE )
+	{
+		if ( FCKBrowserInfo.IsIE7 || !FCKBrowserInfo.IsIE6 )
+			return "" ;					// IE7+ / IE5.5
+		else
+			return "javascript: '';" ;	// IE6+
+	}
+
+	return "javascript: void(0);" ;		// All other browsers.
+}
+
+FCKTools.ResetStyles = function( element )
+{
+	element.style.cssText = 'margin:0;' +
+		'padding:0;' +
+		'border:0;' +
+		'background-color:transparent;' +
+		'background-image:none;' ;
+}


Property changes on: announcement/trunk/src/main/webapp/fckeditor/editor/_source/internals/fcktools.js
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/webapp/fckeditor/editor/_source/internals/fcktools_gecko.js
===================================================================
--- announcement/trunk/src/main/webapp/fckeditor/editor/_source/internals/fcktools_gecko.js	                        (rev 0)
+++ announcement/trunk/src/main/webapp/fckeditor/editor/_source/internals/fcktools_gecko.js	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,282 @@
+/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2008 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * Utility functions. (Gecko version).
+ */
+
+FCKTools.CancelEvent = function( e )
+{
+	if ( e )
+		e.preventDefault() ;
+}
+
+FCKTools.DisableSelection = function( element )
+{
+	if ( FCKBrowserInfo.IsGecko )
+		element.style.MozUserSelect		= 'none' ;	// Gecko only.
+	else if ( FCKBrowserInfo.IsSafari )
+		element.style.KhtmlUserSelect	= 'none' ;	// WebKit only.
+	else
+		element.style.userSelect		= 'none' ;	// CSS3 (not supported yet).
+}
+
+// Appends a CSS file to a document.
+FCKTools._AppendStyleSheet = function( documentElement, cssFileUrl )
+{
+	var e = documentElement.createElement( 'LINK' ) ;
+	e.rel	= 'stylesheet' ;
+	e.type	= 'text/css' ;
+	e.href	= cssFileUrl ;
+	documentElement.getElementsByTagName("HEAD")[0].appendChild( e ) ;
+	return e ;
+}
+
+// Appends a CSS style string to a document.
+FCKTools.AppendStyleString = function( documentElement, cssStyles )
+{
+	if ( !cssStyles )
+		return null ;
+
+	var e = documentElement.createElement( "STYLE" ) ;
+	e.appendChild( documentElement.createTextNode( cssStyles ) ) ;
+	documentElement.getElementsByTagName( "HEAD" )[0].appendChild( e ) ;
+	return e ;
+}
+
+// Removes all attributes and values from the element.
+FCKTools.ClearElementAttributes = function( element )
+{
+	// Loop throw all attributes in the element
+	for ( var i = 0 ; i < element.attributes.length ; i++ )
+	{
+		// Remove the element by name.
+		element.removeAttribute( element.attributes[i].name, 0 ) ;	// 0 : Case Insensitive
+	}
+}
+
+// Returns an Array of strings with all defined in the elements inside another element.
+FCKTools.GetAllChildrenIds = function( parentElement )
+{
+	// Create the array that will hold all Ids.
+	var aIds = new Array() ;
+
+	// Define a recursive function that search for the Ids.
+	var fGetIds = function( parent )
+	{
+		for ( var i = 0 ; i < parent.childNodes.length ; i++ )
+		{
+			var sId = parent.childNodes[i].id ;
+
+			// Check if the Id is defined for the element.
+			if ( sId && sId.length > 0 ) aIds[ aIds.length ] = sId ;
+
+			// Recursive call.
+			fGetIds( parent.childNodes[i] ) ;
+		}
+	}
+
+	// Start the recursive calls.
+	fGetIds( parentElement ) ;
+
+	return aIds ;
+}
+
+// Replaces a tag with its contents. For example "<span>My <b>tag</b></span>"
+// will be replaced with "My <b>tag</b>".
+FCKTools.RemoveOuterTags = function( e )
+{
+	var oFragment = e.ownerDocument.createDocumentFragment() ;
+
+	for ( var i = 0 ; i < e.childNodes.length ; i++ )
+		oFragment.appendChild( e.childNodes[i].cloneNode(true) ) ;
+
+	e.parentNode.replaceChild( oFragment, e ) ;
+}
+
+FCKTools.CreateXmlObject = function( object )
+{
+	switch ( object )
+	{
+		case 'XmlHttp' :
+			return new XMLHttpRequest() ;
+
+		case 'DOMDocument' :
+			// Originaly, we were had the following here:
+			// return document.implementation.createDocument( '', '', null ) ;
+			// But that doesn't work if we're running under domain relaxation mode, so we need a workaround.
+			// See http://ajaxian.com/archives/xml-messages-with-cross-domain-json about the trick we're using.
+			var doc = ( new DOMParser() ).parseFromString( '<tmp></tmp>', 'text/xml' ) ;
+			FCKDomTools.RemoveNode( doc.firstChild ) ;
+			return doc ;
+	}
+	return null ;
+}
+
+FCKTools.GetScrollPosition = function( relativeWindow )
+{
+	return { X : relativeWindow.pageXOffset, Y : relativeWindow.pageYOffset } ;
+}
+
+FCKTools.AddEventListener = function( sourceObject, eventName, listener )
+{
+	sourceObject.addEventListener( eventName, listener, false ) ;
+}
+
+FCKTools.RemoveEventListener = function( sourceObject, eventName, listener )
+{
+	sourceObject.removeEventListener( eventName, listener, false ) ;
+}
+
+// Listeners attached with this function cannot be detached.
+FCKTools.AddEventListenerEx = function( sourceObject, eventName, listener, paramsArray )
+{
+	sourceObject.addEventListener(
+		eventName,
+		function( e )
+		{
+			listener.apply( sourceObject, [ e ].concat( paramsArray || [] ) ) ;
+		},
+		false
+	) ;
+}
+
+// Returns and object with the "Width" and "Height" properties.
+FCKTools.GetViewPaneSize = function( win )
+{
+	return { Width : win.innerWidth, Height : win.innerHeight } ;
+}
+
+FCKTools.SaveStyles = function( element )
+{
+	var data = FCKTools.ProtectFormStyles( element ) ;
+
+	var oSavedStyles = new Object() ;
+
+	if ( element.className.length > 0 )
+	{
+		oSavedStyles.Class = element.className ;
+		element.className = '' ;
+	}
+
+	var sInlineStyle = element.getAttribute( 'style' ) ;
+
+	if ( sInlineStyle && sInlineStyle.length > 0 )
+	{
+		oSavedStyles.Inline = sInlineStyle ;
+		element.setAttribute( 'style', '', 0 ) ;	// 0 : Case Insensitive
+	}
+
+	FCKTools.RestoreFormStyles( element, data ) ;
+	return oSavedStyles ;
+}
+
+FCKTools.RestoreStyles = function( element, savedStyles )
+{
+	var data = FCKTools.ProtectFormStyles( element ) ;
+	element.className = savedStyles.Class || '' ;
+
+	if ( savedStyles.Inline )
+		element.setAttribute( 'style', savedStyles.Inline, 0 ) ;	// 0 : Case Insensitive
+	else
+		element.removeAttribute( 'style', 0 ) ;
+	FCKTools.RestoreFormStyles( element, data ) ;
+}
+
+FCKTools.RegisterDollarFunction = function( targetWindow )
+{
+	targetWindow.$ = function( id )
+	{
+		return targetWindow.document.getElementById( id ) ;
+	} ;
+}
+
+FCKTools.AppendElement = function( target, elementName )
+{
+	return target.appendChild( target.ownerDocument.createElement( elementName ) ) ;
+}
+
+// Get the coordinates of an element.
+//		@el : The element to get the position.
+//		@relativeWindow: The window to which we want the coordinates relative to.
+FCKTools.GetElementPosition = function( el, relativeWindow )
+{
+	// Initializes the Coordinates object that will be returned by the function.
+	var c = { X:0, Y:0 } ;
+
+	var oWindow = relativeWindow || window ;
+
+	var oOwnerWindow = FCKTools.GetElementWindow( el ) ;
+
+	var previousElement = null ;
+	// Loop throw the offset chain.
+	while ( el )
+	{
+		var sPosition = oOwnerWindow.getComputedStyle(el, '').position ;
+
+		// Check for non "static" elements.
+		// 'FCKConfig.FloatingPanelsZIndex' -- Submenus are under a positioned IFRAME.
+		if ( sPosition && sPosition != 'static' && el.style.zIndex != FCKConfig.FloatingPanelsZIndex )
+			break ;
+
+		/*
+		FCKDebug.Output( el.tagName + ":" + "offset=" + el.offsetLeft + "," + el.offsetTop + "  "
+				+ "scroll=" + el.scrollLeft + "," + el.scrollTop ) ;
+		*/
+
+		c.X += el.offsetLeft - el.scrollLeft ;
+		c.Y += el.offsetTop - el.scrollTop  ;
+
+		// Backtrack due to offsetParent's calculation by the browser ignores scrollLeft and scrollTop.
+		// Backtracking is not needed for Opera
+		if ( ! FCKBrowserInfo.IsOpera )
+		{
+			var scrollElement = previousElement ;
+			while ( scrollElement && scrollElement != el )
+			{
+				c.X -= scrollElement.scrollLeft ;
+				c.Y -= scrollElement.scrollTop ;
+				scrollElement = scrollElement.parentNode ;
+			}
+		}
+
+		previousElement = el ;
+		if ( el.offsetParent )
+			el = el.offsetParent ;
+		else
+		{
+			if ( oOwnerWindow != oWindow )
+			{
+				el = oOwnerWindow.frameElement ;
+				previousElement = null ;
+				if ( el )
+					oOwnerWindow = FCKTools.GetElementWindow( el ) ;
+			}
+			else
+			{
+				c.X += el.scrollLeft ;
+				c.Y += el.scrollTop  ;
+				break ;
+			}
+		}
+	}
+
+	// Return the Coordinates object
+	return c ;
+}


Property changes on: announcement/trunk/src/main/webapp/fckeditor/editor/_source/internals/fcktools_gecko.js
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/webapp/fckeditor/editor/_source/internals/fcktools_ie.js
===================================================================
--- announcement/trunk/src/main/webapp/fckeditor/editor/_source/internals/fcktools_ie.js	                        (rev 0)
+++ announcement/trunk/src/main/webapp/fckeditor/editor/_source/internals/fcktools_ie.js	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,233 @@
+/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2008 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * Utility functions. (IE version).
+ */
+
+FCKTools.CancelEvent = function( e )
+{
+	return false ;
+}
+
+// Appends one or more CSS files to a document.
+FCKTools._AppendStyleSheet = function( documentElement, cssFileUrl )
+{
+	return documentElement.createStyleSheet( cssFileUrl ).owningElement ;
+}
+
+// Appends a CSS style string to a document.
+FCKTools.AppendStyleString = function( documentElement, cssStyles )
+{
+	if ( !cssStyles )
+		return null ;
+
+	var s = documentElement.createStyleSheet( "" ) ;
+	s.cssText = cssStyles ;
+	return s ;
+}
+
+// Removes all attributes and values from the element.
+FCKTools.ClearElementAttributes = function( element )
+{
+	element.clearAttributes() ;
+}
+
+FCKTools.GetAllChildrenIds = function( parentElement )
+{
+	var aIds = new Array() ;
+	for ( var i = 0 ; i < parentElement.all.length ; i++ )
+	{
+		var sId = parentElement.all[i].id ;
+		if ( sId && sId.length > 0 )
+			aIds[ aIds.length ] = sId ;
+	}
+	return aIds ;
+}
+
+FCKTools.RemoveOuterTags = function( e )
+{
+	e.insertAdjacentHTML( 'beforeBegin', e.innerHTML ) ;
+	e.parentNode.removeChild( e ) ;
+}
+
+FCKTools.CreateXmlObject = function( object )
+{
+	var aObjs ;
+
+	switch ( object )
+	{
+		case 'XmlHttp' :
+			// Try the native XMLHttpRequest introduced with IE7.
+			try { return new XMLHttpRequest() ; } catch (e) {}
+
+			aObjs = [ 'MSXML2.XmlHttp', 'Microsoft.XmlHttp' ] ;
+			break ;
+
+		case 'DOMDocument' :
+			aObjs = [ 'MSXML2.DOMDocument', 'Microsoft.XmlDom' ] ;
+			break ;
+	}
+
+	for ( var i = 0 ; i < 2 ; i++ )
+	{
+		try { return new ActiveXObject( aObjs[i] ) ; }
+		catch (e)
+		{}
+	}
+
+	if ( FCKLang.NoActiveX )
+	{
+		alert( FCKLang.NoActiveX ) ;
+		FCKLang.NoActiveX = null ;
+	}
+	return null ;
+}
+
+FCKTools.DisableSelection = function( element )
+{
+	element.unselectable = 'on' ;
+
+	var e, i = 0 ;
+	// The extra () is to avoid a warning with strict error checking. This is ok.
+	while ( (e = element.all[ i++ ]) )
+	{
+		switch ( e.tagName )
+		{
+			case 'IFRAME' :
+			case 'TEXTAREA' :
+			case 'INPUT' :
+			case 'SELECT' :
+				/* Ignore the above tags */
+				break ;
+			default :
+				e.unselectable = 'on' ;
+		}
+	}
+}
+
+FCKTools.GetScrollPosition = function( relativeWindow )
+{
+	var oDoc = relativeWindow.document ;
+
+	// Try with the doc element.
+	var oPos = { X : oDoc.documentElement.scrollLeft, Y : oDoc.documentElement.scrollTop } ;
+
+	if ( oPos.X > 0 || oPos.Y > 0 )
+		return oPos ;
+
+	// If no scroll, try with the body.
+	return { X : oDoc.body.scrollLeft, Y : oDoc.body.scrollTop } ;
+}
+
+FCKTools.AddEventListener = function( sourceObject, eventName, listener )
+{
+	sourceObject.attachEvent( 'on' + eventName, listener ) ;
+}
+
+FCKTools.RemoveEventListener = function( sourceObject, eventName, listener )
+{
+	sourceObject.detachEvent( 'on' + eventName, listener ) ;
+}
+
+// Listeners attached with this function cannot be detached.
+FCKTools.AddEventListenerEx = function( sourceObject, eventName, listener, paramsArray )
+{
+	// Ok... this is a closures party, but is the only way to make it clean of memory leaks.
+	var o = new Object() ;
+	o.Source = sourceObject ;
+	o.Params = paramsArray || [] ;	// Memory leak if we have DOM objects here.
+	o.Listener = function( ev )
+	{
+		return listener.apply( o.Source, [ ev ].concat( o.Params ) ) ;
+	}
+
+	if ( FCK.IECleanup )
+		FCK.IECleanup.AddItem( null, function() { o.Source = null ; o.Params = null ; } ) ;
+
+	sourceObject.attachEvent( 'on' + eventName, o.Listener ) ;
+
+	sourceObject = null ;	// Memory leak cleaner (because of the above closure).
+	paramsArray = null ;	// Memory leak cleaner (because of the above closure).
+}
+
+// Returns and object with the "Width" and "Height" properties.
+FCKTools.GetViewPaneSize = function( win )
+{
+	var oSizeSource ;
+
+	var oDoc = win.document.documentElement ;
+	if ( oDoc && oDoc.clientWidth )				// IE6 Strict Mode
+		oSizeSource = oDoc ;
+	else
+		oSizeSource = win.document.body ;		// Other IEs
+
+	if ( oSizeSource )
+		return { Width : oSizeSource.clientWidth, Height : oSizeSource.clientHeight } ;
+	else
+		return { Width : 0, Height : 0 } ;
+}
+
+FCKTools.SaveStyles = function( element )
+{
+	var data = FCKTools.ProtectFormStyles( element ) ;
+
+	var oSavedStyles = new Object() ;
+
+	if ( element.className.length > 0 )
+	{
+		oSavedStyles.Class = element.className ;
+		element.className = '' ;
+	}
+
+	var sInlineStyle = element.style.cssText ;
+
+	if ( sInlineStyle.length > 0 )
+	{
+		oSavedStyles.Inline = sInlineStyle ;
+		element.style.cssText = '' ;
+	}
+
+	FCKTools.RestoreFormStyles( element, data ) ;
+	return oSavedStyles ;
+}
+
+FCKTools.RestoreStyles = function( element, savedStyles )
+{
+	var data = FCKTools.ProtectFormStyles( element ) ;
+	element.className		= savedStyles.Class || '' ;
+	element.style.cssText	= savedStyles.Inline || '' ;
+	FCKTools.RestoreFormStyles( element, data ) ;
+}
+
+FCKTools.RegisterDollarFunction = function( targetWindow )
+{
+	targetWindow.$ = targetWindow.document.getElementById ;
+}
+
+FCKTools.AppendElement = function( target, elementName )
+{
+	return target.appendChild( this.GetElementDocument( target ).createElement( elementName ) ) ;
+}
+
+// This function may be used by Regex replacements.
+FCKTools.ToLowerCase = function( strValue )
+{
+	return strValue.toLowerCase() ;
+}


Property changes on: announcement/trunk/src/main/webapp/fckeditor/editor/_source/internals/fcktools_ie.js
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/webapp/fckeditor/editor/_source/internals/fckundo.js
===================================================================
--- announcement/trunk/src/main/webapp/fckeditor/editor/_source/internals/fckundo.js	                        (rev 0)
+++ announcement/trunk/src/main/webapp/fckeditor/editor/_source/internals/fckundo.js	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,223 @@
+/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2008 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ */
+
+var FCKUndo = new Object() ;
+
+FCKUndo.SavedData = new Array() ;
+FCKUndo.CurrentIndex = -1 ;
+FCKUndo.TypesCount = 0 ;
+FCKUndo.Changed = false ;	// Is the document changed in respect to its initial image?
+FCKUndo.MaxTypes = 25 ;
+FCKUndo.Typing = false ;
+FCKUndo.SaveLocked = false ;
+
+FCKUndo._GetBookmark = function()
+{
+	FCKSelection.Restore() ;
+
+	var range = new FCKDomRange( FCK.EditorWindow ) ;
+	try
+	{
+		// There are some tricky cases where this might fail (e.g. having a lone empty table in IE)
+		range.MoveToSelection() ;
+	}
+	catch ( e )
+	{
+		return null ;
+	}
+	if ( FCKBrowserInfo.IsIE )
+	{
+		var bookmark = range.CreateBookmark() ;
+		var dirtyHtml = FCK.EditorDocument.body.innerHTML ;
+		range.MoveToBookmark( bookmark ) ;
+		return [ bookmark, dirtyHtml ] ;
+	}
+	return range.CreateBookmark2() ;
+}
+
+FCKUndo._SelectBookmark = function( bookmark )
+{
+	if ( ! bookmark )
+		return ;
+
+	var range = new FCKDomRange( FCK.EditorWindow ) ;
+	if ( bookmark instanceof Object )
+	{
+		if ( FCKBrowserInfo.IsIE )
+			range.MoveToBookmark( bookmark[0] ) ;
+		else
+			range.MoveToBookmark2( bookmark ) ;
+		try
+		{
+			// this does not always succeed, there are still some tricky cases where it fails
+			// e.g. add a special character at end of document, undo, redo -> error
+			range.Select() ;
+		}
+		catch ( e )
+		{
+			// if select restore fails, put the caret at the end of the document
+			range.MoveToPosition( FCK.EditorDocument.body, 4 ) ;
+			range.Select() ;
+		}
+	}
+}
+
+FCKUndo._CompareCursors = function( cursor1, cursor2 )
+{
+	for ( var i = 0 ; i < Math.min( cursor1.length, cursor2.length ) ; i++ )
+	{
+		if ( cursor1[i] < cursor2[i] )
+			return -1;
+		else if (cursor1[i] > cursor2[i] )
+			return 1;
+	}
+	if ( cursor1.length < cursor2.length )
+		return -1;
+	else if (cursor1.length > cursor2.length )
+		return 1;
+	return 0;
+}
+
+FCKUndo._CheckIsBookmarksEqual = function( bookmark1, bookmark2 )
+{
+	if ( ! ( bookmark1 && bookmark2 ) )
+		return false ;
+	if ( FCKBrowserInfo.IsIE )
+	{
+		var startOffset1 = bookmark1[1].search( bookmark1[0].StartId ) ;
+		var startOffset2 = bookmark2[1].search( bookmark2[0].StartId ) ;
+		var endOffset1 = bookmark1[1].search( bookmark1[0].EndId ) ;
+		var endOffset2 = bookmark2[1].search( bookmark2[0].EndId ) ;
+		return startOffset1 == startOffset2 && endOffset1 == endOffset2 ;
+	}
+	else
+	{
+		return this._CompareCursors( bookmark1.Start, bookmark2.Start ) == 0
+			&& this._CompareCursors( bookmark1.End, bookmark2.End ) == 0 ;
+	}
+}
+
+FCKUndo.SaveUndoStep = function()
+{
+	if ( FCK.EditMode != FCK_EDITMODE_WYSIWYG || this.SaveLocked )
+		return ;
+
+	// Assume the editor content is changed when SaveUndoStep() is called after the first time.
+	// This also enables the undo button in toolbar.
+	if ( this.SavedData.length )
+		this.Changed = true ;
+
+	// Get the HTML content.
+	var sHtml = FCK.EditorDocument.body.innerHTML ;
+	var bookmark = this._GetBookmark() ;
+
+	// Shrink the array to the current level.
+	this.SavedData = this.SavedData.slice( 0, this.CurrentIndex + 1 ) ;
+
+	// Cancel operation if the new step is identical to the previous one.
+	if ( this.CurrentIndex > 0
+			&& sHtml == this.SavedData[ this.CurrentIndex ][0]
+			&& this._CheckIsBookmarksEqual( bookmark, this.SavedData[ this.CurrentIndex ][1] ) )
+		return ;
+	// Save the selection and caret position in the first undo level for the first change.
+	else if ( this.CurrentIndex == 0 && this.SavedData.length && sHtml == this.SavedData[0][0] )
+	{
+		this.SavedData[0][1] = bookmark ;
+		return ;
+	}
+
+	// If we reach the Maximum number of undo levels, we must remove the first
+	// entry of the list shifting all elements.
+	if ( this.CurrentIndex + 1 >= FCKConfig.MaxUndoLevels )
+		this.SavedData.shift() ;
+	else
+		this.CurrentIndex++ ;
+
+	// Save the new level in front of the actual position.
+	this.SavedData[ this.CurrentIndex ] = [ sHtml, bookmark ] ;
+
+	FCK.Events.FireEvent( "OnSelectionChange" ) ;
+}
+
+FCKUndo.CheckUndoState = function()
+{
+	return ( this.Changed || this.CurrentIndex > 0 ) ;
+}
+
+FCKUndo.CheckRedoState = function()
+{
+	return ( this.CurrentIndex < ( this.SavedData.length - 1 ) ) ;
+}
+
+FCKUndo.Undo = function()
+{
+	if ( this.CheckUndoState() )
+	{
+		// If it is the first step.
+		if ( this.CurrentIndex == ( this.SavedData.length - 1 ) )
+		{
+			// Save the actual state for a possible "Redo" call.
+			this.SaveUndoStep() ;
+		}
+
+		// Go a step back.
+		this._ApplyUndoLevel( --this.CurrentIndex ) ;
+
+		FCK.Events.FireEvent( "OnSelectionChange" ) ;
+	}
+}
+
+FCKUndo.Redo = function()
+{
+	if ( this.CheckRedoState() )
+	{
+		// Go a step forward.
+		this._ApplyUndoLevel( ++this.CurrentIndex ) ;
+
+		FCK.Events.FireEvent( "OnSelectionChange" ) ;
+	}
+}
+
+FCKUndo._ApplyUndoLevel = function( level )
+{
+	var oData = this.SavedData[ level ] ;
+
+	if ( !oData )
+		return ;
+
+	// Update the editor contents with that step data.
+	if ( FCKBrowserInfo.IsIE )
+	{
+		if ( oData[1] && oData[1][1] )
+			FCK.SetInnerHtml( oData[1][1] ) ;
+		else
+			FCK.SetInnerHtml( oData[0] ) ;
+	}
+	else
+		FCK.EditorDocument.body.innerHTML = oData[0] ;
+
+	// Restore the selection
+	this._SelectBookmark( oData[1] ) ;
+
+	this.TypesCount = 0 ;
+	this.Changed = false ;
+	this.Typing = false ;
+}


Property changes on: announcement/trunk/src/main/webapp/fckeditor/editor/_source/internals/fckundo.js
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/webapp/fckeditor/editor/_source/internals/fckurlparams.js
===================================================================
--- announcement/trunk/src/main/webapp/fckeditor/editor/_source/internals/fckurlparams.js	                        (rev 0)
+++ announcement/trunk/src/main/webapp/fckeditor/editor/_source/internals/fckurlparams.js	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,39 @@
+/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2008 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * Defines the FCKURLParams object that is used to get all parameters
+ * passed by the URL QueryString (after the "?").
+ */
+
+// #### URLParams: holds all URL passed parameters (like ?Param1=Value1&Param2=Value2)
+var FCKURLParams = new Object() ;
+
+(function()
+{
+	var aParams = document.location.search.substr(1).split('&') ;
+	for ( var i = 0 ; i < aParams.length ; i++ )
+	{
+		var aParam = aParams[i].split('=') ;
+		var sParamName  = decodeURIComponent( aParam[0] ) ;
+		var sParamValue = decodeURIComponent( aParam[1] ) ;
+
+		FCKURLParams[ sParamName ] = sParamValue ;
+	}
+})();


Property changes on: announcement/trunk/src/main/webapp/fckeditor/editor/_source/internals/fckurlparams.js
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/webapp/fckeditor/editor/_source/internals/fckxhtml.js
===================================================================
--- announcement/trunk/src/main/webapp/fckeditor/editor/_source/internals/fckxhtml.js	                        (rev 0)
+++ announcement/trunk/src/main/webapp/fckeditor/editor/_source/internals/fckxhtml.js	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,527 @@
+/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2008 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * Defines the FCKXHtml object, responsible for the XHTML operations.
+ */
+
+var FCKXHtml = new Object() ;
+
+FCKXHtml.CurrentJobNum = 0 ;
+
+FCKXHtml.GetXHTML = function( node, includeNode, format )
+{
+	FCKDomTools.CheckAndRemovePaddingNode( FCKTools.GetElementDocument( node ), FCKConfig.EnterMode ) ;
+	FCKXHtmlEntities.Initialize() ;
+
+	// Set the correct entity to use for empty blocks.
+	this._NbspEntity = ( FCKConfig.ProcessHTMLEntities? 'nbsp' : '#160' ) ;
+
+	// Save the current IsDirty state. The XHTML processor may change the
+	// original HTML, dirtying it.
+	var bIsDirty = FCK.IsDirty() ;
+
+	// Special blocks are blocks of content that remain untouched during the
+	// process. It is used for SCRIPTs and STYLEs.
+	FCKXHtml.SpecialBlocks = new Array() ;
+
+	// Create the XML DOMDocument object.
+	this.XML = FCKTools.CreateXmlObject( 'DOMDocument' ) ;
+
+	// Add a root element that holds all child nodes.
+	this.MainNode = this.XML.appendChild( this.XML.createElement( 'xhtml' ) ) ;
+
+	FCKXHtml.CurrentJobNum++ ;
+
+//	var dTimer = new Date() ;
+
+	if ( includeNode )
+		this._AppendNode( this.MainNode, node ) ;
+	else
+		this._AppendChildNodes( this.MainNode, node, false ) ;
+
+	// Get the resulting XHTML as a string.
+	var sXHTML = this._GetMainXmlString() ;
+
+//	alert( 'Time: ' + ( ( ( new Date() ) - dTimer ) ) + ' ms' ) ;
+
+	this.XML = null ;
+
+	// Safari adds xmlns="http://www.w3.org/1999/xhtml" to the root node (#963)
+	if ( FCKBrowserInfo.IsSafari )
+		sXHTML = sXHTML.replace( /^<xhtml.*?>/, '<xhtml>' ) ;
+
+	// Strip the "XHTML" root node.
+	sXHTML = sXHTML.substr( 7, sXHTML.length - 15 ).Trim() ;
+
+	// According to the doctype set the proper end for self-closing tags
+	// HTML: <br>
+	// XHTML: Add a space, like <br/> -> <br />
+	if (FCKConfig.DocType.length > 0 && FCKRegexLib.HtmlDocType.test( FCKConfig.DocType ) )
+		sXHTML = sXHTML.replace( FCKRegexLib.SpaceNoClose, '>');
+	else
+		sXHTML = sXHTML.replace( FCKRegexLib.SpaceNoClose, ' />');
+
+	if ( FCKConfig.ForceSimpleAmpersand )
+		sXHTML = sXHTML.replace( FCKRegexLib.ForceSimpleAmpersand, '&' ) ;
+
+	if ( format )
+		sXHTML = FCKCodeFormatter.Format( sXHTML ) ;
+
+	// Now we put back the SpecialBlocks contents.
+	for ( var i = 0 ; i < FCKXHtml.SpecialBlocks.length ; i++ )
+	{
+		var oRegex = new RegExp( '___FCKsi___' + i ) ;
+		sXHTML = sXHTML.replace( oRegex, FCKXHtml.SpecialBlocks[i] ) ;
+	}
+
+	// Replace entities marker with the ampersand.
+	sXHTML = sXHTML.replace( FCKRegexLib.GeckoEntitiesMarker, '&' ) ;
+
+	// Restore the IsDirty state if it was not dirty.
+	if ( !bIsDirty )
+		FCK.ResetIsDirty() ;
+
+	FCKDomTools.EnforcePaddingNode( FCKTools.GetElementDocument( node ), FCKConfig.EnterMode ) ;
+	return sXHTML ;
+}
+
+FCKXHtml._AppendAttribute = function( xmlNode, attributeName, attributeValue )
+{
+	try
+	{
+		if ( attributeValue == undefined || attributeValue == null )
+			attributeValue = '' ;
+		else if ( attributeValue.replace )
+		{
+			if ( FCKConfig.ForceSimpleAmpersand )
+				attributeValue = attributeValue.replace( /&/g, '___FCKAmp___' ) ;
+
+			// Entities must be replaced in the attribute values.
+			attributeValue = attributeValue.replace( FCKXHtmlEntities.EntitiesRegex, FCKXHtml_GetEntity ) ;
+		}
+
+		// Create the attribute.
+		var oXmlAtt = this.XML.createAttribute( attributeName ) ;
+		oXmlAtt.value = attributeValue ;
+
+		// Set the attribute in the node.
+		xmlNode.attributes.setNamedItem( oXmlAtt ) ;
+	}
+	catch (e)
+	{}
+}
+
+FCKXHtml._AppendChildNodes = function( xmlNode, htmlNode, isBlockElement )
+{
+	var oNode = htmlNode.firstChild ;
+
+	while ( oNode )
+	{
+		this._AppendNode( xmlNode, oNode ) ;
+		oNode = oNode.nextSibling ;
+	}
+
+	// Trim block elements. This is also needed to avoid Firefox leaving extra
+	// BRs at the end of them.
+	if ( isBlockElement && htmlNode.tagName && htmlNode.tagName.toLowerCase() != 'pre' )
+	{
+		FCKDomTools.TrimNode( xmlNode ) ;
+
+		if ( FCKConfig.FillEmptyBlocks )
+		{
+			var lastChild = xmlNode.lastChild ;
+			if ( lastChild && lastChild.nodeType == 1 && lastChild.nodeName == 'br' )
+				this._AppendEntity( xmlNode, this._NbspEntity ) ;
+		}
+	}
+
+	// If the resulting node is empty.
+	if ( xmlNode.childNodes.length == 0 )
+	{
+		if ( isBlockElement && FCKConfig.FillEmptyBlocks )
+		{
+			this._AppendEntity( xmlNode, this._NbspEntity ) ;
+			return xmlNode ;
+		}
+
+		var sNodeName = xmlNode.nodeName ;
+
+		// Some inline elements are required to have something inside (span, strong, etc...).
+		if ( FCKListsLib.InlineChildReqElements[ sNodeName ] )
+			return null ;
+
+		// We can't use short representation of empty elements that are not marked
+		// as empty in th XHTML DTD.
+		if ( !FCKListsLib.EmptyElements[ sNodeName ] )
+			xmlNode.appendChild( this.XML.createTextNode('') ) ;
+	}
+
+	return xmlNode ;
+}
+
+FCKXHtml._AppendNode = function( xmlNode, htmlNode )
+{
+	if ( !htmlNode )
+		return false ;
+
+	switch ( htmlNode.nodeType )
+	{
+		// Element Node.
+		case 1 :
+			// If we detect a <br> inside a <pre> in Gecko, turn it into a line break instead.
+			// This is a workaround for the Gecko bug here: https://bugzilla.mozilla.org/show_bug.cgi?id=92921
+			if ( FCKBrowserInfo.IsGecko
+					&& htmlNode.tagName.toLowerCase() == 'br'
+					&& htmlNode.parentNode.tagName.toLowerCase() == 'pre' )
+			{
+				var val = '\r' ;
+				if ( htmlNode == htmlNode.parentNode.firstChild )
+					val += '\r' ;
+				return FCKXHtml._AppendNode( xmlNode, this.XML.createTextNode( val ) ) ;
+			}
+
+			// Here we found an element that is not the real element, but a
+			// fake one (like the Flash placeholder image), so we must get the real one.
+			if ( htmlNode.getAttribute('_fckfakelement') )
+				return FCKXHtml._AppendNode( xmlNode, FCK.GetRealElement( htmlNode ) ) ;
+
+			// Ignore bogus BR nodes in the DOM.
+			if ( FCKBrowserInfo.IsGecko &&
+					htmlNode.nextSibling &&
+					( htmlNode.hasAttribute('_moz_editor_bogus_node') || htmlNode.getAttribute( 'type' ) == '_moz' ) )
+				return false ;
+
+			// This is for elements that are instrumental to FCKeditor and
+			// must be removed from the final HTML.
+			if ( htmlNode.getAttribute('_fcktemp') )
+				return false ;
+
+			// Get the element name.
+			var sNodeName = htmlNode.tagName.toLowerCase()  ;
+
+			if ( FCKBrowserInfo.IsIE )
+			{
+				// IE doens't include the scope name in the nodeName. So, add the namespace.
+				if ( htmlNode.scopeName && htmlNode.scopeName != 'HTML' && htmlNode.scopeName != 'FCK' )
+					sNodeName = htmlNode.scopeName.toLowerCase() + ':' + sNodeName ;
+			}
+			else
+			{
+				if ( sNodeName.StartsWith( 'fck:' ) )
+					sNodeName = sNodeName.Remove( 0,4 ) ;
+			}
+
+			// Check if the node name is valid, otherwise ignore this tag.
+			// If the nodeName starts with a slash, it is a orphan closing tag.
+			// On some strange cases, the nodeName is empty, even if the node exists.
+			if ( !FCKRegexLib.ElementName.test( sNodeName ) )
+				return false ;
+
+			// The already processed nodes must be marked to avoid then to be duplicated (bad formatted HTML).
+			// So here, the "mark" is checked... if the element is Ok, then mark it.
+			if ( htmlNode._fckxhtmljob && htmlNode._fckxhtmljob == FCKXHtml.CurrentJobNum )
+				return false ;
+
+			var oNode = this.XML.createElement( sNodeName ) ;
+
+			// Add all attributes.
+			FCKXHtml._AppendAttributes( xmlNode, htmlNode, oNode, sNodeName ) ;
+
+			htmlNode._fckxhtmljob = FCKXHtml.CurrentJobNum ;
+
+			// Tag specific processing.
+			var oTagProcessor = FCKXHtml.TagProcessors[ sNodeName ] ;
+
+			if ( oTagProcessor )
+				oNode = oTagProcessor( oNode, htmlNode, xmlNode ) ;
+			else
+				oNode = this._AppendChildNodes( oNode, htmlNode, Boolean( FCKListsLib.NonEmptyBlockElements[ sNodeName ] ) ) ;
+
+			if ( !oNode )
+				return false ;
+
+			xmlNode.appendChild( oNode ) ;
+
+			break ;
+
+		// Text Node.
+		case 3 :
+			if ( htmlNode.parentNode && htmlNode.parentNode.nodeName.IEquals( 'pre' ) )
+				return this._AppendTextNode( xmlNode, htmlNode.nodeValue ) ;
+			return this._AppendTextNode( xmlNode, htmlNode.nodeValue.ReplaceNewLineChars(' ') ) ;
+
+		// Comment
+		case 8 :
+			// IE catches the <!DOTYPE ... > as a comment, but it has no
+			// innerHTML, so we can catch it, and ignore it.
+			if ( FCKBrowserInfo.IsIE && !htmlNode.innerHTML )
+				break ;
+
+			try { xmlNode.appendChild( this.XML.createComment( htmlNode.nodeValue ) ) ; }
+			catch (e) { /* Do nothing... probably this is a wrong format comment. */ }
+			break ;
+
+		// Unknown Node type.
+		default :
+			xmlNode.appendChild( this.XML.createComment( "Element not supported - Type: " + htmlNode.nodeType + " Name: " + htmlNode.nodeName ) ) ;
+			break ;
+	}
+	return true ;
+}
+
+// Append an item to the SpecialBlocks array and returns the tag to be used.
+FCKXHtml._AppendSpecialItem = function( item )
+{
+	return '___FCKsi___' + FCKXHtml.SpecialBlocks.AddItem( item ) ;
+}
+
+FCKXHtml._AppendEntity = function( xmlNode, entity )
+{
+	xmlNode.appendChild( this.XML.createTextNode( '#?-:' + entity + ';' ) ) ;
+}
+
+FCKXHtml._AppendTextNode = function( targetNode, textValue )
+{
+	var bHadText = textValue.length > 0 ;
+	if ( bHadText )
+		targetNode.appendChild( this.XML.createTextNode( textValue.replace( FCKXHtmlEntities.EntitiesRegex, FCKXHtml_GetEntity ) ) ) ;
+	return bHadText ;
+}
+
+// Retrieves a entity (internal format) for a given character.
+function FCKXHtml_GetEntity( character )
+{
+	// We cannot simply place the entities in the text, because the XML parser
+	// will translate & to &amp;. So we use a temporary marker which is replaced
+	// in the end of the processing.
+	var sEntity = FCKXHtmlEntities.Entities[ character ] || ( '#' + character.charCodeAt(0) ) ;
+	return '#?-:' + sEntity + ';' ;
+}
+
+// An object that hold tag specific operations.
+FCKXHtml.TagProcessors =
+{
+	a : function( node, htmlNode )
+	{
+		// Firefox may create empty tags when deleting the selection in some special cases (SF-BUG 1556878).
+		if ( htmlNode.innerHTML.Trim().length == 0 && !htmlNode.name )
+			return false ;
+
+		var sSavedUrl = htmlNode.getAttribute( '_fcksavedurl' ) ;
+		if ( sSavedUrl != null )
+			FCKXHtml._AppendAttribute( node, 'href', sSavedUrl ) ;
+
+
+		// Anchors with content has been marked with an additional class, now we must remove it.
+		if ( FCKBrowserInfo.IsIE )
+		{
+			// Buggy IE, doesn't copy the name of changed anchors.
+			if ( htmlNode.name )
+				FCKXHtml._AppendAttribute( node, 'name', htmlNode.name ) ;
+		}
+
+		node = FCKXHtml._AppendChildNodes( node, htmlNode, false ) ;
+
+		return node ;
+	},
+
+	area : function( node, htmlNode )
+	{
+		var sSavedUrl = htmlNode.getAttribute( '_fcksavedurl' ) ;
+		if ( sSavedUrl != null )
+			FCKXHtml._AppendAttribute( node, 'href', sSavedUrl ) ;
+
+		// IE ignores the "COORDS" and "SHAPE" attribute so we must add it manually.
+		if ( FCKBrowserInfo.IsIE )
+		{
+			if ( ! node.attributes.getNamedItem( 'coords' ) )
+			{
+				var sCoords = htmlNode.getAttribute( 'coords', 2 ) ;
+				if ( sCoords && sCoords != '0,0,0' )
+					FCKXHtml._AppendAttribute( node, 'coords', sCoords ) ;
+			}
+
+			if ( ! node.attributes.getNamedItem( 'shape' ) )
+			{
+				var sShape = htmlNode.getAttribute( 'shape', 2 ) ;
+				if ( sShape && sShape.length > 0 )
+					FCKXHtml._AppendAttribute( node, 'shape', sShape.toLowerCase() ) ;
+			}
+		}
+
+		return node ;
+	},
+
+	body : function( node, htmlNode )
+	{
+		node = FCKXHtml._AppendChildNodes( node, htmlNode, false ) ;
+		// Remove spellchecker attributes added for Firefox when converting to HTML code (Bug #1351).
+		node.removeAttribute( 'spellcheck' ) ;
+		return node ;
+	},
+
+	// IE loses contents of iframes, and Gecko does give it back HtmlEncoded
+	// Note: Opera does lose the content and doesn't provide it in the innerHTML string
+	iframe : function( node, htmlNode )
+	{
+		var sHtml = htmlNode.innerHTML ;
+
+		// Gecko does give back the encoded html
+		if ( FCKBrowserInfo.IsGecko )
+			sHtml = FCKTools.HTMLDecode( sHtml );
+
+		// Remove the saved urls here as the data won't be processed as nodes
+		sHtml = sHtml.replace( /\s_fcksavedurl="[^"]*"/g, '' ) ;
+
+		node.appendChild( FCKXHtml.XML.createTextNode( FCKXHtml._AppendSpecialItem( sHtml ) ) ) ;
+
+		return node ;
+	},
+
+	img : function( node, htmlNode )
+	{
+		// The "ALT" attribute is required in XHTML.
+		if ( ! node.attributes.getNamedItem( 'alt' ) )
+			FCKXHtml._AppendAttribute( node, 'alt', '' ) ;
+
+		var sSavedUrl = htmlNode.getAttribute( '_fcksavedurl' ) ;
+		if ( sSavedUrl != null )
+			FCKXHtml._AppendAttribute( node, 'src', sSavedUrl ) ;
+
+		// Bug #768 : If the width and height are defined inline CSS,
+		// don't define it again in the HTML attributes.
+		if ( htmlNode.style.width )
+			node.removeAttribute( 'width' ) ;
+		if ( htmlNode.style.height )
+			node.removeAttribute( 'height' ) ;
+
+		return node ;
+	},
+
+	// Fix orphaned <li> nodes (Bug #503).
+	li : function( node, htmlNode, targetNode )
+	{
+		// If the XML parent node is already a <ul> or <ol>, then add the <li> as usual.
+		if ( targetNode.nodeName.IEquals( ['ul', 'ol'] ) )
+			return FCKXHtml._AppendChildNodes( node, htmlNode, true ) ;
+
+		var newTarget = FCKXHtml.XML.createElement( 'ul' ) ;
+
+		// Reset the _fckxhtmljob so the HTML node is processed again.
+		htmlNode._fckxhtmljob = null ;
+
+		// Loop through all sibling LIs, adding them to the <ul>.
+		do
+		{
+			FCKXHtml._AppendNode( newTarget, htmlNode ) ;
+
+			// Look for the next element following this <li>.
+			do
+			{
+				htmlNode = FCKDomTools.GetNextSibling( htmlNode ) ;
+
+			} while ( htmlNode && htmlNode.nodeType == 3 && htmlNode.nodeValue.Trim().length == 0 )
+
+		}	while ( htmlNode && htmlNode.nodeName.toLowerCase() == 'li' )
+
+		return newTarget ;
+	},
+
+	// Fix nested <ul> and <ol>.
+	ol : function( node, htmlNode, targetNode )
+	{
+		if ( htmlNode.innerHTML.Trim().length == 0 )
+			return false ;
+
+		var ePSibling = targetNode.lastChild ;
+
+		if ( ePSibling && ePSibling.nodeType == 3 )
+			ePSibling = ePSibling.previousSibling ;
+
+		if ( ePSibling && ePSibling.nodeName.toUpperCase() == 'LI' )
+		{
+			htmlNode._fckxhtmljob = null ;
+			FCKXHtml._AppendNode( ePSibling, htmlNode ) ;
+			return false ;
+		}
+
+		node = FCKXHtml._AppendChildNodes( node, htmlNode ) ;
+
+		return node ;
+	},
+
+	pre : function ( node, htmlNode )
+	{
+		var firstChild = htmlNode.firstChild ;
+
+		if ( firstChild && firstChild.nodeType == 3 )
+			node.appendChild( FCKXHtml.XML.createTextNode( FCKXHtml._AppendSpecialItem( '\r\n' ) ) ) ;
+
+		FCKXHtml._AppendChildNodes( node, htmlNode, true ) ;
+
+		return node ;
+	},
+
+	script : function( node, htmlNode )
+	{
+		// The "TYPE" attribute is required in XHTML.
+		if ( ! node.attributes.getNamedItem( 'type' ) )
+			FCKXHtml._AppendAttribute( node, 'type', 'text/javascript' ) ;
+
+		node.appendChild( FCKXHtml.XML.createTextNode( FCKXHtml._AppendSpecialItem( htmlNode.text ) ) ) ;
+
+		return node ;
+	},
+
+	span : function( node, htmlNode )
+	{
+		// Firefox may create empty tags when deleting the selection in some special cases (SF-BUG 1084404).
+		if ( htmlNode.innerHTML.length == 0 )
+			return false ;
+
+		node = FCKXHtml._AppendChildNodes( node, htmlNode, false ) ;
+
+		return node ;
+	},
+
+	style : function( node, htmlNode )
+	{
+		// The "TYPE" attribute is required in XHTML.
+		if ( ! node.attributes.getNamedItem( 'type' ) )
+			FCKXHtml._AppendAttribute( node, 'type', 'text/css' ) ;
+
+		var cssText = htmlNode.innerHTML ;
+		if ( FCKBrowserInfo.IsIE )	// Bug #403 : IE always appends a \r\n to the beginning of StyleNode.innerHTML
+			cssText = cssText.replace( /^(\r\n|\n|\r)/, '' ) ;
+
+		node.appendChild( FCKXHtml.XML.createTextNode( FCKXHtml._AppendSpecialItem( cssText ) ) ) ;
+
+		return node ;
+	},
+
+	title : function( node, htmlNode )
+	{
+		node.appendChild( FCKXHtml.XML.createTextNode( FCK.EditorDocument.title ) ) ;
+
+		return node ;
+	}
+} ;
+
+FCKXHtml.TagProcessors.ul = FCKXHtml.TagProcessors.ol ;


Property changes on: announcement/trunk/src/main/webapp/fckeditor/editor/_source/internals/fckxhtml.js
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/webapp/fckeditor/editor/_source/internals/fckxhtml_gecko.js
===================================================================
--- announcement/trunk/src/main/webapp/fckeditor/editor/_source/internals/fckxhtml_gecko.js	                        (rev 0)
+++ announcement/trunk/src/main/webapp/fckeditor/editor/_source/internals/fckxhtml_gecko.js	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,114 @@
+/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2008 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * Defines the FCKXHtml object, responsible for the XHTML operations.
+ * Gecko specific.
+ */
+
+FCKXHtml._GetMainXmlString = function()
+{
+	return ( new XMLSerializer() ).serializeToString( this.MainNode ) ;
+}
+
+FCKXHtml._AppendAttributes = function( xmlNode, htmlNode, node )
+{
+	var aAttributes = htmlNode.attributes ;
+
+	for ( var n = 0 ; n < aAttributes.length ; n++ )
+	{
+		var oAttribute = aAttributes[n] ;
+
+		if ( oAttribute.specified )
+		{
+			var sAttName = oAttribute.nodeName.toLowerCase() ;
+			var sAttValue ;
+
+			// Ignore any attribute starting with "_fck".
+			if ( sAttName.StartsWith( '_fck' ) )
+				continue ;
+			// There is a bug in Mozilla that returns '_moz_xxx' attributes as specified.
+			else if ( sAttName.indexOf( '_moz' ) == 0 )
+				continue ;
+			// There are one cases (on Gecko) when the oAttribute.nodeValue must be used:
+			//		- for the "class" attribute
+			else if ( sAttName == 'class' )
+			{
+				sAttValue = oAttribute.nodeValue.replace( FCKRegexLib.FCK_Class, '' ) ;
+				if ( sAttValue.length == 0 )
+					continue ;
+			}
+			// XHTML doens't support attribute minimization like "CHECKED". It must be transformed to checked="checked".
+			else if ( oAttribute.nodeValue === true )
+				sAttValue = sAttName ;
+			else
+				sAttValue = htmlNode.getAttribute( sAttName, 2 ) ;	// We must use getAttribute to get it exactly as it is defined.
+
+			this._AppendAttribute( node, sAttName, sAttValue ) ;
+		}
+	}
+}
+
+if ( FCKBrowserInfo.IsOpera )
+{
+	// Opera moves the <FCK:meta> element outside head (#1166).
+
+	// Save a reference to the XML <head> node, so we can use it for
+	// orphan <meta>s.
+	FCKXHtml.TagProcessors['head'] = function( node, htmlNode )
+	{
+		FCKXHtml.XML._HeadElement = node ;
+
+		node = FCKXHtml._AppendChildNodes( node, htmlNode, true ) ;
+
+		return node ;
+	}
+
+	// Check whether a <meta> element is outside <head>, and move it to the
+	// proper place.
+	FCKXHtml.TagProcessors['meta'] = function( node, htmlNode, xmlNode )
+	{
+		if ( htmlNode.parentNode.nodeName.toLowerCase() != 'head' )
+		{
+			var headElement = FCKXHtml.XML._HeadElement ;
+
+			if ( headElement && xmlNode != headElement )
+			{
+				delete htmlNode._fckxhtmljob ;
+				FCKXHtml._AppendNode( headElement, htmlNode ) ;
+				return null ;
+			}
+		}
+
+		return node ;
+	}
+}
+
+if ( FCKBrowserInfo.IsGecko )
+{
+	// #2162, some Firefox extensions might add references to internal links
+	FCKXHtml.TagProcessors['link'] = function( node, htmlNode )
+	{
+		if ( htmlNode.href.substr(0, 9).toLowerCase() == 'chrome://' )
+			return false ;
+
+		return node ;
+	}
+
+}


Property changes on: announcement/trunk/src/main/webapp/fckeditor/editor/_source/internals/fckxhtml_gecko.js
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/webapp/fckeditor/editor/_source/internals/fckxhtml_ie.js
===================================================================
--- announcement/trunk/src/main/webapp/fckeditor/editor/_source/internals/fckxhtml_ie.js	                        (rev 0)
+++ announcement/trunk/src/main/webapp/fckeditor/editor/_source/internals/fckxhtml_ie.js	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,203 @@
+/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2008 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * Defines the FCKXHtml object, responsible for the XHTML operations.
+ * IE specific.
+ */
+
+FCKXHtml._GetMainXmlString = function()
+{
+	return this.MainNode.xml ;
+}
+
+FCKXHtml._AppendAttributes = function( xmlNode, htmlNode, node, nodeName )
+{
+	var aAttributes = htmlNode.attributes ;
+
+	for ( var n = 0 ; n < aAttributes.length ; n++ )
+	{
+		var oAttribute = aAttributes[n] ;
+
+		if ( oAttribute.specified )
+		{
+			var sAttName = oAttribute.nodeName.toLowerCase() ;
+			var sAttValue ;
+
+			// Ignore any attribute starting with "_fck".
+			if ( sAttName.StartsWith( '_fck' ) )
+				continue ;
+			// The following must be done because of a bug on IE regarding the style
+			// attribute. It returns "null" for the nodeValue.
+			else if ( sAttName == 'style' )
+			{
+				var data = FCKTools.ProtectFormStyles( htmlNode ) ;
+				sAttValue = htmlNode.style.cssText.replace( FCKRegexLib.StyleProperties, FCKTools.ToLowerCase ) ;
+				FCKTools.RestoreFormStyles( htmlNode, data ) ;
+			}
+			// There are two cases when the oAttribute.nodeValue must be used:
+			//		- for the "class" attribute
+			//		- for events attributes (on IE only).
+			else if ( sAttName == 'class' )
+			{
+				sAttValue = oAttribute.nodeValue.replace( FCKRegexLib.FCK_Class, '' ) ;
+				if ( sAttValue.length == 0 )
+					continue ;
+			}
+			else if ( sAttName.indexOf('on') == 0 )
+				sAttValue = oAttribute.nodeValue ;
+			else if ( nodeName == 'body' && sAttName == 'contenteditable' )
+				continue ;
+			// XHTML doens't support attribute minimization like "CHECKED". It must be transformed to checked="checked".
+			else if ( oAttribute.nodeValue === true )
+				sAttValue = sAttName ;
+			else
+			{
+				// We must use getAttribute to get it exactly as it is defined.
+				// There are some rare cases that IE throws an error here, so we must try/catch.
+				try
+				{
+					sAttValue = htmlNode.getAttribute( sAttName, 2 ) ;
+				}
+				catch (e) {}
+			}
+			this._AppendAttribute( node, sAttName, sAttValue || oAttribute.nodeValue ) ;
+		}
+	}
+}
+
+// On very rare cases, IE is loosing the "align" attribute for DIV. (right align and apply bulleted list)
+FCKXHtml.TagProcessors['div'] = function( node, htmlNode )
+{
+	if ( htmlNode.align.length > 0 )
+		FCKXHtml._AppendAttribute( node, 'align', htmlNode.align ) ;
+
+	node = FCKXHtml._AppendChildNodes( node, htmlNode, true ) ;
+
+	return node ;
+}
+
+// IE automatically changes <FONT> tags to <FONT size=+0>.
+FCKXHtml.TagProcessors['font'] = function( node, htmlNode )
+{
+	if ( node.attributes.length == 0 )
+		node = FCKXHtml.XML.createDocumentFragment() ;
+
+	node = FCKXHtml._AppendChildNodes( node, htmlNode ) ;
+
+	return node ;
+}
+
+FCKXHtml.TagProcessors['form'] = function( node, htmlNode )
+{
+	if ( htmlNode.acceptCharset && htmlNode.acceptCharset.length > 0 && htmlNode.acceptCharset != 'UNKNOWN' )
+		FCKXHtml._AppendAttribute( node, 'accept-charset', htmlNode.acceptCharset ) ;
+
+	// IE has a bug and htmlNode.attributes['name'].specified=false if there is
+	// no element with id="name" inside the form (#360 and SF-BUG-1155726).
+	var nameAtt = htmlNode.attributes['name'] ;
+
+	if ( nameAtt && nameAtt.value.length > 0 )
+		FCKXHtml._AppendAttribute( node, 'name', nameAtt.value ) ;
+
+	node = FCKXHtml._AppendChildNodes( node, htmlNode, true ) ;
+
+	return node ;
+}
+
+// IE doens't see the value attribute as an attribute for the <INPUT> tag.
+FCKXHtml.TagProcessors['input'] = function( node, htmlNode )
+{
+	if ( htmlNode.name )
+		FCKXHtml._AppendAttribute( node, 'name', htmlNode.name ) ;
+
+	if ( htmlNode.value && !node.attributes.getNamedItem( 'value' ) )
+		FCKXHtml._AppendAttribute( node, 'value', htmlNode.value ) ;
+
+	if ( !node.attributes.getNamedItem( 'type' ) )
+		FCKXHtml._AppendAttribute( node, 'type', 'text' ) ;
+
+	return node ;
+}
+
+FCKXHtml.TagProcessors['label'] = function( node, htmlNode )
+{
+	if ( htmlNode.htmlFor.length > 0 )
+		FCKXHtml._AppendAttribute( node, 'for', htmlNode.htmlFor ) ;
+
+	node = FCKXHtml._AppendChildNodes( node, htmlNode ) ;
+
+	return node ;
+}
+
+// Fix behavior for IE, it doesn't read back the .name on newly created maps
+FCKXHtml.TagProcessors['map'] = function( node, htmlNode )
+{
+	if ( ! node.attributes.getNamedItem( 'name' ) )
+	{
+		var name = htmlNode.name ;
+		if ( name )
+			FCKXHtml._AppendAttribute( node, 'name', name ) ;
+	}
+
+	node = FCKXHtml._AppendChildNodes( node, htmlNode, true ) ;
+
+	return node ;
+}
+
+FCKXHtml.TagProcessors['meta'] = function( node, htmlNode )
+{
+	var oHttpEquiv = node.attributes.getNamedItem( 'http-equiv' ) ;
+
+	if ( oHttpEquiv == null || oHttpEquiv.value.length == 0 )
+	{
+		// Get the http-equiv value from the outerHTML.
+		var sHttpEquiv = htmlNode.outerHTML.match( FCKRegexLib.MetaHttpEquiv ) ;
+
+		if ( sHttpEquiv )
+		{
+			sHttpEquiv = sHttpEquiv[1] ;
+			FCKXHtml._AppendAttribute( node, 'http-equiv', sHttpEquiv ) ;
+		}
+	}
+
+	return node ;
+}
+
+// IE ignores the "SELECTED" attribute so we must add it manually.
+FCKXHtml.TagProcessors['option'] = function( node, htmlNode )
+{
+	if ( htmlNode.selected && !node.attributes.getNamedItem( 'selected' ) )
+		FCKXHtml._AppendAttribute( node, 'selected', 'selected' ) ;
+
+	node = FCKXHtml._AppendChildNodes( node, htmlNode ) ;
+
+	return node ;
+}
+
+// IE doens't hold the name attribute as an attribute for the <TEXTAREA> and <SELECT> tags.
+FCKXHtml.TagProcessors['textarea'] = FCKXHtml.TagProcessors['select'] = function( node, htmlNode )
+{
+	if ( htmlNode.name )
+		FCKXHtml._AppendAttribute( node, 'name', htmlNode.name ) ;
+
+	node = FCKXHtml._AppendChildNodes( node, htmlNode ) ;
+
+	return node ;
+}


Property changes on: announcement/trunk/src/main/webapp/fckeditor/editor/_source/internals/fckxhtml_ie.js
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/webapp/fckeditor/editor/_source/internals/fckxhtmlentities.js
===================================================================
--- announcement/trunk/src/main/webapp/fckeditor/editor/_source/internals/fckxhtmlentities.js	                        (rev 0)
+++ announcement/trunk/src/main/webapp/fckeditor/editor/_source/internals/fckxhtmlentities.js	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,354 @@
+/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2008 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * This file define the HTML entities handled by the editor.
+ */
+
+var FCKXHtmlEntities = new Object() ;
+
+FCKXHtmlEntities.Initialize = function()
+{
+	if ( FCKXHtmlEntities.Entities )
+		return ;
+
+	var sChars = '' ;
+	var oEntities, e ;
+
+	if ( FCKConfig.ProcessHTMLEntities )
+	{
+		FCKXHtmlEntities.Entities = {
+			// Latin-1 Entities
+			' ':'nbsp',
+			'¡':'iexcl',
+			'¢':'cent',
+			'£':'pound',
+			'¤':'curren',
+			'\':'yen',
+			'¦':'brvbar',
+			'§':'sect',
+			'¨':'uml',
+			'©':'copy',
+			'ª':'ordf',
+			'«':'laquo',
+			'¬':'not',
+			'­':'shy',
+			'®':'reg',
+			'¯':'macr',
+			'°':'deg',
+			'±':'plusmn',
+			'²':'sup2',
+			'³':'sup3',
+			'´':'acute',
+			'µ':'micro',
+			'¶':'para',
+			'·':'middot',
+			'¸':'cedil',
+			'¹':'sup1',
+			'º':'ordm',
+			'»':'raquo',
+			'¼':'frac14',
+			'½':'frac12',
+			'¾':'frac34',
+			'¿':'iquest',
+			'×':'times',
+			'÷':'divide',
+
+			// Symbols
+
+			'ƒ':'fnof',
+			'•':'bull',
+			'…':'hellip',
+			'′':'prime',
+			'″':'Prime',
+			'~':'oline',
+			'⁄':'frasl',
+			'℘':'weierp',
+			'ℑ':'image',
+			'ℜ':'real',
+			'™':'trade',
+			'ℵ':'alefsym',
+			'←':'larr',
+			'↑':'uarr',
+			'→':'rarr',
+			'↓':'darr',
+			'↔':'harr',
+			'↵':'crarr',
+			'⇐':'lArr',
+			'⇑':'uArr',
+			'⇒':'rArr',
+			'⇓':'dArr',
+			'⇔':'hArr',
+			'∀':'forall',
+			'∂':'part',
+			'∃':'exist',
+			'∅':'empty',
+			'∇':'nabla',
+			'∈':'isin',
+			'∉':'notin',
+			'∋':'ni',
+			'∏':'prod',
+			'∑':'sum',
+			'−':'minus',
+			'∗':'lowast',
+			'√':'radic',
+			'∝':'prop',
+			'∞':'infin',
+			'∠':'ang',
+			'∧':'and',
+			'∨':'or',
+			'∩':'cap',
+			'∪':'cup',
+			'∫':'int',
+			'∴':'there4',
+			'∼':'sim',
+			'≅':'cong',
+			'≈':'asymp',
+			'≠':'ne',
+			'≡':'equiv',
+			'≤':'le',
+			'≥':'ge',
+			'⊂':'sub',
+			'⊃':'sup',
+			'⊄':'nsub',
+			'⊆':'sube',
+			'⊇':'supe',
+			'⊕':'oplus',
+			'⊗':'otimes',
+			'⊥':'perp',
+			'⋅':'sdot',
+			'\u2308':'lceil',
+			'\u2309':'rceil',
+			'\u230a':'lfloor',
+			'\u230b':'rfloor',
+			'\u2329':'lang',
+			'\u232a':'rang',
+			'◊':'loz',
+			'♠':'spades',
+			'♣':'clubs',
+			'♥':'hearts',
+			'♦':'diams',
+
+			// Other Special Characters
+
+			'"':'quot',
+		//	'&':'amp',		// This entity is automatically handled by the XHTML parser.
+		//	'<':'lt',		// This entity is automatically handled by the XHTML parser.
+		//	'>':'gt',		// This entity is automatically handled by the XHTML parser.
+			'ˆ':'circ',
+			'˜':'tilde',
+			' ':'ensp',
+			' ':'emsp',
+			' ':'thinsp',
+			'‌':'zwnj',
+			'‍':'zwj',
+			'‎':'lrm',
+			'‏':'rlm',
+			'–':'ndash',
+			'—':'mdash',
+			'‘':'lsquo',
+			'’':'rsquo',
+			'‚':'sbquo',
+			'“':'ldquo',
+			'”':'rdquo',
+			'„':'bdquo',
+			'†':'dagger',
+			'‡':'Dagger',
+			'‰':'permil',
+			'‹':'lsaquo',
+			'›':'rsaquo',
+			'€':'euro'
+		} ;
+
+		// Process Base Entities.
+		for ( e in FCKXHtmlEntities.Entities )
+			sChars += e ;
+
+		// Include Latin Letters Entities.
+		if ( FCKConfig.IncludeLatinEntities )
+		{
+			oEntities = {
+				'À':'Agrave',
+				'Á':'Aacute',
+				'Â':'Acirc',
+				'Ã':'Atilde',
+				'Ä':'Auml',
+				'Å':'Aring',
+				'Æ':'AElig',
+				'Ç':'Ccedil',
+				'È':'Egrave',
+				'É':'Eacute',
+				'Ê':'Ecirc',
+				'Ë':'Euml',
+				'Ì':'Igrave',
+				'Í':'Iacute',
+				'Î':'Icirc',
+				'Ï':'Iuml',
+				'Ð':'ETH',
+				'Ñ':'Ntilde',
+				'Ò':'Ograve',
+				'Ó':'Oacute',
+				'Ô':'Ocirc',
+				'Õ':'Otilde',
+				'Ö':'Ouml',
+				'Ø':'Oslash',
+				'Ù':'Ugrave',
+				'Ú':'Uacute',
+				'Û':'Ucirc',
+				'Ü':'Uuml',
+				'Ý':'Yacute',
+				'Þ':'THORN',
+				'ß':'szlig',
+				'à':'agrave',
+				'á':'aacute',
+				'â':'acirc',
+				'ã':'atilde',
+				'ä':'auml',
+				'å':'aring',
+				'æ':'aelig',
+				'ç':'ccedil',
+				'è':'egrave',
+				'é':'eacute',
+				'ê':'ecirc',
+				'ë':'euml',
+				'ì':'igrave',
+				'í':'iacute',
+				'î':'icirc',
+				'ï':'iuml',
+				'ð':'eth',
+				'ñ':'ntilde',
+				'ò':'ograve',
+				'ó':'oacute',
+				'ô':'ocirc',
+				'õ':'otilde',
+				'ö':'ouml',
+				'ø':'oslash',
+				'ù':'ugrave',
+				'ú':'uacute',
+				'û':'ucirc',
+				'ü':'uuml',
+				'ý':'yacute',
+				'þ':'thorn',
+				'ÿ':'yuml',
+				'Œ':'OElig',
+				'œ':'oelig',
+				'Š':'Scaron',
+				'š':'scaron',
+				'Ÿ':'Yuml'
+			} ;
+
+			for ( e in oEntities )
+			{
+				FCKXHtmlEntities.Entities[ e ] = oEntities[ e ] ;
+				sChars += e ;
+			}
+
+			oEntities = null ;
+		}
+
+		// Include Greek Letters Entities.
+		if ( FCKConfig.IncludeGreekEntities )
+		{
+			oEntities = {
+				'Α':'Alpha',
+				'Β':'Beta',
+				'Γ':'Gamma',
+				'Δ':'Delta',
+				'Ε':'Epsilon',
+				'Ζ':'Zeta',
+				'Η':'Eta',
+				'Θ':'Theta',
+				'Ι':'Iota',
+				'Κ':'Kappa',
+				'Λ':'Lambda',
+				'Μ':'Mu',
+				'Ν':'Nu',
+				'Ξ':'Xi',
+				'Ο':'Omicron',
+				'Π':'Pi',
+				'Ρ':'Rho',
+				'Σ':'Sigma',
+				'Τ':'Tau',
+				'Υ':'Upsilon',
+				'Φ':'Phi',
+				'Χ':'Chi',
+				'Ψ':'Psi',
+				'Ω':'Omega',
+				'α':'alpha',
+				'β':'beta',
+				'γ':'gamma',
+				'δ':'delta',
+				'ε':'epsilon',
+				'ζ':'zeta',
+				'η':'eta',
+				'θ':'theta',
+				'ι':'iota',
+				'κ':'kappa',
+				'λ':'lambda',
+				'μ':'mu',
+				'ν':'nu',
+				'ξ':'xi',
+				'ο':'omicron',
+				'π':'pi',
+				'ρ':'rho',
+				'ς':'sigmaf',
+				'σ':'sigma',
+				'τ':'tau',
+				'υ':'upsilon',
+				'φ':'phi',
+				'χ':'chi',
+				'ψ':'psi',
+				'ω':'omega',
+				'\u03d1':'thetasym',
+				'\u03d2':'upsih',
+				'\u03d6':'piv'
+			} ;
+
+			for ( e in oEntities )
+			{
+				FCKXHtmlEntities.Entities[ e ] = oEntities[ e ] ;
+				sChars += e ;
+			}
+
+			oEntities = null ;
+		}
+	}
+	else
+	{
+		FCKXHtmlEntities.Entities = {} ;
+
+		// Even if we are not processing the entities, we must render the &nbsp;
+		// correctly. As we don't want HTML entities, let's use its numeric
+		// representation (&#160).
+		sChars = ' ' ;
+	}
+
+	// Create the Regex used to find entities in the text.
+	var sRegexPattern = '[' + sChars + ']' ;
+
+	if ( FCKConfig.ProcessNumericEntities )
+		sRegexPattern = '[^ -~]|' + sRegexPattern ;
+
+	var sAdditional = FCKConfig.AdditionalNumericEntities ;
+
+	if ( sAdditional && sAdditional.length > 0 )
+		sRegexPattern += '|' + FCKConfig.AdditionalNumericEntities ;
+
+	FCKXHtmlEntities.EntitiesRegex = new RegExp( sRegexPattern, 'g' ) ;
+}


Property changes on: announcement/trunk/src/main/webapp/fckeditor/editor/_source/internals/fckxhtmlentities.js
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/webapp/fckeditor/editor/css/behaviors/disablehandles.htc
===================================================================
--- announcement/trunk/src/main/webapp/fckeditor/editor/css/behaviors/disablehandles.htc	                        (rev 0)
+++ announcement/trunk/src/main/webapp/fckeditor/editor/css/behaviors/disablehandles.htc	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,15 @@
+<public:component lightweight="true">
+
+<script language="javascript">
+
+function CancelEvent()
+{
+	return false ;
+}
+
+this.onresizestart = CancelEvent ;
+this.onbeforeeditfocus = CancelEvent ;
+
+</script>
+
+</public:component>

Added: announcement/trunk/src/main/webapp/fckeditor/editor/css/behaviors/showtableborders.htc
===================================================================
--- announcement/trunk/src/main/webapp/fckeditor/editor/css/behaviors/showtableborders.htc	                        (rev 0)
+++ announcement/trunk/src/main/webapp/fckeditor/editor/css/behaviors/showtableborders.htc	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,36 @@
+<public:component lightweight="true">
+
+<public:attach event="oncontentready" onevent="ShowBorders()" />
+<public:attach event="onpropertychange" onevent="OnPropertyChange()" />
+
+<script language="javascript">
+
+var oClassRegex = /\s*FCK__ShowTableBorders/ ;
+
+function ShowBorders()
+{
+	if ( this.border == 0 )
+	{
+		if ( !oClassRegex.test( this.className ) )
+			this.className += ' FCK__ShowTableBorders' ;
+	}
+	else
+	{
+		if ( oClassRegex.test( this.className ) )
+		{
+			this.className = this.className.replace( oClassRegex, '' ) ;
+			if ( this.className.length == 0 )
+				this.removeAttribute( 'className', 0 ) ;
+		}
+	}
+}
+
+function OnPropertyChange()
+{
+	if ( event.propertyName == 'border' || event.propertyName == 'className' )
+		ShowBorders.call(this) ;
+}
+
+</script>
+
+</public:component>

Added: announcement/trunk/src/main/webapp/fckeditor/editor/css/fck_editorarea.css
===================================================================
--- announcement/trunk/src/main/webapp/fckeditor/editor/css/fck_editorarea.css	                        (rev 0)
+++ announcement/trunk/src/main/webapp/fckeditor/editor/css/fck_editorarea.css	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,92 @@
+/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2008 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * This is the default CSS file used by the editor area. It defines the
+ * initial font of the editor and background color.
+ *
+ * A user can configure the editor to use another CSS file. Just change
+ * the value of the FCKConfig.EditorAreaCSS key in the configuration
+ * file.
+ */
+
+/*
+    The "body" styles should match your editor web site, mainly regarding
+    background color and font family and size.
+*/
+
+body
+{
+	background-color: #ffffff;
+	padding: 5px 5px 5px 5px;
+	margin: 0px;
+}
+
+body, td
+{
+	font-family: Arial, Verdana, sans-serif;
+	font-size: 12px;
+}
+
+a[href]
+{
+	color: -moz-hyperlinktext !important;		/* For Firefox... mark as important, otherwise it becomes black */
+	text-decoration: -moz-anchor-decoration;	/* For Firefox 3, otherwise no underline will be used */
+}
+
+/*
+	Just uncomment the following block if you want to avoid spaces between
+	paragraphs. Remember to apply the same style in your output front end page.
+*/
+
+/*
+p, ul, li
+{
+	margin-top: 0px;
+	margin-bottom: 0px;
+}
+*/
+
+/*
+    The following are some sample styles used in the "Styles" toolbar command.
+    You should instead remove them, and include the styles used by the site
+    you are using the editor in.
+*/
+
+.Bold
+{
+	font-weight: bold;
+}
+
+.Title
+{
+	font-weight: bold;
+	font-size: 18px;
+	color: #cc3300;
+}
+
+.Code
+{
+	border: #8b4513 1px solid;
+	padding-right: 5px;
+	padding-left: 5px;
+	color: #000066;
+	font-family: 'Courier New' , Monospace;
+	background-color: #ff9933;
+}


Property changes on: announcement/trunk/src/main/webapp/fckeditor/editor/css/fck_editorarea.css
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/webapp/fckeditor/editor/css/fck_internal.css
===================================================================
--- announcement/trunk/src/main/webapp/fckeditor/editor/css/fck_internal.css	                        (rev 0)
+++ announcement/trunk/src/main/webapp/fckeditor/editor/css/fck_internal.css	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,199 @@
+/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2008 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * This CSS Style Sheet defines rules used by the editor for its internal use.
+ */
+
+/* #########
+ *  WARNING
+ * #########
+ * When changing this file, the minified version of it must be updated in the
+ * fckeditor.html file (see FCK_InternalCSS).
+ */
+
+/* Fix to allow putting the caret at the end of the content in Firefox if
+   clicking below the content. */
+html
+{
+	min-height: 100%;
+}
+
+table.FCK__ShowTableBorders, table.FCK__ShowTableBorders td, table.FCK__ShowTableBorders th
+{
+	border: #d3d3d3 1px solid;
+}
+
+form
+{
+	border: 1px dotted #FF0000;
+	padding: 2px;
+}
+
+.FCK__Flash
+{
+	border: #a9a9a9 1px solid;
+	background-position: center center;
+	background-image: url(images/fck_flashlogo.gif);
+	background-repeat: no-repeat;
+	width: 80px;
+	height: 80px;
+}
+
+.FCK__UnknownObject
+{
+	border: #a9a9a9 1px solid;
+	background-position: center center;
+	background-image: url(images/fck_plugin.gif);
+	background-repeat: no-repeat;
+	width: 80px;
+	height: 80px;
+}
+
+/* Empty anchors images */
+.FCK__Anchor
+{
+	border: 1px dotted #00F;
+	background-position: center center;
+	background-image: url(images/fck_anchor.gif);
+	background-repeat: no-repeat;
+	width: 16px;
+	height: 15px;
+	vertical-align: middle;
+}
+
+/* Anchors with content */
+.FCK__AnchorC
+{
+	border: 1px dotted #00F;
+	background-position: 1px center;
+	background-image: url(images/fck_anchor.gif);
+	background-repeat: no-repeat;
+	padding-left: 18px;
+}
+
+/* Any anchor for non-IE, if we combine it with the previous rule IE ignores all. */
+a[name]
+{
+	border: 1px dotted #00F;
+	background-position: 0 center;
+	background-image: url(images/fck_anchor.gif);
+	background-repeat: no-repeat;
+	padding-left: 18px;
+}
+
+.FCK__PageBreak
+{
+	background-position: center center;
+	background-image: url(images/fck_pagebreak.gif);
+	background-repeat: no-repeat;
+	clear: both;
+	display: block;
+	float: none;
+	width: 100%;
+	border-top: #999999 1px dotted;
+	border-bottom: #999999 1px dotted;
+	border-right: 0px;
+	border-left: 0px;
+	height: 5px;
+}
+
+/* Hidden fields */
+.FCK__InputHidden
+{
+	width: 19px;
+	height: 18px;
+	background-image: url(images/fck_hiddenfield.gif);
+	background-repeat: no-repeat;
+	vertical-align: text-bottom;
+	background-position: center center;
+}
+
+.FCK__ShowBlocks p,
+.FCK__ShowBlocks div,
+.FCK__ShowBlocks pre,
+.FCK__ShowBlocks address,
+.FCK__ShowBlocks blockquote,
+.FCK__ShowBlocks h1,
+.FCK__ShowBlocks h2,
+.FCK__ShowBlocks h3,
+.FCK__ShowBlocks h4,
+.FCK__ShowBlocks h5,
+.FCK__ShowBlocks h6
+{
+	background-repeat: no-repeat;
+	border: 1px dotted gray;
+	padding-top: 8px;
+	padding-left: 8px;
+}
+
+.FCK__ShowBlocks p
+{
+	background-image: url(images/block_p.png);
+}
+
+.FCK__ShowBlocks div
+{
+	background-image: url(images/block_div.png);
+}
+
+.FCK__ShowBlocks pre
+{
+	background-image: url(images/block_pre.png);
+}
+
+.FCK__ShowBlocks address
+{
+	background-image: url(images/block_address.png);
+}
+
+.FCK__ShowBlocks blockquote
+{
+	background-image: url(images/block_blockquote.png);
+}
+
+.FCK__ShowBlocks h1
+{
+	background-image: url(images/block_h1.png);
+}
+
+.FCK__ShowBlocks h2
+{
+	background-image: url(images/block_h2.png);
+}
+
+.FCK__ShowBlocks h3
+{
+	background-image: url(images/block_h3.png);
+}
+
+.FCK__ShowBlocks h4
+{
+	background-image: url(images/block_h4.png);
+}
+
+.FCK__ShowBlocks h5
+{
+	background-image: url(images/block_h5.png);
+}
+
+.FCK__ShowBlocks h6
+{
+	background-image: url(images/block_h6.png);
+}


Property changes on: announcement/trunk/src/main/webapp/fckeditor/editor/css/fck_internal.css
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/webapp/fckeditor/editor/css/fck_showtableborders_gecko.css
===================================================================
--- announcement/trunk/src/main/webapp/fckeditor/editor/css/fck_showtableborders_gecko.css	                        (rev 0)
+++ announcement/trunk/src/main/webapp/fckeditor/editor/css/fck_showtableborders_gecko.css	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,49 @@
+/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2008 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * This CSS Style Sheet defines the rules to show table borders on Gecko.
+ */
+
+/* #########
+ *  WARNING
+ * #########
+ * When changing this file, the minified version of it must be updated in the
+ * fckeditor.html file (see FCK_ShowTableBordersCSS).
+ */
+
+/* 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 ;
+}


Property changes on: announcement/trunk/src/main/webapp/fckeditor/editor/css/fck_showtableborders_gecko.css
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/webapp/fckeditor/editor/css/images/block_address.png
===================================================================
(Binary files differ)


Property changes on: announcement/trunk/src/main/webapp/fckeditor/editor/css/images/block_address.png
___________________________________________________________________
Name: svn:mime-type
   + image/png

Added: announcement/trunk/src/main/webapp/fckeditor/editor/css/images/block_blockquote.png
===================================================================
(Binary files differ)


Property changes on: announcement/trunk/src/main/webapp/fckeditor/editor/css/images/block_blockquote.png
___________________________________________________________________
Name: svn:mime-type
   + image/png

Added: announcement/trunk/src/main/webapp/fckeditor/editor/css/images/block_div.png
===================================================================
(Binary files differ)


Property changes on: announcement/trunk/src/main/webapp/fckeditor/editor/css/images/block_div.png
___________________________________________________________________
Name: svn:mime-type
   + image/png

Added: announcement/trunk/src/main/webapp/fckeditor/editor/css/images/block_h1.png
===================================================================
(Binary files differ)


Property changes on: announcement/trunk/src/main/webapp/fckeditor/editor/css/images/block_h1.png
___________________________________________________________________
Name: svn:mime-type
   + image/png

Added: announcement/trunk/src/main/webapp/fckeditor/editor/css/images/block_h2.png
===================================================================
(Binary files differ)


Property changes on: announcement/trunk/src/main/webapp/fckeditor/editor/css/images/block_h2.png
___________________________________________________________________
Name: svn:mime-type
   + image/png

Added: announcement/trunk/src/main/webapp/fckeditor/editor/css/images/block_h3.png
===================================================================
(Binary files differ)


Property changes on: announcement/trunk/src/main/webapp/fckeditor/editor/css/images/block_h3.png
___________________________________________________________________
Name: svn:mime-type
   + image/png

Added: announcement/trunk/src/main/webapp/fckeditor/editor/css/images/block_h4.png
===================================================================
(Binary files differ)


Property changes on: announcement/trunk/src/main/webapp/fckeditor/editor/css/images/block_h4.png
___________________________________________________________________
Name: svn:mime-type
   + image/png

Added: announcement/trunk/src/main/webapp/fckeditor/editor/css/images/block_h5.png
===================================================================
(Binary files differ)


Property changes on: announcement/trunk/src/main/webapp/fckeditor/editor/css/images/block_h5.png
___________________________________________________________________
Name: svn:mime-type
   + image/png

Added: announcement/trunk/src/main/webapp/fckeditor/editor/css/images/block_h6.png
===================================================================
(Binary files differ)


Property changes on: announcement/trunk/src/main/webapp/fckeditor/editor/css/images/block_h6.png
___________________________________________________________________
Name: svn:mime-type
   + image/png

Added: announcement/trunk/src/main/webapp/fckeditor/editor/css/images/block_p.png
===================================================================
(Binary files differ)


Property changes on: announcement/trunk/src/main/webapp/fckeditor/editor/css/images/block_p.png
___________________________________________________________________
Name: svn:mime-type
   + image/png

Added: announcement/trunk/src/main/webapp/fckeditor/editor/css/images/block_pre.png
===================================================================
(Binary files differ)


Property changes on: announcement/trunk/src/main/webapp/fckeditor/editor/css/images/block_pre.png
___________________________________________________________________
Name: svn:mime-type
   + image/png

Added: announcement/trunk/src/main/webapp/fckeditor/editor/css/images/fck_anchor.gif
===================================================================
(Binary files differ)


Property changes on: announcement/trunk/src/main/webapp/fckeditor/editor/css/images/fck_anchor.gif
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: announcement/trunk/src/main/webapp/fckeditor/editor/css/images/fck_flashlogo.gif
===================================================================
(Binary files differ)


Property changes on: announcement/trunk/src/main/webapp/fckeditor/editor/css/images/fck_flashlogo.gif
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: announcement/trunk/src/main/webapp/fckeditor/editor/css/images/fck_hiddenfield.gif
===================================================================
(Binary files differ)


Property changes on: announcement/trunk/src/main/webapp/fckeditor/editor/css/images/fck_hiddenfield.gif
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: announcement/trunk/src/main/webapp/fckeditor/editor/css/images/fck_pagebreak.gif
===================================================================
(Binary files differ)


Property changes on: announcement/trunk/src/main/webapp/fckeditor/editor/css/images/fck_pagebreak.gif
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: announcement/trunk/src/main/webapp/fckeditor/editor/css/images/fck_plugin.gif
===================================================================
(Binary files differ)


Property changes on: announcement/trunk/src/main/webapp/fckeditor/editor/css/images/fck_plugin.gif
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: announcement/trunk/src/main/webapp/fckeditor/editor/dialog/common/fck_dialog_common.css
===================================================================
--- announcement/trunk/src/main/webapp/fckeditor/editor/dialog/common/fck_dialog_common.css	                        (rev 0)
+++ announcement/trunk/src/main/webapp/fckeditor/editor/dialog/common/fck_dialog_common.css	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,85 @@
+/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2008 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * This is the CSS file used for interface details in some dialog
+ * windows.
+ */
+
+/* #########
+ *  WARNING
+ * #########
+ * When changing this file, the minified version of it must be updated in the
+ * fck_dialog_common.js file (see GetCommonDialogCss).
+ */
+
+.ImagePreviewArea
+{
+	border: #000000 1px solid;
+	overflow: auto;
+	width: 100%;
+	height: 170px;
+	background-color: #ffffff;
+}
+
+.FlashPreviewArea
+{
+	border: #000000 1px solid;
+	padding: 5px;
+	overflow: auto;
+	width: 100%;
+	height: 170px;
+	background-color: #ffffff;
+}
+
+.BtnReset
+{
+	float: left;
+	background-position: center center;
+	background-image: url(images/reset.gif);
+	width: 16px;
+	height: 16px;
+	background-repeat: no-repeat;
+	border: 1px none;
+	font-size: 1px ;
+}
+
+.BtnLocked, .BtnUnlocked
+{
+	float: left;
+	background-position: center center;
+	background-image: url(images/locked.gif);
+	width: 16px;
+	height: 16px;
+	background-repeat: no-repeat;
+	border: none 1px;
+	font-size: 1px ;
+}
+
+.BtnUnlocked
+{
+	background-image: url(images/unlocked.gif);
+}
+
+.BtnOver
+{
+	border: outset 1px;
+	cursor: pointer;
+	cursor: hand;
+}


Property changes on: announcement/trunk/src/main/webapp/fckeditor/editor/dialog/common/fck_dialog_common.css
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/webapp/fckeditor/editor/dialog/common/fck_dialog_common.js
===================================================================
--- announcement/trunk/src/main/webapp/fckeditor/editor/dialog/common/fck_dialog_common.js	                        (rev 0)
+++ announcement/trunk/src/main/webapp/fckeditor/editor/dialog/common/fck_dialog_common.js	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,311 @@
+/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2008 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * Useful functions used by almost all dialog window pages.
+ * Dialogs should link to this file as the very first script on the page.
+ */
+
+// Automatically detect the correct document.domain (#123).
+(function()
+{
+	var d = document.domain ;
+
+	while ( true )
+	{
+		// Test if we can access a parent property.
+		try
+		{
+			var test = window.parent.document.domain ;
+			break ;
+		}
+		catch( e ) {}
+
+		// Remove a domain part: www.mytest.example.com => mytest.example.com => example.com ...
+		d = d.replace( /.*?(?:\.|$)/, '' ) ;
+
+		if ( d.length == 0 )
+			break ;		// It was not able to detect the domain.
+
+		try
+		{
+			document.domain = d ;
+		}
+		catch (e)
+		{
+			break ;
+		}
+	}
+})() ;
+
+// Attention: FCKConfig must be available in the page.
+function GetCommonDialogCss( prefix )
+{
+	// CSS minified by http://iceyboard.no-ip.org/projects/css_compressor (see _dev/css_compression.txt).
+	return FCKConfig.BasePath + 'dialog/common/' + '|.ImagePreviewArea{border:#000 1px solid;overflow:auto;width:100%;height:170px;background-color:#fff}.FlashPreviewArea{border:#000 1px solid;padding:5px;overflow:auto;width:100%;height:170px;background-color:#fff}.BtnReset{float:left;background-position:center center;background-image:url(images/reset.gif);width:16px;height:16px;background-repeat:no-repeat;border:1px none;font-size:1px}.BtnLocked,.BtnUnlocked{float:left;background-position:center center;background-image:url(images/locked.gif);width:16px;height:16px;background-repeat:no-repeat;border:none 1px;font-size:1px}.BtnUnlocked{background-image:url(images/unlocked.gif)}.BtnOver{border:outset 1px;cursor:pointer;cursor:hand}' ;
+}
+
+// Gets a element by its Id. Used for shorter coding.
+function GetE( elementId )
+{
+	return document.getElementById( elementId )  ;
+}
+
+function ShowE( element, isVisible )
+{
+	if ( typeof( element ) == 'string' )
+		element = GetE( element ) ;
+	element.style.display = isVisible ? '' : 'none' ;
+}
+
+function SetAttribute( element, attName, attValue )
+{
+	if ( attValue == null || attValue.length == 0 )
+		element.removeAttribute( attName, 0 ) ;			// 0 : Case Insensitive
+	else
+		element.setAttribute( attName, attValue, 0 ) ;	// 0 : Case Insensitive
+}
+
+function GetAttribute( element, attName, valueIfNull )
+{
+	var oAtt = element.attributes[attName] ;
+
+	if ( oAtt == null || !oAtt.specified )
+		return valueIfNull ? valueIfNull : '' ;
+
+	var oValue = element.getAttribute( attName, 2 ) ;
+
+	if ( oValue == null )
+		oValue = oAtt.nodeValue ;
+
+	return ( oValue == null ? valueIfNull : oValue ) ;
+}
+
+function SelectField( elementId )
+{
+	var element = GetE( elementId ) ;
+	element.focus() ;
+
+	// element.select may not be available for some fields (like <select>).
+	if ( element.select )
+		element.select() ;
+}
+
+// Functions used by text fields to accept numbers only.
+var IsDigit = ( function()
+	{
+		var KeyIdentifierMap =
+		{
+			End			: 35,
+			Home		: 36,
+			Left		: 37,
+			Right		: 39,
+			'U+00007F'	: 46		// Delete
+		} ;
+
+		return function ( e )
+			{
+				if ( !e )
+					e = event ;
+
+				var iCode = ( e.keyCode || e.charCode ) ;
+
+				if ( !iCode && e.keyIdentifier && ( e.keyIdentifier in KeyIdentifierMap ) )
+						iCode = KeyIdentifierMap[ e.keyIdentifier ] ;
+
+				return (
+						( iCode >= 48 && iCode <= 57 )		// Numbers
+						|| (iCode >= 35 && iCode <= 40)		// Arrows, Home, End
+						|| iCode == 8						// Backspace
+						|| iCode == 46						// Delete
+						|| iCode == 9						// Tab
+				) ;
+			}
+	} )() ;
+
+String.prototype.Trim = function()
+{
+	return this.replace( /(^\s*)|(\s*$)/g, '' ) ;
+}
+
+String.prototype.StartsWith = function( value )
+{
+	return ( this.substr( 0, value.length ) == value ) ;
+}
+
+String.prototype.Remove = function( start, length )
+{
+	var s = '' ;
+
+	if ( start > 0 )
+		s = this.substring( 0, start ) ;
+
+	if ( start + length < this.length )
+		s += this.substring( start + length , this.length ) ;
+
+	return s ;
+}
+
+String.prototype.ReplaceAll = function( searchArray, replaceArray )
+{
+	var replaced = this ;
+
+	for ( var i = 0 ; i < searchArray.length ; i++ )
+	{
+		replaced = replaced.replace( searchArray[i], replaceArray[i] ) ;
+	}
+
+	return replaced ;
+}
+
+function OpenFileBrowser( url, width, height )
+{
+	// oEditor must be defined.
+
+	var iLeft = ( oEditor.FCKConfig.ScreenWidth  - width ) / 2 ;
+	var iTop  = ( oEditor.FCKConfig.ScreenHeight - height ) / 2 ;
+
+	var sOptions = "toolbar=no,status=no,resizable=yes,dependent=yes,scrollbars=yes" ;
+	sOptions += ",width=" + width ;
+	sOptions += ",height=" + height ;
+	sOptions += ",left=" + iLeft ;
+	sOptions += ",top=" + iTop ;
+
+	window.open( url, 'FCKBrowseWindow', sOptions ) ;
+}
+
+/**
+ Utility function to create/update an element with a name attribute in IE, so it behaves properly when moved around
+ It also allows to change the name or other special attributes in an existing node
+	oEditor : instance of FCKeditor where the element will be created
+	oOriginal : current element being edited or null if it has to be created
+	nodeName : string with the name of the element to create
+	oAttributes : Hash object with the attributes that must be set at creation time in IE
+								Those attributes will be set also after the element has been
+								created for any other browser to avoid redudant code
+*/
+function CreateNamedElement( oEditor, oOriginal, nodeName, oAttributes )
+{
+	var oNewNode ;
+
+	// IE doesn't allow easily to change properties of an existing object,
+	// so remove the old and force the creation of a new one.
+	var oldNode = null ;
+	if ( oOriginal && oEditor.FCKBrowserInfo.IsIE )
+	{
+		// Force the creation only if some of the special attributes have changed:
+		var bChanged = false;
+		for( var attName in oAttributes )
+			bChanged |= ( oOriginal.getAttribute( attName, 2) != oAttributes[attName] ) ;
+
+		if ( bChanged )
+		{
+			oldNode = oOriginal ;
+			oOriginal = null ;
+		}
+	}
+
+	// If the node existed (and it's not IE), then we just have to update its attributes
+	if ( oOriginal )
+	{
+		oNewNode = oOriginal ;
+	}
+	else
+	{
+		// #676, IE doesn't play nice with the name or type attribute
+		if ( oEditor.FCKBrowserInfo.IsIE )
+		{
+			var sbHTML = [] ;
+			sbHTML.push( '<' + nodeName ) ;
+			for( var prop in oAttributes )
+			{
+				sbHTML.push( ' ' + prop + '="' + oAttributes[prop] + '"' ) ;
+			}
+			sbHTML.push( '>' ) ;
+			if ( !oEditor.FCKListsLib.EmptyElements[nodeName.toLowerCase()] )
+				sbHTML.push( '</' + nodeName + '>' ) ;
+
+			oNewNode = oEditor.FCK.EditorDocument.createElement( sbHTML.join('') ) ;
+			// Check if we are just changing the properties of an existing node: copy its properties
+			if ( oldNode )
+			{
+				CopyAttributes( oldNode, oNewNode, oAttributes ) ;
+				oEditor.FCKDomTools.MoveChildren( oldNode, oNewNode ) ;
+				oldNode.parentNode.removeChild( oldNode ) ;
+				oldNode = null ;
+
+				if ( oEditor.FCK.Selection.SelectionData )
+				{
+					// Trick to refresh the selection object and avoid error in
+					// fckdialog.html Selection.EnsureSelection
+					var oSel = oEditor.FCK.EditorDocument.selection ;
+					oEditor.FCK.Selection.SelectionData = oSel.createRange() ; // Now oSel.type will be 'None' reflecting the real situation
+				}
+			}
+			oNewNode = oEditor.FCK.InsertElement( oNewNode ) ;
+
+			// FCK.Selection.SelectionData is broken by now since we've
+			// deleted the previously selected element. So we need to reassign it.
+			if ( oEditor.FCK.Selection.SelectionData )
+			{
+				var range = oEditor.FCK.EditorDocument.body.createControlRange() ;
+				range.add( oNewNode ) ;
+				oEditor.FCK.Selection.SelectionData = range ;
+			}
+		}
+		else
+		{
+			oNewNode = oEditor.FCK.InsertElement( nodeName ) ;
+		}
+	}
+
+	// Set the basic attributes
+	for( var attName in oAttributes )
+		oNewNode.setAttribute( attName, oAttributes[attName], 0 ) ;	// 0 : Case Insensitive
+
+	return oNewNode ;
+}
+
+// Copy all the attributes from one node to the other, kinda like a clone
+// But oSkipAttributes is an object with the attributes that must NOT be copied
+function CopyAttributes( oSource, oDest, oSkipAttributes )
+{
+	var aAttributes = oSource.attributes ;
+
+	for ( var n = 0 ; n < aAttributes.length ; n++ )
+	{
+		var oAttribute = aAttributes[n] ;
+
+		if ( oAttribute.specified )
+		{
+			var sAttName = oAttribute.nodeName ;
+			// We can set the type only once, so do it with the proper value, not copying it.
+			if ( sAttName in oSkipAttributes )
+				continue ;
+
+			var sAttValue = oSource.getAttribute( sAttName, 2 ) ;
+			if ( sAttValue == null )
+				sAttValue = oAttribute.nodeValue ;
+
+			oDest.setAttribute( sAttName, sAttValue, 0 ) ;	// 0 : Case Insensitive
+		}
+	}
+	// The style:
+	oDest.style.cssText = oSource.style.cssText ;
+}


Property changes on: announcement/trunk/src/main/webapp/fckeditor/editor/dialog/common/fck_dialog_common.js
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/webapp/fckeditor/editor/dialog/common/images/locked.gif
===================================================================
(Binary files differ)


Property changes on: announcement/trunk/src/main/webapp/fckeditor/editor/dialog/common/images/locked.gif
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: announcement/trunk/src/main/webapp/fckeditor/editor/dialog/common/images/reset.gif
===================================================================
(Binary files differ)


Property changes on: announcement/trunk/src/main/webapp/fckeditor/editor/dialog/common/images/reset.gif
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: announcement/trunk/src/main/webapp/fckeditor/editor/dialog/common/images/unlocked.gif
===================================================================
(Binary files differ)


Property changes on: announcement/trunk/src/main/webapp/fckeditor/editor/dialog/common/images/unlocked.gif
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: announcement/trunk/src/main/webapp/fckeditor/editor/dialog/fck_about/logo_fckeditor.gif
===================================================================
(Binary files differ)


Property changes on: announcement/trunk/src/main/webapp/fckeditor/editor/dialog/fck_about/logo_fckeditor.gif
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: announcement/trunk/src/main/webapp/fckeditor/editor/dialog/fck_about/logo_fredck.gif
===================================================================
(Binary files differ)


Property changes on: announcement/trunk/src/main/webapp/fckeditor/editor/dialog/fck_about/logo_fredck.gif
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: announcement/trunk/src/main/webapp/fckeditor/editor/dialog/fck_about/sponsors/spellchecker_net.gif
===================================================================
(Binary files differ)


Property changes on: announcement/trunk/src/main/webapp/fckeditor/editor/dialog/fck_about/sponsors/spellchecker_net.gif
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: announcement/trunk/src/main/webapp/fckeditor/editor/dialog/fck_about.html
===================================================================
--- announcement/trunk/src/main/webapp/fckeditor/editor/dialog/fck_about.html	                        (rev 0)
+++ announcement/trunk/src/main/webapp/fckeditor/editor/dialog/fck_about.html	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,161 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<!--
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2008 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * "About" dialog window.
+-->
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+	<title></title>
+	<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+	<meta name="robots" content="noindex, nofollow" />
+	<script src="common/fck_dialog_common.js" type="text/javascript"></script>
+	<script type="text/javascript">
+
+var oEditor = window.parent.InnerDialogLoaded() ;
+var FCKLang	= oEditor.FCKLang ;
+
+window.parent.AddTab( 'About', FCKLang.DlgAboutAboutTab ) ;
+window.parent.AddTab( 'License', FCKLang.DlgAboutLicenseTab ) ;
+window.parent.AddTab( 'BrowserInfo', FCKLang.DlgAboutBrowserInfoTab ) ;
+
+// Function called when a dialog tag is selected.
+function OnDialogTabChange( tabCode )
+{
+	ShowE('divAbout', ( tabCode == 'About' ) ) ;
+	ShowE('divLicense', ( tabCode == 'License' ) ) ;
+	ShowE('divInfo'	, ( tabCode == 'BrowserInfo' ) ) ;
+}
+
+function SendEMail()
+{
+	var eMail = 'mailto:' ;
+	eMail += 'fredck' ;
+	eMail += '@' ;
+	eMail += 'fckeditor' ;
+	eMail += '.' ;
+	eMail += 'net' ;
+
+	window.location = eMail ;
+}
+
+window.onload = function()
+{
+	// Translate the dialog box texts.
+	oEditor.FCKLanguageManager.TranslatePage(document) ;
+
+	window.parent.SetAutoSize( true ) ;
+}
+
+	</script>
+</head>
+<body style="overflow: hidden">
+	<div id="divAbout">
+		<table cellpadding="0" cellspacing="0" border="0" width="100%" style="height: 100%">
+			<tr>
+				<td colspan="2">
+					<img alt="" src="fck_about/logo_fckeditor.gif" width="236" height="41" align="left" />
+					<table width="80" border="0" cellspacing="0" cellpadding="5" bgcolor="#ffffff" align="right">
+						<tr>
+							<td align="center" nowrap="nowrap" style="border-right: #000000 1px solid; border-top: #000000 1px solid;
+								border-left: #000000 1px solid; border-bottom: #000000 1px solid">
+								<span fcklang="DlgAboutVersion">version</span>
+								<br />
+								<b>2.6.2</b><br />
+								Build 19417</td>
+						</tr>
+					</table>
+				</td>
+			</tr>
+			<tr style="height: 100%">
+				<td align="center" valign="middle">
+					<span style="font-size: 14px" dir="ltr">
+						<b><a href="http://www.fckeditor.net/?about" target="_blank" title="Visit the FCKeditor web site">
+							Support <b>Open Source</b> Software</a></b> </span>
+					<div style="padding-top:15px">
+						<img alt="" src="fck_about/logo_fredck.gif" width="87" height="36" />
+					</div>
+				</td>
+				<td align="center" nowrap="nowrap" valign="middle">
+					<div>
+						<div style="margin-bottom:5px" dir="ltr">Selected Sponsor</div>
+						<a href="http://www.spellchecker.net/fckeditor/" target="_blank"><img alt="Selected Sponsor" border="0" src="fck_about/sponsors/spellchecker_net.gif" width="75" height="75" /></a>
+					</div>
+				</td>
+			</tr>
+			<tr>
+				<td width="100%" nowrap="nowrap">
+					<span fcklang="DlgAboutInfo">For further information go to</span> <a href="http://www.fckeditor.net/?About"
+						target="_blank">http://www.fckeditor.net/</a>.
+					<br />
+					Copyright &copy; 2003-2008 <a href="#" onclick="SendEMail();">Frederico Caldeira Knabben</a>
+				</td>
+				<td align="center">
+					<a href="http://www.fckeditor.net/sponsors/apply" target="_blank">Become a Sponsor</a>
+				</td>
+			</tr>
+		</table>
+	</div>
+	<div id="divLicense" style="display: none">
+			<p>
+				Licensed under the terms of any of the following licenses at your
+				choice:
+			</p>
+			<ul>
+				<li style="margin-bottom:15px">
+					<b>GNU General Public License</b> Version 2 or later (the "GPL")<br />
+					<a href="http://www.gnu.org/licenses/gpl.html" target="_blank">http://www.gnu.org/licenses/gpl.html</a>
+				</li>
+				<li style="margin-bottom:15px">
+					<b>GNU Lesser General Public License</b> Version 2.1 or later (the "LGPL")<br />
+					<a href="http://www.gnu.org/licenses/lgpl.html" target="_blank">http://www.gnu.org/licenses/lgpl.html</a>
+				</li>
+				<li>
+					<b>Mozilla Public License</b> Version 1.1 or later (the "MPL")<br />
+					<a href="http://www.mozilla.org/MPL/MPL-1.1.html" target="_blank">http://www.mozilla.org/MPL/MPL-1.1.html</a>
+			   </li>
+			</ul>
+	</div>
+	<div id="divInfo" style="display: none" dir="ltr">
+		<table align="center" width="80%" border="0">
+			<tr>
+				<td>
+					<script type="text/javascript">
+<!--
+document.write( '<b>User Agent<\/b><br />' + window.navigator.userAgent + '<br /><br />' ) ;
+document.write( '<b>Browser<\/b><br />' + window.navigator.appName + ' ' + window.navigator.appVersion + '<br /><br />' ) ;
+document.write( '<b>Platform<\/b><br />' + window.navigator.platform + '<br /><br />' ) ;
+
+var sUserLang = '?' ;
+
+if ( window.navigator.language )
+	sUserLang = window.navigator.language.toLowerCase() ;
+else if ( window.navigator.userLanguage )
+	sUserLang = window.navigator.userLanguage.toLowerCase() ;
+
+document.write( '<b>User Language<\/b><br />' + sUserLang ) ;
+//-->
+					</script>
+				</td>
+			</tr>
+		</table>
+	</div>
+</body>
+</html>


Property changes on: announcement/trunk/src/main/webapp/fckeditor/editor/dialog/fck_about.html
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/webapp/fckeditor/editor/dialog/fck_anchor.html
===================================================================
--- announcement/trunk/src/main/webapp/fckeditor/editor/dialog/fck_anchor.html	                        (rev 0)
+++ announcement/trunk/src/main/webapp/fckeditor/editor/dialog/fck_anchor.html	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,212 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" >
+<!--
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2008 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * Anchor dialog window.
+-->
+<html>
+	<head>
+		<title>Anchor Properties</title>
+		<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+		<meta content="noindex, nofollow" name="robots">
+		<script src="common/fck_dialog_common.js" type="text/javascript"></script>
+		<script type="text/javascript">
+
+var dialog			= window.parent ;
+var oEditor			= dialog.InnerDialogLoaded() ;
+
+var FCK				= oEditor.FCK ;
+var FCKBrowserInfo	= oEditor.FCKBrowserInfo ;
+var FCKTools		= oEditor.FCKTools ;
+var FCKRegexLib		= oEditor.FCKRegexLib ;
+
+var oDOM			= FCK.EditorDocument ;
+
+var oFakeImage = dialog.Selection.GetSelectedElement() ;
+
+var oAnchor ;
+
+if ( oFakeImage )
+{
+	if ( oFakeImage.tagName == 'IMG' && oFakeImage.getAttribute('_fckanchor') )
+		oAnchor = FCK.GetRealElement( oFakeImage ) ;
+	else
+		oFakeImage = null ;
+}
+
+//Search for a real anchor
+if ( !oFakeImage )
+{
+	oAnchor = FCK.Selection.MoveToAncestorNode( 'A' ) ;
+	if ( oAnchor )
+		FCK.Selection.SelectNode( oAnchor ) ;
+}
+
+window.onload = function()
+{
+	// First of all, translate the dialog box texts
+	oEditor.FCKLanguageManager.TranslatePage(document) ;
+
+	if ( oAnchor )
+		GetE('txtName').value = oAnchor.name ;
+	else
+		oAnchor = null ;
+
+	window.parent.SetOkButton( true ) ;
+	window.parent.SetAutoSize( true ) ;
+
+	SelectField( 'txtName' ) ;
+}
+
+function Ok()
+{
+	var sNewName = GetE('txtName').value ;
+
+	// Remove any illegal character in a name attribute:
+	// A name should start with a letter, but the validator passes anyway.
+	sNewName = sNewName.replace( /[^\w-_\.:]/g, '_' ) ;
+
+	if ( sNewName.length == 0 )
+	{
+		// Remove the anchor if the user leaves the name blank
+		if ( oAnchor )
+		{
+			// Removes the current anchor from the document using the new command
+			FCK.Commands.GetCommand( 'AnchorDelete' ).Execute() ;
+			return true ;
+		}
+
+		alert( oEditor.FCKLang.DlgAnchorErrorName ) ;
+		return false ;
+	}
+
+	oEditor.FCKUndo.SaveUndoStep() ;
+
+	if ( oAnchor )	// Modifying an existent anchor.
+	{
+		ReadjustLinksToAnchor( oAnchor.name, sNewName );
+
+		// Buggy explorer, bad bad browser. http://alt-tag.com/blog/archives/2006/02/ie-dom-bugs/
+		// Instead of just replacing the .name for the existing anchor (in order to preserve the content), we must remove the .name
+		// and assign .name, although it won't appear until it's specially processed in fckxhtml.js
+
+		// We remove the previous name
+		oAnchor.removeAttribute( 'name' ) ;
+		// Now we set it, but later we must process it specially
+		oAnchor.name = sNewName ;
+
+		return true ;
+	}
+
+	// Create a new anchor preserving the current selection
+	var aNewAnchors = oEditor.FCK.CreateLink( '#' ) ;
+
+	if ( aNewAnchors.length == 0 )
+	{
+		// Nothing was selected, so now just create a normal A
+		aNewAnchors.push( oEditor.FCK.InsertElement( 'a' ) ) ;
+	}
+	else
+	{
+		// Remove the fake href
+		for ( var i = 0 ; i < aNewAnchors.length ; i++ )
+			aNewAnchors[i].removeAttribute( 'href' ) ;
+	}
+
+	// More than one anchors may have been created, so interact through all of them (see #220).
+	for ( var i = 0 ; i < aNewAnchors.length ; i++ )
+	{
+		oAnchor = aNewAnchors[i] ;
+
+		// Set the name
+		oAnchor.name = sNewName ;
+
+		// IE does require special processing to show the Anchor's image
+		// Opera doesn't allow to select empty anchors
+		if ( FCKBrowserInfo.IsIE || FCKBrowserInfo.IsOpera )
+		{
+			if ( oAnchor.innerHTML != '' )
+			{
+				if ( FCKBrowserInfo.IsIE )
+					oAnchor.className += ' FCK__AnchorC' ;
+			}
+			else
+			{
+				// Create a fake image for both IE and Opera
+				var oImg = oEditor.FCKDocumentProcessor_CreateFakeImage( 'FCK__Anchor', oAnchor.cloneNode(true) ) ;
+				oImg.setAttribute( '_fckanchor', 'true', 0 ) ;
+
+				oAnchor.parentNode.insertBefore( oImg, oAnchor ) ;
+				oAnchor.parentNode.removeChild( oAnchor ) ;
+			}
+
+		}
+	}
+
+	return true ;
+}
+
+// Checks all the links in the current page pointing to the current name and changes them to the new name
+function ReadjustLinksToAnchor( sCurrent, sNew )
+{
+	var oDoc = FCK.EditorDocument ;
+
+	var aLinks = oDoc.getElementsByTagName( 'A' ) ;
+
+	var sReference = '#' + sCurrent ;
+	// The url of the document, so we check absolute and partial references.
+	var sFullReference = oDoc.location.href.replace( /(#.*$)/, '') ;
+	sFullReference += sReference ;
+
+	var oLink ;
+	var i = aLinks.length - 1 ;
+	while ( i >= 0 && ( oLink = aLinks[i--] ) )
+	{
+		var sHRef = oLink.getAttribute( '_fcksavedurl' ) ;
+		if ( sHRef == null )
+			sHRef = oLink.getAttribute( 'href' , 2 ) || '' ;
+
+		if ( sHRef == sReference || sHRef == sFullReference )
+		{
+			oLink.href = '#' + sNew ;
+			SetAttribute( oLink, '_fcksavedurl', '#' + sNew ) ;
+		}
+	}
+}
+
+		</script>
+	</head>
+	<body style="overflow: hidden">
+		<table height="100%" width="100%">
+			<tr>
+				<td align="center">
+					<table border="0" cellpadding="0" cellspacing="0" width="80%">
+						<tr>
+							<td>
+								<span fckLang="DlgAnchorName">Anchor Name</span><BR>
+								<input id="txtName" style="WIDTH: 100%" type="text">
+							</td>
+						</tr>
+					</table>
+				</td>
+			</tr>
+		</table>
+	</body>
+</html>


Property changes on: announcement/trunk/src/main/webapp/fckeditor/editor/dialog/fck_anchor.html
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/webapp/fckeditor/editor/dialog/fck_button.html
===================================================================
--- announcement/trunk/src/main/webapp/fckeditor/editor/dialog/fck_button.html	                        (rev 0)
+++ announcement/trunk/src/main/webapp/fckeditor/editor/dialog/fck_button.html	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,104 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" >
+<!--
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2008 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * Button dialog window.
+-->
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+	<title>Button Properties</title>
+	<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+	<meta content="noindex, nofollow" name="robots" />
+	<script src="common/fck_dialog_common.js" type="text/javascript"></script>
+	<script type="text/javascript">
+
+var dialog	= window.parent ;
+var oEditor	= dialog.InnerDialogLoaded() ;
+
+// Gets the document DOM
+var oDOM = oEditor.FCK.EditorDocument ;
+
+var oActiveEl = dialog.Selection.GetSelectedElement() ;
+
+window.onload = function()
+{
+	// First of all, translate the dialog box texts
+	oEditor.FCKLanguageManager.TranslatePage(document) ;
+
+	if ( oActiveEl && oActiveEl.tagName.toUpperCase() == "INPUT" && ( oActiveEl.type == "button" || oActiveEl.type == "submit" || oActiveEl.type == "reset" ) )
+	{
+		GetE('txtName').value	= oActiveEl.name ;
+		GetE('txtValue').value	= oActiveEl.value ;
+		GetE('txtType').value	= oActiveEl.type ;
+	}
+	else
+		oActiveEl = null ;
+
+	dialog.SetOkButton( true ) ;
+	dialog.SetAutoSize( true ) ;
+	SelectField( 'txtName' ) ;
+}
+
+function Ok()
+{
+	oEditor.FCKUndo.SaveUndoStep() ;
+
+	oActiveEl = CreateNamedElement( oEditor, oActiveEl, 'INPUT', {name: GetE('txtName').value, type: GetE('txtType').value } ) ;
+
+	SetAttribute( oActiveEl, 'value', GetE('txtValue').value ) ;
+
+	return true ;
+}
+
+	</script>
+</head>
+<body style="overflow: hidden">
+	<table width="100%" style="height: 100%">
+		<tr>
+			<td align="center">
+				<table border="0" cellpadding="0" cellspacing="0" width="80%">
+					<tr>
+						<td colspan="">
+							<span fcklang="DlgCheckboxName">Name</span><br />
+							<input type="text" size="20" id="txtName" style="width: 100%" />
+						</td>
+					</tr>
+					<tr>
+						<td>
+							<span fcklang="DlgButtonText">Text (Value)</span><br />
+							<input type="text" id="txtValue" style="width: 100%" />
+						</td>
+					</tr>
+					<tr>
+						<td>
+							<span fcklang="DlgButtonType">Type</span><br />
+							<select id="txtType">
+								<option fcklang="DlgButtonTypeBtn" value="button" selected="selected">Button</option>
+								<option fcklang="DlgButtonTypeSbm" value="submit">Submit</option>
+								<option fcklang="DlgButtonTypeRst" value="reset">Reset</option>
+							</select>
+						</td>
+					</tr>
+				</table>
+			</td>
+		</tr>
+	</table>
+</body>
+</html>


Property changes on: announcement/trunk/src/main/webapp/fckeditor/editor/dialog/fck_button.html
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/webapp/fckeditor/editor/dialog/fck_checkbox.html
===================================================================
--- announcement/trunk/src/main/webapp/fckeditor/editor/dialog/fck_checkbox.html	                        (rev 0)
+++ announcement/trunk/src/main/webapp/fckeditor/editor/dialog/fck_checkbox.html	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,104 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" >
+<!--
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2008 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * Checkbox dialog window.
+-->
+<html>
+	<head>
+		<title>Checkbox Properties</title>
+		<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+		<meta content="noindex, nofollow" name="robots">
+		<script src="common/fck_dialog_common.js" type="text/javascript"></script>
+		<script type="text/javascript">
+
+var dialog	= window.parent ;
+var oEditor	= dialog.InnerDialogLoaded() ;
+
+// Gets the document DOM
+var oDOM = oEditor.FCK.EditorDocument ;
+
+var oActiveEl = dialog.Selection.GetSelectedElement() ;
+
+window.onload = function()
+{
+	// First of all, translate the dialog box texts
+	oEditor.FCKLanguageManager.TranslatePage(document) ;
+
+	if ( oActiveEl && oActiveEl.tagName == 'INPUT' && oActiveEl.type == 'checkbox' )
+	{
+		GetE('txtName').value		= oActiveEl.name ;
+		GetE('txtValue').value		= oEditor.FCKBrowserInfo.IsIE ? oActiveEl.value : GetAttribute( oActiveEl, 'value' ) ;
+		GetE('txtSelected').checked	= oActiveEl.checked ;
+	}
+	else
+		oActiveEl = null ;
+
+	dialog.SetOkButton( true ) ;
+	dialog.SetAutoSize( true ) ;
+	SelectField( 'txtName' ) ;
+}
+
+function Ok()
+{
+	oEditor.FCKUndo.SaveUndoStep() ;
+
+	oActiveEl = CreateNamedElement( oEditor, oActiveEl, 'INPUT', {name: GetE('txtName').value, type: 'checkbox' } ) ;
+
+	if ( oEditor.FCKBrowserInfo.IsIE )
+		oActiveEl.value = GetE('txtValue').value ;
+	else
+		SetAttribute( oActiveEl, 'value', GetE('txtValue').value ) ;
+
+	var bIsChecked = GetE('txtSelected').checked ;
+	SetAttribute( oActiveEl, 'checked', bIsChecked ? 'checked' : null ) ;	// For Firefox
+	oActiveEl.checked = bIsChecked ;
+
+	return true ;
+}
+
+		</script>
+	</head>
+	<body style="OVERFLOW: hidden" scroll="no">
+		<table height="100%" width="100%">
+			<tr>
+				<td align="center">
+					<table border="0" cellpadding="0" cellspacing="0" width="80%">
+						<tr>
+							<td>
+								<span fckLang="DlgCheckboxName">Name</span><br>
+								<input type="text" size="20" id="txtName" style="WIDTH: 100%">
+							</td>
+						</tr>
+						<tr>
+							<td>
+								<span fckLang="DlgCheckboxValue">Value</span><br>
+								<input type="text" size="20" id="txtValue" style="WIDTH: 100%">
+							</td>
+						</tr>
+						<tr>
+							<td><input type="checkbox" id="txtSelected"><label for="txtSelected" fckLang="DlgCheckboxSelected">Checked</label></td>
+						</tr>
+					</table>
+				</td>
+			</tr>
+		</table>
+	</body>
+</html>


Property changes on: announcement/trunk/src/main/webapp/fckeditor/editor/dialog/fck_checkbox.html
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/webapp/fckeditor/editor/dialog/fck_colorselector.html
===================================================================
--- announcement/trunk/src/main/webapp/fckeditor/editor/dialog/fck_colorselector.html	                        (rev 0)
+++ announcement/trunk/src/main/webapp/fckeditor/editor/dialog/fck_colorselector.html	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,172 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" >
+<!--
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2008 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * Color Selection dialog window.
+-->
+<html>
+	<head>
+		<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+		<meta name="robots" content="noindex, nofollow" />
+		<style TYPE="text/css">
+			#ColorTable		{ cursor: pointer ; cursor: hand ; }
+			#hicolor		{ height: 74px ; width: 74px ; border-width: 1px ; border-style: solid ; }
+			#hicolortext	{ width: 75px ; text-align: right ; margin-bottom: 7px ; }
+			#selhicolor		{ height: 20px ; width: 74px ; border-width: 1px ; border-style: solid ; }
+			#selcolor		{ width: 75px ; height: 20px ; margin-top: 0px ; margin-bottom: 7px ; }
+			#btnClear		{ width: 75px ; height: 22px ; margin-bottom: 6px ; }
+			.ColorCell		{ height: 15px ; width: 15px ; }
+		</style>
+		<script src="common/fck_dialog_common.js" type="text/javascript"></script>
+		<script type="text/javascript">
+
+var oEditor = window.parent.InnerDialogLoaded() ;
+
+function OnLoad()
+{
+	// First of all, translate the dialog box texts
+	oEditor.FCKLanguageManager.TranslatePage(document) ;
+
+	CreateColorTable() ;
+
+	window.parent.SetOkButton( true ) ;
+	window.parent.SetAutoSize( true ) ;
+}
+
+function CreateColorTable()
+{
+	// Get the target table.
+	var oTable = document.getElementById('ColorTable') ;
+
+	// Create the base colors array.
+	var aColors = ['00','33','66','99','cc','ff'] ;
+
+	// This function combines two ranges of three values from the color array into a row.
+	function AppendColorRow( rangeA, rangeB )
+	{
+		for ( var i = rangeA ; i < rangeA + 3 ; i++ )
+		{
+			var oRow = oTable.insertRow(-1) ;
+
+			for ( var j = rangeB ; j < rangeB + 3 ; j++ )
+			{
+				for ( var n = 0 ; n < 6 ; n++ )
+				{
+					AppendColorCell( oRow, '#' + aColors[j] + aColors[n] + aColors[i] ) ;
+				}
+			}
+		}
+	}
+
+	// This function create a single color cell in the color table.
+	function AppendColorCell( targetRow, color )
+	{
+		var oCell = targetRow.insertCell(-1) ;
+		oCell.className = 'ColorCell' ;
+		oCell.bgColor = color ;
+
+		oCell.onmouseover = function()
+		{
+			document.getElementById('hicolor').style.backgroundColor = this.bgColor ;
+			document.getElementById('hicolortext').innerHTML = this.bgColor ;
+		}
+
+		oCell.onclick = function()
+		{
+			document.getElementById('selhicolor').style.backgroundColor = this.bgColor ;
+			document.getElementById('selcolor').value = this.bgColor ;
+		}
+	}
+
+	AppendColorRow( 0, 0 ) ;
+	AppendColorRow( 3, 0 ) ;
+	AppendColorRow( 0, 3 ) ;
+	AppendColorRow( 3, 3 ) ;
+
+	// Create the last row.
+	var oRow = oTable.insertRow(-1) ;
+
+	// Create the gray scale colors cells.
+	for ( var n = 0 ; n < 6 ; n++ )
+	{
+		AppendColorCell( oRow, '#' + aColors[n] + aColors[n] + aColors[n] ) ;
+	}
+
+	// Fill the row with black cells.
+	for ( var i = 0 ; i < 12 ; i++ )
+	{
+		AppendColorCell( oRow, '#000000' ) ;
+	}
+}
+
+function Clear()
+{
+	document.getElementById('selhicolor').style.backgroundColor = '' ;
+	document.getElementById('selcolor').value = '' ;
+}
+
+function ClearActual()
+{
+	document.getElementById('hicolor').style.backgroundColor = '' ;
+	document.getElementById('hicolortext').innerHTML = '&nbsp;' ;
+}
+
+function UpdateColor()
+{
+	try		  { document.getElementById('selhicolor').style.backgroundColor = document.getElementById('selcolor').value ; }
+	catch (e) { Clear() ; }
+}
+
+function Ok()
+{
+	if ( typeof(window.parent.Args().CustomValue) == 'function' )
+		window.parent.Args().CustomValue( document.getElementById('selcolor').value ) ;
+
+	return true ;
+}
+		</script>
+	</head>
+	<body onload="OnLoad()" scroll="no" style="OVERFLOW: hidden">
+		<table cellpadding="0" cellspacing="0" border="0" width="100%" height="100%">
+			<tr>
+				<td align="center" valign="middle">
+					<table border="0" cellspacing="5" cellpadding="0" width="100%">
+						<tr>
+							<td valign="top" align="center" nowrap width="100%">
+								<table id="ColorTable" border="0" cellspacing="0" cellpadding="0" width="270" onmouseout="ClearActual();">
+								</table>
+							</td>
+							<td valign="top" align="left" nowrap>
+								<span fckLang="DlgColorHighlight">Highlight</span>
+								<div id="hicolor"></div>
+								<div id="hicolortext">&nbsp;</div>
+								<span fckLang="DlgColorSelected">Selected</span>
+								<div id="selhicolor"></div>
+								<input id="selcolor" type="text" maxlength="20" onchange="UpdateColor();">
+								<br>
+								<input id="btnClear" type="button" fckLang="DlgColorBtnClear" value="Clear" onclick="Clear();" />
+							</td>
+						</tr>
+					</table>
+				</td>
+			</tr>
+		</table>
+	</body>
+</html>


Property changes on: announcement/trunk/src/main/webapp/fckeditor/editor/dialog/fck_colorselector.html
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/webapp/fckeditor/editor/dialog/fck_docprops/fck_document_preview.html
===================================================================
--- announcement/trunk/src/main/webapp/fckeditor/editor/dialog/fck_docprops/fck_document_preview.html	                        (rev 0)
+++ announcement/trunk/src/main/webapp/fckeditor/editor/dialog/fck_docprops/fck_document_preview.html	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,113 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<!--
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2008 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * Preview shown in the "Document Properties" dialog window.
+-->
+<html>
+	<head>
+		<title>Document Properties - Preview</title>
+		<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+		<meta name="robots" content="noindex, nofollow">
+		<script language="javascript">
+
+var eBase = parent.FCK.EditorDocument.getElementsByTagName( 'BASE' ) ;
+if ( eBase.length > 0 && eBase[0].href.length > 0 )
+{
+	document.write( '<base href="' + eBase[0].href + '">' ) ;
+}
+
+window.onload = function()
+{
+	if ( typeof( parent.OnPreviewLoad ) == 'function' )
+		parent.OnPreviewLoad( window, document.body ) ;
+}
+
+function SetBaseHRef( baseHref )
+{
+	var eBase = document.createElement( 'BASE' ) ;
+	eBase.href = baseHref ;
+
+	var eHead = document.getElementsByTagName( 'HEAD' )[0] ;
+	eHead.appendChild( eBase ) ;
+}
+
+function SetLinkColor( color )
+{
+	if ( color && color.length > 0 )
+		document.getElementById('eLink').style.color = color ;
+	else
+		document.getElementById('eLink').style.color = window.document.linkColor ;
+}
+
+function SetVisitedColor( color )
+{
+	if ( color && color.length > 0 )
+		document.getElementById('eVisited').style.color = color ;
+	else
+		document.getElementById('eVisited').style.color = window.document.vlinkColor ;
+}
+
+function SetActiveColor( color )
+{
+	if ( color && color.length > 0 )
+		document.getElementById('eActive').style.color = color ;
+	else
+		document.getElementById('eActive').style.color = window.document.alinkColor ;
+}
+		</script>
+	</head>
+	<body>
+		<table width="100%" height="100%" cellpadding="0" cellspacing="0" border="0">
+			<tr>
+				<td align="center" valign="middle">
+					Normal Text
+				</td>
+				<td id="eLink" align="center" valign="middle">
+					<u>Link Text</u>
+				</td>
+			</tr>
+			<tr>
+				<td id="eVisited" valign="middle" align="center">
+					<u>Visited Link</u>
+				</td>
+				<td id="eActive" valign="middle" align="center">
+					<u>Active Link</u>
+				</td>
+			</tr>
+		</table>
+		<br>
+		<br>
+		<br>
+		<br>
+		<br>
+		<br>
+		<br>
+		<br>
+		<br>
+		<br>
+		<br>
+		<br>
+		<br>
+		<br>
+		<br>
+		<br>
+	</body>
+</html>


Property changes on: announcement/trunk/src/main/webapp/fckeditor/editor/dialog/fck_docprops/fck_document_preview.html
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/webapp/fckeditor/editor/dialog/fck_docprops.html
===================================================================
--- announcement/trunk/src/main/webapp/fckeditor/editor/dialog/fck_docprops.html	                        (rev 0)
+++ announcement/trunk/src/main/webapp/fckeditor/editor/dialog/fck_docprops.html	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,600 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<!--
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2008 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * Link dialog window.
+-->
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+	<title></title>
+	<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+	<meta content="noindex, nofollow" name="robots" />
+	<script src="common/fck_dialog_common.js" type="text/javascript"></script>
+	<script type="text/javascript">
+
+var oEditor		= window.parent.InnerDialogLoaded() ;
+var FCK			= oEditor.FCK ;
+var FCKLang		= oEditor.FCKLang ;
+var FCKConfig	= oEditor.FCKConfig ;
+
+//#### Dialog Tabs
+
+// Set the dialog tabs.
+window.parent.AddTab( 'General'		, FCKLang.DlgDocGeneralTab ) ;
+window.parent.AddTab( 'Background'	, FCKLang.DlgDocBackTab ) ;
+window.parent.AddTab( 'Colors'		, FCKLang.DlgDocColorsTab ) ;
+window.parent.AddTab( 'Meta'		, FCKLang.DlgDocMetaTab ) ;
+
+// Function called when a dialog tag is selected.
+function OnDialogTabChange( tabCode )
+{
+	ShowE( 'divGeneral'		, ( tabCode == 'General' ) ) ;
+	ShowE( 'divBackground'	, ( tabCode == 'Background' ) ) ;
+	ShowE( 'divColors'		, ( tabCode == 'Colors' ) ) ;
+	ShowE( 'divMeta'		, ( tabCode == 'Meta' ) ) ;
+
+	ShowE( 'ePreview'		, ( tabCode == 'Background' || tabCode == 'Colors' ) ) ;
+}
+
+//#### Get Base elements from the document: BEGIN
+
+// The HTML element of the document.
+var oHTML = FCK.EditorDocument.getElementsByTagName('html')[0] ;
+
+// The HEAD element of the document.
+var oHead = oHTML.getElementsByTagName('head')[0] ;
+
+var oBody = FCK.EditorDocument.body ;
+
+// This object contains all META tags defined in the document.
+var oMetaTags = new Object() ;
+
+// Get all META tags defined in the document.
+AppendMetaCollection( oMetaTags, oHead.getElementsByTagName('meta') ) ;
+AppendMetaCollection( oMetaTags, oHead.getElementsByTagName('fck:meta') ) ;
+
+function AppendMetaCollection( targetObject, metaCollection )
+{
+	// Loop throw all METAs and put it in the HashTable.
+	for ( var i = 0 ; i < metaCollection.length ; i++ )
+	{
+		// Try to get the "name" attribute.
+		var sName = GetAttribute( metaCollection[i], 'name', GetAttribute( metaCollection[i], '___fcktoreplace:name', '' ) ) ;
+
+		// If no "name", try with the "http-equiv" attribute.
+		if ( sName.length == 0 )
+		{
+			if ( oEditor.FCKBrowserInfo.IsIE )
+			{
+				// Get the http-equiv value from the outerHTML.
+				var oHttpEquivMatch = metaCollection[i].outerHTML.match( oEditor.FCKRegexLib.MetaHttpEquiv ) ;
+				if ( oHttpEquivMatch )
+					sName = oHttpEquivMatch[1] ;
+			}
+			else
+				sName = GetAttribute( metaCollection[i], 'http-equiv', '' ) ;
+		}
+
+		if ( sName.length > 0 )
+			targetObject[ sName.toLowerCase() ] = metaCollection[i] ;
+	}
+}
+
+//#### END
+
+// Set a META tag in the document.
+function SetMetadata( name, content, isHttp )
+{
+	if ( content.length == 0 )
+	{
+		RemoveMetadata( name ) ;
+		return ;
+	}
+
+	var oMeta = oMetaTags[ name.toLowerCase() ] ;
+
+	if ( !oMeta )
+	{
+		oMeta = oHead.appendChild( FCK.EditorDocument.createElement('META') ) ;
+
+		if ( isHttp )
+			SetAttribute( oMeta, 'http-equiv', name ) ;
+		else
+		{
+			// On IE, it is not possible to set the "name" attribute of the META tag.
+			// So a temporary attribute is used and it is replaced when getting the
+			// editor's HTML/XHTML value. This is sad, I know :(
+			if ( oEditor.FCKBrowserInfo.IsIE )
+				SetAttribute( oMeta, '___fcktoreplace:name', name ) ;
+			else
+				SetAttribute( oMeta, 'name', name ) ;
+		}
+
+		oMetaTags[ name.toLowerCase() ] = oMeta ;
+	}
+
+	SetAttribute( oMeta, 'content', content ) ;
+//	oMeta.content = content ;
+}
+
+function RemoveMetadata( name )
+{
+	var oMeta = oMetaTags[ name.toLowerCase() ] ;
+
+	if ( oMeta && oMeta != null )
+	{
+		oMeta.parentNode.removeChild( oMeta ) ;
+		oMetaTags[ name.toLowerCase() ] = null ;
+	}
+}
+
+function GetMetadata( name )
+{
+	var oMeta = oMetaTags[ name.toLowerCase() ] ;
+
+	if ( oMeta && oMeta != null )
+		return oMeta.getAttribute( 'content', 2 ) ;
+	else
+		return '' ;
+}
+
+window.onload = function ()
+{
+	// Show/Hide the "Browse Server" button.
+	GetE('tdBrowse').style.display = oEditor.FCKConfig.ImageBrowser ? "" : "none";
+
+	// First of all, translate the dialog box texts
+	oEditor.FCKLanguageManager.TranslatePage( document ) ;
+
+	FillFields() ;
+
+	UpdatePreview() ;
+
+	// Show the "Ok" button.
+	window.parent.SetOkButton( true ) ;
+
+	window.parent.SetAutoSize( true ) ;
+}
+
+function FillFields()
+{
+	// ### General Info
+	GetE('txtPageTitle').value = FCK.EditorDocument.title ;
+
+	GetE('selDirection').value	= GetAttribute( oHTML, 'dir', '' ) ;
+	GetE('txtLang').value		= GetAttribute( oHTML, 'xml:lang', GetAttribute( oHTML, 'lang', '' ) ) ;	// "xml:lang" takes precedence to "lang".
+
+	// Character Set Encoding.
+//	if ( oEditor.FCKBrowserInfo.IsIE )
+//		var sCharSet = FCK.EditorDocument.charset ;
+//	else
+		var sCharSet = GetMetadata( 'Content-Type' ) ;
+
+	if ( sCharSet != null && sCharSet.length > 0 )
+	{
+//		if ( !oEditor.FCKBrowserInfo.IsIE )
+			sCharSet = sCharSet.match( /[^=]*$/ ) ;
+
+		GetE('selCharSet').value = sCharSet ;
+
+		if ( GetE('selCharSet').selectedIndex == -1 )
+		{
+			GetE('selCharSet').value = '...' ;
+			GetE('txtCustomCharSet').value = sCharSet ;
+
+			CheckOther( GetE('selCharSet'), 'txtCustomCharSet' ) ;
+		}
+	}
+
+	// Document Type.
+	if ( FCK.DocTypeDeclaration && FCK.DocTypeDeclaration.length > 0 )
+	{
+		GetE('selDocType').value = FCK.DocTypeDeclaration ;
+
+		if ( GetE('selDocType').selectedIndex == -1 )
+		{
+			GetE('selDocType').value = '...' ;
+			GetE('txtDocType').value = FCK.DocTypeDeclaration ;
+
+			CheckOther( GetE('selDocType'), 'txtDocType' ) ;
+		}
+	}
+
+	// Document Type.
+	GetE('chkIncXHTMLDecl').checked = ( FCK.XmlDeclaration && FCK.XmlDeclaration.length > 0 ) ;
+
+	// ### Background
+	GetE('txtBackColor').value = GetAttribute( oBody, 'bgColor'		, '' ) ;
+	GetE('txtBackImage').value = GetAttribute( oBody, 'background'	, '' ) ;
+	GetE('chkBackNoScroll').checked = ( GetAttribute( oBody, 'bgProperties', '' ).toLowerCase() == 'fixed' ) ;
+
+	// ### Colors
+	GetE('txtColorText').value		= GetAttribute( oBody, 'text'	, '' ) ;
+	GetE('txtColorLink').value		= GetAttribute( oBody, 'link'	, '' ) ;
+	GetE('txtColorVisited').value	= GetAttribute( oBody, 'vLink'	, '' ) ;
+	GetE('txtColorActive').value	= GetAttribute( oBody, 'aLink'	, '' ) ;
+
+	// ### Margins
+	GetE('txtMarginTop').value		= GetAttribute( oBody, 'topMargin'		, '' ) ;
+	GetE('txtMarginLeft').value		= GetAttribute( oBody, 'leftMargin'		, '' ) ;
+	GetE('txtMarginRight').value	= GetAttribute( oBody, 'rightMargin'	, '' ) ;
+	GetE('txtMarginBottom').value	= GetAttribute( oBody, 'bottomMargin'	, '' ) ;
+
+	// ### Meta Data
+	GetE('txtMetaKeywords').value		= GetMetadata( 'keywords' ) ;
+	GetE('txtMetaDescription').value	= GetMetadata( 'description' ) ;
+	GetE('txtMetaAuthor').value			= GetMetadata( 'author' ) ;
+	GetE('txtMetaCopyright').value		= GetMetadata( 'copyright' ) ;
+}
+
+// Called when the "Ok" button is clicked.
+function Ok()
+{
+	// ### General Info
+	FCK.EditorDocument.title = GetE('txtPageTitle').value ;
+
+	var oHTML = FCK.EditorDocument.getElementsByTagName('html')[0] ;
+
+	SetAttribute( oHTML, 'dir'		, GetE('selDirection').value ) ;
+	SetAttribute( oHTML, 'lang'		, GetE('txtLang').value ) ;
+	SetAttribute( oHTML, 'xml:lang'	, GetE('txtLang').value ) ;
+
+	// Character Set Enconding.
+	var sCharSet = GetE('selCharSet').value ;
+	if ( sCharSet == '...' )
+		sCharSet = GetE('txtCustomCharSet').value ;
+
+	if ( sCharSet.length > 0 )
+			sCharSet = 'text/html; charset=' + sCharSet ;
+
+//	if ( oEditor.FCKBrowserInfo.IsIE )
+//		FCK.EditorDocument.charset = sCharSet ;
+//	else
+		SetMetadata( 'Content-Type', sCharSet, true ) ;
+
+	// Document Type
+	var sDocType = GetE('selDocType').value ;
+	if ( sDocType == '...' )
+		sDocType = GetE('txtDocType').value ;
+
+	FCK.DocTypeDeclaration = sDocType ;
+
+	// XHTML Declarations.
+	if ( GetE('chkIncXHTMLDecl').checked )
+	{
+		if ( sCharSet.length == 0 )
+			sCharSet = 'utf-8' ;
+
+		FCK.XmlDeclaration = '<' + '?xml version="1.0" encoding="' + sCharSet + '"?>' ;
+
+		SetAttribute( oHTML, 'xmlns', 'http://www.w3.org/1999/xhtml' ) ;
+	}
+	else
+	{
+		FCK.XmlDeclaration = null ;
+		oHTML.removeAttribute( 'xmlns', 0 ) ;
+	}
+
+	// ### Background
+	SetAttribute( oBody, 'bgcolor'		, GetE('txtBackColor').value ) ;
+	SetAttribute( oBody, 'background'	, GetE('txtBackImage').value ) ;
+	SetAttribute( oBody, 'bgproperties'	, GetE('chkBackNoScroll').checked ? 'fixed' : '' ) ;
+
+	// ### Colors
+	SetAttribute( oBody, 'text'	, GetE('txtColorText').value ) ;
+	SetAttribute( oBody, 'link'	, GetE('txtColorLink').value ) ;
+	SetAttribute( oBody, 'vlink', GetE('txtColorVisited').value ) ;
+	SetAttribute( oBody, 'alink', GetE('txtColorActive').value ) ;
+
+	// ### Margins
+	SetAttribute( oBody, 'topmargin'	, GetE('txtMarginTop').value ) ;
+	SetAttribute( oBody, 'leftmargin'	, GetE('txtMarginLeft').value ) ;
+	SetAttribute( oBody, 'rightmargin'	, GetE('txtMarginRight').value ) ;
+	SetAttribute( oBody, 'bottommargin'	, GetE('txtMarginBottom').value ) ;
+
+	// ### Meta data
+	SetMetadata( 'keywords'		, GetE('txtMetaKeywords').value ) ;
+	SetMetadata( 'description'	, GetE('txtMetaDescription').value ) ;
+	SetMetadata( 'author'		, GetE('txtMetaAuthor').value ) ;
+	SetMetadata( 'copyright'	, GetE('txtMetaCopyright').value ) ;
+
+	return true ;
+}
+
+var bPreviewIsLoaded = false ;
+var oPreviewWindow ;
+var oPreviewBody ;
+
+// Called by the Preview page when loaded.
+function OnPreviewLoad( previewWindow, previewBody )
+{
+	oPreviewWindow	= previewWindow ;
+	oPreviewBody	= previewBody ;
+
+	bPreviewIsLoaded = true ;
+	UpdatePreview() ;
+}
+
+function UpdatePreview()
+{
+	if ( !bPreviewIsLoaded )
+		return ;
+
+	// ### Background
+	SetAttribute( oPreviewBody, 'bgcolor'		, GetE('txtBackColor').value ) ;
+	SetAttribute( oPreviewBody, 'background'	, GetE('txtBackImage').value ) ;
+	SetAttribute( oPreviewBody, 'bgproperties'	, GetE('chkBackNoScroll').checked ? 'fixed' : '' ) ;
+
+	// ### Colors
+	SetAttribute( oPreviewBody, 'text', GetE('txtColorText').value ) ;
+
+	oPreviewWindow.SetLinkColor( GetE('txtColorLink').value ) ;
+	oPreviewWindow.SetVisitedColor( GetE('txtColorVisited').value ) ;
+	oPreviewWindow.SetActiveColor( GetE('txtColorActive').value ) ;
+}
+
+function CheckOther( combo, txtField )
+{
+	var bNotOther = ( combo.value != '...' ) ;
+
+	GetE(txtField).style.backgroundColor = ( bNotOther ? '#cccccc' : '' ) ;
+	GetE(txtField).disabled = bNotOther ;
+}
+
+function SetColor( inputId, color )
+{
+	GetE( inputId ).value = color + '' ;
+	UpdatePreview() ;
+}
+
+function SelectBackColor( color )		{ SetColor('txtBackColor', color ) ; }
+function SelectColorText( color )		{ SetColor('txtColorText', color ) ; }
+function SelectColorLink( color )		{ SetColor('txtColorLink', color ) ; }
+function SelectColorVisited( color )	{ SetColor('txtColorVisited', color ) ; }
+function SelectColorActive( color )		{ SetColor('txtColorActive', color ) ; }
+
+function SelectColor( wich )
+{
+	switch ( wich )
+	{
+		case 'Back'			: oEditor.FCKDialog.OpenDialog( 'FCKDialog_Color', FCKLang.DlgColorTitle, 'dialog/fck_colorselector.html', 410, 320, SelectBackColor, window ) ; return ;
+		case 'ColorText'	: oEditor.FCKDialog.OpenDialog( 'FCKDialog_Color', FCKLang.DlgColorTitle, 'dialog/fck_colorselector.html', 410, 320, SelectColorText, window ) ; return ;
+		case 'ColorLink'	: oEditor.FCKDialog.OpenDialog( 'FCKDialog_Color', FCKLang.DlgColorTitle, 'dialog/fck_colorselector.html', 410, 320, SelectColorLink, window ) ; return ;
+		case 'ColorVisited'	: oEditor.FCKDialog.OpenDialog( 'FCKDialog_Color', FCKLang.DlgColorTitle, 'dialog/fck_colorselector.html', 410, 320, SelectColorVisited, window ) ; return ;
+		case 'ColorActive'	: oEditor.FCKDialog.OpenDialog( 'FCKDialog_Color', FCKLang.DlgColorTitle, 'dialog/fck_colorselector.html', 410, 320, SelectColorActive, window ) ; return ;
+	}
+}
+
+function BrowseServerBack()
+{
+	OpenFileBrowser( FCKConfig.ImageBrowserURL, FCKConfig.ImageBrowserWindowWidth, FCKConfig.ImageBrowserWindowHeight ) ;
+}
+
+function SetUrl( url )
+{
+	GetE('txtBackImage').value = url ;
+	UpdatePreview() ;
+}
+
+	</script>
+</head>
+<body style="overflow: hidden">
+	<table cellspacing="0" cellpadding="0" width="100%" border="0" style="height: 100%">
+		<tr>
+			<td valign="top" style="height: 100%">
+				<div id="divGeneral">
+					<span fcklang="DlgDocPageTitle">Page Title</span><br />
+					<input id="txtPageTitle" style="width: 100%" type="text" />
+					<br />
+					<table cellspacing="0" cellpadding="0" border="0">
+						<tr>
+							<td>
+								<span fcklang="DlgDocLangDir">Language Direction</span><br />
+								<select id="selDirection">
+									<option value="" selected="selected"></option>
+									<option value="ltr" fcklang="DlgDocLangDirLTR">Left to Right (LTR)</option>
+									<option value="rtl" fcklang="DlgDocLangDirRTL">Right to Left (RTL)</option>
+								</select>
+							</td>
+							<td>
+								&nbsp;&nbsp;&nbsp;</td>
+							<td>
+								<span fcklang="DlgDocLangCode">Language Code</span><br />
+								<input id="txtLang" type="text" />
+							</td>
+						</tr>
+					</table>
+					<br />
+					<table cellspacing="0" cellpadding="0" width="100%" border="0">
+						<tr>
+							<td style="white-space: nowrap">
+								<span fcklang="DlgDocCharSet">Character Set Encoding</span><br />
+								<select id="selCharSet" onchange="CheckOther( this, 'txtCustomCharSet' );">
+									<option value="" selected="selected"></option>
+									<option value="us-ascii">ASCII</option>
+									<option fcklang="DlgDocCharSetCE" value="iso-8859-2">Central European</option>
+									<option fcklang="DlgDocCharSetCT" value="big5">Chinese Traditional (Big5)</option>
+									<option fcklang="DlgDocCharSetCR" value="iso-8859-5">Cyrillic</option>
+									<option fcklang="DlgDocCharSetGR" value="iso-8859-7">Greek</option>
+									<option fcklang="DlgDocCharSetJP" value="iso-2022-jp">Japanese</option>
+									<option fcklang="DlgDocCharSetKR" value="iso-2022-kr">Korean</option>
+									<option fcklang="DlgDocCharSetTR" value="iso-8859-9">Turkish</option>
+									<option fcklang="DlgDocCharSetUN" value="utf-8">Unicode (UTF-8)</option>
+									<option fcklang="DlgDocCharSetWE" value="iso-8859-1">Western European</option>
+									<option fcklang="DlgOpOther" value="...">&lt;Other&gt;</option>
+								</select>
+							</td>
+							<td>
+								&nbsp;&nbsp;&nbsp;</td>
+							<td width="100%">
+								<span fcklang="DlgDocCharSetOther">Other Character Set Encoding</span><br />
+								<input id="txtCustomCharSet" style="width: 100%; background-color: #cccccc" disabled="disabled"
+									type="text" />
+							</td>
+						</tr>
+						<tr>
+							<td colspan="3">
+								&nbsp;</td>
+						</tr>
+						<tr>
+							<td nowrap="nowrap">
+								<span fcklang="DlgDocDocType">Document Type Heading</span><br />
+								<select id="selDocType" name="selDocType" onchange="CheckOther( this, 'txtDocType' );">
+									<option value="" selected="selected"></option>
+									<option value='<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">'>HTML
+										4.01 Transitional</option>
+									<option value='<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">'>
+										HTML 4.01 Strict</option>
+									<option value='<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Frameset//EN" "http://www.w3.org/TR/html4/frameset.dtd">'>
+										HTML 4.01 Frameset</option>
+									<option value='<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">'>
+										XHTML 1.0 Transitional</option>
+									<option value='<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">'>
+										XHTML 1.0 Strict</option>
+									<option value='<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Frameset//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-frameset.dtd">'>
+										XHTML 1.0 Frameset</option>
+									<option value='<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">'>
+										XHTML 1.1</option>
+									<option value='<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">'>HTML 3.2</option>
+									<option value='<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">'>HTML 2.0</option>
+									<option value="..." fcklang="DlgOpOther">&lt;Other&gt;</option>
+								</select>
+							</td>
+							<td>
+							</td>
+							<td width="100%">
+								<span fcklang="DlgDocDocTypeOther">Other Document Type Heading</span><br />
+								<input id="txtDocType" style="width: 100%; background-color: #cccccc" disabled="disabled"
+									type="text" />
+							</td>
+						</tr>
+					</table>
+					<br />
+					<input id="chkIncXHTMLDecl" type="checkbox" />
+					<label for="chkIncXHTMLDecl" fcklang="DlgDocIncXHTML">
+						Include XHTML Declarations</label>
+				</div>
+				<div id="divBackground" style="display: none">
+					<span fcklang="DlgDocBgColor">Background Color</span><br />
+					<input id="txtBackColor" type="text" onchange="UpdatePreview();" onkeyup="UpdatePreview();" />&nbsp;<input
+						id="btnSelBackColor" onclick="SelectColor( 'Back' )" type="button" value="Select..."
+						fcklang="DlgCellBtnSelect" /><br />
+					<br />
+					<span fcklang="DlgDocBgImage">Background Image URL</span><br />
+					<table cellspacing="0" cellpadding="0" width="100%" border="0">
+						<tr>
+							<td width="100%">
+								<input id="txtBackImage" style="width: 100%" type="text" onchange="UpdatePreview();"
+									onkeyup="UpdatePreview();" /></td>
+							<td id="tdBrowse" nowrap="nowrap">
+								&nbsp;<input id="btnBrowse" onclick="BrowseServerBack();" type="button" fcklang="DlgBtnBrowseServer"
+									value="Browse Server" /></td>
+						</tr>
+					</table>
+					<input id="chkBackNoScroll" type="checkbox" onclick="UpdatePreview();" />
+					<label for="chkBackNoScroll" fcklang="DlgDocBgNoScroll">
+						Nonscrolling Background</label>
+				</div>
+				<div id="divColors" style="display: none">
+					<table cellspacing="0" cellpadding="0" width="100%" border="0">
+						<tr>
+							<td>
+								<span fcklang="DlgDocCText">Text</span><br />
+								<input id="txtColorText" type="text" onchange="UpdatePreview();" onkeyup="UpdatePreview();" /><input
+									onclick="SelectColor( 'ColorText' )" type="button" value="Select..." fcklang="DlgCellBtnSelect" />
+								<br />
+								<span fcklang="DlgDocCLink">Link</span><br />
+								<input id="txtColorLink" type="text" onchange="UpdatePreview();" onkeyup="UpdatePreview();" /><input
+									onclick="SelectColor( 'ColorLink' )" type="button" value="Select..." fcklang="DlgCellBtnSelect" />
+								<br />
+								<span fcklang="DlgDocCVisited">Visited Link</span><br />
+								<input id="txtColorVisited" type="text" onchange="UpdatePreview();" onkeyup="UpdatePreview();" /><input
+									onclick="SelectColor( 'ColorVisited' )" type="button" value="Select..." fcklang="DlgCellBtnSelect" />
+								<br />
+								<span fcklang="DlgDocCActive">Active Link</span><br />
+								<input id="txtColorActive" type="text" onchange="UpdatePreview();" onkeyup="UpdatePreview();" /><input
+									onclick="SelectColor( 'ColorActive' )" type="button" value="Select..." fcklang="DlgCellBtnSelect" />
+							</td>
+							<td valign="middle" align="center">
+								<table cellspacing="2" cellpadding="0" border="0">
+									<tr>
+										<td>
+											<span fcklang="DlgDocMargins">Page Margins</span></td>
+									</tr>
+									<tr>
+										<td style="border: #000000 1px solid; padding: 5px">
+											<table cellpadding="0" cellspacing="0" border="0" dir="ltr">
+												<tr>
+													<td align="center" colspan="3">
+														<span fcklang="DlgDocMaTop">Top</span><br />
+														<input id="txtMarginTop" type="text" size="3" />
+													</td>
+												</tr>
+												<tr>
+													<td align="left">
+														<span fcklang="DlgDocMaLeft">Left</span><br />
+														<input id="txtMarginLeft" type="text" size="3" />
+													</td>
+													<td>
+														&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</td>
+													<td align="right">
+														<span fcklang="DlgDocMaRight">Right</span><br />
+														<input id="txtMarginRight" type="text" size="3" />
+													</td>
+												</tr>
+												<tr>
+													<td align="center" colspan="3">
+														<span fcklang="DlgDocMaBottom">Bottom</span><br />
+														<input id="txtMarginBottom" type="text" size="3" />
+													</td>
+												</tr>
+											</table>
+										</td>
+									</tr>
+								</table>
+							</td>
+						</tr>
+					</table>
+				</div>
+				<div id="divMeta" style="display: none">
+					<span fcklang="DlgDocMeIndex">Document Indexing Keywords (comma separated)</span><br />
+					<textarea id="txtMetaKeywords" style="width: 100%" rows="2" cols="20"></textarea>
+					<br />
+					<span fcklang="DlgDocMeDescr">Document Description</span><br />
+					<textarea id="txtMetaDescription" style="width: 100%" rows="4" cols="20"></textarea>
+					<br />
+					<span fcklang="DlgDocMeAuthor">Author</span><br />
+					<input id="txtMetaAuthor" style="width: 100%" type="text" /><br />
+					<br />
+					<span fcklang="DlgDocMeCopy">Copyright</span><br />
+					<input id="txtMetaCopyright" type="text" style="width: 100%" />
+				</div>
+			</td>
+		</tr>
+		<tr id="ePreview" style="display: none">
+			<td>
+				<span fcklang="DlgDocPreview">Preview</span><br />
+				<iframe id="frmPreview" src="fck_docprops/fck_document_preview.html" width="100%"
+					height="100"></iframe>
+			</td>
+		</tr>
+	</table>
+</body>
+</html>


Property changes on: announcement/trunk/src/main/webapp/fckeditor/editor/dialog/fck_docprops.html
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/webapp/fckeditor/editor/dialog/fck_flash/fck_flash.js
===================================================================
--- announcement/trunk/src/main/webapp/fckeditor/editor/dialog/fck_flash/fck_flash.js	                        (rev 0)
+++ announcement/trunk/src/main/webapp/fckeditor/editor/dialog/fck_flash/fck_flash.js	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,300 @@
+/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2008 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * Scripts related to the Flash dialog window (see fck_flash.html).
+ */
+
+var dialog		= window.parent ;
+var oEditor		= dialog.InnerDialogLoaded() ;
+var FCK			= oEditor.FCK ;
+var FCKLang		= oEditor.FCKLang ;
+var FCKConfig	= oEditor.FCKConfig ;
+var FCKTools	= oEditor.FCKTools ;
+
+//#### Dialog Tabs
+
+// Set the dialog tabs.
+dialog.AddTab( 'Info', oEditor.FCKLang.DlgInfoTab ) ;
+
+if ( FCKConfig.FlashUpload )
+	dialog.AddTab( 'Upload', FCKLang.DlgLnkUpload ) ;
+
+if ( !FCKConfig.FlashDlgHideAdvanced )
+	dialog.AddTab( 'Advanced', oEditor.FCKLang.DlgAdvancedTag ) ;
+
+// Function called when a dialog tag is selected.
+function OnDialogTabChange( tabCode )
+{
+	ShowE('divInfo'		, ( tabCode == 'Info' ) ) ;
+	ShowE('divUpload'	, ( tabCode == 'Upload' ) ) ;
+	ShowE('divAdvanced'	, ( tabCode == 'Advanced' ) ) ;
+}
+
+// Get the selected flash embed (if available).
+var oFakeImage = dialog.Selection.GetSelectedElement() ;
+var oEmbed ;
+
+if ( oFakeImage )
+{
+	if ( oFakeImage.tagName == 'IMG' && oFakeImage.getAttribute('_fckflash') )
+		oEmbed = FCK.GetRealElement( oFakeImage ) ;
+	else
+		oFakeImage = null ;
+}
+
+window.onload = function()
+{
+	// Translate the dialog box texts.
+	oEditor.FCKLanguageManager.TranslatePage(document) ;
+
+	// Load the selected element information (if any).
+	LoadSelection() ;
+
+	// Show/Hide the "Browse Server" button.
+	GetE('tdBrowse').style.display = FCKConfig.FlashBrowser	? '' : 'none' ;
+
+	// Set the actual uploader URL.
+	if ( FCKConfig.FlashUpload )
+		GetE('frmUpload').action = FCKConfig.FlashUploadURL ;
+
+	dialog.SetAutoSize( true ) ;
+
+	// Activate the "OK" button.
+	dialog.SetOkButton( true ) ;
+
+	SelectField( 'txtUrl' ) ;
+}
+
+function LoadSelection()
+{
+	if ( ! oEmbed ) return ;
+
+	GetE('txtUrl').value    = GetAttribute( oEmbed, 'src', '' ) ;
+	GetE('txtWidth').value  = GetAttribute( oEmbed, 'width', '' ) ;
+	GetE('txtHeight').value = GetAttribute( oEmbed, 'height', '' ) ;
+
+	// Get Advances Attributes
+	GetE('txtAttId').value		= oEmbed.id ;
+	GetE('chkAutoPlay').checked	= GetAttribute( oEmbed, 'play', 'true' ) == 'true' ;
+	GetE('chkLoop').checked		= GetAttribute( oEmbed, 'loop', 'true' ) == 'true' ;
+	GetE('chkMenu').checked		= GetAttribute( oEmbed, 'menu', 'true' ) == 'true' ;
+	GetE('cmbScale').value		= GetAttribute( oEmbed, 'scale', '' ).toLowerCase() ;
+
+	GetE('txtAttTitle').value		= oEmbed.title ;
+
+	if ( oEditor.FCKBrowserInfo.IsIE )
+	{
+		GetE('txtAttClasses').value = oEmbed.getAttribute('className') || '' ;
+		GetE('txtAttStyle').value = oEmbed.style.cssText ;
+	}
+	else
+	{
+		GetE('txtAttClasses').value = oEmbed.getAttribute('class',2) || '' ;
+		GetE('txtAttStyle').value = oEmbed.getAttribute('style',2) || '' ;
+	}
+
+	UpdatePreview() ;
+}
+
+//#### The OK button was hit.
+function Ok()
+{
+	if ( GetE('txtUrl').value.length == 0 )
+	{
+		dialog.SetSelectedTab( 'Info' ) ;
+		GetE('txtUrl').focus() ;
+
+		alert( oEditor.FCKLang.DlgAlertUrl ) ;
+
+		return false ;
+	}
+
+	oEditor.FCKUndo.SaveUndoStep() ;
+	if ( !oEmbed )
+	{
+		oEmbed		= FCK.EditorDocument.createElement( 'EMBED' ) ;
+		oFakeImage  = null ;
+	}
+	UpdateEmbed( oEmbed ) ;
+
+	if ( !oFakeImage )
+	{
+		oFakeImage	= oEditor.FCKDocumentProcessor_CreateFakeImage( 'FCK__Flash', oEmbed ) ;
+		oFakeImage.setAttribute( '_fckflash', 'true', 0 ) ;
+		oFakeImage	= FCK.InsertElement( oFakeImage ) ;
+	}
+
+	oEditor.FCKEmbedAndObjectProcessor.RefreshView( oFakeImage, oEmbed ) ;
+
+	return true ;
+}
+
+function UpdateEmbed( e )
+{
+	SetAttribute( e, 'type'			, 'application/x-shockwave-flash' ) ;
+	SetAttribute( e, 'pluginspage'	, 'http://www.macromedia.com/go/getflashplayer' ) ;
+
+	SetAttribute( e, 'src', GetE('txtUrl').value ) ;
+	SetAttribute( e, "width" , GetE('txtWidth').value ) ;
+	SetAttribute( e, "height", GetE('txtHeight').value ) ;
+
+	// Advances Attributes
+
+	SetAttribute( e, 'id'	, GetE('txtAttId').value ) ;
+	SetAttribute( e, 'scale', GetE('cmbScale').value ) ;
+
+	SetAttribute( e, 'play', GetE('chkAutoPlay').checked ? 'true' : 'false' ) ;
+	SetAttribute( e, 'loop', GetE('chkLoop').checked ? 'true' : 'false' ) ;
+	SetAttribute( e, 'menu', GetE('chkMenu').checked ? 'true' : 'false' ) ;
+
+	SetAttribute( e, 'title'	, GetE('txtAttTitle').value ) ;
+
+	if ( oEditor.FCKBrowserInfo.IsIE )
+	{
+		SetAttribute( e, 'className', GetE('txtAttClasses').value ) ;
+		e.style.cssText = GetE('txtAttStyle').value ;
+	}
+	else
+	{
+		SetAttribute( e, 'class', GetE('txtAttClasses').value ) ;
+		SetAttribute( e, 'style', GetE('txtAttStyle').value ) ;
+	}
+}
+
+var ePreview ;
+
+function SetPreviewElement( previewEl )
+{
+	ePreview = previewEl ;
+
+	if ( GetE('txtUrl').value.length > 0 )
+		UpdatePreview() ;
+}
+
+function UpdatePreview()
+{
+	if ( !ePreview )
+		return ;
+
+	while ( ePreview.firstChild )
+		ePreview.removeChild( ePreview.firstChild ) ;
+
+	if ( GetE('txtUrl').value.length == 0 )
+		ePreview.innerHTML = '&nbsp;' ;
+	else
+	{
+		var oDoc	= ePreview.ownerDocument || ePreview.document ;
+		var e		= oDoc.createElement( 'EMBED' ) ;
+
+		SetAttribute( e, 'src', GetE('txtUrl').value ) ;
+		SetAttribute( e, 'type', 'application/x-shockwave-flash' ) ;
+		SetAttribute( e, 'width', '100%' ) ;
+		SetAttribute( e, 'height', '100%' ) ;
+
+		ePreview.appendChild( e ) ;
+	}
+}
+
+// <embed id="ePreview" src="fck_flash/claims.swf" width="100%" height="100%" style="visibility:hidden" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer">
+
+function BrowseServer()
+{
+	OpenFileBrowser( FCKConfig.FlashBrowserURL, FCKConfig.FlashBrowserWindowWidth, FCKConfig.FlashBrowserWindowHeight ) ;
+}
+
+function SetUrl( url, width, height )
+{
+	GetE('txtUrl').value = url ;
+
+	if ( width )
+		GetE('txtWidth').value = width ;
+
+	if ( height )
+		GetE('txtHeight').value = height ;
+
+	UpdatePreview() ;
+
+	dialog.SetSelectedTab( 'Info' ) ;
+}
+
+function OnUploadCompleted( errorNumber, fileUrl, fileName, customMsg )
+{
+	// Remove animation
+	window.parent.Throbber.Hide() ;
+	GetE( 'divUpload' ).style.display  = '' ;
+
+	switch ( errorNumber )
+	{
+		case 0 :	// No errors
+			alert( 'Your file has been successfully uploaded' ) ;
+			break ;
+		case 1 :	// Custom error
+			alert( customMsg ) ;
+			return ;
+		case 101 :	// Custom warning
+			alert( customMsg ) ;
+			break ;
+		case 201 :
+			alert( 'A file with the same name is already available. The uploaded file has been renamed to "' + fileName + '"' ) ;
+			break ;
+		case 202 :
+			alert( 'Invalid file type' ) ;
+			return ;
+		case 203 :
+			alert( "Security error. You probably don't have enough permissions to upload. Please check your server." ) ;
+			return ;
+		case 500 :
+			alert( 'The connector is disabled' ) ;
+			break ;
+		default :
+			alert( 'Error on file upload. Error number: ' + errorNumber ) ;
+			return ;
+	}
+
+	SetUrl( fileUrl ) ;
+	GetE('frmUpload').reset() ;
+}
+
+var oUploadAllowedExtRegex	= new RegExp( FCKConfig.FlashUploadAllowedExtensions, 'i' ) ;
+var oUploadDeniedExtRegex	= new RegExp( FCKConfig.FlashUploadDeniedExtensions, 'i' ) ;
+
+function CheckUpload()
+{
+	var sFile = GetE('txtUploadFile').value ;
+
+	if ( sFile.length == 0 )
+	{
+		alert( 'Please select a file to upload' ) ;
+		return false ;
+	}
+
+	if ( ( FCKConfig.FlashUploadAllowedExtensions.length > 0 && !oUploadAllowedExtRegex.test( sFile ) ) ||
+		( FCKConfig.FlashUploadDeniedExtensions.length > 0 && oUploadDeniedExtRegex.test( sFile ) ) )
+	{
+		OnUploadCompleted( 202 ) ;
+		return false ;
+	}
+
+	// Show animation
+	window.parent.Throbber.Show( 100 ) ;
+	GetE( 'divUpload' ).style.display  = 'none' ;
+
+	return true ;
+}


Property changes on: announcement/trunk/src/main/webapp/fckeditor/editor/dialog/fck_flash/fck_flash.js
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/webapp/fckeditor/editor/dialog/fck_flash/fck_flash_preview.html
===================================================================
--- announcement/trunk/src/main/webapp/fckeditor/editor/dialog/fck_flash/fck_flash_preview.html	                        (rev 0)
+++ announcement/trunk/src/main/webapp/fckeditor/editor/dialog/fck_flash/fck_flash_preview.html	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,50 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<!--
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2008 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * Preview page for the Flash dialog window.
+-->
+<html>
+	<head>
+		<title></title>
+		<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+		<meta name="robots" content="noindex, nofollow">
+		<script src="../common/fck_dialog_common.js" type="text/javascript"></script>
+		<script language="javascript">
+
+var FCKTools	= window.parent.FCKTools ;
+var FCKConfig	= window.parent.FCKConfig ;
+
+// Sets the Skin CSS
+document.write( FCKTools.GetStyleHtml( FCKConfig.SkinDialogCSS ) ) ;
+document.write( FCKTools.GetStyleHtml( GetCommonDialogCss( '../' ) ) ) ;
+
+if ( window.parent.FCKConfig.BaseHref.length > 0 )
+	document.write( '<base href="' + window.parent.FCKConfig.BaseHref + '">' ) ;
+
+window.onload = function()
+{
+	window.parent.SetPreviewElement( document.body ) ;
+}
+
+		</script>
+	</head>
+	<body style="COLOR: #000000; BACKGROUND-COLOR: #ffffff"></body>
+</html>


Property changes on: announcement/trunk/src/main/webapp/fckeditor/editor/dialog/fck_flash/fck_flash_preview.html
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/webapp/fckeditor/editor/dialog/fck_flash.html
===================================================================
--- announcement/trunk/src/main/webapp/fckeditor/editor/dialog/fck_flash.html	                        (rev 0)
+++ announcement/trunk/src/main/webapp/fckeditor/editor/dialog/fck_flash.html	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,152 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<!--
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2008 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * Flash Properties dialog window.
+-->
+<html>
+	<head>
+		<title>Flash Properties</title>
+		<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+		<meta content="noindex, nofollow" name="robots">
+		<script src="common/fck_dialog_common.js" type="text/javascript"></script>
+		<script src="fck_flash/fck_flash.js" type="text/javascript"></script>
+		<script type="text/javascript">
+
+document.write( FCKTools.GetStyleHtml( GetCommonDialogCss() ) ) ;
+
+		</script>
+	</head>
+	<body scroll="no" style="OVERFLOW: hidden">
+		<div id="divInfo">
+			<table cellSpacing="1" cellPadding="1" width="100%" border="0">
+				<tr>
+					<td>
+						<table cellSpacing="0" cellPadding="0" width="100%" border="0">
+							<tr>
+								<td width="100%"><span fckLang="DlgImgURL">URL</span>
+								</td>
+								<td id="tdBrowse" style="DISPLAY: none" noWrap rowSpan="2">&nbsp; <input id="btnBrowse" onclick="BrowseServer();" type="button" value="Browse Server" fckLang="DlgBtnBrowseServer">
+								</td>
+							</tr>
+							<tr>
+								<td vAlign="top"><input id="txtUrl" onblur="UpdatePreview();" style="WIDTH: 100%" type="text">
+								</td>
+							</tr>
+						</table>
+					</td>
+				</tr>
+				<TR>
+					<TD>
+						<table cellSpacing="0" cellPadding="0" border="0">
+							<TR>
+								<TD nowrap>
+									<span fckLang="DlgImgWidth">Width</span><br>
+									<input id="txtWidth" onkeypress="return IsDigit(event);" type="text" size="3">
+								</TD>
+								<TD>&nbsp;</TD>
+								<TD>
+									<span fckLang="DlgImgHeight">Height</span><br>
+									<input id="txtHeight" onkeypress="return IsDigit(event);" type="text" size="3">
+								</TD>
+							</TR>
+						</table>
+					</TD>
+				</TR>
+				<tr>
+					<td vAlign="top">
+						<table cellSpacing="0" cellPadding="0" width="100%" border="0">
+							<tr>
+								<td valign="top" width="100%">
+									<table cellSpacing="0" cellPadding="0" width="100%">
+										<tr>
+											<td><span fckLang="DlgImgPreview">Preview</span></td>
+										</tr>
+										<tr>
+											<td id="ePreviewCell" valign="top" class="FlashPreviewArea"><iframe src="fck_flash/fck_flash_preview.html" frameborder="0" marginheight="0" marginwidth="0"></iframe></td>
+										</tr>
+									</table>
+								</td>
+							</tr>
+						</table>
+					</td>
+				</tr>
+			</table>
+		</div>
+		<div id="divUpload" style="DISPLAY: none">
+			<form id="frmUpload" method="post" target="UploadWindow" enctype="multipart/form-data" action="" onsubmit="return CheckUpload();">
+				<span fckLang="DlgLnkUpload">Upload</span><br />
+				<input id="txtUploadFile" style="WIDTH: 100%" type="file" size="40" name="NewFile" /><br />
+				<br />
+				<input id="btnUpload" type="submit" value="Send it to the Server" fckLang="DlgLnkBtnUpload" />
+				<script type="text/javascript">
+					document.write( '<iframe name="UploadWindow" style="DISPLAY: none" src="' + FCKTools.GetVoidUrl() + '"><\/iframe>' ) ;
+				</script>
+			</form>
+		</div>
+		<div id="divAdvanced" style="DISPLAY: none">
+			<TABLE cellSpacing="0" cellPadding="0" border="0">
+				<TR>
+					<TD nowrap>
+						<span fckLang="DlgFlashScale">Scale</span><BR>
+						<select id="cmbScale">
+							<option value="" selected></option>
+							<option value="showall" fckLang="DlgFlashScaleAll">Show all</option>
+							<option value="noborder" fckLang="DlgFlashScaleNoBorder">No Border</option>
+							<option value="exactfit" fckLang="DlgFlashScaleFit">Exact Fit</option>
+						</select></TD>
+					<TD>&nbsp;&nbsp;&nbsp; &nbsp;
+					</TD>
+					<td valign="bottom">
+						<table>
+							<tr>
+								<td><input id="chkAutoPlay" type="checkbox" checked></td>
+								<td><label for="chkAutoPlay" nowrap fckLang="DlgFlashChkPlay">Auto Play</label>&nbsp;&nbsp;</td>
+								<td><input id="chkLoop" type="checkbox" checked></td>
+								<td><label for="chkLoop" nowrap fckLang="DlgFlashChkLoop">Loop</label>&nbsp;&nbsp;</td>
+								<td><input id="chkMenu" type="checkbox" checked></td>
+								<td><label for="chkMenu" nowrap fckLang="DlgFlashChkMenu">Enable Flash Menu</label></td>
+							</tr>
+						</table>
+					</td>
+				</TR>
+			</TABLE>
+			<br>
+			&nbsp;
+			<table cellSpacing="0" cellPadding="0" width="100%" align="center" border="0">
+				<tr>
+					<td vAlign="top" width="50%"><span fckLang="DlgGenId">Id</span><br>
+						<input id="txtAttId" style="WIDTH: 100%" type="text">
+					</td>
+					<td>&nbsp;&nbsp;</td>
+					<td vAlign="top" nowrap><span fckLang="DlgGenClass">Stylesheet Classes</span><br>
+						<input id="txtAttClasses" style="WIDTH: 100%" type="text">
+					</td>
+					<td>&nbsp;&nbsp;</td>
+					<td vAlign="top" nowrap width="50%">&nbsp;<span fckLang="DlgGenTitle">Advisory Title</span><br>
+						<input id="txtAttTitle" style="WIDTH: 100%" type="text">
+					</td>
+				</tr>
+			</table>
+			<span fckLang="DlgGenStyle">Style</span><br>
+			<input id="txtAttStyle" style="WIDTH: 100%" type="text">
+		</div>
+	</body>
+</html>


Property changes on: announcement/trunk/src/main/webapp/fckeditor/editor/dialog/fck_flash.html
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/webapp/fckeditor/editor/dialog/fck_form.html
===================================================================
--- announcement/trunk/src/main/webapp/fckeditor/editor/dialog/fck_form.html	                        (rev 0)
+++ announcement/trunk/src/main/webapp/fckeditor/editor/dialog/fck_form.html	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,109 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" >
+<!--
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2008 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * Form dialog window.
+-->
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+	<title></title>
+	<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+	<meta content="noindex, nofollow" name="robots" />
+	<script src="common/fck_dialog_common.js" type="text/javascript"></script>
+	<script type="text/javascript">
+
+var dialog	= window.parent ;
+var oEditor = dialog.InnerDialogLoaded() ;
+
+// Gets the document DOM
+var oDOM = oEditor.FCK.EditorDocument ;
+
+var oActiveEl = dialog.Selection.GetSelection().MoveToAncestorNode( 'FORM' ) ;
+
+window.onload = function()
+{
+	// First of all, translate the dialog box texts
+	oEditor.FCKLanguageManager.TranslatePage(document) ;
+
+	if ( oActiveEl )
+	{
+		GetE('txtName').value	= oActiveEl.name ;
+		GetE('txtAction').value	= oActiveEl.getAttribute( 'action', 2 ) ;
+		GetE('txtMethod').value	= oActiveEl.method ;
+	}
+	else
+		oActiveEl = null ;
+
+	dialog.SetOkButton( true ) ;
+	dialog.SetAutoSize( true ) ;
+	SelectField( 'txtName' ) ;
+}
+
+function Ok()
+{
+	if ( !oActiveEl )
+	{
+		oActiveEl = oEditor.FCK.InsertElement( 'form' ) ;
+
+		if ( oEditor.FCKBrowserInfo.IsGeckoLike )
+			oEditor.FCKTools.AppendBogusBr( oActiveEl ) ;
+	}
+
+	oActiveEl.name = GetE('txtName').value ;
+	SetAttribute( oActiveEl, 'action', GetE('txtAction').value ) ;
+	oActiveEl.method = GetE('txtMethod').value ;
+
+	return true ;
+}
+
+	</script>
+</head>
+<body style="overflow: hidden">
+	<table width="100%" style="height: 100%">
+		<tr>
+			<td align="center">
+				<table cellspacing="0" cellpadding="0" width="80%" border="0">
+					<tr>
+						<td>
+							<span fcklang="DlgFormName">Name</span><br />
+							<input style="width: 100%" type="text" id="txtName" />
+						</td>
+					</tr>
+					<tr>
+						<td>
+							<span fcklang="DlgFormAction">Action</span><br />
+							<input style="width: 100%" type="text" id="txtAction" />
+						</td>
+					</tr>
+					<tr>
+						<td>
+							<span fcklang="DlgFormMethod">Method</span><br />
+							<select id="txtMethod">
+								<option value="get" selected="selected">GET</option>
+								<option value="post">POST</option>
+							</select>
+						</td>
+					</tr>
+				</table>
+			</td>
+		</tr>
+	</table>
+</body>
+</html>


Property changes on: announcement/trunk/src/main/webapp/fckeditor/editor/dialog/fck_form.html
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/webapp/fckeditor/editor/dialog/fck_hiddenfield.html
===================================================================
--- announcement/trunk/src/main/webapp/fckeditor/editor/dialog/fck_hiddenfield.html	                        (rev 0)
+++ announcement/trunk/src/main/webapp/fckeditor/editor/dialog/fck_hiddenfield.html	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,115 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" >
+<!--
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2008 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * Hidden Field dialog window.
+-->
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+	<title>Hidden Field Properties</title>
+	<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+	<meta content="noindex, nofollow" name="robots" />
+	<script src="common/fck_dialog_common.js" type="text/javascript"></script>
+	<script type="text/javascript">
+
+var dialog	= window.parent ;
+var oEditor = dialog.InnerDialogLoaded() ;
+
+var FCK = oEditor.FCK ;
+
+// Gets the document DOM
+var oDOM = FCK.EditorDocument ;
+
+// Get the selected flash embed (if available).
+var oFakeImage = dialog.Selection.GetSelectedElement() ;
+var oActiveEl ;
+
+if ( oFakeImage )
+{
+	if ( oFakeImage.tagName == 'IMG' && oFakeImage.getAttribute('_fckinputhidden') )
+		oActiveEl = FCK.GetRealElement( oFakeImage ) ;
+	else
+		oFakeImage = null ;
+}
+
+window.onload = function()
+{
+	// First of all, translate the dialog box texts
+	oEditor.FCKLanguageManager.TranslatePage(document) ;
+
+	if ( oActiveEl )
+	{
+		GetE('txtName').value		= oActiveEl.name ;
+		GetE('txtValue').value		= oActiveEl.value ;
+	}
+
+	dialog.SetOkButton( true ) ;
+	dialog.SetAutoSize( true ) ;
+	SelectField( 'txtName' ) ;
+}
+
+
+function Ok()
+{
+	oEditor.FCKUndo.SaveUndoStep() ;
+
+	oActiveEl = CreateNamedElement( oEditor, oActiveEl, 'INPUT', {name: GetE('txtName').value, type: 'hidden' } ) ;
+
+	SetAttribute( oActiveEl, 'value', GetE('txtValue').value ) ;
+
+	if ( !oFakeImage )
+	{
+		oFakeImage	= oEditor.FCKDocumentProcessor_CreateFakeImage( 'FCK__InputHidden', oActiveEl ) ;
+		oFakeImage.setAttribute( '_fckinputhidden', 'true', 0 ) ;
+
+		oActiveEl.parentNode.insertBefore( oFakeImage, oActiveEl ) ;
+		oActiveEl.parentNode.removeChild( oActiveEl ) ;
+	}
+	else
+		oEditor.FCKUndo.SaveUndoStep() ;
+
+	return true ;
+}
+
+	</script>
+</head>
+<body style="overflow: hidden" scroll="no">
+	<table height="100%" width="100%">
+		<tr>
+			<td align="center">
+				<table border="0" class="inhoud" cellpadding="0" cellspacing="0" width="80%">
+					<tr>
+						<td>
+							<span fcklang="DlgHiddenName">Name</span><br />
+							<input type="text" size="20" id="txtName" style="width: 100%" />
+						</td>
+					</tr>
+					<tr>
+						<td>
+							<span fcklang="DlgHiddenValue">Value</span><br />
+							<input type="text" size="30" id="txtValue" style="width: 100%" />
+						</td>
+					</tr>
+				</table>
+			</td>
+		</tr>
+	</table>
+</body>
+</html>


Property changes on: announcement/trunk/src/main/webapp/fckeditor/editor/dialog/fck_hiddenfield.html
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/webapp/fckeditor/editor/dialog/fck_image/fck_image.js
===================================================================
--- announcement/trunk/src/main/webapp/fckeditor/editor/dialog/fck_image/fck_image.js	                        (rev 0)
+++ announcement/trunk/src/main/webapp/fckeditor/editor/dialog/fck_image/fck_image.js	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,512 @@
+/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2008 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * Scripts related to the Image dialog window (see fck_image.html).
+ */
+
+var dialog		= window.parent ;
+var oEditor		= dialog.InnerDialogLoaded() ;
+var FCK			= oEditor.FCK ;
+var FCKLang		= oEditor.FCKLang ;
+var FCKConfig	= oEditor.FCKConfig ;
+var FCKDebug	= oEditor.FCKDebug ;
+var FCKTools	= oEditor.FCKTools ;
+
+var bImageButton = ( document.location.search.length > 0 && document.location.search.substr(1) == 'ImageButton' ) ;
+
+//#### Dialog Tabs
+
+// Set the dialog tabs.
+dialog.AddTab( 'Info', FCKLang.DlgImgInfoTab ) ;
+
+if ( !bImageButton && !FCKConfig.ImageDlgHideLink )
+	dialog.AddTab( 'Link', FCKLang.DlgImgLinkTab ) ;
+
+if ( FCKConfig.ImageUpload )
+	dialog.AddTab( 'Upload', FCKLang.DlgLnkUpload ) ;
+
+if ( !FCKConfig.ImageDlgHideAdvanced )
+	dialog.AddTab( 'Advanced', FCKLang.DlgAdvancedTag ) ;
+
+// Function called when a dialog tag is selected.
+function OnDialogTabChange( tabCode )
+{
+	ShowE('divInfo'		, ( tabCode == 'Info' ) ) ;
+	ShowE('divLink'		, ( tabCode == 'Link' ) ) ;
+	ShowE('divUpload'	, ( tabCode == 'Upload' ) ) ;
+	ShowE('divAdvanced'	, ( tabCode == 'Advanced' ) ) ;
+}
+
+// Get the selected image (if available).
+var oImage = dialog.Selection.GetSelectedElement() ;
+
+if ( oImage && oImage.tagName != 'IMG' && !( oImage.tagName == 'INPUT' && oImage.type == 'image' ) )
+	oImage = null ;
+
+// Get the active link.
+var oLink = dialog.Selection.GetSelection().MoveToAncestorNode( 'A' ) ;
+
+var oImageOriginal ;
+
+function UpdateOriginal( resetSize )
+{
+	if ( !eImgPreview )
+		return ;
+
+	if ( GetE('txtUrl').value.length == 0 )
+	{
+		oImageOriginal = null ;
+		return ;
+	}
+
+	oImageOriginal = document.createElement( 'IMG' ) ;	// new Image() ;
+
+	if ( resetSize )
+	{
+		oImageOriginal.onload = function()
+		{
+			this.onload = null ;
+			ResetSizes() ;
+		}
+	}
+
+	oImageOriginal.src = eImgPreview.src ;
+}
+
+var bPreviewInitialized ;
+
+window.onload = function()
+{
+	// Translate the dialog box texts.
+	oEditor.FCKLanguageManager.TranslatePage(document) ;
+
+	GetE('btnLockSizes').title = FCKLang.DlgImgLockRatio ;
+	GetE('btnResetSize').title = FCKLang.DlgBtnResetSize ;
+
+	// Load the selected element information (if any).
+	LoadSelection() ;
+
+	// Show/Hide the "Browse Server" button.
+	GetE('tdBrowse').style.display				= FCKConfig.ImageBrowser	? '' : 'none' ;
+	GetE('divLnkBrowseServer').style.display	= FCKConfig.LinkBrowser		? '' : 'none' ;
+
+	UpdateOriginal() ;
+
+	// Set the actual uploader URL.
+	if ( FCKConfig.ImageUpload )
+		GetE('frmUpload').action = FCKConfig.ImageUploadURL ;
+
+	dialog.SetAutoSize( true ) ;
+
+	// Activate the "OK" button.
+	dialog.SetOkButton( true ) ;
+
+	SelectField( 'txtUrl' ) ;
+}
+
+function LoadSelection()
+{
+	if ( ! oImage ) return ;
+
+	var sUrl = oImage.getAttribute( '_fcksavedurl' ) ;
+	if ( sUrl == null )
+		sUrl = GetAttribute( oImage, 'src', '' ) ;
+
+	GetE('txtUrl').value    = sUrl ;
+	GetE('txtAlt').value    = GetAttribute( oImage, 'alt', '' ) ;
+	GetE('txtVSpace').value	= GetAttribute( oImage, 'vspace', '' ) ;
+	GetE('txtHSpace').value	= GetAttribute( oImage, 'hspace', '' ) ;
+	GetE('txtBorder').value	= GetAttribute( oImage, 'border', '' ) ;
+	GetE('cmbAlign').value	= GetAttribute( oImage, 'align', '' ) ;
+
+	var iWidth, iHeight ;
+
+	var regexSize = /^\s*(\d+)px\s*$/i ;
+
+	if ( oImage.style.width )
+	{
+		var aMatchW  = oImage.style.width.match( regexSize ) ;
+		if ( aMatchW )
+		{
+			iWidth = aMatchW[1] ;
+			oImage.style.width = '' ;
+			SetAttribute( oImage, 'width' , iWidth ) ;
+		}
+	}
+
+	if ( oImage.style.height )
+	{
+		var aMatchH  = oImage.style.height.match( regexSize ) ;
+		if ( aMatchH )
+		{
+			iHeight = aMatchH[1] ;
+			oImage.style.height = '' ;
+			SetAttribute( oImage, 'height', iHeight ) ;
+		}
+	}
+
+	GetE('txtWidth').value	= iWidth ? iWidth : GetAttribute( oImage, "width", '' ) ;
+	GetE('txtHeight').value	= iHeight ? iHeight : GetAttribute( oImage, "height", '' ) ;
+
+	// Get Advances Attributes
+	GetE('txtAttId').value			= oImage.id ;
+	GetE('cmbAttLangDir').value		= oImage.dir ;
+	GetE('txtAttLangCode').value	= oImage.lang ;
+	GetE('txtAttTitle').value		= oImage.title ;
+	GetE('txtLongDesc').value		= oImage.longDesc ;
+
+	if ( oEditor.FCKBrowserInfo.IsIE )
+	{
+		GetE('txtAttClasses').value = oImage.className || '' ;
+		GetE('txtAttStyle').value = oImage.style.cssText ;
+	}
+	else
+	{
+		GetE('txtAttClasses').value = oImage.getAttribute('class',2) || '' ;
+		GetE('txtAttStyle').value = oImage.getAttribute('style',2) ;
+	}
+
+	if ( oLink )
+	{
+		var sLinkUrl = oLink.getAttribute( '_fcksavedurl' ) ;
+		if ( sLinkUrl == null )
+			sLinkUrl = oLink.getAttribute('href',2) ;
+
+		GetE('txtLnkUrl').value		= sLinkUrl ;
+		GetE('cmbLnkTarget').value	= oLink.target ;
+	}
+
+	UpdatePreview() ;
+}
+
+//#### The OK button was hit.
+function Ok()
+{
+	if ( GetE('txtUrl').value.length == 0 )
+	{
+		dialog.SetSelectedTab( 'Info' ) ;
+		GetE('txtUrl').focus() ;
+
+		alert( FCKLang.DlgImgAlertUrl ) ;
+
+		return false ;
+	}
+
+	var bHasImage = ( oImage != null ) ;
+
+	if ( bHasImage && bImageButton && oImage.tagName == 'IMG' )
+	{
+		if ( confirm( 'Do you want to transform the selected image on a image button?' ) )
+			oImage = null ;
+	}
+	else if ( bHasImage && !bImageButton && oImage.tagName == 'INPUT' )
+	{
+		if ( confirm( 'Do you want to transform the selected image button on a simple image?' ) )
+			oImage = null ;
+	}
+
+	oEditor.FCKUndo.SaveUndoStep() ;
+	if ( !bHasImage )
+	{
+		if ( bImageButton )
+		{
+			oImage = FCK.EditorDocument.createElement( 'input' ) ;
+			oImage.type = 'image' ;
+			oImage = FCK.InsertElement( oImage ) ;
+		}
+		else
+			oImage = FCK.InsertElement( 'img' ) ;
+	}
+
+	UpdateImage( oImage ) ;
+
+	var sLnkUrl = GetE('txtLnkUrl').value.Trim() ;
+
+	if ( sLnkUrl.length == 0 )
+	{
+		if ( oLink )
+			FCK.ExecuteNamedCommand( 'Unlink' ) ;
+	}
+	else
+	{
+		if ( oLink )	// Modifying an existent link.
+			oLink.href = sLnkUrl ;
+		else			// Creating a new link.
+		{
+			if ( !bHasImage )
+				oEditor.FCKSelection.SelectNode( oImage ) ;
+
+			oLink = oEditor.FCK.CreateLink( sLnkUrl )[0] ;
+
+			if ( !bHasImage )
+			{
+				oEditor.FCKSelection.SelectNode( oLink ) ;
+				oEditor.FCKSelection.Collapse( false ) ;
+			}
+		}
+
+		SetAttribute( oLink, '_fcksavedurl', sLnkUrl ) ;
+		SetAttribute( oLink, 'target', GetE('cmbLnkTarget').value ) ;
+	}
+
+	return true ;
+}
+
+function UpdateImage( e, skipId )
+{
+	e.src = GetE('txtUrl').value ;
+	SetAttribute( e, "_fcksavedurl", GetE('txtUrl').value ) ;
+	SetAttribute( e, "alt"   , GetE('txtAlt').value ) ;
+	SetAttribute( e, "width" , GetE('txtWidth').value ) ;
+	SetAttribute( e, "height", GetE('txtHeight').value ) ;
+	SetAttribute( e, "vspace", GetE('txtVSpace').value ) ;
+	SetAttribute( e, "hspace", GetE('txtHSpace').value ) ;
+	SetAttribute( e, "border", GetE('txtBorder').value ) ;
+	SetAttribute( e, "align" , GetE('cmbAlign').value ) ;
+
+	// Advances Attributes
+
+	if ( ! skipId )
+		SetAttribute( e, 'id', GetE('txtAttId').value ) ;
+
+	SetAttribute( e, 'dir'		, GetE('cmbAttLangDir').value ) ;
+	SetAttribute( e, 'lang'		, GetE('txtAttLangCode').value ) ;
+	SetAttribute( e, 'title'	, GetE('txtAttTitle').value ) ;
+	SetAttribute( e, 'longDesc'	, GetE('txtLongDesc').value ) ;
+
+	if ( oEditor.FCKBrowserInfo.IsIE )
+	{
+		e.className = GetE('txtAttClasses').value ;
+		e.style.cssText = GetE('txtAttStyle').value ;
+	}
+	else
+	{
+		SetAttribute( e, 'class'	, GetE('txtAttClasses').value ) ;
+		SetAttribute( e, 'style', GetE('txtAttStyle').value ) ;
+	}
+}
+
+var eImgPreview ;
+var eImgPreviewLink ;
+
+function SetPreviewElements( imageElement, linkElement )
+{
+	eImgPreview = imageElement ;
+	eImgPreviewLink = linkElement ;
+
+	UpdatePreview() ;
+	UpdateOriginal() ;
+
+	bPreviewInitialized = true ;
+}
+
+function UpdatePreview()
+{
+	if ( !eImgPreview || !eImgPreviewLink )
+		return ;
+
+	if ( GetE('txtUrl').value.length == 0 )
+		eImgPreviewLink.style.display = 'none' ;
+	else
+	{
+		UpdateImage( eImgPreview, true ) ;
+
+		if ( GetE('txtLnkUrl').value.Trim().length > 0 )
+			eImgPreviewLink.href = 'javascript:void(null);' ;
+		else
+			SetAttribute( eImgPreviewLink, 'href', '' ) ;
+
+		eImgPreviewLink.style.display = '' ;
+	}
+}
+
+var bLockRatio = true ;
+
+function SwitchLock( lockButton )
+{
+	bLockRatio = !bLockRatio ;
+	lockButton.className = bLockRatio ? 'BtnLocked' : 'BtnUnlocked' ;
+	lockButton.title = bLockRatio ? 'Lock sizes' : 'Unlock sizes' ;
+
+	if ( bLockRatio )
+	{
+		if ( GetE('txtWidth').value.length > 0 )
+			OnSizeChanged( 'Width', GetE('txtWidth').value ) ;
+		else
+			OnSizeChanged( 'Height', GetE('txtHeight').value ) ;
+	}
+}
+
+// Fired when the width or height input texts change
+function OnSizeChanged( dimension, value )
+{
+	// Verifies if the aspect ration has to be maintained
+	if ( oImageOriginal && bLockRatio )
+	{
+		var e = dimension == 'Width' ? GetE('txtHeight') : GetE('txtWidth') ;
+
+		if ( value.length == 0 || isNaN( value ) )
+		{
+			e.value = '' ;
+			return ;
+		}
+
+		if ( dimension == 'Width' )
+			value = value == 0 ? 0 : Math.round( oImageOriginal.height * ( value  / oImageOriginal.width ) ) ;
+		else
+			value = value == 0 ? 0 : Math.round( oImageOriginal.width  * ( value / oImageOriginal.height ) ) ;
+
+		if ( !isNaN( value ) )
+			e.value = value ;
+	}
+
+	UpdatePreview() ;
+}
+
+// Fired when the Reset Size button is clicked
+function ResetSizes()
+{
+	if ( ! oImageOriginal ) return ;
+	if ( oEditor.FCKBrowserInfo.IsGecko && !oImageOriginal.complete )
+	{
+		setTimeout( ResetSizes, 50 ) ;
+		return ;
+	}
+
+	GetE('txtWidth').value  = oImageOriginal.width ;
+	GetE('txtHeight').value = oImageOriginal.height ;
+
+	UpdatePreview() ;
+}
+
+function BrowseServer()
+{
+	OpenServerBrowser(
+		'Image',
+		FCKConfig.ImageBrowserURL,
+		FCKConfig.ImageBrowserWindowWidth,
+		FCKConfig.ImageBrowserWindowHeight ) ;
+}
+
+function LnkBrowseServer()
+{
+	OpenServerBrowser(
+		'Link',
+		FCKConfig.LinkBrowserURL,
+		FCKConfig.LinkBrowserWindowWidth,
+		FCKConfig.LinkBrowserWindowHeight ) ;
+}
+
+function OpenServerBrowser( type, url, width, height )
+{
+	sActualBrowser = type ;
+	OpenFileBrowser( url, width, height ) ;
+}
+
+var sActualBrowser ;
+
+function SetUrl( url, width, height, alt )
+{
+	if ( sActualBrowser == 'Link' )
+	{
+		GetE('txtLnkUrl').value = url ;
+		UpdatePreview() ;
+	}
+	else
+	{
+		GetE('txtUrl').value = url ;
+		GetE('txtWidth').value = width ? width : '' ;
+		GetE('txtHeight').value = height ? height : '' ;
+
+		if ( alt )
+			GetE('txtAlt').value = alt;
+
+		UpdatePreview() ;
+		UpdateOriginal( true ) ;
+	}
+
+	dialog.SetSelectedTab( 'Info' ) ;
+}
+
+function OnUploadCompleted( errorNumber, fileUrl, fileName, customMsg )
+{
+	// Remove animation
+	window.parent.Throbber.Hide() ;
+	GetE( 'divUpload' ).style.display  = '' ;
+
+	switch ( errorNumber )
+	{
+		case 0 :	// No errors
+			alert( 'Your file has been successfully uploaded' ) ;
+			break ;
+		case 1 :	// Custom error
+			alert( customMsg ) ;
+			return ;
+		case 101 :	// Custom warning
+			alert( customMsg ) ;
+			break ;
+		case 201 :
+			alert( 'A file with the same name is already available. The uploaded file has been renamed to "' + fileName + '"' ) ;
+			break ;
+		case 202 :
+			alert( 'Invalid file type' ) ;
+			return ;
+		case 203 :
+			alert( "Security error. You probably don't have enough permissions to upload. Please check your server." ) ;
+			return ;
+		case 500 :
+			alert( 'The connector is disabled' ) ;
+			break ;
+		default :
+			alert( 'Error on file upload. Error number: ' + errorNumber ) ;
+			return ;
+	}
+
+	sActualBrowser = '' ;
+	SetUrl( fileUrl ) ;
+	GetE('frmUpload').reset() ;
+}
+
+var oUploadAllowedExtRegex	= new RegExp( FCKConfig.ImageUploadAllowedExtensions, 'i' ) ;
+var oUploadDeniedExtRegex	= new RegExp( FCKConfig.ImageUploadDeniedExtensions, 'i' ) ;
+
+function CheckUpload()
+{
+	var sFile = GetE('txtUploadFile').value ;
+
+	if ( sFile.length == 0 )
+	{
+		alert( 'Please select a file to upload' ) ;
+		return false ;
+	}
+
+	if ( ( FCKConfig.ImageUploadAllowedExtensions.length > 0 && !oUploadAllowedExtRegex.test( sFile ) ) ||
+		( FCKConfig.ImageUploadDeniedExtensions.length > 0 && oUploadDeniedExtRegex.test( sFile ) ) )
+	{
+		OnUploadCompleted( 202 ) ;
+		return false ;
+	}
+
+	// Show animation
+	window.parent.Throbber.Show( 100 ) ;
+	GetE( 'divUpload' ).style.display  = 'none' ;
+
+	return true ;
+}


Property changes on: announcement/trunk/src/main/webapp/fckeditor/editor/dialog/fck_image/fck_image.js
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/webapp/fckeditor/editor/dialog/fck_image/fck_image_preview.html
===================================================================
--- announcement/trunk/src/main/webapp/fckeditor/editor/dialog/fck_image/fck_image_preview.html	                        (rev 0)
+++ announcement/trunk/src/main/webapp/fckeditor/editor/dialog/fck_image/fck_image_preview.html	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,72 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<!--
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2008 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * Preview page for the Image dialog window.
+ *
+ * Curiosity: http://en.wikipedia.org/wiki/Lorem_ipsum
+-->
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+	<title></title>
+	<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+	<meta name="robots" content="noindex, nofollow" />
+	<script src="../common/fck_dialog_common.js" type="text/javascript"></script>
+	<script type="text/javascript">
+
+var FCKTools	= window.parent.FCKTools ;
+var FCKConfig	= window.parent.FCKConfig ;
+
+// Set the preview CSS
+document.write( FCKTools.GetStyleHtml( FCKConfig.EditorAreaCSS ) ) ;
+document.write( FCKTools.GetStyleHtml( FCKConfig.EditorAreaStyles ) ) ;
+
+if ( window.parent.FCKConfig.BaseHref.length > 0 )
+	document.write( '<base href="' + window.parent.FCKConfig.BaseHref + '">' ) ;
+
+window.onload = function()
+{
+	window.parent.SetPreviewElements(
+		document.getElementById( 'imgPreview' ),
+		document.getElementById( 'lnkPreview' ) ) ;
+}
+
+	</script>
+</head>
+<body>
+	<div>
+		<a id="lnkPreview" onclick="return false;" style="cursor: default">
+			<img id="imgPreview" onload="window.parent.UpdateOriginal();"
+				style="display: none" alt="" /></a>Lorem ipsum dolor sit amet, consectetuer adipiscing
+		elit. Maecenas feugiat consequat diam. Maecenas metus. Vivamus diam purus, cursus
+		a, commodo non, facilisis vitae, nulla. Aenean dictum lacinia tortor. Nunc iaculis,
+		nibh non iaculis aliquam, orci felis euismod neque, sed ornare massa mauris sed
+		velit. Nulla pretium mi et risus. Fusce mi pede, tempor id, cursus ac, ullamcorper
+		nec, enim. Sed tortor. Curabitur molestie. Duis velit augue, condimentum at, ultrices
+		a, luctus ut, orci. Donec pellentesque egestas eros. Integer cursus, augue in cursus
+		faucibus, eros pede bibendum sem, in tempus tellus justo quis ligula. Etiam eget
+		tortor. Vestibulum rutrum, est ut placerat elementum, lectus nisl aliquam velit,
+		tempor aliquam eros nunc nonummy metus. In eros metus, gravida a, gravida sed, lobortis
+		id, turpis. Ut ultrices, ipsum at venenatis fringilla, sem nulla lacinia tellus,
+		eget aliquet turpis mauris non enim. Nam turpis. Suspendisse lacinia. Curabitur
+		ac tortor ut ipsum egestas elementum. Nunc imperdiet gravida mauris.
+	</div>
+</body>
+</html>


Property changes on: announcement/trunk/src/main/webapp/fckeditor/editor/dialog/fck_image/fck_image_preview.html
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/webapp/fckeditor/editor/dialog/fck_image.html
===================================================================
--- announcement/trunk/src/main/webapp/fckeditor/editor/dialog/fck_image.html	                        (rev 0)
+++ announcement/trunk/src/main/webapp/fckeditor/editor/dialog/fck_image.html	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,258 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<!--
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2008 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * Image Properties dialog window.
+-->
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+	<title>Image Properties</title>
+	<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+	<meta name="robots" content="noindex, nofollow" />
+	<script src="common/fck_dialog_common.js" type="text/javascript"></script>
+	<script src="fck_image/fck_image.js" type="text/javascript"></script>
+		<script type="text/javascript">
+
+document.write( FCKTools.GetStyleHtml( GetCommonDialogCss() ) ) ;
+
+		</script>
+</head>
+<body scroll="no" style="overflow: hidden">
+	<div id="divInfo">
+		<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 fcklang="DlgImgURL">URL</span>
+							</td>
+							<td id="tdBrowse" style="display: none" nowrap="nowrap" rowspan="2">
+								&nbsp;
+								<input id="btnBrowse" onclick="BrowseServer();" type="button" value="Browse Server"
+									fcklang="DlgBtnBrowseServer" />
+							</td>
+						</tr>
+						<tr>
+							<td valign="top">
+								<input id="txtUrl" style="width: 100%" type="text" onblur="UpdatePreview();" />
+							</td>
+						</tr>
+					</table>
+				</td>
+			</tr>
+			<tr>
+				<td>
+					<span fcklang="DlgImgAlt">Short Description</span><br />
+					<input id="txtAlt" style="width: 100%" type="text" /><br />
+				</td>
+			</tr>
+			<tr height="100%">
+				<td valign="top">
+					<table cellspacing="0" cellpadding="0" width="100%" border="0" height="100%">
+						<tr>
+							<td valign="top">
+								<br />
+								<table cellspacing="0" cellpadding="0" border="0">
+									<tr>
+										<td nowrap="nowrap">
+											<span fcklang="DlgImgWidth">Width</span>&nbsp;</td>
+										<td>
+											<input type="text" size="3" id="txtWidth" onkeyup="OnSizeChanged('Width',this.value);" /></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 fcklang="DlgImgHeight">Height</span>&nbsp;</td>
+										<td>
+											<input type="text" size="3" id="txtHeight" onkeyup="OnSizeChanged('Height',this.value);" /></td>
+									</tr>
+								</table>
+								<br />
+								<table cellspacing="0" cellpadding="0" border="0">
+									<tr>
+										<td nowrap="nowrap">
+											<span fcklang="DlgImgBorder">Border</span>&nbsp;</td>
+										<td>
+											<input type="text" size="2" value="" id="txtBorder" onkeyup="UpdatePreview();" /></td>
+									</tr>
+									<tr>
+										<td nowrap="nowrap">
+											<span fcklang="DlgImgHSpace">HSpace</span>&nbsp;</td>
+										<td>
+											<input type="text" size="2" id="txtHSpace" onkeyup="UpdatePreview();" /></td>
+									</tr>
+									<tr>
+										<td nowrap="nowrap">
+											<span fcklang="DlgImgVSpace">VSpace</span>&nbsp;</td>
+										<td>
+											<input type="text" size="2" id="txtVSpace" onkeyup="UpdatePreview();" /></td>
+									</tr>
+									<tr>
+										<td nowrap="nowrap">
+											<span fcklang="DlgImgAlign">Align</span>&nbsp;</td>
+										<td>
+											<select id="cmbAlign" onchange="UpdatePreview();">
+												<option value="" selected="selected"></option>
+												<option fcklang="DlgImgAlignLeft" value="left">Left</option>
+												<option fcklang="DlgImgAlignAbsBottom" value="absBottom">Abs Bottom</option>
+												<option fcklang="DlgImgAlignAbsMiddle" value="absMiddle">Abs Middle</option>
+												<option fcklang="DlgImgAlignBaseline" value="baseline">Baseline</option>
+												<option fcklang="DlgImgAlignBottom" value="bottom">Bottom</option>
+												<option fcklang="DlgImgAlignMiddle" value="middle">Middle</option>
+												<option fcklang="DlgImgAlignRight" value="right">Right</option>
+												<option fcklang="DlgImgAlignTextTop" value="textTop">Text Top</option>
+												<option fcklang="DlgImgAlignTop" value="top">Top</option>
+											</select>
+										</td>
+									</tr>
+								</table>
+							</td>
+							<td>
+								&nbsp;&nbsp;&nbsp;</td>
+							<td width="100%" valign="top">
+								<table cellpadding="0" cellspacing="0" width="100%" style="table-layout: fixed">
+									<tr>
+										<td>
+											<span fcklang="DlgImgPreview">Preview</span></td>
+									</tr>
+									<tr>
+										<td valign="top">
+											<iframe class="ImagePreviewArea" src="fck_image/fck_image_preview.html" frameborder="0"
+												marginheight="0" marginwidth="0"></iframe>
+										</td>
+									</tr>
+								</table>
+							</td>
+						</tr>
+					</table>
+				</td>
+			</tr>
+		</table>
+	</div>
+	<div id="divUpload" style="display: none">
+		<form id="frmUpload" method="post" target="UploadWindow" enctype="multipart/form-data"
+			action="" onsubmit="return CheckUpload();">
+			<span fcklang="DlgLnkUpload">Upload</span><br />
+			<input id="txtUploadFile" style="width: 100%" type="file" size="40" name="NewFile" /><br />
+			<br />
+			<input id="btnUpload" type="submit" value="Send it to the Server" fcklang="DlgLnkBtnUpload" />
+			<script type="text/javascript">
+				document.write( '<iframe name="UploadWindow" style="display: none" src="' + FCKTools.GetVoidUrl() + '"><\/iframe>' ) ;
+			</script>
+		</form>
+	</div>
+	<div id="divLink" style="display: none">
+		<table cellspacing="1" cellpadding="1" border="0" width="100%">
+			<tr>
+				<td>
+					<div>
+						<span fcklang="DlgLnkURL">URL</span><br />
+						<input id="txtLnkUrl" style="width: 100%" type="text" onblur="UpdatePreview();" />
+					</div>
+					<div id="divLnkBrowseServer" align="right">
+						<input type="button" value="Browse Server" fcklang="DlgBtnBrowseServer" onclick="LnkBrowseServer();" />
+					</div>
+					<div>
+						<span fcklang="DlgLnkTarget">Target</span><br />
+						<select id="cmbLnkTarget">
+							<option value="" fcklang="DlgGenNotSet" selected="selected">&lt;not set&gt;</option>
+							<option value="_blank" fcklang="DlgLnkTargetBlank">New Window (_blank)</option>
+							<option value="_top" fcklang="DlgLnkTargetTop">Topmost Window (_top)</option>
+							<option value="_self" fcklang="DlgLnkTargetSelf">Same Window (_self)</option>
+							<option value="_parent" fcklang="DlgLnkTargetParent">Parent Window (_parent)</option>
+						</select>
+					</div>
+				</td>
+			</tr>
+		</table>
+	</div>
+	<div id="divAdvanced" style="display: none">
+		<table cellspacing="0" cellpadding="0" width="100%" align="center" border="0">
+			<tr>
+				<td valign="top" width="50%">
+					<span fcklang="DlgGenId">Id</span><br />
+					<input id="txtAttId" style="width: 100%" type="text" />
+				</td>
+				<td width="1">
+					&nbsp;&nbsp;</td>
+				<td valign="top">
+					<table cellspacing="0" cellpadding="0" width="100%" align="center" border="0">
+						<tr>
+							<td width="60%">
+								<span fcklang="DlgGenLangDir">Language Direction</span><br />
+								<select id="cmbAttLangDir" style="width: 100%">
+									<option value="" fcklang="DlgGenNotSet" selected="selected">&lt;not set&gt;</option>
+									<option value="ltr" fcklang="DlgGenLangDirLtr">Left to Right (LTR)</option>
+									<option value="rtl" fcklang="DlgGenLangDirRtl">Right to Left (RTL)</option>
+								</select>
+							</td>
+							<td width="1%">
+								&nbsp;&nbsp;</td>
+							<td nowrap="nowrap">
+								<span fcklang="DlgGenLangCode">Language Code</span><br />
+								<input id="txtAttLangCode" style="width: 100%" type="text" />&nbsp;
+							</td>
+						</tr>
+					</table>
+				</td>
+			</tr>
+			<tr>
+				<td colspan="3">
+					&nbsp;</td>
+			</tr>
+			<tr>
+				<td colspan="3">
+					<span fcklang="DlgGenLongDescr">Long Description URL</span><br />
+					<input id="txtLongDesc" style="width: 100%" type="text" />
+				</td>
+			</tr>
+			<tr>
+				<td colspan="3">
+					&nbsp;</td>
+			</tr>
+			<tr>
+				<td valign="top">
+					<span fcklang="DlgGenClass">Stylesheet Classes</span><br />
+					<input id="txtAttClasses" style="width: 100%" type="text" />
+				</td>
+				<td>
+				</td>
+				<td valign="top">
+					&nbsp;<span fcklang="DlgGenTitle">Advisory Title</span><br />
+					<input id="txtAttTitle" style="width: 100%" type="text" />
+				</td>
+			</tr>
+		</table>
+		<span fcklang="DlgGenStyle">Style</span><br />
+		<input id="txtAttStyle" style="width: 100%" type="text" />
+	</div>
+</body>
+</html>


Property changes on: announcement/trunk/src/main/webapp/fckeditor/editor/dialog/fck_image.html
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/webapp/fckeditor/editor/dialog/fck_link/fck_link.js
===================================================================
--- announcement/trunk/src/main/webapp/fckeditor/editor/dialog/fck_link/fck_link.js	                        (rev 0)
+++ announcement/trunk/src/main/webapp/fckeditor/editor/dialog/fck_link/fck_link.js	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,744 @@
+/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2008 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * Scripts related to the Link dialog window (see fck_link.html).
+ */
+
+var dialog	= window.parent ;
+var oEditor = dialog.InnerDialogLoaded() ;
+
+var FCK			= oEditor.FCK ;
+var FCKLang		= oEditor.FCKLang ;
+var FCKConfig	= oEditor.FCKConfig ;
+var FCKRegexLib	= oEditor.FCKRegexLib ;
+var FCKTools	= oEditor.FCKTools ;
+
+//#### Dialog Tabs
+
+// Set the dialog tabs.
+dialog.AddTab( 'Info', FCKLang.DlgLnkInfoTab ) ;
+
+if ( !FCKConfig.LinkDlgHideTarget )
+	dialog.AddTab( 'Target', FCKLang.DlgLnkTargetTab, true ) ;
+
+if ( FCKConfig.LinkUpload )
+	dialog.AddTab( 'Upload', FCKLang.DlgLnkUpload, true ) ;
+
+if ( !FCKConfig.LinkDlgHideAdvanced )
+	dialog.AddTab( 'Advanced', FCKLang.DlgAdvancedTag ) ;
+
+// Function called when a dialog tag is selected.
+function OnDialogTabChange( tabCode )
+{
+	ShowE('divInfo'		, ( tabCode == 'Info' ) ) ;
+	ShowE('divTarget'	, ( tabCode == 'Target' ) ) ;
+	ShowE('divUpload'	, ( tabCode == 'Upload' ) ) ;
+	ShowE('divAttribs'	, ( tabCode == 'Advanced' ) ) ;
+
+	dialog.SetAutoSize( true ) ;
+}
+
+//#### Regular Expressions library.
+var oRegex = new Object() ;
+
+oRegex.UriProtocol = /^(((http|https|ftp|news):\/\/)|mailto:)/gi ;
+
+oRegex.UrlOnChangeProtocol = /^(http|https|ftp|news):\/\/(?=.)/gi ;
+
+oRegex.UrlOnChangeTestOther = /^((javascript:)|[#\/\.])/gi ;
+
+oRegex.ReserveTarget = /^_(blank|self|top|parent)$/i ;
+
+oRegex.PopupUri = /^javascript:void\(\s*window.open\(\s*'([^']+)'\s*,\s*(?:'([^']*)'|null)\s*,\s*'([^']*)'\s*\)\s*\)\s*$/ ;
+
+// Accessible popups
+oRegex.OnClickPopup = /^\s*on[cC]lick="\s*window.open\(\s*this\.href\s*,\s*(?:'([^']*)'|null)\s*,\s*'([^']*)'\s*\)\s*;\s*return\s*false;*\s*"$/ ;
+
+oRegex.PopupFeatures = /(?:^|,)([^=]+)=(\d+|yes|no)/gi ;
+
+//#### Parser Functions
+
+var oParser = new Object() ;
+
+oParser.ParseEMailUrl = function( emailUrl )
+{
+	// Initializes the EMailInfo object.
+	var oEMailInfo = new Object() ;
+	oEMailInfo.Address	= '' ;
+	oEMailInfo.Subject	= '' ;
+	oEMailInfo.Body		= '' ;
+
+	var oParts = emailUrl.match( /^([^\?]+)\??(.+)?/ ) ;
+	if ( oParts )
+	{
+		// Set the e-mail address.
+		oEMailInfo.Address = oParts[1] ;
+
+		// Look for the optional e-mail parameters.
+		if ( oParts[2] )
+		{
+			var oMatch = oParts[2].match( /(^|&)subject=([^&]+)/i ) ;
+			if ( oMatch ) oEMailInfo.Subject = decodeURIComponent( oMatch[2] ) ;
+
+			oMatch = oParts[2].match( /(^|&)body=([^&]+)/i ) ;
+			if ( oMatch ) oEMailInfo.Body = decodeURIComponent( oMatch[2] ) ;
+		}
+	}
+
+	return oEMailInfo ;
+}
+
+oParser.CreateEMailUri = function( address, subject, body )
+{
+	var sBaseUri = 'mailto:' + address ;
+
+	var sParams = '' ;
+
+	if ( subject.length > 0 )
+		sParams = '?subject=' + encodeURIComponent( subject ) ;
+
+	if ( body.length > 0 )
+	{
+		sParams += ( sParams.length == 0 ? '?' : '&' ) ;
+		sParams += 'body=' + encodeURIComponent( body ) ;
+	}
+
+	return sBaseUri + sParams ;
+}
+
+//#### Initialization Code
+
+// oLink: The actual selected link in the editor.
+var oLink = dialog.Selection.GetSelection().MoveToAncestorNode( 'A' ) ;
+if ( oLink )
+	FCK.Selection.SelectNode( oLink ) ;
+
+window.onload = function()
+{
+	// Translate the dialog box texts.
+	oEditor.FCKLanguageManager.TranslatePage(document) ;
+
+	// Fill the Anchor Names and Ids combos.
+	LoadAnchorNamesAndIds() ;
+
+	// Load the selected link information (if any).
+	LoadSelection() ;
+
+	// Update the dialog box.
+	SetLinkType( GetE('cmbLinkType').value ) ;
+
+	// Show/Hide the "Browse Server" button.
+	GetE('divBrowseServer').style.display = FCKConfig.LinkBrowser ? '' : 'none' ;
+
+	// Show the initial dialog content.
+	GetE('divInfo').style.display = '' ;
+
+	// Set the actual uploader URL.
+	if ( FCKConfig.LinkUpload )
+		GetE('frmUpload').action = FCKConfig.LinkUploadURL ;
+
+	// Set the default target (from configuration).
+	SetDefaultTarget() ;
+
+	// Activate the "OK" button.
+	dialog.SetOkButton( true ) ;
+
+	// Select the first field.
+	switch( GetE('cmbLinkType').value )
+	{
+		case 'url' :
+			SelectField( 'txtUrl' ) ;
+			break ;
+		case 'email' :
+			SelectField( 'txtEMailAddress' ) ;
+			break ;
+		case 'anchor' :
+			if ( GetE('divSelAnchor').style.display != 'none' )
+				SelectField( 'cmbAnchorName' ) ;
+			else
+				SelectField( 'cmbLinkType' ) ;
+	}
+}
+
+var bHasAnchors ;
+
+function LoadAnchorNamesAndIds()
+{
+	// Since version 2.0, the anchors are replaced in the DOM by IMGs so the user see the icon
+	// to edit them. So, we must look for that images now.
+	var aAnchors = new Array() ;
+	var i ;
+	var oImages = oEditor.FCK.EditorDocument.getElementsByTagName( 'IMG' ) ;
+	for( i = 0 ; i < oImages.length ; i++ )
+	{
+		if ( oImages[i].getAttribute('_fckanchor') )
+			aAnchors[ aAnchors.length ] = oEditor.FCK.GetRealElement( oImages[i] ) ;
+	}
+
+	// Add also real anchors
+	var oLinks = oEditor.FCK.EditorDocument.getElementsByTagName( 'A' ) ;
+	for( i = 0 ; i < oLinks.length ; i++ )
+	{
+		if ( oLinks[i].name && ( oLinks[i].name.length > 0 ) )
+			aAnchors[ aAnchors.length ] = oLinks[i] ;
+	}
+
+	var aIds = FCKTools.GetAllChildrenIds( oEditor.FCK.EditorDocument.body ) ;
+
+	bHasAnchors = ( aAnchors.length > 0 || aIds.length > 0 ) ;
+
+	for ( i = 0 ; i < aAnchors.length ; i++ )
+	{
+		var sName = aAnchors[i].name ;
+		if ( sName && sName.length > 0 )
+			FCKTools.AddSelectOption( GetE('cmbAnchorName'), sName, sName ) ;
+	}
+
+	for ( i = 0 ; i < aIds.length ; i++ )
+	{
+		FCKTools.AddSelectOption( GetE('cmbAnchorId'), aIds[i], aIds[i] ) ;
+	}
+
+	ShowE( 'divSelAnchor'	, bHasAnchors ) ;
+	ShowE( 'divNoAnchor'	, !bHasAnchors ) ;
+}
+
+function LoadSelection()
+{
+	if ( !oLink ) return ;
+
+	var sType = 'url' ;
+
+	// Get the actual Link href.
+	var sHRef = oLink.getAttribute( '_fcksavedurl' ) ;
+	if ( sHRef == null )
+		sHRef = oLink.getAttribute( 'href' , 2 ) || '' ;
+
+	// Look for a popup javascript link.
+	var oPopupMatch = oRegex.PopupUri.exec( sHRef ) ;
+	if( oPopupMatch )
+	{
+		GetE('cmbTarget').value = 'popup' ;
+		sHRef = oPopupMatch[1] ;
+		FillPopupFields( oPopupMatch[2], oPopupMatch[3] ) ;
+		SetTarget( 'popup' ) ;
+	}
+
+	// Accessible popups, the popup data is in the onclick attribute
+	if ( !oPopupMatch )
+	{
+		var onclick = oLink.getAttribute( 'onclick_fckprotectedatt' ) ;
+		if ( onclick )
+		{
+			// Decode the protected string
+			onclick = decodeURIComponent( onclick ) ;
+
+			oPopupMatch = oRegex.OnClickPopup.exec( onclick ) ;
+			if( oPopupMatch )
+			{
+				GetE( 'cmbTarget' ).value = 'popup' ;
+				FillPopupFields( oPopupMatch[1], oPopupMatch[2] ) ;
+				SetTarget( 'popup' ) ;
+			}
+		}
+	}
+
+	// Search for the protocol.
+	var sProtocol = oRegex.UriProtocol.exec( sHRef ) ;
+
+	if ( sProtocol )
+	{
+		sProtocol = sProtocol[0].toLowerCase() ;
+		GetE('cmbLinkProtocol').value = sProtocol ;
+
+		// Remove the protocol and get the remaining URL.
+		var sUrl = sHRef.replace( oRegex.UriProtocol, '' ) ;
+
+		if ( sProtocol == 'mailto:' )	// It is an e-mail link.
+		{
+			sType = 'email' ;
+
+			var oEMailInfo = oParser.ParseEMailUrl( sUrl ) ;
+			GetE('txtEMailAddress').value	= oEMailInfo.Address ;
+			GetE('txtEMailSubject').value	= oEMailInfo.Subject ;
+			GetE('txtEMailBody').value		= oEMailInfo.Body ;
+		}
+		else				// It is a normal link.
+		{
+			sType = 'url' ;
+			GetE('txtUrl').value = sUrl ;
+		}
+	}
+	else if ( sHRef.substr(0,1) == '#' && sHRef.length > 1 )	// It is an anchor link.
+	{
+		sType = 'anchor' ;
+		GetE('cmbAnchorName').value = GetE('cmbAnchorId').value = sHRef.substr(1) ;
+	}
+	else					// It is another type of link.
+	{
+		sType = 'url' ;
+
+		GetE('cmbLinkProtocol').value = '' ;
+		GetE('txtUrl').value = sHRef ;
+	}
+
+	if ( !oPopupMatch )
+	{
+		// Get the target.
+		var sTarget = oLink.target ;
+
+		if ( sTarget && sTarget.length > 0 )
+		{
+			if ( oRegex.ReserveTarget.test( sTarget ) )
+			{
+				sTarget = sTarget.toLowerCase() ;
+				GetE('cmbTarget').value = sTarget ;
+			}
+			else
+				GetE('cmbTarget').value = 'frame' ;
+			GetE('txtTargetFrame').value = sTarget ;
+		}
+	}
+
+	// Get Advances Attributes
+	GetE('txtAttId').value			= oLink.id ;
+	GetE('txtAttName').value		= oLink.name ;
+	GetE('cmbAttLangDir').value		= oLink.dir ;
+	GetE('txtAttLangCode').value	= oLink.lang ;
+	GetE('txtAttAccessKey').value	= oLink.accessKey ;
+	GetE('txtAttTabIndex').value	= oLink.tabIndex <= 0 ? '' : oLink.tabIndex ;
+	GetE('txtAttTitle').value		= oLink.title ;
+	GetE('txtAttContentType').value	= oLink.type ;
+	GetE('txtAttCharSet').value		= oLink.charset ;
+
+	var sClass ;
+	if ( oEditor.FCKBrowserInfo.IsIE )
+	{
+		sClass	= oLink.getAttribute('className',2) || '' ;
+		// Clean up temporary classes for internal use:
+		sClass = sClass.replace( FCKRegexLib.FCK_Class, '' ) ;
+
+		GetE('txtAttStyle').value	= oLink.style.cssText ;
+	}
+	else
+	{
+		sClass	= oLink.getAttribute('class',2) || '' ;
+		GetE('txtAttStyle').value	= oLink.getAttribute('style',2) || '' ;
+	}
+	GetE('txtAttClasses').value	= sClass ;
+
+	// Update the Link type combo.
+	GetE('cmbLinkType').value = sType ;
+}
+
+//#### Link type selection.
+function SetLinkType( linkType )
+{
+	ShowE('divLinkTypeUrl'		, (linkType == 'url') ) ;
+	ShowE('divLinkTypeAnchor'	, (linkType == 'anchor') ) ;
+	ShowE('divLinkTypeEMail'	, (linkType == 'email') ) ;
+
+	if ( !FCKConfig.LinkDlgHideTarget )
+		dialog.SetTabVisibility( 'Target'	, (linkType == 'url') ) ;
+
+	if ( FCKConfig.LinkUpload )
+		dialog.SetTabVisibility( 'Upload'	, (linkType == 'url') ) ;
+
+	if ( !FCKConfig.LinkDlgHideAdvanced )
+		dialog.SetTabVisibility( 'Advanced'	, (linkType != 'anchor' || bHasAnchors) ) ;
+
+	if ( linkType == 'email' )
+		dialog.SetAutoSize( true ) ;
+}
+
+//#### Target type selection.
+function SetTarget( targetType )
+{
+	GetE('tdTargetFrame').style.display	= ( targetType == 'popup' ? 'none' : '' ) ;
+	GetE('tdPopupName').style.display	=
+	GetE('tablePopupFeatures').style.display = ( targetType == 'popup' ? '' : 'none' ) ;
+
+	switch ( targetType )
+	{
+		case "_blank" :
+		case "_self" :
+		case "_parent" :
+		case "_top" :
+			GetE('txtTargetFrame').value = targetType ;
+			break ;
+		case "" :
+			GetE('txtTargetFrame').value = '' ;
+			break ;
+	}
+
+	if ( targetType == 'popup' )
+		dialog.SetAutoSize( true ) ;
+}
+
+//#### Called while the user types the URL.
+function OnUrlChange()
+{
+	var sUrl = GetE('txtUrl').value ;
+	var sProtocol = oRegex.UrlOnChangeProtocol.exec( sUrl ) ;
+
+	if ( sProtocol )
+	{
+		sUrl = sUrl.substr( sProtocol[0].length ) ;
+		GetE('txtUrl').value = sUrl ;
+		GetE('cmbLinkProtocol').value = sProtocol[0].toLowerCase() ;
+	}
+	else if ( oRegex.UrlOnChangeTestOther.test( sUrl ) )
+	{
+		GetE('cmbLinkProtocol').value = '' ;
+	}
+}
+
+//#### Called while the user types the target name.
+function OnTargetNameChange()
+{
+	var sFrame = GetE('txtTargetFrame').value ;
+
+	if ( sFrame.length == 0 )
+		GetE('cmbTarget').value = '' ;
+	else if ( oRegex.ReserveTarget.test( sFrame ) )
+		GetE('cmbTarget').value = sFrame.toLowerCase() ;
+	else
+		GetE('cmbTarget').value = 'frame' ;
+}
+
+// Accessible popups
+function BuildOnClickPopup()
+{
+	var sWindowName = "'" + GetE('txtPopupName').value.replace(/\W/gi, "") + "'" ;
+
+	var sFeatures = '' ;
+	var aChkFeatures = document.getElementsByName( 'chkFeature' ) ;
+	for ( var i = 0 ; i < aChkFeatures.length ; i++ )
+	{
+		if ( i > 0 ) sFeatures += ',' ;
+		sFeatures += aChkFeatures[i].value + '=' + ( aChkFeatures[i].checked ? 'yes' : 'no' ) ;
+	}
+
+	if ( GetE('txtPopupWidth').value.length > 0 )	sFeatures += ',width=' + GetE('txtPopupWidth').value ;
+	if ( GetE('txtPopupHeight').value.length > 0 )	sFeatures += ',height=' + GetE('txtPopupHeight').value ;
+	if ( GetE('txtPopupLeft').value.length > 0 )	sFeatures += ',left=' + GetE('txtPopupLeft').value ;
+	if ( GetE('txtPopupTop').value.length > 0 )		sFeatures += ',top=' + GetE('txtPopupTop').value ;
+
+	if ( sFeatures != '' )
+		sFeatures = sFeatures + ",status" ;
+
+	return ( "window.open(this.href," + sWindowName + ",'" + sFeatures + "'); return false" ) ;
+}
+
+//#### Fills all Popup related fields.
+function FillPopupFields( windowName, features )
+{
+	if ( windowName )
+		GetE('txtPopupName').value = windowName ;
+
+	var oFeatures = new Object() ;
+	var oFeaturesMatch ;
+	while( ( oFeaturesMatch = oRegex.PopupFeatures.exec( features ) ) != null )
+	{
+		var sValue = oFeaturesMatch[2] ;
+		if ( sValue == ( 'yes' || '1' ) )
+			oFeatures[ oFeaturesMatch[1] ] = true ;
+		else if ( ! isNaN( sValue ) && sValue != 0 )
+			oFeatures[ oFeaturesMatch[1] ] = sValue ;
+	}
+
+	// Update all features check boxes.
+	var aChkFeatures = document.getElementsByName('chkFeature') ;
+	for ( var i = 0 ; i < aChkFeatures.length ; i++ )
+	{
+		if ( oFeatures[ aChkFeatures[i].value ] )
+			aChkFeatures[i].checked = true ;
+	}
+
+	// Update position and size text boxes.
+	if ( oFeatures['width'] )	GetE('txtPopupWidth').value		= oFeatures['width'] ;
+	if ( oFeatures['height'] )	GetE('txtPopupHeight').value	= oFeatures['height'] ;
+	if ( oFeatures['left'] )	GetE('txtPopupLeft').value		= oFeatures['left'] ;
+	if ( oFeatures['top'] )		GetE('txtPopupTop').value		= oFeatures['top'] ;
+}
+
+//#### The OK button was hit.
+function Ok()
+{
+	var sUri, sInnerHtml ;
+	oEditor.FCKUndo.SaveUndoStep() ;
+
+	switch ( GetE('cmbLinkType').value )
+	{
+		case 'url' :
+			sUri = GetE('txtUrl').value ;
+
+			if ( sUri.length == 0 )
+			{
+				alert( FCKLang.DlnLnkMsgNoUrl ) ;
+				return false ;
+			}
+
+			sUri = GetE('cmbLinkProtocol').value + sUri ;
+
+			break ;
+
+		case 'email' :
+			sUri = GetE('txtEMailAddress').value ;
+
+			if ( sUri.length == 0 )
+			{
+				alert( FCKLang.DlnLnkMsgNoEMail ) ;
+				return false ;
+			}
+
+			sUri = oParser.CreateEMailUri(
+				sUri,
+				GetE('txtEMailSubject').value,
+				GetE('txtEMailBody').value ) ;
+			break ;
+
+		case 'anchor' :
+			var sAnchor = GetE('cmbAnchorName').value ;
+			if ( sAnchor.length == 0 ) sAnchor = GetE('cmbAnchorId').value ;
+
+			if ( sAnchor.length == 0 )
+			{
+				alert( FCKLang.DlnLnkMsgNoAnchor ) ;
+				return false ;
+			}
+
+			sUri = '#' + sAnchor ;
+			break ;
+	}
+
+	// If no link is selected, create a new one (it may result in more than one link creation - #220).
+	var aLinks = oLink ? [ oLink ] : oEditor.FCK.CreateLink( sUri, true ) ;
+
+	// If no selection, no links are created, so use the uri as the link text (by dom, 2006-05-26)
+	var aHasSelection = ( aLinks.length > 0 ) ;
+	if ( !aHasSelection )
+	{
+		sInnerHtml = sUri;
+
+		// Built a better text for empty links.
+		switch ( GetE('cmbLinkType').value )
+		{
+			// anchor: use old behavior --> return true
+			case 'anchor':
+				sInnerHtml = sInnerHtml.replace( /^#/, '' ) ;
+				break ;
+
+			// url: try to get path
+			case 'url':
+				var oLinkPathRegEx = new RegExp("//?([^?\"']+)([?].*)?$") ;
+				var asLinkPath = oLinkPathRegEx.exec( sUri ) ;
+				if (asLinkPath != null)
+					sInnerHtml = asLinkPath[1];  // use matched path
+				break ;
+
+			// mailto: try to get email address
+			case 'email':
+				sInnerHtml = GetE('txtEMailAddress').value ;
+				break ;
+		}
+
+		// Create a new (empty) anchor.
+		aLinks = [ oEditor.FCK.InsertElement( 'a' ) ] ;
+	}
+
+	for ( var i = 0 ; i < aLinks.length ; i++ )
+	{
+		oLink = aLinks[i] ;
+
+		if ( aHasSelection )
+			sInnerHtml = oLink.innerHTML ;		// Save the innerHTML (IE changes it if it is like an URL).
+
+		oLink.href = sUri ;
+		SetAttribute( oLink, '_fcksavedurl', sUri ) ;
+
+		var onclick;
+		// Accessible popups
+		if( GetE('cmbTarget').value == 'popup' )
+		{
+			onclick = BuildOnClickPopup() ;
+			// Encode the attribute
+			onclick = encodeURIComponent( " onclick=\"" + onclick + "\"" )  ;
+			SetAttribute( oLink, 'onclick_fckprotectedatt', onclick ) ;
+		}
+		else
+		{
+			// Check if the previous onclick was for a popup:
+			// In that case remove the onclick handler.
+			onclick = oLink.getAttribute( 'onclick_fckprotectedatt' ) ;
+			if ( onclick )
+			{
+				// Decode the protected string
+				onclick = decodeURIComponent( onclick ) ;
+
+				if( oRegex.OnClickPopup.test( onclick ) )
+					SetAttribute( oLink, 'onclick_fckprotectedatt', '' ) ;
+			}
+		}
+
+		oLink.innerHTML = sInnerHtml ;		// Set (or restore) the innerHTML
+
+		// Target
+		if( GetE('cmbTarget').value != 'popup' )
+			SetAttribute( oLink, 'target', GetE('txtTargetFrame').value ) ;
+		else
+			SetAttribute( oLink, 'target', null ) ;
+
+		// Let's set the "id" only for the first link to avoid duplication.
+		if ( i == 0 )
+			SetAttribute( oLink, 'id', GetE('txtAttId').value ) ;
+
+		// Advances Attributes
+		SetAttribute( oLink, 'name'		, GetE('txtAttName').value ) ;
+		SetAttribute( oLink, 'dir'		, GetE('cmbAttLangDir').value ) ;
+		SetAttribute( oLink, 'lang'		, GetE('txtAttLangCode').value ) ;
+		SetAttribute( oLink, 'accesskey', GetE('txtAttAccessKey').value ) ;
+		SetAttribute( oLink, 'tabindex'	, ( GetE('txtAttTabIndex').value > 0 ? GetE('txtAttTabIndex').value : null ) ) ;
+		SetAttribute( oLink, 'title'	, GetE('txtAttTitle').value ) ;
+		SetAttribute( oLink, 'type'		, GetE('txtAttContentType').value ) ;
+		SetAttribute( oLink, 'charset'	, GetE('txtAttCharSet').value ) ;
+
+		if ( oEditor.FCKBrowserInfo.IsIE )
+		{
+			var sClass = GetE('txtAttClasses').value ;
+			// If it's also an anchor add an internal class
+			if ( GetE('txtAttName').value.length != 0 )
+				sClass += ' FCK__AnchorC' ;
+			SetAttribute( oLink, 'className', sClass ) ;
+
+			oLink.style.cssText = GetE('txtAttStyle').value ;
+		}
+		else
+		{
+			SetAttribute( oLink, 'class', GetE('txtAttClasses').value ) ;
+			SetAttribute( oLink, 'style', GetE('txtAttStyle').value ) ;
+		}
+	}
+
+	// Select the (first) link.
+	oEditor.FCKSelection.SelectNode( aLinks[0] );
+
+	return true ;
+}
+
+function BrowseServer()
+{
+	OpenFileBrowser( FCKConfig.LinkBrowserURL, FCKConfig.LinkBrowserWindowWidth, FCKConfig.LinkBrowserWindowHeight ) ;
+}
+
+function SetUrl( url )
+{
+	GetE('txtUrl').value = url ;
+	OnUrlChange() ;
+	dialog.SetSelectedTab( 'Info' ) ;
+}
+
+function OnUploadCompleted( errorNumber, fileUrl, fileName, customMsg )
+{
+	// Remove animation
+	window.parent.Throbber.Hide() ;
+	GetE( 'divUpload' ).style.display  = '' ;
+
+	switch ( errorNumber )
+	{
+		case 0 :	// No errors
+			alert( 'Your file has been successfully uploaded' ) ;
+			break ;
+		case 1 :	// Custom error
+			alert( customMsg ) ;
+			return ;
+		case 101 :	// Custom warning
+			alert( customMsg ) ;
+			break ;
+		case 201 :
+			alert( 'A file with the same name is already available. The uploaded file has been renamed to "' + fileName + '"' ) ;
+			break ;
+		case 202 :
+			alert( 'Invalid file type' ) ;
+			return ;
+		case 203 :
+			alert( "Security error. You probably don't have enough permissions to upload. Please check your server." ) ;
+			return ;
+		case 500 :
+			alert( 'The connector is disabled' ) ;
+			break ;
+		default :
+			alert( 'Error on file upload. Error number: ' + errorNumber ) ;
+			return ;
+	}
+
+	SetUrl( fileUrl ) ;
+	GetE('frmUpload').reset() ;
+}
+
+var oUploadAllowedExtRegex	= new RegExp( FCKConfig.LinkUploadAllowedExtensions, 'i' ) ;
+var oUploadDeniedExtRegex	= new RegExp( FCKConfig.LinkUploadDeniedExtensions, 'i' ) ;
+
+function CheckUpload()
+{
+	var sFile = GetE('txtUploadFile').value ;
+
+	if ( sFile.length == 0 )
+	{
+		alert( 'Please select a file to upload' ) ;
+		return false ;
+	}
+
+	if ( ( FCKConfig.LinkUploadAllowedExtensions.length > 0 && !oUploadAllowedExtRegex.test( sFile ) ) ||
+		( FCKConfig.LinkUploadDeniedExtensions.length > 0 && oUploadDeniedExtRegex.test( sFile ) ) )
+	{
+		OnUploadCompleted( 202 ) ;
+		return false ;
+	}
+
+	// Show animation
+	window.parent.Throbber.Show( 100 ) ;
+	GetE( 'divUpload' ).style.display  = 'none' ;
+
+	return true ;
+}
+
+function SetDefaultTarget()
+{
+	var target = FCKConfig.DefaultLinkTarget || '' ;
+
+	if ( oLink || target.length == 0 )
+		return ;
+
+	switch ( target )
+	{
+		case '_blank' :
+		case '_self' :
+		case '_parent' :
+		case '_top' :
+			GetE('cmbTarget').value = target ;
+			break ;
+		default :
+			GetE('cmbTarget').value = 'frame' ;
+			break ;
+	}
+
+	GetE('txtTargetFrame').value = target ;
+}


Property changes on: announcement/trunk/src/main/webapp/fckeditor/editor/dialog/fck_link/fck_link.js
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/webapp/fckeditor/editor/dialog/fck_link.html
===================================================================
--- announcement/trunk/src/main/webapp/fckeditor/editor/dialog/fck_link.html	                        (rev 0)
+++ announcement/trunk/src/main/webapp/fckeditor/editor/dialog/fck_link.html	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,295 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<!--
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2008 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * Link dialog window.
+-->
+<html>
+	<head>
+		<title>Link Properties</title>
+		<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+		<meta name="robots" content="noindex, nofollow" />
+		<script src="common/fck_dialog_common.js" type="text/javascript"></script>
+		<script src="fck_link/fck_link.js" type="text/javascript"></script>
+	</head>
+	<body scroll="no" style="OVERFLOW: hidden">
+		<div id="divInfo" style="DISPLAY: none">
+			<span fckLang="DlgLnkType">Link Type</span><br />
+			<select id="cmbLinkType" onchange="SetLinkType(this.value);">
+				<option value="url" fckLang="DlgLnkTypeURL" selected="selected">URL</option>
+				<option value="anchor" fckLang="DlgLnkTypeAnchor">Anchor in this page</option>
+				<option value="email" fckLang="DlgLnkTypeEMail">E-Mail</option>
+			</select>
+			<br />
+			<br />
+			<div id="divLinkTypeUrl">
+				<table cellspacing="0" cellpadding="0" width="100%" border="0" dir="ltr">
+					<tr>
+						<td nowrap="nowrap">
+							<span fckLang="DlgLnkProto">Protocol</span><br />
+							<select id="cmbLinkProtocol">
+								<option value="http://" selected="selected">http://</option>
+								<option value="https://">https://</option>
+								<option value="ftp://">ftp://</option>
+								<option value="news://">news://</option>
+								<option value="" fckLang="DlgLnkProtoOther">&lt;other&gt;</option>
+							</select>
+						</td>
+						<td nowrap="nowrap">&nbsp;</td>
+						<td nowrap="nowrap" width="100%">
+							<span fckLang="DlgLnkURL">URL</span><br />
+							<input id="txtUrl" style="WIDTH: 100%" type="text" onkeyup="OnUrlChange();" onchange="OnUrlChange();" />
+						</td>
+					</tr>
+				</table>
+				<br />
+				<div id="divBrowseServer">
+				<input type="button" value="Browse Server" fckLang="DlgBtnBrowseServer" onclick="BrowseServer();" />
+				</div>
+			</div>
+			<div id="divLinkTypeAnchor" style="DISPLAY: none" align="center">
+				<div id="divSelAnchor" style="DISPLAY: none">
+					<table cellspacing="0" cellpadding="0" border="0" width="70%">
+						<tr>
+							<td colspan="3">
+								<span fckLang="DlgLnkAnchorSel">Select an Anchor</span>
+							</td>
+						</tr>
+						<tr>
+							<td width="50%">
+								<span fckLang="DlgLnkAnchorByName">By Anchor Name</span><br />
+								<select id="cmbAnchorName" onchange="GetE('cmbAnchorId').value='';" style="WIDTH: 100%">
+									<option value="" selected="selected"></option>
+								</select>
+							</td>
+							<td>&nbsp;&nbsp;&nbsp;</td>
+							<td width="50%">
+								<span fckLang="DlgLnkAnchorById">By Element Id</span><br />
+								<select id="cmbAnchorId" onchange="GetE('cmbAnchorName').value='';" style="WIDTH: 100%">
+									<option value="" selected="selected"></option>
+								</select>
+							</td>
+						</tr>
+					</table>
+				</div>
+				<div id="divNoAnchor" style="DISPLAY: none">
+					<span fckLang="DlgLnkNoAnchors">&lt;No anchors available in the document&gt;</span>
+				</div>
+			</div>
+			<div id="divLinkTypeEMail" style="DISPLAY: none">
+				<span fckLang="DlgLnkEMail">E-Mail Address</span><br />
+				<input id="txtEMailAddress" style="WIDTH: 100%" type="text" /><br />
+				<span fckLang="DlgLnkEMailSubject">Message Subject</span><br />
+				<input id="txtEMailSubject" style="WIDTH: 100%" type="text" /><br />
+				<span fckLang="DlgLnkEMailBody">Message Body</span><br />
+				<textarea id="txtEMailBody" style="WIDTH: 100%" rows="3" cols="20"></textarea>
+			</div>
+		</div>
+		<div id="divUpload" style="DISPLAY: none">
+			<form id="frmUpload" method="post" target="UploadWindow" enctype="multipart/form-data" action="" onsubmit="return CheckUpload();">
+				<span fckLang="DlgLnkUpload">Upload</span><br />
+				<input id="txtUploadFile" style="WIDTH: 100%" type="file" size="40" name="NewFile" /><br />
+				<br />
+				<input id="btnUpload" type="submit" value="Send it to the Server" fckLang="DlgLnkBtnUpload" />
+				<script type="text/javascript">
+					document.write( '<iframe name="UploadWindow" style="display: none" src="' + FCKTools.GetVoidUrl() + '"><\/iframe>' ) ;
+				</script>
+			</form>
+		</div>
+		<div id="divTarget" style="DISPLAY: none">
+			<table cellspacing="0" cellpadding="0" width="100%" border="0">
+				<tr>
+					<td nowrap="nowrap">
+						<span fckLang="DlgLnkTarget">Target</span><br />
+						<select id="cmbTarget" onchange="SetTarget(this.value);">
+							<option value="" fckLang="DlgGenNotSet" selected="selected">&lt;not set&gt;</option>
+							<option value="frame" fckLang="DlgLnkTargetFrame">&lt;frame&gt;</option>
+							<option value="popup" fckLang="DlgLnkTargetPopup">&lt;popup window&gt;</option>
+							<option value="_blank" fckLang="DlgLnkTargetBlank">New Window (_blank)</option>
+							<option value="_top" fckLang="DlgLnkTargetTop">Topmost Window (_top)</option>
+							<option value="_self" fckLang="DlgLnkTargetSelf">Same Window (_self)</option>
+							<option value="_parent" fckLang="DlgLnkTargetParent">Parent Window (_parent)</option>
+						</select>
+					</td>
+					<td>&nbsp;</td>
+					<td id="tdTargetFrame" nowrap="nowrap" width="100%">
+						<span fckLang="DlgLnkTargetFrameName">Target Frame Name</span><br />
+						<input id="txtTargetFrame" style="WIDTH: 100%" type="text" onkeyup="OnTargetNameChange();"
+							onchange="OnTargetNameChange();" />
+					</td>
+					<td id="tdPopupName" style="DISPLAY: none" nowrap="nowrap" width="100%">
+						<span fckLang="DlgLnkPopWinName">Popup Window Name</span><br />
+						<input id="txtPopupName" style="WIDTH: 100%" type="text" />
+					</td>
+				</tr>
+			</table>
+			<br />
+			<table id="tablePopupFeatures" style="DISPLAY: none" cellspacing="0" cellpadding="0" align="center"
+				border="0">
+				<tr>
+					<td>
+						<span fckLang="DlgLnkPopWinFeat">Popup Window Features</span><br />
+						<table cellspacing="0" cellpadding="0" border="0">
+							<tr>
+								<td valign="top" nowrap="nowrap" width="50%">
+									<input id="chkPopupResizable" name="chkFeature" value="resizable" type="checkbox" /><label for="chkPopupResizable" fckLang="DlgLnkPopResize">Resizable</label><br />
+									<input id="chkPopupLocationBar" name="chkFeature" value="location" type="checkbox" /><label for="chkPopupLocationBar" fckLang="DlgLnkPopLocation">Location
+										Bar</label><br />
+									<input id="chkPopupManuBar" name="chkFeature" value="menubar" type="checkbox" /><label for="chkPopupManuBar" fckLang="DlgLnkPopMenu">Menu
+										Bar</label><br />
+									<input id="chkPopupScrollBars" name="chkFeature" value="scrollbars" type="checkbox" /><label for="chkPopupScrollBars" fckLang="DlgLnkPopScroll">Scroll
+										Bars</label>
+								</td>
+								<td></td>
+								<td valign="top" nowrap="nowrap" width="50%">
+									<input id="chkPopupStatusBar" name="chkFeature" value="status" type="checkbox" /><label for="chkPopupStatusBar" fckLang="DlgLnkPopStatus">Status
+										Bar</label><br />
+									<input id="chkPopupToolbar" name="chkFeature" value="toolbar" type="checkbox" /><label for="chkPopupToolbar" fckLang="DlgLnkPopToolbar">Toolbar</label><br />
+									<input id="chkPopupFullScreen" name="chkFeature" value="fullscreen" type="checkbox" /><label for="chkPopupFullScreen" fckLang="DlgLnkPopFullScrn">Full
+										Screen (IE)</label><br />
+									<input id="chkPopupDependent" name="chkFeature" value="dependent" type="checkbox" /><label for="chkPopupDependent" fckLang="DlgLnkPopDependent">Dependent
+										(Netscape)</label>
+								</td>
+							</tr>
+							<tr>
+								<td valign="top" nowrap="nowrap" width="50%">&nbsp;</td>
+								<td></td>
+								<td valign="top" nowrap="nowrap" width="50%"></td>
+							</tr>
+							<tr>
+								<td valign="top">
+									<table cellspacing="0" cellpadding="0" border="0">
+										<tr>
+											<td nowrap="nowrap"><span fckLang="DlgLnkPopWidth">Width</span></td>
+											<td>&nbsp;<input id="txtPopupWidth" type="text" maxlength="4" size="4" /></td>
+										</tr>
+										<tr>
+											<td nowrap="nowrap"><span fckLang="DlgLnkPopHeight">Height</span></td>
+											<td>&nbsp;<input id="txtPopupHeight" type="text" maxlength="4" size="4" /></td>
+										</tr>
+									</table>
+								</td>
+								<td>&nbsp;&nbsp;</td>
+								<td valign="top">
+									<table cellspacing="0" cellpadding="0" border="0">
+										<tr>
+											<td nowrap="nowrap"><span fckLang="DlgLnkPopLeft">Left Position</span></td>
+											<td>&nbsp;<input id="txtPopupLeft" type="text" maxlength="4" size="4" /></td>
+										</tr>
+										<tr>
+											<td nowrap="nowrap"><span fckLang="DlgLnkPopTop">Top Position</span></td>
+											<td>&nbsp;<input id="txtPopupTop" type="text" maxlength="4" size="4" /></td>
+										</tr>
+									</table>
+								</td>
+							</tr>
+						</table>
+					</td>
+				</tr>
+			</table>
+		</div>
+		<div id="divAttribs" style="DISPLAY: none">
+			<table cellspacing="0" cellpadding="0" width="100%" align="center" border="0">
+				<tr>
+					<td valign="top" width="50%">
+						<span fckLang="DlgGenId">Id</span><br />
+						<input id="txtAttId" style="WIDTH: 100%" type="text" />
+					</td>
+					<td width="1"></td>
+					<td valign="top">
+						<table cellspacing="0" cellpadding="0" width="100%" align="center" border="0">
+							<tr>
+								<td width="60%">
+									<span fckLang="DlgGenLangDir">Language Direction</span><br />
+									<select id="cmbAttLangDir" style="WIDTH: 100%">
+										<option value="" fckLang="DlgGenNotSet" selected>&lt;not set&gt;</option>
+										<option value="ltr" fckLang="DlgGenLangDirLtr">Left to Right (LTR)</option>
+										<option value="rtl" fckLang="DlgGenLangDirRtl">Right to Left (RTL)</option>
+									</select>
+								</td>
+								<td width="1%">&nbsp;&nbsp;&nbsp;</td>
+								<td nowrap="nowrap"><span fckLang="DlgGenAccessKey">Access Key</span><br />
+									<input id="txtAttAccessKey" style="WIDTH: 100%" type="text" maxlength="1" size="1" />
+								</td>
+							</tr>
+						</table>
+					</td>
+				</tr>
+				<tr>
+					<td valign="top" width="50%">
+						<span fckLang="DlgGenName">Name</span><br />
+						<input id="txtAttName" style="WIDTH: 100%" type="text" />
+					</td>
+					<td width="1"></td>
+					<td valign="top">
+						<table cellspacing="0" cellpadding="0" width="100%" align="center" border="0">
+							<tr>
+								<td width="60%">
+									<span fckLang="DlgGenLangCode">Language Code</span><br />
+									<input id="txtAttLangCode" style="WIDTH: 100%" type="text" />
+								</td>
+								<td width="1%">&nbsp;&nbsp;&nbsp;</td>
+								<td nowrap="nowrap">
+									<span fckLang="DlgGenTabIndex">Tab Index</span><br />
+									<input id="txtAttTabIndex" style="WIDTH: 100%" type="text" maxlength="5" size="5" />
+								</td>
+							</tr>
+						</table>
+					</td>
+				</tr>
+				<tr>
+					<td valign="top" width="50%">&nbsp;</td>
+					<td width="1"></td>
+					<td valign="top"></td>
+				</tr>
+				<tr>
+					<td valign="top" width="50%">
+						<span fckLang="DlgGenTitle">Advisory Title</span><br />
+						<input id="txtAttTitle" style="WIDTH: 100%" type="text" />
+					</td>
+					<td width="1">&nbsp;&nbsp;&nbsp;</td>
+					<td valign="top">
+						<span fckLang="DlgGenContType">Advisory Content Type</span><br />
+						<input id="txtAttContentType" style="WIDTH: 100%" type="text" />
+					</td>
+				</tr>
+				<tr>
+					<td valign="top">
+						<span fckLang="DlgGenClass">Stylesheet Classes</span><br />
+						<input id="txtAttClasses" style="WIDTH: 100%" type="text" />
+					</td>
+					<td></td>
+					<td valign="top">
+						<span fckLang="DlgGenLinkCharset">Linked Resource Charset</span><br />
+						<input id="txtAttCharSet" style="WIDTH: 100%" type="text" />
+					</td>
+				</tr>
+			</table>
+			<table cellspacing="0" cellpadding="0" width="100%" align="center" border="0">
+				<tr>
+					<td>
+						<span fckLang="DlgGenStyle">Style</span><br />
+						<input id="txtAttStyle" style="WIDTH: 100%" type="text" />
+					</td>
+				</tr>
+			</table>
+		</div>
+	</body>
+</html>


Property changes on: announcement/trunk/src/main/webapp/fckeditor/editor/dialog/fck_link.html
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/webapp/fckeditor/editor/dialog/fck_listprop.html
===================================================================
--- announcement/trunk/src/main/webapp/fckeditor/editor/dialog/fck_listprop.html	                        (rev 0)
+++ announcement/trunk/src/main/webapp/fckeditor/editor/dialog/fck_listprop.html	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,120 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" >
+<!--
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2008 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * Bulleted List dialog window.
+-->
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+	<title></title>
+	<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+	<meta content="noindex, nofollow" name="robots" />
+	<script src="common/fck_dialog_common.js" type="text/javascript"></script>
+	<script type="text/javascript">
+
+var dialog	= window.parent ;
+var oEditor = dialog.InnerDialogLoaded() ;
+
+// Gets the document DOM
+var oDOM = oEditor.FCK.EditorDocument ;
+var sListType = ( location.search == '?OL' ? 'OL' : 'UL' ) ;
+
+var oActiveEl = dialog.Selection.GetSelection().MoveToAncestorNode( sListType ) ;
+var oActiveSel ;
+
+window.onload = function()
+{
+	// First of all, translate the dialog box texts
+	oEditor.FCKLanguageManager.TranslatePage(document) ;
+
+	if ( sListType == 'UL' )
+		oActiveSel = GetE('selBulleted') ;
+	else
+	{
+		if ( oActiveEl )
+		{
+			oActiveSel = GetE('selNumbered') ;
+			GetE('eStart').style.display = '' ;
+			GetE('txtStartPosition').value	= GetAttribute( oActiveEl, 'start' ) ;
+		}
+	}
+
+	oActiveSel.style.display = '' ;
+
+	if ( oActiveEl )
+	{
+		if ( oActiveEl.getAttribute('type') )
+			oActiveSel.value = oActiveEl.getAttribute('type') ;
+	}
+
+	dialog.SetOkButton( true ) ;
+	dialog.SetAutoSize( true ) ;
+
+	SelectField( sListType == 'OL' ? 'txtStartPosition' : 'selBulleted' ) ;
+}
+
+function Ok()
+{
+	if ( oActiveEl ){
+		SetAttribute( oActiveEl, 'type'	, oActiveSel.value ) ;
+		if(oActiveEl.tagName == 'OL')
+			SetAttribute( oActiveEl, 'start', GetE('txtStartPosition').value ) ;
+	}
+
+	return true ;
+}
+
+	</script>
+</head>
+<body style="overflow: hidden">
+	<table width="100%" style="height: 100%">
+		<tr>
+			<td style="text-align:center">
+				<table cellspacing="0" cellpadding="0" border="0" style="margin-left: auto; margin-right: auto;">
+					<tr>
+						<td id="eStart" style="display: none; padding-right: 5px; padding-left: 5px">
+							<span fcklang="DlgLstStart">Start</span><br />
+							<input type="text" id="txtStartPosition" size="5" />
+						</td>
+						<td style="padding-right: 5px; padding-left: 5px">
+							<span fcklang="DlgLstType">List Type</span><br />
+							<select id="selBulleted" style="display: none">
+								<option value="" selected="selected"></option>
+								<option value="circle" fcklang="DlgLstTypeCircle">Circle</option>
+								<option value="disc" fcklang="DlgLstTypeDisc">Disc</option>
+								<option value="square" fcklang="DlgLstTypeSquare">Square</option>
+							</select>
+							<select id="selNumbered" style="display: none">
+								<option value="" selected="selected"></option>
+								<option value="1" fcklang="DlgLstTypeNumbers">Numbers (1, 2, 3)</option>
+								<option value="a" fcklang="DlgLstTypeLCase">Lowercase Letters (a, b, c)</option>
+								<option value="A" fcklang="DlgLstTypeUCase">Uppercase Letters (A, B, C)</option>
+								<option value="i" fcklang="DlgLstTypeSRoman">Small Roman Numerals (i, ii, iii)</option>
+								<option value="I" fcklang="DlgLstTypeLRoman">Large Roman Numerals (I, II, III)</option>
+							</select>
+							&nbsp;
+						</td>
+					</tr>
+				</table>
+			</td>
+		</tr>
+	</table>
+</body>
+</html>


Property changes on: announcement/trunk/src/main/webapp/fckeditor/editor/dialog/fck_listprop.html
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/webapp/fckeditor/editor/dialog/fck_paste.html
===================================================================
--- announcement/trunk/src/main/webapp/fckeditor/editor/dialog/fck_paste.html	                        (rev 0)
+++ announcement/trunk/src/main/webapp/fckeditor/editor/dialog/fck_paste.html	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,339 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<!--
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2008 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * This dialog is shown when, for some reason (usually security settings),
+ * the user is not able to paste data from the clipboard to the editor using
+ * the toolbar buttons or the context menu.
+-->
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+	<title></title>
+	<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+	<meta name="robots" content="noindex, nofollow" />
+	<script src="common/fck_dialog_common.js" type="text/javascript"></script>
+	<script type="text/javascript">
+var dialog = window.parent ;
+var oEditor = dialog.InnerDialogLoaded() ;
+var FCK = oEditor.FCK;
+var FCKTools	= oEditor.FCKTools ;
+var FCKConfig	= oEditor.FCKConfig ;
+var FCKBrowserInfo = oEditor.FCKBrowserInfo ;
+
+window.onload = function ()
+{
+	// First of all, translate the dialog box texts
+	oEditor.FCKLanguageManager.TranslatePage(document) ;
+
+	var sPastingType = dialog.Args().CustomValue ;
+
+	if ( sPastingType == 'Word' || sPastingType == 'Security' )
+	{
+		if ( sPastingType == 'Security' )
+			document.getElementById( 'xSecurityMsg' ).style.display = '' ;
+
+		// For document.domain compatibility (#123) we must do all the magic in
+		// the URL for IE.
+		var sFrameUrl = !oEditor.FCK_IS_CUSTOM_DOMAIN || !FCKBrowserInfo.IsIE ?
+			'javascript:void(0)' :
+			'javascript:void( (function(){' +
+				'document.open() ;' +
+				'document.domain=\'' + document.domain + '\' ;' +
+				'document.write(\'<html><head><script>window.onerror = function() { return true ; };<\/script><\/head><body><\/body><\/html>\') ;' +
+				'document.close() ;' +
+				'document.body.contentEditable = true ;' +
+				'window.focus() ;' +
+				'})() )' ;
+
+		var eFrameSpace = document.getElementById( 'xFrameSpace' ) ;
+		eFrameSpace.innerHTML = '<iframe id="frmData" src="' + sFrameUrl + '" ' +
+					'height="98%" width="99%" frameborder="0" style="border: #000000 1px; background-color: #ffffff"></iframe>' ;
+
+		var oFrame = eFrameSpace.firstChild ;
+
+		if ( !oEditor.FCK_IS_CUSTOM_DOMAIN || !FCKBrowserInfo.IsIE )
+		{
+			// Avoid errors if the pasted content has any script that fails: #389
+			var oDoc = oFrame.contentWindow.document ;
+			oDoc.open() ;
+			oDoc.write('<html><head><script>window.onerror = function() { return true ; };<\/script><\/head><body><\/body><\/html>') ;
+			oDoc.close() ;
+
+			if ( FCKBrowserInfo.IsIE )
+				oDoc.body.contentEditable = true ;
+			else
+				oDoc.designMode = 'on' ;
+
+			oFrame.contentWindow.focus();
+		}
+	}
+	else
+	{
+		document.getElementById('txtData').style.display = '' ;
+	}
+
+	if ( sPastingType != 'Word' )
+		document.getElementById('oWordCommands').style.display = 'none' ;
+
+	dialog.SetOkButton( true ) ;
+	dialog.SetAutoSize( true ) ;
+}
+
+function Ok()
+{
+	// Before doing anything, save undo snapshot.
+	oEditor.FCKUndo.SaveUndoStep() ;
+
+	var sHtml ;
+
+	var sPastingType = dialog.Args().CustomValue ;
+
+	if ( sPastingType == 'Word' || sPastingType == 'Security' )
+	{
+		var oFrame = document.getElementById('frmData') ;
+		var oBody ;
+
+		if ( oFrame.contentDocument )
+			oBody = oFrame.contentDocument.body ;
+		else
+			oBody = oFrame.contentWindow.document.body ;
+
+		if ( sPastingType == 'Word' )
+		{
+			// If a plugin creates a FCK.CustomCleanWord function it will be called instead of the default one
+			if ( typeof( FCK.CustomCleanWord ) == 'function' )
+				sHtml = FCK.CustomCleanWord( oBody, document.getElementById('chkRemoveFont').checked, document.getElementById('chkRemoveStyles').checked ) ;
+			else
+				sHtml = CleanWord( oBody, document.getElementById('chkRemoveFont').checked, document.getElementById('chkRemoveStyles').checked ) ;
+		}
+		else
+			sHtml = oBody.innerHTML ;
+
+		// Fix relative anchor URLs (IE automatically adds the current page URL).
+		var re = new RegExp( window.location + "#", "g" ) ;
+		sHtml = sHtml.replace( re, '#') ;
+	}
+	else
+	{
+		sHtml = oEditor.FCKTools.HTMLEncode( document.getElementById('txtData').value )  ;
+		sHtml = FCKTools.ProcessLineBreaks( oEditor, FCKConfig, sHtml ) ;
+
+		// FCK.InsertHtml() does not work for us, since document fragments cannot contain node fragments. :(
+		// Use the marker method instead. It's primitive, but it works.
+		var range = new oEditor.FCKDomRange( oEditor.FCK.EditorWindow ) ;
+		var oDoc = oEditor.FCK.EditorDocument ;
+		dialog.Selection.EnsureSelection() ;
+		range.MoveToSelection() ;
+		range.DeleteContents() ;
+		var marker = [] ;
+		for ( var i = 0 ; i < 5 ; i++ )
+			marker.push( parseInt(Math.random() * 100000, 10 ) ) ;
+		marker = marker.join( "" ) ;
+		range.InsertNode ( oDoc.createTextNode( marker ) ) ;
+		var bookmark = range.CreateBookmark() ;
+
+		// Now we've got a marker indicating the paste position in the editor document.
+		// Find its position in the HTML code.
+		var htmlString = oDoc.body.innerHTML ;
+		var index = htmlString.indexOf( marker ) ;
+
+		// Split it the HTML code up, add the code we generated, and put them back together.
+		var htmlList = [] ;
+		htmlList.push( htmlString.substr( 0, index ) ) ;
+		htmlList.push( sHtml ) ;
+		htmlList.push( htmlString.substr( index + marker.length ) ) ;
+		htmlString = htmlList.join( "" ) ;
+
+		if ( oEditor.FCKBrowserInfo.IsIE )
+			oEditor.FCK.SetInnerHtml( htmlString ) ;
+		else
+			oDoc.body.innerHTML = htmlString ;
+
+		range.MoveToBookmark( bookmark ) ;
+		range.Collapse( false ) ;
+		range.Select() ;
+		range.Release() ;
+		return true ;
+	}
+
+	oEditor.FCK.InsertHtml( sHtml ) ;
+
+	return true ;
+}
+
+// This function will be called from the PasteFromWord dialog (fck_paste.html)
+// Input: oNode a DOM node that contains the raw paste from the clipboard
+// bIgnoreFont, bRemoveStyles booleans according to the values set in the dialog
+// Output: the cleaned string
+function CleanWord( oNode, bIgnoreFont, bRemoveStyles )
+{
+	var html = oNode.innerHTML ;
+
+	html = html.replace(/<o:p>\s*<\/o:p>/g, '') ;
+	html = html.replace(/<o:p>.*?<\/o:p>/g, '&nbsp;') ;
+
+	// Remove mso-xxx styles.
+	html = html.replace( /\s*mso-[^:]+:[^;"]+;?/gi, '' ) ;
+
+	// Remove margin styles.
+	html = html.replace( /\s*MARGIN: 0cm 0cm 0pt\s*;/gi, '' ) ;
+	html = html.replace( /\s*MARGIN: 0cm 0cm 0pt\s*"/gi, "\"" ) ;
+
+	html = html.replace( /\s*TEXT-INDENT: 0cm\s*;/gi, '' ) ;
+	html = html.replace( /\s*TEXT-INDENT: 0cm\s*"/gi, "\"" ) ;
+
+	html = html.replace( /\s*TEXT-ALIGN: [^\s;]+;?"/gi, "\"" ) ;
+
+	html = html.replace( /\s*PAGE-BREAK-BEFORE: [^\s;]+;?"/gi, "\"" ) ;
+
+	html = html.replace( /\s*FONT-VARIANT: [^\s;]+;?"/gi, "\"" ) ;
+
+	html = html.replace( /\s*tab-stops:[^;"]*;?/gi, '' ) ;
+	html = html.replace( /\s*tab-stops:[^"]*/gi, '' ) ;
+
+	// Remove FONT face attributes.
+	if ( bIgnoreFont )
+	{
+		html = html.replace( /\s*face="[^"]*"/gi, '' ) ;
+		html = html.replace( /\s*face=[^ >]*/gi, '' ) ;
+
+		html = html.replace( /\s*FONT-FAMILY:[^;"]*;?/gi, '' ) ;
+	}
+
+	// Remove Class attributes
+	html = html.replace(/<(\w[^>]*) class=([^ |>]*)([^>]*)/gi, "<$1$3") ;
+
+	// Remove styles.
+	if ( bRemoveStyles )
+		html = html.replace( /<(\w[^>]*) style="([^\"]*)"([^>]*)/gi, "<$1$3" ) ;
+
+	// Remove empty styles.
+	html =  html.replace( /\s*style="\s*"/gi, '' ) ;
+
+	html = html.replace( /<SPAN\s*[^>]*>\s*&nbsp;\s*<\/SPAN>/gi, '&nbsp;' ) ;
+
+	html = html.replace( /<SPAN\s*[^>]*><\/SPAN>/gi, '' ) ;
+
+	// Remove Lang attributes
+	html = html.replace(/<(\w[^>]*) lang=([^ |>]*)([^>]*)/gi, "<$1$3") ;
+
+	html = html.replace( /<SPAN\s*>(.*?)<\/SPAN>/gi, '$1' ) ;
+
+	html = html.replace( /<FONT\s*>(.*?)<\/FONT>/gi, '$1' ) ;
+
+	// Remove XML elements and declarations
+	html = html.replace(/<\\?\?xml[^>]*>/gi, '' ) ;
+
+	// Remove Tags with XML namespace declarations: <o:p><\/o:p>
+	html = html.replace(/<\/?\w+:[^>]*>/gi, '' ) ;
+
+	// Remove comments [SF BUG-1481861].
+	html = html.replace(/<\!--.*?-->/g, '' ) ;
+
+	html = html.replace( /<(U|I|STRIKE)>&nbsp;<\/\1>/g, '&nbsp;' ) ;
+
+	html = html.replace( /<H\d>\s*<\/H\d>/gi, '' ) ;
+
+	// Remove "display:none" tags.
+	html = html.replace( /<(\w+)[^>]*\sstyle="[^"]*DISPLAY\s?:\s?none(.*?)<\/\1>/ig, '' ) ;
+
+	// Remove language tags
+	html = html.replace( /<(\w[^>]*) language=([^ |>]*)([^>]*)/gi, "<$1$3") ;
+
+	// Remove onmouseover and onmouseout events (from MS Word comments effect)
+	html = html.replace( /<(\w[^>]*) onmouseover="([^\"]*)"([^>]*)/gi, "<$1$3") ;
+	html = html.replace( /<(\w[^>]*) onmouseout="([^\"]*)"([^>]*)/gi, "<$1$3") ;
+
+	if ( FCKConfig.CleanWordKeepsStructure )
+	{
+		// The original <Hn> tag send from Word is something like this: <Hn style="margin-top:0px;margin-bottom:0px">
+		html = html.replace( /<H(\d)([^>]*)>/gi, '<h$1>' ) ;
+
+		// Word likes to insert extra <font> tags, when using MSIE. (Wierd).
+		html = html.replace( /<(H\d)><FONT[^>]*>(.*?)<\/FONT><\/\1>/gi, '<$1>$2<\/$1>' );
+		html = html.replace( /<(H\d)><EM>(.*?)<\/EM><\/\1>/gi, '<$1>$2<\/$1>' );
+	}
+	else
+	{
+		html = html.replace( /<H1([^>]*)>/gi, '<div$1><b><font size="6">' ) ;
+		html = html.replace( /<H2([^>]*)>/gi, '<div$1><b><font size="5">' ) ;
+		html = html.replace( /<H3([^>]*)>/gi, '<div$1><b><font size="4">' ) ;
+		html = html.replace( /<H4([^>]*)>/gi, '<div$1><b><font size="3">' ) ;
+		html = html.replace( /<H5([^>]*)>/gi, '<div$1><b><font size="2">' ) ;
+		html = html.replace( /<H6([^>]*)>/gi, '<div$1><b><font size="1">' ) ;
+
+		html = html.replace( /<\/H\d>/gi, '<\/font><\/b><\/div>' ) ;
+
+		// Transform <P> to <DIV>
+		var re = new RegExp( '(<P)([^>]*>.*?)(<\/P>)', 'gi' ) ;	// Different because of a IE 5.0 error
+		html = html.replace( re, '<div$2<\/div>' ) ;
+
+		// Remove empty tags (three times, just to be sure).
+		// This also removes any empty anchor
+		html = html.replace( /<([^\s>]+)(\s[^>]*)?>\s*<\/\1>/g, '' ) ;
+		html = html.replace( /<([^\s>]+)(\s[^>]*)?>\s*<\/\1>/g, '' ) ;
+		html = html.replace( /<([^\s>]+)(\s[^>]*)?>\s*<\/\1>/g, '' ) ;
+	}
+
+	return html ;
+}
+
+	</script>
+
+</head>
+<body style="overflow: hidden">
+	<table cellspacing="0" cellpadding="0" width="100%" border="0" style="height: 98%">
+		<tr>
+			<td>
+				<div id="xSecurityMsg" style="display: none">
+					<span fcklang="DlgPasteSec">Because of your browser security settings,
+						the editor is not able to access your clipboard data directly. You are required
+						to paste it again in this window.</span><br />
+					&nbsp;
+				</div>
+				<div>
+					<span fcklang="DlgPasteMsg2">Please paste inside the following box using the keyboard
+						(<strong>Ctrl+V</strong>) and hit <strong>OK</strong>.</span><br />
+					&nbsp;
+				</div>
+			</td>
+		</tr>
+		<tr>
+			<td id="xFrameSpace" valign="top" height="100%" style="border: #000000 1px solid">
+				<textarea id="txtData" cols="80" rows="5" style="border: #000000 1px; display: none;
+					width: 99%; height: 98%"></textarea>
+			</td>
+		</tr>
+		<tr id="oWordCommands">
+			<td>
+
+					<input id="chkRemoveFont" type="checkbox" checked="checked" />
+					<label for="chkRemoveFont" fcklang="DlgPasteIgnoreFont">
+						Ignore Font Face definitions</label>
+					<br />
+					<input id="chkRemoveStyles" type="checkbox" />
+					<label for="chkRemoveStyles" fcklang="DlgPasteRemoveStyles">
+						Remove Styles definitions</label>
+
+			</td>
+		</tr>
+	</table>
+</body>
+</html>


Property changes on: announcement/trunk/src/main/webapp/fckeditor/editor/dialog/fck_paste.html
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/webapp/fckeditor/editor/dialog/fck_radiobutton.html
===================================================================
--- announcement/trunk/src/main/webapp/fckeditor/editor/dialog/fck_radiobutton.html	                        (rev 0)
+++ announcement/trunk/src/main/webapp/fckeditor/editor/dialog/fck_radiobutton.html	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,104 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" >
+<!--
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2008 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * Radio Button dialog window.
+-->
+<html>
+	<head>
+		<title>Radio Button Properties</title>
+		<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+		<meta content="noindex, nofollow" name="robots">
+		<script src="common/fck_dialog_common.js" type="text/javascript"></script>
+		<script type="text/javascript">
+
+var dialog	= window.parent ;
+var oEditor = dialog.InnerDialogLoaded() ;
+
+// Gets the document DOM
+var oDOM = oEditor.FCK.EditorDocument ;
+
+var oActiveEl = dialog.Selection.GetSelectedElement() ;
+
+window.onload = function()
+{
+	// First of all, translate the dialog box texts
+	oEditor.FCKLanguageManager.TranslatePage(document) ;
+
+	if ( oActiveEl && oActiveEl.tagName.toUpperCase() == 'INPUT' && oActiveEl.type == 'radio' )
+	{
+		GetE('txtName').value		= oActiveEl.name ;
+		GetE('txtValue').value		= oEditor.FCKBrowserInfo.IsIE ? oActiveEl.value : GetAttribute( oActiveEl, 'value' ) ;
+		GetE('txtSelected').checked	= oActiveEl.checked ;
+	}
+	else
+		oActiveEl = null ;
+
+	dialog.SetOkButton( true ) ;
+	dialog.SetAutoSize( true ) ;
+	SelectField( 'txtName' ) ;
+}
+
+function Ok()
+{
+	oEditor.FCKUndo.SaveUndoStep() ;
+
+	oActiveEl = CreateNamedElement( oEditor, oActiveEl, 'INPUT', {name: GetE('txtName').value, type: 'radio' } ) ;
+
+	if ( oEditor.FCKBrowserInfo.IsIE )
+		oActiveEl.value = GetE('txtValue').value ;
+	else
+		SetAttribute( oActiveEl, 'value', GetE('txtValue').value ) ;
+
+	var bIsChecked = GetE('txtSelected').checked ;
+	SetAttribute( oActiveEl, 'checked', bIsChecked ? 'checked' : null ) ;	// For Firefox
+	oActiveEl.checked = bIsChecked ;
+
+	return true ;
+}
+
+		</script>
+	</head>
+	<body style="OVERFLOW: hidden" scroll="no">
+		<table height="100%" width="100%">
+			<tr>
+				<td align="center">
+					<table border="0" cellpadding="0" cellspacing="0" width="80%">
+						<tr>
+							<td>
+								<span fckLang="DlgCheckboxName">Name</span><br>
+								<input type="text" size="20" id="txtName" style="WIDTH: 100%">
+							</td>
+						</tr>
+						<tr>
+							<td>
+								<span fckLang="DlgCheckboxValue">Value</span><br>
+								<input type="text" size="20" id="txtValue" style="WIDTH: 100%">
+							</td>
+						</tr>
+						<tr>
+							<td><input type="checkbox" id="txtSelected"><label for="txtSelected" fckLang="DlgCheckboxSelected">Checked</label></td>
+						</tr>
+					</table>
+				</td>
+			</tr>
+		</table>
+	</body>
+</html>


Property changes on: announcement/trunk/src/main/webapp/fckeditor/editor/dialog/fck_radiobutton.html
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/webapp/fckeditor/editor/dialog/fck_replace.html
===================================================================
--- announcement/trunk/src/main/webapp/fckeditor/editor/dialog/fck_replace.html	                        (rev 0)
+++ announcement/trunk/src/main/webapp/fckeditor/editor/dialog/fck_replace.html	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,648 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<!--
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2008 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * "Find" and "Replace" dialog box window.
+-->
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+	<title></title>
+	<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+	<meta content="noindex, nofollow" name="robots" />
+	<script src="common/fck_dialog_common.js" type="text/javascript"></script>
+	<script type="text/javascript">
+
+var dialog	= window.parent ;
+var oEditor = dialog.InnerDialogLoaded() ;
+var dialogArguments = dialog.Args() ;
+
+var FCKLang = oEditor.FCKLang ;
+var FCKDomTools = oEditor.FCKDomTools ;
+var FCKDomRange = oEditor.FCKDomRange ;
+var FCKListsLib = oEditor.FCKListsLib ;
+var FCKTools = oEditor.FCKTools ;
+var EditorDocument = oEditor.FCK.EditorDocument ;
+var HighlightStyle = oEditor.FCKStyles.GetStyle( '_FCK_SelectionHighlight' )  ;
+
+dialog.AddTab( 'Find', FCKLang.DlgFindTitle ) ;
+dialog.AddTab( 'Replace', FCKLang.DlgReplaceTitle ) ;
+var idMap = {} ;
+
+function OnDialogTabChange( tabCode )
+{
+	ShowE( 'divFind', ( tabCode == 'Find' ) ) ;
+	ShowE( 'divReplace', ( tabCode == 'Replace' ) ) ;
+	idMap['FindText'] = 'txtFind' + tabCode ;
+	idMap['CheckCase'] = 'chkCase' + tabCode ;
+	idMap['CheckWord'] = 'chkWord' + tabCode ;
+
+	if ( tabCode == 'Replace' )
+		dialog.SetAutoSize( true ) ;
+}
+
+GetNextNonEmptyTextNode = function( node, stopNode )
+{
+	while ( ( node = FCKDomTools.GetNextSourceNode( node, false, 3, stopNode ) ) && node && node.length < 1 )
+		1 ;
+	return node ;
+}
+
+CharacterCursor = function( arg )
+{
+	if ( arg.nodeType && arg.nodeType == 9 )
+	{
+		this._textNode = GetNextNonEmptyTextNode( arg.body, arg.documentElement ) ;
+		this._offset = 0 ;
+		this._doc = arg ;
+	}
+	else
+	{
+		this._textNode = arguments[0] ;
+		this._offset = arguments[1] ;
+		this._doc = FCKTools.GetElementDocument( arguments[0] ) ;
+	}
+}
+CharacterCursor.prototype =
+{
+	GetCharacter : function()
+	{
+		return ( this._textNode && this._textNode.nodeValue.charAt( this._offset ) ) || null ;
+	},
+
+	// Non-normalized.
+	GetTextNode : function()
+	{
+		return this._textNode ;
+	},
+
+	// Non-normalized.
+	GetIndex : function()
+	{
+		return this._offset ;
+	},
+
+	// Return value means whehther we've crossed a line break or a paragraph boundary.
+	MoveNext : function()
+	{
+		if ( this._offset < this._textNode.length - 1 )
+		{
+			this._offset++ ;
+			return false ;
+		}
+
+		var crossed = false ;
+		var curNode = this._textNode ;
+		while ( ( curNode = FCKDomTools.GetNextSourceNode( curNode ) )
+				&& curNode && ( curNode.nodeType != 3 || curNode.length < 1 ) )
+		{
+			var tag = curNode.nodeName.toLowerCase() ;
+			if ( FCKListsLib.BlockElements[tag] || tag == 'br' )
+				crossed = true ;
+		}
+
+		this._textNode = curNode ;
+		this._offset = 0 ;
+		return crossed ;
+	},
+
+	// Return value means whehther we've crossed a line break or a paragraph boundary.
+	MoveBack : function()
+	{
+		if ( this._offset > 0 && this._textNode.length > 0 )
+		{
+			this._offset = Math.min( this._offset - 1, this._textNode.length - 1 ) ;
+			return false ;
+		}
+
+		var crossed = false ;
+		var curNode = this._textNode ;
+		while ( ( curNode = FCKDomTools.GetPreviousSourceNode( curNode ) )
+				&& curNode && ( curNode.nodeType != 3 || curNode.length < 1 ) )
+		{
+			var tag = curNode.nodeName.toLowerCase() ;
+			if ( FCKListsLib.BlockElements[tag] || tag == 'br' )
+				crossed = true ;
+		}
+
+		this._textNode = curNode ;
+		this._offset = curNode.length - 1 ;
+		return crossed ;
+	},
+
+	Clone : function()
+	{
+		return new CharacterCursor( this._textNode, this._offset ) ;
+	}
+} ;
+
+CharacterRange = function( initCursor, maxLength )
+{
+	this._cursors = initCursor.push ? initCursor : [initCursor] ;
+	this._maxLength = maxLength ;
+	this._highlightRange = null ;
+}
+CharacterRange.prototype =
+{
+	ToDomRange : function()
+	{
+		var firstCursor = this._cursors[0] ;
+		var lastCursor = this._cursors[ this._cursors.length - 1 ] ;
+		var domRange = new FCKDomRange( FCKTools.GetElementWindow( firstCursor.GetTextNode() ) ) ;
+		var w3cRange = domRange._Range = domRange.CreateRange() ;
+		w3cRange.setStart( firstCursor.GetTextNode(), firstCursor.GetIndex() ) ;
+		w3cRange.setEnd( lastCursor.GetTextNode(), lastCursor.GetIndex() + 1 ) ;
+		domRange._UpdateElementInfo() ;
+		return domRange ;
+	},
+
+	Highlight : function()
+	{
+		if ( this._cursors.length < 1 )
+			return ;
+
+		var domRange = this.ToDomRange() ;
+		HighlightStyle.ApplyToRange( domRange, false, true ) ;
+		this._highlightRange = domRange ;
+
+		var charRange = CharacterRange.CreateFromDomRange( domRange ) ;
+		var focusNode = domRange.StartNode ;
+		if ( focusNode.nodeType != 1 )
+			focusNode = focusNode.parentNode ;
+		focusNode.scrollIntoView( false ) ;
+		this._cursors = charRange._cursors ;
+	},
+
+	RemoveHighlight : function()
+	{
+		if ( this._highlightRange )
+		{
+			HighlightStyle.RemoveFromRange( this._highlightRange, false, true ) ;
+			var charRange = CharacterRange.CreateFromDomRange( this._highlightRange ) ;
+			this._cursors = charRange._cursors ;
+			this._highlightRange = null ;
+		}
+	},
+
+	GetHighlightDomRange : function()
+	{
+		return this._highlightRange;
+	},
+
+	MoveNext : function()
+	{
+		var next = this._cursors[ this._cursors.length - 1 ].Clone() ;
+		var retval = next.MoveNext() ;
+		if ( retval )
+			this._cursors = [] ;
+		this._cursors.push( next ) ;
+		if ( this._cursors.length > this._maxLength )
+			this._cursors.shift() ;
+		return retval ;
+	},
+
+	MoveBack : function()
+	{
+		var prev = this._cursors[0].Clone() ;
+		var retval = prev.MoveBack() ;
+		if ( retval )
+			this._cursors = [] ;
+		this._cursors.unshift( prev ) ;
+		if ( this._cursors.length > this._maxLength )
+			this._cursors.pop() ;
+		return retval ;
+	},
+
+	GetEndCharacter : function()
+	{
+		if ( this._cursors.length < 1 )
+			return null ;
+		var retval = this._cursors[ this._cursors.length - 1 ].GetCharacter() ;
+		return retval ;
+	},
+
+	GetNextRange : function( len )
+	{
+		if ( this._cursors.length == 0 )
+			return null ;
+		var cur = this._cursors[ this._cursors.length - 1 ].Clone() ;
+		cur.MoveNext() ;
+		return new CharacterRange( cur, len ) ;
+	},
+
+	GetCursors : function()
+	{
+		return this._cursors ;
+	}
+} ;
+
+CharacterRange.CreateFromDomRange = function( domRange )
+{
+	var w3cRange = domRange._Range ;
+	var startContainer = w3cRange.startContainer ;
+	var endContainer = w3cRange.endContainer ;
+	var startTextNode, startIndex, endTextNode, endIndex ;
+
+	if ( startContainer.nodeType == 3 )
+	{
+		startTextNode = startContainer ;
+		startIndex = w3cRange.startOffset ;
+	}
+	else if ( domRange.StartNode.nodeType == 3 )
+	{
+		startTextNode = domRange.StartNode ;
+		startIndex = 0 ;
+	}
+	else
+	{
+		startTextNode = GetNextNonEmptyTextNode( domRange.StartNode, domRange.StartNode.parentNode ) ;
+		if ( !startTextNode )
+			return null ;
+		startIndex = 0 ;
+	}
+
+	if ( endContainer.nodeType == 3 && w3cRange.endOffset > 0 )
+	{
+		endTextNode = endContainer ;
+		endIndex = w3cRange.endOffset - 1 ;
+	}
+	else
+	{
+		endTextNode = domRange.EndNode ;
+		while ( endTextNode.nodeType != 3 )
+			endTextNode = endTextNode.lastChild ;
+		endIndex = endTextNode.length - 1 ;
+	}
+
+	var cursors = [] ;
+	var current = new CharacterCursor( startTextNode, startIndex ) ;
+	cursors.push( current ) ;
+	if ( !( current.GetTextNode() == endTextNode && current.GetIndex() == endIndex ) && !domRange.CheckIsEmpty() )
+	{
+		do
+		{
+			current = current.Clone() ;
+			current.MoveNext() ;
+			cursors.push( current ) ;
+		}
+		while ( !( current.GetTextNode() == endTextNode && current.GetIndex() == endIndex ) ) ;
+	}
+
+	return new CharacterRange( cursors, cursors.length ) ;
+}
+
+// Knuth-Morris-Pratt Algorithm for stream input
+KMP_NOMATCH = 0 ;
+KMP_ADVANCED = 1 ;
+KMP_MATCHED = 2 ;
+KmpMatch = function( pattern, ignoreCase )
+{
+	var overlap = [ -1 ] ;
+	for ( var i = 0 ; i < pattern.length ; i++ )
+	{
+		overlap.push( overlap[i] + 1 ) ;
+		while ( overlap[ i + 1 ] > 0 && pattern.charAt( i ) != pattern.charAt( overlap[ i + 1 ] - 1 ) )
+			overlap[ i + 1 ] = overlap[ overlap[ i + 1 ] - 1 ] + 1 ;
+	}
+	this._Overlap = overlap ;
+	this._State = 0 ;
+	this._IgnoreCase = ( ignoreCase === true ) ;
+	if ( ignoreCase )
+		this.Pattern = pattern.toLowerCase();
+	else
+		this.Pattern = pattern ;
+}
+KmpMatch.prototype = {
+	FeedCharacter : function( c )
+	{
+		if ( this._IgnoreCase )
+			c = c.toLowerCase();
+
+		while ( true )
+		{
+			if ( c == this.Pattern.charAt( this._State ) )
+			{
+				this._State++ ;
+				if ( this._State == this.Pattern.length )
+				{
+					// found a match, start over, don't care about partial matches involving the current match
+					this._State = 0;
+					return KMP_MATCHED;
+				}
+				return KMP_ADVANCED ;
+			}
+			else if ( this._State == 0 )
+				return KMP_NOMATCH;
+			else
+				this._State = this._Overlap[ this._State ];
+		}
+
+		return null ;
+	},
+
+	Reset : function()
+	{
+		this._State = 0 ;
+	}
+};
+
+// Place a range at the start of document.
+function OnLoad()
+{
+	// First of all, translate the dialog box texts.
+	oEditor.FCKLanguageManager.TranslatePage( document ) ;
+
+	// Show the appropriate tab at startup.
+	if ( dialogArguments.CustomValue == 'Find' )
+	{
+		dialog.SetSelectedTab( 'Find' ) ;
+		dialog.SetAutoSize( true ) ;
+	}
+	else
+		dialog.SetSelectedTab( 'Replace' ) ;
+
+	SelectField( 'txtFind' + dialogArguments.CustomValue ) ;
+}
+
+function btnStat()
+{
+	GetE('btnReplace').disabled =
+		GetE('btnReplaceAll').disabled =
+			GetE('btnFind').disabled =
+				( GetE(idMap["FindText"]).value.length == 0 ) ;
+}
+
+function btnStatDelayed()
+{
+	setTimeout( btnStat, 1 ) ;
+}
+
+function GetSearchString()
+{
+	return GetE(idMap['FindText']).value ;
+}
+
+function GetReplaceString()
+{
+	return GetE("txtReplace").value ;
+}
+
+function GetCheckCase()
+{
+	return !! ( GetE(idMap['CheckCase']).checked ) ;
+}
+
+function GetMatchWord()
+{
+	return !! ( GetE(idMap['CheckWord']).checked ) ;
+}
+
+/* Is this character a unicode whitespace or a punctuation mark?
+ * References:
+ * http://unicode.org/Public/UNIDATA/PropList.txt (whitespaces)
+ * http://php.chinaunix.net/manual/tw/ref.regex.php (punctuation marks)
+ */
+function CheckIsWordSeparator( c )
+{
+	var code = c.charCodeAt( 0 );
+	if ( code >= 9 && code <= 0xd )
+		return true;
+	if ( code >= 0x2000 && code <= 0x200a )
+		return true;
+	switch ( code )
+	{
+		case 0x20:
+		case 0x85:
+		case 0xa0:
+		case 0x1680:
+		case 0x180e:
+		case 0x2028:
+		case 0x2029:
+		case 0x202f:
+		case 0x205f:
+		case 0x3000:
+			return true;
+		default:
+	}
+	return /[.,"'?!;:]/.test( c ) ;
+}
+
+FindRange = null ;
+function _Find()
+{
+	var searchString = GetSearchString() ;
+	if ( !FindRange )
+		FindRange = new CharacterRange( new CharacterCursor( EditorDocument ), searchString.length ) ;
+	else
+	{
+		FindRange.RemoveHighlight() ;
+		FindRange = FindRange.GetNextRange( searchString.length ) ;
+	}
+	var matcher = new KmpMatch( searchString, ! GetCheckCase() ) ;
+	var matchState = KMP_NOMATCH ;
+	var character = '%' ;
+
+	while ( character != null )
+	{
+		while ( ( character = FindRange.GetEndCharacter() ) )
+		{
+			matchState = matcher.FeedCharacter( character ) ;
+			if ( matchState == KMP_MATCHED )
+				break ;
+			if ( FindRange.MoveNext() )
+				matcher.Reset() ;
+		}
+
+		if ( matchState == KMP_MATCHED )
+		{
+			if ( GetMatchWord() )
+			{
+				var cursors = FindRange.GetCursors() ;
+				var head = cursors[ cursors.length - 1 ].Clone() ;
+				var tail = cursors[0].Clone() ;
+				if ( !head.MoveNext() && !CheckIsWordSeparator( head.GetCharacter() ) )
+					continue ;
+				if ( !tail.MoveBack() && !CheckIsWordSeparator( tail.GetCharacter() ) )
+					continue ;
+			}
+
+			FindRange.Highlight() ;
+			return true ;
+		}
+	}
+
+	FindRange = null ;
+	return false ;
+}
+
+function Find()
+{
+	if ( ! _Find() )
+		alert( FCKLang.DlgFindNotFoundMsg ) ;
+}
+
+function Replace()
+{
+	var saveUndoStep = function( selectRange )
+	{
+		var ieRange ;
+		if ( oEditor.FCKBrowserInfo.IsIE )
+			ieRange = document.selection.createRange() ;
+
+		selectRange.Select() ;
+		oEditor.FCKUndo.SaveUndoStep() ;
+		var cloneRange = selectRange.Clone() ;
+		cloneRange.Collapse( false ) ;
+		cloneRange.Select() ;
+
+		if ( ieRange )
+			setTimeout( function(){ ieRange.select() ; }, 1 ) ;
+	}
+
+	if ( FindRange && FindRange.GetHighlightDomRange() )
+	{
+		var range = FindRange.GetHighlightDomRange() ;
+		var bookmark = range.CreateBookmark() ;
+		FindRange.RemoveHighlight() ;
+		range.MoveToBookmark( bookmark ) ;
+
+		saveUndoStep( range ) ;
+		range.DeleteContents() ;
+		range.InsertNode( EditorDocument.createTextNode( GetReplaceString() ) ) ;
+		range._UpdateElementInfo() ;
+
+		FindRange = CharacterRange.CreateFromDomRange( range ) ;
+	}
+	else
+	{
+		if ( ! _Find() )
+		{
+			FindRange && FindRange.RemoveHighlight() ;
+			alert( FCKLang.DlgFindNotFoundMsg ) ;
+		}
+	}
+}
+
+function ReplaceAll()
+{
+	oEditor.FCKUndo.SaveUndoStep() ;
+	var replaceCount = 0 ;
+
+	while ( _Find() )
+	{
+		var range = FindRange.GetHighlightDomRange() ;
+		var bookmark = range.CreateBookmark() ;
+		FindRange.RemoveHighlight() ;
+		range.MoveToBookmark( bookmark) ;
+
+		range.DeleteContents() ;
+		range.InsertNode( EditorDocument.createTextNode( GetReplaceString() ) ) ;
+		range._UpdateElementInfo() ;
+
+		FindRange = CharacterRange.CreateFromDomRange( range ) ;
+		replaceCount++ ;
+	}
+	if ( replaceCount == 0 )
+	{
+		FindRange && FindRange.RemoveHighlight() ;
+		alert( FCKLang.DlgFindNotFoundMsg ) ;
+	}
+	dialog.Cancel() ;
+}
+
+window.onunload = function()
+{
+	if ( FindRange )
+	{
+		FindRange.RemoveHighlight() ;
+		FindRange.ToDomRange().Select() ;
+	}
+}
+	</script>
+</head>
+<body onload="OnLoad()" style="overflow: hidden">
+	<div id="divFind" style="display: none">
+		<table cellspacing="3" cellpadding="2" width="100%" border="0">
+			<tr>
+				<td nowrap="nowrap">
+					<label for="txtFindFind" fcklang="DlgReplaceFindLbl">
+						Find what:</label>
+				</td>
+				<td width="100%">
+					<input id="txtFindFind" onkeyup="btnStat()" oninput="btnStat()" onpaste="btnStatDelayed()" style="width: 100%" tabindex="1"
+						type="text" />
+				</td>
+				<td>
+					<input id="btnFind" style="width: 80px" disabled="disabled" onclick="Find();"
+						type="button" value="Find" fcklang="DlgFindFindBtn" />
+				</td>
+			</tr>
+			<tr>
+				<td valign="bottom" colspan="3">
+					&nbsp;<input id="chkCaseFind" tabindex="3" type="checkbox" /><label for="chkCaseFind" fcklang="DlgReplaceCaseChk">Match
+						case</label>
+					<br />
+					&nbsp;<input id="chkWordFind" tabindex="4" type="checkbox" /><label for="chkWordFind" fcklang="DlgReplaceWordChk">Match
+						whole word</label>
+				</td>
+			</tr>
+		</table>
+	</div>
+	<div id="divReplace" style="display:none">
+		<table cellspacing="3" cellpadding="2" width="100%" border="0">
+			<tr>
+				<td nowrap="nowrap">
+					<label for="txtFindReplace" fcklang="DlgReplaceFindLbl">
+						Find what:</label>
+				</td>
+				<td width="100%">
+					<input id="txtFindReplace" onkeyup="btnStat()" oninput="btnStat()" onpaste="btnStatDelayed()" style="width: 100%" tabindex="1"
+						type="text" />
+				</td>
+				<td>
+					<input id="btnReplace" style="width: 80px" disabled="disabled" onclick="Replace();"
+						type="button" value="Replace" fcklang="DlgReplaceReplaceBtn" />
+				</td>
+			</tr>
+			<tr>
+				<td valign="top" nowrap="nowrap">
+					<label for="txtReplace" fcklang="DlgReplaceReplaceLbl">
+						Replace with:</label>
+				</td>
+				<td valign="top">
+					<input id="txtReplace" style="width: 100%" tabindex="2" type="text" />
+				</td>
+				<td>
+					<input id="btnReplaceAll" style="width: 80px" disabled="disabled" onclick="ReplaceAll()" type="button"
+						value="Replace All" fcklang="DlgReplaceReplAllBtn" />
+				</td>
+			</tr>
+			<tr>
+				<td valign="bottom" colspan="3">
+					&nbsp;<input id="chkCaseReplace" tabindex="3" type="checkbox" /><label for="chkCaseReplace" fcklang="DlgReplaceCaseChk">Match
+						case</label>
+					<br />
+					&nbsp;<input id="chkWordReplace" tabindex="4" type="checkbox" /><label for="chkWordReplace" fcklang="DlgReplaceWordChk">Match
+						whole word</label>
+				</td>
+			</tr>
+		</table>
+	</div>
+</body>
+</html>


Property changes on: announcement/trunk/src/main/webapp/fckeditor/editor/dialog/fck_replace.html
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/webapp/fckeditor/editor/dialog/fck_select/fck_select.js
===================================================================
--- announcement/trunk/src/main/webapp/fckeditor/editor/dialog/fck_select/fck_select.js	                        (rev 0)
+++ announcement/trunk/src/main/webapp/fckeditor/editor/dialog/fck_select/fck_select.js	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,194 @@
+/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2008 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * Scripts for the fck_select.html page.
+ */
+
+function Select( combo )
+{
+	var iIndex = combo.selectedIndex ;
+
+	oListText.selectedIndex		= iIndex ;
+	oListValue.selectedIndex	= iIndex ;
+
+	var oTxtText	= document.getElementById( "txtText" ) ;
+	var oTxtValue	= document.getElementById( "txtValue" ) ;
+
+	oTxtText.value	= oListText.value ;
+	oTxtValue.value	= oListValue.value ;
+}
+
+function Add()
+{
+	var oTxtText	= document.getElementById( "txtText" ) ;
+	var oTxtValue	= document.getElementById( "txtValue" ) ;
+
+	AddComboOption( oListText, oTxtText.value, oTxtText.value ) ;
+	AddComboOption( oListValue, oTxtValue.value, oTxtValue.value ) ;
+
+	oListText.selectedIndex = oListText.options.length - 1 ;
+	oListValue.selectedIndex = oListValue.options.length - 1 ;
+
+	oTxtText.value	= '' ;
+	oTxtValue.value	= '' ;
+
+	oTxtText.focus() ;
+}
+
+function Modify()
+{
+	var iIndex = oListText.selectedIndex ;
+
+	if ( iIndex < 0 ) return ;
+
+	var oTxtText	= document.getElementById( "txtText" ) ;
+	var oTxtValue	= document.getElementById( "txtValue" ) ;
+
+	oListText.options[ iIndex ].innerHTML	= HTMLEncode( oTxtText.value ) ;
+	oListText.options[ iIndex ].value		= oTxtText.value ;
+
+	oListValue.options[ iIndex ].innerHTML	= HTMLEncode( oTxtValue.value ) ;
+	oListValue.options[ iIndex ].value		= oTxtValue.value ;
+
+	oTxtText.value	= '' ;
+	oTxtValue.value	= '' ;
+
+	oTxtText.focus() ;
+}
+
+function Move( steps )
+{
+	ChangeOptionPosition( oListText, steps ) ;
+	ChangeOptionPosition( oListValue, steps ) ;
+}
+
+function Delete()
+{
+	RemoveSelectedOptions( oListText ) ;
+	RemoveSelectedOptions( oListValue ) ;
+}
+
+function SetSelectedValue()
+{
+	var iIndex = oListValue.selectedIndex ;
+	if ( iIndex < 0 ) return ;
+
+	var oTxtValue = document.getElementById( "txtSelValue" ) ;
+
+	oTxtValue.value = oListValue.options[ iIndex ].value ;
+}
+
+// Moves the selected option by a number of steps (also negative)
+function ChangeOptionPosition( combo, steps )
+{
+	var iActualIndex = combo.selectedIndex ;
+
+	if ( iActualIndex < 0 )
+		return ;
+
+	var iFinalIndex = iActualIndex + steps ;
+
+	if ( iFinalIndex < 0 )
+		iFinalIndex = 0 ;
+
+	if ( iFinalIndex > ( combo.options.length - 1 ) )
+		iFinalIndex = combo.options.length - 1 ;
+
+	if ( iActualIndex == iFinalIndex )
+		return ;
+
+	var oOption = combo.options[ iActualIndex ] ;
+	var sText	= HTMLDecode( oOption.innerHTML ) ;
+	var sValue	= oOption.value ;
+
+	combo.remove( iActualIndex ) ;
+
+	oOption = AddComboOption( combo, sText, sValue, null, iFinalIndex ) ;
+
+	oOption.selected = true ;
+}
+
+// Remove all selected options from a SELECT object
+function RemoveSelectedOptions(combo)
+{
+	// Save the selected index
+	var iSelectedIndex = combo.selectedIndex ;
+
+	var oOptions = combo.options ;
+
+	// Remove all selected options
+	for ( var i = oOptions.length - 1 ; i >= 0 ; i-- )
+	{
+		if (oOptions[i].selected) combo.remove(i) ;
+	}
+
+	// Reset the selection based on the original selected index
+	if ( combo.options.length > 0 )
+	{
+		if ( iSelectedIndex >= combo.options.length ) iSelectedIndex = combo.options.length - 1 ;
+		combo.selectedIndex = iSelectedIndex ;
+	}
+}
+
+// Add a new option to a SELECT object (combo or list)
+function AddComboOption( combo, optionText, optionValue, documentObject, index )
+{
+	var oOption ;
+
+	if ( documentObject )
+		oOption = documentObject.createElement("OPTION") ;
+	else
+		oOption = document.createElement("OPTION") ;
+
+	if ( index != null )
+		combo.options.add( oOption, index ) ;
+	else
+		combo.options.add( oOption ) ;
+
+	oOption.innerHTML = optionText.length > 0 ? HTMLEncode( optionText ) : '&nbsp;' ;
+	oOption.value     = optionValue ;
+
+	return oOption ;
+}
+
+function HTMLEncode( text )
+{
+	if ( !text )
+		return '' ;
+
+	text = text.replace( /&/g, '&amp;' ) ;
+	text = text.replace( /</g, '&lt;' ) ;
+	text = text.replace( />/g, '&gt;' ) ;
+
+	return text ;
+}
+
+
+function HTMLDecode( text )
+{
+	if ( !text )
+		return '' ;
+
+	text = text.replace( /&gt;/g, '>' ) ;
+	text = text.replace( /&lt;/g, '<' ) ;
+	text = text.replace( /&amp;/g, '&' ) ;
+
+	return text ;
+}


Property changes on: announcement/trunk/src/main/webapp/fckeditor/editor/dialog/fck_select/fck_select.js
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/webapp/fckeditor/editor/dialog/fck_select.html
===================================================================
--- announcement/trunk/src/main/webapp/fckeditor/editor/dialog/fck_select.html	                        (rev 0)
+++ announcement/trunk/src/main/webapp/fckeditor/editor/dialog/fck_select.html	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,180 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" >
+<!--
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2008 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * Select dialog window.
+-->
+<html>
+	<head>
+		<title>Select Properties</title>
+		<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+		<meta content="noindex, nofollow" name="robots">
+		<script src="common/fck_dialog_common.js" type="text/javascript"></script>
+		<script type="text/javascript" src="fck_select/fck_select.js"></script>
+		<script type="text/javascript">
+
+var dialog	= window.parent ;
+var oEditor = dialog.InnerDialogLoaded() ;
+
+// Gets the document DOM
+var oDOM = oEditor.FCK.EditorDocument ;
+
+var oActiveEl = dialog.Selection.GetSelectedElement() ;
+
+var oListText ;
+var oListValue ;
+
+window.onload = function()
+{
+	// First of all, translate the dialog box texts
+	oEditor.FCKLanguageManager.TranslatePage(document) ;
+
+	oListText	= document.getElementById( 'cmbText' ) ;
+	oListValue	= document.getElementById( 'cmbValue' ) ;
+
+	// Fix the lists widths. (Bug #970)
+	oListText.style.width = oListText.offsetWidth ;
+	oListValue.style.width = oListValue.offsetWidth ;
+
+	if ( oActiveEl && oActiveEl.tagName == 'SELECT' )
+	{
+		GetE('txtName').value		= oActiveEl.name ;
+		GetE('txtSelValue').value	= oActiveEl.value ;
+		GetE('txtLines').value		= GetAttribute( oActiveEl, 'size' ) ;
+		GetE('chkMultiple').checked	= oActiveEl.multiple ;
+
+		// Load the actual options
+		for ( var i = 0 ; i < oActiveEl.options.length ; i++ )
+		{
+			var sText	= HTMLDecode( oActiveEl.options[i].innerHTML ) ;
+			var sValue	= oActiveEl.options[i].value ;
+
+			AddComboOption( oListText, sText, sText ) ;
+			AddComboOption( oListValue, sValue, sValue ) ;
+		}
+	}
+	else
+		oActiveEl = null ;
+
+	dialog.SetOkButton( true ) ;
+	dialog.SetAutoSize( true ) ;
+	SelectField( 'txtName' ) ;
+}
+
+function Ok()
+{
+	oEditor.FCKUndo.SaveUndoStep() ;
+
+	var sSize = GetE('txtLines').value ;
+	if ( sSize == null || isNaN( sSize ) || sSize <= 1 )
+		sSize = '' ;
+
+	oActiveEl = CreateNamedElement( oEditor, oActiveEl, 'SELECT', {name: GetE('txtName').value} ) ;
+
+	SetAttribute( oActiveEl, 'size'	, sSize ) ;
+	oActiveEl.multiple = ( sSize.length > 0 && GetE('chkMultiple').checked ) ;
+
+	// Remove all options.
+	while ( oActiveEl.options.length > 0 )
+		oActiveEl.remove(0) ;
+
+	// Add all available options.
+	for ( var i = 0 ; i < oListText.options.length ; i++ )
+	{
+		var sText	= oListText.options[i].value ;
+		var sValue	= oListValue.options[i].value ;
+		if ( sValue.length == 0 ) sValue = sText ;
+
+		var oOption = AddComboOption( oActiveEl, sText, sValue, oDOM ) ;
+
+		if ( sValue == GetE('txtSelValue').value )
+		{
+			SetAttribute( oOption, 'selected', 'selected' ) ;
+			oOption.selected = true ;
+		}
+	}
+
+	return true ;
+}
+
+		</script>
+	</head>
+	<body style="overflow: hidden">
+		<table width="100%" height="100%">
+			<tr>
+				<td>
+					<table width="100%">
+						<tr>
+							<td nowrap><span fckLang="DlgSelectName">Name</span>&nbsp;</td>
+							<td width="100%" colSpan="2"><input id="txtName" style="WIDTH: 100%" type="text"></td>
+						</tr>
+						<tr>
+							<td nowrap><span fckLang="DlgSelectValue">Value</span>&nbsp;</td>
+							<td width="100%" colSpan="2"><input id="txtSelValue" style="WIDTH: 100%; BACKGROUND-COLOR: buttonface" type="text" readonly></td>
+						</tr>
+						<tr>
+							<td nowrap><span fckLang="DlgSelectSize">Size</span>&nbsp;</td>
+							<td nowrap><input id="txtLines" type="text" size="2" value="">&nbsp;<span fckLang="DlgSelectLines">lines</span></td>
+							<td nowrap align="right"><input id="chkMultiple" name="chkMultiple" type="checkbox"><label for="chkMultiple" fckLang="DlgSelectChkMulti">Allow
+									multiple selections</label></td>
+						</tr>
+					</table>
+					<br>
+					<hr style="POSITION: absolute">
+					<span style="LEFT: 10px; POSITION: relative; TOP: -7px" class="BackColor">&nbsp;<span fckLang="DlgSelectOpAvail">Available
+							Options</span>&nbsp;</span>
+					<table width="100%">
+						<tr>
+							<td width="50%"><span fckLang="DlgSelectOpText">Text</span><br>
+								<input id="txtText" style="WIDTH: 100%" type="text" name="txtText">
+							</td>
+							<td width="50%"><span fckLang="DlgSelectOpValue">Value</span><br>
+								<input id="txtValue" style="WIDTH: 100%" type="text" name="txtValue">
+							</td>
+							<td vAlign="bottom"><input onclick="Add();" type="button" fckLang="DlgSelectBtnAdd" value="Add"></td>
+							<td vAlign="bottom"><input onclick="Modify();" type="button" fckLang="DlgSelectBtnModify" value="Modify"></td>
+						</tr>
+						<tr>
+							<td rowSpan="2"><select id="cmbText" style="WIDTH: 100%" onchange="GetE('cmbValue').selectedIndex = this.selectedIndex;Select(this);"
+									size="5" name="cmbText"></select>
+							</td>
+							<td rowSpan="2"><select id="cmbValue" style="WIDTH: 100%" onchange="GetE('cmbText').selectedIndex = this.selectedIndex;Select(this);"
+									size="5" name="cmbValue"></select>
+							</td>
+							<td vAlign="top" colSpan="2">
+							</td>
+						</tr>
+						<tr>
+							<td vAlign="bottom" colSpan="2"><input style="WIDTH: 100%" onclick="Move(-1);" type="button" fckLang="DlgSelectBtnUp" value="Up">
+								<br>
+								<input style="WIDTH: 100%" onclick="Move(1);" type="button" fckLang="DlgSelectBtnDown"
+									value="Down">
+							</td>
+						</tr>
+						<TR>
+							<TD vAlign="bottom" colSpan="4"><INPUT onclick="SetSelectedValue();" type="button" fckLang="DlgSelectBtnSetValue" value="Set as selected value">&nbsp;&nbsp;
+								<input onclick="Delete();" type="button" fckLang="DlgSelectBtnDelete" value="Delete"></TD>
+						</TR>
+					</table>
+				</td>
+			</tr>
+		</table>
+	</body>
+</html>


Property changes on: announcement/trunk/src/main/webapp/fckeditor/editor/dialog/fck_select.html
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/webapp/fckeditor/editor/dialog/fck_smiley.html
===================================================================
--- announcement/trunk/src/main/webapp/fckeditor/editor/dialog/fck_smiley.html	                        (rev 0)
+++ announcement/trunk/src/main/webapp/fckeditor/editor/dialog/fck_smiley.html	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,111 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" >
+<!--
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2008 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * Smileys (emoticons) dialog window.
+-->
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+	<title></title>
+	<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+	<meta name="robots" content="noindex, nofollow" />
+	<style type="text/css">
+		.Hand
+		{
+			cursor: pointer;
+			cursor: hand;
+		}
+	</style>
+	<script src="common/fck_dialog_common.js" type="text/javascript"></script>
+	<script type="text/javascript">
+
+var dialog	= window.parent ;
+var oEditor = dialog.InnerDialogLoaded() ;
+
+window.onload = function ()
+{
+	// First of all, translate the dialog box texts
+	oEditor.FCKLanguageManager.TranslatePage(document) ;
+
+	dialog.SetAutoSize( true ) ;
+}
+
+function InsertSmiley( url )
+{
+	oEditor.FCKUndo.SaveUndoStep() ;
+
+	var oImg = oEditor.FCK.InsertElement( 'img' ) ;
+	oImg.src = url ;
+	oImg.setAttribute( '_fcksavedurl', url ) ;
+
+	// For long smileys list, it seams that IE continues loading the images in
+	// the background when you quickly select one image. so, let's clear
+	// everything before closing.
+	document.body.innerHTML = '' ;
+
+	dialog.Cancel() ;
+}
+
+function over(td)
+{
+	td.className = 'LightBackground Hand' ;
+}
+
+function out(td)
+{
+	td.className = 'DarkBackground Hand' ;
+}
+	</script>
+</head>
+<body style="overflow: hidden">
+	<table cellpadding="2" cellspacing="2" align="center" border="0" width="100%" height="100%">
+		<script type="text/javascript">
+
+var FCKConfig = oEditor.FCKConfig ;
+
+var sBasePath	= FCKConfig.SmileyPath ;
+var aImages		= FCKConfig.SmileyImages ;
+var iCols		= FCKConfig.SmileyColumns ;
+var iColWidth	= parseInt( 100 / iCols, 10 ) ;
+
+var i = 0 ;
+while (i < aImages.length)
+{
+	document.write( '<tr>' ) ;
+	for(var j = 0 ; j < iCols ; j++)
+	{
+		if (aImages[i])
+		{
+			var sUrl = sBasePath + aImages[i] ;
+			document.write( '<td width="' + iColWidth + '%" align="center" class="DarkBackground Hand" onclick="InsertSmiley(\'' + sUrl.replace(/'/g, "\\'" ) + '\')" onmouseover="over(this)" onmouseout="out(this)">' ) ;
+			document.write( '<img src="' + sUrl + '" border="0" />' ) ;
+		}
+		else
+			document.write( '<td width="' + iColWidth + '%" class="DarkBackground">&nbsp;' ) ;
+		document.write( '<\/td>' ) ;
+		i++ ;
+	}
+	document.write('<\/tr>') ;
+}
+
+		</script>
+	</table>
+</body>
+</html>


Property changes on: announcement/trunk/src/main/webapp/fckeditor/editor/dialog/fck_smiley.html
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/webapp/fckeditor/editor/dialog/fck_source.html
===================================================================
--- announcement/trunk/src/main/webapp/fckeditor/editor/dialog/fck_source.html	                        (rev 0)
+++ announcement/trunk/src/main/webapp/fckeditor/editor/dialog/fck_source.html	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,68 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" >
+<!--
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2008 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * Source editor dialog window.
+-->
+<html>
+	<head>
+		<title>Source</title>
+		<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+		<meta name="robots" content="noindex, nofollow">
+		<script src="common/fck_dialog_common.js" type="text/javascript"></script>
+		<script language="javascript">
+
+var oEditor		= window.parent.InnerDialogLoaded() ;
+var FCK			= oEditor.FCK ;
+var FCKConfig	= oEditor.FCKConfig ;
+var FCKTools	= oEditor.FCKTools ;
+
+document.write( FCKTools.GetStyleHtml( GetCommonDialogCss() ) ) ;
+
+window.onload = function()
+{
+	// EnableXHTML and EnableSourceXHTML has been deprecated
+//	document.getElementById('txtSource').value = ( FCKConfig.EnableXHTML && FCKConfig.EnableSourceXHTML ? FCK.GetXHTML( FCKConfig.FormatSource ) : FCK.GetHTML( FCKConfig.FormatSource ) ) ;
+	document.getElementById('txtSource').value = FCK.GetXHTML( FCKConfig.FormatSource ) ;
+
+	// Activate the "OK" button.
+	window.parent.SetOkButton( true ) ;
+}
+
+//#### The OK button was hit.
+function Ok()
+{
+	if ( oEditor.FCKBrowserInfo.IsIE )
+		oEditor.FCKUndo.SaveUndoStep() ;
+
+	FCK.SetData( document.getElementById('txtSource').value, false ) ;
+
+	return true ;
+}
+		</script>
+	</head>
+	<body scroll="no" style="OVERFLOW: hidden">
+		<table width="100%" height="100%">
+			<tr>
+				<td height="100%"><textarea id="txtSource" dir="ltr" style="PADDING-RIGHT: 5px; PADDING-LEFT: 5px; FONT-SIZE: 14px; PADDING-BOTTOM: 5px; WIDTH: 100%; PADDING-TOP: 5px; FONT-FAMILY: Monospace; HEIGHT: 100%">Loading. Please wait...</textarea></td>
+			</tr>
+		</table>
+	</body>
+</html>


Property changes on: announcement/trunk/src/main/webapp/fckeditor/editor/dialog/fck_source.html
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/webapp/fckeditor/editor/dialog/fck_specialchar.html
===================================================================
--- announcement/trunk/src/main/webapp/fckeditor/editor/dialog/fck_specialchar.html	                        (rev 0)
+++ announcement/trunk/src/main/webapp/fckeditor/editor/dialog/fck_specialchar.html	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,121 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" >
+<!--
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2008 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * Special Chars Selector dialog window.
+-->
+<html>
+	<head>
+		<meta name="robots" content="noindex, nofollow">
+		<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+		<style type="text/css">
+				.Hand
+				{
+					cursor: pointer ;
+					cursor: hand ;
+				}
+				.Sample { font-size: 24px; }
+		</style>
+		<script src="common/fck_dialog_common.js" type="text/javascript"></script>
+		<script type="text/javascript">
+
+var oEditor = window.parent.InnerDialogLoaded() ;
+
+var oSample ;
+
+function insertChar(charValue)
+{
+	oEditor.FCKUndo.SaveUndoStep() ;
+	oEditor.FCK.InsertHtml( charValue || "" ) ;
+	window.parent.Cancel() ;
+}
+
+function over(td)
+{
+	if ( ! oSample )
+		return ;
+	oSample.innerHTML = td.innerHTML ;
+	td.className = 'LightBackground SpecialCharsOver Hand' ;
+}
+
+function out(td)
+{
+	if ( ! oSample )
+		return ;
+	oSample.innerHTML = "&nbsp;" ;
+	td.className = 'DarkBackground SpecialCharsOut Hand' ;
+}
+
+function setDefaults()
+{
+	// Gets the sample placeholder.
+	oSample = document.getElementById("SampleTD") ;
+
+	// First of all, translates the dialog box texts.
+	oEditor.FCKLanguageManager.TranslatePage(document) ;
+
+	window.parent.SetAutoSize( true ) ;
+}
+
+		</script>
+	</head>
+	<body onload="setDefaults()" style="overflow: hidden">
+		<table cellpadding="0" cellspacing="0" width="100%" height="100%">
+			<tr>
+				<td width="100%">
+					<table cellpadding="1" cellspacing="1" align="center" border="0" width="100%" height="100%">
+						<script type="text/javascript">
+var aChars = ["!","&quot;","#","$","%","&amp;","\\'","(",")","*","+","-",".","/","0","1","2","3","4","5","6","7","8","9",":",";","&lt;","=","&gt;","?","@","A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z","[","]","^","_","`","a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z","{","|","}","~","&euro;","&lsquo;","&rsquo;","&rsquo;","&ldquo;","&rdquo;","&ndash;","&mdash;","&iexcl;","&cent;","&pound;","&curren;","&yen;","&brvbar;","&sect;","&uml;","&copy;","&ordf;","&laquo;","&not;","&reg;","&macr;","&deg;","&plusmn;","&sup2;","&sup3;","&acute;","&micro;","&para;","&middot;","&cedil;","&sup1;","&ordm;","&raquo;","&frac14;","&frac12;","&frac34;","&iquest;","&Agrave;","&Aacute;","&Acirc;","&Atilde;","&Auml;","&Aring;","&AElig;","&Ccedil;","&Egrave;","&Eacute;","&Ecirc;","&Euml;","&Igrave;","&Iacute;","&Icirc;","&Iuml;","&ETH;","&Ntilde;","&Ograve;","&Oacute;","&Ocirc;","&Otilde;","&Ouml;","&times;","&Oslash;","&Ugrave;","&Uacute;","&Ucirc;","&Uuml;","&Yacute;","&THORN;","&szlig;","&agrave;","&aacute;","&acirc;","&atilde;","&auml;","&aring;","&aelig;","&ccedil;","&egrave;","&eacute;","&ecirc;","&euml;","&igrave;","&iacute;","&icirc;","&iuml;","&eth;","&ntilde;","&ograve;","&oacute;","&ocirc;","&otilde;","&ouml;","&divide;","&oslash;","&ugrave;","&uacute;","&ucirc;","&uuml;","&uuml;","&yacute;","&thorn;","&yuml;","&OElig;","&oelig;","&#372;","&#374","&#373","&#375;","&sbquo;","&#8219;","&bdquo;","&hellip;","&trade;","&#9658;","&bull;","&rarr;","&rArr;","&hArr;","&diams;","&asymp;"] ;
+
+var cols = 20 ;
+
+var i = 0 ;
+while (i < aChars.length)
+{
+	document.write("<TR>") ;
+	for(var j = 0 ; j < cols ; j++)
+	{
+		if (aChars[i])
+		{
+			document.write('<TD width="1%" class="DarkBackground SpecialCharsOut Hand" align="center" onclick="insertChar(\'' + aChars[i].replace(/&/g, "&amp;") + '\')" onmouseover="over(this)" onmouseout="out(this)">') ;
+			document.write(aChars[i]) ;
+		}
+		else
+			document.write("<TD class='DarkBackground SpecialCharsOut'>&nbsp;") ;
+		document.write("<\/TD>") ;
+		i++ ;
+	}
+	document.write("<\/TR>") ;
+}
+						</script>
+					</table>
+				</td>
+				<td nowrap>&nbsp;&nbsp;&nbsp;&nbsp;</td>
+				<td valign="top">
+					<table width="40" cellpadding="0" cellspacing="0" border="0">
+						<tr>
+							<td id="SampleTD" width="40" height="40" align="center" class="DarkBackground SpecialCharsOut Sample">&nbsp;</td>
+						</tr>
+					</table>
+				</td>
+			</tr>
+		</table>
+	</body>
+</html>


Property changes on: announcement/trunk/src/main/webapp/fckeditor/editor/dialog/fck_specialchar.html
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/webapp/fckeditor/editor/dialog/fck_spellerpages/spellerpages/blank.html
===================================================================


Property changes on: announcement/trunk/src/main/webapp/fckeditor/editor/dialog/fck_spellerpages/spellerpages/blank.html
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/webapp/fckeditor/editor/dialog/fck_spellerpages/spellerpages/controlWindow.js
===================================================================
--- announcement/trunk/src/main/webapp/fckeditor/editor/dialog/fck_spellerpages/spellerpages/controlWindow.js	                        (rev 0)
+++ announcement/trunk/src/main/webapp/fckeditor/editor/dialog/fck_spellerpages/spellerpages/controlWindow.js	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,87 @@
+////////////////////////////////////////////////////
+// controlWindow object
+////////////////////////////////////////////////////
+function controlWindow( controlForm ) {
+	// private properties
+	this._form = controlForm;
+
+	// public properties
+	this.windowType = "controlWindow";
+//	this.noSuggestionSelection = "- No suggestions -";	// by FredCK
+	this.noSuggestionSelection = FCKLang.DlgSpellNoSuggestions ;
+	// set up the properties for elements of the given control form
+	this.suggestionList  = this._form.sugg;
+	this.evaluatedText   = this._form.misword;
+	this.replacementText = this._form.txtsugg;
+	this.undoButton      = this._form.btnUndo;
+
+	// public methods
+	this.addSuggestion = addSuggestion;
+	this.clearSuggestions = clearSuggestions;
+	this.selectDefaultSuggestion = selectDefaultSuggestion;
+	this.resetForm = resetForm;
+	this.setSuggestedText = setSuggestedText;
+	this.enableUndo = enableUndo;
+	this.disableUndo = disableUndo;
+}
+
+function resetForm() {
+	if( this._form ) {
+		this._form.reset();
+	}
+}
+
+function setSuggestedText() {
+	var slct = this.suggestionList;
+	var txt = this.replacementText;
+	var str = "";
+	if( (slct.options[0].text) && slct.options[0].text != this.noSuggestionSelection ) {
+		str = slct.options[slct.selectedIndex].text;
+	}
+	txt.value = str;
+}
+
+function selectDefaultSuggestion() {
+	var slct = this.suggestionList;
+	var txt = this.replacementText;
+	if( slct.options.length == 0 ) {
+		this.addSuggestion( this.noSuggestionSelection );
+	} else {
+		slct.options[0].selected = true;
+	}
+	this.setSuggestedText();
+}
+
+function addSuggestion( sugg_text ) {
+	var slct = this.suggestionList;
+	if( sugg_text ) {
+		var i = slct.options.length;
+		var newOption = new Option( sugg_text, 'sugg_text'+i );
+		slct.options[i] = newOption;
+	 }
+}
+
+function clearSuggestions() {
+	var slct = this.suggestionList;
+	for( var j = slct.length - 1; j > -1; j-- ) {
+		if( slct.options[j] ) {
+			slct.options[j] = null;
+		}
+	}
+}
+
+function enableUndo() {
+	if( this.undoButton ) {
+		if( this.undoButton.disabled == true ) {
+			this.undoButton.disabled = false;
+		}
+	}
+}
+
+function disableUndo() {
+	if( this.undoButton ) {
+		if( this.undoButton.disabled == false ) {
+			this.undoButton.disabled = true;
+		}
+	}
+}


Property changes on: announcement/trunk/src/main/webapp/fckeditor/editor/dialog/fck_spellerpages/spellerpages/controlWindow.js
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/webapp/fckeditor/editor/dialog/fck_spellerpages/spellerpages/controls.html
===================================================================
--- announcement/trunk/src/main/webapp/fckeditor/editor/dialog/fck_spellerpages/spellerpages/controls.html	                        (rev 0)
+++ announcement/trunk/src/main/webapp/fckeditor/editor/dialog/fck_spellerpages/spellerpages/controls.html	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,153 @@
+<html>
+	<head>
+		<link rel="stylesheet" type="text/css" href="spellerStyle.css" />
+		<script type="text/javascript" src="controlWindow.js"></script>
+		<script type="text/javascript">
+var spellerObject;
+var controlWindowObj;
+
+if( parent.opener ) {
+	spellerObject = parent.opener.speller;
+}
+
+function ignore_word() {
+	if( spellerObject ) {
+		spellerObject.ignoreWord();
+	}
+}
+
+function ignore_all() {
+	if( spellerObject ) {
+		spellerObject.ignoreAll();
+	}
+}
+
+function replace_word() {
+	if( spellerObject ) {
+		spellerObject.replaceWord();
+	}
+}
+
+function replace_all() {
+	if( spellerObject ) {
+		spellerObject.replaceAll();
+	}
+}
+
+function end_spell() {
+	if( spellerObject ) {
+		spellerObject.terminateSpell();
+	}
+}
+
+function undo() {
+	if( spellerObject ) {
+		spellerObject.undo();
+	}
+}
+
+function suggText() {
+	if( controlWindowObj ) {
+		controlWindowObj.setSuggestedText();
+	}
+}
+
+var FCKLang = window.parent.parent.FCKLang ;	// by FredCK
+
+function init_spell() {
+	// By FredCK (fckLang attributes have been added to the HTML source of this page)
+	window.parent.parent.OnSpellerControlsLoad( this ) ;
+
+	var controlForm = document.spellcheck;
+
+	// create a new controlWindow object
+ 	controlWindowObj = new controlWindow( controlForm );
+
+	// call the init_spell() function in the parent frameset
+	if( parent.frames.length ) {
+		parent.init_spell( controlWindowObj );
+	} else {
+		alert( 'This page was loaded outside of a frameset. It might not display properly' );
+	}
+}
+
+</script>
+	</head>
+	<body class="controlWindowBody" onLoad="init_spell();" style="OVERFLOW: hidden" scroll="no">	<!-- by FredCK -->
+		<form name="spellcheck">
+			<table border="0" cellpadding="0" cellspacing="0" border="0" align="center">
+				<tr>
+					<td colspan="3" class="normalLabel"><span fckLang="DlgSpellNotInDic">Not in dictionary:</span></td>
+				</tr>
+				<tr>
+					<td colspan="3"><input class="readonlyInput" type="text" name="misword" readonly /></td>
+				</tr>
+				<tr>
+					<td colspan="3" height="5"></td>
+				</tr>
+				<tr>
+					<td class="normalLabel"><span fckLang="DlgSpellChangeTo">Change to:</span></td>
+				</tr>
+				<tr valign="top">
+					<td>
+						<table border="0" cellpadding="0" cellspacing="0" border="0">
+							<tr>
+								<td class="normalLabel">
+									<input class="textDefault" type="text" name="txtsugg" />
+								</td>
+							</tr>
+							<tr>
+								<td>
+									<select class="suggSlct" name="sugg" size="7" onChange="suggText();" onDblClick="replace_word();">
+										<option></option>
+									</select>
+								</td>
+							</tr>
+						</table>
+					</td>
+					<td>&nbsp;&nbsp;</td>
+					<td>
+						<table border="0" cellpadding="0" cellspacing="0" border="0">
+							<tr>
+								<td>
+									<input class="buttonDefault" type="button" fckLang="DlgSpellBtnIgnore" value="Ignore" onClick="ignore_word();">
+								</td>
+								<td>&nbsp;&nbsp;</td>
+								<td>
+									<input class="buttonDefault" type="button" fckLang="DlgSpellBtnIgnoreAll" value="Ignore All" onClick="ignore_all();">
+								</td>
+							</tr>
+							<tr>
+								<td colspan="3" height="5"></td>
+							</tr>
+							<tr>
+								<td>
+									<input class="buttonDefault" type="button" fckLang="DlgSpellBtnReplace" value="Replace" onClick="replace_word();">
+								</td>
+								<td>&nbsp;&nbsp;</td>
+								<td>
+									<input class="buttonDefault" type="button" fckLang="DlgSpellBtnReplaceAll" value="Replace All" onClick="replace_all();">
+								</td>
+							</tr>
+							<tr>
+								<td colspan="3" height="5"></td>
+							</tr>
+							<tr>
+								<td>
+									<input class="buttonDefault" type="button" name="btnUndo" fckLang="DlgSpellBtnUndo" value="Undo" onClick="undo();"
+										disabled>
+								</td>
+								<td>&nbsp;&nbsp;</td>
+								<td>
+									<!-- by FredCK
+									<input class="buttonDefault" type="button" value="Close" onClick="end_spell();">
+									-->
+								</td>
+							</tr>
+						</table>
+					</td>
+				</tr>
+			</table>
+		</form>
+	</body>
+</html>


Property changes on: announcement/trunk/src/main/webapp/fckeditor/editor/dialog/fck_spellerpages/spellerpages/controls.html
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/webapp/fckeditor/editor/dialog/fck_spellerpages/spellerpages/server-scripts/spellchecker.cfm
===================================================================
--- announcement/trunk/src/main/webapp/fckeditor/editor/dialog/fck_spellerpages/spellerpages/server-scripts/spellchecker.cfm	                        (rev 0)
+++ announcement/trunk/src/main/webapp/fckeditor/editor/dialog/fck_spellerpages/spellerpages/server-scripts/spellchecker.cfm	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,148 @@
+<cfsetting enablecfoutputonly="true">
+<!---
+This code uses a CF User Defined Function and should work in CF version 5.0
+and up without alteration.
+
+Also if you are hosting your site at an ISP, you will have to check with them
+to see if the use of <CFEXECUTE> is allowed. In most cases ISP will not allow
+the use of that tag for security reasons. Clients would be able to access each
+others files in certain cases.
+--->
+
+<!--- The following variables values must reflect your installation. --->
+<cfset aspell_dir	  = "C:\Program Files\Aspell\bin">
+<cfset lang         = "en_US">
+<cfset aspell_opts  = "-a --lang=#lang# --encoding=utf-8 -H --rem-sgml-check=alt">
+<cfset tempfile_in  = GetTempFile(GetTempDirectory(), "spell_")>
+<cfset tempfile_out = GetTempFile(GetTempDirectory(), "spell_")>
+<cfset spellercss   = "../spellerStyle.css">
+<cfset word_win_src = "../wordWindow.js">
+
+<cfset form.checktext = form["textinputs[]"]>
+
+<!--- make no difference between URL and FORM scopes --->
+<cfparam name="url.checktext"  default="">
+<cfparam name="form.checktext" default="#url.checktext#">
+
+<!--- Takes care of those pesky smart quotes from MS apps, replaces them with regular quotes --->
+<cfset submitted_text = ReplaceList(form.checktext,"%u201C,%u201D","%22,%22")>
+
+<!--- submitted_text now is ready for processing --->
+
+<!--- use carat on each line to escape possible aspell commands --->
+<cfset text = "">
+<cfset CRLF = Chr(13) & Chr(10)>
+
+<cfloop list="#submitted_text#" index="field" delimiters=",">
+	<cfset text = text & "%"  & CRLF
+                      & "^A" & CRLF
+                      & "!"  & CRLF>
+	<!--- Strip all tags for the text. (by FredCK - #339 / #681) --->
+	<cfset field = REReplace(URLDecode(field), "<[^>]+>", " ", "all")>
+	<cfloop list="#field#" index="line" delimiters="#CRLF#">
+		<cfset text = ListAppend(text, "^" & Trim(JSStringFormat(line)), CRLF)>
+	</cfloop>
+</cfloop>
+
+<!--- create temp file from the submitted text, this will be passed to aspell to be check for misspelled words --->
+<cffile action="write" file="#tempfile_in#" output="#text#" charset="utf-8">
+
+<!--- execute aspell in an UTF-8 console and redirect output to a file. UTF-8 encoding is lost if done differently --->
+<cfexecute name="cmd.exe" arguments='/c type "#tempfile_in#" | "#aspell_dir#\aspell.exe" #aspell_opts# > "#tempfile_out#"' timeout="100"/>
+
+<!--- read output file for further processing --->
+<cffile action="read" file="#tempfile_out#" variable="food" charset="utf-8">
+
+<!--- remove temp files --->
+<cffile action="delete" file="#tempfile_in#">
+<cffile action="delete" file="#tempfile_out#">
+
+<cfset texts = StructNew()>
+<cfset texts.textinputs = "">
+<cfset texts.words      = "">
+<cfset texts.abort      = "">
+
+<!--- Generate Text Inputs --->
+<cfset i = 0>
+<cfloop list="#submitted_text#" index="textinput">
+  <cfset texts.textinputs = ListAppend(texts.textinputs, 'textinputs[#i#] = decodeURIComponent("#textinput#");', CRLF)>
+  <cfset i = i + 1>
+</cfloop>
+
+<!--- Generate Words Lists --->
+<cfset word_cnt  = 0>
+<cfset input_cnt = -1>
+<cfloop list="#food#" index="aspell_line" delimiters="#CRLF#">
+    <cfset leftChar = Left(aspell_line, 1)>
+	<cfif leftChar eq "*">
+			<cfset input_cnt   = input_cnt + 1>
+			<cfset word_cnt    = 0>
+			<cfset texts.words = ListAppend(texts.words, "words[#input_cnt#] = [];", CRLF)>
+			<cfset texts.words = ListAppend(texts.words, "suggs[#input_cnt#] = [];", CRLF)>
+    <cfelse>
+        <cfif leftChar eq "&" or leftChar eq "##">
+			<!--- word that misspelled --->
+			<cfset bad_word    = Trim(ListGetAt(aspell_line, 2, " "))>
+			<cfset bad_word    = Replace(bad_word, "'", "\'", "ALL")>
+			<!--- sugestions --->
+			<cfset sug_list    = Trim(ListRest(aspell_line, ":"))>
+			<cfset sug_list    = ListQualify(Replace(sug_list, "'", "\'", "ALL"), "'")>
+			<!--- javascript --->
+			<cfset texts.words = ListAppend(texts.words, "words[#input_cnt#][#word_cnt#] = '#bad_word#';", CRLF)>
+			<cfset texts.words = ListAppend(texts.words, "suggs[#input_cnt#][#word_cnt#] = [#sug_list#];", CRLF)>
+			<cfset word_cnt    = word_cnt + 1>
+		</cfif>
+     </cfif>
+</cfloop>
+
+<cfif texts.words eq "">
+  <cfset texts.abort = "alert('Spell check complete.\n\nNo misspellings found.'); top.window.close();">
+</cfif>
+
+<cfcontent type="text/html; charset=utf-8">
+
+<cfoutput><html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+<link rel="stylesheet" type="text/css" href="#spellercss#" />
+<script language="javascript" src="#word_win_src#"></script>
+<script language="javascript">
+var suggs      = new Array();
+var words      = new Array();
+var textinputs = new Array();
+var error;
+
+#texts.textinputs##CRLF#
+#texts.words#
+#texts.abort#
+
+var wordWindowObj = new wordWindow();
+wordWindowObj.originalSpellings = words;
+wordWindowObj.suggestions = suggs;
+wordWindowObj.textInputs = textinputs;
+
+function init_spell() {
+	// check if any error occured during server-side processing
+	if( error ) {
+		alert( error );
+	} else {
+		// call the init_spell() function in the parent frameset
+		if (parent.frames.length) {
+			parent.init_spell( wordWindowObj );
+		} else {
+			alert('This page was loaded outside of a frameset. It might not display properly');
+		}
+	}
+}
+</script>
+
+</head>
+<body onLoad="init_spell();">
+
+<script type="text/javascript">
+wordWindowObj.writeBody();
+</script>
+
+</body>
+</html></cfoutput>
+<cfsetting enablecfoutputonly="false">

Added: announcement/trunk/src/main/webapp/fckeditor/editor/dialog/fck_spellerpages/spellerpages/server-scripts/spellchecker.php
===================================================================
--- announcement/trunk/src/main/webapp/fckeditor/editor/dialog/fck_spellerpages/spellerpages/server-scripts/spellchecker.php	                        (rev 0)
+++ announcement/trunk/src/main/webapp/fckeditor/editor/dialog/fck_spellerpages/spellerpages/server-scripts/spellchecker.php	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,199 @@
+<?php
+header('Content-type: text/html; charset=utf-8');
+
+// The following variables values must reflect your installation needs.
+
+$aspell_prog	= '"C:\Program Files\Aspell\bin\aspell.exe"';	// by FredCK (for Windows)
+//$aspell_prog	= 'aspell';										// by FredCK (for Linux)
+
+$lang			= 'en_US';
+$aspell_opts	= "-a --lang=$lang --encoding=utf-8 -H --rem-sgml-check=alt";		// by FredCK
+
+$tempfiledir	= "./";
+
+$spellercss		= '../spellerStyle.css';						// by FredCK
+$word_win_src	= '../wordWindow.js';							// by FredCK
+
+$textinputs		= $_POST['textinputs']; # array
+$input_separator = "A";
+
+# set the JavaScript variable to the submitted text.
+# textinputs is an array, each element corresponding to the (url-encoded)
+# value of the text control submitted for spell-checking
+function print_textinputs_var() {
+	global $textinputs;
+	foreach( $textinputs as $key=>$val ) {
+		# $val = str_replace( "'", "%27", $val );
+		echo "textinputs[$key] = decodeURIComponent(\"" . $val . "\");\n";
+	}
+}
+
+# make declarations for the text input index
+function print_textindex_decl( $text_input_idx ) {
+	echo "words[$text_input_idx] = [];\n";
+	echo "suggs[$text_input_idx] = [];\n";
+}
+
+# set an element of the JavaScript 'words' array to a misspelled word
+function print_words_elem( $word, $index, $text_input_idx ) {
+	echo "words[$text_input_idx][$index] = '" . escape_quote( $word ) . "';\n";
+}
+
+
+# set an element of the JavaScript 'suggs' array to a list of suggestions
+function print_suggs_elem( $suggs, $index, $text_input_idx ) {
+	echo "suggs[$text_input_idx][$index] = [";
+	foreach( $suggs as $key=>$val ) {
+		if( $val ) {
+			echo "'" . escape_quote( $val ) . "'";
+			if ( $key+1 < count( $suggs )) {
+				echo ", ";
+			}
+		}
+	}
+	echo "];\n";
+}
+
+# escape single quote
+function escape_quote( $str ) {
+	return preg_replace ( "/'/", "\\'", $str );
+}
+
+
+# handle a server-side error.
+function error_handler( $err ) {
+	echo "error = '" . preg_replace( "/['\\\\]/", "\\\\$0", $err ) . "';\n";
+}
+
+## get the list of misspelled words. Put the results in the javascript words array
+## for each misspelled word, get suggestions and put in the javascript suggs array
+function print_checker_results() {
+
+	global $aspell_prog;
+	global $aspell_opts;
+	global $tempfiledir;
+	global $textinputs;
+	global $input_separator;
+	$aspell_err = "";
+	# create temp file
+	$tempfile = tempnam( $tempfiledir, 'aspell_data_' );
+
+	# open temp file, add the submitted text.
+	if( $fh = fopen( $tempfile, 'w' )) {
+		for( $i = 0; $i < count( $textinputs ); $i++ ) {
+			$text = urldecode( $textinputs[$i] );
+
+			// Strip all tags for the text. (by FredCK - #339 / #681)
+			$text = preg_replace( "/<[^>]+>/", " ", $text ) ;
+
+			$lines = explode( "\n", $text );
+			fwrite ( $fh, "%\n" ); # exit terse mode
+			fwrite ( $fh, "^$input_separator\n" );
+			fwrite ( $fh, "!\n" ); # enter terse mode
+			foreach( $lines as $key=>$value ) {
+				# use carat on each line to escape possible aspell commands
+				fwrite( $fh, "^$value\n" );
+			}
+		}
+		fclose( $fh );
+
+		# exec aspell command - redirect STDERR to STDOUT
+		$cmd = "$aspell_prog $aspell_opts < $tempfile 2>&1";
+		if( $aspellret = shell_exec( $cmd )) {
+			$linesout = explode( "\n", $aspellret );
+			$index = 0;
+			$text_input_index = -1;
+			# parse each line of aspell return
+			foreach( $linesout as $key=>$val ) {
+				$chardesc = substr( $val, 0, 1 );
+				# if '&', then not in dictionary but has suggestions
+				# if '#', then not in dictionary and no suggestions
+				# if '*', then it is a delimiter between text inputs
+				# if '@' then version info
+				if( $chardesc == '&' || $chardesc == '#' ) {
+					$line = explode( " ", $val, 5 );
+					print_words_elem( $line[1], $index, $text_input_index );
+					if( isset( $line[4] )) {
+						$suggs = explode( ", ", $line[4] );
+					} else {
+						$suggs = array();
+					}
+					print_suggs_elem( $suggs, $index, $text_input_index );
+					$index++;
+				} elseif( $chardesc == '*' ) {
+					$text_input_index++;
+					print_textindex_decl( $text_input_index );
+					$index = 0;
+				} elseif( $chardesc != '@' && $chardesc != "" ) {
+					# assume this is error output
+					$aspell_err .= $val;
+				}
+			}
+			if( $aspell_err ) {
+				$aspell_err = "Error executing `$cmd`\\n$aspell_err";
+				error_handler( $aspell_err );
+			}
+		} else {
+			error_handler( "System error: Aspell program execution failed (`$cmd`)" );
+		}
+	} else {
+		error_handler( "System error: Could not open file '$tempfile' for writing" );
+	}
+
+	# close temp file, delete file
+	unlink( $tempfile );
+}
+
+
+?>
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+<link rel="stylesheet" type="text/css" href="<?php echo $spellercss ?>" />
+<script language="javascript" src="<?php echo $word_win_src ?>"></script>
+<script language="javascript">
+var suggs = new Array();
+var words = new Array();
+var textinputs = new Array();
+var error;
+<?php
+
+print_textinputs_var();
+
+print_checker_results();
+
+?>
+
+var wordWindowObj = new wordWindow();
+wordWindowObj.originalSpellings = words;
+wordWindowObj.suggestions = suggs;
+wordWindowObj.textInputs = textinputs;
+
+function init_spell() {
+	// check if any error occured during server-side processing
+	if( error ) {
+		alert( error );
+	} else {
+		// call the init_spell() function in the parent frameset
+		if (parent.frames.length) {
+			parent.init_spell( wordWindowObj );
+		} else {
+			alert('This page was loaded outside of a frameset. It might not display properly');
+		}
+	}
+}
+
+
+
+</script>
+
+</head>
+<!-- <body onLoad="init_spell();">		by FredCK -->
+<body onLoad="init_spell();" bgcolor="#ffffff">
+
+<script type="text/javascript">
+wordWindowObj.writeBody();
+</script>
+
+</body>
+</html>

Added: announcement/trunk/src/main/webapp/fckeditor/editor/dialog/fck_spellerpages/spellerpages/server-scripts/spellchecker.pl
===================================================================
--- announcement/trunk/src/main/webapp/fckeditor/editor/dialog/fck_spellerpages/spellerpages/server-scripts/spellchecker.pl	                        (rev 0)
+++ announcement/trunk/src/main/webapp/fckeditor/editor/dialog/fck_spellerpages/spellerpages/server-scripts/spellchecker.pl	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,181 @@
+#!/usr/bin/perl
+
+use CGI qw/ :standard /;
+use File::Temp qw/ tempfile tempdir /;
+
+# my $spellercss = '/speller/spellerStyle.css';					# by FredCK
+my $spellercss = '../spellerStyle.css';							# by FredCK
+# my $wordWindowSrc = '/speller/wordWindow.js';					# by FredCK
+my $wordWindowSrc = '../wordWindow.js';							# by FredCK
+my @textinputs = param( 'textinputs[]' ); # array
+# my $aspell_cmd = 'aspell';									# by FredCK (for Linux)
+my $aspell_cmd = '"C:\Program Files\Aspell\bin\aspell.exe"';	# by FredCK (for Windows)
+my $lang = 'en_US';
+# my $aspell_opts = "-a --lang=$lang --encoding=utf-8";			# by FredCK
+my $aspell_opts = "-a --lang=$lang --encoding=utf-8 -H --rem-sgml-check=alt";		# by FredCK
+my $input_separator = "A";
+
+# set the 'wordtext' JavaScript variable to the submitted text.
+sub printTextVar {
+	for( my $i = 0; $i <= $#textinputs; $i++ ) {
+	        print "textinputs[$i] = decodeURIComponent('" . escapeQuote( $textinputs[$i] ) . "')\n";
+	}
+}
+
+sub printTextIdxDecl {
+	my $idx = shift;
+	print "words[$idx] = [];\n";
+	print "suggs[$idx] = [];\n";
+}
+
+sub printWordsElem {
+	my( $textIdx, $wordIdx, $word ) = @_;
+	print "words[$textIdx][$wordIdx] = '" . escapeQuote( $word ) . "';\n";
+}
+
+sub printSuggsElem {
+	my( $textIdx, $wordIdx, @suggs ) = @_;
+	print "suggs[$textIdx][$wordIdx] = [";
+	for my $i ( 0..$#suggs ) {
+		print "'" . escapeQuote( $suggs[$i] ) . "'";
+		if( $i < $#suggs ) {
+			print ", ";
+		}
+	}
+	print "];\n";
+}
+
+sub printCheckerResults {
+	my $textInputIdx = -1;
+	my $wordIdx = 0;
+	my $unhandledText;
+	# create temp file
+	my $dir = tempdir( CLEANUP => 1 );
+	my( $fh, $tmpfilename ) = tempfile( DIR => $dir );
+
+	# temp file was created properly?
+
+	# open temp file, add the submitted text.
+	for( my $i = 0; $i <= $#textinputs; $i++ ) {
+		$text = url_decode( $textinputs[$i] );
+		# Strip all tags for the text. (by FredCK - #339 / #681)
+		$text =~ s/<[^>]+>/ /g;
+		@lines = split( /\n/, $text );
+		print $fh "\%\n"; # exit terse mode
+		print $fh "^$input_separator\n";
+		print $fh "!\n";  # enter terse mode
+		for my $line ( @lines ) {
+			# use carat on each line to escape possible aspell commands
+			print $fh "^$line\n";
+		}
+
+	}
+	# exec aspell command
+	my $cmd = "$aspell_cmd $aspell_opts < $tmpfilename 2>&1";
+	open ASPELL, "$cmd |" or handleError( "Could not execute `$cmd`\\n$!" ) and return;
+	# parse each line of aspell return
+	for my $ret ( <ASPELL> ) {
+		chomp( $ret );
+		# if '&', then not in dictionary but has suggestions
+		# if '#', then not in dictionary and no suggestions
+		# if '*', then it is a delimiter between text inputs
+		if( $ret =~ /^\*/ ) {
+			$textInputIdx++;
+			printTextIdxDecl( $textInputIdx );
+			$wordIdx = 0;
+
+		} elsif( $ret =~ /^(&|#)/ ) {
+			my @tokens = split( " ", $ret, 5 );
+			printWordsElem( $textInputIdx, $wordIdx, $tokens[1] );
+			my @suggs = ();
+			if( $tokens[4] ) {
+				@suggs = split( ", ", $tokens[4] );
+			}
+			printSuggsElem( $textInputIdx, $wordIdx, @suggs );
+			$wordIdx++;
+		} else {
+			$unhandledText .= $ret;
+		}
+	}
+	close ASPELL or handleError( "Error executing `$cmd`\\n$unhandledText" ) and return;
+}
+
+sub escapeQuote {
+	my $str = shift;
+	$str =~ s/'/\\'/g;
+	return $str;
+}
+
+sub handleError {
+	my $err = shift;
+	print "error = '" . escapeQuote( $err ) . "';\n";
+}
+
+sub url_decode {
+	local $_ = @_ ? shift : $_;
+	defined or return;
+	# change + signs to spaces
+	tr/+/ /;
+	# change hex escapes to the proper characters
+	s/%([a-fA-F0-9]{2})/pack "H2", $1/eg;
+	return $_;
+}
+
+# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
+# Display HTML
+# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
+
+print <<EOF;
+Content-type: text/html; charset=utf-8
+
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+<link rel="stylesheet" type="text/css" href="$spellercss"/>
+<script src="$wordWindowSrc"></script>
+<script type="text/javascript">
+var suggs = new Array();
+var words = new Array();
+var textinputs = new Array();
+var error;
+EOF
+
+printTextVar();
+
+printCheckerResults();
+
+print <<EOF;
+var wordWindowObj = new wordWindow();
+wordWindowObj.originalSpellings = words;
+wordWindowObj.suggestions = suggs;
+wordWindowObj.textInputs = textinputs;
+
+
+function init_spell() {
+	// check if any error occured during server-side processing
+	if( error ) {
+		alert( error );
+	} else {
+		// call the init_spell() function in the parent frameset
+		if (parent.frames.length) {
+			parent.init_spell( wordWindowObj );
+		} else {
+			error = "This page was loaded outside of a frameset. ";
+			error += "It might not display properly";
+			alert( error );
+		}
+	}
+}
+
+</script>
+
+</head>
+<body onLoad="init_spell();">
+
+<script type="text/javascript">
+wordWindowObj.writeBody();
+</script>
+
+</body>
+</html>
+EOF


Property changes on: announcement/trunk/src/main/webapp/fckeditor/editor/dialog/fck_spellerpages/spellerpages/server-scripts/spellchecker.pl
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/webapp/fckeditor/editor/dialog/fck_spellerpages/spellerpages/spellChecker.js
===================================================================
--- announcement/trunk/src/main/webapp/fckeditor/editor/dialog/fck_spellerpages/spellerpages/spellChecker.js	                        (rev 0)
+++ announcement/trunk/src/main/webapp/fckeditor/editor/dialog/fck_spellerpages/spellerpages/spellChecker.js	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,461 @@
+////////////////////////////////////////////////////
+// spellChecker.js
+//
+// spellChecker object
+//
+// This file is sourced on web pages that have a textarea object to evaluate
+// for spelling. It includes the implementation for the spellCheckObject.
+//
+////////////////////////////////////////////////////
+
+
+// constructor
+function spellChecker( textObject ) {
+
+	// public properties - configurable
+//	this.popUpUrl = '/speller/spellchecker.html';							// by FredCK
+	this.popUpUrl = 'fck_spellerpages/spellerpages/spellchecker.html';		// by FredCK
+	this.popUpName = 'spellchecker';
+//	this.popUpProps = "menu=no,width=440,height=350,top=70,left=120,resizable=yes,status=yes";	// by FredCK
+	this.popUpProps = null ;																	// by FredCK
+//	this.spellCheckScript = '/speller/server-scripts/spellchecker.php';		// by FredCK
+	//this.spellCheckScript = '/cgi-bin/spellchecker.pl';
+
+	// values used to keep track of what happened to a word
+	this.replWordFlag = "R";	// single replace
+	this.ignrWordFlag = "I";	// single ignore
+	this.replAllFlag = "RA";	// replace all occurances
+	this.ignrAllFlag = "IA";	// ignore all occurances
+	this.fromReplAll = "~RA";	// an occurance of a "replace all" word
+	this.fromIgnrAll = "~IA";	// an occurance of a "ignore all" word
+	// properties set at run time
+	this.wordFlags = new Array();
+	this.currentTextIndex = 0;
+	this.currentWordIndex = 0;
+	this.spellCheckerWin = null;
+	this.controlWin = null;
+	this.wordWin = null;
+	this.textArea = textObject;	// deprecated
+	this.textInputs = arguments;
+
+	// private methods
+	this._spellcheck = _spellcheck;
+	this._getSuggestions = _getSuggestions;
+	this._setAsIgnored = _setAsIgnored;
+	this._getTotalReplaced = _getTotalReplaced;
+	this._setWordText = _setWordText;
+	this._getFormInputs = _getFormInputs;
+
+	// public methods
+	this.openChecker = openChecker;
+	this.startCheck = startCheck;
+	this.checkTextBoxes = checkTextBoxes;
+	this.checkTextAreas = checkTextAreas;
+	this.spellCheckAll = spellCheckAll;
+	this.ignoreWord = ignoreWord;
+	this.ignoreAll = ignoreAll;
+	this.replaceWord = replaceWord;
+	this.replaceAll = replaceAll;
+	this.terminateSpell = terminateSpell;
+	this.undo = undo;
+
+	// set the current window's "speller" property to the instance of this class.
+	// this object can now be referenced by child windows/frames.
+	window.speller = this;
+}
+
+// call this method to check all text boxes (and only text boxes) in the HTML document
+function checkTextBoxes() {
+	this.textInputs = this._getFormInputs( "^text$" );
+	this.openChecker();
+}
+
+// call this method to check all textareas (and only textareas ) in the HTML document
+function checkTextAreas() {
+	this.textInputs = this._getFormInputs( "^textarea$" );
+	this.openChecker();
+}
+
+// call this method to check all text boxes and textareas in the HTML document
+function spellCheckAll() {
+	this.textInputs = this._getFormInputs( "^text(area)?$" );
+	this.openChecker();
+}
+
+// call this method to check text boxe(s) and/or textarea(s) that were passed in to the
+// object's constructor or to the textInputs property
+function openChecker() {
+	this.spellCheckerWin = window.open( this.popUpUrl, this.popUpName, this.popUpProps );
+	if( !this.spellCheckerWin.opener ) {
+		this.spellCheckerWin.opener = window;
+	}
+}
+
+function startCheck( wordWindowObj, controlWindowObj ) {
+
+	// set properties from args
+	this.wordWin = wordWindowObj;
+	this.controlWin = controlWindowObj;
+
+	// reset properties
+	this.wordWin.resetForm();
+	this.controlWin.resetForm();
+	this.currentTextIndex = 0;
+	this.currentWordIndex = 0;
+	// initialize the flags to an array - one element for each text input
+	this.wordFlags = new Array( this.wordWin.textInputs.length );
+	// each element will be an array that keeps track of each word in the text
+	for( var i=0; i<this.wordFlags.length; i++ ) {
+		this.wordFlags[i] = [];
+	}
+
+	// start
+	this._spellcheck();
+
+	return true;
+}
+
+function ignoreWord() {
+	var wi = this.currentWordIndex;
+	var ti = this.currentTextIndex;
+	if( !this.wordWin ) {
+		alert( 'Error: Word frame not available.' );
+		return false;
+	}
+	if( !this.wordWin.getTextVal( ti, wi )) {
+		alert( 'Error: "Not in dictionary" text is missing.' );
+		return false;
+	}
+	// set as ignored
+	if( this._setAsIgnored( ti, wi, this.ignrWordFlag )) {
+		this.currentWordIndex++;
+		this._spellcheck();
+	}
+	return true;
+}
+
+function ignoreAll() {
+	var wi = this.currentWordIndex;
+	var ti = this.currentTextIndex;
+	if( !this.wordWin ) {
+		alert( 'Error: Word frame not available.' );
+		return false;
+	}
+	// get the word that is currently being evaluated.
+	var s_word_to_repl = this.wordWin.getTextVal( ti, wi );
+	if( !s_word_to_repl ) {
+		alert( 'Error: "Not in dictionary" text is missing' );
+		return false;
+	}
+
+	// set this word as an "ignore all" word.
+	this._setAsIgnored( ti, wi, this.ignrAllFlag );
+
+	// loop through all the words after this word
+	for( var i = ti; i < this.wordWin.textInputs.length; i++ ) {
+		for( var j = 0; j < this.wordWin.totalWords( i ); j++ ) {
+			if(( i == ti && j > wi ) || i > ti ) {
+				// future word: set as "from ignore all" if
+				// 1) do not already have a flag and
+				// 2) have the same value as current word
+				if(( this.wordWin.getTextVal( i, j ) == s_word_to_repl )
+				&& ( !this.wordFlags[i][j] )) {
+					this._setAsIgnored( i, j, this.fromIgnrAll );
+				}
+			}
+		}
+	}
+
+	// finally, move on
+	this.currentWordIndex++;
+	this._spellcheck();
+	return true;
+}
+
+function replaceWord() {
+	var wi = this.currentWordIndex;
+	var ti = this.currentTextIndex;
+	if( !this.wordWin ) {
+		alert( 'Error: Word frame not available.' );
+		return false;
+	}
+	if( !this.wordWin.getTextVal( ti, wi )) {
+		alert( 'Error: "Not in dictionary" text is missing' );
+		return false;
+	}
+	if( !this.controlWin.replacementText ) {
+		return false ;
+	}
+	var txt = this.controlWin.replacementText;
+	if( txt.value ) {
+		var newspell = new String( txt.value );
+		if( this._setWordText( ti, wi, newspell, this.replWordFlag )) {
+			this.currentWordIndex++;
+			this._spellcheck();
+		}
+	}
+	return true;
+}
+
+function replaceAll() {
+	var ti = this.currentTextIndex;
+	var wi = this.currentWordIndex;
+	if( !this.wordWin ) {
+		alert( 'Error: Word frame not available.' );
+		return false;
+	}
+	var s_word_to_repl = this.wordWin.getTextVal( ti, wi );
+	if( !s_word_to_repl ) {
+		alert( 'Error: "Not in dictionary" text is missing' );
+		return false;
+	}
+	var txt = this.controlWin.replacementText;
+	if( !txt.value ) return false;
+	var newspell = new String( txt.value );
+
+	// set this word as a "replace all" word.
+	this._setWordText( ti, wi, newspell, this.replAllFlag );
+
+	// loop through all the words after this word
+	for( var i = ti; i < this.wordWin.textInputs.length; i++ ) {
+		for( var j = 0; j < this.wordWin.totalWords( i ); j++ ) {
+			if(( i == ti && j > wi ) || i > ti ) {
+				// future word: set word text to s_word_to_repl if
+				// 1) do not already have a flag and
+				// 2) have the same value as s_word_to_repl
+				if(( this.wordWin.getTextVal( i, j ) == s_word_to_repl )
+				&& ( !this.wordFlags[i][j] )) {
+					this._setWordText( i, j, newspell, this.fromReplAll );
+				}
+			}
+		}
+	}
+
+	// finally, move on
+	this.currentWordIndex++;
+	this._spellcheck();
+	return true;
+}
+
+function terminateSpell() {
+	// called when we have reached the end of the spell checking.
+	var msg = "";		// by FredCK
+	var numrepl = this._getTotalReplaced();
+	if( numrepl == 0 ) {
+		// see if there were no misspellings to begin with
+		if( !this.wordWin ) {
+			msg = "";
+		} else {
+			if( this.wordWin.totalMisspellings() ) {
+//				msg += "No words changed.";			// by FredCK
+				msg += FCKLang.DlgSpellNoChanges ;	// by FredCK
+			} else {
+//				msg += "No misspellings found.";	// by FredCK
+				msg += FCKLang.DlgSpellNoMispell ;	// by FredCK
+			}
+		}
+	} else if( numrepl == 1 ) {
+//		msg += "One word changed.";			// by FredCK
+		msg += FCKLang.DlgSpellOneChange ;	// by FredCK
+	} else {
+//		msg += numrepl + " words changed.";	// by FredCK
+		msg += FCKLang.DlgSpellManyChanges.replace( /%1/g, numrepl ) ;
+	}
+	if( msg ) {
+//		msg += "\n";	// by FredCK
+		alert( msg );
+	}
+
+	if( numrepl > 0 ) {
+		// update the text field(s) on the opener window
+		for( var i = 0; i < this.textInputs.length; i++ ) {
+			// this.textArea.value = this.wordWin.text;
+			if( this.wordWin ) {
+				if( this.wordWin.textInputs[i] ) {
+					this.textInputs[i].value = this.wordWin.textInputs[i];
+				}
+			}
+		}
+	}
+
+	// return back to the calling window
+//	this.spellCheckerWin.close();					// by FredCK
+	if ( typeof( this.OnFinished ) == 'function' )	// by FredCK
+		this.OnFinished(numrepl) ;					// by FredCK
+
+	return true;
+}
+
+function undo() {
+	// skip if this is the first word!
+	var ti = this.currentTextIndex;
+	var wi = this.currentWordIndex;
+
+	if( this.wordWin.totalPreviousWords( ti, wi ) > 0 ) {
+		this.wordWin.removeFocus( ti, wi );
+
+		// go back to the last word index that was acted upon
+		do {
+			// if the current word index is zero then reset the seed
+			if( this.currentWordIndex == 0 && this.currentTextIndex > 0 ) {
+				this.currentTextIndex--;
+				this.currentWordIndex = this.wordWin.totalWords( this.currentTextIndex )-1;
+				if( this.currentWordIndex < 0 ) this.currentWordIndex = 0;
+			} else {
+				if( this.currentWordIndex > 0 ) {
+					this.currentWordIndex--;
+				}
+			}
+		} while (
+			this.wordWin.totalWords( this.currentTextIndex ) == 0
+			|| this.wordFlags[this.currentTextIndex][this.currentWordIndex] == this.fromIgnrAll
+			|| this.wordFlags[this.currentTextIndex][this.currentWordIndex] == this.fromReplAll
+		);
+
+		var text_idx = this.currentTextIndex;
+		var idx = this.currentWordIndex;
+		var preReplSpell = this.wordWin.originalSpellings[text_idx][idx];
+
+		// if we got back to the first word then set the Undo button back to disabled
+		if( this.wordWin.totalPreviousWords( text_idx, idx ) == 0 ) {
+			this.controlWin.disableUndo();
+		}
+
+		var i, j, origSpell ;
+		// examine what happened to this current word.
+		switch( this.wordFlags[text_idx][idx] ) {
+			// replace all: go through this and all the future occurances of the word
+			// and revert them all to the original spelling and clear their flags
+			case this.replAllFlag :
+				for( i = text_idx; i < this.wordWin.textInputs.length; i++ ) {
+					for( j = 0; j < this.wordWin.totalWords( i ); j++ ) {
+						if(( i == text_idx && j >= idx ) || i > text_idx ) {
+							origSpell = this.wordWin.originalSpellings[i][j];
+							if( origSpell == preReplSpell ) {
+								this._setWordText ( i, j, origSpell, undefined );
+							}
+						}
+					}
+				}
+				break;
+
+			// ignore all: go through all the future occurances of the word
+			// and clear their flags
+			case this.ignrAllFlag :
+				for( i = text_idx; i < this.wordWin.textInputs.length; i++ ) {
+					for( j = 0; j < this.wordWin.totalWords( i ); j++ ) {
+						if(( i == text_idx && j >= idx ) || i > text_idx ) {
+							origSpell = this.wordWin.originalSpellings[i][j];
+							if( origSpell == preReplSpell ) {
+								this.wordFlags[i][j] = undefined;
+							}
+						}
+					}
+				}
+				break;
+
+			// replace: revert the word to its original spelling
+			case this.replWordFlag :
+				this._setWordText ( text_idx, idx, preReplSpell, undefined );
+				break;
+		}
+
+		// For all four cases, clear the wordFlag of this word. re-start the process
+		this.wordFlags[text_idx][idx] = undefined;
+		this._spellcheck();
+	}
+}
+
+function _spellcheck() {
+	var ww = this.wordWin;
+
+	// check if this is the last word in the current text element
+	if( this.currentWordIndex == ww.totalWords( this.currentTextIndex) ) {
+		this.currentTextIndex++;
+		this.currentWordIndex = 0;
+		// keep going if we're not yet past the last text element
+		if( this.currentTextIndex < this.wordWin.textInputs.length ) {
+			this._spellcheck();
+			return;
+		} else {
+			this.terminateSpell();
+			return;
+		}
+	}
+
+	// if this is after the first one make sure the Undo button is enabled
+	if( this.currentWordIndex > 0 ) {
+		this.controlWin.enableUndo();
+	}
+
+	// skip the current word if it has already been worked on
+	if( this.wordFlags[this.currentTextIndex][this.currentWordIndex] ) {
+		// increment the global current word index and move on.
+		this.currentWordIndex++;
+		this._spellcheck();
+	} else {
+		var evalText = ww.getTextVal( this.currentTextIndex, this.currentWordIndex );
+		if( evalText ) {
+			this.controlWin.evaluatedText.value = evalText;
+			ww.setFocus( this.currentTextIndex, this.currentWordIndex );
+			this._getSuggestions( this.currentTextIndex, this.currentWordIndex );
+		}
+	}
+}
+
+function _getSuggestions( text_num, word_num ) {
+	this.controlWin.clearSuggestions();
+	// add suggestion in list for each suggested word.
+	// get the array of suggested words out of the
+	// three-dimensional array containing all suggestions.
+	var a_suggests = this.wordWin.suggestions[text_num][word_num];
+	if( a_suggests ) {
+		// got an array of suggestions.
+		for( var ii = 0; ii < a_suggests.length; ii++ ) {
+			this.controlWin.addSuggestion( a_suggests[ii] );
+		}
+	}
+	this.controlWin.selectDefaultSuggestion();
+}
+
+function _setAsIgnored( text_num, word_num, flag ) {
+	// set the UI
+	this.wordWin.removeFocus( text_num, word_num );
+	// do the bookkeeping
+	this.wordFlags[text_num][word_num] = flag;
+	return true;
+}
+
+function _getTotalReplaced() {
+	var i_replaced = 0;
+	for( var i = 0; i < this.wordFlags.length; i++ ) {
+		for( var j = 0; j < this.wordFlags[i].length; j++ ) {
+			if(( this.wordFlags[i][j] == this.replWordFlag )
+			|| ( this.wordFlags[i][j] == this.replAllFlag )
+			|| ( this.wordFlags[i][j] == this.fromReplAll )) {
+				i_replaced++;
+			}
+		}
+	}
+	return i_replaced;
+}
+
+function _setWordText( text_num, word_num, newText, flag ) {
+	// set the UI and form inputs
+	this.wordWin.setText( text_num, word_num, newText );
+	// keep track of what happened to this word:
+	this.wordFlags[text_num][word_num] = flag;
+	return true;
+}
+
+function _getFormInputs( inputPattern ) {
+	var inputs = new Array();
+	for( var i = 0; i < document.forms.length; i++ ) {
+		for( var j = 0; j < document.forms[i].elements.length; j++ ) {
+			if( document.forms[i].elements[j].type.match( inputPattern )) {
+				inputs[inputs.length] = document.forms[i].elements[j];
+			}
+		}
+	}
+	return inputs;
+}


Property changes on: announcement/trunk/src/main/webapp/fckeditor/editor/dialog/fck_spellerpages/spellerpages/spellChecker.js
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/webapp/fckeditor/editor/dialog/fck_spellerpages/spellerpages/spellchecker.html
===================================================================
--- announcement/trunk/src/main/webapp/fckeditor/editor/dialog/fck_spellerpages/spellerpages/spellchecker.html	                        (rev 0)
+++ announcement/trunk/src/main/webapp/fckeditor/editor/dialog/fck_spellerpages/spellerpages/spellchecker.html	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,71 @@
+
+<script>
+
+var wordWindow = null;
+var controlWindow = null;
+
+function init_spell( spellerWindow ) {
+
+	if( spellerWindow ) {
+		if( spellerWindow.windowType == "wordWindow" ) {
+			wordWindow = spellerWindow;
+		} else if ( spellerWindow.windowType == "controlWindow" ) {
+			controlWindow = spellerWindow;
+		}
+	}
+
+	if( controlWindow && wordWindow ) {
+		// populate the speller object and start it off!
+		var speller = opener.speller;
+		wordWindow.speller = speller;
+		speller.startCheck( wordWindow, controlWindow );
+	}
+}
+
+// encodeForPost
+function encodeForPost( str ) {
+	var s = new String( str );
+	s = encodeURIComponent( s );
+	// additionally encode single quotes to evade any PHP
+	// magic_quotes_gpc setting (it inserts escape characters and
+	// therefore skews the btye positions of misspelled words)
+	return s.replace( /\'/g, '%27' );
+}
+
+// post the text area data to the script that populates the speller
+function postWords() {
+	var bodyDoc = window.frames[0].document;
+	bodyDoc.open();
+	bodyDoc.write('<html>');
+	bodyDoc.write('<meta http-equiv="Content-Type" content="text/html; charset=utf-8">');
+	bodyDoc.write('<link rel="stylesheet" type="text/css" href="spellerStyle.css"/>');
+	if (opener) {
+		var speller = opener.speller;
+		bodyDoc.write('<body class="normalText" onLoad="document.forms[0].submit();">');
+		bodyDoc.write('<p>' + window.parent.FCKLang.DlgSpellProgress + '<\/p>');		// by FredCK
+		bodyDoc.write('<form action="'+speller.spellCheckScript+'" method="post">');
+		for( var i = 0; i < speller.textInputs.length; i++ ) {
+			bodyDoc.write('<input type="hidden" name="textinputs[]" value="'+encodeForPost(speller.textInputs[i].value)+'">');
+		}
+		bodyDoc.write('<\/form>');
+		bodyDoc.write('<\/body>');
+	} else {
+		bodyDoc.write('<body class="normalText">');
+		bodyDoc.write('<p><b>This page cannot be displayed<\/b><\/p><p>The window was not opened from another window.<\/p>');
+		bodyDoc.write('<\/body>');
+	}
+	bodyDoc.write('<\/html>');
+	bodyDoc.close();
+}
+</script>
+
+<html>
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+<head>
+<title>Speller Pages</title>
+</head>
+<frameset rows="*,201" onLoad="postWords();">
+<frame src="blank.html">
+<frame src="controls.html">
+</frameset>
+</html>


Property changes on: announcement/trunk/src/main/webapp/fckeditor/editor/dialog/fck_spellerpages/spellerpages/spellchecker.html
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/webapp/fckeditor/editor/dialog/fck_spellerpages/spellerpages/spellerStyle.css
===================================================================
--- announcement/trunk/src/main/webapp/fckeditor/editor/dialog/fck_spellerpages/spellerpages/spellerStyle.css	                        (rev 0)
+++ announcement/trunk/src/main/webapp/fckeditor/editor/dialog/fck_spellerpages/spellerpages/spellerStyle.css	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,49 @@
+.blend {
+	font-family: courier new;
+	font-size: 10pt;
+	border: 0;
+	margin-bottom:-1;
+}
+.normalLabel {
+	font-size:8pt;
+}
+.normalText {
+	font-family:arial, helvetica, sans-serif;
+	font-size:10pt;
+	color:000000;
+	background-color:FFFFFF;
+}
+.plainText {
+	font-family: courier new, courier, monospace;
+	font-size: 10pt;
+	color:000000;
+	background-color:FFFFFF;
+}
+.controlWindowBody {
+	font-family:arial, helvetica, sans-serif;
+	font-size:8pt;
+	padding: 7px ;		/* by FredCK */
+	margin: 0px ;		/* by FredCK */
+	/* color:000000;				by FredCK */
+	/* background-color:DADADA;		by FredCK */
+}
+.readonlyInput {
+	background-color:DADADA;
+	color:000000;
+	font-size:8pt;
+	width:392px;
+}
+.textDefault {
+	font-size:8pt;
+	width: 200px;
+}
+.buttonDefault {
+	width:90px;
+	height:22px;
+	font-size:8pt;
+}
+.suggSlct {
+	width:200px;
+	margin-top:2;
+	font-size:8pt;
+}


Property changes on: announcement/trunk/src/main/webapp/fckeditor/editor/dialog/fck_spellerpages/spellerpages/spellerStyle.css
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/webapp/fckeditor/editor/dialog/fck_spellerpages/spellerpages/wordWindow.js
===================================================================
--- announcement/trunk/src/main/webapp/fckeditor/editor/dialog/fck_spellerpages/spellerpages/wordWindow.js	                        (rev 0)
+++ announcement/trunk/src/main/webapp/fckeditor/editor/dialog/fck_spellerpages/spellerpages/wordWindow.js	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,272 @@
+////////////////////////////////////////////////////
+// wordWindow object
+////////////////////////////////////////////////////
+function wordWindow() {
+	// private properties
+	this._forms = [];
+
+	// private methods
+	this._getWordObject = _getWordObject;
+	//this._getSpellerObject = _getSpellerObject;
+	this._wordInputStr = _wordInputStr;
+	this._adjustIndexes = _adjustIndexes;
+	this._isWordChar = _isWordChar;
+	this._lastPos = _lastPos;
+
+	// public properties
+	this.wordChar = /[a-zA-Z]/;
+	this.windowType = "wordWindow";
+	this.originalSpellings = new Array();
+	this.suggestions = new Array();
+	this.checkWordBgColor = "pink";
+	this.normWordBgColor = "white";
+	this.text = "";
+	this.textInputs = new Array();
+	this.indexes = new Array();
+	//this.speller = this._getSpellerObject();
+
+	// public methods
+	this.resetForm = resetForm;
+	this.totalMisspellings = totalMisspellings;
+	this.totalWords = totalWords;
+	this.totalPreviousWords = totalPreviousWords;
+	//this.getTextObjectArray = getTextObjectArray;
+	this.getTextVal = getTextVal;
+	this.setFocus = setFocus;
+	this.removeFocus = removeFocus;
+	this.setText = setText;
+	//this.getTotalWords = getTotalWords;
+	this.writeBody = writeBody;
+	this.printForHtml = printForHtml;
+}
+
+function resetForm() {
+	if( this._forms ) {
+		for( var i = 0; i < this._forms.length; i++ ) {
+			this._forms[i].reset();
+		}
+	}
+	return true;
+}
+
+function totalMisspellings() {
+	var total_words = 0;
+	for( var i = 0; i < this.textInputs.length; i++ ) {
+		total_words += this.totalWords( i );
+	}
+	return total_words;
+}
+
+function totalWords( textIndex ) {
+	return this.originalSpellings[textIndex].length;
+}
+
+function totalPreviousWords( textIndex, wordIndex ) {
+	var total_words = 0;
+	for( var i = 0; i <= textIndex; i++ ) {
+		for( var j = 0; j < this.totalWords( i ); j++ ) {
+			if( i == textIndex && j == wordIndex ) {
+				break;
+			} else {
+				total_words++;
+			}
+		}
+	}
+	return total_words;
+}
+
+//function getTextObjectArray() {
+//	return this._form.elements;
+//}
+
+function getTextVal( textIndex, wordIndex ) {
+	var word = this._getWordObject( textIndex, wordIndex );
+	if( word ) {
+		return word.value;
+	}
+}
+
+function setFocus( textIndex, wordIndex ) {
+	var word = this._getWordObject( textIndex, wordIndex );
+	if( word ) {
+		if( word.type == "text" ) {
+			word.focus();
+			word.style.backgroundColor = this.checkWordBgColor;
+		}
+	}
+}
+
+function removeFocus( textIndex, wordIndex ) {
+	var word = this._getWordObject( textIndex, wordIndex );
+	if( word ) {
+		if( word.type == "text" ) {
+			word.blur();
+			word.style.backgroundColor = this.normWordBgColor;
+		}
+	}
+}
+
+function setText( textIndex, wordIndex, newText ) {
+	var word = this._getWordObject( textIndex, wordIndex );
+	var beginStr;
+	var endStr;
+	if( word ) {
+		var pos = this.indexes[textIndex][wordIndex];
+		var oldText = word.value;
+		// update the text given the index of the string
+		beginStr = this.textInputs[textIndex].substring( 0, pos );
+		endStr = this.textInputs[textIndex].substring(
+			pos + oldText.length,
+			this.textInputs[textIndex].length
+		);
+		this.textInputs[textIndex] = beginStr + newText + endStr;
+
+		// adjust the indexes on the stack given the differences in
+		// length between the new word and old word.
+		var lengthDiff = newText.length - oldText.length;
+		this._adjustIndexes( textIndex, wordIndex, lengthDiff );
+
+		word.size = newText.length;
+		word.value = newText;
+		this.removeFocus( textIndex, wordIndex );
+	}
+}
+
+
+function writeBody() {
+	var d = window.document;
+	var is_html = false;
+
+	d.open();
+
+	// iterate through each text input.
+	for( var txtid = 0; txtid < this.textInputs.length; txtid++ ) {
+		var end_idx = 0;
+		var begin_idx = 0;
+		d.writeln( '<form name="textInput'+txtid+'">' );
+		var wordtxt = this.textInputs[txtid];
+		this.indexes[txtid] = [];
+
+		if( wordtxt ) {
+			var orig = this.originalSpellings[txtid];
+			if( !orig ) break;
+
+			//!!! plain text, or HTML mode?
+			d.writeln( '<div class="plainText">' );
+			// iterate through each occurrence of a misspelled word.
+			for( var i = 0; i < orig.length; i++ ) {
+				// find the position of the current misspelled word,
+				// starting at the last misspelled word.
+				// and keep looking if it's a substring of another word
+				do {
+					begin_idx = wordtxt.indexOf( orig[i], end_idx );
+					end_idx = begin_idx + orig[i].length;
+					// word not found? messed up!
+					if( begin_idx == -1 ) break;
+					// look at the characters immediately before and after
+					// the word. If they are word characters we'll keep looking.
+					var before_char = wordtxt.charAt( begin_idx - 1 );
+					var after_char = wordtxt.charAt( end_idx );
+				} while (
+					this._isWordChar( before_char )
+					|| this._isWordChar( after_char )
+				);
+
+				// keep track of its position in the original text.
+				this.indexes[txtid][i] = begin_idx;
+
+				// write out the characters before the current misspelled word
+				for( var j = this._lastPos( txtid, i ); j < begin_idx; j++ ) {
+					// !!! html mode? make it html compatible
+					d.write( this.printForHtml( wordtxt.charAt( j )));
+				}
+
+				// write out the misspelled word.
+				d.write( this._wordInputStr( orig[i] ));
+
+				// if it's the last word, write out the rest of the text
+				if( i == orig.length-1 ){
+					d.write( printForHtml( wordtxt.substr( end_idx )));
+				}
+			}
+
+			d.writeln( '</div>' );
+
+		}
+		d.writeln( '</form>' );
+	}
+	//for ( var j = 0; j < d.forms.length; j++ ) {
+	//	alert( d.forms[j].name );
+	//	for( var k = 0; k < d.forms[j].elements.length; k++ ) {
+	//		alert( d.forms[j].elements[k].name + ": " + d.forms[j].elements[k].value );
+	//	}
+	//}
+
+	// set the _forms property
+	this._forms = d.forms;
+	d.close();
+}
+
+// return the character index in the full text after the last word we evaluated
+function _lastPos( txtid, idx ) {
+	if( idx > 0 )
+		return this.indexes[txtid][idx-1] + this.originalSpellings[txtid][idx-1].length;
+	else
+		return 0;
+}
+
+function printForHtml( n ) {
+	return n ;		// by FredCK
+/*
+	var htmlstr = n;
+	if( htmlstr.length == 1 ) {
+		// do simple case statement if it's just one character
+		switch ( n ) {
+			case "\n":
+				htmlstr = '<br/>';
+				break;
+			case "<":
+				htmlstr = '&lt;';
+				break;
+			case ">":
+				htmlstr = '&gt;';
+				break;
+		}
+		return htmlstr;
+	} else {
+		htmlstr = htmlstr.replace( /</g, '&lt' );
+		htmlstr = htmlstr.replace( />/g, '&gt' );
+		htmlstr = htmlstr.replace( /\n/g, '<br/>' );
+		return htmlstr;
+	}
+*/
+}
+
+function _isWordChar( letter ) {
+	if( letter.search( this.wordChar ) == -1 ) {
+		return false;
+	} else {
+		return true;
+	}
+}
+
+function _getWordObject( textIndex, wordIndex ) {
+	if( this._forms[textIndex] ) {
+		if( this._forms[textIndex].elements[wordIndex] ) {
+			return this._forms[textIndex].elements[wordIndex];
+		}
+	}
+	return null;
+}
+
+function _wordInputStr( word ) {
+	var str = '<input readonly ';
+	str += 'class="blend" type="text" value="' + word + '" size="' + word.length + '">';
+	return str;
+}
+
+function _adjustIndexes( textIndex, wordIndex, lengthDiff ) {
+	for( var i = wordIndex + 1; i < this.originalSpellings[textIndex].length; i++ ) {
+		this.indexes[textIndex][i] = this.indexes[textIndex][i] + lengthDiff;
+	}
+}


Property changes on: announcement/trunk/src/main/webapp/fckeditor/editor/dialog/fck_spellerpages/spellerpages/wordWindow.js
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/webapp/fckeditor/editor/dialog/fck_spellerpages.html
===================================================================
--- announcement/trunk/src/main/webapp/fckeditor/editor/dialog/fck_spellerpages.html	                        (rev 0)
+++ announcement/trunk/src/main/webapp/fckeditor/editor/dialog/fck_spellerpages.html	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,65 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" >
+<!--
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2008 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * Spell Check dialog window.
+-->
+<html>
+	<head>
+		<title>Spell Check</title>
+		<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+		<meta content="noindex, nofollow" name="robots">
+		<script src="common/fck_dialog_common.js" type="text/javascript"></script>
+		<script src="fck_spellerpages/spellerpages/spellChecker.js"></script>
+		<script type="text/javascript">
+
+var oEditor = window.parent.InnerDialogLoaded() ;
+var FCKLang = oEditor.FCKLang ;
+
+window.onload = function()
+{
+	document.getElementById('txtHtml').value = oEditor.FCK.EditorDocument.body.innerHTML ;
+
+	var oSpeller = new spellChecker( document.getElementById('txtHtml') ) ;
+	oSpeller.spellCheckScript = oEditor.FCKConfig.SpellerPagesServerScript || 'server-scripts/spellchecker.php' ;
+	oSpeller.OnFinished = oSpeller_OnFinished ;
+	oSpeller.openChecker() ;
+}
+
+function OnSpellerControlsLoad( controlsWindow )
+{
+	// Translate the dialog box texts
+	oEditor.FCKLanguageManager.TranslatePage( controlsWindow.document ) ;
+}
+
+function oSpeller_OnFinished( numberOCorrections )
+{
+	if ( numberOCorrections > 0 )
+		oEditor.FCK.SetData( document.getElementById('txtHtml').value ) ;
+	window.parent.Cancel() ;
+}
+
+		</script>
+	</head>
+	<body style="OVERFLOW: hidden" scroll="no" style="padding:0px;">
+		<input type="hidden" id="txtHtml" value="">
+		<iframe id="frmSpell" src="javascript:void(0)" name="spellchecker" width="100%" height="100%" frameborder="0"></iframe>
+	</body>
+</html>


Property changes on: announcement/trunk/src/main/webapp/fckeditor/editor/dialog/fck_spellerpages.html
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/webapp/fckeditor/editor/dialog/fck_table.html
===================================================================
--- announcement/trunk/src/main/webapp/fckeditor/editor/dialog/fck_table.html	                        (rev 0)
+++ announcement/trunk/src/main/webapp/fckeditor/editor/dialog/fck_table.html	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,298 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" >
+<!--
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2008 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * Table dialog window.
+-->
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+	<title>Table Properties</title>
+	<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+	<meta name="robots" content="noindex, nofollow" />
+	<script src="common/fck_dialog_common.js" type="text/javascript"></script>
+	<script type="text/javascript">
+
+var dialog	= window.parent ;
+var oEditor = dialog.InnerDialogLoaded() ;
+var dialogArguments = dialog.Args() ;
+
+// Gets the document DOM
+var oDOM = oEditor.FCK.EditorDocument ;
+
+// Gets the table if there is one selected.
+var table ;
+var e = dialog.Selection.GetSelectedElement() ;
+
+if ( ( !e && document.location.search.substr(1) == 'Parent' ) || ( e && e.tagName != 'TABLE' ) )
+	e = oEditor.FCKSelection.MoveToAncestorNode( 'TABLE' ) ;
+
+if ( e && e.tagName == "TABLE" )
+	table = e ;
+
+// Fired when the window loading process is finished. It sets the fields with the
+// actual values if a table is selected in the editor.
+window.onload = function()
+{
+	// First of all, translate the dialog box texts
+	oEditor.FCKLanguageManager.TranslatePage(document) ;
+
+	if (table)
+	{
+		document.getElementById('txtRows').value    = table.rows.length ;
+		document.getElementById('txtColumns').value = table.rows[0].cells.length ;
+
+		// Gets the value from the Width or the Style attribute
+		var iWidth  = (table.style.width  ? table.style.width  : table.width ) ;
+		var iHeight = (table.style.height ? table.style.height : table.height ) ;
+
+		if (iWidth.indexOf('%') >= 0)			// Percentual = %
+		{
+			iWidth = parseInt( iWidth.substr(0,iWidth.length - 1), 10 ) ;
+			document.getElementById('selWidthType').value = "percent" ;
+		}
+		else if (iWidth.indexOf('px') >= 0)		// Style Pixel = px
+		{																										  //
+			iWidth = iWidth.substr(0,iWidth.length - 2);
+			document.getElementById('selWidthType').value = "pixels" ;
+		}
+
+		if (iHeight && iHeight.indexOf('px') >= 0)		// Style Pixel = px
+			iHeight = iHeight.substr(0,iHeight.length - 2);
+
+		document.getElementById('txtWidth').value		= iWidth || '' ;
+		document.getElementById('txtHeight').value		= iHeight || '' ;
+		document.getElementById('txtBorder').value		= GetAttribute( table, 'border', '' ) ;
+		document.getElementById('selAlignment').value	= GetAttribute( table, 'align', '' ) ;
+		document.getElementById('txtCellPadding').value	= GetAttribute( table, 'cellPadding', '' ) ;
+		document.getElementById('txtCellSpacing').value	= GetAttribute( table, 'cellSpacing', '' ) ;
+		document.getElementById('txtSummary').value     = GetAttribute( table, 'summary', '' ) ;
+//		document.getElementById('cmbFontStyle').value	= table.className ;
+
+		var eCaption = oEditor.FCKDomTools.GetFirstChild( table, 'CAPTION' ) ;
+		if ( eCaption ) document.getElementById('txtCaption').value = eCaption.innerHTML ;
+
+		document.getElementById('txtRows').disabled    = true ;
+		document.getElementById('txtColumns').disabled = true ;
+		SelectField( 'txtWidth' ) ;
+	}
+	else
+		SelectField( 'txtRows' ) ;
+
+	dialog.SetOkButton( true ) ;
+	dialog.SetAutoSize( true ) ;
+}
+
+// Fired when the user press the OK button
+function Ok()
+{
+	var bExists = ( table != null ) ;
+
+	if ( ! bExists )
+		table = oEditor.FCK.EditorDocument.createElement( "TABLE" ) ;
+
+	// Removes the Width and Height styles
+	if ( bExists && table.style.width )		table.style.width = null ; //.removeAttribute("width") ;
+	if ( bExists && table.style.height )	table.style.height = null ; //.removeAttribute("height") ;
+
+	var sWidth = GetE('txtWidth').value ;
+	if ( sWidth.length > 0 && GetE('selWidthType').value == 'percent' )
+		sWidth += '%' ;
+
+	SetAttribute( table, 'width'		, sWidth ) ;
+	SetAttribute( table, 'height'		, GetE('txtHeight').value ) ;
+	SetAttribute( table, 'border'		, GetE('txtBorder').value ) ;
+	SetAttribute( table, 'align'		, GetE('selAlignment').value ) ;
+	SetAttribute( table, 'cellPadding'	, GetE('txtCellPadding').value ) ;
+	SetAttribute( table, 'cellSpacing'	, GetE('txtCellSpacing').value ) ;
+	SetAttribute( table, 'summary'		, GetE('txtSummary').value ) ;
+
+	var eCaption = oEditor.FCKDomTools.GetFirstChild( table, 'CAPTION' ) ;
+
+	if ( document.getElementById('txtCaption').value != '')
+	{
+		if ( !eCaption )
+		{
+			eCaption = oEditor.FCK.EditorDocument.createElement( 'CAPTION' ) ;
+			table.insertBefore( eCaption, table.firstChild ) ;
+		}
+
+		eCaption.innerHTML = document.getElementById('txtCaption').value ;
+	}
+	else if ( bExists && eCaption )
+	{
+		// TODO: It causes an IE internal error if using removeChild or
+		// table.deleteCaption() (see #505).
+		if ( oEditor.FCKBrowserInfo.IsIE )
+			eCaption.innerHTML = '' ;
+		else
+			eCaption.parentNode.removeChild( eCaption ) ;
+	}
+
+	if (! bExists)
+	{
+		var iRows = document.getElementById('txtRows').value ;
+		var iCols = document.getElementById('txtColumns').value ;
+
+		for ( var r = 0 ; r < iRows ; r++ )
+		{
+			var oRow = table.insertRow(-1) ;
+			for ( var c = 0 ; c < iCols ; c++ )
+			{
+				var oCell = oRow.insertCell(-1) ;
+				if ( oEditor.FCKBrowserInfo.IsGeckoLike )
+					oEditor.FCKTools.AppendBogusBr( oCell ) ;
+			}
+		}
+
+		oEditor.FCKUndo.SaveUndoStep() ;
+
+		oEditor.FCK.InsertElement( table ) ;
+	}
+
+	return true ;
+}
+
+	</script>
+</head>
+<body style="overflow: hidden">
+	<table id="otable" cellspacing="0" cellpadding="0" width="100%" border="0" style="height: 100%">
+		<tr>
+			<td>
+				<table cellspacing="1" cellpadding="1" width="100%" border="0">
+					<tr>
+						<td valign="top">
+							<table cellspacing="0" cellpadding="0" border="0">
+								<tr>
+									<td>
+										<span fcklang="DlgTableRows">Rows</span>:</td>
+									<td>
+										&nbsp;<input id="txtRows" type="text" maxlength="3" size="2" value="3" name="txtRows"
+											onkeypress="return IsDigit(event);" /></td>
+								</tr>
+								<tr>
+									<td>
+										<span fcklang="DlgTableColumns">Columns</span>:</td>
+									<td>
+										&nbsp;<input id="txtColumns" type="text" maxlength="2" size="2" value="2" name="txtColumns"
+											onkeypress="return IsDigit(event);" /></td>
+								</tr>
+								<tr>
+									<td>
+										&nbsp;</td>
+									<td>
+										&nbsp;</td>
+								</tr>
+								<tr>
+									<td>
+										<span fcklang="DlgTableBorder">Border size</span>:</td>
+									<td>
+										&nbsp;<input id="txtBorder" type="text" maxlength="2" size="2" value="1" name="txtBorder"
+											onkeypress="return IsDigit(event);" /></td>
+								</tr>
+								<tr>
+									<td>
+										<span fcklang="DlgTableAlign">Alignment</span>:</td>
+									<td>
+										&nbsp;<select id="selAlignment" name="selAlignment">
+											<option fcklang="DlgTableAlignNotSet" value="" selected="selected">&lt;Not set&gt;</option>
+											<option fcklang="DlgTableAlignLeft" value="left">Left</option>
+											<option fcklang="DlgTableAlignCenter" value="center">Center</option>
+											<option fcklang="DlgTableAlignRight" 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 fcklang="DlgTableWidth">Width</span>:</td>
+									<td>
+										&nbsp;<input id="txtWidth" type="text" maxlength="4" size="3" value="200" name="txtWidth"
+											onkeypress="return IsDigit(event);" /></td>
+									<td>
+										&nbsp;<select id="selWidthType" name="selWidthType">
+											<option fcklang="DlgTableWidthPx" value="pixels" selected="selected">pixels</option>
+											<option fcklang="DlgTableWidthPc" value="percent">percent</option>
+										</select></td>
+								</tr>
+								<tr>
+									<td>
+										<span fcklang="DlgTableHeight">Height</span>:</td>
+									<td>
+										&nbsp;<input id="txtHeight" type="text" maxlength="4" size="3" name="txtHeight" onkeypress="return IsDigit(event);" /></td>
+									<td>
+										&nbsp;<span fcklang="DlgTableWidthPx">pixels</span></td>
+								</tr>
+								<tr>
+									<td>
+										&nbsp;</td>
+									<td>
+										&nbsp;</td>
+									<td>
+										&nbsp;</td>
+								</tr>
+								<tr>
+									<td nowrap="nowrap">
+										<span fcklang="DlgTableCellSpace">Cell spacing</span>:</td>
+									<td>
+										&nbsp;<input id="txtCellSpacing" type="text" maxlength="2" size="2" value="1" name="txtCellSpacing"
+											onkeypress="return IsDigit(event);" /></td>
+									<td>
+										&nbsp;</td>
+								</tr>
+								<tr>
+									<td nowrap="nowrap">
+										<span fcklang="DlgTableCellPad">Cell padding</span>:</td>
+									<td>
+										&nbsp;<input id="txtCellPadding" type="text" maxlength="2" size="2" value="1" name="txtCellPadding"
+											onkeypress="return IsDigit(event);" /></td>
+									<td>
+										&nbsp;</td>
+								</tr>
+							</table>
+						</td>
+					</tr>
+				</table>
+				<table cellspacing="0" cellpadding="0" width="100%" border="0">
+					<tr>
+						<td nowrap="nowrap">
+							<span fcklang="DlgTableCaption">Caption</span>:&nbsp;</td>
+						<td>
+							&nbsp;</td>
+						<td width="100%" nowrap="nowrap">
+							<input id="txtCaption" type="text" style="width: 100%" /></td>
+					</tr>
+					<tr>
+						<td nowrap="nowrap">
+							<span fcklang="DlgTableSummary">Summary</span>:&nbsp;</td>
+						<td>
+							&nbsp;</td>
+						<td width="100%" nowrap="nowrap">
+							<input id="txtSummary" type="text" style="width: 100%" /></td>
+					</tr>
+				</table>
+			</td>
+		</tr>
+	</table>
+</body>
+</html>


Property changes on: announcement/trunk/src/main/webapp/fckeditor/editor/dialog/fck_table.html
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/webapp/fckeditor/editor/dialog/fck_tablecell.html
===================================================================
--- announcement/trunk/src/main/webapp/fckeditor/editor/dialog/fck_tablecell.html	                        (rev 0)
+++ announcement/trunk/src/main/webapp/fckeditor/editor/dialog/fck_tablecell.html	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,257 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" >
+<!--
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2008 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * Cell properties dialog window.
+-->
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+	<title>Table Cell Properties</title>
+	<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+	<meta name="robots" content="noindex, nofollow" />
+	<script src="common/fck_dialog_common.js" type="text/javascript"></script>
+	<script type="text/javascript">
+
+var dialog	= window.parent ;
+var oEditor = dialog.InnerDialogLoaded() ;
+
+// Gets the document DOM
+var oDOM = oEditor.FCK.EditorDocument ;
+
+// Array of selected Cells
+var aCells = oEditor.FCKTableHandler.GetSelectedCells() ;
+
+window.onload = function()
+{
+	// First of all, translate the dialog box texts
+	oEditor.FCKLanguageManager.TranslatePage( document ) ;
+
+	SetStartupValue() ;
+
+	dialog.SetOkButton( true ) ;
+	dialog.SetAutoSize( true ) ;
+	SelectField( 'txtWidth' ) ;
+}
+
+function SetStartupValue()
+{
+	if ( aCells.length > 0 )
+	{
+		var oCell = aCells[0] ;
+		var iWidth = GetAttribute( oCell, 'width' ) ;
+
+		if ( iWidth.indexOf && iWidth.indexOf( '%' ) >= 0 )
+		{
+			iWidth = iWidth.substr( 0, iWidth.length - 1 ) ;
+			GetE('selWidthType').value = 'percent' ;
+		}
+
+		if ( oCell.attributes['noWrap'] != null && oCell.attributes['noWrap'].specified )
+			GetE('selWordWrap').value = !oCell.noWrap ;
+
+		GetE('txtWidth').value			= iWidth ;
+		GetE('txtHeight').value			= GetAttribute( oCell, 'height' ) ;
+		GetE('selHAlign').value			= GetAttribute( oCell, 'align' ) ;
+		GetE('selVAlign').value			= GetAttribute( oCell, 'vAlign' ) ;
+		GetE('txtRowSpan').value		= GetAttribute( oCell, 'rowSpan' ) ;
+		GetE('txtCollSpan').value		= GetAttribute( oCell, 'colSpan' ) ;
+		GetE('txtBackColor').value		= GetAttribute( oCell, 'bgColor' ) ;
+		GetE('txtBorderColor').value	= GetAttribute( oCell, 'borderColor' ) ;
+//		GetE('cmbFontStyle').value		= oCell.className ;
+	}
+}
+
+// Fired when the user press the OK button
+function Ok()
+{
+	for( i = 0 ; i < aCells.length ; i++ )
+	{
+		if ( GetE('txtWidth').value.length > 0 )
+			aCells[i].width	= GetE('txtWidth').value + ( GetE('selWidthType').value == 'percent' ? '%' : '') ;
+		else
+			aCells[i].removeAttribute( 'width', 0 ) ;
+
+		if ( GetE('selWordWrap').value == 'false' )
+			SetAttribute( aCells[i], 'noWrap', 'nowrap' ) ;
+		else
+			aCells[i].removeAttribute( 'noWrap' ) ;
+
+		SetAttribute( aCells[i], 'height'		, GetE('txtHeight').value ) ;
+		SetAttribute( aCells[i], 'align'		, GetE('selHAlign').value ) ;
+		SetAttribute( aCells[i], 'vAlign'		, GetE('selVAlign').value ) ;
+		SetAttribute( aCells[i], 'rowSpan'		, GetE('txtRowSpan').value ) ;
+		SetAttribute( aCells[i], 'colSpan'		, GetE('txtCollSpan').value ) ;
+		SetAttribute( aCells[i], 'bgColor'		, GetE('txtBackColor').value ) ;
+		SetAttribute( aCells[i], 'borderColor'	, GetE('txtBorderColor').value ) ;
+//		SetAttribute( aCells[i], 'className'	, GetE('cmbFontStyle').value ) ;
+	}
+
+	return true ;
+}
+
+function SelectBackColor( color )
+{
+	if ( color && color.length > 0 )
+		GetE('txtBackColor').value = color ;
+}
+
+function SelectBorderColor( color )
+{
+	if ( color && color.length > 0 )
+		GetE('txtBorderColor').value = color ;
+}
+
+function SelectColor( wich )
+{
+	oEditor.FCKDialog.OpenDialog( 'FCKDialog_Color', oEditor.FCKLang.DlgColorTitle, 'dialog/fck_colorselector.html', 410, 320, wich == 'Back' ? SelectBackColor : SelectBorderColor, window ) ;
+}
+
+	</script>
+</head>
+<body scroll="no" style="overflow: hidden">
+	<table cellspacing="0" cellpadding="0" width="100%" border="0" height="100%">
+		<tr>
+			<td>
+				<table cellspacing="1" cellpadding="1" width="100%" border="0">
+					<tr>
+						<td>
+							<table cellspacing="0" cellpadding="0" border="0">
+								<tr>
+									<td nowrap="nowrap">
+										<span fcklang="DlgCellWidth">Width</span>:</td>
+									<td>
+										&nbsp;<input onkeypress="return IsDigit(event);" id="txtWidth" type="text" maxlength="4"
+											size="3" name="txtWidth" />&nbsp;<select id="selWidthType" name="selWidthType">
+												<option fcklang="DlgCellWidthPx" value="pixels" selected="selected">pixels</option>
+												<option fcklang="DlgCellWidthPc" value="percent">percent</option>
+											</select></td>
+								</tr>
+								<tr>
+									<td nowrap="nowrap">
+										<span fcklang="DlgCellHeight">Height</span>:</td>
+									<td>
+										&nbsp;<input id="txtHeight" type="text" maxlength="4" size="3" name="txtHeight" onkeypress="return IsDigit(event);" />&nbsp;<span
+											fcklang="DlgCellWidthPx">pixels</span></td>
+								</tr>
+								<tr>
+									<td>
+										&nbsp;</td>
+									<td>
+										&nbsp;</td>
+								</tr>
+								<tr>
+									<td nowrap="nowrap">
+										<span fcklang="DlgCellWordWrap">Word Wrap</span>:</td>
+									<td>
+										&nbsp;<select id="selWordWrap" name="selAlignment">
+											<option fcklang="DlgCellWordWrapYes" value="true" selected="selected">Yes</option>
+											<option fcklang="DlgCellWordWrapNo" value="false">No</option>
+										</select></td>
+								</tr>
+								<tr>
+									<td>
+										&nbsp;</td>
+									<td>
+										&nbsp;</td>
+								</tr>
+								<tr>
+									<td nowrap="nowrap">
+										<span fcklang="DlgCellHorAlign">Horizontal Alignment</span>:</td>
+									<td>
+										&nbsp;<select id="selHAlign" name="selAlignment">
+											<option fcklang="DlgCellHorAlignNotSet" value="" selected>&lt;Not set&gt;</option>
+											<option fcklang="DlgCellHorAlignLeft" value="left">Left</option>
+											<option fcklang="DlgCellHorAlignCenter" value="center">Center</option>
+											<option fcklang="DlgCellHorAlignRight" value="right">Right</option>
+										</select></td>
+								</tr>
+								<tr>
+									<td nowrap="nowrap">
+										<span fcklang="DlgCellVerAlign">Vertical Alignment</span>:</td>
+									<td>
+										&nbsp;<select id="selVAlign" name="selAlignment">
+											<option fcklang="DlgCellVerAlignNotSet" value="" selected>&lt;Not set&gt;</option>
+											<option fcklang="DlgCellVerAlignTop" value="top">Top</option>
+											<option fcklang="DlgCellVerAlignMiddle" value="middle">Middle</option>
+											<option fcklang="DlgCellVerAlignBottom" value="bottom">Bottom</option>
+											<option fcklang="DlgCellVerAlignBaseline" value="baseline">Baseline</option>
+										</select></td>
+								</tr>
+							</table>
+						</td>
+						<td>
+							&nbsp;&nbsp;&nbsp;</td>
+						<td align="right">
+							<table cellspacing="0" cellpadding="0" border="0">
+								<tr>
+									<td nowrap="nowrap">
+										<span fcklang="DlgCellRowSpan">Rows Span</span>:</td>
+									<td>
+										&nbsp;
+										<input onkeypress="return IsDigit(event);" id="txtRowSpan" type="text" maxlength="3" size="2"
+											name="txtRows"></td>
+									<td>
+									</td>
+								</tr>
+								<tr>
+									<td nowrap="nowrap">
+										<span fcklang="DlgCellCollSpan">Columns Span</span>:</td>
+									<td>
+										&nbsp;
+										<input onkeypress="return IsDigit(event);" id="txtCollSpan" type="text" maxlength="2"
+											size="2" name="txtColumns"></td>
+									<td>
+									</td>
+								</tr>
+								<tr>
+									<td>
+										&nbsp;</td>
+									<td>
+										&nbsp;</td>
+									<td>
+										&nbsp;</td>
+								</tr>
+								<tr>
+									<td nowrap="nowrap">
+										<span fcklang="DlgCellBackColor">Background Color</span>:</td>
+									<td>
+										&nbsp;<input id="txtBackColor" type="text" size="8" name="txtCellSpacing"></td>
+									<td>
+										&nbsp;
+										<input type="button" fcklang="DlgCellBtnSelect" value="Select..." onclick="SelectColor( 'Back' )"></td>
+								</tr>
+								<tr>
+									<td nowrap="nowrap">
+										<span fcklang="DlgCellBorderColor">Border Color</span>:</td>
+									<td>
+										&nbsp;<input id="txtBorderColor" type="text" size="8" name="txtCellPadding" /></td>
+									<td>
+										&nbsp;
+										<input type="button" fcklang="DlgCellBtnSelect" value="Select..." onclick="SelectColor( 'Border' )" /></td>
+								</tr>
+							</table>
+						</td>
+					</tr>
+				</table>
+			</td>
+		</tr>
+	</table>
+</body>
+</html>


Property changes on: announcement/trunk/src/main/webapp/fckeditor/editor/dialog/fck_tablecell.html
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/webapp/fckeditor/editor/dialog/fck_template/images/template1.gif
===================================================================
(Binary files differ)


Property changes on: announcement/trunk/src/main/webapp/fckeditor/editor/dialog/fck_template/images/template1.gif
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: announcement/trunk/src/main/webapp/fckeditor/editor/dialog/fck_template/images/template2.gif
===================================================================
(Binary files differ)


Property changes on: announcement/trunk/src/main/webapp/fckeditor/editor/dialog/fck_template/images/template2.gif
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: announcement/trunk/src/main/webapp/fckeditor/editor/dialog/fck_template/images/template3.gif
===================================================================
(Binary files differ)


Property changes on: announcement/trunk/src/main/webapp/fckeditor/editor/dialog/fck_template/images/template3.gif
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: announcement/trunk/src/main/webapp/fckeditor/editor/dialog/fck_template.html
===================================================================
--- announcement/trunk/src/main/webapp/fckeditor/editor/dialog/fck_template.html	                        (rev 0)
+++ announcement/trunk/src/main/webapp/fckeditor/editor/dialog/fck_template.html	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,242 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<!--
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2008 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * Template selection dialog window.
+-->
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+	<title></title>
+	<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+	<meta name="robots" content="noindex, nofollow" />
+	<style type="text/css">
+			.TplList
+			{
+				border: #dcdcdc 2px solid;
+				background-color: #ffffff;
+				overflow: auto;
+				width: 90%;
+			}
+
+			.TplItem
+			{
+				margin: 5px;
+				padding: 7px;
+				border: #eeeeee 1px solid;
+			}
+
+			.TplItem TABLE
+			{
+				display: inline;
+			}
+
+			.TplTitle
+			{
+				font-weight: bold;
+			}
+		</style>
+	<script src="common/fck_dialog_common.js" type="text/javascript"></script>
+	<script type="text/javascript">
+
+var oEditor		= window.parent.InnerDialogLoaded() ;
+var FCK			= oEditor.FCK ;
+var FCKLang		= oEditor.FCKLang ;
+var FCKConfig	= oEditor.FCKConfig ;
+
+window.onload = function()
+{
+	// Set the right box height (browser dependent).
+	GetE('eList').style.height = document.all ? '100%' : '295px' ;
+
+	// Translate the dialog box texts.
+	oEditor.FCKLanguageManager.TranslatePage(document) ;
+
+	GetE('xChkReplaceAll').checked = ( FCKConfig.TemplateReplaceAll !== false ) ;
+
+	if ( FCKConfig.TemplateReplaceCheckbox !== false )
+		GetE('xReplaceBlock').style.display = '' ;
+
+	window.parent.SetAutoSize( true ) ;
+
+	LoadTemplatesXml() ;
+}
+
+function LoadTemplatesXml()
+{
+	var oTemplate ;
+
+	if ( !FCK._Templates )
+	{
+		GetE('eLoading').style.display = '' ;
+
+		// Create the Templates array.
+		FCK._Templates = new Array() ;
+
+		// Load the XML file.
+		var oXml = new oEditor.FCKXml() ;
+		oXml.LoadUrl( FCKConfig.TemplatesXmlPath ) ;
+
+		// Get the Images Base Path.
+		var oAtt = oXml.SelectSingleNode( 'Templates/@imagesBasePath' ) ;
+		var sImagesBasePath = oAtt ? oAtt.value : '' ;
+
+		// Get the "Template" nodes defined in the XML file.
+		var aTplNodes = oXml.SelectNodes( 'Templates/Template' ) ;
+
+		for ( var i = 0 ; i < aTplNodes.length ; i++ )
+		{
+			var oNode = aTplNodes[i] ;
+
+			oTemplate = new Object() ;
+
+			var oPart ;
+
+			// Get the Template Title.
+			if ( (oPart = oNode.attributes.getNamedItem('title')) )
+				oTemplate.Title = oPart.value ;
+			else
+				oTemplate.Title = 'Template ' + ( i + 1 ) ;
+
+			// Get the Template Description.
+			if ( (oPart = oXml.SelectSingleNode( 'Description', oNode )) )
+				oTemplate.Description = oPart.text ? oPart.text : oPart.textContent ;
+
+			// Get the Template Image.
+			if ( (oPart = oNode.attributes.getNamedItem('image')) )
+				oTemplate.Image = sImagesBasePath + oPart.value ;
+
+			// Get the Template HTML.
+			if ( (oPart = oXml.SelectSingleNode( 'Html', oNode )) )
+				oTemplate.Html = oPart.text ? oPart.text : oPart.textContent ;
+			else
+			{
+				alert( 'No HTML defined for template index ' + i + '. Please review the "' + FCKConfig.TemplatesXmlPath + '" file.' ) ;
+				continue ;
+			}
+
+			FCK._Templates[ FCK._Templates.length ] = oTemplate ;
+		}
+
+		GetE('eLoading').style.display = 'none' ;
+	}
+
+	if ( FCK._Templates.length == 0 )
+		GetE('eEmpty').style.display = '' ;
+	else
+	{
+		for ( var j = 0 ; j < FCK._Templates.length ; j++ )
+		{
+			oTemplate = FCK._Templates[j] ;
+
+			var oItemDiv = GetE('eList').appendChild( document.createElement( 'DIV' ) ) ;
+			oItemDiv.TplIndex = j ;
+			oItemDiv.className = 'TplItem' ;
+
+			// Build the inner HTML of our new item DIV.
+			var sInner = '<table><tr>' ;
+
+			if ( oTemplate.Image )
+				sInner += '<td valign="top"><img src="' + oTemplate.Image + '"><\/td>' ;
+
+			sInner += '<td valign="top"><div class="TplTitle">' + oTemplate.Title + '<\/div>' ;
+
+			if ( oTemplate.Description )
+				sInner += '<div>' + oTemplate.Description + '<\/div>' ;
+
+			sInner += '<\/td><\/tr><\/table>' ;
+
+			oItemDiv.innerHTML = sInner ;
+
+			oItemDiv.onmouseover = ItemDiv_OnMouseOver ;
+			oItemDiv.onmouseout = ItemDiv_OnMouseOut ;
+			oItemDiv.onclick = ItemDiv_OnClick ;
+		}
+	}
+}
+
+function ItemDiv_OnMouseOver()
+{
+	this.className += ' PopupSelectionBox' ;
+}
+
+function ItemDiv_OnMouseOut()
+{
+	this.className = this.className.replace( /\s*PopupSelectionBox\s*/, '' ) ;
+}
+
+function ItemDiv_OnClick()
+{
+	SelectTemplate( this.TplIndex ) ;
+}
+
+function SelectTemplate( index )
+{
+	oEditor.FCKUndo.SaveUndoStep() ;
+
+	if ( GetE('xChkReplaceAll').checked )
+		FCK.SetData( FCK._Templates[index].Html ) ;
+	else
+		FCK.InsertHtml( FCK._Templates[index].Html ) ;
+
+	window.parent.Cancel( true ) ;
+}
+
+	</script>
+</head>
+<body style="overflow: hidden">
+	<table width="100%" style="height: 100%">
+		<tr>
+			<td align="center">
+				<span fcklang="DlgTemplatesSelMsg">Please select the template to open in the editor<br />
+					(the actual contents will be lost):</span>
+			</td>
+		</tr>
+		<tr>
+			<td height="100%" align="center">
+				<div id="eList" align="left" class="TplList">
+					<div id="eLoading" align="center" style="display: none">
+						<br />
+						<span fcklang="DlgTemplatesLoading">Loading templates list. Please wait...</span>
+					</div>
+					<div id="eEmpty" align="center" style="display: none">
+						<br />
+						<span fcklang="DlgTemplatesNoTpl">(No templates defined)</span>
+					</div>
+				</div>
+			</td>
+		</tr>
+		<tr id="xReplaceBlock" style="display: none">
+			<td>
+				<table cellpadding="0" cellspacing="0">
+					<tr>
+						<td>
+							<input id="xChkReplaceAll" type="checkbox" /></td>
+						<td>
+							&nbsp;</td>
+						<td>
+							<label for="xChkReplaceAll" fcklang="DlgTemplatesReplace">
+								Replace actual contents</label></td>
+					</tr>
+				</table>
+			</td>
+		</tr>
+	</table>
+</body>
+</html>


Property changes on: announcement/trunk/src/main/webapp/fckeditor/editor/dialog/fck_template.html
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/webapp/fckeditor/editor/dialog/fck_textarea.html
===================================================================
--- announcement/trunk/src/main/webapp/fckeditor/editor/dialog/fck_textarea.html	                        (rev 0)
+++ announcement/trunk/src/main/webapp/fckeditor/editor/dialog/fck_textarea.html	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,94 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" >
+<!--
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2008 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * Text Area dialog window.
+-->
+<html>
+	<head>
+		<title>Text Area Properties</title>
+		<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+		<meta content="noindex, nofollow" name="robots">
+		<script src="common/fck_dialog_common.js" type="text/javascript"></script>
+		<script type="text/javascript">
+
+var dialog	= window.parent ;
+var oEditor = dialog.InnerDialogLoaded() ;
+
+// Gets the document DOM
+var oDOM = oEditor.FCK.EditorDocument ;
+
+var oActiveEl = dialog.Selection.GetSelectedElement() ;
+
+window.onload = function()
+{
+	// First of all, translate the dialog box texts
+	oEditor.FCKLanguageManager.TranslatePage(document) ;
+
+	if ( oActiveEl && oActiveEl.tagName == 'TEXTAREA' )
+	{
+		GetE('txtName').value		= oActiveEl.name ;
+		GetE('txtCols').value		= GetAttribute( oActiveEl, 'cols' ) ;
+		GetE('txtRows').value		= GetAttribute( oActiveEl, 'rows' ) ;
+	}
+	else
+		oActiveEl = null ;
+
+	dialog.SetOkButton( true ) ;
+	dialog.SetAutoSize( true ) ;
+	SelectField( 'txtName' ) ;
+}
+
+function Ok()
+{
+	oEditor.FCKUndo.SaveUndoStep() ;
+
+	oActiveEl = CreateNamedElement( oEditor, oActiveEl, 'TEXTAREA', {name: GetE('txtName').value} ) ;
+
+	SetAttribute( oActiveEl, 'cols', GetE('txtCols').value ) ;
+	SetAttribute( oActiveEl, 'rows', GetE('txtRows').value ) ;
+
+	return true ;
+}
+
+		</script>
+	</head>
+	<body style="overflow: hidden">
+		<table height="100%" width="100%">
+			<tr>
+				<td align="center">
+					<table border="0" cellpadding="0" cellspacing="0" width="80%">
+						<tr>
+							<td>
+								<span fckLang="DlgTextareaName">Name</span><br>
+								<input type="text" id="txtName" style="WIDTH: 100%">
+								<span fckLang="DlgTextareaCols">Collumns</span><br>
+								<input id="txtCols" type="text" size="5">
+								<br>
+								<span fckLang="DlgTextareaRows">Rows</span><br>
+								<input id="txtRows" type="text" size="5">
+							</td>
+						</tr>
+					</table>
+				</td>
+			</tr>
+		</table>
+	</body>
+</html>


Property changes on: announcement/trunk/src/main/webapp/fckeditor/editor/dialog/fck_textarea.html
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/webapp/fckeditor/editor/dialog/fck_textfield.html
===================================================================
--- announcement/trunk/src/main/webapp/fckeditor/editor/dialog/fck_textfield.html	                        (rev 0)
+++ announcement/trunk/src/main/webapp/fckeditor/editor/dialog/fck_textfield.html	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,136 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" >
+<!--
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2008 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * Text field dialog window.
+-->
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+	<title></title>
+	<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+	<meta content="noindex, nofollow" name="robots" />
+	<script src="common/fck_dialog_common.js" type="text/javascript"></script>
+	<script type="text/javascript">
+
+var dialog	= window.parent ;
+var oEditor = dialog.InnerDialogLoaded() ;
+
+// Gets the document DOM
+var oDOM = oEditor.FCK.EditorDocument ;
+
+var oActiveEl = dialog.Selection.GetSelectedElement() ;
+
+window.onload = function()
+{
+	// First of all, translate the dialog box texts
+	oEditor.FCKLanguageManager.TranslatePage(document) ;
+
+	if ( oActiveEl && oActiveEl.tagName == 'INPUT' && ( oActiveEl.type == 'text' || oActiveEl.type == 'password' ) )
+	{
+		GetE('txtName').value	= oActiveEl.name ;
+		GetE('txtValue').value	= oActiveEl.value ;
+		GetE('txtSize').value	= GetAttribute( oActiveEl, 'size' ) ;
+		GetE('txtMax').value	= GetAttribute( oActiveEl, 'maxLength' ) ;
+		GetE('txtType').value	= oActiveEl.type ;
+	}
+	else
+		oActiveEl = null ;
+
+	dialog.SetOkButton( true ) ;
+	dialog.SetAutoSize( true ) ;
+	SelectField( 'txtName' ) ;
+}
+
+function Ok()
+{
+	if ( isNaN( GetE('txtMax').value ) || GetE('txtMax').value < 0 )
+	{
+		alert( "Maximum characters must be a positive number." ) ;
+		GetE('txtMax').focus() ;
+		return false ;
+	}
+	else if( isNaN( GetE('txtSize').value ) || GetE('txtSize').value < 0 )
+	{
+		alert( "Width must be a positive number." ) ;
+		GetE('txtSize').focus() ;
+		return false ;
+	}
+
+	oEditor.FCKUndo.SaveUndoStep() ;
+
+	oActiveEl = CreateNamedElement( oEditor, oActiveEl, 'INPUT', {name: GetE('txtName').value, type: GetE('txtType').value } ) ;
+
+	SetAttribute( oActiveEl, 'value'	, GetE('txtValue').value ) ;
+	SetAttribute( oActiveEl, 'size'		, GetE('txtSize').value ) ;
+	SetAttribute( oActiveEl, 'maxlength', GetE('txtMax').value ) ;
+
+	return true ;
+}
+
+	</script>
+</head>
+<body style="overflow: hidden">
+	<table width="100%" style="height: 100%">
+		<tr>
+			<td align="center">
+				<table cellspacing="0" cellpadding="0" border="0">
+					<tr>
+						<td>
+							<span fcklang="DlgTextName">Name</span><br />
+							<input id="txtName" type="text" size="20" />
+						</td>
+						<td>
+						</td>
+						<td>
+							<span fcklang="DlgTextValue">Value</span><br />
+							<input id="txtValue" type="text" size="25" />
+						</td>
+					</tr>
+					<tr>
+						<td>
+							<span fcklang="DlgTextCharWidth">Character Width</span><br />
+							<input id="txtSize" type="text" size="5" />
+						</td>
+						<td>
+						</td>
+						<td>
+							<span fcklang="DlgTextMaxChars">Maximum Characters</span><br />
+							<input id="txtMax" type="text" size="5" />
+						</td>
+					</tr>
+					<tr>
+						<td>
+							<span fcklang="DlgTextType">Type</span><br />
+							<select id="txtType">
+								<option value="text" selected="selected" fcklang="DlgTextTypeText">Text</option>
+								<option value="password" fcklang="DlgTextTypePass">Password</option>
+							</select>
+						</td>
+						<td>
+							&nbsp;</td>
+						<td>
+						</td>
+					</tr>
+				</table>
+			</td>
+		</tr>
+	</table>
+</body>
+</html>


Property changes on: announcement/trunk/src/main/webapp/fckeditor/editor/dialog/fck_textfield.html
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/webapp/fckeditor/editor/dtd/fck_dtd_test.html
===================================================================
--- announcement/trunk/src/main/webapp/fckeditor/editor/dtd/fck_dtd_test.html	                        (rev 0)
+++ announcement/trunk/src/main/webapp/fckeditor/editor/dtd/fck_dtd_test.html	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,41 @@
+<!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">
+<head>
+	<title>DTD Test Page</title>
+	<script type="text/javascript">
+
+	// Define an object for this test page, so the assignment to FCK.DTD works
+	var FCK = {} ;
+	</script>
+	<script type="text/javascript" src="../_source/internals/fcktools.js"></script>
+	<script type="text/javascript" src="fck_xhtml10transitional.js"></script>
+</head>
+<body>
+	<h1>
+		DTD Contents
+	</h1>
+	<table border="1">
+		<script type="text/javascript">
+
+for ( var p in FCK.DTD )
+{
+	document.write( '<tr><td><b>' + p + '</b></td><td>' ) ;
+
+	var isFirst = true ;
+
+	for ( var c in FCK.DTD[p] )
+	{
+		if ( !isFirst )
+			document.write( ', ' ) ;
+		isFirst = false ;
+
+		document.write( c ) ;
+	}
+
+
+	document.write( '</td></tr>' ) ;
+}
+		</script>
+	</table>
+</body>
+</html>


Property changes on: announcement/trunk/src/main/webapp/fckeditor/editor/dtd/fck_dtd_test.html
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/webapp/fckeditor/editor/dtd/fck_xhtml10strict.js
===================================================================
--- announcement/trunk/src/main/webapp/fckeditor/editor/dtd/fck_xhtml10strict.js	                        (rev 0)
+++ announcement/trunk/src/main/webapp/fckeditor/editor/dtd/fck_xhtml10strict.js	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,116 @@
+/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2008 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * Contains the DTD mapping for XHTML 1.0 Strict.
+ * This file was automatically generated from the file: xhtml10-strict.dtd
+ */
+FCK.DTD = (function()
+{
+    var X = FCKTools.Merge ;
+
+    var H,I,J,K,C,L,M,A,B,D,E,G,N,F ;
+    A = {ins:1, del:1, script:1} ;
+    B = {hr:1, ul:1, div:1, blockquote:1, noscript:1, table:1, address:1, pre:1, p:1, h5:1, dl:1, h4:1, ol:1, h6:1, h1:1, h3:1, h2:1} ;
+    C = X({fieldset:1}, B) ;
+    D = X({sub:1, bdo:1, 'var':1, sup:1, br:1, kbd:1, map:1, samp:1, b:1, acronym:1, '#':1, abbr:1, code:1, i:1, cite:1, tt:1, strong:1, q:1, em:1, big:1, small:1, span:1, dfn:1}, A) ;
+    E = X({img:1, object:1}, D) ;
+    F = {input:1, button:1, textarea:1, select:1, label:1} ;
+    G = X({a:1}, F) ;
+    H = {img:1, noscript:1, br:1, kbd:1, button:1, h5:1, h4:1, samp:1, h6:1, ol:1, h1:1, h3:1, h2:1, form:1, select:1, '#':1, ins:1, abbr:1, label:1, code:1, table:1, script:1, cite:1, input:1, strong:1, textarea:1, big:1, small:1, span:1, hr:1, sub:1, bdo:1, 'var':1, div:1, object:1, sup:1, map:1, dl:1, del:1, fieldset:1, ul:1, b:1, acronym:1, a:1, blockquote:1, i:1, address:1, tt:1, q:1, pre:1, p:1, em:1, dfn:1} ;
+
+    I = X({form:1, fieldset:1}, B, E, G) ;
+    J = {tr:1} ;
+    K = {'#':1} ;
+    L = X(E, G) ;
+    M = {li:1} ;
+    N = X({form:1}, A, C) ;
+
+    return {
+        col: {},
+        tr: {td:1, th:1},
+        img: {},
+        colgroup: {col:1},
+        noscript: N,
+        td: I,
+        br: {},
+        th: I,
+        kbd: L,
+        button: X(B, E),
+        h5: L,
+        h4: L,
+        samp: L,
+        h6: L,
+        ol: M,
+        h1: L,
+        h3: L,
+        option: K,
+        h2: L,
+        form: X(A, C),
+        select: {optgroup:1, option:1},
+        ins: I,
+        abbr: L,
+        label: L,
+        code: L,
+        table: {thead:1, col:1, tbody:1, tr:1, colgroup:1, caption:1, tfoot:1},
+        script: K,
+        tfoot: J,
+        cite: L,
+        li: I,
+        input: {},
+        strong: L,
+        textarea: K,
+        big: L,
+        small: L,
+        span: L,
+        dt: L,
+        hr: {},
+        sub: L,
+        optgroup: {option:1},
+        bdo: L,
+        param: {},
+        'var': L,
+        div: I,
+        object: X({param:1}, H),
+        sup: L,
+        dd: I,
+        area: {},
+        map: X({form:1, area:1}, A, C),
+        dl: {dt:1, dd:1},
+        del: I,
+        fieldset: X({legend:1}, H),
+        thead: J,
+        ul: M,
+        acronym: L,
+        b: L,
+        a: X({img:1, object:1}, D, F),
+        blockquote: N,
+        caption: L,
+        i: L,
+        tbody: J,
+        address: L,
+        tt: L,
+        legend: L,
+        q: L,
+        pre: X({a:1}, D, F),
+        p: L,
+        em: L,
+        dfn: L
+    } ;
+})() ;


Property changes on: announcement/trunk/src/main/webapp/fckeditor/editor/dtd/fck_xhtml10strict.js
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/webapp/fckeditor/editor/dtd/fck_xhtml10transitional.js
===================================================================
--- announcement/trunk/src/main/webapp/fckeditor/editor/dtd/fck_xhtml10transitional.js	                        (rev 0)
+++ announcement/trunk/src/main/webapp/fckeditor/editor/dtd/fck_xhtml10transitional.js	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,140 @@
+/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2008 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * Contains the DTD mapping for XHTML 1.0 Transitional.
+ * This file was automatically generated from the file: xhtml10-transitional.dtd
+ */
+FCK.DTD = (function()
+{
+    var X = FCKTools.Merge ;
+
+    var A,L,J,M,N,O,D,H,P,K,Q,F,G,C,B,E,I ;
+    A = {isindex:1, fieldset:1} ;
+    B = {input:1, button:1, select:1, textarea:1, label:1} ;
+    C = X({a:1}, B) ;
+    D = X({iframe:1}, C) ;
+    E = {hr:1, ul:1, menu:1, div:1, blockquote:1, noscript:1, table:1, center:1, address:1, dir:1, pre:1, h5:1, dl:1, h4:1, noframes:1, h6:1, ol:1, h1:1, h3:1, h2:1} ;
+    F = {ins:1, del:1, script:1} ;
+    G = X({b:1, acronym:1, bdo:1, 'var':1, '#':1, abbr:1, code:1, br:1, i:1, cite:1, kbd:1, u:1, strike:1, s:1, tt:1, strong:1, q:1, samp:1, em:1, dfn:1, span:1}, F) ;
+    H = X({sub:1, img:1, object:1, sup:1, basefont:1, map:1, applet:1, font:1, big:1, small:1}, G) ;
+    I = X({p:1}, H) ;
+    J = X({iframe:1}, H, B) ;
+    K = {img:1, noscript:1, br:1, kbd:1, center:1, button:1, basefont:1, h5:1, h4:1, samp:1, h6:1, ol:1, h1:1, h3:1, h2:1, form:1, font:1, '#':1, select:1, menu:1, ins:1, abbr:1, label:1, code:1, table:1, script:1, cite:1, input:1, iframe:1, strong:1, textarea:1, noframes:1, big:1, small:1, span:1, hr:1, sub:1, bdo:1, 'var':1, div:1, object:1, sup:1, strike:1, dir:1, map:1, dl:1, applet:1, del:1, isindex:1, fieldset:1, ul:1, b:1, acronym:1, a:1, blockquote:1, i:1, u:1, s:1, tt:1, address:1, q:1, pre:1, p:1, em:1, dfn:1} ;
+
+    L = X({a:1}, J) ;
+    M = {tr:1} ;
+    N = {'#':1} ;
+    O = X({param:1}, K) ;
+    P = X({form:1}, A, D, E, I) ;
+    Q = {li:1} ;
+
+    return {
+        col: {},
+        tr: {td:1, th:1},
+        img: {},
+        colgroup: {col:1},
+        noscript: P,
+        td: P,
+        br: {},
+        th: P,
+        center: P,
+        kbd: L,
+        button: X(I, E),
+        basefont: {},
+        h5: L,
+        h4: L,
+        samp: L,
+        h6: L,
+        ol: Q,
+        h1: L,
+        h3: L,
+        option: N,
+        h2: L,
+        form: X(A, D, E, I),
+        select: {optgroup:1, option:1},
+        font: J,		// Changed from L to J (see (1))
+        ins: P,
+        menu: Q,
+        abbr: L,
+        label: L,
+        table: {thead:1, col:1, tbody:1, tr:1, colgroup:1, caption:1, tfoot:1},
+        code: L,
+        script: N,
+        tfoot: M,
+        cite: L,
+        li: P,
+        input: {},
+        iframe: P,
+        strong: J,		// Changed from L to J (see (1))
+        textarea: N,
+        noframes: P,
+        big: J,			// Changed from L to J (see (1))
+        small: J,		// Changed from L to J (see (1))
+        span: J,		// Changed from L to J (see (1))
+        hr: {},
+        dt: L,
+        sub: J,			// Changed from L to J (see (1))
+        optgroup: {option:1},
+        param: {},
+        bdo: L,
+        'var': J,		// Changed from L to J (see (1))
+        div: P,
+        object: O,
+        sup: J,			// Changed from L to J (see (1))
+        dd: P,
+        strike: J,		// Changed from L to J (see (1))
+        area: {},
+        dir: Q,
+        map: X({area:1, form:1, p:1}, A, F, E),
+        applet: O,
+        dl: {dt:1, dd:1},
+        del: P,
+        isindex: {},
+        fieldset: X({legend:1}, K),
+        thead: M,
+        ul: Q,
+        acronym: L,
+        b: J,			// Changed from L to J (see (1))
+        a: J,
+        blockquote: P,
+        caption: L,
+        i: J,			// Changed from L to J (see (1))
+        u: J,			// Changed from L to J (see (1))
+        tbody: M,
+        s: L,
+        address: X(D, I),
+        tt: J,			// Changed from L to J (see (1))
+        legend: L,
+        q: L,
+        pre: X(G, C),
+        p: L,
+        em: J,			// Changed from L to J (see (1))
+        dfn: L
+    } ;
+})() ;
+
+/*
+	Notes:
+	(1) According to the DTD, many elements, like <b> accept <a> elements
+	    inside of them. But, to produce better output results, we have manually
+	    changed the map to avoid breaking the links on pieces, having
+	    "<b>this is a </b><a><b>link</b> test</a>", instead of
+	    "<b>this is a <a>link</a></b><a> test</a>".
+*/


Property changes on: announcement/trunk/src/main/webapp/fckeditor/editor/dtd/fck_xhtml10transitional.js
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/webapp/fckeditor/editor/fckdebug.html
===================================================================
--- announcement/trunk/src/main/webapp/fckeditor/editor/fckdebug.html	                        (rev 0)
+++ announcement/trunk/src/main/webapp/fckeditor/editor/fckdebug.html	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,153 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<!--
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2008 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * This is the Debug window.
+ * It automatically popups if the Debug = true in the configuration file.
+-->
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+	<title>FCKeditor Debug Window</title>
+	<meta name="robots" content="noindex, nofollow" />
+	<script type="text/javascript">
+
+var oWindow ;
+var oDiv ;
+
+if ( !window.FCKMessages )
+	window.FCKMessages = new Array() ;
+
+window.onload = function()
+{
+	oWindow = document.getElementById('xOutput').contentWindow ;
+	oWindow.document.open() ;
+	oWindow.document.write( '<div id="divMsg"><\/div>' ) ;
+	oWindow.document.close() ;
+	oDiv	= oWindow.document.getElementById('divMsg') ;
+}
+
+function Output( message, color, noParse )
+{
+	if ( !noParse && message != null && isNaN( message ) )
+		message = message.replace(/</g, "&lt;") ;
+
+	if ( color )
+		message = '<font color="' + color + '">' + message + '<\/font>' ;
+
+	window.FCKMessages[ window.FCKMessages.length ] = message ;
+	StartTimer() ;
+}
+
+function OutputObject( anyObject, color )
+{
+	var message ;
+
+	if ( anyObject != null )
+	{
+		message = 'Properties of: ' + anyObject + '</b><blockquote>' ;
+
+		for (var prop in anyObject)
+		{
+			try
+			{
+				var sVal = anyObject[ prop ] != null ? anyObject[ prop ] + '' : '[null]' ;
+				message += '<b>' + prop + '</b> : ' + sVal.replace(/</g, '&lt;') + '<br>' ;
+			}
+			catch (e)
+			{
+				try
+				{
+					message += '<b>' + prop + '</b> : [' + typeof( anyObject[ prop ] ) + ']<br>' ;
+				}
+				catch (e)
+				{
+					message += '<b>' + prop + '</b> : [-error-]<br>' ;
+				}
+			}
+		}
+
+		message += '</blockquote><b>' ;
+	} else
+		message = 'OutputObject : Object is "null".' ;
+
+	Output( message, color, true ) ;
+}
+
+function StartTimer()
+{
+	window.setTimeout( 'CheckMessages()', 100 ) ;
+}
+
+function CheckMessages()
+{
+	if ( window.FCKMessages.length > 0 )
+	{
+		// Get the first item in the queue
+		var sMessage = window.FCKMessages[0] ;
+
+		// Removes the first item from the queue
+		var oTempArray = new Array() ;
+		for ( i = 1 ; i < window.FCKMessages.length ; i++ )
+			oTempArray[ i - 1 ] = window.FCKMessages[ i ] ;
+		window.FCKMessages = oTempArray ;
+
+		var d = new Date() ;
+		var sTime =
+			( d.getHours() + 100 + '' ).substr( 1,2 ) + ':' +
+			( d.getMinutes() + 100 + '' ).substr( 1,2 ) + ':' +
+			( d.getSeconds() + 100 + '' ).substr( 1,2 ) + ':' +
+			( d.getMilliseconds() + 1000 + '' ).substr( 1,3 ) ;
+
+		var oMsgDiv = oWindow.document.createElement( 'div' ) ;
+		oMsgDiv.innerHTML = sTime + ': <b>' + sMessage + '<\/b>' ;
+		oDiv.appendChild( oMsgDiv ) ;
+		oMsgDiv.scrollIntoView() ;
+	}
+}
+
+function Clear()
+{
+	oDiv.innerHTML = '' ;
+}
+	</script>
+</head>
+<body style="margin: 10px">
+	<table style="height: 100%" cellspacing="5" cellpadding="0" width="100%" border="0">
+		<tr>
+			<td>
+				<table cellspacing="0" cellpadding="0" width="100%" border="0">
+					<tr>
+						<td style="font-weight: bold; font-size: 1.2em;">
+							FCKeditor Debug Window</td>
+						<td align="right">
+							<input type="button" value="Clear" onclick="Clear();" /></td>
+					</tr>
+				</table>
+			</td>
+		</tr>
+		<tr style="height: 100%">
+			<td style="border: #696969 1px solid">
+				<iframe id="xOutput" width="100%" height="100%" scrolling="auto" src="javascript:void(0)"
+					frameborder="0"></iframe>
+			</td>
+		</tr>
+	</table>
+</body>
+</html>


Property changes on: announcement/trunk/src/main/webapp/fckeditor/editor/fckdebug.html
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/webapp/fckeditor/editor/fckdialog.html
===================================================================
--- announcement/trunk/src/main/webapp/fckeditor/editor/fckdialog.html	                        (rev 0)
+++ announcement/trunk/src/main/webapp/fckeditor/editor/fckdialog.html	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,812 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<!--
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2008 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * This page is used by all dialog box as the container.
+-->
+<html xmlns="http://www.w3.org/1999/xhtml">
+	<head>
+		<title></title>
+		<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+		<meta name="robots" content="noindex, nofollow" />
+		<script type="text/javascript">
+// <![CDATA[
+
+// Domain relaxation logic.
+(function()
+{
+	var d = document.domain ;
+
+	while ( true )
+	{
+		// Test if we can access a parent property.
+		try
+		{
+			var parentDomain = ( Args().TopWindow || E ).document.domain ;
+
+			if ( document.domain != parentDomain )
+				document.domain = parentDomain ;
+
+			break ;
+		}
+		catch( e ) {}
+
+		// Remove a domain part: www.mytest.example.com => mytest.example.com => example.com ...
+		d = d.replace( /.*?(?:\.|$)/, '' ) ;
+
+		if ( d.length == 0 )
+			break ;		// It was not able to detect the domain.
+
+		document.domain = d ;
+	}
+})() ;
+
+var E = frameElement._DialogArguments.Editor ;
+
+// It seems referencing to frameElement._DialogArguments directly would lead to memory leaks in IE.
+// So let's use functions to access its members instead.
+function Args()
+{
+	return frameElement._DialogArguments ;
+}
+
+function ParentDialog( dialog )
+{
+	return dialog ? dialog._ParentDialog : frameElement._ParentDialog ;
+}
+
+var FCK				= E.FCK ;
+var FCKTools		= E.FCKTools ;
+var FCKDomTools		= E.FCKDomTools ;
+var FCKDialog		= E.FCKDialog ;
+var FCKBrowserInfo	= E.FCKBrowserInfo ;
+var FCKConfig		= E.FCKConfig ;
+
+// Steal the focus so that the caret would no longer stay in the editor iframe.
+window.focus() ;
+
+// Sets the Skin CSS
+document.write( FCKTools.GetStyleHtml( FCKConfig.SkinDialogCSS ) ) ;
+
+// Sets the language direction.
+var langDir = document.documentElement.dir = E.FCKLang.Dir ;
+
+// For IE6-, the fck_dialog_ie6.js is loaded, used to fix limitations in the browser.
+if ( FCKBrowserInfo.IsIE && !FCKBrowserInfo.IsIE7 )
+	document.write( '<' + 'script type="text/javascript" src="' + FCKConfig.SkinPath + 'fck_dialog_ie6.js"><' + '\/script>' ) ;
+
+FCKTools.RegisterDollarFunction( window ) ;
+
+// Resize related functions.
+var Sizer = function()
+{
+	var bAutoSize = false ;
+
+	var retval = {
+		// Sets whether the dialog should auto-resize according to its content's height.
+		SetAutoSize : function( autoSize )
+		{
+			bAutoSize = autoSize ;
+			this.RefreshSize() ;
+		},
+
+		// Fit the dialog container's layout to the inner iframe's external size.
+		RefreshContainerSize : function()
+		{
+			var frmMain = $( 'frmMain' ) ;
+
+			if ( frmMain )
+			{
+				// Get the container size.
+				var height = $( 'contents' ).offsetHeight ;
+
+				// Subtract the size of other elements.
+				height -= $( 'TitleArea' ).offsetHeight ;
+				height -= $( 'TabsRow' ).offsetHeight ;
+				height -= $( 'PopupButtons' ).offsetHeight ;
+
+				frmMain.style.height = Math.max( height, 0 ) + 'px' ;
+			}
+		},
+
+		// Resize and re-layout the dialog.
+		// Triggers the onresize event for the layout logic.
+		ResizeDialog : function( width, height )
+		{
+			FCKDomTools.SetElementStyles( window.frameElement,
+					{
+						'width' : width + 'px',
+						'height' : height + 'px'
+					} ) ;
+
+			// If the skin have defined a function for resize fixes, call it now.
+			if ( typeof window.DoResizeFixes == 'function' )
+				window.DoResizeFixes() ;
+		},
+
+		// if bAutoSize is true, automatically fit the dialog size and layout to
+		// accomodate the inner iframe's internal height.
+		// if bAutoSize is false, then only the layout logic for the dialog decorations
+		// is run to accomodate the inner iframe's external height.
+		RefreshSize : function()
+		{
+			if ( bAutoSize )
+			{
+				var frmMain		= $( 'frmMain' ) ;
+				var innerDoc	= frmMain.contentWindow.document ;
+				var isStrict	= FCKTools.IsStrictMode( innerDoc ) ;
+
+				// Get the size of the frame contents.
+				var innerWidth	= isStrict ? innerDoc.documentElement.scrollWidth : innerDoc.body.scrollWidth ;
+				var innerHeight	= isStrict ? innerDoc.documentElement.scrollHeight : innerDoc.body.scrollHeight ;
+
+				// Get the current frame size.
+				var frameSize = FCKTools.GetViewPaneSize( frmMain.contentWindow ) ;
+
+				var deltaWidth	= innerWidth - frameSize.Width ;
+				var deltaHeight	= innerHeight - frameSize.Height ;
+
+				// If the contents fits the current size.
+				if ( deltaWidth <= 0 && deltaHeight <= 0 )
+					return ;
+
+				var dialogWidth		= frameElement.offsetWidth + Math.max( deltaWidth, 0 ) ;
+				var dialogHeight	= frameElement.offsetHeight + Math.max( deltaHeight, 0 ) ;
+
+				this.ResizeDialog( dialogWidth, dialogHeight ) ;
+			}
+			this.RefreshContainerSize() ;
+		}
+	}
+
+	/**
+	 * Safari seems to have a bug with the time when RefreshSize() is executed - it
+	 * thinks frmMain's innerHeight is 0 if we query the value too soon after the
+	 * page is loaded in some circumstances. (#1316)
+	 * TODO : Maybe this is not needed anymore after #35.
+	 */
+	if ( FCKBrowserInfo.IsSafari )
+	{
+		var originalRefreshSize = retval.RefreshSize ;
+
+		retval.RefreshSize = function()
+		{
+			FCKTools.SetTimeout( originalRefreshSize, 1, retval ) ;
+		}
+	}
+
+	/**
+	 * IE6 has a similar bug where it sometimes thinks $('contents') has an
+	 * offsetHeight of 0 (#2114).
+	 */
+	if ( FCKBrowserInfo.IsIE && !FCKBrowserInfo.IsIE7 )
+	{
+		var originalRefreshContainerSize = retval.RefreshContainerSize ;
+		retval.RefreshContainerSize = function()
+		{
+			FCKTools.SetTimeout( originalRefreshContainerSize, 1, retval ) ;
+		}
+	}
+
+	window.onresize = function()
+	{
+		retval.RefreshContainerSize() ;
+	}
+
+	window.SetAutoSize = FCKTools.Bind( retval, retval.SetAutoSize ) ;
+
+	return retval ;
+}() ;
+
+// Manages the throbber image that appears if the inner part of dialog is taking too long to load.
+var Throbber = function()
+{
+	var timer ;
+
+	var updateThrobber = function()
+	{
+		var throbberParent = $( 'throbberBlock' ) ;
+		var throbberBlocks = throbberParent.childNodes ;
+		var lastClass = throbberParent.lastChild.className ;
+
+		// From the last to the second one, copy the class from the previous one.
+		for ( var i = throbberBlocks.length - 1 ; i > 0 ; i-- )
+			throbberBlocks[i].className = throbberBlocks[i-1].className ;
+
+		// For the first one, copy the last class (rotation).
+		throbberBlocks[0].className = lastClass ;
+	}
+
+	return {
+		Show : function( waitMilliseconds )
+		{
+			// Auto-setup the Show function to be called again after the
+			// requested amount of time.
+			if ( waitMilliseconds && waitMilliseconds > 0 )
+			{
+				timer = FCKTools.SetTimeout( this.Show, waitMilliseconds, this, null, window ) ;
+				return ;
+			}
+
+			var throbberParent = $( 'throbberBlock' ) ;
+
+			if (throbberParent.childNodes.length == 0)
+			{
+				// Create the throbber blocks.
+				var classIds = [ 1,2,3,4,5,4,3,2 ] ;
+				while ( classIds.length > 0 )
+					throbberParent.appendChild( document.createElement( 'div' ) ).className = ' throbber_' + classIds.shift() ;
+			}
+
+			// Center the throbber.
+			var frm = $( 'contents' ) ;
+			var frmCoords = FCKTools.GetDocumentPosition( window, frm ) ;
+			var x = frmCoords.x + ( frm.offsetWidth - throbberParent.offsetWidth ) / 2 ;
+			var y = frmCoords.y + ( frm.offsetHeight - throbberParent.offsetHeight ) / 2 ;
+			throbberParent.style.left = parseInt( x, 10 ) + 'px' ;
+			throbberParent.style.top = parseInt( y, 10 ) + 'px' ;
+
+			// Show it.
+			throbberParent.style.visibility = ''  ;
+
+			// Hide tabs and buttons:
+			$( 'Tabs' ).style.visibility = 'hidden' ;
+			$( 'PopupButtons' ).style.visibility = 'hidden' ;
+
+			// Setup the animation interval.
+			timer = setInterval( updateThrobber, 100 ) ;
+		},
+
+		Hide : function()
+		{
+			if ( timer )
+			{
+				clearInterval( timer ) ;
+				timer = null ;
+			}
+
+			$( 'throbberBlock' ).style.visibility = 'hidden' ;
+
+			// Show tabs and buttons:
+			$( 'Tabs' ).style.visibility = '' ;
+			$( 'PopupButtons' ).style.visibility = '' ;
+		}
+	} ;
+}() ;
+
+// Drag and drop handlers.
+var DragAndDrop = function()
+{
+	var registeredWindows = [] ;
+	var lastCoords ;
+	var currentPos ;
+
+	var cleanUpHandlers = function()
+	{
+		for ( var i = 0 ; i < registeredWindows.length ; i++ )
+		{
+			FCKTools.RemoveEventListener( registeredWindows[i].document, 'mousemove', dragMouseMoveHandler ) ;
+			FCKTools.RemoveEventListener( registeredWindows[i].document, 'mouseup', dragMouseUpHandler ) ;
+		}
+	}
+
+	var dragMouseMoveHandler = function( evt )
+	{
+		if ( !lastCoords )
+			return ;
+
+		if ( !evt )
+			evt = FCKTools.GetElementDocument( this ).parentWindow.event ;
+
+		// Updated the last coordinates.
+		var currentCoords =
+		{
+			x : evt.screenX,
+			y : evt.screenY
+		} ;
+
+		currentPos =
+		{
+			x : currentPos.x + ( currentCoords.x - lastCoords.x ),
+			y : currentPos.y + ( currentCoords.y - lastCoords.y )
+		} ;
+
+		lastCoords = currentCoords ;
+
+		frameElement.style.left	= currentPos.x + 'px' ;
+		frameElement.style.top	= currentPos.y + 'px' ;
+
+		if ( evt.preventDefault )
+			evt.preventDefault() ;
+		else
+			evt.returnValue = false ;
+	}
+
+	var dragMouseUpHandler = function( evt )
+	{
+		if ( !lastCoords )
+			return ;
+		if ( !evt )
+			evt = FCKTools.GetElementDocument( this ).parentWindow.event ;
+		cleanUpHandlers() ;
+		lastCoords = null ;
+	}
+
+	return {
+
+		MouseDownHandler : function( evt )
+		{
+			var view = null ;
+			if ( !evt )
+			{
+				view = FCKTools.GetElementDocument( this ).parentWindow ;
+				evt = view.event ;
+			}
+			else
+				view = evt.view ;
+
+			var target = evt.srcElement || evt.target ;
+			if ( target.id == 'closeButton' || target.className == 'PopupTab' || target.className == 'PopupTabSelected' )
+				return ;
+
+			lastCoords =
+			{
+				x : evt.screenX,
+				y : evt.screenY
+			} ;
+
+			// Save the current IFRAME position.
+			currentPos =
+			{
+				x : parseInt( FCKDomTools.GetCurrentElementStyle( frameElement, 'left' ), 10 ),
+				y : parseInt( FCKDomTools.GetCurrentElementStyle( frameElement, 'top' ), 10 )
+			} ;
+
+			for ( var i = 0 ; i < registeredWindows.length ; i++ )
+			{
+				FCKTools.AddEventListener( registeredWindows[i].document, 'mousemove', dragMouseMoveHandler ) ;
+				FCKTools.AddEventListener( registeredWindows[i].document, 'mouseup', dragMouseUpHandler ) ;
+			}
+
+			if ( evt.preventDefault )
+				evt.preventDefault() ;
+			else
+				evt.returnValue = false ;
+		},
+
+		RegisterHandlers : function( w )
+		{
+			registeredWindows.push( w ) ;
+		}
+	}
+}() ;
+
+// Selection related functions.
+//(Became simple shortcuts after the fix for #1990)
+var Selection =
+{
+	/**
+	 * Ensures that the editing area contains an active selection. This is a
+	 * requirement for IE, as it looses the selection when the focus moves to other
+	 * frames.
+	 */
+	EnsureSelection : function()
+	{
+		FCK.Selection.Restore() ;
+	},
+
+	/**
+	 * Get the FCKSelection object for the editor instance.
+	 */
+	GetSelection : function()
+	{
+		return FCK.Selection ;
+	},
+
+	/**
+	 * Get the selected element in the editing area (for object selections).
+	 */
+	GetSelectedElement : function()
+	{
+		return FCK.Selection.GetSelectedElement() ;
+	}
+}
+
+// Tab related functions.
+var Tabs = function()
+{
+	// Only element ids should be stored here instead of element references since setSelectedTab and TabDiv_OnClick
+	// would build circular references with the element references inside and cause memory leaks in IE6.
+	var oTabs = new Object() ;
+
+	var setSelectedTab = function( tabCode )
+	{
+		for ( var sCode in oTabs )
+		{
+			if ( sCode == tabCode )
+				$( oTabs[sCode] ).className = 'PopupTabSelected' ;
+			else
+				$( oTabs[sCode] ).className = 'PopupTab' ;
+		}
+
+		if ( typeof( window.frames["frmMain"].OnDialogTabChange ) == 'function' )
+			window.frames["frmMain"].OnDialogTabChange( tabCode ) ;
+	}
+
+	function TabDiv_OnClick()
+	{
+		setSelectedTab( this.TabCode ) ;
+	}
+
+	window.AddTab = function( tabCode, tabText, startHidden )
+	{
+		if ( typeof( oTabs[ tabCode ] ) != 'undefined' )
+			return ;
+
+		var eTabsRow = $( 'Tabs' ) ;
+
+		var oCell = eTabsRow.insertCell(  eTabsRow.cells.length - 1 ) ;
+		oCell.noWrap = true ;
+
+		var oDiv = document.createElement( 'DIV' ) ;
+		oDiv.className = 'PopupTab' ;
+		oDiv.innerHTML = tabText ;
+		oDiv.TabCode = tabCode ;
+		oDiv.onclick = TabDiv_OnClick ;
+		oDiv.id = Math.random() ;
+
+		if ( startHidden )
+			oDiv.style.display = 'none' ;
+
+		eTabsRow = $( 'TabsRow' ) ;
+
+		oCell.appendChild( oDiv ) ;
+
+		if ( eTabsRow.style.display == 'none' )
+		{
+			var eTitleArea = $( 'TitleArea' ) ;
+			eTitleArea.className = 'PopupTitle' ;
+
+			oDiv.className = 'PopupTabSelected' ;
+			eTabsRow.style.display = '' ;
+
+			if ( window.onresize )
+				window.onresize() ;
+		}
+
+		oTabs[ tabCode ] = oDiv.id ;
+
+		FCKTools.DisableSelection( oDiv ) ;
+	} ;
+
+	window.SetSelectedTab = setSelectedTab ;
+
+	window.SetTabVisibility = function( tabCode, isVisible )
+	{
+		var oTab = $( oTabs[ tabCode ] ) ;
+		oTab.style.display = isVisible ? '' : 'none' ;
+
+		if ( ! isVisible && oTab.className == 'PopupTabSelected' )
+		{
+			for ( var sCode in oTabs )
+			{
+				if ( $( oTabs[sCode] ).style.display != 'none' )
+				{
+					setSelectedTab( sCode ) ;
+					break ;
+				}
+			}
+		}
+	} ;
+}() ;
+
+// readystatechange handler for registering drag and drop handlers in cover
+// iframes, defined out here to avoid memory leak.
+// Do NOT put this function as a private function as it will induce memory leak
+// in IE and it's not detectable with Drip or sIEve and undetectable leaks are
+// really nasty (sigh).
+var onReadyRegister = function()
+{
+	if ( this.readyState != 'complete' )
+		return ;
+	DragAndDrop.RegisterHandlers( this.contentWindow ) ;
+} ;
+
+// The business logic of the dialog, dealing with operational things like
+// dialog open/dialog close/enable/disable/etc.
+(function()
+{
+	var setOnKeyDown = function( targetDocument )
+	{
+		targetDocument.onkeydown = function ( e )
+		{
+			e = e || event || this.parentWindow.event ;
+			switch ( e.keyCode )
+			{
+				case 13 :		// ENTER
+					var oTarget = e.srcElement || e.target ;
+					if ( oTarget.tagName == 'TEXTAREA' )
+						return true ;
+					Ok() ;
+					return false ;
+
+				case 27 :		// ESC
+					Cancel() ;
+					return false ;
+			}
+			return true ;
+		}
+	} ;
+
+	var contextMenuBlocker = function( e )
+	{
+		var sTagName = e.target.tagName ;
+		if ( ! ( ( sTagName == "INPUT" && e.target.type == "text" ) || sTagName == "TEXTAREA" ) )
+			e.preventDefault() ;
+	} ;
+
+	var disableContextMenu = function( targetDocument )
+	{
+		if ( FCKBrowserInfo.IsIE )
+			return ;
+
+		targetDocument.addEventListener( 'contextmenu', contextMenuBlocker, true ) ;
+	} ;
+
+	// Program entry point.
+	window.Init = function()
+	{
+		// Start the throbber timer.
+		Throbber.Show( 1000 ) ;
+
+		Sizer.RefreshContainerSize() ;
+		LoadInnerDialog() ;
+
+		FCKTools.DisableSelection( document.body ) ;
+
+		// Make the title area draggable.
+		var titleElement = $( 'header' ) ;
+		titleElement.onmousedown = DragAndDrop.MouseDownHandler ;
+
+		// Connect mousemove and mouseup events from dialog frame and outer window to dialog dragging logic.
+		DragAndDrop.RegisterHandlers( window ) ;
+		DragAndDrop.RegisterHandlers( Args().TopWindow ) ;
+
+		// Disable the previous dialog if it exists.
+		if ( ParentDialog() )
+		{
+			ParentDialog().contentWindow.SetEnabled( false ) ;
+			if ( FCKBrowserInfo.IsIE && !FCKBrowserInfo.IsIE7 )
+			{
+				var currentParent = ParentDialog() ;
+				while ( currentParent )
+				{
+					var blockerFrame = currentParent.contentWindow.$( 'blocker' ) ;
+					if ( blockerFrame.readyState == 'complete' )
+						DragAndDrop.RegisterHandlers( blockerFrame.contentWindow ) ;
+					else
+						blockerFrame.onreadystatechange = onReadyRegister ;
+					currentParent = ParentDialog( currentParent ) ;
+				}
+			}
+			else
+			{
+				var currentParent = ParentDialog() ;
+				while ( currentParent )
+				{
+					DragAndDrop.RegisterHandlers( currentParent.contentWindow ) ;
+					currentParent = ParentDialog( currentParent ) ;
+				}
+			}
+		}
+
+		// If this is the only dialog on screen, enable the background cover.
+		if ( FCKBrowserInfo.IsIE && !FCKBrowserInfo.IsIE7 )
+		{
+			var blockerFrame = FCKDialog.GetCover().firstChild ;
+			if ( blockerFrame.readyState == 'complete' )
+				DragAndDrop.RegisterHandlers( blockerFrame.contentWindow ) ;
+			else
+				blockerFrame.onreadystatechange = onReadyRegister;
+		}
+
+		// Add Enter/Esc hotkeys and disable context menu for the dialog.
+		setOnKeyDown( document ) ;
+		disableContextMenu( document ) ;
+	} ;
+
+	window.LoadInnerDialog = function()
+	{
+		if ( window.onresize )
+			window.onresize() ;
+
+		// First of all, translate the dialog box contents.
+		E.FCKLanguageManager.TranslatePage( document ) ;
+
+		// Create the IFRAME that holds the dialog contents.
+		$( 'innerContents' ).innerHTML = '<iframe id="frmMain" src="' + Args().Page + '" name="frmMain" frameborder="0" width="100%" height="100%" scrolling="auto" style="visibility: hidden;" allowtransparency="true"><\/iframe>' ;
+	} ;
+
+	window.InnerDialogLoaded = function()
+	{
+		// If the dialog has been closed before the iframe is loaded, do nothing.
+		if ( !frameElement.parentNode )
+			return null ;
+
+		Throbber.Hide() ;
+
+		var frmMain = $('frmMain') ;
+		var innerWindow = frmMain.contentWindow ;
+		var innerDoc = innerWindow.document ;
+
+		// Show the loaded iframe.
+		frmMain.style.visibility = '' ;
+
+		// Set the language direction.
+		innerDoc.documentElement.dir = langDir ;
+
+		// Sets the Skin CSS.
+		innerDoc.write( FCKTools.GetStyleHtml( FCKConfig.SkinDialogCSS ) ) ;
+
+		setOnKeyDown( innerDoc ) ;
+		disableContextMenu( innerDoc ) ;
+
+		Sizer.RefreshContainerSize();
+
+		DragAndDrop.RegisterHandlers( innerWindow ) ;
+
+		innerWindow.focus() ;
+
+		return E ;
+	} ;
+
+	window.SetOkButton = function( showIt )
+	{
+		$('btnOk').style.visibility = ( showIt ? '' : 'hidden' ) ;
+	} ;
+
+	window.Ok = function()
+	{
+		Selection.EnsureSelection() ;
+
+		var frmMain = window.frames["frmMain"] ;
+
+		if ( frmMain.Ok && frmMain.Ok() )
+			CloseDialog() ;
+		else
+			frmMain.focus() ;
+	} ;
+
+	window.Cancel = function( dontFireChange )
+	{
+		Selection.EnsureSelection() ;
+		return CloseDialog( dontFireChange ) ;
+	} ;
+
+	window.CloseDialog = function( dontFireChange )
+	{
+		Throbber.Hide() ;
+
+		// Points the src to a non-existent location to avoid loading errors later, in case the dialog
+		// haven't been completed loaded at this point.
+		if ( $( 'frmMain' ) )
+			$( 'frmMain' ).src = FCKTools.GetVoidUrl() ;
+
+		if ( !dontFireChange && !FCK.EditMode )
+		{
+			// All dialog windows, by default, will fire the "OnSelectionChange"
+			// event, no matter the Ok or Cancel button has been pressed.
+			// It seems that OnSelectionChange may enter on a concurrency state
+			// on some situations (#1965), so we should put the event firing in
+			// the execution queue instead of executing it immediately.
+			setTimeout( function()
+				{
+					FCK.Events.FireEvent( 'OnSelectionChange' ) ;
+				}, 0 ) ;
+		}
+
+		FCKDialog.OnDialogClose( window ) ;
+	} ;
+
+	window.SetEnabled = function( isEnabled )
+	{
+		var cover = $( 'cover' ) ;
+		cover.style.display = isEnabled ? 'none' : '' ;
+
+		if ( FCKBrowserInfo.IsIE && !FCKBrowserInfo.IsIE7 )
+		{
+			if ( !isEnabled )
+			{
+				// Inser the blocker IFRAME before the cover.
+				var blocker = document.createElement( 'iframe' ) ;
+				blocker.src = FCKTools.GetVoidUrl() ;
+				blocker.hideFocus = true ;
+				blocker.frameBorder = 0 ;
+				blocker.id = blocker.className = 'blocker' ;
+				cover.appendChild( blocker ) ;
+			}
+			else
+			{
+				var blocker = $( 'blocker' ) ;
+				if ( blocker && blocker.parentNode )
+					blocker.parentNode.removeChild( blocker ) ;
+			}
+		}
+	} ;
+})() ;
+// ]]>
+		</script>
+	</head>
+	<body onload="Init();" class="PopupBody">
+		<div class="contents" id="contents">
+			<div id="header">
+				<div id="TitleArea" class="PopupTitle PopupTitleBorder">
+					<script type="text/javascript">
+// <![CDATA[
+document.write( Args().Title ) ;
+// ]]>
+					</script>
+					<div id="closeButton" onclick="Cancel();"></div>
+				</div>
+				<div id="TabsRow" class="PopupTabArea" style="display: none">
+					<table border="0" cellpadding="0" cellspacing="0" width="100%">
+						<tr id="Tabs">
+							<td class="PopupTabEmptyArea">&nbsp;</td>
+							<td class="PopupTabEmptyArea" width="100%">&nbsp;</td>
+						</tr>
+					</table>
+				</div>
+			</div>
+			<div id="innerContents"></div>
+			<div id="PopupButtons" class="PopupButtons">
+				<table border="0" cellpadding="0" cellspacing="0">
+					<tr>
+						<td width="100%">&nbsp;</td>
+						<td nowrap="nowrap">
+							<input id="btnOk" style="visibility: hidden;" type="button" value="Ok" class="Button" onclick="Ok();" fckLang="DlgBtnOK" />
+							&nbsp;
+							<input id="btnCancel" type="button" value="Cancel" class="Button" onclick="Cancel();" fckLang="DlgBtnCancel" />
+						</td>
+					</tr>
+				</table>
+			</div>
+		</div>
+		<div class="tl"></div>
+		<div class="tc"></div>
+		<div class="tr"></div>
+		<div class="ml"></div>
+		<div class="mr"></div>
+		<div class="bl"></div>
+		<div class="bc"></div>
+		<div class="br"></div>
+		<div class="cover" id="cover" style="display:none"></div>
+		<div id="throbberBlock" style="position: absolute; visibility: hidden"></div>
+		<script type="text/javascript">
+// <![CDATA[
+			// Set the class name for language direction.
+			document.body.className += ' ' + langDir ;
+
+			var cover = $( 'cover' ) ;
+			cover.style.backgroundColor = FCKConfig.BackgroundBlockerColor ;
+			FCKDomTools.SetOpacity( cover, FCKConfig.BackgroundBlockerOpacity ) ;
+// ]]>
+		</script>
+	</body>
+</html>


Property changes on: announcement/trunk/src/main/webapp/fckeditor/editor/fckdialog.html
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/webapp/fckeditor/editor/fckeditor.html
===================================================================
--- announcement/trunk/src/main/webapp/fckeditor/editor/fckeditor.html	                        (rev 0)
+++ announcement/trunk/src/main/webapp/fckeditor/editor/fckeditor.html	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,285 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<!--
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2008 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * Main page that holds the editor.
+-->
+<html>
+<head>
+	<title>FCKeditor</title>
+	<meta name="robots" content="noindex, nofollow">
+	<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+	<meta http-equiv="Cache-Control" content="public">
+	<script type="text/javascript">
+
+// Save a reference to the default domain.
+var FCK_ORIGINAL_DOMAIN ;
+
+// Automatically detect the correct document.domain (#123).
+(function()
+{
+	var d = FCK_ORIGINAL_DOMAIN = document.domain ;
+
+	while ( true )
+	{
+		// Test if we can access a parent property.
+		try
+		{
+			var test = window.parent.document.domain ;
+			break ;
+		}
+		catch( e ) {}
+
+		// Remove a domain part: www.mytest.example.com => mytest.example.com => example.com ...
+		d = d.replace( /.*?(?:\.|$)/, '' ) ;
+
+		if ( d.length == 0 )
+			break ;		// It was not able to detect the domain.
+
+		try
+		{
+			document.domain = d ;
+		}
+		catch (e)
+		{
+			break ;
+		}
+	}
+})() ;
+
+// Save a reference to the detected runtime domain.
+var FCK_RUNTIME_DOMAIN = document.domain ;
+
+var FCK_IS_CUSTOM_DOMAIN = ( FCK_ORIGINAL_DOMAIN != FCK_RUNTIME_DOMAIN ) ;
+
+// Instead of loading scripts and CSSs using inline tags, all scripts are
+// loaded by code. In this way we can guarantee the correct processing order,
+// otherwise external scripts and inline scripts could be executed in an
+// unwanted order (IE).
+
+function LoadScript( url )
+{
+	document.write( '<scr' + 'ipt type="text/javascript" src="' + url + '"><\/scr' + 'ipt>' ) ;
+}
+
+// Main editor scripts.
+var sSuffix = ( /*@cc_on!@*/false ) ? 'ie' : 'gecko' ;
+
+LoadScript( 'js/fckeditorcode_' + sSuffix + '.js' ) ;
+
+// Base configuration file.
+LoadScript( '../fckconfig.js' ) ;
+
+	</script>
+	<script type="text/javascript">
+
+// Adobe AIR compatibility file.
+if ( FCKBrowserInfo.IsAIR )
+	LoadScript( 'js/fckadobeair.js' ) ;
+
+if ( FCKBrowserInfo.IsIE )
+{
+	// Remove IE mouse flickering.
+	try
+	{
+		document.execCommand( 'BackgroundImageCache', false, true ) ;
+	}
+	catch (e)
+	{
+		// We have been reported about loading problems caused by the above
+		// line. For safety, let's just ignore errors.
+	}
+
+	// Create the default cleanup object used by the editor.
+	FCK.IECleanup = new FCKIECleanup( window ) ;
+	FCK.IECleanup.AddItem( FCKTempBin, FCKTempBin.Reset ) ;
+	FCK.IECleanup.AddItem( FCK, FCK_Cleanup ) ;
+}
+
+// The first function to be called on selection change must the the styles
+// change checker, because the result of its processing may be used by another
+// functions listening to the same event.
+FCK.Events.AttachEvent( 'OnSelectionChange', function() { FCKStyles.CheckSelectionChanges() ; } ) ;
+
+// The config hidden field is processed immediately, because
+// CustomConfigurationsPath may be set in the page.
+FCKConfig.ProcessHiddenField() ;
+
+// Load the custom configurations file (if defined).
+if ( FCKConfig.CustomConfigurationsPath.length > 0 )
+	LoadScript( FCKConfig.CustomConfigurationsPath ) ;
+
+	</script>
+	<script type="text/javascript">
+
+// Load configurations defined at page level.
+FCKConfig_LoadPageConfig() ;
+
+FCKConfig_PreProcess() ;
+
+// Load the full debug script.
+if ( FCKConfig.Debug )
+	LoadScript( '_source/internals/fckdebug.js' ) ;
+
+	</script>
+	<script type="text/javascript">
+
+// CSS minified by http://iceyboard.no-ip.org/projects/css_compressor (see _dev/css_compression.txt).
+var FCK_InternalCSS			= FCKTools.FixCssUrls( FCKConfig.BasePath + 'css/', 'html{min-height:100%}table.FCK__ShowTableBorders,table.FCK__ShowTableBorders td,table.FCK__ShowTableBorders th{border:#d3d3d3 1px solid}form{border:1px dotted #F00;padding:2px}.FCK__Flash{border:#a9a9a9 1px solid;background-position:center center;background-image:url(images/fck_flashlogo.gif);background-repeat:no-repeat;width:80px;height:80px}.FCK__UnknownObject{border:#a9a9a9 1px solid;background-position:center center;background-image:url(images/fck_plugin.gif);background-repeat:no-repeat;width:80px;height:80px}.FCK__Anchor{border:1px dotted #00F;background-position:center center;background-image:url(images/fck_anchor.gif);background-repeat:no-repeat;width:16px;height:15px;vertical-align:middle}.FCK__AnchorC{border:1px dotted #00F;background-position:1px center;background-image:url(images/fck_anchor.gif);background-repeat:no-repeat;padding-left:18px}a[name]{border:1px dotted #00F;background-position:0 center;background-image:url(images/fck_anchor.gif);background-repeat:no-repeat;padding-left:18px}.FCK__PageBreak{background-position:center center;background-image:url(images/fck_pagebreak.gif);background-repeat:no-repeat;clear:both;display:block;float:none;width:100%;border-top:#999 1px dotted;border-bottom:#999 1px dotted;border-right:0;border-left:0;height:5px}.FCK__InputHidden{width:19px;height:18px;background-image:url(images/fck_hiddenfield.gif);background-repeat:no-repeat;vertical-align:text-bottom;background-position:center center}.FCK__ShowBlocks p,.FCK__ShowBlocks div,.FCK__ShowBlocks pre,.FCK__ShowBlocks address,.FCK__ShowBlocks blockquote,.FCK__ShowBlocks h1,.FCK__ShowBlocks h2,.FCK__ShowBlocks h3,.FCK__ShowBlocks h4,.FCK__ShowBlocks h5,.FCK__ShowBlocks h6{background-repeat:no-repeat;border:1px dotted gray;padding-top:8px;padding-left:8px}.FCK__ShowBlocks p{background-image:url(images/block_p.png)}.FCK__ShowBlocks div{background-image:url(images/block_div.png)}.FCK__ShowBlocks pre{background-image:url(images/block_pre.png)}.FCK__ShowBlocks address{background-image:url(images/block_address.png)}.FCK__ShowBlocks blockquote{background-image:url(images/block_blockquote.png)}.FCK__ShowBlocks h1{background-image:url(images/block_h1.png)}.FCK__ShowBlocks h2{background-image:url(images/block_h2.png)}.FCK__ShowBlocks h3{background-image:url(images/block_h3.png)}.FCK__ShowBlocks h4{background-image:url(images/block_h4.png)}.FCK__ShowBlocks h5{background-image:url(images/block_h5.png)}.FCK__ShowBlocks h6{background-image:url(images/block_h6.png)}' ) ;
+var FCK_ShowTableBordersCSS	= FCKTools.FixCssUrls( FCKConfig.BasePath + 'css/', '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,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}' ) ;
+
+// Popup the debug window if debug mode is set to true. It guarantees that the
+// first debug message will not be lost.
+if ( FCKConfig.Debug )
+	FCKDebug._GetWindow() ;
+
+// Load the active skin CSS.
+document.write( FCKTools.GetStyleHtml( FCKConfig.SkinEditorCSS ) ) ;
+
+// Load the language file.
+FCKLanguageManager.Initialize() ;
+LoadScript( 'lang/' + FCKLanguageManager.ActiveLanguage.Code + '.js' ) ;
+
+	</script>
+	<script type="text/javascript">
+
+// Initialize the editing area context menu.
+FCK_ContextMenu_Init() ;
+
+FCKPlugins.Load() ;
+
+	</script>
+	<script type="text/javascript">
+
+// Set the editor interface direction.
+window.document.dir = FCKLang.Dir ;
+
+	</script>
+	<script type="text/javascript">
+
+window.onload = function()
+{
+	InitializeAPI() ;
+
+	if ( FCKBrowserInfo.IsIE )
+		FCK_PreloadImages() ;
+	else
+		LoadToolbarSetup() ;
+}
+
+function LoadToolbarSetup()
+{
+	FCKeditorAPI._FunctionQueue.Add( LoadToolbar ) ;
+}
+
+function LoadToolbar()
+{
+	var oToolbarSet = FCK.ToolbarSet = FCKToolbarSet_Create() ;
+
+	if ( oToolbarSet.IsLoaded )
+		StartEditor() ;
+	else
+	{
+		oToolbarSet.OnLoad = StartEditor ;
+		oToolbarSet.Load( FCKURLParams['Toolbar'] || 'Default' ) ;
+	}
+}
+
+function StartEditor()
+{
+	// Remove the onload listener.
+	FCK.ToolbarSet.OnLoad = null ;
+
+	FCKeditorAPI._FunctionQueue.Remove( LoadToolbar ) ;
+
+	FCK.Events.AttachEvent( 'OnStatusChange', WaitForActive ) ;
+
+	// Start the editor.
+	FCK.StartEditor() ;
+}
+
+function WaitForActive( editorInstance, newStatus )
+{
+	if ( newStatus == FCK_STATUS_ACTIVE )
+	{
+		if ( FCKBrowserInfo.IsGecko )
+			FCKTools.RunFunction( window.onresize ) ;
+
+		_AttachFormSubmitToAPI() ;
+
+		FCK.SetStatus( FCK_STATUS_COMPLETE ) ;
+
+		// Call the special "FCKeditor_OnComplete" function that should be present in
+		// the HTML page where the editor is located.
+		if ( typeof( window.parent.FCKeditor_OnComplete ) == 'function' )
+			window.parent.FCKeditor_OnComplete( FCK ) ;
+	}
+}
+
+// Gecko browsers doesn't calculate well the IFRAME size so we must
+// recalculate it every time the window size changes.
+if ( FCKBrowserInfo.IsGecko && !FCKBrowserInfo.IsOpera )
+{
+	window.onresize = function( e )
+	{
+		// Running in Chrome makes the window receive the event including subframes.
+		// we care only about this window. Ticket #1642.
+		// #2002: The originalTarget from the event can be the current document, the window, or the editing area.
+		if ( e && e.originalTarget !== document && e.originalTarget !== window && (!e.originalTarget.ownerDocument || e.originalTarget.ownerDocument != document ))
+			return ;
+
+		var oCell = document.getElementById( 'xEditingArea' ) ;
+
+		var eInnerElement = oCell.firstChild ;
+		if ( eInnerElement )
+		{
+			eInnerElement.style.height = '0px' ;
+			eInnerElement.style.height = ( oCell.scrollHeight - 2 ) + 'px' ;
+		}
+	}
+}
+
+	</script>
+</head>
+<body>
+	<table width="100%" cellpadding="0" cellspacing="0" style="height: 100%; table-layout: fixed">
+		<tr id="xToolbarRow" style="display: none">
+			<td id="xToolbarSpace" style="overflow: hidden">
+				<table width="100%" cellpadding="0" cellspacing="0">
+					<tr id="xCollapsed" style="display: none">
+						<td id="xExpandHandle" class="TB_Expand" colspan="3">
+							<img class="TB_ExpandImg" alt="" src="images/spacer.gif" width="8" height="4" /></td>
+					</tr>
+					<tr id="xExpanded" style="display: none">
+						<td id="xTBLeftBorder" class="TB_SideBorder" style="width: 1px; display: none;"></td>
+						<td id="xCollapseHandle" style="display: none" class="TB_Collapse" valign="bottom">
+							<img class="TB_CollapseImg" alt="" src="images/spacer.gif" width="8" height="4" /></td>
+						<td id="xToolbar" class="TB_ToolbarSet"></td>
+						<td class="TB_SideBorder" style="width: 1px"></td>
+					</tr>
+				</table>
+			</td>
+		</tr>
+		<tr>
+			<td id="xEditingArea" valign="top" style="height: 100%"></td>
+		</tr>
+	</table>
+</body>
+</html>


Property changes on: announcement/trunk/src/main/webapp/fckeditor/editor/fckeditor.html
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/webapp/fckeditor/editor/fckeditor.original.html
===================================================================
--- announcement/trunk/src/main/webapp/fckeditor/editor/fckeditor.original.html	                        (rev 0)
+++ announcement/trunk/src/main/webapp/fckeditor/editor/fckeditor.original.html	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,392 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<!--
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2008 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * Main page that holds the editor.
+-->
+<html>
+<head>
+	<title>FCKeditor</title>
+	<meta name="robots" content="noindex, nofollow">
+	<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+	<!--****@Packa*****
+	<meta http-equiv="Cache-Control" content="public">
+	@Packager.RemoveLine -->
+	<script type="text/javascript">
+
+// Save a reference to the default domain.
+var FCK_ORIGINAL_DOMAIN ;
+
+// Automatically detect the correct document.domain (#123).
+(function()
+{
+	var d = FCK_ORIGINAL_DOMAIN = document.domain ;
+
+	while ( true )
+	{
+		// Test if we can access a parent property.
+		try
+		{
+			var test = window.parent.document.domain ;
+			break ;
+		}
+		catch( e ) {}
+
+		// Remove a domain part: www.mytest.example.com => mytest.example.com => example.com ...
+		d = d.replace( /.*?(?:\.|$)/, '' ) ;
+
+		if ( d.length == 0 )
+			break ;		// It was not able to detect the domain.
+
+		try
+		{
+			document.domain = d ;
+		}
+		catch (e)
+		{
+			break ;
+		}
+	}
+})() ;
+
+// Save a reference to the detected runtime domain.
+var FCK_RUNTIME_DOMAIN = document.domain ;
+
+var FCK_IS_CUSTOM_DOMAIN = ( FCK_ORIGINAL_DOMAIN != FCK_RUNTIME_DOMAIN ) ;
+
+// Instead of loading scripts and CSSs using inline tags, all scripts are
+// loaded by code. In this way we can guarantee the correct processing order,
+// otherwise external scripts and inline scripts could be executed in an
+// unwanted order (IE).
+
+function LoadScript( url )
+{
+	document.write( '<scr' + 'ipt type="text/javascript" src="' + url + '"><\/scr' + 'ipt>' ) ;
+}
+
+// Main editor scripts.
+var sSuffix = ( /*@cc_on!@*/false ) ? 'ie' : 'gecko' ;
+
+/* @Packager.RemoveLine
+LoadScript( 'js/fckeditorcode_' + sSuffix + '.js' ) ;
+****@Packa***** */
+// @Packager.Remove.Start
+
+LoadScript( '_source/fckconstants.js' ) ;
+LoadScript( '_source/fckjscoreextensions.js' ) ;
+
+if ( sSuffix == 'ie' )
+	LoadScript( '_source/classes/fckiecleanup.js' ) ;
+
+LoadScript( '_source/internals/fckbrowserinfo.js' ) ;
+LoadScript( '_source/internals/fckurlparams.js' ) ;
+LoadScript( '_source/classes/fckevents.js' ) ;
+LoadScript( '_source/classes/fckdataprocessor.js' ) ;
+LoadScript( '_source/internals/fck.js' ) ;
+LoadScript( '_source/internals/fck_' + sSuffix + '.js' ) ;
+LoadScript( '_source/internals/fckconfig.js' ) ;
+
+LoadScript( '_source/internals/fckdebug_empty.js' ) ;
+LoadScript( '_source/internals/fckdomtools.js' ) ;
+LoadScript( '_source/internals/fcktools.js' ) ;
+LoadScript( '_source/internals/fcktools_' + sSuffix + '.js' ) ;
+LoadScript( '_source/fckeditorapi.js' ) ;
+LoadScript( '_source/classes/fckimagepreloader.js' ) ;
+LoadScript( '_source/internals/fckregexlib.js' ) ;
+LoadScript( '_source/internals/fcklistslib.js' ) ;
+LoadScript( '_source/internals/fcklanguagemanager.js' ) ;
+LoadScript( '_source/internals/fckxhtmlentities.js' ) ;
+LoadScript( '_source/internals/fckxhtml.js' ) ;
+LoadScript( '_source/internals/fckxhtml_' + sSuffix + '.js' ) ;
+LoadScript( '_source/internals/fckcodeformatter.js' ) ;
+LoadScript( '_source/internals/fckundo.js' ) ;
+LoadScript( '_source/classes/fckeditingarea.js' ) ;
+LoadScript( '_source/classes/fckkeystrokehandler.js' ) ;
+
+LoadScript( 'dtd/fck_xhtml10transitional.js' ) ;
+LoadScript( '_source/classes/fckstyle.js' ) ;
+LoadScript( '_source/internals/fckstyles.js' ) ;
+
+LoadScript( '_source/internals/fcklisthandler.js' ) ;
+LoadScript( '_source/classes/fckelementpath.js' ) ;
+LoadScript( '_source/classes/fckdomrange.js' ) ;
+LoadScript( '_source/classes/fckdocumentfragment_' + sSuffix + '.js' ) ;
+LoadScript( '_source/classes/fckw3crange.js' ) ;
+LoadScript( '_source/classes/fckdomrange_' + sSuffix + '.js' ) ;
+LoadScript( '_source/classes/fckdomrangeiterator.js' ) ;
+LoadScript( '_source/classes/fckenterkey.js' ) ;
+
+LoadScript( '_source/internals/fckdocumentprocessor.js' ) ;
+LoadScript( '_source/internals/fckselection.js' ) ;
+LoadScript( '_source/internals/fckselection_' + sSuffix + '.js' ) ;
+
+LoadScript( '_source/internals/fcktablehandler.js' ) ;
+LoadScript( '_source/internals/fcktablehandler_' + sSuffix + '.js' ) ;
+LoadScript( '_source/classes/fckxml.js' ) ;
+LoadScript( '_source/classes/fckxml_' + sSuffix + '.js' ) ;
+
+LoadScript( '_source/commandclasses/fcknamedcommand.js' ) ;
+LoadScript( '_source/commandclasses/fckstylecommand.js' ) ;
+LoadScript( '_source/commandclasses/fck_othercommands.js' ) ;
+LoadScript( '_source/commandclasses/fckshowblocks.js' ) ;
+LoadScript( '_source/commandclasses/fckspellcheckcommand_' + sSuffix + '.js' ) ;
+LoadScript( '_source/commandclasses/fcktextcolorcommand.js' ) ;
+LoadScript( '_source/commandclasses/fckpasteplaintextcommand.js' ) ;
+LoadScript( '_source/commandclasses/fckpastewordcommand.js' ) ;
+LoadScript( '_source/commandclasses/fcktablecommand.js' ) ;
+LoadScript( '_source/commandclasses/fckfitwindow.js' ) ;
+LoadScript( '_source/commandclasses/fcklistcommands.js' ) ;
+LoadScript( '_source/commandclasses/fckjustifycommands.js' ) ;
+LoadScript( '_source/commandclasses/fckindentcommands.js' ) ;
+LoadScript( '_source/commandclasses/fckblockquotecommand.js' ) ;
+LoadScript( '_source/commandclasses/fckcorestylecommand.js' ) ;
+LoadScript( '_source/commandclasses/fckremoveformatcommand.js' ) ;
+LoadScript( '_source/internals/fckcommands.js' ) ;
+
+LoadScript( '_source/classes/fckpanel.js' ) ;
+LoadScript( '_source/classes/fckicon.js' ) ;
+LoadScript( '_source/classes/fcktoolbarbuttonui.js' ) ;
+LoadScript( '_source/classes/fcktoolbarbutton.js' ) ;
+LoadScript( '_source/classes/fckspecialcombo.js' ) ;
+LoadScript( '_source/classes/fcktoolbarspecialcombo.js' ) ;
+LoadScript( '_source/classes/fcktoolbarstylecombo.js' ) ;
+LoadScript( '_source/classes/fcktoolbarfontformatcombo.js' ) ;
+LoadScript( '_source/classes/fcktoolbarfontscombo.js' ) ;
+LoadScript( '_source/classes/fcktoolbarfontsizecombo.js' ) ;
+LoadScript( '_source/classes/fcktoolbarpanelbutton.js' ) ;
+LoadScript( '_source/internals/fcktoolbaritems.js' ) ;
+LoadScript( '_source/classes/fcktoolbar.js' ) ;
+LoadScript( '_source/classes/fcktoolbarbreak_' + sSuffix + '.js' ) ;
+LoadScript( '_source/internals/fcktoolbarset.js' ) ;
+LoadScript( '_source/internals/fckdialog.js' ) ;
+LoadScript( '_source/classes/fckmenuitem.js' ) ;
+LoadScript( '_source/classes/fckmenublock.js' ) ;
+LoadScript( '_source/classes/fckmenublockpanel.js' ) ;
+LoadScript( '_source/classes/fckcontextmenu.js' ) ;
+LoadScript( '_source/internals/fck_contextmenu.js' ) ;
+LoadScript( '_source/classes/fckhtmliterator.js' ) ;
+LoadScript( '_source/classes/fckplugin.js' ) ;
+LoadScript( '_source/internals/fckplugins.js' ) ;
+
+// @Packager.Remove.End
+
+// Base configuration file.
+LoadScript( '../fckconfig.js' ) ;
+
+	</script>
+	<script type="text/javascript">
+
+// Adobe AIR compatibility file.
+if ( FCKBrowserInfo.IsAIR )
+	LoadScript( 'js/fckadobeair.js' ) ;
+
+if ( FCKBrowserInfo.IsIE )
+{
+	// Remove IE mouse flickering.
+	try
+	{
+		document.execCommand( 'BackgroundImageCache', false, true ) ;
+	}
+	catch (e)
+	{
+		// We have been reported about loading problems caused by the above
+		// line. For safety, let's just ignore errors.
+	}
+
+	// Create the default cleanup object used by the editor.
+	FCK.IECleanup = new FCKIECleanup( window ) ;
+	FCK.IECleanup.AddItem( FCKTempBin, FCKTempBin.Reset ) ;
+	FCK.IECleanup.AddItem( FCK, FCK_Cleanup ) ;
+}
+
+// The first function to be called on selection change must the the styles
+// change checker, because the result of its processing may be used by another
+// functions listening to the same event.
+FCK.Events.AttachEvent( 'OnSelectionChange', function() { FCKStyles.CheckSelectionChanges() ; } ) ;
+
+// The config hidden field is processed immediately, because
+// CustomConfigurationsPath may be set in the page.
+FCKConfig.ProcessHiddenField() ;
+
+// Load the custom configurations file (if defined).
+if ( FCKConfig.CustomConfigurationsPath.length > 0 )
+	LoadScript( FCKConfig.CustomConfigurationsPath ) ;
+
+	</script>
+	<script type="text/javascript">
+
+// Load configurations defined at page level.
+FCKConfig_LoadPageConfig() ;
+
+FCKConfig_PreProcess() ;
+
+// Load the full debug script.
+if ( FCKConfig.Debug )
+	LoadScript( '_source/internals/fckdebug.js' ) ;
+
+	</script>
+	<script type="text/javascript">
+
+var FCK_InternalCSS			= FCKConfig.BasePath + 'css/fck_internal.css' ;					// @Packager.RemoveLine
+var FCK_ShowTableBordersCSS	= FCKConfig.BasePath + 'css/fck_showtableborders_gecko.css' ;	// @Packager.RemoveLine
+/* @Packager.RemoveLine
+// CSS minified by http://iceyboard.no-ip.org/projects/css_compressor (see _dev/css_compression.txt).
+var FCK_InternalCSS			= FCKTools.FixCssUrls( FCKConfig.BasePath + 'css/', 'html{min-height:100%}table.FCK__ShowTableBorders,table.FCK__ShowTableBorders td,table.FCK__ShowTableBorders th{border:#d3d3d3 1px solid}form{border:1px dotted #F00;padding:2px}.FCK__Flash{border:#a9a9a9 1px solid;background-position:center center;background-image:url(images/fck_flashlogo.gif);background-repeat:no-repeat;width:80px;height:80px}.FCK__UnknownObject{border:#a9a9a9 1px solid;background-position:center center;background-image:url(images/fck_plugin.gif);background-repeat:no-repeat;width:80px;height:80px}.FCK__Anchor{border:1px dotted #00F;background-position:center center;background-image:url(images/fck_anchor.gif);background-repeat:no-repeat;width:16px;height:15px;vertical-align:middle}.FCK__AnchorC{border:1px dotted #00F;background-position:1px center;background-image:url(images/fck_anchor.gif);background-repeat:no-repeat;padding-left:18px}a[name]{border:1px dotted #00F;background-position:0 center;background-image:url(images/fck_anchor.gif);background-repeat:no-repeat;padding-left:18px}.FCK__PageBreak{background-position:center center;background-image:url(images/fck_pagebreak.gif);background-repeat:no-repeat;clear:both;display:block;float:none;width:100%;border-top:#999 1px dotted;border-bottom:#999 1px dotted;border-right:0;border-left:0;height:5px}.FCK__InputHidden{width:19px;height:18px;background-image:url(images/fck_hiddenfield.gif);background-repeat:no-repeat;vertical-align:text-bottom;background-position:center center}.FCK__ShowBlocks p,.FCK__ShowBlocks div,.FCK__ShowBlocks pre,.FCK__ShowBlocks address,.FCK__ShowBlocks blockquote,.FCK__ShowBlocks h1,.FCK__ShowBlocks h2,.FCK__ShowBlocks h3,.FCK__ShowBlocks h4,.FCK__ShowBlocks h5,.FCK__ShowBlocks h6{background-repeat:no-repeat;border:1px dotted gray;padding-top:8px;padding-left:8px}.FCK__ShowBlocks p{background-image:url(images/block_p.png)}.FCK__ShowBlocks div{background-image:url(images/block_div.png)}.FCK__ShowBlocks pre{background-image:url(images/block_pre.png)}.FCK__ShowBlocks address{background-image:url(images/block_address.png)}.FCK__ShowBlocks blockquote{background-image:url(images/block_blockquote.png)}.FCK__ShowBlocks h1{background-image:url(images/block_h1.png)}.FCK__ShowBlocks h2{background-image:url(images/block_h2.png)}.FCK__ShowBlocks h3{background-image:url(images/block_h3.png)}.FCK__ShowBlocks h4{background-image:url(images/block_h4.png)}.FCK__ShowBlocks h5{background-image:url(images/block_h5.png)}.FCK__ShowBlocks h6{background-image:url(images/block_h6.png)}' ) ;
+var FCK_ShowTableBordersCSS	= FCKTools.FixCssUrls( FCKConfig.BasePath + 'css/', '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,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}' ) ;
+****@Packa***** */
+
+// Popup the debug window if debug mode is set to true. It guarantees that the
+// first debug message will not be lost.
+if ( FCKConfig.Debug )
+	FCKDebug._GetWindow() ;
+
+// Load the active skin CSS.
+document.write( FCKTools.GetStyleHtml( FCKConfig.SkinEditorCSS ) ) ;
+
+// Load the language file.
+FCKLanguageManager.Initialize() ;
+LoadScript( 'lang/' + FCKLanguageManager.ActiveLanguage.Code + '.js' ) ;
+
+	</script>
+	<script type="text/javascript">
+
+// Initialize the editing area context menu.
+FCK_ContextMenu_Init() ;
+
+FCKPlugins.Load() ;
+
+	</script>
+	<script type="text/javascript">
+
+// Set the editor interface direction.
+window.document.dir = FCKLang.Dir ;
+
+	</script>
+	<script type="text/javascript">
+
+window.onload = function()
+{
+	InitializeAPI() ;
+
+	if ( FCKBrowserInfo.IsIE )
+		FCK_PreloadImages() ;
+	else
+		LoadToolbarSetup() ;
+}
+
+function LoadToolbarSetup()
+{
+	FCKeditorAPI._FunctionQueue.Add( LoadToolbar ) ;
+}
+
+function LoadToolbar()
+{
+	var oToolbarSet = FCK.ToolbarSet = FCKToolbarSet_Create() ;
+
+	if ( oToolbarSet.IsLoaded )
+		StartEditor() ;
+	else
+	{
+		oToolbarSet.OnLoad = StartEditor ;
+		oToolbarSet.Load( FCKURLParams['Toolbar'] || 'Default' ) ;
+	}
+}
+
+function StartEditor()
+{
+	// Remove the onload listener.
+	FCK.ToolbarSet.OnLoad = null ;
+
+	FCKeditorAPI._FunctionQueue.Remove( LoadToolbar ) ;
+
+	FCK.Events.AttachEvent( 'OnStatusChange', WaitForActive ) ;
+
+	// Start the editor.
+	FCK.StartEditor() ;
+}
+
+function WaitForActive( editorInstance, newStatus )
+{
+	if ( newStatus == FCK_STATUS_ACTIVE )
+	{
+		if ( FCKBrowserInfo.IsGecko )
+			FCKTools.RunFunction( window.onresize ) ;
+
+		_AttachFormSubmitToAPI() ;
+
+		FCK.SetStatus( FCK_STATUS_COMPLETE ) ;
+
+		// Call the special "FCKeditor_OnComplete" function that should be present in
+		// the HTML page where the editor is located.
+		if ( typeof( window.parent.FCKeditor_OnComplete ) == 'function' )
+			window.parent.FCKeditor_OnComplete( FCK ) ;
+	}
+}
+
+// Gecko browsers doesn't calculate well the IFRAME size so we must
+// recalculate it every time the window size changes.
+if ( FCKBrowserInfo.IsGecko && !FCKBrowserInfo.IsOpera )
+{
+	window.onresize = function( e )
+	{
+		// Running in Chrome makes the window receive the event including subframes.
+		// we care only about this window. Ticket #1642.
+		// #2002: The originalTarget from the event can be the current document, the window, or the editing area.
+		if ( e && e.originalTarget !== document && e.originalTarget !== window && (!e.originalTarget.ownerDocument || e.originalTarget.ownerDocument != document ))
+			return ;
+
+		var oCell = document.getElementById( 'xEditingArea' ) ;
+
+		var eInnerElement = oCell.firstChild ;
+		if ( eInnerElement )
+		{
+			eInnerElement.style.height = '0px' ;
+			eInnerElement.style.height = ( oCell.scrollHeight - 2 ) + 'px' ;
+		}
+	}
+}
+
+	</script>
+</head>
+<body>
+	<table width="100%" cellpadding="0" cellspacing="0" style="height: 100%; table-layout: fixed">
+		<tr id="xToolbarRow" style="display: none">
+			<td id="xToolbarSpace" style="overflow: hidden">
+				<table width="100%" cellpadding="0" cellspacing="0">
+					<tr id="xCollapsed" style="display: none">
+						<td id="xExpandHandle" class="TB_Expand" colspan="3">
+							<img class="TB_ExpandImg" alt="" src="images/spacer.gif" width="8" height="4" /></td>
+					</tr>
+					<tr id="xExpanded" style="display: none">
+						<td id="xTBLeftBorder" class="TB_SideBorder" style="width: 1px; display: none;"></td>
+						<td id="xCollapseHandle" style="display: none" class="TB_Collapse" valign="bottom">
+							<img class="TB_CollapseImg" alt="" src="images/spacer.gif" width="8" height="4" /></td>
+						<td id="xToolbar" class="TB_ToolbarSet"></td>
+						<td class="TB_SideBorder" style="width: 1px"></td>
+					</tr>
+				</table>
+			</td>
+		</tr>
+		<tr>
+			<td id="xEditingArea" valign="top" style="height: 100%"></td>
+		</tr>
+	</table>
+</body>
+</html>


Property changes on: announcement/trunk/src/main/webapp/fckeditor/editor/fckeditor.original.html
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/webapp/fckeditor/editor/filemanager/browser/default/browser.css
===================================================================
--- announcement/trunk/src/main/webapp/fckeditor/editor/filemanager/browser/default/browser.css	                        (rev 0)
+++ announcement/trunk/src/main/webapp/fckeditor/editor/filemanager/browser/default/browser.css	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,87 @@
+/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2008 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * CSS styles used by all pages that compose the File Browser.
+ */
+
+body
+{
+	background-color: #f1f1e3;
+	margin-top:0;
+	margin-bottom:0;
+}
+
+form
+{
+	margin: 0;
+	padding: 0;
+}
+
+.Frame
+{
+	background-color: #f1f1e3;
+	border: thin inset #f1f1e3;
+}
+
+body.FileArea
+{
+	background-color: #ffffff;
+	margin: 10px;
+}
+
+body, td, input, select
+{
+	font-size: 11px;
+	font-family: 'Microsoft Sans Serif' , Arial, Helvetica, Verdana;
+}
+
+.ActualFolder
+{
+	font-weight: bold;
+	font-size: 14px;
+}
+
+.PopupButtons
+{
+	border-top: #d5d59d 1px solid;
+	background-color: #e3e3c7;
+	padding: 7px 10px 7px 10px;
+}
+
+.Button, button
+{
+	color: #3b3b1f;
+	border: #737357 1px solid;
+	background-color: #c7c78f;
+}
+
+.FolderListCurrentFolder img
+{
+	background-image: url(images/FolderOpened.gif);
+}
+
+.FolderListFolder img
+{
+	background-image: url(images/Folder.gif);
+}
+
+.fullHeight {
+	height: 100%;
+}


Property changes on: announcement/trunk/src/main/webapp/fckeditor/editor/filemanager/browser/default/browser.css
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/webapp/fckeditor/editor/filemanager/browser/default/browser.html
===================================================================
--- announcement/trunk/src/main/webapp/fckeditor/editor/filemanager/browser/default/browser.html	                        (rev 0)
+++ announcement/trunk/src/main/webapp/fckeditor/editor/filemanager/browser/default/browser.html	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,200 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Frameset//EN"
+   "http://www.w3.org/TR/html4/frameset.dtd">
+<!--
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2008 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * This page compose the File Browser dialog frameset.
+-->
+<html>
+	<head>
+		<title>FCKeditor - Resources Browser</title>
+		<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+		<link href="browser.css" type="text/css" rel="stylesheet">
+		<script type="text/javascript" src="js/fckxml.js"></script>
+		<script type="text/javascript">
+// Automatically detect the correct document.domain (#1919).
+(function()
+{
+	var d = document.domain ;
+
+	while ( true )
+	{
+		// Test if we can access a parent property.
+		try
+		{
+			var test = window.opener.document.domain ;
+			break ;
+		}
+		catch( e )
+		{}
+
+		// Remove a domain part: www.mytest.example.com => mytest.example.com => example.com ...
+		d = d.replace( /.*?(?:\.|$)/, '' ) ;
+
+		if ( d.length == 0 )
+			break ;		// It was not able to detect the domain.
+
+		try
+		{
+			document.domain = d ;
+		}
+		catch (e)
+		{
+			break ;
+		}
+	}
+})() ;
+
+function GetUrlParam( paramName )
+{
+	var oRegex = new RegExp( '[\?&]' + paramName + '=([^&]+)', 'i' ) ;
+	var oMatch = oRegex.exec( window.top.location.search ) ;
+
+	if ( oMatch && oMatch.length > 1 )
+		return decodeURIComponent( oMatch[1] ) ;
+	else
+		return '' ;
+}
+
+var oConnector = new Object() ;
+oConnector.CurrentFolder	= '/' ;
+
+var sConnUrl = GetUrlParam( 'Connector' ) ;
+
+// Gecko has some problems when using relative URLs (not starting with slash).
+if ( sConnUrl.substr(0,1) != '/' && sConnUrl.indexOf( '://' ) < 0 )
+	sConnUrl = window.location.href.replace( /browser.html.*$/, '' ) + sConnUrl ;
+
+oConnector.ConnectorUrl = sConnUrl + ( sConnUrl.indexOf('?') != -1 ? '&' : '?' ) ;
+
+var sServerPath = GetUrlParam( 'ServerPath' ) ;
+if ( sServerPath.length > 0 )
+	oConnector.ConnectorUrl += 'ServerPath=' + encodeURIComponent( sServerPath ) + '&' ;
+
+oConnector.ResourceType		= GetUrlParam( 'Type' ) ;
+oConnector.ShowAllTypes		= ( oConnector.ResourceType.length == 0 ) ;
+
+if ( oConnector.ShowAllTypes )
+	oConnector.ResourceType = 'File' ;
+
+oConnector.SendCommand = function( command, params, callBackFunction )
+{
+	var sUrl = this.ConnectorUrl + 'Command=' + command ;
+	sUrl += '&Type=' + this.ResourceType ;
+	sUrl += '&CurrentFolder=' + encodeURIComponent( this.CurrentFolder ) ;
+
+	if ( params ) sUrl += '&' + params ;
+
+	// Add a random salt to avoid getting a cached version of the command execution
+	sUrl += '&uuid=' + new Date().getTime() ;
+
+	var oXML = new FCKXml() ;
+
+	if ( callBackFunction )
+		oXML.LoadUrl( sUrl, callBackFunction ) ;	// Asynchronous load.
+	else
+		return oXML.LoadUrl( sUrl ) ;
+
+	return null ;
+}
+
+oConnector.CheckError = function( responseXml )
+{
+	var iErrorNumber = 0 ;
+	var oErrorNode = responseXml.SelectSingleNode( 'Connector/Error' ) ;
+
+	if ( oErrorNode )
+	{
+		iErrorNumber = parseInt( oErrorNode.attributes.getNamedItem('number').value, 10 ) ;
+
+		switch ( iErrorNumber )
+		{
+			case 0 :
+				break ;
+			case 1 :	// Custom error. Message placed in the "text" attribute.
+				alert( oErrorNode.attributes.getNamedItem('text').value ) ;
+				break ;
+			case 101 :
+				alert( 'Folder already exists' ) ;
+				break ;
+			case 102 :
+				alert( 'Invalid folder name' ) ;
+				break ;
+			case 103 :
+				alert( 'You have no permissions to create the folder' ) ;
+				break ;
+			case 110 :
+				alert( 'Unknown error creating folder' ) ;
+				break ;
+			default :
+				alert( 'Error on your request. Error number: ' + iErrorNumber ) ;
+				break ;
+		}
+	}
+	return iErrorNumber ;
+}
+
+var oIcons = new Object() ;
+
+oIcons.AvailableIconsArray = [
+	'ai','avi','bmp','cs','dll','doc','exe','fla','gif','htm','html','jpg','js',
+	'mdb','mp3','pdf','png','ppt','rdp','swf','swt','txt','vsd','xls','xml','zip' ] ;
+
+oIcons.AvailableIcons = new Object() ;
+
+for ( var i = 0 ; i < oIcons.AvailableIconsArray.length ; i++ )
+	oIcons.AvailableIcons[ oIcons.AvailableIconsArray[i] ] = true ;
+
+oIcons.GetIcon = function( fileName )
+{
+	var sExtension = fileName.substr( fileName.lastIndexOf('.') + 1 ).toLowerCase() ;
+
+	if ( this.AvailableIcons[ sExtension ] == true )
+		return sExtension ;
+	else
+		return 'default.icon' ;
+}
+
+function OnUploadCompleted( errorNumber, fileUrl, fileName, customMsg )
+{
+	if (errorNumber == "1")
+		window.frames['frmUpload'].OnUploadCompleted( errorNumber, customMsg ) ;
+	else
+		window.frames['frmUpload'].OnUploadCompleted( errorNumber, fileName ) ;
+}
+
+		</script>
+	</head>
+	<frameset cols="150,*" class="Frame" framespacing="3" bordercolor="#f1f1e3" frameborder="1">
+		<frameset rows="50,*" framespacing="0">
+			<frame src="frmresourcetype.html" scrolling="no" frameborder="0">
+			<frame name="frmFolders" src="frmfolders.html" scrolling="auto" frameborder="1">
+		</frameset>
+		<frameset rows="50,*,50" framespacing="0">
+			<frame name="frmActualFolder" src="frmactualfolder.html" scrolling="no" frameborder="0">
+			<frame name="frmResourcesList" src="frmresourceslist.html" scrolling="auto" frameborder="1">
+			<frameset cols="150,*,0" framespacing="0" frameborder="0">
+				<frame name="frmCreateFolder" src="frmcreatefolder.html" scrolling="no" frameborder="0">
+				<frame name="frmUpload" src="frmupload.html" scrolling="no" frameborder="0">
+				<frame name="frmUploadWorker" src="javascript:void(0)" scrolling="no" frameborder="0">
+			</frameset>
+		</frameset>
+	</frameset>
+</html>


Property changes on: announcement/trunk/src/main/webapp/fckeditor/editor/filemanager/browser/default/browser.html
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/webapp/fckeditor/editor/filemanager/browser/default/frmactualfolder.html
===================================================================
--- announcement/trunk/src/main/webapp/fckeditor/editor/filemanager/browser/default/frmactualfolder.html	                        (rev 0)
+++ announcement/trunk/src/main/webapp/fckeditor/editor/filemanager/browser/default/frmactualfolder.html	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,95 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<!--
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2008 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * This page shows the actual folder path.
+-->
+<html>
+	<head>
+		<title>Folder path</title>
+		<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+		<link href="browser.css" type="text/css" rel="stylesheet">
+		<script type="text/javascript">
+// Automatically detect the correct document.domain (#1919).
+(function()
+{
+	var d = document.domain ;
+
+	while ( true )
+	{
+		// Test if we can access a parent property.
+		try
+		{
+			var test = window.top.opener.document.domain ;
+			break ;
+		}
+		catch( e )
+		{}
+
+		// Remove a domain part: www.mytest.example.com => mytest.example.com => example.com ...
+		d = d.replace( /.*?(?:\.|$)/, '' ) ;
+
+		if ( d.length == 0 )
+			break ;		// It was not able to detect the domain.
+
+		try
+		{
+			document.domain = d ;
+		}
+		catch (e)
+		{
+			break ;
+		}
+	}
+})() ;
+
+function SetCurrentFolder( resourceType, folderPath )
+{
+	document.getElementById('tdName').innerHTML = folderPath ;
+}
+
+window.onload = function()
+{
+	window.top.IsLoadedActualFolder = true ;
+}
+
+		</script>
+	</head>
+	<body>
+		<table class="fullHeight" cellSpacing="0" cellPadding="0" width="100%" border="0">
+			<tr>
+				<td>
+					<button style="WIDTH: 100%" type="button">
+						<table cellSpacing="0" cellPadding="0" width="100%" border="0">
+							<tr>
+								<td><img height="32" alt="" src="images/FolderOpened32.gif" width="32"></td>
+								<td>&nbsp;</td>
+								<td id="tdName" width="100%" nowrap class="ActualFolder">/</td>
+								<td>&nbsp;</td>
+								<td><img height="8" src="images/ButtonArrow.gif" width="12" alt=""></td>
+								<td>&nbsp;</td>
+							</tr>
+						</table>
+					</button>
+				</td>
+			</tr>
+		</table>
+	</body>
+</html>


Property changes on: announcement/trunk/src/main/webapp/fckeditor/editor/filemanager/browser/default/frmactualfolder.html
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/webapp/fckeditor/editor/filemanager/browser/default/frmcreatefolder.html
===================================================================
--- announcement/trunk/src/main/webapp/fckeditor/editor/filemanager/browser/default/frmcreatefolder.html	                        (rev 0)
+++ announcement/trunk/src/main/webapp/fckeditor/editor/filemanager/browser/default/frmcreatefolder.html	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,114 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<!--
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2008 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * Page used to create new folders in the current folder.
+-->
+<html>
+	<head>
+		<title>Create Folder</title>
+		<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+		<link href="browser.css" type="text/css" rel="stylesheet">
+		<script type="text/javascript" src="js/common.js"></script>
+		<script type="text/javascript">
+
+function SetCurrentFolder( resourceType, folderPath )
+{
+	oConnector.ResourceType = resourceType ;
+	oConnector.CurrentFolder = folderPath ;
+}
+
+function CreateFolder()
+{
+	var sFolderName ;
+
+	while ( true )
+	{
+		sFolderName = prompt( 'Type the name of the new folder:', '' ) ;
+
+		if ( sFolderName == null )
+			return ;
+		else if ( sFolderName.length == 0 )
+			alert( 'Please type the folder name' ) ;
+		else
+			break ;
+	}
+
+	oConnector.SendCommand( 'CreateFolder', 'NewFolderName=' + encodeURIComponent( sFolderName) , CreateFolderCallBack ) ;
+}
+
+function CreateFolderCallBack( fckXml )
+{
+	if ( oConnector.CheckError( fckXml ) == 0 )
+		window.parent.frames['frmResourcesList'].Refresh() ;
+
+	/*
+	// Get the current folder path.
+	var oNode = fckXml.SelectSingleNode( 'Connector/Error' ) ;
+	var iErrorNumber = parseInt( oNode.attributes.getNamedItem('number').value ) ;
+
+	switch ( iErrorNumber )
+	{
+		case 0 :
+			window.parent.frames['frmResourcesList'].Refresh() ;
+			break ;
+		case 101 :
+			alert( 'Folder already exists' ) ;
+			break ;
+		case 102 :
+			alert( 'Invalid folder name' ) ;
+			break ;
+		case 103 :
+			alert( 'You have no permissions to create the folder' ) ;
+			break ;
+		case 110 :
+			alert( 'Unknown error creating folder' ) ;
+			break ;
+		default :
+			alert( 'Error creating folder. Error number: ' + iErrorNumber ) ;
+			break ;
+	}
+	*/
+}
+
+window.onload = function()
+{
+	window.top.IsLoadedCreateFolder = true ;
+}
+		</script>
+	</head>
+	<body>
+		<table class="fullHeight" cellSpacing="0" cellPadding="0" width="100%" border="0">
+			<tr>
+				<td>
+					<button type="button" style="WIDTH: 100%" onclick="CreateFolder();">
+						<table cellSpacing="0" cellPadding="0" border="0">
+							<tr>
+								<td><img height="16" alt="" src="images/Folder.gif" width="16"></td>
+								<td>&nbsp;</td>
+								<td nowrap>Create New Folder</td>
+							</tr>
+						</table>
+					</button>
+				</td>
+			</tr>
+		</table>
+	</body>
+</html>


Property changes on: announcement/trunk/src/main/webapp/fckeditor/editor/filemanager/browser/default/frmcreatefolder.html
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/webapp/fckeditor/editor/filemanager/browser/default/frmfolders.html
===================================================================
--- announcement/trunk/src/main/webapp/fckeditor/editor/filemanager/browser/default/frmfolders.html	                        (rev 0)
+++ announcement/trunk/src/main/webapp/fckeditor/editor/filemanager/browser/default/frmfolders.html	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,198 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<!--
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2008 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * This page shows the list of folders available in the parent folder
+ * of the current folder.
+-->
+<html>
+	<head>
+		<title>Folders</title>
+		<link href="browser.css" type="text/css" rel="stylesheet">
+		<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+		<script type="text/javascript" src="js/common.js"></script>
+		<script type="text/javascript">
+
+var sActiveFolder ;
+
+var bIsLoaded = false ;
+var iIntervalId ;
+
+var oListManager = new Object() ;
+
+oListManager.Init = function()
+{
+	this.Table = document.getElementById('tableFiles') ;
+	this.UpRow = document.getElementById('trUp') ;
+
+	this.TableRows = new Object() ;
+}
+
+oListManager.Clear = function()
+{
+	// Remove all other rows available.
+	while ( this.Table.rows.length > 1 )
+		this.Table.deleteRow(1) ;
+
+	// Reset the TableRows collection.
+	this.TableRows = new Object() ;
+}
+
+oListManager.AddItem = function( folderName, folderPath )
+{
+	// Create the new row.
+	var oRow = this.Table.insertRow(-1) ;
+	oRow.className = 'FolderListFolder' ;
+
+	// Build the link to view the folder.
+	var sLink = '<a href="#" onclick="OpenFolder(\'' + folderPath + '\');return false;">' ;
+
+	// Add the folder icon cell.
+	var oCell = oRow.insertCell(-1) ;
+	oCell.width = 16 ;
+	oCell.innerHTML = sLink + '<img alt="" src="images/spacer.gif" width="16" height="16" border="0"><\/a>' ;
+
+	// Add the folder name cell.
+	oCell = oRow.insertCell(-1) ;
+	oCell.noWrap = true ;
+	oCell.innerHTML = '&nbsp;' + sLink + folderName + '<\/a>' ;
+
+	this.TableRows[ folderPath ] = oRow ;
+}
+
+oListManager.ShowUpFolder = function( upFolderPath )
+{
+	this.UpRow.style.display = ( upFolderPath != null ? '' : 'none' ) ;
+
+	if ( upFolderPath != null )
+	{
+		document.getElementById('linkUpIcon').onclick = document.getElementById('linkUp').onclick = function()
+		{
+			LoadFolders( upFolderPath ) ;
+			return false ;
+		}
+	}
+}
+
+function CheckLoaded()
+{
+	if ( window.top.IsLoadedActualFolder
+		&& window.top.IsLoadedCreateFolder
+		&& window.top.IsLoadedUpload
+		&& window.top.IsLoadedResourcesList )
+	{
+		window.clearInterval( iIntervalId ) ;
+		bIsLoaded = true ;
+		OpenFolder( sActiveFolder ) ;
+	}
+}
+
+function OpenFolder( folderPath )
+{
+	sActiveFolder = folderPath ;
+
+	if ( ! bIsLoaded )
+	{
+		if ( ! iIntervalId )
+			iIntervalId = window.setInterval( CheckLoaded, 100 ) ;
+		return ;
+	}
+
+	// Change the style for the select row (to show the opened folder).
+	for ( var sFolderPath in oListManager.TableRows )
+	{
+		oListManager.TableRows[ sFolderPath ].className =
+			( sFolderPath == folderPath ? 'FolderListCurrentFolder' : 'FolderListFolder' ) ;
+	}
+
+	// Set the current folder in all frames.
+	window.parent.frames['frmActualFolder'].SetCurrentFolder( oConnector.ResourceType, folderPath ) ;
+	window.parent.frames['frmCreateFolder'].SetCurrentFolder( oConnector.ResourceType, folderPath ) ;
+	window.parent.frames['frmUpload'].SetCurrentFolder( oConnector.ResourceType, folderPath ) ;
+
+	// Load the resources list for this folder.
+	window.parent.frames['frmResourcesList'].LoadResources( oConnector.ResourceType, folderPath ) ;
+}
+
+function LoadFolders( folderPath )
+{
+	// Clear the folders list.
+	oListManager.Clear() ;
+
+	// Get the parent folder path.
+	var sParentFolderPath ;
+	if ( folderPath != '/' )
+		sParentFolderPath = folderPath.substring( 0, folderPath.lastIndexOf( '/', folderPath.length - 2 ) + 1 ) ;
+
+	// Show/Hide the Up Folder.
+	oListManager.ShowUpFolder( sParentFolderPath ) ;
+
+	if ( folderPath != '/' )
+	{
+		sActiveFolder = folderPath ;
+		oConnector.CurrentFolder = sParentFolderPath ;
+		oConnector.SendCommand( 'GetFolders', null, GetFoldersCallBack ) ;
+	}
+	else
+		OpenFolder( '/' ) ;
+}
+
+function GetFoldersCallBack( fckXml )
+{
+	if ( oConnector.CheckError( fckXml ) != 0 )
+		return ;
+
+	// Get the current folder path.
+	var oNode = fckXml.SelectSingleNode( 'Connector/CurrentFolder' ) ;
+	var sCurrentFolderPath = oNode.attributes.getNamedItem('path').value ;
+
+	var oNodes = fckXml.SelectNodes( 'Connector/Folders/Folder' ) ;
+
+	for ( var i = 0 ; i < oNodes.length ; i++ )
+	{
+		var sFolderName = oNodes[i].attributes.getNamedItem('name').value ;
+		oListManager.AddItem( sFolderName, sCurrentFolderPath + sFolderName + '/' ) ;
+	}
+
+	OpenFolder( sActiveFolder ) ;
+}
+
+function SetResourceType( type )
+{
+	oConnector.ResourceType = type ;
+	LoadFolders( '/' ) ;
+}
+
+window.onload = function()
+{
+	oListManager.Init() ;
+	LoadFolders( '/' ) ;
+}
+		</script>
+	</head>
+	<body class="FileArea">
+		<table id="tableFiles" cellSpacing="0" cellPadding="0" width="100%" border="0">
+			<tr id="trUp" style="DISPLAY: none">
+				<td width="16"><a id="linkUpIcon" href="#"><img alt="" src="images/FolderUp.gif" width="16" height="16" border="0"></a></td>
+				<td nowrap width="100%">&nbsp;<a id="linkUp" href="#">..</a></td>
+			</tr>
+		</table>
+	</body>
+</html>


Property changes on: announcement/trunk/src/main/webapp/fckeditor/editor/filemanager/browser/default/frmfolders.html
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/webapp/fckeditor/editor/filemanager/browser/default/frmresourceslist.html
===================================================================
--- announcement/trunk/src/main/webapp/fckeditor/editor/filemanager/browser/default/frmresourceslist.html	                        (rev 0)
+++ announcement/trunk/src/main/webapp/fckeditor/editor/filemanager/browser/default/frmresourceslist.html	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,169 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<!--
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2008 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * This page shows all resources available in a folder in the File Browser.
+-->
+<html>
+<head>
+	<title>Resources</title>
+	<link href="browser.css" type="text/css" rel="stylesheet">
+	<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+	<script type="text/javascript" src="js/common.js"></script>
+	<script type="text/javascript">
+
+var oListManager = new Object() ;
+
+oListManager.Clear = function()
+{
+	document.body.innerHTML = '' ;
+}
+
+function ProtectPath(path)
+{
+	path = path.replace( /\\/g, '\\\\') ;
+	path = path.replace( /'/g, '\\\'') ;
+	return path ;
+}
+
+oListManager.GetFolderRowHtml = function( folderName, folderPath )
+{
+	// Build the link to view the folder.
+	var sLink = '<a href="#" onclick="OpenFolder(\'' + ProtectPath( folderPath ) + '\');return false;">' ;
+
+	return '<tr>' +
+			'<td width="16">' +
+				sLink +
+				'<img alt="" src="images/Folder.gif" width="16" height="16" border="0"><\/a>' +
+			'<\/td><td nowrap colspan="2">&nbsp;' +
+				sLink +
+				folderName +
+				'<\/a>' +
+		'<\/td><\/tr>' ;
+}
+
+oListManager.GetFileRowHtml = function( fileName, fileUrl, fileSize )
+{
+	// Build the link to view the folder.
+	var sLink = '<a href="#" onclick="OpenFile(\'' + ProtectPath( fileUrl ) + '\');return false;">' ;
+
+	// Get the file icon.
+	var sIcon = oIcons.GetIcon( fileName ) ;
+
+	return '<tr>' +
+			'<td width="16">' +
+				sLink +
+				'<img alt="" src="images/icons/' + sIcon + '.gif" width="16" height="16" border="0"><\/a>' +
+			'<\/td><td>&nbsp;' +
+				sLink +
+				fileName +
+				'<\/a>' +
+			'<\/td><td align="right" nowrap>&nbsp;' +
+				fileSize +
+				' KB' +
+		'<\/td><\/tr>' ;
+}
+
+function OpenFolder( folderPath )
+{
+	// Load the resources list for this folder.
+	window.parent.frames['frmFolders'].LoadFolders( folderPath ) ;
+}
+
+function OpenFile( fileUrl )
+{
+	window.top.opener.SetUrl( encodeURI( fileUrl ).replace( '#', '%23' ) ) ;
+	window.top.close() ;
+	window.top.opener.focus() ;
+}
+
+function LoadResources( resourceType, folderPath )
+{
+	oListManager.Clear() ;
+	oConnector.ResourceType = resourceType ;
+	oConnector.CurrentFolder = folderPath ;
+	oConnector.SendCommand( 'GetFoldersAndFiles', null, GetFoldersAndFilesCallBack ) ;
+}
+
+function Refresh()
+{
+	LoadResources( oConnector.ResourceType, oConnector.CurrentFolder ) ;
+}
+
+function GetFoldersAndFilesCallBack( fckXml )
+{
+	if ( oConnector.CheckError( fckXml ) != 0 )
+		return ;
+
+	// Get the current folder path.
+	var oFolderNode = fckXml.SelectSingleNode( 'Connector/CurrentFolder' ) ;
+	if ( oFolderNode == null )
+	{
+		alert( 'The server didn\'t reply with a proper XML data. Please check your configuration.' ) ;
+		return ;
+	}
+	var sCurrentFolderPath	= oFolderNode.attributes.getNamedItem('path').value ;
+	var sCurrentFolderUrl	= oFolderNode.attributes.getNamedItem('url').value ;
+
+//	var dTimer = new Date() ;
+
+	var oHtml = new StringBuilder( '<table id="tableFiles" cellspacing="1" cellpadding="0" width="100%" border="0">' ) ;
+
+	// Add the Folders.
+	var oNodes ;
+	oNodes = fckXml.SelectNodes( 'Connector/Folders/Folder' ) ;
+	for ( var i = 0 ; i < oNodes.length ; i++ )
+	{
+		var sFolderName = oNodes[i].attributes.getNamedItem('name').value ;
+		oHtml.Append( oListManager.GetFolderRowHtml( sFolderName, sCurrentFolderPath + sFolderName + "/" ) ) ;
+	}
+
+	// Add the Files.
+	oNodes = fckXml.SelectNodes( 'Connector/Files/File' ) ;
+	for ( var j = 0 ; j < oNodes.length ; j++ )
+	{
+		var oNode = oNodes[j] ;
+		var sFileName = oNode.attributes.getNamedItem('name').value ;
+		var sFileSize = oNode.attributes.getNamedItem('size').value ;
+
+		// Get the optional "url" attribute. If not available, build the url.
+		var oFileUrlAtt = oNodes[j].attributes.getNamedItem('url') ;
+		var sFileUrl = oFileUrlAtt != null ? oFileUrlAtt.value : sCurrentFolderUrl + sFileName ;
+
+		oHtml.Append( oListManager.GetFileRowHtml( sFileName, sFileUrl, sFileSize ) ) ;
+	}
+
+	oHtml.Append( '<\/table>' ) ;
+
+	document.body.innerHTML = oHtml.ToString() ;
+
+//	window.top.document.title = 'Finished processing in ' + ( ( ( new Date() ) - dTimer ) / 1000 ) + ' seconds' ;
+
+}
+
+window.onload = function()
+{
+	window.top.IsLoadedResourcesList = true ;
+}
+	</script>
+</head>
+<body class="FileArea">
+</body>
+</html>


Property changes on: announcement/trunk/src/main/webapp/fckeditor/editor/filemanager/browser/default/frmresourceslist.html
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/webapp/fckeditor/editor/filemanager/browser/default/frmresourcetype.html
===================================================================
--- announcement/trunk/src/main/webapp/fckeditor/editor/filemanager/browser/default/frmresourcetype.html	                        (rev 0)
+++ announcement/trunk/src/main/webapp/fckeditor/editor/filemanager/browser/default/frmresourcetype.html	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,69 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<!--
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2008 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * This page shows the list of available resource types.
+-->
+<html>
+	<head>
+		<title>Available types</title>
+		<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+		<link href="browser.css" type="text/css" rel="stylesheet">
+		<script type="text/javascript" src="js/common.js"></script>
+		<script type="text/javascript">
+
+function SetResourceType( type )
+{
+	window.parent.frames["frmFolders"].SetResourceType( type ) ;
+}
+
+var aTypes = [
+	['File','File'],
+	['Image','Image'],
+	['Flash','Flash'],
+	['Media','Media']
+] ;
+
+window.onload = function()
+{
+	var oCombo = document.getElementById('cmbType') ;
+	oCombo.innerHTML = '' ;
+	for ( var i = 0 ; i < aTypes.length ; i++ )
+	{
+		if ( oConnector.ShowAllTypes || aTypes[i][0] == oConnector.ResourceType )
+			AddSelectOption( oCombo, aTypes[i][1], aTypes[i][0] ) ;
+	}
+}
+
+		</script>
+	</head>
+	<body>
+		<table class="fullHeight" cellSpacing="0" cellPadding="0" width="100%" border="0">
+			<tr>
+				<td nowrap>
+					Resource Type<BR>
+					<select id="cmbType" style="WIDTH: 100%" onchange="SetResourceType(this.value);">
+						<option>&nbsp;
+					</select>
+				</td>
+			</tr>
+		</table>
+	</body>
+</html>


Property changes on: announcement/trunk/src/main/webapp/fckeditor/editor/filemanager/browser/default/frmresourcetype.html
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/webapp/fckeditor/editor/filemanager/browser/default/frmupload.html
===================================================================
--- announcement/trunk/src/main/webapp/fckeditor/editor/filemanager/browser/default/frmupload.html	                        (rev 0)
+++ announcement/trunk/src/main/webapp/fckeditor/editor/filemanager/browser/default/frmupload.html	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,115 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<!--
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2008 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * Page used to upload new files in the current folder.
+-->
+<html>
+	<head>
+		<title>File Upload</title>
+		<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+		<link href="browser.css" type="text/css" rel="stylesheet" >
+		<script type="text/javascript" src="js/common.js"></script>
+		<script type="text/javascript">
+
+function SetCurrentFolder( resourceType, folderPath )
+{
+	var sUrl = oConnector.ConnectorUrl + 'Command=FileUpload' ;
+	sUrl += '&Type=' + resourceType ;
+	sUrl += '&CurrentFolder=' + encodeURIComponent( folderPath ) ;
+
+	document.getElementById('frmUpload').action = sUrl ;
+}
+
+function OnSubmit()
+{
+	if ( document.getElementById('NewFile').value.length == 0 )
+	{
+		alert( 'Please select a file from your computer' ) ;
+		return false ;
+	}
+
+	// Set the interface elements.
+	document.getElementById('eUploadMessage').innerHTML = 'Upload a new file in this folder (Upload in progress, please wait...)' ;
+	document.getElementById('btnUpload').disabled = true ;
+
+	return true ;
+}
+
+function OnUploadCompleted( errorNumber, data )
+{
+	// Reset the Upload Worker Frame.
+	window.parent.frames['frmUploadWorker'].location = 'javascript:void(0)' ;
+
+	// Reset the upload form (On IE we must do a little trick to avoid problems).
+	if ( document.all )
+		document.getElementById('NewFile').outerHTML = '<input id="NewFile" name="NewFile" style="WIDTH: 100%" type="file">' ;
+	else
+		document.getElementById('frmUpload').reset() ;
+
+	// Reset the interface elements.
+	document.getElementById('eUploadMessage').innerHTML = 'Upload a new file in this folder' ;
+	document.getElementById('btnUpload').disabled = false ;
+
+	switch ( errorNumber )
+	{
+		case 0 :
+			window.parent.frames['frmResourcesList'].Refresh() ;
+			break ;
+		case 1 :	// Custom error.
+			alert( data ) ;
+			break ;
+		case 201 :
+			window.parent.frames['frmResourcesList'].Refresh() ;
+			alert( 'A file with the same name is already available. The uploaded file has been renamed to "' + data + '"' ) ;
+			break ;
+		case 202 :
+			alert( 'Invalid file' ) ;
+			break ;
+		default :
+			alert( 'Error on file upload. Error number: ' + errorNumber ) ;
+			break ;
+	}
+}
+
+window.onload = function()
+{
+	window.top.IsLoadedUpload = true ;
+}
+		</script>
+	</head>
+	<body>
+		<form id="frmUpload" action="" target="frmUploadWorker" method="post" enctype="multipart/form-data" onsubmit="return OnSubmit();">
+			<table class="fullHeight" cellspacing="0" cellpadding="0" width="100%" border="0">
+				<tr>
+					<td nowrap="nowrap">
+						<span id="eUploadMessage">Upload a new file in this folder</span><br>
+						<table cellspacing="0" cellpadding="0" width="100%" border="0">
+							<tr>
+								<td width="100%"><input id="NewFile" name="NewFile" style="WIDTH: 100%" type="file"></td>
+								<td nowrap="nowrap">&nbsp;<input id="btnUpload" type="submit" value="Upload"></td>
+							</tr>
+						</table>
+					</td>
+				</tr>
+			</table>
+		</form>
+	</body>
+</html>


Property changes on: announcement/trunk/src/main/webapp/fckeditor/editor/filemanager/browser/default/frmupload.html
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/webapp/fckeditor/editor/filemanager/browser/default/images/ButtonArrow.gif
===================================================================
(Binary files differ)


Property changes on: announcement/trunk/src/main/webapp/fckeditor/editor/filemanager/browser/default/images/ButtonArrow.gif
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: announcement/trunk/src/main/webapp/fckeditor/editor/filemanager/browser/default/images/Folder.gif
===================================================================
(Binary files differ)


Property changes on: announcement/trunk/src/main/webapp/fckeditor/editor/filemanager/browser/default/images/Folder.gif
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: announcement/trunk/src/main/webapp/fckeditor/editor/filemanager/browser/default/images/Folder32.gif
===================================================================
(Binary files differ)


Property changes on: announcement/trunk/src/main/webapp/fckeditor/editor/filemanager/browser/default/images/Folder32.gif
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: announcement/trunk/src/main/webapp/fckeditor/editor/filemanager/browser/default/images/FolderOpened.gif
===================================================================
(Binary files differ)


Property changes on: announcement/trunk/src/main/webapp/fckeditor/editor/filemanager/browser/default/images/FolderOpened.gif
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: announcement/trunk/src/main/webapp/fckeditor/editor/filemanager/browser/default/images/FolderOpened32.gif
===================================================================
(Binary files differ)


Property changes on: announcement/trunk/src/main/webapp/fckeditor/editor/filemanager/browser/default/images/FolderOpened32.gif
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: announcement/trunk/src/main/webapp/fckeditor/editor/filemanager/browser/default/images/FolderUp.gif
===================================================================
(Binary files differ)


Property changes on: announcement/trunk/src/main/webapp/fckeditor/editor/filemanager/browser/default/images/FolderUp.gif
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: announcement/trunk/src/main/webapp/fckeditor/editor/filemanager/browser/default/images/icons/32/ai.gif
===================================================================
(Binary files differ)


Property changes on: announcement/trunk/src/main/webapp/fckeditor/editor/filemanager/browser/default/images/icons/32/ai.gif
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: announcement/trunk/src/main/webapp/fckeditor/editor/filemanager/browser/default/images/icons/32/avi.gif
===================================================================
(Binary files differ)


Property changes on: announcement/trunk/src/main/webapp/fckeditor/editor/filemanager/browser/default/images/icons/32/avi.gif
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: announcement/trunk/src/main/webapp/fckeditor/editor/filemanager/browser/default/images/icons/32/bmp.gif
===================================================================
(Binary files differ)


Property changes on: announcement/trunk/src/main/webapp/fckeditor/editor/filemanager/browser/default/images/icons/32/bmp.gif
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: announcement/trunk/src/main/webapp/fckeditor/editor/filemanager/browser/default/images/icons/32/cs.gif
===================================================================
(Binary files differ)


Property changes on: announcement/trunk/src/main/webapp/fckeditor/editor/filemanager/browser/default/images/icons/32/cs.gif
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: announcement/trunk/src/main/webapp/fckeditor/editor/filemanager/browser/default/images/icons/32/default.icon.gif
===================================================================
(Binary files differ)


Property changes on: announcement/trunk/src/main/webapp/fckeditor/editor/filemanager/browser/default/images/icons/32/default.icon.gif
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: announcement/trunk/src/main/webapp/fckeditor/editor/filemanager/browser/default/images/icons/32/dll.gif
===================================================================
(Binary files differ)


Property changes on: announcement/trunk/src/main/webapp/fckeditor/editor/filemanager/browser/default/images/icons/32/dll.gif
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: announcement/trunk/src/main/webapp/fckeditor/editor/filemanager/browser/default/images/icons/32/doc.gif
===================================================================
(Binary files differ)


Property changes on: announcement/trunk/src/main/webapp/fckeditor/editor/filemanager/browser/default/images/icons/32/doc.gif
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: announcement/trunk/src/main/webapp/fckeditor/editor/filemanager/browser/default/images/icons/32/exe.gif
===================================================================
(Binary files differ)


Property changes on: announcement/trunk/src/main/webapp/fckeditor/editor/filemanager/browser/default/images/icons/32/exe.gif
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: announcement/trunk/src/main/webapp/fckeditor/editor/filemanager/browser/default/images/icons/32/fla.gif
===================================================================
(Binary files differ)


Property changes on: announcement/trunk/src/main/webapp/fckeditor/editor/filemanager/browser/default/images/icons/32/fla.gif
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: announcement/trunk/src/main/webapp/fckeditor/editor/filemanager/browser/default/images/icons/32/gif.gif
===================================================================
(Binary files differ)


Property changes on: announcement/trunk/src/main/webapp/fckeditor/editor/filemanager/browser/default/images/icons/32/gif.gif
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: announcement/trunk/src/main/webapp/fckeditor/editor/filemanager/browser/default/images/icons/32/htm.gif
===================================================================
(Binary files differ)


Property changes on: announcement/trunk/src/main/webapp/fckeditor/editor/filemanager/browser/default/images/icons/32/htm.gif
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: announcement/trunk/src/main/webapp/fckeditor/editor/filemanager/browser/default/images/icons/32/html.gif
===================================================================
(Binary files differ)


Property changes on: announcement/trunk/src/main/webapp/fckeditor/editor/filemanager/browser/default/images/icons/32/html.gif
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: announcement/trunk/src/main/webapp/fckeditor/editor/filemanager/browser/default/images/icons/32/jpg.gif
===================================================================
(Binary files differ)


Property changes on: announcement/trunk/src/main/webapp/fckeditor/editor/filemanager/browser/default/images/icons/32/jpg.gif
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: announcement/trunk/src/main/webapp/fckeditor/editor/filemanager/browser/default/images/icons/32/js.gif
===================================================================
(Binary files differ)


Property changes on: announcement/trunk/src/main/webapp/fckeditor/editor/filemanager/browser/default/images/icons/32/js.gif
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: announcement/trunk/src/main/webapp/fckeditor/editor/filemanager/browser/default/images/icons/32/mdb.gif
===================================================================
(Binary files differ)


Property changes on: announcement/trunk/src/main/webapp/fckeditor/editor/filemanager/browser/default/images/icons/32/mdb.gif
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: announcement/trunk/src/main/webapp/fckeditor/editor/filemanager/browser/default/images/icons/32/mp3.gif
===================================================================
(Binary files differ)


Property changes on: announcement/trunk/src/main/webapp/fckeditor/editor/filemanager/browser/default/images/icons/32/mp3.gif
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: announcement/trunk/src/main/webapp/fckeditor/editor/filemanager/browser/default/images/icons/32/pdf.gif
===================================================================
(Binary files differ)


Property changes on: announcement/trunk/src/main/webapp/fckeditor/editor/filemanager/browser/default/images/icons/32/pdf.gif
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: announcement/trunk/src/main/webapp/fckeditor/editor/filemanager/browser/default/images/icons/32/png.gif
===================================================================
(Binary files differ)


Property changes on: announcement/trunk/src/main/webapp/fckeditor/editor/filemanager/browser/default/images/icons/32/png.gif
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: announcement/trunk/src/main/webapp/fckeditor/editor/filemanager/browser/default/images/icons/32/ppt.gif
===================================================================
(Binary files differ)


Property changes on: announcement/trunk/src/main/webapp/fckeditor/editor/filemanager/browser/default/images/icons/32/ppt.gif
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: announcement/trunk/src/main/webapp/fckeditor/editor/filemanager/browser/default/images/icons/32/rdp.gif
===================================================================
(Binary files differ)


Property changes on: announcement/trunk/src/main/webapp/fckeditor/editor/filemanager/browser/default/images/icons/32/rdp.gif
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: announcement/trunk/src/main/webapp/fckeditor/editor/filemanager/browser/default/images/icons/32/swf.gif
===================================================================
(Binary files differ)


Property changes on: announcement/trunk/src/main/webapp/fckeditor/editor/filemanager/browser/default/images/icons/32/swf.gif
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: announcement/trunk/src/main/webapp/fckeditor/editor/filemanager/browser/default/images/icons/32/swt.gif
===================================================================
(Binary files differ)


Property changes on: announcement/trunk/src/main/webapp/fckeditor/editor/filemanager/browser/default/images/icons/32/swt.gif
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: announcement/trunk/src/main/webapp/fckeditor/editor/filemanager/browser/default/images/icons/32/txt.gif
===================================================================
(Binary files differ)


Property changes on: announcement/trunk/src/main/webapp/fckeditor/editor/filemanager/browser/default/images/icons/32/txt.gif
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: announcement/trunk/src/main/webapp/fckeditor/editor/filemanager/browser/default/images/icons/32/vsd.gif
===================================================================
(Binary files differ)


Property changes on: announcement/trunk/src/main/webapp/fckeditor/editor/filemanager/browser/default/images/icons/32/vsd.gif
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: announcement/trunk/src/main/webapp/fckeditor/editor/filemanager/browser/default/images/icons/32/xls.gif
===================================================================
(Binary files differ)


Property changes on: announcement/trunk/src/main/webapp/fckeditor/editor/filemanager/browser/default/images/icons/32/xls.gif
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: announcement/trunk/src/main/webapp/fckeditor/editor/filemanager/browser/default/images/icons/32/xml.gif
===================================================================
(Binary files differ)


Property changes on: announcement/trunk/src/main/webapp/fckeditor/editor/filemanager/browser/default/images/icons/32/xml.gif
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: announcement/trunk/src/main/webapp/fckeditor/editor/filemanager/browser/default/images/icons/32/zip.gif
===================================================================
(Binary files differ)


Property changes on: announcement/trunk/src/main/webapp/fckeditor/editor/filemanager/browser/default/images/icons/32/zip.gif
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: announcement/trunk/src/main/webapp/fckeditor/editor/filemanager/browser/default/images/icons/ai.gif
===================================================================
(Binary files differ)


Property changes on: announcement/trunk/src/main/webapp/fckeditor/editor/filemanager/browser/default/images/icons/ai.gif
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: announcement/trunk/src/main/webapp/fckeditor/editor/filemanager/browser/default/images/icons/avi.gif
===================================================================
(Binary files differ)


Property changes on: announcement/trunk/src/main/webapp/fckeditor/editor/filemanager/browser/default/images/icons/avi.gif
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: announcement/trunk/src/main/webapp/fckeditor/editor/filemanager/browser/default/images/icons/bmp.gif
===================================================================
(Binary files differ)


Property changes on: announcement/trunk/src/main/webapp/fckeditor/editor/filemanager/browser/default/images/icons/bmp.gif
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: announcement/trunk/src/main/webapp/fckeditor/editor/filemanager/browser/default/images/icons/cs.gif
===================================================================
(Binary files differ)


Property changes on: announcement/trunk/src/main/webapp/fckeditor/editor/filemanager/browser/default/images/icons/cs.gif
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: announcement/trunk/src/main/webapp/fckeditor/editor/filemanager/browser/default/images/icons/default.icon.gif
===================================================================
(Binary files differ)


Property changes on: announcement/trunk/src/main/webapp/fckeditor/editor/filemanager/browser/default/images/icons/default.icon.gif
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: announcement/trunk/src/main/webapp/fckeditor/editor/filemanager/browser/default/images/icons/dll.gif
===================================================================
(Binary files differ)


Property changes on: announcement/trunk/src/main/webapp/fckeditor/editor/filemanager/browser/default/images/icons/dll.gif
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: announcement/trunk/src/main/webapp/fckeditor/editor/filemanager/browser/default/images/icons/doc.gif
===================================================================
(Binary files differ)


Property changes on: announcement/trunk/src/main/webapp/fckeditor/editor/filemanager/browser/default/images/icons/doc.gif
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: announcement/trunk/src/main/webapp/fckeditor/editor/filemanager/browser/default/images/icons/exe.gif
===================================================================
(Binary files differ)


Property changes on: announcement/trunk/src/main/webapp/fckeditor/editor/filemanager/browser/default/images/icons/exe.gif
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: announcement/trunk/src/main/webapp/fckeditor/editor/filemanager/browser/default/images/icons/fla.gif
===================================================================
(Binary files differ)


Property changes on: announcement/trunk/src/main/webapp/fckeditor/editor/filemanager/browser/default/images/icons/fla.gif
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: announcement/trunk/src/main/webapp/fckeditor/editor/filemanager/browser/default/images/icons/gif.gif
===================================================================
(Binary files differ)


Property changes on: announcement/trunk/src/main/webapp/fckeditor/editor/filemanager/browser/default/images/icons/gif.gif
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: announcement/trunk/src/main/webapp/fckeditor/editor/filemanager/browser/default/images/icons/htm.gif
===================================================================
(Binary files differ)


Property changes on: announcement/trunk/src/main/webapp/fckeditor/editor/filemanager/browser/default/images/icons/htm.gif
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: announcement/trunk/src/main/webapp/fckeditor/editor/filemanager/browser/default/images/icons/html.gif
===================================================================
(Binary files differ)


Property changes on: announcement/trunk/src/main/webapp/fckeditor/editor/filemanager/browser/default/images/icons/html.gif
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: announcement/trunk/src/main/webapp/fckeditor/editor/filemanager/browser/default/images/icons/jpg.gif
===================================================================
(Binary files differ)


Property changes on: announcement/trunk/src/main/webapp/fckeditor/editor/filemanager/browser/default/images/icons/jpg.gif
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: announcement/trunk/src/main/webapp/fckeditor/editor/filemanager/browser/default/images/icons/js.gif
===================================================================
(Binary files differ)


Property changes on: announcement/trunk/src/main/webapp/fckeditor/editor/filemanager/browser/default/images/icons/js.gif
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: announcement/trunk/src/main/webapp/fckeditor/editor/filemanager/browser/default/images/icons/mdb.gif
===================================================================
(Binary files differ)


Property changes on: announcement/trunk/src/main/webapp/fckeditor/editor/filemanager/browser/default/images/icons/mdb.gif
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: announcement/trunk/src/main/webapp/fckeditor/editor/filemanager/browser/default/images/icons/mp3.gif
===================================================================
(Binary files differ)


Property changes on: announcement/trunk/src/main/webapp/fckeditor/editor/filemanager/browser/default/images/icons/mp3.gif
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: announcement/trunk/src/main/webapp/fckeditor/editor/filemanager/browser/default/images/icons/pdf.gif
===================================================================
(Binary files differ)


Property changes on: announcement/trunk/src/main/webapp/fckeditor/editor/filemanager/browser/default/images/icons/pdf.gif
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: announcement/trunk/src/main/webapp/fckeditor/editor/filemanager/browser/default/images/icons/png.gif
===================================================================
(Binary files differ)


Property changes on: announcement/trunk/src/main/webapp/fckeditor/editor/filemanager/browser/default/images/icons/png.gif
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: announcement/trunk/src/main/webapp/fckeditor/editor/filemanager/browser/default/images/icons/ppt.gif
===================================================================
(Binary files differ)


Property changes on: announcement/trunk/src/main/webapp/fckeditor/editor/filemanager/browser/default/images/icons/ppt.gif
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: announcement/trunk/src/main/webapp/fckeditor/editor/filemanager/browser/default/images/icons/rdp.gif
===================================================================
(Binary files differ)


Property changes on: announcement/trunk/src/main/webapp/fckeditor/editor/filemanager/browser/default/images/icons/rdp.gif
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: announcement/trunk/src/main/webapp/fckeditor/editor/filemanager/browser/default/images/icons/swf.gif
===================================================================
(Binary files differ)


Property changes on: announcement/trunk/src/main/webapp/fckeditor/editor/filemanager/browser/default/images/icons/swf.gif
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: announcement/trunk/src/main/webapp/fckeditor/editor/filemanager/browser/default/images/icons/swt.gif
===================================================================
(Binary files differ)


Property changes on: announcement/trunk/src/main/webapp/fckeditor/editor/filemanager/browser/default/images/icons/swt.gif
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: announcement/trunk/src/main/webapp/fckeditor/editor/filemanager/browser/default/images/icons/txt.gif
===================================================================
(Binary files differ)


Property changes on: announcement/trunk/src/main/webapp/fckeditor/editor/filemanager/browser/default/images/icons/txt.gif
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: announcement/trunk/src/main/webapp/fckeditor/editor/filemanager/browser/default/images/icons/vsd.gif
===================================================================
(Binary files differ)


Property changes on: announcement/trunk/src/main/webapp/fckeditor/editor/filemanager/browser/default/images/icons/vsd.gif
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: announcement/trunk/src/main/webapp/fckeditor/editor/filemanager/browser/default/images/icons/xls.gif
===================================================================
(Binary files differ)


Property changes on: announcement/trunk/src/main/webapp/fckeditor/editor/filemanager/browser/default/images/icons/xls.gif
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: announcement/trunk/src/main/webapp/fckeditor/editor/filemanager/browser/default/images/icons/xml.gif
===================================================================
(Binary files differ)


Property changes on: announcement/trunk/src/main/webapp/fckeditor/editor/filemanager/browser/default/images/icons/xml.gif
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: announcement/trunk/src/main/webapp/fckeditor/editor/filemanager/browser/default/images/icons/zip.gif
===================================================================
(Binary files differ)


Property changes on: announcement/trunk/src/main/webapp/fckeditor/editor/filemanager/browser/default/images/icons/zip.gif
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: announcement/trunk/src/main/webapp/fckeditor/editor/filemanager/browser/default/images/spacer.gif
===================================================================
(Binary files differ)


Property changes on: announcement/trunk/src/main/webapp/fckeditor/editor/filemanager/browser/default/images/spacer.gif
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: announcement/trunk/src/main/webapp/fckeditor/editor/filemanager/browser/default/js/common.js
===================================================================
--- announcement/trunk/src/main/webapp/fckeditor/editor/filemanager/browser/default/js/common.js	                        (rev 0)
+++ announcement/trunk/src/main/webapp/fckeditor/editor/filemanager/browser/default/js/common.js	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,88 @@
+/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2008 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * Common objects and functions shared by all pages that compose the
+ * File Browser dialog window.
+ */
+
+// Automatically detect the correct document.domain (#1919).
+(function()
+{
+	var d = document.domain ;
+
+	while ( true )
+	{
+		// Test if we can access a parent property.
+		try
+		{
+			var test = window.top.opener.document.domain ;
+			break ;
+		}
+		catch( e )
+		{}
+
+		// Remove a domain part: www.mytest.example.com => mytest.example.com => example.com ...
+		d = d.replace( /.*?(?:\.|$)/, '' ) ;
+
+		if ( d.length == 0 )
+			break ;		// It was not able to detect the domain.
+
+		try
+		{
+			document.domain = d ;
+		}
+		catch (e)
+		{
+			break ;
+		}
+	}
+})() ;
+
+function AddSelectOption( selectElement, optionText, optionValue )
+{
+	var oOption = document.createElement("OPTION") ;
+
+	oOption.text	= optionText ;
+	oOption.value	= optionValue ;
+
+	selectElement.options.add(oOption) ;
+
+	return oOption ;
+}
+
+var oConnector	= window.parent.oConnector ;
+var oIcons		= window.parent.oIcons ;
+
+
+function StringBuilder( value )
+{
+    this._Strings = new Array( value || '' ) ;
+}
+
+StringBuilder.prototype.Append = function( value )
+{
+    if ( value )
+        this._Strings.push( value ) ;
+}
+
+StringBuilder.prototype.ToString = function()
+{
+    return this._Strings.join( '' ) ;
+}


Property changes on: announcement/trunk/src/main/webapp/fckeditor/editor/filemanager/browser/default/js/common.js
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/webapp/fckeditor/editor/filemanager/browser/default/js/fckxml.js
===================================================================
--- announcement/trunk/src/main/webapp/fckeditor/editor/filemanager/browser/default/js/fckxml.js	                        (rev 0)
+++ announcement/trunk/src/main/webapp/fckeditor/editor/filemanager/browser/default/js/fckxml.js	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,147 @@
+/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2008 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * Defines the FCKXml object that is used for XML data calls
+ * and XML processing.
+ *
+ * This script is shared by almost all pages that compose the
+ * File Browser frameset.
+ */
+
+var FCKXml = function()
+{}
+
+FCKXml.prototype.GetHttpRequest = function()
+{
+	// Gecko / IE7
+	try { return new XMLHttpRequest(); }
+	catch(e) {}
+
+	// IE6
+	try { return new ActiveXObject( 'Msxml2.XMLHTTP' ) ; }
+	catch(e) {}
+
+	// IE5
+	try { return new ActiveXObject( 'Microsoft.XMLHTTP' ) ; }
+	catch(e) {}
+
+	return null ;
+}
+
+FCKXml.prototype.LoadUrl = function( urlToCall, asyncFunctionPointer )
+{
+	var oFCKXml = this ;
+
+	var bAsync = ( typeof(asyncFunctionPointer) == 'function' ) ;
+
+	var oXmlHttp = this.GetHttpRequest() ;
+
+	oXmlHttp.open( "GET", urlToCall, bAsync ) ;
+
+	if ( bAsync )
+	{
+		oXmlHttp.onreadystatechange = function()
+		{
+			if ( oXmlHttp.readyState == 4 )
+			{
+				var oXml ;
+				try
+				{
+					// this is the same test for an FF2 bug as in fckxml_gecko.js
+					// but we've moved the responseXML assignment into the try{}
+					// so we don't even have to check the return status codes.
+					var test = oXmlHttp.responseXML.firstChild ;
+					oXml = oXmlHttp.responseXML ;
+				}
+				catch ( e )
+				{
+					try
+					{
+						oXml = (new DOMParser()).parseFromString( oXmlHttp.responseText, 'text/xml' ) ;
+					}
+					catch ( e ) {}
+				}
+
+				if ( !oXml || !oXml.firstChild || oXml.firstChild.nodeName == 'parsererror' )
+				{
+					alert( 'The server didn\'t send back a proper XML response. Please contact your system administrator.\n\n' +
+							'XML request error: ' + oXmlHttp.statusText + ' (' + oXmlHttp.status + ')\n\n' +
+							'Requested URL:\n' + urlToCall + '\n\n' +
+							'Response text:\n' + oXmlHttp.responseText ) ;
+					return ;
+				}
+
+				oFCKXml.DOMDocument = oXml ;
+				asyncFunctionPointer( oFCKXml ) ;
+			}
+		}
+	}
+
+	oXmlHttp.send( null ) ;
+
+	if ( ! bAsync )
+	{
+		if ( oXmlHttp.status == 200 || oXmlHttp.status == 304 )
+			this.DOMDocument = oXmlHttp.responseXML ;
+		else
+		{
+			alert( 'XML request error: ' + oXmlHttp.statusText + ' (' + oXmlHttp.status + ')' ) ;
+		}
+	}
+}
+
+FCKXml.prototype.SelectNodes = function( xpath )
+{
+	if ( navigator.userAgent.indexOf('MSIE') >= 0 )		// IE
+		return this.DOMDocument.selectNodes( xpath ) ;
+	else					// Gecko
+	{
+		var aNodeArray = new Array();
+
+		var xPathResult = this.DOMDocument.evaluate( xpath, this.DOMDocument,
+				this.DOMDocument.createNSResolver(this.DOMDocument.documentElement), XPathResult.ORDERED_NODE_ITERATOR_TYPE, null) ;
+		if ( xPathResult )
+		{
+			var oNode = xPathResult.iterateNext() ;
+ 			while( oNode )
+ 			{
+ 				aNodeArray[aNodeArray.length] = oNode ;
+ 				oNode = xPathResult.iterateNext();
+ 			}
+		}
+		return aNodeArray ;
+	}
+}
+
+FCKXml.prototype.SelectSingleNode = function( xpath )
+{
+	if ( navigator.userAgent.indexOf('MSIE') >= 0 )		// IE
+		return this.DOMDocument.selectSingleNode( xpath ) ;
+	else					// Gecko
+	{
+		var xPathResult = this.DOMDocument.evaluate( xpath, this.DOMDocument,
+				this.DOMDocument.createNSResolver(this.DOMDocument.documentElement), 9, null);
+
+		if ( xPathResult && xPathResult.singleNodeValue )
+			return xPathResult.singleNodeValue ;
+		else
+			return null ;
+	}
+}


Property changes on: announcement/trunk/src/main/webapp/fckeditor/editor/filemanager/browser/default/js/fckxml.js
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/webapp/fckeditor/editor/filemanager/connectors/asp/basexml.asp
===================================================================
--- announcement/trunk/src/main/webapp/fckeditor/editor/filemanager/connectors/asp/basexml.asp	                        (rev 0)
+++ announcement/trunk/src/main/webapp/fckeditor/editor/filemanager/connectors/asp/basexml.asp	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,63 @@
+<%
+ ' FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ ' Copyright (C) 2003-2008 Frederico Caldeira Knabben
+ '
+ ' == BEGIN LICENSE ==
+ '
+ ' Licensed under the terms of any of the following licenses at your
+ ' choice:
+ '
+ '  - GNU General Public License Version 2 or later (the "GPL")
+ '    http://www.gnu.org/licenses/gpl.html
+ '
+ '  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ '    http://www.gnu.org/licenses/lgpl.html
+ '
+ '  - Mozilla Public License Version 1.1 or later (the "MPL")
+ '    http://www.mozilla.org/MPL/MPL-1.1.html
+ '
+ ' == END LICENSE ==
+ '
+ ' This file include the functions that create the base XML output.
+%>
+<%
+
+Sub SetXmlHeaders()
+	' Cleans the response buffer.
+	Response.Clear()
+
+	' Prevent the browser from caching the result.
+	Response.CacheControl = "no-cache"
+
+	' Set the response format.
+	Response.CodePage 		= 65001
+	Response.CharSet		= "UTF-8"
+	Response.ContentType	= "text/xml"
+End Sub
+
+Sub CreateXmlHeader( command, resourceType, currentFolder, url )
+	' Create the XML document header.
+	Response.Write "<?xml version=""1.0"" encoding=""utf-8"" ?>"
+
+	' Create the main "Connector" node.
+	Response.Write "<Connector command=""" & command & """ resourceType=""" & resourceType & """>"
+
+	' Add the current folder node.
+	Response.Write "<CurrentFolder path=""" & ConvertToXmlAttribute( currentFolder ) & """ url=""" & ConvertToXmlAttribute( url ) & """ />"
+End Sub
+
+Sub CreateXmlFooter()
+	Response.Write "</Connector>"
+End Sub
+
+Sub SendError( number, text )
+	SetXmlHeaders
+
+	' Create the XML document header.
+	Response.Write "<?xml version=""1.0"" encoding=""utf-8"" ?>"
+
+	Response.Write "<Connector><Error number=""" & number & """ text=""" & Server.HTMLEncode( text ) & """ /></Connector>"
+
+	Response.End
+End Sub
+%>

Added: announcement/trunk/src/main/webapp/fckeditor/editor/filemanager/connectors/asp/class_upload.asp
===================================================================
--- announcement/trunk/src/main/webapp/fckeditor/editor/filemanager/connectors/asp/class_upload.asp	                        (rev 0)
+++ announcement/trunk/src/main/webapp/fckeditor/editor/filemanager/connectors/asp/class_upload.asp	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,353 @@
+<%
+ ' FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ ' Copyright (C) 2003-2008 Frederico Caldeira Knabben
+ '
+ ' == BEGIN LICENSE ==
+ '
+ ' Licensed under the terms of any of the following licenses at your
+ ' choice:
+ '
+ '  - GNU General Public License Version 2 or later (the "GPL")
+ '    http://www.gnu.org/licenses/gpl.html
+ '
+ '  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ '    http://www.gnu.org/licenses/lgpl.html
+ '
+ '  - Mozilla Public License Version 1.1 or later (the "MPL")
+ '    http://www.mozilla.org/MPL/MPL-1.1.html
+ '
+ ' == END LICENSE ==
+ '
+ ' These are the classes used to handle ASP upload without using third
+ ' part components (OCX/DLL).
+%>
+<%
+'**********************************************
+' File:		NetRube_Upload.asp
+' Version:	NetRube Upload Class Version 2.3 Build 20070528
+' Author:	NetRube
+' Email:	NetRu****@126*****
+' Date:		05/28/2007
+' Comments:	The code for the Upload.
+'			This can free usage, but please
+'			not to delete this copyright information.
+'			If you have a modification version,
+'			Please send out a duplicate to me.
+'**********************************************
+' 文件名:	NetRube_Upload.asp
+' 版本:		NetRube Upload Class Version 2.3 Build 20070528
+' 作者:		NetRube(网络乡巴佬)
+' 电子邮件:	NetRu****@126*****
+' 日期:		2007年05月28日
+' 声明:		文件上传类
+'			本上传类可以自由使用,但请保留此版权声明信息
+'			如果您对本上传类进行修改增强,
+'			请发送一份给俺。
+'**********************************************
+
+Class NetRube_Upload
+
+	Public	File, Form
+	Private oSourceData
+	Private nMaxSize, nErr, sAllowed, sDenied, sHtmlExtensions
+
+	Private Sub Class_Initialize
+		nErr		= 0
+		nMaxSize	= 1048576
+
+		Set File			= Server.CreateObject("Scripting.Dictionary")
+		File.CompareMode	= 1
+		Set Form			= Server.CreateObject("Scripting.Dictionary")
+		Form.CompareMode	= 1
+
+		Set oSourceData		= Server.CreateObject("ADODB.Stream")
+		oSourceData.Type	= 1
+		oSourceData.Mode	= 3
+		oSourceData.Open
+	End Sub
+
+	Private Sub Class_Terminate
+		Form.RemoveAll
+		Set Form = Nothing
+		File.RemoveAll
+		Set File = Nothing
+
+		oSourceData.Close
+		Set oSourceData = Nothing
+	End Sub
+
+	Public Property Get Version
+		Version = "NetRube Upload Class Version 2.3 Build 20070528"
+	End Property
+
+	Public Property Get ErrNum
+		ErrNum	= nErr
+	End Property
+
+	Public Property Let MaxSize(nSize)
+		nMaxSize	= nSize
+	End Property
+
+	Public Property Let Allowed(sExt)
+		sAllowed	= sExt
+	End Property
+
+	Public Property Let Denied(sExt)
+		sDenied	= sExt
+	End Property
+
+	Public Property Let HtmlExtensions(sExt)
+		sHtmlExtensions	= sExt
+	End Property
+
+	Public Sub GetData
+		Dim aCType
+		aCType = Split(Request.ServerVariables("HTTP_CONTENT_TYPE"), ";")
+		if ( uBound(aCType) < 0 ) then
+			nErr = 1
+			Exit Sub
+		end if
+		If aCType(0) <> "multipart/form-data" Then
+			nErr = 1
+			Exit Sub
+		End If
+
+		Dim nTotalSize
+		nTotalSize	= Request.TotalBytes
+		If nTotalSize < 1 Then
+			nErr = 2
+			Exit Sub
+		End If
+		If nMaxSize > 0 And nTotalSize > nMaxSize Then
+			nErr = 3
+			Exit Sub
+		End If
+
+		'Thankful long(yrl03****@163*****)
+		'Fix upload large file.
+		'**********************************************
+		' 修正作者:long
+		' 联系邮件: yrl03****@163*****
+		' 修正时间:2007年5月6日
+		' 修正说明:由于iis6的Content-Length 头信息中包含的请求长度超过了 AspMaxRequestEntityAllowed 的值(默认200K), IIS 将返回一个 403 错误信息.
+		'          直接导致在iis6下调试FCKeditor上传功能时,一旦文件超过200K,上传文件时文件管理器失去响应,受此影响,文件的快速上传功能也存在在缺陷。
+		'          在参考 宝玉 的 Asp无组件上传带进度条 演示程序后作出如下修改,以修正在iis6下的错误。
+
+		Dim nTotalBytes, nPartBytes, ReadBytes
+		ReadBytes = 0
+		nTotalBytes = Request.TotalBytes
+		'循环分块读取
+		Do While ReadBytes < nTotalBytes
+			'分块读取
+			nPartBytes = 64 * 1024 '分成每块64k
+			If nPartBytes + ReadBytes > nTotalBytes Then
+				nPartBytes = nTotalBytes - ReadBytes
+			End If
+			oSourceData.Write Request.BinaryRead(nPartBytes)
+			ReadBytes = ReadBytes + nPartBytes
+		Loop
+		'**********************************************
+		oSourceData.Position = 0
+
+		Dim oTotalData, oFormStream, sFormHeader, sFormName, bCrLf, nBoundLen, nFormStart, nFormEnd, nPosStart, nPosEnd, sBoundary
+
+		oTotalData	= oSourceData.Read
+		bCrLf		= ChrB(13) & ChrB(10)
+		sBoundary	= MidB(oTotalData, 1, InStrB(1, oTotalData, bCrLf) - 1)
+		nBoundLen	= LenB(sBoundary) + 2
+		nFormStart	= nBoundLen
+
+		Set oFormStream = Server.CreateObject("ADODB.Stream")
+
+		Do While (nFormStart + 2) < nTotalSize
+			nFormEnd	= InStrB(nFormStart, oTotalData, bCrLf & bCrLf) + 3
+
+			With oFormStream
+				.Type	= 1
+				.Mode	= 3
+				.Open
+				oSourceData.Position = nFormStart
+				oSourceData.CopyTo oFormStream, nFormEnd - nFormStart
+				.Position	= 0
+				.Type		= 2
+				.CharSet	= "UTF-8"
+				sFormHeader	= .ReadText
+				.Close
+			End With
+
+			nFormStart	= InStrB(nFormEnd, oTotalData, sBoundary) - 1
+			nPosStart	= InStr(22, sFormHeader, " name=", 1) + 7
+			nPosEnd		= InStr(nPosStart, sFormHeader, """")
+			sFormName	= Mid(sFormHeader, nPosStart, nPosEnd - nPosStart)
+
+			If InStr(45, sFormHeader, " filename=", 1) > 0 Then
+				Set File(sFormName)			= New NetRube_FileInfo
+				File(sFormName).FormName	= sFormName
+				File(sFormName).Start		= nFormEnd
+				File(sFormName).Size		= nFormStart - nFormEnd - 2
+				nPosStart					= InStr(nPosEnd, sFormHeader, " filename=", 1) + 11
+				nPosEnd						= InStr(nPosStart, sFormHeader, """")
+				File(sFormName).ClientPath	= Mid(sFormHeader, nPosStart, nPosEnd - nPosStart)
+				File(sFormName).Name		= Mid(File(sFormName).ClientPath, InStrRev(File(sFormName).ClientPath, "\") + 1)
+				File(sFormName).Ext			= LCase(Mid(File(sFormName).Name, InStrRev(File(sFormName).Name, ".") + 1))
+				nPosStart					= InStr(nPosEnd, sFormHeader, "Content-Type: ", 1) + 14
+				nPosEnd						= InStr(nPosStart, sFormHeader, vbCr)
+				File(sFormName).MIME		= Mid(sFormHeader, nPosStart, nPosEnd - nPosStart)
+			Else
+				With oFormStream
+					.Type	= 1
+					.Mode	= 3
+					.Open
+					oSourceData.Position = nFormEnd
+					oSourceData.CopyTo oFormStream, nFormStart - nFormEnd - 2
+					.Position	= 0
+					.Type		= 2
+					.CharSet	= "UTF-8"
+					Form(sFormName)	= .ReadText
+					.Close
+				End With
+			End If
+
+			nFormStart	= nFormStart + nBoundLen
+		Loop
+
+		oTotalData = ""
+		Set oFormStream = Nothing
+	End Sub
+
+	Public Sub SaveAs(sItem, sFileName)
+		If File(sItem).Size < 1 Then
+			nErr = 2
+			Exit Sub
+		End If
+
+		If Not IsAllowed(File(sItem).Ext) Then
+			nErr = 4
+			Exit Sub
+		End If
+
+		If InStr( LCase( sFileName ), "::$data" ) > 0 Then
+			nErr = 4
+			Exit Sub
+		End If
+
+		Dim sFileExt, iFileSize
+		sFileExt	= File(sItem).Ext
+		iFileSize	= File(sItem).Size
+
+		' Check XSS.
+		If Not IsHtmlExtension( sFileExt ) Then
+			' Calculate the size of data to load (max 1Kb).
+			Dim iXSSSize
+			iXSSSize = iFileSize
+
+			If iXSSSize > 1024 Then
+				iXSSSize = 1024
+			End If
+
+			' Read the data.
+			Dim sData
+			oSourceData.Position = File(sItem).Start
+			sData = oSourceData.Read( iXSSSize )	' Byte Array
+			sData = ByteArray2Text( sData )			' String
+
+			' Sniff HTML data.
+			If SniffHtml( sData ) Then
+				nErr = 4
+				Exit Sub
+			End If
+		End If
+
+		Dim oFileStream
+		Set oFileStream = Server.CreateObject("ADODB.Stream")
+		With oFileStream
+			.Type		= 1
+			.Mode		= 3
+			.Open
+			oSourceData.Position = File(sItem).Start
+			oSourceData.CopyTo oFileStream, File(sItem).Size
+			.Position	= 0
+			.SaveToFile sFileName, 2
+			.Close
+		End With
+		Set oFileStream = Nothing
+	End Sub
+
+	Private Function IsAllowed(sExt)
+		Dim oRE
+		Set oRE	= New RegExp
+		oRE.IgnoreCase	= True
+		oRE.Global		= True
+
+		If sDenied = "" Then
+			oRE.Pattern	= sAllowed
+			IsAllowed	= (sAllowed = "") Or oRE.Test(sExt)
+		Else
+			oRE.Pattern	= sDenied
+			IsAllowed	= Not oRE.Test(sExt)
+		End If
+
+		Set oRE	= Nothing
+	End Function
+
+	Private Function IsHtmlExtension( sExt )
+		If sHtmlExtensions = "" Then
+			Exit Function
+		End If
+
+		Dim oRE
+		Set oRE = New RegExp
+		oRE.IgnoreCase	= True
+		oRE.Global		= True
+		oRE.Pattern		= sHtmlExtensions
+
+		IsHtmlExtension = oRE.Test(sExt)
+
+		Set oRE	= Nothing
+	End Function
+
+	Private Function SniffHtml( sData )
+
+		Dim oRE
+		Set oRE = New RegExp
+		oRE.IgnoreCase	= True
+		oRE.Global		= True
+
+		Dim aPatterns
+		aPatterns = Array( "<!DOCTYPE\W*X?HTML", "<(body|head|html|img|pre|script|table|title)", "type\s*=\s*[\'""]?\s*(?:\w*/)?(?:ecma|java)", "(?:href|src|data)\s*=\s*[\'""]?\s*(?:ecma|java)script:", "url\s*\(\s*[\'""]?\s*(?:ecma|java)script:" )
+
+		Dim i
+		For i = 0 to UBound( aPatterns )
+			oRE.Pattern = aPatterns( i )
+			If oRE.Test( sData ) Then
+				SniffHtml = True
+				Exit Function
+			End If
+		Next
+
+		SniffHtml = False
+
+	End Function
+
+	' Thanks to http://www.ericphelps.com/q193998/index.htm
+	Private Function ByteArray2Text(varByteArray)
+		Dim strData, strBuffer, lngCounter
+		strData = ""
+		strBuffer = ""
+		For lngCounter = 0 to UBound(varByteArray)
+			strBuffer = strBuffer & Chr(255 And Ascb(Midb(varByteArray,lngCounter + 1, 1)))
+			'Keep strBuffer at 1k bytes maximum
+			If lngCounter Mod 1024 = 0 Then
+				strData = strData & strBuffer
+				strBuffer = ""
+			End If
+		Next
+		ByteArray2Text = strData & strBuffer
+	End Function
+
+End Class
+
+Class NetRube_FileInfo
+	Dim FormName, ClientPath, Path, Name, Ext, Content, Size, MIME, Start
+End Class
+%>

Added: announcement/trunk/src/main/webapp/fckeditor/editor/filemanager/connectors/asp/commands.asp
===================================================================
--- announcement/trunk/src/main/webapp/fckeditor/editor/filemanager/connectors/asp/commands.asp	                        (rev 0)
+++ announcement/trunk/src/main/webapp/fckeditor/editor/filemanager/connectors/asp/commands.asp	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,198 @@
+<%
+ ' FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ ' Copyright (C) 2003-2008 Frederico Caldeira Knabben
+ '
+ ' == BEGIN LICENSE ==
+ '
+ ' Licensed under the terms of any of the following licenses at your
+ ' choice:
+ '
+ '  - GNU General Public License Version 2 or later (the "GPL")
+ '    http://www.gnu.org/licenses/gpl.html
+ '
+ '  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ '    http://www.gnu.org/licenses/lgpl.html
+ '
+ '  - Mozilla Public License Version 1.1 or later (the "MPL")
+ '    http://www.mozilla.org/MPL/MPL-1.1.html
+ '
+ ' == END LICENSE ==
+ '
+ ' This file include the functions that handle the Command requests
+ ' in the ASP Connector.
+%>
+<%
+Sub GetFolders( resourceType, currentFolder )
+	' Map the virtual path to the local server path.
+	Dim sServerDir
+	sServerDir = ServerMapFolder( resourceType, currentFolder, "GetFolders" )
+
+	' Open the "Folders" node.
+	Response.Write "<Folders>"
+
+	Dim oFSO, oCurrentFolder, oFolders, oFolder
+	Set oFSO = Server.CreateObject( "Scripting.FileSystemObject" )
+	if not (oFSO.FolderExists( sServerDir ) ) then
+		Set oFSO = Nothing
+		SendError 102, currentFolder
+	end if
+
+	Set oCurrentFolder = oFSO.GetFolder( sServerDir )
+	Set oFolders = oCurrentFolder.SubFolders
+
+	For Each oFolder in oFolders
+		Response.Write "<Folder name=""" & ConvertToXmlAttribute( oFolder.name ) & """ />"
+	Next
+
+	Set oFSO = Nothing
+
+	' Close the "Folders" node.
+	Response.Write "</Folders>"
+End Sub
+
+Sub GetFoldersAndFiles( resourceType, currentFolder )
+	' Map the virtual path to the local server path.
+	Dim sServerDir
+	sServerDir = ServerMapFolder( resourceType, currentFolder, "GetFoldersAndFiles" )
+
+	Dim oFSO, oCurrentFolder, oFolders, oFolder, oFiles, oFile
+	Set oFSO = Server.CreateObject( "Scripting.FileSystemObject" )
+	if not (oFSO.FolderExists( sServerDir ) ) then
+		Set oFSO = Nothing
+		SendError 102, currentFolder
+	end if
+
+	Set oCurrentFolder = oFSO.GetFolder( sServerDir )
+	Set oFolders	= oCurrentFolder.SubFolders
+	Set oFiles		= oCurrentFolder.Files
+
+	' Open the "Folders" node.
+	Response.Write "<Folders>"
+
+	For Each oFolder in oFolders
+		Response.Write "<Folder name=""" & ConvertToXmlAttribute( oFolder.name ) & """ />"
+	Next
+
+	' Close the "Folders" node.
+	Response.Write "</Folders>"
+
+	' Open the "Files" node.
+	Response.Write "<Files>"
+
+	For Each oFile in oFiles
+		Dim iFileSize
+		iFileSize = Round( oFile.size / 1024 )
+		If ( iFileSize < 1 AND oFile.size <> 0 ) Then iFileSize = 1
+
+		Response.Write "<File name=""" & ConvertToXmlAttribute( oFile.name ) & """ size=""" & iFileSize & """ />"
+	Next
+
+	' Close the "Files" node.
+	Response.Write "</Files>"
+End Sub
+
+Sub CreateFolder( resourceType, currentFolder )
+	Dim sErrorNumber
+
+	Dim sNewFolderName
+	sNewFolderName = Request.QueryString( "NewFolderName" )
+	sNewFolderName = SanitizeFolderName( sNewFolderName )
+
+	If ( sNewFolderName = "" OR InStr( 1, sNewFolderName, ".." ) > 0  ) Then
+		sErrorNumber = "102"
+	Else
+		' Map the virtual path to the local server path of the current folder.
+		Dim sServerDir
+		sServerDir = ServerMapFolder( resourceType, CombineLocalPaths(currentFolder, sNewFolderName), "CreateFolder" )
+
+		On Error Resume Next
+
+		CreateServerFolder sServerDir
+
+		Dim iErrNumber, sErrDescription
+		iErrNumber		= err.number
+		sErrDescription	= err.Description
+
+		On Error Goto 0
+
+		Select Case iErrNumber
+			Case 0
+				sErrorNumber = "0"
+			Case 52
+				sErrorNumber = "102"	' Invalid Folder Name.
+			Case 70
+				sErrorNumber = "103"	' Security Error.
+			Case 76
+				sErrorNumber = "102"	' Path too long.
+			Case Else
+				sErrorNumber = "110"
+		End Select
+	End If
+
+	' Create the "Error" node.
+	Response.Write "<Error number=""" & sErrorNumber & """ originalNumber=""" & iErrNumber & """ originalDescription=""" & ConvertToXmlAttribute( sErrDescription ) & """ />"
+End Sub
+
+Sub FileUpload( resourceType, currentFolder, sCommand )
+	Dim oUploader
+	Set oUploader = New NetRube_Upload
+	oUploader.MaxSize	= 0
+	oUploader.Allowed	= ConfigAllowedExtensions.Item( resourceType )
+	oUploader.Denied	= ConfigDeniedExtensions.Item( resourceType )
+	oUploader.HtmlExtensions = ConfigHtmlExtensions
+	oUploader.GetData
+
+	Dim sErrorNumber
+	sErrorNumber = "0"
+
+	Dim sFileName, sOriginalFileName, sExtension
+	sFileName = ""
+
+	If oUploader.ErrNum > 0 Then
+		sErrorNumber = "202"
+	Else
+		' Map the virtual path to the local server path.
+		Dim sServerDir
+		sServerDir = ServerMapFolder( resourceType, currentFolder, sCommand )
+
+		Dim oFSO
+		Set oFSO = Server.CreateObject( "Scripting.FileSystemObject" )
+		if not (oFSO.FolderExists( sServerDir ) ) then
+			sErrorNumber = "102"
+		else
+			' Get the uploaded file name.
+			sFileName	= oUploader.File( "NewFile" ).Name
+			sExtension	= oUploader.File( "NewFile" ).Ext
+			sFileName = SanitizeFileName( sFileName )
+			sOriginalFileName = sFileName
+
+			Dim iCounter
+			iCounter = 0
+
+			Do While ( True )
+				Dim sFilePath
+				sFilePath = CombineLocalPaths(sServerDir, sFileName)
+
+				If ( oFSO.FileExists( sFilePath ) ) Then
+					iCounter = iCounter + 1
+					sFileName = RemoveExtension( sOriginalFileName ) & "(" & iCounter & ")." & sExtension
+					sErrorNumber = "201"
+				Else
+					oUploader.SaveAs "NewFile", sFilePath
+					If oUploader.ErrNum > 0 Then sErrorNumber = "202"
+					Exit Do
+				End If
+			Loop
+		end if
+	End If
+
+	Set oUploader	= Nothing
+
+	dim sFileUrl
+	sFileUrl = CombinePaths( GetResourceTypePath( resourceType, sCommand ) , currentFolder )
+	sFileUrl = CombinePaths( sFileUrl, sFileName )
+
+	SendUploadResults sErrorNumber, sFileUrl, sFileName, ""
+End Sub
+
+%>

Added: announcement/trunk/src/main/webapp/fckeditor/editor/filemanager/connectors/asp/config.asp
===================================================================
--- announcement/trunk/src/main/webapp/fckeditor/editor/filemanager/connectors/asp/config.asp	                        (rev 0)
+++ announcement/trunk/src/main/webapp/fckeditor/editor/filemanager/connectors/asp/config.asp	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,128 @@
+<%
+ ' FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ ' Copyright (C) 2003-2008 Frederico Caldeira Knabben
+ '
+ ' == BEGIN LICENSE ==
+ '
+ ' Licensed under the terms of any of the following licenses at your
+ ' choice:
+ '
+ '  - GNU General Public License Version 2 or later (the "GPL")
+ '    http://www.gnu.org/licenses/gpl.html
+ '
+ '  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ '    http://www.gnu.org/licenses/lgpl.html
+ '
+ '  - Mozilla Public License Version 1.1 or later (the "MPL")
+ '    http://www.mozilla.org/MPL/MPL-1.1.html
+ '
+ ' == END LICENSE ==
+ '
+ ' Configuration file for the File Manager Connector for ASP.
+%>
+<%
+
+' SECURITY: You must explicitly enable this "connector" (set it to "True").
+' WARNING: don't just set "ConfigIsEnabled = true", you must be sure that only
+'		authenticated users can access this file or use some kind of session checking.
+Dim ConfigIsEnabled
+ConfigIsEnabled = False
+
+' Path to user files relative to the document root.
+' This setting is preserved only for backward compatibility.
+' You should look at the settings for each resource type to get the full potential
+Dim ConfigUserFilesPath
+ConfigUserFilesPath = "/userfiles/"
+
+' Due to security issues with Apache modules, it is recommended to leave the
+' following setting enabled.
+Dim ConfigForceSingleExtension
+ConfigForceSingleExtension = true
+
+' What the user can do with this connector
+Dim ConfigAllowedCommands
+ConfigAllowedCommands = "QuickUpload|FileUpload|GetFolders|GetFoldersAndFiles|CreateFolder"
+
+' Allowed Resource Types
+Dim ConfigAllowedTypes
+ConfigAllowedTypes = "File|Image|Flash|Media"
+
+' For security, HTML is allowed in the first Kb of data for files having the
+' following extensions only.
+Dim ConfigHtmlExtensions
+ConfigHtmlExtensions = "html|htm|xml|xsd|txt|js"
+'
+'	Configuration settings for each Resource Type
+'
+'	- AllowedExtensions: the possible extensions that can be allowed.
+'		If it is empty then any file type can be uploaded.
+'
+'	- DeniedExtensions: The extensions that won't be allowed.
+'		If it is empty then no restrictions are done here.
+'
+'	For a file to be uploaded it has to fulfill both the AllowedExtensions
+'	and DeniedExtensions (that's it: not being denied) conditions.
+'
+'	- FileTypesPath: the virtual folder relative to the document root where
+'		these resources will be located.
+'		Attention: It must start and end with a slash: '/'
+'
+'	- FileTypesAbsolutePath: the physical path to the above folder. It must be
+'		an absolute path.
+'		If it's an empty string then it will be autocalculated.
+'		Useful if you are using a virtual directory, symbolic link or alias.
+'		Examples: 'C:\\MySite\\userfiles\\' or '/root/mysite/userfiles/'.
+'		Attention: The above 'FileTypesPath' must point to the same directory.
+'		Attention: It must end with a slash: '/'
+'
+' - QuickUploadPath: the virtual folder relative to the document root where
+'		these resources will be uploaded using the Upload tab in the resources
+'		dialogs.
+'		Attention: It must start and end with a slash: '/'
+'
+'	 - QuickUploadAbsolutePath: the physical path to the above folder. It must be
+'		an absolute path.
+'		If it's an empty string then it will be autocalculated.
+'		Useful if you are using a virtual directory, symbolic link or alias.
+'		Examples: 'C:\\MySite\\userfiles\\' or '/root/mysite/userfiles/'.
+'		Attention: The above 'QuickUploadPath' must point to the same directory.
+'		Attention: It must end with a slash: '/'
+'
+
+Dim ConfigAllowedExtensions, ConfigDeniedExtensions, ConfigFileTypesPath, ConfigFileTypesAbsolutePath, ConfigQuickUploadPath, ConfigQuickUploadAbsolutePath
+Set ConfigAllowedExtensions	= CreateObject( "Scripting.Dictionary" )
+Set ConfigDeniedExtensions	= CreateObject( "Scripting.Dictionary" )
+Set ConfigFileTypesPath	= CreateObject( "Scripting.Dictionary" )
+Set ConfigFileTypesAbsolutePath	= CreateObject( "Scripting.Dictionary" )
+Set ConfigQuickUploadPath	= CreateObject( "Scripting.Dictionary" )
+Set ConfigQuickUploadAbsolutePath	= CreateObject( "Scripting.Dictionary" )
+
+ConfigAllowedExtensions.Add	"File", "7z|aiff|asf|avi|bmp|csv|doc|fla|flv|gif|gz|gzip|jpeg|jpg|mid|mov|mp3|mp4|mpc|mpeg|mpg|ods|odt|pdf|png|ppt|pxd|qt|ram|rar|rm|rmi|rmvb|rtf|sdc|sitd|swf|sxc|sxw|tar|tgz|tif|tiff|txt|vsd|wav|wma|wmv|xls|xml|zip"
+ConfigDeniedExtensions.Add	"File", ""
+ConfigFileTypesPath.Add "File", ConfigUserFilesPath & "file/"
+ConfigFileTypesAbsolutePath.Add "File", ""
+ConfigQuickUploadPath.Add "File", ConfigUserFilesPath
+ConfigQuickUploadAbsolutePath.Add "File", ""
+
+ConfigAllowedExtensions.Add	"Image", "bmp|gif|jpeg|jpg|png"
+ConfigDeniedExtensions.Add	"Image", ""
+ConfigFileTypesPath.Add "Image", ConfigUserFilesPath & "image/"
+ConfigFileTypesAbsolutePath.Add "Image", ""
+ConfigQuickUploadPath.Add "Image", ConfigUserFilesPath
+ConfigQuickUploadAbsolutePath.Add "Image", ""
+
+ConfigAllowedExtensions.Add	"Flash", "swf|flv"
+ConfigDeniedExtensions.Add	"Flash", ""
+ConfigFileTypesPath.Add "Flash", ConfigUserFilesPath & "flash/"
+ConfigFileTypesAbsolutePath.Add "Flash", ""
+ConfigQuickUploadPath.Add "Flash", ConfigUserFilesPath
+ConfigQuickUploadAbsolutePath.Add "Flash", ""
+
+ConfigAllowedExtensions.Add	"Media", "aiff|asf|avi|bmp|fla|flv|gif|jpeg|jpg|mid|mov|mp3|mp4|mpc|mpeg|mpg|png|qt|ram|rm|rmi|rmvb|swf|tif|tiff|wav|wma|wmv"
+ConfigDeniedExtensions.Add	"Media", ""
+ConfigFileTypesPath.Add "Media", ConfigUserFilesPath & "media/"
+ConfigFileTypesAbsolutePath.Add "Media", ""
+ConfigQuickUploadPath.Add "Media", ConfigUserFilesPath
+ConfigQuickUploadAbsolutePath.Add "Media", ""
+
+%>

Added: announcement/trunk/src/main/webapp/fckeditor/editor/filemanager/connectors/asp/connector.asp
===================================================================
--- announcement/trunk/src/main/webapp/fckeditor/editor/filemanager/connectors/asp/connector.asp	                        (rev 0)
+++ announcement/trunk/src/main/webapp/fckeditor/editor/filemanager/connectors/asp/connector.asp	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,88 @@
+<%@ CodePage=65001 Language="VBScript"%>
+<%
+Option Explicit
+Response.Buffer = True
+%>
+<%
+ ' FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ ' Copyright (C) 2003-2008 Frederico Caldeira Knabben
+ '
+ ' == BEGIN LICENSE ==
+ '
+ ' Licensed under the terms of any of the following licenses at your
+ ' choice:
+ '
+ '  - GNU General Public License Version 2 or later (the "GPL")
+ '    http://www.gnu.org/licenses/gpl.html
+ '
+ '  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ '    http://www.gnu.org/licenses/lgpl.html
+ '
+ '  - Mozilla Public License Version 1.1 or later (the "MPL")
+ '    http://www.mozilla.org/MPL/MPL-1.1.html
+ '
+ ' == END LICENSE ==
+ '
+ ' This is the File Manager Connector for ASP.
+%>
+<!--#include file="config.asp"-->
+<!--#include file="util.asp"-->
+<!--#include file="io.asp"-->
+<!--#include file="basexml.asp"-->
+<!--#include file="commands.asp"-->
+<!--#include file="class_upload.asp"-->
+<%
+
+If ( ConfigIsEnabled = False ) Then
+	SendError 1, "This connector is disabled. Please check the ""editor/filemanager/connectors/asp/config.asp"" file"
+End If
+
+DoResponse
+
+Sub DoResponse()
+	Dim sCommand, sResourceType, sCurrentFolder
+
+	' Get the main request information.
+	sCommand = Request.QueryString("Command")
+
+	sResourceType = Request.QueryString("Type")
+	If ( sResourceType = "" ) Then sResourceType = "File"
+
+	sCurrentFolder = GetCurrentFolder()
+
+	' Check if it is an allowed command
+	if ( Not IsAllowedCommand( sCommand ) ) then
+		SendError 1, "The """ & sCommand & """ command isn't allowed"
+	end if
+
+	' Check if it is an allowed resource type.
+	if ( Not IsAllowedType( sResourceType ) ) Then
+		SendError 1, "The """ & sResourceType & """ resource type isn't allowed"
+	end if
+
+	' File Upload doesn't have to Return XML, so it must be intercepted before anything.
+	If ( sCommand = "FileUpload" ) Then
+		FileUpload sResourceType, sCurrentFolder, sCommand
+		Exit Sub
+	End If
+
+	SetXmlHeaders
+
+	CreateXmlHeader sCommand, sResourceType, sCurrentFolder, GetUrlFromPath( sResourceType, sCurrentFolder, sCommand)
+
+	' Execute the required command.
+	Select Case sCommand
+		Case "GetFolders"
+			GetFolders sResourceType, sCurrentFolder
+		Case "GetFoldersAndFiles"
+			GetFoldersAndFiles sResourceType, sCurrentFolder
+		Case "CreateFolder"
+			CreateFolder sResourceType, sCurrentFolder
+	End Select
+
+	CreateXmlFooter
+
+	Response.End
+End Sub
+
+%>

Added: announcement/trunk/src/main/webapp/fckeditor/editor/filemanager/connectors/asp/io.asp
===================================================================
--- announcement/trunk/src/main/webapp/fckeditor/editor/filemanager/connectors/asp/io.asp	                        (rev 0)
+++ announcement/trunk/src/main/webapp/fckeditor/editor/filemanager/connectors/asp/io.asp	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,236 @@
+<%
+ ' FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ ' Copyright (C) 2003-2008 Frederico Caldeira Knabben
+ '
+ ' == BEGIN LICENSE ==
+ '
+ ' Licensed under the terms of any of the following licenses at your
+ ' choice:
+ '
+ '  - GNU General Public License Version 2 or later (the "GPL")
+ '    http://www.gnu.org/licenses/gpl.html
+ '
+ '  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ '    http://www.gnu.org/licenses/lgpl.html
+ '
+ '  - Mozilla Public License Version 1.1 or later (the "MPL")
+ '    http://www.mozilla.org/MPL/MPL-1.1.html
+ '
+ ' == END LICENSE ==
+ '
+ ' This file include IO specific functions used by the ASP Connector.
+%>
+<%
+function CombinePaths( sBasePath, sFolder)
+	CombinePaths =  RemoveFromEnd( sBasePath, "/" ) & "/" & RemoveFromStart( sFolder, "/" )
+end function
+
+function CombineLocalPaths( sBasePath, sFolder)
+	sFolder = replace(sFolder, "/", "\")
+	' The RemoveFrom* functions use RegExp, so we must escape the \
+	CombineLocalPaths =  RemoveFromEnd( sBasePath, "\\" ) & "\" & RemoveFromStart( sFolder, "\\" )
+end function
+
+Function GetResourceTypePath( resourceType, sCommand )
+	if ( sCommand = "QuickUpload") then
+		GetResourceTypePath = ConfigQuickUploadPath.Item( resourceType )
+	else
+		GetResourceTypePath = ConfigFileTypesPath.Item( resourceType )
+	end if
+end Function
+
+Function GetResourceTypeDirectory( resourceType, sCommand )
+	if ( sCommand = "QuickUpload") then
+
+		if ( ConfigQuickUploadAbsolutePath.Item( resourceType ) <> "" ) then
+			GetResourceTypeDirectory = ConfigQuickUploadAbsolutePath.Item( resourceType )
+		else
+			' Map the "UserFiles" path to a local directory.
+			GetResourceTypeDirectory = Server.MapPath( ConfigQuickUploadPath.Item( resourceType ) )
+		end if
+	else
+		if ( ConfigFileTypesAbsolutePath.Item( resourceType ) <> "" ) then
+			GetResourceTypeDirectory = ConfigFileTypesAbsolutePath.Item( resourceType )
+		else
+			' Map the "UserFiles" path to a local directory.
+			GetResourceTypeDirectory = Server.MapPath( ConfigFileTypesPath.Item( resourceType ) )
+		end if
+	end if
+end Function
+
+Function GetUrlFromPath( resourceType, folderPath, sCommand )
+	GetUrlFromPath = CombinePaths( GetResourceTypePath( resourceType, sCommand ), folderPath )
+End Function
+
+Function RemoveExtension( fileName )
+	RemoveExtension = Left( fileName, InStrRev( fileName, "." ) - 1 )
+End Function
+
+Function ServerMapFolder( resourceType, folderPath, sCommand )
+	Dim sResourceTypePath
+	' Get the resource type directory.
+	sResourceTypePath = GetResourceTypeDirectory( resourceType, sCommand )
+
+	' Ensure that the directory exists.
+	CreateServerFolder sResourceTypePath
+
+	' Return the resource type directory combined with the required path.
+	ServerMapFolder = CombineLocalPaths( sResourceTypePath, folderPath )
+End Function
+
+Sub CreateServerFolder( folderPath )
+	Dim oFSO
+	Set oFSO = Server.CreateObject( "Scripting.FileSystemObject" )
+
+	Dim sParent
+	sParent = oFSO.GetParentFolderName( folderPath )
+
+	' If folderPath is a network path (\\server\folder\) then sParent is an empty string.
+	' Get out.
+	if (sParent = "") then exit sub
+
+	' Check if the parent exists, or create it.
+	If ( NOT oFSO.FolderExists( sParent ) ) Then CreateServerFolder( sParent )
+
+	If ( oFSO.FolderExists( folderPath ) = False ) Then
+		On Error resume next
+		oFSO.CreateFolder( folderPath )
+
+		if err.number<>0 then
+		dim sErrorNumber
+		Dim iErrNumber, sErrDescription
+		iErrNumber		= err.number
+		sErrDescription	= err.Description
+
+		On Error Goto 0
+
+		Select Case iErrNumber
+			Case 52
+				sErrorNumber = "102"	' Invalid Folder Name.
+			Case 70
+				sErrorNumber = "103"	' Security Error.
+			Case 76
+				sErrorNumber = "102"	' Path too long.
+			Case Else
+				sErrorNumber = "110"
+			End Select
+
+			SendError sErrorNumber, "CreateServerFolder(" & folderPath & ") : " & sErrDescription
+		end if
+
+	End If
+
+	Set oFSO = Nothing
+End Sub
+
+Function IsAllowedExt( extension, resourceType )
+	Dim oRE
+	Set oRE	= New RegExp
+	oRE.IgnoreCase	= True
+	oRE.Global		= True
+
+	Dim sAllowed, sDenied
+	sAllowed	= ConfigAllowedExtensions.Item( resourceType )
+	sDenied		= ConfigDeniedExtensions.Item( resourceType )
+
+	IsAllowedExt = True
+
+	If sDenied <> "" Then
+		oRE.Pattern	= sDenied
+		IsAllowedExt	= Not oRE.Test( extension )
+	End If
+
+	If IsAllowedExt And sAllowed <> "" Then
+		oRE.Pattern		= sAllowed
+		IsAllowedExt	= oRE.Test( extension )
+	End If
+
+	Set oRE	= Nothing
+End Function
+
+Function IsAllowedType( resourceType )
+	Dim oRE
+	Set oRE	= New RegExp
+	oRE.IgnoreCase	= True
+	oRE.Global		= True
+	oRE.Pattern		= "^(" & ConfigAllowedTypes & ")$"
+
+	IsAllowedType = oRE.Test( resourceType )
+
+	Set oRE	= Nothing
+End Function
+
+Function IsAllowedCommand( sCommand )
+	Dim oRE
+	Set oRE	= New RegExp
+	oRE.IgnoreCase	= True
+	oRE.Global		= True
+	oRE.Pattern		= "^(" & ConfigAllowedCommands & ")$"
+
+	IsAllowedCommand = oRE.Test( sCommand )
+
+	Set oRE	= Nothing
+End Function
+
+function GetCurrentFolder()
+	dim sCurrentFolder
+	sCurrentFolder = Request.QueryString("CurrentFolder")
+	If ( sCurrentFolder = "" ) Then sCurrentFolder = "/"
+
+	' Check the current folder syntax (must begin and start with a slash).
+	If ( Right( sCurrentFolder, 1 ) <> "/" ) Then sCurrentFolder = sCurrentFolder & "/"
+	If ( Left( sCurrentFolder, 1 ) <> "/" ) Then sCurrentFolder = "/" & sCurrentFolder
+
+	' Check for invalid folder paths (..)
+	If ( InStr( 1, sCurrentFolder, ".." ) <> 0 OR InStr( 1, sCurrentFolder, "\" ) <> 0) Then
+		SendError 102, ""
+	End If
+
+	GetCurrentFolder = sCurrentFolder
+end function
+
+' Do a cleanup of the folder name to avoid possible problems
+function SanitizeFolderName( sNewFolderName )
+	Dim oRegex
+	Set oRegex = New RegExp
+	oRegex.Global		= True
+
+' remove . \ / | : ? *  " < > and control characters
+	oRegex.Pattern = "(\.|\\|\/|\||:|\?|\*|""|\<|\>|[\u0000-\u001F]|\u007F)"
+	SanitizeFolderName = oRegex.Replace( sNewFolderName, "_" )
+
+	Set oRegex = Nothing
+end function
+
+' Do a cleanup of the file name to avoid possible problems
+function SanitizeFileName( sNewFileName )
+	Dim oRegex
+	Set oRegex = New RegExp
+	oRegex.Global		= True
+
+	if ( ConfigForceSingleExtension = True ) then
+		oRegex.Pattern = "\.(?![^.]*$)"
+		sNewFileName = oRegex.Replace( sNewFileName, "_" )
+	end if
+
+' remove \ / | : ? *  " < > and control characters
+	oRegex.Pattern = "(\\|\/|\||:|\?|\*|""|\<|\>|[\u0000-\u001F]|\u007F)"
+	SanitizeFileName = oRegex.Replace( sNewFileName, "_" )
+
+	Set oRegex = Nothing
+end function
+
+' This is the function that sends the results of the uploading process.
+Sub SendUploadResults( errorNumber, fileUrl, fileName, customMsg )
+	Response.Clear
+	Response.Write "<script type=""text/javascript"">"
+	' Minified version of the document.domain automatic fix script (#1919).
+	' The original script can be found at _dev/domain_fix_template.js
+	Response.Write "(function(){var d=document.domain;while (true){try{var A=window.parent.document.domain;break;}catch(e) {};d=d.replace(/.*?(?:\.|$)/,'');if (d.length==0) break;try{document.domain=d;}catch (e){break;}}})();"
+
+	Response.Write "window.parent.OnUploadCompleted(" & errorNumber & ",""" & Replace( fileUrl, """", "\""" ) & """,""" & Replace( fileName, """", "\""" ) & """,""" & Replace( customMsg , """", "\""" ) & """) ;"
+	Response.Write "</script>"
+	Response.End
+End Sub
+
+%>

Added: announcement/trunk/src/main/webapp/fckeditor/editor/filemanager/connectors/asp/upload.asp
===================================================================
--- announcement/trunk/src/main/webapp/fckeditor/editor/filemanager/connectors/asp/upload.asp	                        (rev 0)
+++ announcement/trunk/src/main/webapp/fckeditor/editor/filemanager/connectors/asp/upload.asp	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,65 @@
+<%@ CodePage=65001 Language="VBScript"%>
+<%
+Option Explicit
+Response.Buffer = True
+%>
+<%
+ ' FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ ' Copyright (C) 2003-2008 Frederico Caldeira Knabben
+ '
+ ' == BEGIN LICENSE ==
+ '
+ ' Licensed under the terms of any of the following licenses at your
+ ' choice:
+ '
+ '  - GNU General Public License Version 2 or later (the "GPL")
+ '    http://www.gnu.org/licenses/gpl.html
+ '
+ '  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ '    http://www.gnu.org/licenses/lgpl.html
+ '
+ '  - Mozilla Public License Version 1.1 or later (the "MPL")
+ '    http://www.mozilla.org/MPL/MPL-1.1.html
+ '
+ ' == END LICENSE ==
+ '
+ ' This is the "File Uploader" for ASP.
+%>
+<!--#include file="config.asp"-->
+<!--#include file="util.asp"-->
+<!--#include file="io.asp"-->
+<!--#include file="commands.asp"-->
+<!--#include file="class_upload.asp"-->
+<%
+
+Sub SendError( number, text )
+	SendUploadResults number, "", "", text
+End Sub
+
+' Check if this uploader has been enabled.
+If ( ConfigIsEnabled = False ) Then
+	SendUploadResults "1", "", "", "This file uploader is disabled. Please check the ""editor/filemanager/connectors/asp/config.asp"" file"
+End If
+
+	Dim sCommand, sResourceType, sCurrentFolder
+
+	sCommand = "QuickUpload"
+
+	sResourceType = Request.QueryString("Type")
+	If ( sResourceType = "" ) Then sResourceType = "File"
+
+	sCurrentFolder = GetCurrentFolder()
+
+	' Is Upload enabled?
+	if ( Not IsAllowedCommand( sCommand ) ) then
+		SendUploadResults "1", "", "", "The """ & sCommand & """ command isn't allowed"
+	end if
+
+	' Check if it is an allowed resource type.
+	if ( Not IsAllowedType( sResourceType ) ) Then
+		SendUploadResults "1", "", "", "The " & sResourceType & " resource type isn't allowed"
+	end if
+
+	FileUpload sResourceType, sCurrentFolder, sCommand
+
+%>

Added: announcement/trunk/src/main/webapp/fckeditor/editor/filemanager/connectors/asp/util.asp
===================================================================
--- announcement/trunk/src/main/webapp/fckeditor/editor/filemanager/connectors/asp/util.asp	                        (rev 0)
+++ announcement/trunk/src/main/webapp/fckeditor/editor/filemanager/connectors/asp/util.asp	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,55 @@
+<%
+ ' FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ ' Copyright (C) 2003-2008 Frederico Caldeira Knabben
+ '
+ ' == BEGIN LICENSE ==
+ '
+ ' Licensed under the terms of any of the following licenses at your
+ ' choice:
+ '
+ '  - GNU General Public License Version 2 or later (the "GPL")
+ '    http://www.gnu.org/licenses/gpl.html
+ '
+ '  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ '    http://www.gnu.org/licenses/lgpl.html
+ '
+ '  - Mozilla Public License Version 1.1 or later (the "MPL")
+ '    http://www.mozilla.org/MPL/MPL-1.1.html
+ '
+ ' == END LICENSE ==
+ '
+ ' This file include generic functions used by the ASP Connector.
+%>
+<%
+Function RemoveFromStart( sourceString, charToRemove )
+	Dim oRegex
+	Set oRegex = New RegExp
+	oRegex.Pattern = "^" & charToRemove & "+"
+
+	RemoveFromStart = oRegex.Replace( sourceString, "" )
+End Function
+
+Function RemoveFromEnd( sourceString, charToRemove )
+	Dim oRegex
+	Set oRegex = New RegExp
+	oRegex.Pattern = charToRemove & "+$"
+
+	RemoveFromEnd = oRegex.Replace( sourceString, "" )
+End Function
+
+Function ConvertToXmlAttribute( value )
+	ConvertToXmlAttribute = Replace( value, "&", "&amp;" )
+End Function
+
+Function InArray( value, sourceArray )
+	Dim i
+	For i = 0 to UBound( sourceArray )
+		If sourceArray(i) = value Then
+			InArray = True
+			Exit Function
+		End If
+	Next
+	InArray = False
+End Function
+
+%>

Added: announcement/trunk/src/main/webapp/fckeditor/editor/filemanager/connectors/aspx/config.ascx
===================================================================
--- announcement/trunk/src/main/webapp/fckeditor/editor/filemanager/connectors/aspx/config.ascx	                        (rev 0)
+++ announcement/trunk/src/main/webapp/fckeditor/editor/filemanager/connectors/aspx/config.ascx	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,98 @@
+<%@ Control Language="C#" EnableViewState="false" AutoEventWireup="false" Inherits="FredCK.FCKeditorV2.FileBrowser.Config" %>
+<%--
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2008 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * Configuration file for the File Browser Connector for ASP.NET.
+--%>
+<script runat="server">
+
+	/**
+	 * This function must check the user session to be sure that he/she is
+	 * authorized to upload and access files in the File Browser.
+	 */
+	private bool CheckAuthentication()
+	{
+		// WARNING : DO NOT simply return "true". By doing so, you are allowing
+		// "anyone" to upload and list the files in your server. You must implement
+		// some kind of session validation here. Even something very simple as...
+		//
+		//		return ( Session[ "IsAuthorized" ] != null && (bool)Session[ "IsAuthorized" ] == true );
+		//
+		// ... where Session[ "IsAuthorized" ] is set to "true" as soon as the
+		// user logs in your system.
+
+		return false;
+	}
+
+	public override void SetConfig()
+	{
+		// SECURITY: You must explicitly enable this "connector". (Set it to "true").
+		Enabled = CheckAuthentication();
+
+		// URL path to user files.
+		UserFilesPath = "/userfiles/";
+
+		// The connector tries to resolve the above UserFilesPath automatically.
+		// Use the following setting it you prefer to explicitely specify the
+		// absolute path. Examples: 'C:\\MySite\\userfiles\\' or '/root/mysite/userfiles/'.
+		// Attention: The above 'UserFilesPath' URL must point to the same directory.
+		UserFilesAbsolutePath = "";
+
+		// Due to security issues with Apache modules, it is recommended to leave the
+		// following setting enabled.
+		ForceSingleExtension = true;
+
+		// Allowed Resource Types
+		AllowedTypes = new string[] { "File", "Image", "Flash", "Media" };
+
+		// For security, HTML is allowed in the first Kb of data for files having the
+		// following extensions only.
+		HtmlExtensions = new string[] { "html", "htm", "xml", "xsd", "txt", "js" };
+
+		TypeConfig[ "File" ].AllowedExtensions			= new string[] { "7z", "aiff", "asf", "avi", "bmp", "csv", "doc", "fla", "flv", "gif", "gz", "gzip", "jpeg", "jpg", "mid", "mov", "mp3", "mp4", "mpc", "mpeg", "mpg", "ods", "odt", "pdf", "png", "ppt", "pxd", "qt", "ram", "rar", "rm", "rmi", "rmvb", "rtf", "sdc", "sitd", "swf", "sxc", "sxw", "tar", "tgz", "tif", "tiff", "txt", "vsd", "wav", "wma", "wmv", "xls", "xml", "zip" };
+		TypeConfig[ "File" ].DeniedExtensions			= new string[] { };
+		TypeConfig[ "File" ].FilesPath					= "%UserFilesPath%file/";
+		TypeConfig[ "File" ].FilesAbsolutePath			= ( UserFilesAbsolutePath == "" ? "" : "%UserFilesAbsolutePath%file/" );
+		TypeConfig[ "File" ].QuickUploadPath			= "%UserFilesPath%";
+		TypeConfig[ "File" ].QuickUploadAbsolutePath	= ( UserFilesAbsolutePath == "" ? "" : "%UserFilesAbsolutePath%" );
+
+		TypeConfig[ "Image" ].AllowedExtensions			= new string[] { "bmp", "gif", "jpeg", "jpg", "png" };
+		TypeConfig[ "Image" ].DeniedExtensions			= new string[] { };
+		TypeConfig[ "Image" ].FilesPath					= "%UserFilesPath%image/";
+		TypeConfig[ "Image" ].FilesAbsolutePath			= ( UserFilesAbsolutePath == "" ? "" : "%UserFilesAbsolutePath%image/" );
+		TypeConfig[ "Image" ].QuickUploadPath			= "%UserFilesPath%";
+		TypeConfig[ "Image" ].QuickUploadAbsolutePath	= ( UserFilesAbsolutePath == "" ? "" : "%UserFilesAbsolutePath%" );
+
+		TypeConfig[ "Flash" ].AllowedExtensions			= new string[] { "swf", "flv" };
+		TypeConfig[ "Flash" ].DeniedExtensions			= new string[] { };
+		TypeConfig[ "Flash" ].FilesPath					= "%UserFilesPath%flash/";
+		TypeConfig[ "Flash" ].FilesAbsolutePath			= ( UserFilesAbsolutePath == "" ? "" : "%UserFilesAbsolutePath%flash/" );
+		TypeConfig[ "Flash" ].QuickUploadPath			= "%UserFilesPath%";
+		TypeConfig[ "Flash" ].QuickUploadAbsolutePath	= ( UserFilesAbsolutePath == "" ? "" : "%UserFilesAbsolutePath%" );
+
+		TypeConfig[ "Media" ].AllowedExtensions			= new string[] { "aiff", "asf", "avi", "bmp", "fla", "flv", "gif", "jpeg", "jpg", "mid", "mov", "mp3", "mp4", "mpc", "mpeg", "mpg", "png", "qt", "ram", "rm", "rmi", "rmvb", "swf", "tif", "tiff", "wav", "wma", "wmv" };
+		TypeConfig[ "Media" ].DeniedExtensions			= new string[] { };
+		TypeConfig[ "Media" ].FilesPath					= "%UserFilesPath%media/";
+		TypeConfig[ "Media" ].FilesAbsolutePath			= ( UserFilesAbsolutePath == "" ? "" : "%UserFilesAbsolutePath%media/" );
+		TypeConfig[ "Media" ].QuickUploadPath			= "%UserFilesPath%";
+		TypeConfig[ "Media" ].QuickUploadAbsolutePath	= ( UserFilesAbsolutePath == "" ? "" : "%UserFilesAbsolutePath%" );
+	}
+
+</script>

Added: announcement/trunk/src/main/webapp/fckeditor/editor/filemanager/connectors/aspx/connector.aspx
===================================================================
--- announcement/trunk/src/main/webapp/fckeditor/editor/filemanager/connectors/aspx/connector.aspx	                        (rev 0)
+++ announcement/trunk/src/main/webapp/fckeditor/editor/filemanager/connectors/aspx/connector.aspx	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,32 @@
+<%@ Page Language="c#" Trace="false" Inherits="FredCK.FCKeditorV2.FileBrowser.Connector" AutoEventWireup="false" %>
+<%@ Register Src="config.ascx" TagName="Config" TagPrefix="FCKeditor" %>
+<%--
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2008 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * This is the File Browser Connector for ASP.NET.
+ *
+ * The code of this page if included in the FCKeditor.Net package,
+ * in the FredCK.FCKeditorV2.dll assembly file. So to use it you must
+ * include that DLL in your "bin" directory.
+ *
+ * To download the FCKeditor.Net package, go to our official web site:
+ * http://www.fckeditor.net
+--%>
+<FCKeditor:Config id="Config" runat="server"></FCKeditor:Config>

Added: announcement/trunk/src/main/webapp/fckeditor/editor/filemanager/connectors/aspx/upload.aspx
===================================================================
--- announcement/trunk/src/main/webapp/fckeditor/editor/filemanager/connectors/aspx/upload.aspx	                        (rev 0)
+++ announcement/trunk/src/main/webapp/fckeditor/editor/filemanager/connectors/aspx/upload.aspx	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,32 @@
+<%@ Page Language="c#" Trace="false" Inherits="FredCK.FCKeditorV2.FileBrowser.Uploader" AutoEventWireup="false" %>
+<%@ Register Src="config.ascx" TagName="Config" TagPrefix="FCKeditor" %>
+<%--
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2008 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * This is the Uploader for ASP.NET.
+ *
+ * The code of this page if included in the FCKeditor.Net package,
+ * in the FredCK.FCKeditorV2.dll assemblyfile. So to use it you must
+ * include that DLL in your "bin" directory.
+ *
+ * To download the FCKeditor.Net package, go to our official web site:
+ * http://www.fckeditor.net
+--%>
+<FCKeditor:Config id="Config" runat="server"></FCKeditor:Config>

Added: announcement/trunk/src/main/webapp/fckeditor/editor/filemanager/connectors/cfm/ImageObject.cfc
===================================================================
--- announcement/trunk/src/main/webapp/fckeditor/editor/filemanager/connectors/cfm/ImageObject.cfc	                        (rev 0)
+++ announcement/trunk/src/main/webapp/fckeditor/editor/filemanager/connectors/cfm/ImageObject.cfc	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,273 @@
+<cfcomponent name="ImageObject">
+<!---
+	ImageObject.cfc written by Rick Root (rick****@webwo*****)
+
+	Related Web Sites:
+	- http://www.opensourcecf.com/imagecfc (home page)
+
+
+	This is an object oriented interface to the original
+	ImageCFC.
+
+	Example Code:
+
+	io = createObject("component","ImageObject");
+	io.setOption("defaultJpegCompression",95);
+	io.init("#ExpandPath(".")#/emily.jpg");
+	io.scaleWidth(500);
+	io.save("#ExpandPath(".")#/imagex1.jpg");
+
+	io.flipHorizontal();
+	io.save("#ExpandPath(".")#/imagex2.jpg");
+	io.revert();
+	io.filterFastBlur(2,5);
+	io.save("#ExpandPath(".")#/imagex3.jpg");
+	io.revert();
+	io.filterPosterize(32);
+	io.save("#ExpandPath(".")#/imagex4.jpg");
+
+
+	LICENSE
+	-------
+	Copyright (c) 2006, Rick Root <rick****@webwo*****>
+	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 Webworks, LLC. 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.
+--->
+
+<cfset variables.img = "">
+<cfset variables.revertimg = "">
+<cfset variables.imageCFC = createObject("component","image")>
+<cfset variables.imageInfo = structNew()>
+	<cfset variables.imageInfo.width = 0>
+	<cfset variables.imageInfo.height = 0>
+	<cfset variables.imageInfo.colorModel = "">
+	<cfset variables.imageInfo.colorspace = "">
+	<cfset variables.imageInfo.objColorModel = "">
+	<cfset variables.imageInfo.objColorspace = "">
+	<cfset variables.imageInfo.sampleModel = "">
+	<cfset variables.imageInfo.imageType = 0>
+	<cfset variables.imageInfo.misc = "">
+	<cfset variables.imageInfo.canModify = false>
+<cfset variables.imageCFC.setOption("throwonerror",true)>
+
+<!---
+
+	init(filename)        Initialize object from a file.
+	init(width, height)   Initialize with a blank image
+	init(bufferedImage)   Initiailize with an existing object
+--->
+<cffunction name="init" access="public" output="false" returnType="void">
+	<cfargument name="arg1" type="any" required="yes">
+	<cfargument name="arg2" type="any" required="no">
+
+	<cfif isDefined("arg2") and isNumeric(arg1) and isNumeric(arg2)>
+		<cfset arg1 = javacast("int",int(arg1))>
+		<cfset arg2 = javacast("int",int(arg2))>
+		<cfset variables.img = createObject("java","java.awt.image.BufferedImage")>
+		<cfset variables.img.init(arg1,arg2,variables.img.TYPE_INT_RGB)>
+	<cfelseif arg1.getClass().getName() eq "java.awt.image.BufferedImage">
+		<cfset variables.img = arg1>
+	<cfelseif isSimpleValue(arg1) and len(arg1) gt 0>
+		<cfset imageResults = variables.imageCFC.readImage(arg1, "no")>
+		<cfset variables.img = imageResults.img>
+	<cfelse>
+		<cfthrow message="Object Instantiation Error" detail="You have attempted to initialize ooimage.cfc with invalid arguments.  Please consult the documentation for correct initialization arguments.">
+	</cfif>
+	<cfif variables.revertimg eq "">
+		<cfset variables.revertimg = variables.img>
+	</cfif>
+	<cfset variables.imageInfo = imageCFC.getImageInfo(variables.img,"")>
+	<cfreturn>
+</cffunction>
+
+<cffunction name="flipHorizontal" access="public" output="true" returnType="void" hint="Flip an image horizontally.">
+	<cfset var imageResults = imageCFC.flipHorizontal(variables.img,"","")>
+	<cfset variables.revertimg = variables.img>
+	<cfset variables.img = imageResults.img>
+	<cfset variables.imageInfo = imageCFC.getImageInfo(variables.img,"")>
+</cffunction>
+
+<cffunction name="getImageInfo" access="public" output="true" returntype="struct" hint="Returns image information.">
+	<cfreturn variables.imageInfo>
+</cffunction>
+<cffunction name="getImageObject" access="public" output="true" returntype="struct" hint="Returns a java Buffered Image Object.">
+	<cfreturn variables.img>
+</cffunction>
+
+<cffunction name="flipVertical" access="public" output="true" returntype="void" hint="Flop an image vertically.">
+	<cfset var imageResults = imageCFC.flipVertical(variables.img,"","")>
+	<cfset variables.revertimg = variables.img>
+	<cfset variables.img = imageResults.img>
+	<cfset variables.imageInfo = imageCFC.getImageInfo(variables.img,"")>
+</cffunction>
+
+<cffunction name="scaleWidth" access="public" output="true" returntype="void" hint="Scale an image to a specific width.">
+	<cfargument name="newWidth" required="yes" type="numeric">
+	<cfset var imageResults = imageCFC.scaleWidth(variables.img,"","", newWidth)>
+	<cfset variables.revertimg = variables.img>
+	<cfset variables.img = imageResults.img>
+	<cfset variables.imageInfo = imageCFC.getImageInfo(variables.img,"")>
+
+</cffunction>
+
+<cffunction name="scaleHeight" access="public" output="true" returntype="void" hint="Scale an image to a specific height.">
+	<cfargument name="newHeight" required="yes" type="numeric">
+	<cfset var imageResults = imageCFC.scaleHeight(variables.img,"","", newHeight)>
+	<cfset variables.revertimg = variables.img>
+	<cfset variables.img = imageResults.img>
+	<cfset variables.imageInfo = imageCFC.getImageInfo(variables.img,"")>
+</cffunction>
+
+<cffunction name="resize" access="public" output="true" returntype="void" hint="Resize an image to a specific width and height.">
+	<cfargument name="newWidth" required="yes" type="numeric">
+	<cfargument name="newHeight" required="yes" type="numeric">
+	<cfargument name="preserveAspect" required="no" type="boolean" default="FALSE">
+	<cfargument name="cropToExact" required="no" type="boolean" default="FALSE">
+
+	<cfset var imageResults = imageCFC.resize(variables.img,"","",newWidth,newHeight,preserveAspect,cropToExact)>
+	<cfset variables.revertimg = variables.img>
+	<cfset variables.img = imageResults.img>
+	<cfset variables.imageInfo = imageCFC.getImageInfo(variables.img,"")>
+</cffunction>
+
+<cffunction name="crop" access="public" output="true" returntype="void" hint="Crop an image.">
+	<cfargument name="fromX" required="yes" type="numeric">
+	<cfargument name="fromY" required="yes" type="numeric">
+	<cfargument name="newWidth" required="yes" type="numeric">
+	<cfargument name="newHeight" required="yes" type="numeric">
+	<cfset var imageResults = imageCFC.crop(variables.img,"","",fromX,fromY,newWidth,newHeight)>
+	<cfset variables.revertimg = variables.img>
+	<cfset variables.img = imageResults.img>
+	<cfset variables.imageInfo = imageCFC.getImageInfo(variables.img,"")>
+
+</cffunction>
+
+<cffunction name="rotate" access="public" output="true" returntype="void" hint="Rotate an image (+/-)90, (+/-)180, or (+/-)270 degrees.">
+	<cfargument name="degrees" required="yes" type="numeric">
+	<cfset var imageResults = imageCFC.rotate(variables.img,"","",degrees)>
+	<cfset variables.revertimg = variables.img>
+	<cfset variables.img = imageResults.img>
+	<cfset variables.imageInfo = imageCFC.getImageInfo(variables.img,"")>
+
+</cffunction>
+
+<cffunction name="setOption" access="public" output="true" returnType="void" hint="Sets values for allowed CFC options.">
+	<cfargument name="key" type="string" required="yes">
+	<cfargument name="val" type="string" required="yes">
+	<cfif lcase(trim(key)) eq "throwonerror">
+		<cfthrow message="Option Configuration Error" detail="You cannot set the throwOnError option when using ImageObject.cfc">
+	</cfif>
+	<cfset imageCFC.setOption(key, val)>
+
+</cffunction>
+
+<cffunction name="getOption" access="public" output="true" returnType="any" hint="Returns the current value for the specified CFC option.">
+	<cfargument name="key" type="string" required="yes">
+	<cfreturn imageCFC.getOption(key)>
+</cffunction>
+
+<cffunction name="filterFastBlur" access="public" output="true" returntype="void" hint="Internal method used for flipping and flopping images.">
+	<cfargument name="blurAmount" required="yes" type="numeric">
+	<cfargument name="iterations" required="yes" type="numeric">
+	<cfset var imageResults = imageCFC.filterFastBlur(variables.img,"","",blurAmount,iterations)>
+	<cfset variables.revertimg = variables.img>
+	<cfset variables.img = imageResults.img>
+	<cfset variables.imageInfo = imageCFC.getImageInfo(variables.img,"")>
+
+</cffunction>
+
+<cffunction name="filterSharpen" access="public" output="true" returntype="void" hint="Internal method used for flipping and flopping images.">
+	<cfset var imageResults = imageCFC.filterSharpen(variables.img,"","")>
+	<cfset variables.revertimg = variables.img>
+	<cfset variables.img = imageResults.img>
+	<cfset variables.imageInfo = imageCFC.getImageInfo(variables.img,"")>
+
+</cffunction>
+
+
+<cffunction name="filterPosterize" access="public" output="true" returntype="void" hint="Internal method used for flipping and flopping images.">
+	<cfargument name="amount" required="yes" type="string">
+	<cfset var imageResults = imageCFC.filterPosterize(variables.img,"","",amount)>
+	<cfset variables.revertimg = variables.img>
+	<cfset variables.img = imageResults.img>
+	<cfset variables.imageInfo = imageCFC.getImageInfo(variables.img,"")>
+</cffunction>
+
+
+<cffunction name="addText" access="public" output="true" returntype="void" hint="Add text to an image.">
+	<cfargument name="x" required="yes" type="numeric">
+	<cfargument name="y" required="yes" type="numeric">
+	<cfargument name="fontDetails" required="yes" type="struct">
+	<cfargument name="content" required="yes" type="String">
+	<cfset var imageResults = imageCFC.addText(variables.img,"","",x,y,fontDetails,content)>
+	<cfset variables.revertimg = variables.img>
+	<cfset variables.img = imageResults.img>
+	<cfset variables.imageInfo = imageCFC.getImageInfo(variables.img,"")>
+
+</cffunction>
+
+<cffunction name="watermark" access="public" output="false" returnType="void">
+	<cfargument name="wmImage" required="yes" type="Any">
+	<cfargument name="alpha" required="yes" type="numeric">
+	<cfargument name="placeAtX" required="yes" type="numeric">
+	<cfargument name="placeAtY" required="yes" type="numeric">
+
+	<cfset var imageResults = "">
+	<cfif isSimpleValue(wmImage)>
+		<!--- filename or URL --->
+		<cfset imageResults = imageCFC.watermark(variables.img,"","",wmImage,alpha,placeAtX,placeAtY)>
+	<cfelse>
+		<!--- must be a java object --->
+		<cfset imageResults = imageCFC.watermark(variables.img,wmImage,"","",alpha,placeAtX,placeAtY)>
+	</cfif>
+	<cfset variables.revertimg = variables.img>
+	<cfset variables.img = imageResults.img>
+	<cfset variables.imageInfo = imageCFC.getImageInfo(variables.img,"")>
+
+</cffunction>
+
+<cffunction name="save" access="public" output="false" returnType="void">
+	<cfargument name="filename" type="string" required="no">
+	<cfargument name="jpegCompression" type="numeric" required="no">
+	<cfif isDefined("arguments.jpegCompression") and isNumeric(arguments.jpegCompression)>
+		<cfset imageCFC.writeImage(filename,variables.img,jpegCompression)>
+	<cfelse>
+		<cfset imageCFC.writeImage(filename,variables.img)>
+	</cfif>
+</cffunction>
+
+<cffunction name="revert" access="public" output="true" returntype="void" hint="Undo the previous manipulation.">
+	<cfset variables.img = variables.revertimg>
+	<cfset variables.imageInfo = imageCFC.getImageInfo(variables.img,"")>
+</cffunction>
+
+</cfcomponent>

Added: announcement/trunk/src/main/webapp/fckeditor/editor/filemanager/connectors/cfm/cf5_connector.cfm
===================================================================
--- announcement/trunk/src/main/webapp/fckeditor/editor/filemanager/connectors/cfm/cf5_connector.cfm	                        (rev 0)
+++ announcement/trunk/src/main/webapp/fckeditor/editor/filemanager/connectors/cfm/cf5_connector.cfm	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,315 @@
+<cfsetting enablecfoutputonly="yes" showdebugoutput="no">
+<!---
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2008 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * File Browser connector for ColdFusion 5.
+ * (based on the original CF connector by Hendrik Kramer - hk****@lwd*****)
+ *
+ * Note:
+ * FCKeditor requires that the connector responds with UTF-8 encoded XML.
+ * As ColdFusion 5 does not fully support UTF-8 encoding, we force ASCII
+ * file and folder names in this connector to allow CF5 send a UTF-8
+ * encoded response - code points under 127 in UTF-8 are stored using a
+ * single byte, using the same encoding as ASCII, which is damn handy.
+ * This is all grand for the English speakers, like meself, but I dunno
+ * how others are gonna take to it. Well, the previous version of this
+ * connector already did this with file names and nobody seemed to mind,
+ * so fingers-crossed nobody will mind their folder names being munged too.
+ *
+--->
+
+<cfparam name="url.command">
+<cfparam name="url.type">
+<cfparam name="url.currentFolder">
+<!--- note: no serverPath url parameter - see config.cfm if you need to set the serverPath manually --->
+
+<cfinclude template="config.cfm">
+
+<cfscript>
+	userFilesPath = config.userFilesPath;
+
+	if ( userFilesPath eq "" )
+	{
+		userFilesPath = "/userfiles/";
+	}
+
+	// make sure the user files path is correctly formatted
+	userFilesPath = replace(userFilesPath, "\", "/", "ALL");
+	userFilesPath = replace(userFilesPath, '//', '/', 'ALL');
+	if ( right(userFilesPath,1) NEQ "/" )
+	{
+		userFilesPath = userFilesPath & "/";
+	}
+	if ( left(userFilesPath,1) NEQ "/" )
+	{
+		userFilesPath = "/" & userFilesPath;
+	}
+
+	// make sure the current folder is correctly formatted
+	url.currentFolder = replace(url.currentFolder, "\", "/", "ALL");
+	url.currentFolder = replace(url.currentFolder, '//', '/', 'ALL');
+	if ( right(url.currentFolder,1) neq "/" )
+	{
+		url.currentFolder = url.currentFolder & "/";
+	}
+	if ( left(url.currentFolder,1) neq "/" )
+	{
+		url.currentFolder = "/" & url.currentFolder;
+	}
+
+	if ( find("/",getBaseTemplatePath()) neq 0 )
+	{
+		fs = "/";
+	}
+	else
+	{
+		fs = "\";
+	}
+
+	// Get the base physical path to the web root for this application. The code to determine the path automatically assumes that
+	// the "FCKeditor" directory in the http request path is directly off the web root for the application and that it's not a
+	// virtual directory or a symbolic link / junction. Use the serverPath config setting to force a physical path if necessary.
+	if ( len(config.serverPath) )
+	{
+		serverPath = config.serverPath;
+
+		if ( right(serverPath,1) neq fs )
+		{
+			serverPath = serverPath & fs;
+		}
+	}
+	else
+	{
+		serverPath = replaceNoCase(getBaseTemplatePath(),replace(cgi.script_name,"/",fs,"all"),"") & replace(userFilesPath,"/",fs,"all");
+	}
+
+	rootPath = left( serverPath, Len(serverPath) - Len(userFilesPath) ) ;
+	xmlContent = ""; // append to this string to build content
+</cfscript>
+
+<cfset resourceTypeUrl = rereplace( replace( Config.FileTypesPath[url.type], fs, "/", "all"), "/$", "") >
+
+<cfif isDefined( "Config.FileTypesAbsolutePath" )
+		and structkeyexists( Config.FileTypesAbsolutePath, url.type )
+		and Len( Config.FileTypesAbsolutePath[url.type] )>
+
+			<cfset userFilesServerPath = Config.FileTypesAbsolutePath[url.type] & url.currentFolder>
+<cfelse>
+	<cftry>
+	<cfset userFilesServerPath = expandpath( resourceTypeUrl ) & url.currentFolder>
+	<!--- Catch: Parameter 1 of function ExpandPath must be a relative path --->
+	<cfcatch type="any">
+		<cfset userFilesServerPath = rootPath & Config.FileTypesPath[url.type] & url.currentFolder>
+	</cfcatch>
+	</cftry>
+</cfif>
+
+<cfset userFilesServerPath = replace( userFilesServerPath, "/", fs, "all" ) >
+<!--- get rid of double directory separators --->
+<cfset userFilesServerPath = replace( userFilesServerPath, fs & fs, fs, "all") >
+
+<cfif not config.enabled>
+
+	<cfset xmlContent = "<Error number=""1"" text=""This connector is disabled. Please check the 'editor/filemanager/connectors/cfm/config.cfm' file"" />">
+
+<cfelseif find("..",url.currentFolder) or find("\",url.currentFolder)>
+
+	<cfset xmlContent = "<Error number=""102"" />">
+
+<cfelseif isDefined("Config.ConfigAllowedCommands") and not ListFind(Config.ConfigAllowedCommands, url.command)>
+
+	<cfset xmlContent = '<Error number="1" text="The &quot;' & url.command & '&quot; command isn''t allowed" />'>
+
+<cfelseif isDefined("Config.ConfigAllowedTypes") and not ListFind(Config.ConfigAllowedTypes, url.type)>
+
+	<cfset xmlContent = '<Error number="1" text="The &quot;' & url.type & '&quot; type isn''t allowed" />'>
+
+</cfif>
+
+<cfset resourceTypeDirectory = left( userFilesServerPath, Len(userFilesServerPath) - Len(url.currentFolder) )>
+
+<cfif not len(xmlContent) and not directoryexists(resourceTypeDirectory)>
+	<!--- create directories in physical path if they don't already exist --->
+	<cfset currentPath = "">
+	<cftry>
+		<cfloop list="#resourceTypeDirectory#" index="name" delimiters="#fs#">
+			<cfif currentPath eq "" and fs eq "\">
+				<!--- Without checking this, we would have in Windows \C:\ --->
+				<cfif not directoryExists(name)>
+					<cfdirectory action="create" directory="#name#" mode="755">
+				</cfif>
+			<cfelse>
+				<cfif not directoryExists(currentPath & fs & name)>
+					<cfdirectory action="create" directory="#currentPath##fs##name#" mode="755">
+				</cfif>
+			</cfif>
+
+			<cfif fs eq "\" and currentPath eq "">
+				<cfset currentPath = name>
+			<cfelse>
+				<cfset currentPath = currentPath & fs & name>
+			</cfif>
+		</cfloop>
+
+	<cfcatch type="any">
+
+		<!--- this should only occur as a result of a permissions problem --->
+		<cfset xmlContent = "<Error number=""103"" />">
+
+	</cfcatch>
+
+	</cftry>
+</cfif>
+
+<cfif not len(xmlContent)>
+
+	<!--- no errors thus far - run command --->
+
+	<!--- we need to know the physical path to the current folder for all commands --->
+	<cfset currentFolderPath = userFilesServerPath>
+
+	<cfswitch expression="#url.command#">
+
+		<cfcase value="FileUpload">
+			<cfset config_included = true >
+			<cfinclude template="cf5_upload.cfm">
+			<cfabort>
+		</cfcase>
+
+
+		<cfcase value="GetFolders">
+
+			<!--- Sort directories first, name ascending --->
+			<cfdirectory
+				action="list"
+				directory="#currentFolderPath#"
+				name="qDir"
+				sort="type,name">
+
+			<cfscript>
+				i=1;
+				folders = "";
+				while( i lte qDir.recordCount ) {
+					if( not compareNoCase( qDir.type[i], "FILE" ))
+						break;
+					if( not listFind(".,..", qDir.name[i]) )
+						folders = folders & '<Folder name="#HTMLEditFormat( qDir.name[i] )#" />';
+					i=i+1;
+				}
+
+				xmlContent = xmlContent & '<Folders>' & folders & '</Folders>';
+			</cfscript>
+
+		</cfcase>
+
+
+		<cfcase value="GetFoldersAndFiles">
+
+			<!--- Sort directories first, name ascending --->
+			<cfdirectory
+				action="list"
+				directory="#currentFolderPath#"
+				name="qDir"
+				sort="type,name">
+
+			<cfscript>
+				i=1;
+				folders = "";
+				files = "";
+				while( i lte qDir.recordCount ) {
+					if( not compareNoCase( qDir.type[i], "DIR" ) and not listFind(".,..", qDir.name[i]) ) {
+						folders = folders & '<Folder name="#HTMLEditFormat(qDir.name[i])#" />';
+					} else if( not compareNoCase( qDir.type[i], "FILE" ) ) {
+						fileSizeKB = round(qDir.size[i] / 1024);
+						files = files & '<File name="#HTMLEditFormat(qDir.name[i])#" size="#IIf( fileSizeKB GT 0, DE( fileSizeKB ), 1)#" />';
+					}
+					i=i+1;
+				}
+
+				xmlContent = xmlContent & '<Folders>' & folders & '</Folders>';
+				xmlContent = xmlContent & '<Files>' & files & '</Files>';
+			</cfscript>
+
+		</cfcase>
+
+
+		<cfcase value="CreateFolder">
+
+			<cfparam name="url.newFolderName" default="">
+
+			<cfscript>
+				newFolderName = url.newFolderName;
+				if( reFind("[^A-Za-z0-9_\-\.]", newFolderName) ) {
+					// Munge folder name same way as we do the filename
+					// This means folder names are always US-ASCII so we don't have to worry about CF5 and UTF-8
+					newFolderName = reReplace(newFolderName, "[^A-Za-z0-9\-\.]", "_", "all");
+					newFolderName = reReplace(newFolderName, "_{2,}", "_", "all");
+					newFolderName = reReplace(newFolderName, "([^_]+)_+$", "\1", "all");
+					newFolderName = reReplace(newFolderName, "$_([^_]+)$", "\1", "all");
+				}
+			</cfscript>
+
+			<cfif not len(newFolderName) or len(newFolderName) gt 255>
+				<cfset errorNumber = 102>
+			<cfelseif directoryExists(currentFolderPath & newFolderName)>
+				<cfset errorNumber = 101>
+			<cfelseif reFind("^\.\.",newFolderName)>
+				<cfset errorNumber = 103>
+			<cfelse>
+				<cfset errorNumber = 0>
+
+				<cftry>
+					<cfdirectory
+						action="create"
+						directory="#currentFolderPath##newFolderName#"
+						mode="755">
+					<cfcatch>
+						<!---
+						un-resolvable error numbers in ColdFusion:
+						* 102 : Invalid folder name.
+						* 103 : You have no permissions to create the folder.
+						--->
+						<cfset errorNumber = 110>
+					</cfcatch>
+				</cftry>
+			</cfif>
+
+			<cfset xmlContent = xmlContent & '<Error number="#errorNumber#" />'>
+
+		</cfcase>
+
+		<cfdefaultcase>
+			<cfthrow type="fckeditor.connector" message="Illegal command: #url.command#">
+		</cfdefaultcase>
+
+	</cfswitch>
+</cfif>
+
+<cfscript>
+	xmlHeader = '<?xml version="1.0" encoding="utf-8" ?><Connector command="#url.command#" resourceType="#url.type#">';
+	xmlHeader = xmlHeader & '<CurrentFolder path="#url.currentFolder#" url="#resourceTypeUrl##url.currentFolder#" />';
+	xmlFooter = '</Connector>';
+</cfscript>
+
+<cfheader name="Expires" value="#GetHttpTimeString(Now())#">
+<cfheader name="Pragma" value="no-cache">
+<cfheader name="Cache-Control" value="no-cache, no-store, must-revalidate">
+<cfcontent reset="true" type="text/xml; charset=UTF-8">
+<cfoutput>#xmlHeader##xmlContent##xmlFooter#</cfoutput>

Added: announcement/trunk/src/main/webapp/fckeditor/editor/filemanager/connectors/cfm/cf5_upload.cfm
===================================================================
--- announcement/trunk/src/main/webapp/fckeditor/editor/filemanager/connectors/cfm/cf5_upload.cfm	                        (rev 0)
+++ announcement/trunk/src/main/webapp/fckeditor/editor/filemanager/connectors/cfm/cf5_upload.cfm	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,299 @@
+<cfsetting enablecfoutputonly="Yes">
+<!---
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2008 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * This is the "File Uploader" for ColdFusion 5.
+ * Based on connector.cfm by Mark Woods (mark****@thick*****)
+ *
+ * Note:
+ * FCKeditor requires that the connector responds with UTF-8 encoded XML.
+ * As ColdFusion 5 does not fully support UTF-8 encoding, we force ASCII
+ * file and folder names in this connector to allow CF5 send a UTF-8
+ * encoded response - code points under 127 in UTF-8 are stored using a
+ * single byte, using the same encoding as ASCII, which is damn handy.
+ * This is all grand for the English speakers, like meself, but I dunno
+ * how others are gonna take to it. Well, the previous version of this
+ * connector already did this with file names and nobody seemed to mind,
+ * so fingers-crossed nobody will mind their folder names being munged too.
+ *
+--->
+
+<cfparam name="url.command" default="QuickUpload">
+<cfparam name="url.type" default="File">
+<cfparam name="url.currentFolder" default="/">
+
+<cfif not isDefined("config_included")>
+	<cfinclude template="config.cfm">
+</cfif>
+
+<cfscript>
+	function SendUploadResults(errorNumber, fileUrl, fileName, customMsg)
+	{
+		WriteOutput('<script type="text/javascript">');
+		// Minified version of the document.domain automatic fix script (#1919).
+		// The original script can be found at _dev/domain_fix_template.js
+		WriteOutput("(function(){var d=document.domain;while (true){try{var A=window.parent.document.domain;break;}catch(e) {};d=d.replace(/.*?(?:\.|$)/,'');if (d.length==0) break;try{document.domain=d;}catch (e){break;}}})();");
+		WriteOutput('window.parent.OnUploadCompleted(' & errorNumber & ', "' & JSStringFormat(fileUrl) & '", "' & JSStringFormat(fileName) & '", "' & JSStringFormat(customMsg) & '");' );
+		WriteOutput('</script>');
+	}
+</cfscript>
+
+<cfif NOT config.enabled>
+	<cfset SendUploadResults(1, "", "", "This file uploader is disabled. Please check the ""editor/filemanager/connectors/cfm/config.cfm"" file")>
+	<cfabort>
+</cfif>
+
+<cfif isDefined("Config.ConfigAllowedCommands") and not ListFind(Config.ConfigAllowedCommands, url.command)>
+	<cfset SendUploadResults(1, "", "", "The """ & url.command & """ command isn't allowed")>
+	<cfabort>
+</cfif>
+
+<cfif isDefined("Config.ConfigAllowedTypes") and not ListFind(Config.ConfigAllowedTypes, url.type)>
+	<cfset SendUploadResults(1, "", "", "The """ & url.type &  """ type isn't allowed")>
+	<cfabort>
+</cfif>
+
+<cfif find( "..", url.currentFolder) or find( "\", url.currentFolder)>
+	<cfset SendUploadResults(102)>
+	<cfabort>
+</cfif>
+
+<cfscript>
+	userFilesPath = config.userFilesPath;
+
+	if ( userFilesPath eq "" ) {
+		userFilesPath = "/userfiles/";
+	}
+
+	// make sure the user files path is correctly formatted
+	userFilesPath = replace(userFilesPath, "\", "/", "ALL");
+	userFilesPath = replace(userFilesPath, '//', '/', 'ALL');
+	if ( right(userFilesPath,1) NEQ "/" ) {
+		userFilesPath = userFilesPath & "/";
+	}
+	if ( left(userFilesPath,1) NEQ "/" ) {
+		userFilesPath = "/" & userFilesPath;
+	}
+
+	// make sure the current folder is correctly formatted
+	url.currentFolder = replace(url.currentFolder, "\", "/", "ALL");
+	url.currentFolder = replace(url.currentFolder, '//', '/', 'ALL');
+	if ( right(url.currentFolder,1) neq "/" ) {
+		url.currentFolder = url.currentFolder & "/";
+	}
+	if ( left(url.currentFolder,1) neq "/" ) {
+		url.currentFolder = "/" & url.currentFolder;
+	}
+
+	if (find("/",getBaseTemplatePath())) {
+		fs = "/";
+	} else {
+		fs = "\";
+	}
+
+	// Get the base physical path to the web root for this application. The code to determine the path automatically assumes that
+	// the "FCKeditor" directory in the http request path is directly off the web root for the application and that it's not a
+	// virtual directory or a symbolic link / junction. Use the serverPath config setting to force a physical path if necessary.
+	if ( len(config.serverPath) ) {
+		serverPath = config.serverPath;
+
+		if ( right(serverPath,1) neq fs ) {
+			serverPath = serverPath & fs;
+		}
+	} else {
+		serverPath = replaceNoCase(getBaseTemplatePath(),replace(cgi.script_name,"/",fs,"all"),"") & replace(userFilesPath,"/",fs,"all");
+	}
+
+	rootPath = left( serverPath, Len(serverPath) - Len(userFilesPath) ) ;
+</cfscript>
+<cfif url.command eq "QuickUpload">
+	<cfset resourceTypeUrl = rereplace( replace( Config.QuickUploadPath[url.type], fs, "/", "all"), "/$", "") >
+	<cfif isDefined( "Config.QuickUploadAbsolutePath" )
+			and structkeyexists( Config.QuickUploadAbsolutePath, url.type )
+			and Len( Config.QuickUploadAbsolutePath[url.type] )>
+				<cfset userFilesServerPath = Config.QuickUploadAbsolutePath[url.type] & url.currentFolder>
+	<cfelse>
+		<cftry>
+		<cfset userFilesServerPath = expandpath( resourceTypeUrl ) & url.currentFolder>
+		<!--- Catch: Parameter 1 of function ExpandPath must be a relative path --->
+		<cfcatch type="any">
+			<cfset userFilesServerPath = rootPath & Config.QuickUploadPath[url.type] & url.currentFolder>
+		</cfcatch>
+		</cftry>
+	</cfif>
+<cfelse>
+	<cfset resourceTypeUrl = rereplace( replace( Config.FileTypesPath[url.type], fs, "/", "all"), "/$", "") >
+	<cfif isDefined( "Config.FileTypesAbsolutePath" )
+			and structkeyexists( Config.FileTypesAbsolutePath, url.type )
+			and Len( Config.FileTypesAbsolutePath[url.type] )>
+				<cfset userFilesServerPath = Config.FileTypesAbsolutePath[url.type] & url.currentFolder>
+	<cfelse>
+		<cftry>
+		<cfset userFilesServerPath = expandpath( resourceTypeUrl ) & url.currentFolder>
+		<!--- Catch: Parameter 1 of function ExpandPath must be a relative path --->
+		<cfcatch type="any">
+			<cfset userFilesServerPath = rootPath & Config.FileTypesPath[url.type] & url.currentFolder>
+		</cfcatch>
+		</cftry>
+	</cfif>
+</cfif>
+
+<cfset userFilesServerPath = replace( userFilesServerPath, "/", fs, "all" ) >
+<!--- get rid of double directory separators --->
+<cfset userFilesServerPath = replace( userFilesServerPath, fs & fs, fs, "all") >
+
+<!--- create resource type directory if not exists --->
+<cfset resourceTypeDirectory = left( userFilesServerPath, Len(userFilesServerPath) - Len(url.currentFolder) )>
+
+<cfif not directoryexists( resourceTypeDirectory )>
+
+	<cfset currentPath = "">
+	<cftry>
+		<cfloop list="#resourceTypeDirectory#" index="name" delimiters="#fs#">
+			<cfif currentPath eq "" and fs eq "\">
+				<!--- Without checking this, we would have in Windows \C:\ --->
+				<cfif not directoryExists(name)>
+					<cfdirectory action="create" directory="#name#" mode="755">
+				</cfif>
+			<cfelse>
+				<cfif not directoryExists(currentPath & fs & name)>
+					<cfdirectory action="create" directory="#currentPath##fs##name#" mode="755">
+				</cfif>
+			</cfif>
+
+			<cfif fs eq "\" and currentPath eq "">
+				<cfset currentPath = name>
+			<cfelse>
+				<cfset currentPath = currentPath & fs & name>
+			</cfif>
+		</cfloop>
+
+	<cfcatch type="any">
+
+		<!--- this should only occur as a result of a permissions problem --->
+		<cfset SendUploadResults(103)>
+		<cfabort>
+
+	</cfcatch>
+
+	</cftry>
+</cfif>
+
+<cfset currentFolderPath = userFilesServerPath>
+<cfset resourceType = url.type>
+
+<cfset fileName = "">
+<cfset fileExt = "">
+
+<!--- Can be overwritten. The last value will be sent with the result --->
+<cfset customMsg = "">
+
+<cftry>
+	<!--- first upload the file with an unique filename --->
+	<cffile action="upload"
+		fileField="NewFile"
+		destination="#currentFolderPath#"
+		nameConflict="makeunique"
+		mode="644"
+		attributes="normal">
+
+	<cfif cffile.fileSize EQ 0>
+		<cfthrow>
+	</cfif>
+
+	<cfset lAllowedExtensions = config.allowedExtensions[#resourceType#]>
+	<cfset lDeniedExtensions = config.deniedExtensions[#resourceType#]>
+
+	<cfif ( len(lAllowedExtensions) and not listFindNoCase(lAllowedExtensions,cffile.ServerFileExt) )
+		or ( len(lDeniedExtensions) and listFindNoCase(lDeniedExtensions,cffile.ServerFileExt) )>
+
+		<cfset errorNumber = "202">
+		<cffile action="delete" file="#cffile.ServerDirectory##fs##cffile.ServerFile#">
+
+	<cfelse>
+
+		<cfscript>
+		errorNumber = 0;
+		fileName = cffile.ClientFileName ;
+		fileExt = cffile.ServerFileExt ;
+		fileExisted = false ;
+
+		// munge filename for html download. Only a-z, 0-9, _, - and . are allowed
+		if( reFind("[^A-Za-z0-9_\-\.]", fileName) ) {
+			fileName = reReplace(fileName, "[^A-Za-z0-9\-\.]", "_", "ALL");
+			fileName = reReplace(fileName, "_{2,}", "_", "ALL");
+			fileName = reReplace(fileName, "([^_]+)_+$", "\1", "ALL");
+			fileName = reReplace(fileName, "$_([^_]+)$", "\1", "ALL");
+		}
+
+		// remove additional dots from file name
+		if( isDefined("Config.ForceSingleExtension") and Config.ForceSingleExtension )
+			fileName = replace( fileName, '.', "_", "all" ) ;
+
+		// When the original filename already exists, add numbers (0), (1), (2), ... at the end of the filename.
+		if( compare( cffile.ServerFileName, fileName ) ) {
+			counter = 0;
+			tmpFileName = fileName;
+			while( fileExists("#currentFolderPath##fileName#.#fileExt#") ) {
+				fileExisted = true ;
+				counter = counter + 1 ;
+				fileName = tmpFileName & '(#counter#)' ;
+			}
+		}
+		</cfscript>
+
+		<!--- Rename the uploaded file, if neccessary --->
+		<cfif compare(cffile.ServerFileName,fileName)>
+
+			<cfif fileExisted>
+				<cfset errorNumber = "201">
+			</cfif>
+			<cffile
+				action="rename"
+				source="#currentFolderPath##cffile.ServerFileName#.#cffile.ServerFileExt#"
+				destination="#currentFolderPath##fileName#.#fileExt#"
+				mode="644"
+				attributes="normal">
+
+		</cfif>
+
+	</cfif>
+
+	<cfcatch type="any">
+
+		<cfset errorNumber = "1">
+		<cfset customMsg = cfcatch.message >
+
+	</cfcatch>
+</cftry>
+
+<cfif errorNumber EQ 0>
+	<!--- file was uploaded succesfully --->
+	<cfset SendUploadResults(errorNumber, '#resourceTypeUrl##url.currentFolder##fileName#.#fileExt#', "", "")>
+	<cfabort>
+<cfelseif errorNumber EQ 201>
+	<!--- file was changed (201), submit the new filename --->
+	<cfset SendUploadResults(errorNumber, '#resourceTypeUrl##url.currentFolder##fileName#.#fileExt#', replace( fileName & "." & fileExt, "'", "\'", "ALL"), customMsg)>
+	<cfabort>
+<cfelse>
+	<!--- An error occured(202). Submit only the error code and a message (if available). --->
+	<cfset SendUploadResults(errorNumber, '', '', customMsg)>
+	<cfabort>
+</cfif>

Added: announcement/trunk/src/main/webapp/fckeditor/editor/filemanager/connectors/cfm/cf_basexml.cfm
===================================================================
--- announcement/trunk/src/main/webapp/fckeditor/editor/filemanager/connectors/cfm/cf_basexml.cfm	                        (rev 0)
+++ announcement/trunk/src/main/webapp/fckeditor/editor/filemanager/connectors/cfm/cf_basexml.cfm	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,68 @@
+<cfsetting enablecfoutputonly="Yes">
+<!---
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2008 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * This file include the functions that create the base XML output by the ColdFusion Connector (MX 6.0 and above).
+--->
+
+<cffunction name="SetXmlHeaders" returntype="void">
+	<cfheader name="Expires" value="#GetHttpTimeString(Now())#">
+	<cfheader name="Pragma" value="no-cache">
+	<cfheader name="Cache-Control" value="no-cache, no-store, must-revalidate">
+	<cfcontent reset="true" type="text/xml; charset=UTF-8">
+</cffunction>
+
+<cffunction name="CreateXmlHeader" returntype="void" output="true">
+	<cfargument name="command" required="true">
+	<cfargument name="resourceType" required="true">
+	<cfargument name="currentFolder" required="true">
+
+	<cfset SetXmlHeaders()>
+	<cfoutput><?xml version="1.0" encoding="utf-8" ?></cfoutput>
+	<cfoutput><Connector command="#ARGUMENTS.command#" resourceType="#ARGUMENTS.resourceType#"></cfoutput>
+	<cfoutput><CurrentFolder path="#HTMLEditFormat(ARGUMENTS.currentFolder)#" url="#HTMLEditFormat( GetUrlFromPath( resourceType, currentFolder, command ) )#" /></cfoutput>
+	<cfset REQUEST.HeaderSent = true>
+</cffunction>
+
+<cffunction name="CreateXmlFooter" returntype="void" output="true">
+	<cfoutput></Connector></cfoutput>
+</cffunction>
+
+<cffunction name="SendError" returntype="void" output="true">
+	<cfargument name="number" required="true" type="Numeric">
+	<cfargument name="text" required="true">
+	<cfif isDefined("REQUEST.HeaderSent") and REQUEST.HeaderSent>
+		<cfset SendErrorNode( ARGUMENTS.number, ARGUMENTS.text )>
+		<cfset CreateXmlFooter() >
+	<cfelse>
+		<cfset SetXmlHeaders()>
+		<cfoutput><?xml version="1.0" encoding="utf-8" ?></cfoutput>
+		<cfoutput><Connector></cfoutput>
+		<cfset SendErrorNode( ARGUMENTS.number, ARGUMENTS.text )>
+		<cfset CreateXmlFooter() >
+	</cfif>
+	<cfabort>
+</cffunction>
+
+<cffunction name="SendErrorNode" returntype="void" output="true">
+	<cfargument name="number" required="true" type="Numeric">
+	<cfargument name="text" required="true">
+	<cfoutput><Error number="#ARGUMENTS.number#" text="#htmleditformat(ARGUMENTS.text)#" /></cfoutput>
+</cffunction>

Added: announcement/trunk/src/main/webapp/fckeditor/editor/filemanager/connectors/cfm/cf_commands.cfm
===================================================================
--- announcement/trunk/src/main/webapp/fckeditor/editor/filemanager/connectors/cfm/cf_commands.cfm	                        (rev 0)
+++ announcement/trunk/src/main/webapp/fckeditor/editor/filemanager/connectors/cfm/cf_commands.cfm	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,230 @@
+<cfsetting enablecfoutputonly="Yes">
+<!---
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2008 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * This file include the functions that handle the Command requests
+ * in the ColdFusion Connector (MX 6.0 and above).
+--->
+
+<cffunction name="FileUpload" returntype="void" output="true">
+	<cfargument name="resourceType" type="string" required="yes" default="">
+	<cfargument name="currentFolder" type="string" required="yes" default="">
+	<cfargument name="sCommand" type="string" required="yes" default="">
+
+	<cfset var sFileName = "">
+	<cfset var sFilePart = "">
+	<cfset var sFileExt = "">
+	<cfset var sFileUrl = "">
+	<cfset var sTempDir = "">
+	<cfset var sTempFilePath = "">
+	<cfset var errorNumber = 0>
+	<cfset var customMsg = 0>
+	<cfset var counter = 0>
+	<cfset var destination = "">
+
+	<cftry>
+		<cfif isDefined( "REQUEST.Config.TempDirectory" )>
+			<cfset sTempDir = REQUEST.Config.TempDirectory>
+		<cfelse>
+			<cfset sTempDir = GetTempDirectory()>
+		</cfif>
+		<cfif NOT DirectoryExists (sTempDir)>
+			<cfthrow message="Invalid temporary directory: #sTempDir#">
+		</cfif>
+
+		<cffile action="UPLOAD" filefield="NewFile" destination="#sTempDir#" nameconflict="makeunique" mode="0755" />
+		<cfset sTempFilePath = CFFILE.ServerDirectory & REQUEST.fs & CFFILE.ServerFile>
+
+		<!--- Map the virtual path to the local server path. --->
+		<cfset sServerDir = ServerMapFolder( ARGUMENTS.resourceType, ARGUMENTS.currentFolder, ARGUMENTS.sCommand) >
+		<!--- Get the uploaded file name. --->
+		<cfset sFileName = SanitizeFileName( CFFILE.ClientFile ) >
+		<cfset sOriginalFileName = sFileName >
+
+		<cfif isDefined( "REQUEST.Config.SecureImageUploads" ) and REQUEST.Config.SecureImageUploads>
+			<cfif not IsImageValid( sTempFilePath, CFFILE.ClientFileExt )>
+				<cftry>
+				<cffile action="delete" file="#sTempFilePath#">
+				<cfcatch type="any">
+				</cfcatch>
+				</cftry>
+				<cfthrow errorcode="202" type="fckeditor">
+			</cfif>
+		</cfif>
+
+		<cfif isDefined( "REQUEST.Config.HtmlExtensions" ) and not listFindNoCase( REQUEST.Config.HtmlExtensions, CFFILE.ClientFileExt )>
+			<cfif DetectHtml( sTempFilePath )>
+				<cftry>
+				<cffile action="delete" file="#sTempFilePath#">
+				<cfcatch type="any">
+				</cfcatch>
+				</cftry>
+				<cfthrow errorcode="202" type="fckeditor">
+			</cfif>
+		</cfif>
+
+		<cfif not IsAllowedExt( CFFILE.ClientFileExt, ARGUMENTS.resourceType )>
+			<cftry>
+			<cffile action="delete" file="#sTempFilePath#">
+			<cfcatch type="any">
+			</cfcatch>
+			</cftry>
+			<cfthrow errorcode="202" type="fckeditor">
+		</cfif>
+
+		<!--- When the original filename already exists, add numbers (0), (1), (2), ... at the end of the filename. --->
+		<cfscript>
+			sFileExt = GetExtension( sFileName ) ;
+			sFilePart = RemoveExtension( sFileName );
+			while( fileExists( sServerDir & sFileName ) )
+			{
+				counter = counter + 1;
+				sFileName = sFilePart & '(#counter#).' & CFFILE.ClientFileExt;
+				errorNumber = 201;
+			}
+		</cfscript>
+
+ 		<cfset destination = sServerDir & sFileName>
+
+		<cflock name="#destination#" timeout="30" type="Exclusive">
+		<cftry>
+			<cffile action="move" source="#sTempFilePath#" destination="#destination#" mode="755">
+			<!--- omit CF 6.1 error during moving uploaded file, just copy that file instead of moving --->
+			<cfcatch type="any">
+				<cffile action="copy" source="#sTempFilePath#" destination="#destination#" mode="755">
+			</cfcatch>
+		</cftry>
+		</cflock>
+
+		<cfset sFileUrl = CombinePaths( GetResourceTypePath( ARGUMENTS.resourceType, sCommand ) , ARGUMENTS.currentFolder ) >
+		<cfset sFileUrl = CombinePaths( sFileUrl , sFileName ) >
+
+		<cfcatch type="fckeditor">
+			<cfset errorNumber = CFCATCH.ErrorCode>
+		</cfcatch>
+
+		<cfcatch type="any">
+			<cfset errorNumber = "1">
+			<cfset customMsg = CFCATCH.Message >
+		</cfcatch>
+
+	</cftry>
+
+	<cfset SendUploadResults( errorNumber, sFileUrl, sFileName, customMsg ) >
+</cffunction>
+
+<cffunction name="GetFolders" returntype="void" output="true">
+	<cfargument name="resourceType" type="String" required="true">
+	<cfargument name="currentFolder" type="String" required="true">
+
+	<cfset var i = 1>
+	<cfset var folders = "">
+	<!--- Map the virtual path to the local server path --->
+	<cfset var sServerDir = ServerMapFolder( ARGUMENTS.resourceType, ARGUMENTS.currentFolder, "GetFolders" ) >
+
+	<!--- Sort directories first, name ascending --->
+	<cfdirectory action="list" directory="#sServerDir#" name="qDir" sort="type,name">
+	<cfscript>
+		while( i lte qDir.recordCount )
+		{
+			if( compareNoCase( qDir.type[i], "FILE" ) and not listFind( ".,..", qDir.name[i] ) )
+			{
+				folders = folders & '<Folder name="#HTMLEditFormat( qDir.name[i] )#" />' ;
+			}
+			i = i + 1;
+		}
+	</cfscript>
+	<cfoutput><Folders>#folders#</Folders></cfoutput>
+</cffunction>
+
+<cffunction name="GetFoldersAndfiles" returntype="void" output="true">
+	<cfargument name="resourceType" type="String" required="true">
+	<cfargument name="currentFolder" type="String" required="true">
+
+	<cfset var i = 1>
+	<cfset var folders = "">
+	<cfset var files = "">
+	<!--- Map the virtual path to the local server path --->
+	<cfset var sServerDir = ServerMapFolder( ARGUMENTS.resourceType, ARGUMENTS.currentFolder, "GetFolders" ) >
+
+	<!--- Sort directories first, name ascending --->
+	<cfdirectory action="list" directory="#sServerDir#" name="qDir" sort="type,name">
+	<cfscript>
+		while( i lte qDir.recordCount )
+		{
+			if( not compareNoCase( qDir.type[i], "DIR" ) and not listFind( ".,..", qDir.name[i] ) )
+			{
+				folders = folders & '<Folder name="#HTMLEditFormat(qDir.name[i])#" />' ;
+			}
+			else if( not compareNoCase( qDir.type[i], "FILE" ) )
+			{
+				fileSizeKB = round(qDir.size[i] / 1024) ;
+				files = files & '<File name="#HTMLEditFormat(qDir.name[i])#" size="#IIf( fileSizeKB GT 0, DE( fileSizeKB ), 1)#" />' ;
+			}
+			i = i + 1 ;
+		}
+	</cfscript>
+	<cfoutput><Folders>#folders#</Folders></cfoutput>
+	<cfoutput><Files>#files#</Files></cfoutput>
+</cffunction>
+
+<cffunction name="CreateFolder" returntype="void" output="true">
+	<cfargument name="resourceType" required="true" type="string">
+	<cfargument name="currentFolder" required="true" type="string">
+
+	<cfset var sNewFolderName = url.newFolderName >
+	<cfset var sServerDir = "" >
+	<cfset var errorNumber = 0>
+	<cfset var sErrorMsg = "">
+	<cfset var currentFolderPath = ServerMapFolder( ARGUMENTS.resourceType, ARGUMENTS.currentFolder, 'CreateFolder' )>
+
+	<cfparam name="url.newFolderName" default="">
+
+	<cfscript>
+		sNewFolderName = SanitizeFolderName( sNewFolderName ) ;
+	</cfscript>
+
+	<cfif not len( sNewFolderName ) or len( sNewFolderName ) gt 255>
+		<cfset errorNumber = 102>
+	<cfelseif directoryExists( currentFolderPath & sNewFolderName )>
+		<cfset errorNumber = 101>
+	<cfelseif find( "..", sNewFolderName )>
+		<cfset errorNumber = 103>
+	<cfelse>
+		<cfset errorNumber = 0>
+
+		<!--- Map the virtual path to the local server path of the current folder. --->
+		<cfset sServerDir = currentFolderPath & sNewFolderName >
+
+		<cftry>
+			<cfdirectory action="create" directory="#currentFolderPath##sNewFolderName#" mode="755">
+			<cfcatch type="any">
+			<!---
+				un-resolvable error numbers in ColdFusion:
+				* 102 : Invalid folder name.
+				* 103 : You have no permissions to create the folder.
+			--->
+			<cfset errorNumber = 110>
+			</cfcatch>
+		</cftry>
+	</cfif>
+
+	<cfoutput><Error number="#errorNumber#" originalDescription="#HTMLEditFormat(sErrorMsg)#" /></cfoutput>
+</cffunction>

Added: announcement/trunk/src/main/webapp/fckeditor/editor/filemanager/connectors/cfm/cf_connector.cfm
===================================================================
--- announcement/trunk/src/main/webapp/fckeditor/editor/filemanager/connectors/cfm/cf_connector.cfm	                        (rev 0)
+++ announcement/trunk/src/main/webapp/fckeditor/editor/filemanager/connectors/cfm/cf_connector.cfm	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,89 @@
+<cfsetting enablecfoutputonly="yes" showdebugoutput="no">
+<!---
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2008 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * File Browser connector for ColdFusion (MX 6.0 and above).
+ * (based on the original CF connector by Hendrik Kramer - hk****@lwd*****)
+ *
+--->
+
+<cfparam name="url.command">
+<cfparam name="url.type">
+<cfparam name="url.currentFolder">
+
+<!--- note: no serverPath url parameter - see config.cfm if you need to set the serverPath manually --->
+
+<cfinclude template="config.cfm">
+<cfinclude template="cf_util.cfm">
+<cfinclude template="cf_io.cfm">
+<cfinclude template="cf_basexml.cfm">
+<cfinclude template="cf_commands.cfm">
+
+<cfif not Config.Enabled>
+	<cfset SendError( 1, 'This connector is disabled. Please check the "editor/filemanager/connectors/cfm/config.cfm" file' )>
+</cfif>
+
+<cfset REQUEST.Config = Config>
+<cfif find( "/", getBaseTemplatePath() ) >
+	<cfset REQUEST.Fs = "/">
+<cfelse>
+	<cfset REQUEST.Fs = "\">
+</cfif>
+
+<cfset DoResponse() >
+
+<cffunction name="DoResponse" output="true" returntype="void">
+
+	<!--- Get the main request informaiton. --->
+	<cfset var sCommand	= "#URL.Command#" >
+	<cfset var sResourceType	= URL.Type >
+	<cfset var sCurrentFolder	= GetCurrentFolder() >
+
+	<!--- Check if it is an allowed command --->
+	<cfif not IsAllowedCommand( sCommand ) >
+		<cfset SendError( 1, "The """ & sCommand & """ command isn't allowed" ) >
+	</cfif>
+
+	<!--- Check if it is an allowed type. --->
+	<cfif not IsAllowedType( sResourceType ) >
+		<cfset SendError( 1, 'Invalid type specified' ) >
+	</cfif>
+
+	<!--- File Upload doesn't have to Return XML, so it must be intercepted before anything. --->
+	<cfif sCommand eq "FileUpload">
+		<cfset FileUpload( sResourceType, sCurrentFolder, sCommand )>
+		<cfabort>
+	</cfif>
+
+	<cfset CreateXmlHeader( sCommand, sResourceType, sCurrentFolder )>
+
+	<!--- Execute the required command. --->
+	<cfif sCommand eq "GetFolders">
+		<cfset GetFolders( sResourceType, sCurrentFolder ) >
+	<cfelseif sCommand eq "GetFoldersAndFiles">
+		<cfset GetFoldersAndFiles( sResourceType, sCurrentFolder ) >
+	<cfelseif sCommand eq "CreateFolder">
+		<cfset CreateFolder( sResourceType, sCurrentFolder ) >
+	</cfif>
+
+	<cfset CreateXmlFooter()>
+
+	<cfexit>
+</cffunction>

Added: announcement/trunk/src/main/webapp/fckeditor/editor/filemanager/connectors/cfm/cf_io.cfm
===================================================================
--- announcement/trunk/src/main/webapp/fckeditor/editor/filemanager/connectors/cfm/cf_io.cfm	                        (rev 0)
+++ announcement/trunk/src/main/webapp/fckeditor/editor/filemanager/connectors/cfm/cf_io.cfm	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,291 @@
+<cfsetting enablecfoutputonly="Yes">
+<!---
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2008 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * This file include IO specific functions used by the ColdFusion Connector (MX 6.0 and above).
+ *
+--->
+
+<cffunction name="CombinePaths" returntype="String" output="true">
+	<cfargument name="sBasePath" required="true">
+	<cfargument name="sFolder" required="true">
+	<cfset sBasePath = RemoveFromEnd( sBasePath, "/" )>
+	<cfset sBasePath = RemoveFromEnd( sBasePath, "\" )>
+	<cfreturn sBasePath & "/" & RemoveFromStart( ARGUMENTS.sFolder, '/' )>
+</cffunction>
+
+<cffunction name="GetResourceTypePath" returntype="String" output="false">
+	<cfargument name="resourceType" required="true">
+	<cfargument name="sCommand" required="true">
+
+	<cfif ARGUMENTS.sCommand eq "QuickUpload">
+		<cfreturn REQUEST.Config['QuickUploadPath'][ARGUMENTS.resourceType]>
+	<cfelse>
+		<cfreturn REQUEST.Config['FileTypesPath'][ARGUMENTS.resourceType]>
+	</cfif>
+</cffunction>
+
+<cffunction name="GetResourceTypeDirectory" returntype="String" output="false">
+	<cfargument name="resourceType" required="true">
+	<cfargument name="sCommand" required="true">
+
+	<cfif ARGUMENTS.sCommand eq "QuickUpload">
+		<cfif isDefined( "REQUEST.Config.QuickUploadAbsolutePath" )
+			and structkeyexists( REQUEST.Config.QuickUploadAbsolutePath, ARGUMENTS.resourceType )
+			and Len( REQUEST.Config.QuickUploadAbsolutePath[ARGUMENTS.resourceType] )>
+				<cfreturn REQUEST.Config.QuickUploadAbsolutePath[ARGUMENTS.resourceType]>
+		</cfif>
+
+		<cfreturn expandpath( REQUEST.Config.QuickUploadPath[ARGUMENTS.resourceType] )>
+	<cfelse>
+		<cfif isDefined( "REQUEST.Config.FileTypesAbsolutePath" )
+			and structkeyexists( REQUEST.Config.FileTypesAbsolutePath, ARGUMENTS.resourceType )
+			and Len( REQUEST.Config.FileTypesAbsolutePath[ARGUMENTS.resourceType] )>
+				<cfreturn REQUEST.Config.FileTypesAbsolutePath[ARGUMENTS.resourceType]>
+		</cfif>
+
+		<cfreturn expandpath( REQUEST.Config.FileTypesPath[ARGUMENTS.resourceType] )>
+	</cfif>
+</cffunction>
+
+<cffunction name="GetUrlFromPath" returntype="String" output="false">
+	<cfargument name="resourceType" required="true">
+	<cfargument name="folderPath" required="true">
+	<cfargument name="sCommand" required="true">
+
+	<cfreturn CombinePaths( GetResourceTypePath( ARGUMENTS.resourceType, ARGUMENTS.sCommand ), ARGUMENTS.folderPath )>
+</cffunction>
+
+<cffunction name="RemoveExtension" output="false" returntype="String">
+	<cfargument name="fileName" required="true">
+	<cfset var pos = find( ".", reverse ( ARGUMENTS.fileName ) )>
+
+	<cfreturn mid( ARGUMENTS.fileName, 1, Len( ARGUMENTS.fileName ) - pos ) >
+</cffunction>
+
+<cffunction name="GetExtension" output="false" returntype="String">
+	<cfargument name="fileName" required="true">
+	<cfset var pos = find( ".", reverse ( ARGUMENTS.fileName ) )>
+
+	<cfif not pos>
+		<cfreturn "">
+	</cfif>
+
+	<cfreturn mid( ARGUMENTS.fileName, pos, Len( ARGUMENTS.fileName ) - pos ) >
+</cffunction>
+
+<cffunction name="ServerMapFolder" returntype="String" output="false">
+	<cfargument name="resourceType" required="true">
+	<cfargument name="folderPath" required="true">
+	<cfargument name="sCommand" required="true">
+
+	<!--- Get the resource type directory. --->
+	<cfset var sResourceTypePath = GetResourceTypeDirectory( ARGUMENTS.resourceType, ARGUMENTS.sCommand ) >
+	<!--- Ensure that the directory exists. --->
+	<cfset var sErrorMsg = CreateServerFolder( sResourceTypePath ) >
+
+	<cfif sErrorMsg neq ''>
+		<cfset SendError( 1, 'Error creating folder "' & sResourceTypePath & '" (' & sErrorMsg & ')' )>
+	</cfif>
+
+	<!--- Return the resource type directory combined with the required path. --->
+	<cfreturn CombinePaths( sResourceTypePath , ARGUMENTS.folderPath )>
+</cffunction>
+
+<cffunction name="GetParentFolder" returntype="string" output="false">
+	<cfargument name="folderPath" required="true">
+
+	<cfreturn rereplace(ARGUMENTS.folderPath, "[/\\\\][^/\\\\]+[/\\\\]?$", "")>
+</cffunction>
+
+<cffunction name="CreateServerFolder" returntype="String" output="false">
+	<cfargument name="folderPath">
+
+	<!--- Ensure the folder path has no double-slashes, or mkdir may fail on certain platforms --->
+	<cfset folderPath = rereplace(ARGUMENTS.folderPath, "//+", "/", "all")>
+
+	<cfif directoryexists(ARGUMENTS.folderPath) or fileexists(ARGUMENTS.folderPath)>
+		<cfreturn "">
+	<cfelse>
+		<cftry>
+			<cfdirectory action="create" mode="0755" directory="#ARGUMENTS.folderPath#">
+		<cfcatch type="any">
+			<cfreturn CFCATCH.Message>
+		</cfcatch>
+		</cftry>
+	</cfif>
+
+	<cfreturn "">
+</cffunction>
+
+<cffunction name="IsAllowedExt" returntype="boolean" output="false">
+	<cfargument name="sExtension" required="true">
+	<cfargument name="resourceType" required="true">
+
+	<cfif isDefined( "REQUEST.Config.AllowedExtensions." & ARGUMENTS.resourceType )
+			and listLen( REQUEST.Config.AllowedExtensions[ARGUMENTS.resourceType] )
+			and not listFindNoCase( REQUEST.Config.AllowedExtensions[ARGUMENTS.resourceType], ARGUMENTS.sExtension )>
+			<cfreturn false>
+	</cfif>
+
+	<cfif isDefined( "REQUEST.Config.DeniedExtensions." & ARGUMENTS.resourceType )
+			and listLen( REQUEST.Config.DeniedExtensions[ARGUMENTS.resourceType] )
+			and listFindNoCase( REQUEST.Config.DeniedExtensions[ARGUMENTS.resourceType], ARGUMENTS.sExtension )>
+			<cfreturn false>
+	</cfif>
+
+	<cfreturn true>
+</cffunction>
+
+<cffunction name="IsAllowedType" returntype="boolean" output="false">
+	<cfargument name="resourceType">
+
+	<cfif not listFindNoCase( REQUEST.Config.ConfigAllowedTypes, ARGUMENTS.resourceType )>
+		<cfreturn false>
+	</cfif>
+
+	<cfreturn true>
+</cffunction>
+
+<cffunction name="IsAllowedCommand" returntype="boolean" output="true">
+	<cfargument name="sCommand" required="true" type="String">
+
+	<cfif not listFindNoCase( REQUEST.Config.ConfigAllowedCommands, ARGUMENTS.sCommand )>
+		<cfreturn false>
+	</cfif>
+
+	<cfreturn true>
+</cffunction>
+
+<cffunction name="GetCurrentFolder" returntype="String" output="true">
+	<cfset var sCurrentFolder = "/">
+
+	<cfif isDefined( "URL.CurrentFolder" )>
+		<cfset sCurrentFolder = URL.CurrentFolder>
+	</cfif>
+
+	<!--- Check the current folder syntax (must begin and start with a slash). --->
+	<cfif not refind( "/$", sCurrentFolder)>
+		<cfset sCurrentFolder = sCurrentFolder & "/">
+	</cfif>
+
+	<cfif not refind( "^/", sCurrentFolder )>
+		<cfset sCurrentFolder = "/" & sCurrentFolder>
+	</cfif>
+
+	<!--- Ensure the folder path has no double-slashes, or mkdir may fail on certain platforms --->
+	<cfset sCurrentFolder = rereplace( sCurrentFolder, "//+", "/", "all" )>
+
+	<cfif find( "..", sCurrentFolder) or find( "\", sCurrentFolder) >
+		<cfset SendError( 102, "" )>
+	</cfif>
+
+	<cfreturn sCurrentFolder>
+</cffunction>
+
+<cffunction name="SanitizeFolderName" returntype="String" output="false">
+	<cfargument name="sNewFolderName" required="true">
+
+	<!--- Do a cleanup of the folder name to avoid possible problems --->
+	<!--- Remove . \ / | : ? * " < > and control characters --->
+	<cfset sNewFolderName = rereplace( sNewFolderName, '\.+|\\+|\/+|\|+|\:+|\?+|\*+|"+|<+|>+|[[:cntrl:]]+', "_", "all" )>
+
+	<cfreturn sNewFolderName>
+</cffunction>
+
+<cffunction name="BinaryFileRead" returntype="String" output="true">
+	<cfargument name="fileName" required="true" type="string">
+	<cfargument name="bytes" required="true" type="Numeric">
+
+	<cfscript>
+	var chunk = "";
+	var fileReaderClass = "";
+	var fileReader = "";
+	var file = "";
+	var done = false;
+	var counter = 0;
+	var byteArray = "";
+
+	if( not fileExists( ARGUMENTS.fileName ) )
+	{
+		return "" ;
+	}
+
+	if (REQUEST.CFVersion gte 8)
+	{
+		 file  = FileOpen( ARGUMENTS.fileName, "readbinary" ) ;
+		 byteArray = FileRead( file, 1024 ) ;
+		 chunk = toString( toBinary( toBase64( byteArray ) ) ) ;
+		 FileClose( file ) ;
+	}
+	else
+	{
+		fileReaderClass = createObject("java", "java.io.FileInputStream");
+		fileReader = fileReaderClass.init(fileName);
+
+		while(not done)
+		{
+			char = fileReader.read();
+			counter = counter + 1;
+			if ( char eq -1 or counter eq ARGUMENTS.bytes)
+			{
+				done = true;
+			}
+			else
+			{
+				chunk = chunk & chr(char) ;
+			}
+		}
+	}
+	</cfscript>
+
+	<cfreturn chunk>
+</cffunction>
+
+<cffunction name="SendUploadResults" returntype="String" output="true">
+	<cfargument name="errorNumber" required="true" type="Numeric">
+	<cfargument name="fileUrl" required="false" type="String" default="">
+	<cfargument name="fileName" required="false" type="String" default="">
+	<cfargument name="customMsg" required="false" type="String" default="">
+
+	<!--- Minified version of the document.domain automatic fix script (#1919).
+	The original script can be found at _dev/domain_fix_template.js --->
+	<cfoutput>
+<script type="text/javascript">
+(function(){var d=document.domain;while (true){try{var A=window.parent.document.domain;break;}catch(e) {};d=d.replace(/.*?(?:\.|$)/,'');if (d.length==0) break;try{document.domain=d;}catch (e){break;}}})();
+window.parent.OnUploadCompleted( #errorNumber#, "#JSStringFormat(fileUrl)#", "#JSStringFormat(fileName)#", "#JSStringFormat(customMsg)#" );
+</script>
+	</cfoutput>
+	<cfabort>
+</cffunction>
+
+<cffunction name="SanitizeFileName" returntype="String" output="false">
+	<cfargument name="sNewFileName" required="true">
+
+	<cfif isDefined("REQUEST.Config.ForceSingleExtension") and REQUEST.Config.ForceSingleExtension>
+		<cfset sNewFileName = rereplace( sNewFileName, '\.(?![^.]*$)', "_", "all" )>
+	</cfif>
+
+	<!--- Do a cleanup of the file name to avoid possible problems --->
+	<!--- Remove \ / | : ? * " < > and control characters --->
+	<cfset sNewFileName = rereplace( sNewFileName, '\\[.]+|\\+|\/+|\|+|\:+|\?+|\*+|"+|<+|>+|[[:cntrl:]]+', "_", "all" )>
+
+	<cfreturn sNewFileName>
+</cffunction>

Added: announcement/trunk/src/main/webapp/fckeditor/editor/filemanager/connectors/cfm/cf_upload.cfm
===================================================================
--- announcement/trunk/src/main/webapp/fckeditor/editor/filemanager/connectors/cfm/cf_upload.cfm	                        (rev 0)
+++ announcement/trunk/src/main/webapp/fckeditor/editor/filemanager/connectors/cfm/cf_upload.cfm	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,72 @@
+<cfsetting enablecfoutputonly="yes" showdebugoutput="no">
+<!---
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2008 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * File Browser connector for ColdFusion (MX 6.0 and above).
+ * (based on the original CF connector by Hendrik Kramer - hk****@lwd*****)
+--->
+
+<cfparam name="url.type" default="File">
+<cfparam name="url.currentFolder" default="/">
+
+<!--- note: no serverPath url parameter - see config.cfm if you need to set the serverPath manually --->
+
+<cfinclude template="config.cfm">
+<cfinclude template="cf_util.cfm">
+<cfinclude template="cf_io.cfm">
+<cfinclude template="cf_commands.cfm">
+
+<cffunction name="SendError" returntype="void" output="true">
+	<cfargument name="number" required="true" type="Numeric">
+	<cfargument name="text" required="true">
+	<cfreturn SendUploadResults( "#ARGUMENTS.number#", "", "", "ARGUMENTS.text" )>
+</cffunction>
+
+<cfset REQUEST.Config = Config>
+<cfif find( "/", getBaseTemplatePath() ) >
+	<cfset REQUEST.Fs = "/">
+<cfelse>
+	<cfset REQUEST.Fs = "\">
+</cfif>
+
+<cfif not Config.Enabled>
+	<cfset SendUploadResults( '1', '', '', 'This file uploader is disabled. Please check the "editor/filemanager/connectors/cfm/config.cfm" file' )>
+</cfif>
+
+<cfset sCommand = 'QuickUpload'>
+<cfset sType = "File">
+
+<cfif isDefined( "URL.Type" )>
+	<cfset sType = URL.Type>
+</cfif>
+
+<cfset sCurrentFolder = GetCurrentFolder()>
+
+<!--- Is enabled the upload? --->
+<cfif not IsAllowedCommand( sCommand )>
+	<cfset SendUploadResults( "1", "", "", "The """ & sCommand & """ command isn't allowed" )>
+</cfif>
+
+<!--- Check if it is an allowed type. --->
+<cfif not IsAllowedType( sType )>
+	<cfset SendUploadResults( "1", "", "", "Invalid type specified" ) >
+</cfif>
+
+<cfset FileUpload( sType, sCurrentFolder, sCommand )>

Added: announcement/trunk/src/main/webapp/fckeditor/editor/filemanager/connectors/cfm/cf_util.cfm
===================================================================
--- announcement/trunk/src/main/webapp/fckeditor/editor/filemanager/connectors/cfm/cf_util.cfm	                        (rev 0)
+++ announcement/trunk/src/main/webapp/fckeditor/editor/filemanager/connectors/cfm/cf_util.cfm	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,131 @@
+<cfsetting enablecfoutputonly="Yes">
+<!---
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2008 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * This file include generic functions used by the ColdFusion Connector (MX 6.0 and above).
+--->
+
+<cffunction name="RemoveFromStart" output="false" returntype="String">
+	<cfargument name="sourceString" type="String">
+	<cfargument name="charToRemove" type="String">
+
+	<cfif left(ARGUMENTS.sourceString, 1) eq ARGUMENTS.charToRemove>
+		<cfreturn mid( ARGUMENTS.sourceString, 2, len(ARGUMENTS.sourceString) -1 )>
+	</cfif>
+
+	<cfreturn ARGUMENTS.sourceString>
+</cffunction>
+
+<cffunction name="RemoveFromEnd" output="false" returntype="String">
+	<cfargument name="sourceString" type="String">
+	<cfargument name="charToRemove" type="String">
+
+	<cfif right(ARGUMENTS.sourceString, 1) eq ARGUMENTS.charToRemove>
+		<cfreturn mid( ARGUMENTS.sourceString, 1, len(ARGUMENTS.sourceString) -1 )>
+	</cfif>
+
+	<cfreturn ARGUMENTS.sourceString>
+</cffunction>
+
+<!---
+Check file content.
+Currently this function validates only image files.
+Returns false if file is invalid.
+detectionLevel:
+	0 = none
+	1 = check image size for images,
+	2 = use DetectHtml for images
+---->
+<cffunction name="IsImageValid" returntype="boolean" output="true">
+	<cfargument name="filePath" required="true" type="String">
+	<cfargument name="extension" required="true" type="String">
+
+	<cfset var imageCFC = "">
+	<cfset var imageInfo = "">
+
+	<cfif not ListFindNoCase("gif,jpeg,jpg,png,swf,psd,bmp,iff,tiff,tif,swc,jpc,jp2,jpx,jb2,xmb,wbmp", ARGUMENTS.extension)>
+		<cfreturn true>
+	</cfif>
+
+	<cftry>
+		<cfif REQUEST.CFVersion gte 8>
+			<cfset objImage = ImageRead(ARGUMENTS.filePath) >
+			<cfset imageInfo = ImageInfo(objImage)>
+			<!--- <cfimage action="info" source="#ARGUMENTS.filePath#" structName="imageInfo" /> --->
+		<cfelse>
+			<cfset imageCFC = createObject("component", "image")>
+			<cfset imageInfo = imageCFC.getImageInfo("", ARGUMENTS.filePath)>
+		</cfif>
+
+		<cfif imageInfo.height lte 0 or imageInfo.width lte 0>
+			<cfreturn false>
+		</cfif>
+	<cfcatch type="any">
+		<cfreturn false>
+	</cfcatch>
+	</cftry>
+
+	<cfreturn true>
+</cffunction>
+
+<!---
+ Detect HTML in the first KB to prevent against potential security issue with
+ IE/Safari/Opera file type auto detection bug.
+ Returns true if file contain insecure HTML code at the beginning.
+--->
+<cffunction name="DetectHtml" output="false" returntype="boolean">
+	<cfargument name="filePath" required="true" type="String">
+
+	<cfset var tags = "<body,<head,<html,<img,<pre,<script,<table,<title">
+	<cfset var chunk = lcase( Trim( BinaryFileRead( ARGUMENTS.filePath, 1024 ) ) )>
+
+	<cfif not Len(chunk)>
+		<cfreturn false>
+	</cfif>
+
+	<cfif refind('<!doctype\W*x?html', chunk)>
+		<cfreturn true>
+	</cfif>
+
+	<cfloop index = "tag" list = "#tags#">
+     	<cfif find( tag, chunk )>
+			<cfreturn true>
+		</cfif>
+	</cfloop>
+
+	<!--- type = javascript --->
+	<cfif refind('type\s*=\s*[''"]?\s*(?:\w*/)?(?:ecma|java)', chunk)>
+		<cfreturn true>
+	</cfif> >
+
+	<!--- href = javascript --->
+	<!--- src = javascript --->
+	<!--- data = javascript --->
+	<cfif refind('(?:href|src|data)\s*=\s*[\''"]?\s*(?:ecma|java)script:', chunk)>
+		<cfreturn true>
+	</cfif>
+
+	<!--- url(javascript --->
+	<cfif refind('url\s*\(\s*[\''"]?\s*(?:ecma|java)script:', chunk)>
+		<cfreturn true>
+	</cfif>
+
+	<cfreturn false>
+</cffunction>

Added: announcement/trunk/src/main/webapp/fckeditor/editor/filemanager/connectors/cfm/config.cfm
===================================================================
--- announcement/trunk/src/main/webapp/fckeditor/editor/filemanager/connectors/cfm/config.cfm	                        (rev 0)
+++ announcement/trunk/src/main/webapp/fckeditor/editor/filemanager/connectors/cfm/config.cfm	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,189 @@
+<cfsetting enablecfoutputonly="Yes">
+<!---
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2008 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * Configuration file for the ColdFusion Connector (all versions).
+--->
+
+<cfscript>
+	Config = StructNew() ;
+
+	// SECURITY: You must explicitly enable this "connector". (Set enabled to "true")
+	Config.Enabled = false ;
+
+
+	// Path to uploaded files relative to the document root.
+	Config.UserFilesPath = "/userfiles/" ;
+
+	// Use this to force the server path if FCKeditor is not running directly off
+	// the root of the application or the FCKeditor directory in the URL is a virtual directory
+	// or a symbolic link / junction
+	// Example: C:\inetpub\wwwroot\myDocs\
+	Config.ServerPath = "" ;
+
+	// Due to security issues with Apache modules, it is recommended to leave the
+	// following setting enabled.
+	Config.ForceSingleExtension = true ;
+
+	// Perform additional checks for image files - if set to true, validate image size
+	// (This feature works in MX 6.0 and above)
+	Config.SecureImageUploads = true;
+
+	// What the user can do with this connector
+	Config.ConfigAllowedCommands 			= "QuickUpload,FileUpload,GetFolders,GetFoldersAndFiles,CreateFolder" ;
+
+	//Allowed Resource Types
+	Config.ConfigAllowedTypes 				= "File,Image,Flash,Media" ;
+
+	// For security, HTML is allowed in the first Kb of data for files having the
+	// following extensions only.
+	// (This feature works in MX 6.0 and above))
+	Config.HtmlExtensions					= "html,htm,xml,xsd,txt,js" ;
+
+	//Due to known issues with GetTempDirectory function, it is
+	//recommended to set this vairiable to a valid directory
+	//instead of using the GetTempDirectory function
+	//(used by MX 6.0 and above)
+	Config.TempDirectory = GetTempDirectory();
+
+//	Configuration settings for each Resource Type
+//
+//	- AllowedExtensions: the possible extensions that can be allowed.
+//		If it is empty then any file type can be uploaded.
+//	- DeniedExtensions: The extensions that won't be allowed.
+//		If it is empty then no restrictions are done here.
+//
+//	For a file to be uploaded it has to fulfill both the AllowedExtensions
+//	and DeniedExtensions (that's it: not being denied) conditions.
+//
+//	- FileTypesPath: the virtual folder relative to the document root where
+//		these resources will be located.
+//		Attention: It must start and end with a slash: '/'
+//
+//	- FileTypesAbsolutePath: the physical path to the above folder. It must be
+//		an absolute path.
+//		If it's an empty string then it will be autocalculated.
+//		Usefull if you are using a virtual directory, symbolic link or alias.
+//		Examples: 'C:\\MySite\\userfiles\\' or '/root/mysite/userfiles/'.
+//		Attention: The above 'FileTypesPath' must point to the same directory.
+//		Attention: It must end with a slash: '/'
+//
+//
+//	 - QuickUploadPath: the virtual folder relative to the document root where
+//		these resources will be uploaded using the Upload tab in the resources
+//		dialogs.
+//		Attention: It must start and end with a slash: '/'
+//
+//	 - QuickUploadAbsolutePath: the physical path to the above folder. It must be
+//		an absolute path.
+//		If it's an empty string then it will be autocalculated.
+//		Usefull if you are using a virtual directory, symbolic link or alias.
+//		Examples: 'C:\\MySite\\userfiles\\' or '/root/mysite/userfiles/'.
+//		Attention: The above 'QuickUploadPath' must point to the same directory.
+//		Attention: It must end with a slash: '/'
+
+	Config.AllowedExtensions 				= StructNew() ;
+	Config.DeniedExtensions 				= StructNew() ;
+	Config.FileTypesPath 					= StructNew() ;
+	Config.FileTypesAbsolutePath 			= StructNew() ;
+	Config.QuickUploadPath 					= StructNew() ;
+	Config.QuickUploadAbsolutePath 			= StructNew() ;
+
+	Config.AllowedExtensions["File"]	 	= "7z,aiff,asf,avi,bmp,csv,doc,fla,flv,gif,gz,gzip,jpeg,jpg,mid,mov,mp3,mp4,mpc,mpeg,mpg,ods,odt,pdf,png,ppt,pxd,qt,ram,rar,rm,rmi,rmvb,rtf,sdc,sitd,swf,sxc,sxw,tar,tgz,tif,tiff,txt,vsd,wav,wma,wmv,xls,xml,zip" ;
+	Config.DeniedExtensions["File"] 		= "" ;
+	Config.FileTypesPath["File"] 			= Config.UserFilesPath & 'file/' ;
+	Config.FileTypesAbsolutePath["File"] 	= iif( Config.ServerPath eq "", de(""), de(Config.ServerPath & 'file/') ) ;
+	Config.QuickUploadPath["File"] 			= Config.FileTypesPath["File"] ;
+	Config.QuickUploadAbsolutePath["File"] 	= Config.FileTypesAbsolutePath["File"] ;
+
+	Config.AllowedExtensions["Image"] 		= "bmp,gif,jpeg,jpg,png" ;
+	Config.DeniedExtensions["Image"] 		= "" ;
+	Config.FileTypesPath["Image"] 			= Config.UserFilesPath & 'image/' ;
+	Config.FileTypesAbsolutePath["Image"] 	= iif( Config.ServerPath eq "", de(""), de(Config.ServerPath & 'image/') ) ;
+	Config.QuickUploadPath["Image"] 		= Config.FileTypesPath["Image"] ;
+	Config.QuickUploadAbsolutePath["Image"] = Config.FileTypesAbsolutePath["Image"] ;
+
+	Config.AllowedExtensions["Flash"] 		= "swf,flv" ;
+	Config.DeniedExtensions["Flash"] 		= "" ;
+	Config.FileTypesPath["Flash"] 			= Config.UserFilesPath & 'flash/' ;
+	Config.FileTypesAbsolutePath["Flash"] 	= iif( Config.ServerPath eq "", de(""), de(Config.ServerPath & 'flash/') ) ;
+	Config.QuickUploadPath["Flash"] 		= Config.FileTypesPath["Flash"] ;
+	Config.QuickUploadAbsolutePath["Flash"] = Config.FileTypesAbsolutePath["Flash"] ;
+
+	Config.AllowedExtensions["Media"] 		= "aiff,asf,avi,bmp,fla,flv,gif,jpeg,jpg,mid,mov,mp3,mp4,mpc,mpeg,mpg,png,qt,ram,rm,rmi,rmvb,swf,tif,tiff,wav,wma,wmv" ;
+	Config.DeniedExtensions["Media"] 		= "" ;
+	Config.FileTypesPath["Media"] 			= Config.UserFilesPath & 'media/' ;
+	Config.FileTypesAbsolutePath["Media"] 	= iif( Config.ServerPath eq "", de(""), de(Config.ServerPath & 'media/') ) ;
+	Config.QuickUploadPath["Media"] 		= Config.FileTypesPath["Media"] ;
+	Config.QuickUploadAbsolutePath["Media"] = Config.FileTypesAbsolutePath["Media"] ;
+</cfscript>
+
+<cftry>
+<!--- code to maintain backwards compatibility with previous version of cfm connector --->
+<cfif isDefined("application.userFilesPath")>
+
+	<cflock scope="application" type="readonly" timeout="5">
+		<cfset config.userFilesPath = application.userFilesPath>
+	</cflock>
+
+<cfelseif isDefined("server.userFilesPath")>
+
+	<cflock scope="server" type="readonly" timeout="5">
+		<cfset config.userFilesPath = server.userFilesPath>
+	</cflock>
+
+</cfif>
+
+<!--- look for config struct in application and server scopes --->
+<cfif isDefined("application.FCKeditor") and isStruct(application.FCKeditor)>
+
+	<cflock scope="application" type="readonly" timeout="5">
+	<cfset variables.FCKeditor = duplicate(application.FCKeditor)>
+	</cflock>
+
+<cfelseif isDefined("server.FCKeditor") and isStruct(server.FCKeditor)>
+
+	<cflock scope="server" type="readonly" timeout="5">
+	<cfset variables.FCKeditor = duplicate(server.FCKeditor)>
+	</cflock>
+
+</cfif>
+	<!--- catch potential "The requested scope application has not been enabled" exception --->
+	<cfcatch type="any">
+	</cfcatch>
+</cftry>
+
+<cfif isDefined("FCKeditor")>
+
+	<!--- copy key values from external to local config (i.e. override default config as required) --->
+	<cfscript>
+		function structCopyKeys(stFrom, stTo) {
+			for ( key in stFrom ) {
+				if ( isStruct(stFrom[key]) ) {
+					structCopyKeys(stFrom[key],stTo[key]);
+				} else {
+					stTo[key] = stFrom[key];
+				}
+			}
+		}
+		structCopyKeys(FCKeditor, config);
+	</cfscript>
+
+</cfif>

Added: announcement/trunk/src/main/webapp/fckeditor/editor/filemanager/connectors/cfm/connector.cfm
===================================================================
--- announcement/trunk/src/main/webapp/fckeditor/editor/filemanager/connectors/cfm/connector.cfm	                        (rev 0)
+++ announcement/trunk/src/main/webapp/fckeditor/editor/filemanager/connectors/cfm/connector.cfm	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,32 @@
+<cfsetting enablecfoutputonly="Yes">
+<!---
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2008 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * File Browser connector for ColdFusion (all versions).
+ *
+--->
+
+<cfset REQUEST.CFVersion = Left( SERVER.COLDFUSION.PRODUCTVERSION, Find( ",", SERVER.COLDFUSION.PRODUCTVERSION ) - 1 )>
+<cfif REQUEST.CFVersion lte 5>
+	<cfinclude template="cf5_connector.cfm">
+<cfelse>
+	<cfinclude template="cf_connector.cfm">
+</cfif>
+<cfabort>

Added: announcement/trunk/src/main/webapp/fckeditor/editor/filemanager/connectors/cfm/image.cfc
===================================================================
--- announcement/trunk/src/main/webapp/fckeditor/editor/filemanager/connectors/cfm/image.cfc	                        (rev 0)
+++ announcement/trunk/src/main/webapp/fckeditor/editor/filemanager/connectors/cfm/image.cfc	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,1324 @@
+<!---
+	image.cfc v2.19, written by Rick Root (rick****@webwo*****)
+	Derivative of work originally done originally by James Dew.
+
+	Related Web Sites:
+	- http://www.opensourcecf.com/imagecfc (home page)
+	- http://www.cfopen.org/projects/imagecfc (project page)
+
+	LICENSE
+	-------
+	Copyright (c) 2007, Rick Root <rick****@webwo*****>
+	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 Webworks, LLC. 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.
+
+	============================================================
+	This is a derivative work.  Following is the original
+	Copyright notice.
+	============================================================
+
+	Copyright (c) 2004 James F. Dew <jdew****@yggdr*****>
+
+	Permission to use, copy, modify, and distribute this software for any
+	purpose with or without fee is hereby granted, provided that the above
+	copyright notice and this permission notice appear in all copies.
+
+	THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+	WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+	MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+	ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+	WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+	ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+	OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+--->
+<!---
+	SPECIAL NOTE FOR HEADLESS SYSTEMS
+	---------------------------------
+	If you get a "cannot connect to X11 server" when running certain
+	parts of this component under Bluedragon (Linux), you must
+	add "-Djava.awt.headless=true" to the java startup line in
+	<bluedragon>/bin/StartBluedragon.sh.  This isssue is discussed
+	in the Bluedragon Installation Guide section 3.8.1 for
+	Bluedragon 6.2.1.
+
+	Bluedragon may also report a ClassNotFound exception when trying
+	to instantiate the java.awt.image.BufferedImage class.  This is
+	most likely the same issue.
+
+	If you get "This graphics environment can be used only in the
+	software emulation mode" when calling certain parts of this
+	component under Coldfusion MX, you should refer to Technote
+	ID #18747:  http://www.macromedia.com/go/tn_18747
+--->
+
+<cfcomponent displayname="Image">
+
+<cfset variables.throwOnError = "Yes">
+<cfset variables.defaultJpegCompression = "90">
+<cfset variables.interpolation = "bicubic">
+<cfset variables.textAntiAliasing = "Yes">
+<cfset variables.tempDirectory = "#expandPath(".")#">
+
+<cfset variables.javanulls = "no">
+<cftry>
+	<cfset nullvalue = javacast("null","")>
+	<cfset variables.javanulls = "yes">
+	<cfcatch type="any">
+		<cfset variables.javanulls = "no">
+		<!--- javacast null not supported, so filters won't work --->
+	</cfcatch>
+</cftry>
+<!---
+<cfif javanulls>
+	<cfset variables.blurFilter = createObject("component","blurFilter")>
+	<cfset variables.sharpenFilter = createObject("component","sharpenFilter")>
+	<cfset variables.posterizeFilter = createObject("component","posterizeFilter")>
+</cfif>
+--->
+
+<cfset variables.Math = createobject("java", "java.lang.Math")>
+<cfset variables.arrObj = createobject("java", "java.lang.reflect.Array")>
+<cfset variables.floatClass = createobject("java", "java.lang.Float").TYPE>
+<cfset variables.intClass = createobject("java", "java.lang.Integer").TYPE>
+<cfset variables.shortClass = createobject("java", "java.lang.Short").TYPE>
+
+<cffunction name="getImageInfo" access="public" output="true" returntype="struct" hint="Rotate an image (+/-)90, (+/-)180, or (+/-)270 degrees.">
+	<cfargument name="objImage" required="yes" type="Any">
+	<cfargument name="inputFile" required="yes" type="string">
+
+	<cfset var retVal = StructNew()>
+	<cfset var loadImage = StructNew()>
+	<cfset var img = "">
+
+	<cfset retVal.errorCode = 0>
+	<cfset retVal.errorMessage = "">
+
+	<cfif inputFile neq "">
+		<cfset loadImage = readImage(inputFile, "NO")>
+		<cfif loadImage.errorCode is 0>
+			<cfset img = loadImage.img>
+		<cfelse>
+			<cfset retVal = throw(loadImage.errorMessage)>
+			<cfreturn retVal>
+		</cfif>
+		<cfset retVal.metaData = getImageMetadata(loadImage.inFile)>
+	<cfelse>
+		<cfset img = objImage>
+		<cfset retVal.metadata = getImageMetadata("")>
+	</cfif>
+	<cftry>
+		<cfset retVal.width = img.getWidth()>
+		<cfset retVal.height = img.getHeight()>
+		<cfset retVal.colorModel = img.getColorModel().toString()>
+		<cfset retVal.colorspace = img.getColorModel().getColorSpace().toString()>
+		<cfset retVal.objColorModel = img.getColorModel()>
+		<cfset retVal.objColorspace = img.getColorModel().getColorSpace()>
+		<cfset retVal.sampleModel = img.getSampleModel().toString()>
+		<cfset retVal.imageType = img.getType()>
+		<cfset retVal.misc = img.toString()>
+		<cfset retVal.canModify = true>
+		<cfreturn retVal>
+		<cfcatch type="any">
+			<cfset retVal = throw( "#cfcatch.message#: #cfcatch.detail#")>
+			<cfreturn retVal>
+		</cfcatch>
+	</cftry>
+</cffunction>
+
+<cffunction name="getImageMetadata" access="private" output="false" returntype="query">
+	<cfargument name="inFile" required="yes" type="Any"><!--- java.io.File --->
+
+	<cfset var retQry = queryNew("dirName,tagName,tagValue")>
+	<cfset var paths = arrayNew(1)>
+	<cfset var loader = "">
+	<cfset var JpegMetadatareader = "">
+	<cfset var myMetadata = "">
+	<cfset var directories = "">
+	<cfset var currentDirectory = "">
+	<cfset var tags = "">
+	<cfset var currentTag = "">
+	<cfset var tagName = "">
+
+	<cftry>
+	<cfscript>
+		paths = arrayNew(1);
+		paths[1] = expandPath("metadata-extractor-2.3.1.jar");
+		loader = createObject("component", "javaloader.JavaLoader").init(paths);
+
+		//at this stage we only have access to the class, but we don't have an instance
+		JpegMetadataReader = loader.create("com.drew.imaging.jpeg.JpegMetadataReader");
+
+		myMetaData = JpegMetadataReader.readMetadata(inFile);
+		directories = myMetaData.getDirectoryIterator();
+		while (directories.hasNext()) {
+			currentDirectory = directories.next();
+			tags = currentDirectory.getTagIterator();
+			while (tags.hasNext()) {
+				currentTag = tags.next();
+				if (currentTag.getTagName() DOES NOT CONTAIN "Unknown") { //leave out the junk data
+					queryAddRow(retQry);
+					querySetCell(retQry,"dirName",replace(currentTag.getDirectoryName(),' ','_','ALL'));
+					tagName = replace(currentTag.getTagName(),' ','','ALL');
+					tagName = replace(tagName,'/','','ALL');
+					querySetCell(retQry,"tagName",tagName);
+					querySetCell(retQry,"tagValue",currentTag.getDescription());
+				}
+			}
+		}
+		return retQry;
+		</cfscript>
+		<cfcatch type="any">
+			<cfreturn retQry />
+		</cfcatch>
+	</cftry>
+</cffunction>
+
+<cffunction name="flipHorizontal" access="public" output="true" returntype="struct" hint="Flip an image horizontally.">
+	<cfargument name="objImage" required="yes" type="Any">
+	<cfargument name="inputFile" required="yes" type="string">
+	<cfargument name="outputFile" required="yes" type="string">
+	<cfargument name="jpegCompression" required="no" type="numeric" default="#variables.defaultJpegCompression#">
+
+	<cfreturn flipflop(objImage, inputFile, outputFile, "horizontal", jpegCompression)>
+</cffunction>
+
+<cffunction name="flipVertical" access="public" output="true" returntype="struct" hint="Flop an image vertically.">
+	<cfargument name="objImage" required="yes" type="Any">
+	<cfargument name="inputFile" required="yes" type="string">
+	<cfargument name="outputFile" required="yes" type="string">
+	<cfargument name="jpegCompression" required="no" type="numeric" default="#variables.defaultJpegCompression#">
+
+	<cfreturn flipflop(objImage, inputFile, outputFile, "vertical", jpegCompression)>
+</cffunction>
+
+<cffunction name="scaleWidth" access="public" output="true" returntype="struct" hint="Scale an image to a specific width.">
+	<cfargument name="objImage" required="yes" type="Any">
+	<cfargument name="inputFile" required="yes" type="string">
+	<cfargument name="outputFile" required="yes" type="string">
+	<cfargument name="newWidth" required="yes" type="numeric">
+	<cfargument name="jpegCompression" required="no" type="numeric" default="#variables.defaultJpegCompression#">
+
+	<cfreturn resize(objImage, inputFile, outputFile, newWidth, 0, "false", "false", jpegCompression)>
+</cffunction>
+
+<cffunction name="scaleHeight" access="public" output="true" returntype="struct" hint="Scale an image to a specific height.">
+	<cfargument name="objImage" required="yes" type="Any">
+	<cfargument name="inputFile" required="yes" type="string">
+	<cfargument name="outputFile" required="yes" type="string">
+	<cfargument name="newHeight" required="yes" type="numeric">
+	<cfargument name="jpegCompression" required="no" type="numeric" default="#variables.defaultJpegCompression#">
+
+	<cfreturn resize(objImage, inputFile, outputFile, 0, newHeight, "false", "false", jpegCompression)>
+</cffunction>
+
+<cffunction name="resize" access="public" output="true" returntype="struct" hint="Resize an image to a specific width and height.">
+	<cfargument name="objImage" required="yes" type="Any">
+	<cfargument name="inputFile" required="yes" type="string">
+	<cfargument name="outputFile" required="yes" type="string">
+	<cfargument name="newWidth" required="yes" type="numeric">
+	<cfargument name="newHeight" required="yes" type="numeric">
+	<cfargument name="preserveAspect" required="no" type="boolean" default="FALSE">
+	<cfargument name="cropToExact" required="no" type="boolean" default="FALSE">
+	<cfargument name="jpegCompression" required="no" type="numeric" default="#variables.defaultJpegCompression#">
+
+	<cfset var retVal = StructNew()>
+	<cfset var loadImage = StructNew()>
+	<cfset var saveImage = StructNew()>
+	<cfset var at = "">
+	<cfset var op = "">
+	<cfset var w = "">
+	<cfset var h = "">
+	<cfset var scale = 1>
+	<cfset var scaleX = 1>
+	<cfset var scaleY = 1>
+	<cfset var resizedImage = "">
+	<cfset var rh = getRenderingHints()>
+	<cfset var specifiedWidth = arguments.newWidth>
+	<cfset var specifiedHeight = arguments.newHeight>
+	<cfset var imgInfo = "">
+	<cfset var img = "">
+	<cfset var cropImageResult = "">
+	<cfset var cropOffsetX = "">
+	<cfset var cropOffsetY = "">
+
+	<cfset retVal.errorCode = 0>
+	<cfset retVal.errorMessage = "">
+
+	<cfif inputFile neq "">
+		<cfset loadImage = readImage(inputFile, "NO")>
+		<cfif loadImage.errorCode is 0>
+			<cfset img = loadImage.img>
+		<cfelse>
+			<cfset retVal = throw(loadImage.errorMessage)>
+			<cfreturn retVal>
+		</cfif>
+	<cfelse>
+		<cfset img = objImage>
+	</cfif>
+	<cfif img.getType() eq 0>
+		<cfset img = convertImageObject(img,img.TYPE_3BYTE_BGR)>
+	</cfif>
+	<cfscript>
+		resizedImage = CreateObject("java", "java.awt.image.BufferedImage");
+		at = CreateObject("java", "java.awt.geom.AffineTransform");
+		op = CreateObject("java", "java.awt.image.AffineTransformOp");
+
+		w = img.getWidth();
+		h = img.getHeight();
+
+		if (preserveAspect and cropToExact and newHeight gt 0 and newWidth gt 0)
+		{
+			if (w / h gt newWidth / newHeight){
+				newWidth = 0;
+			} else if (w / h lt newWidth / newHeight){
+				newHeight = 0;
+		    }
+		} else if (preserveAspect and newHeight gt 0 and newWidth gt 0) {
+			if (w / h gt newWidth / newHeight){
+				newHeight = 0;
+			} else if (w / h lt newWidth / newHeight){
+				newWidth = 0;
+		    }
+		}
+		if (newWidth gt 0 and newHeight eq 0) {
+			scale = newWidth / w;
+			w = newWidth;
+			h = round(h*scale);
+		} else if (newHeight gt 0 and newWidth eq 0) {
+			scale = newHeight / h;
+			h = newHeight;
+			w = round(w*scale);
+		} else if (newHeight gt 0 and newWidth gt 0) {
+			w = newWidth;
+			h = newHeight;
+		} else {
+			retVal = throw( retVal.errorMessage);
+			return retVal;
+		}
+		resizedImage.init(javacast("int",w),javacast("int",h),img.getType());
+
+		w = w / img.getWidth();
+		h = h / img.getHeight();
+
+
+
+		op.init(at.getScaleInstance(javacast("double",w),javacast("double",h)), rh);
+		// resizedImage = op.createCompatibleDestImage(img, img.getColorModel());
+		op.filter(img, resizedImage);
+
+		imgInfo = getimageinfo(resizedImage, "");
+		if (imgInfo.errorCode gt 0)
+		{
+			return imgInfo;
+		}
+
+		cropOffsetX = max( Int( (imgInfo.width/2) - (newWidth/2) ), 0 );
+		cropOffsetY = max( Int( (imgInfo.height/2) - (newHeight/2) ), 0 );
+		// There is a chance that the image is exactly the correct
+		// width and height and don't need to be cropped
+		if
+			(
+			preserveAspect and cropToExact
+			and
+			(imgInfo.width IS NOT specifiedWidth OR imgInfo.height IS NOT specifiedHeight)
+			)
+		{
+			// Get the correct offset to get the center of the image
+			cropOffsetX = max( Int( (imgInfo.width/2) - (specifiedWidth/2) ), 0 );
+			cropOffsetY = max( Int( (imgInfo.height/2) - (specifiedHeight/2) ), 0 );
+
+			cropImageResult = crop( resizedImage, "", "", cropOffsetX, cropOffsetY, specifiedWidth, specifiedHeight );
+			if ( cropImageResult.errorCode GT 0)
+			{
+				return cropImageResult;
+			} else {
+				resizedImage = cropImageResult.img;
+			}
+		}
+		if (outputFile eq "")
+		{
+			retVal.img = resizedImage;
+			return retVal;
+		} else {
+			saveImage = writeImage(outputFile, resizedImage, jpegCompression);
+			if (saveImage.errorCode gt 0)
+			{
+				return saveImage;
+			} else {
+				return retVal;
+			}
+		}
+	</cfscript>
+</cffunction>
+
+<cffunction name="crop" access="public" output="true" returntype="struct" hint="Crop an image.">
+	<cfargument name="objImage" required="yes" type="Any">
+	<cfargument name="inputFile" required="yes" type="string">
+	<cfargument name="outputFile" required="yes" type="string">
+	<cfargument name="fromX" required="yes" type="numeric">
+	<cfargument name="fromY" required="yes" type="numeric">
+	<cfargument name="newWidth" required="yes" type="numeric">
+	<cfargument name="newHeight" required="yes" type="numeric">
+	<cfargument name="jpegCompression" required="no" type="numeric" default="#variables.defaultJpegCompression#">
+
+	<cfset var retVal = StructNew()>
+	<cfset var loadImage = StructNew()>
+	<cfset var saveImage = StructNew()>
+	<cfset var croppedImage = "">
+	<cfset var rh = getRenderingHints()>
+	<cfset var img = "">
+
+	<cfset retVal.errorCode = 0>
+	<cfset retVal.errorMessage = "">
+
+	<cfif inputFile neq "">
+		<cfset loadImage = readImage(inputFile, "NO")>
+		<cfif loadImage.errorCode is 0>
+			<cfset img = loadImage.img>
+		<cfelse>
+			<cfset retVal = throw(loadImage.errorMessage)>
+			<cfreturn retVal>
+		</cfif>
+	<cfelse>
+		<cfset img = objImage>
+	</cfif>
+	<cfif img.getType() eq 0>
+		<cfset img = convertImageObject(img,img.TYPE_3BYTE_BGR)>
+	</cfif>
+	<cfscript>
+		if (fromX + newWidth gt img.getWidth()
+			OR
+			fromY + newHeight gt img.getHeight()
+			)
+		{
+			retval = throw( "The cropped image dimensions go beyond the original image dimensions.");
+			return retVal;
+		}
+		croppedImage = img.getSubimage(javaCast("int", fromX), javaCast("int", fromY), javaCast("int", newWidth), javaCast("int", newHeight) );
+		if (outputFile eq "")
+		{
+			retVal.img = croppedImage;
+			return retVal;
+		} else {
+			saveImage = writeImage(outputFile, croppedImage, jpegCompression);
+			if (saveImage.errorCode gt 0)
+			{
+				return saveImage;
+			} else {
+				return retVal;
+			}
+		}
+	</cfscript>
+</cffunction>
+
+<cffunction name="rotate" access="public" output="true" returntype="struct" hint="Rotate an image (+/-)90, (+/-)180, or (+/-)270 degrees.">
+	<cfargument name="objImage" required="yes" type="Any">
+	<cfargument name="inputFile" required="yes" type="string">
+	<cfargument name="outputFile" required="yes" type="string">
+	<cfargument name="degrees" required="yes" type="numeric">
+	<cfargument name="jpegCompression" required="no" type="numeric" default="#variables.defaultJpegCompression#">
+
+	<cfset var retVal = StructNew()>
+	<cfset var img = "">
+	<cfset var loadImage = StructNew()>
+	<cfset var saveImage = StructNew()>
+	<cfset var at = "">
+	<cfset var op = "">
+	<cfset var w = 0>
+	<cfset var h = 0>
+	<cfset var iw = 0>
+	<cfset var ih = 0>
+	<cfset var x = 0>
+	<cfset var y = 0>
+	<cfset var rotatedImage = "">
+	<cfset var rh = getRenderingHints()>
+
+	<cfset retVal.errorCode = 0>
+	<cfset retVal.errorMessage = "">
+
+	<cfif inputFile neq "">
+		<cfset loadImage = readImage(inputFile, "NO")>
+		<cfif loadImage.errorCode is 0>
+			<cfset img = loadImage.img>
+		<cfelse>
+			<cfset retVal = throw(loadImage.errorMessage)>
+			<cfreturn retVal>
+		</cfif>
+	<cfelse>
+		<cfset img = objImage>
+	</cfif>
+	<cfif img.getType() eq 0>
+		<cfset img = convertImageObject(img,img.TYPE_3BYTE_BGR)>
+	</cfif>
+	<cfif ListFind("-270,-180,-90,90,180,270",degrees) is 0>
+		<cfset retVal = throw( "At this time, image.cfc only supports rotating images in 90 degree increments.")>
+		<cfreturn retVal>
+	</cfif>
+
+	<cfscript>
+		rotatedImage = CreateObject("java", "java.awt.image.BufferedImage");
+		at = CreateObject("java", "java.awt.geom.AffineTransform");
+		op = CreateObject("java", "java.awt.image.AffineTransformOp");
+
+		iw = img.getWidth(); h = iw;
+		ih = img.getHeight(); w = ih;
+
+		if(arguments.degrees eq 180) { w = iw; h = ih; }
+
+		x = (w/2)-(iw/2);
+		y = (h/2)-(ih/2);
+
+		rotatedImage.init(javacast("int",w),javacast("int",h),img.getType());
+
+		at.rotate(arguments.degrees * 0.0174532925,w/2,h/2);
+		at.translate(x,y);
+		op.init(at, rh);
+
+		op.filter(img, rotatedImage);
+
+		if (outputFile eq "")
+		{
+			retVal.img = rotatedImage;
+			return retVal;
+		} else {
+			saveImage = writeImage(outputFile, rotatedImage, jpegCompression);
+			if (saveImage.errorCode gt 0)
+			{
+				return saveImage;
+			} else {
+				return retVal;
+			}
+		}
+	</cfscript>
+</cffunction>
+
+<cffunction name="convert" access="public" output="true" returntype="struct" hint="Convert an image from one format to another.">
+	<cfargument name="objImage" required="yes" type="Any">
+	<cfargument name="inputFile" required="yes" type="string">
+	<cfargument name="outputFile" required="yes" type="string">
+	<cfargument name="jpegCompression" required="no" type="numeric" default="#variables.defaultJpegCompression#">
+
+	<cfset var retVal = StructNew()>
+	<cfset var loadImage = StructNew()>
+	<cfset var saveImage = StructNew()>
+	<cfset var img = "">
+
+	<cfset retVal.errorCode = 0>
+	<cfset retVal.errorMessage = "">
+
+	<cfif inputFile neq "">
+		<cfset loadImage = readImage(inputFile, "NO")>
+		<cfif loadImage.errorCode is 0>
+			<cfset img = loadImage.img>
+		<cfelse>
+			<cfset retVal = throw(loadImage.errorMessage)>
+			<cfreturn retVal>
+		</cfif>
+	<cfelse>
+		<cfset img = objImage>
+	</cfif>
+
+	<cfscript>
+		if (outputFile eq "")
+		{
+			retVal = throw( "The convert method requires a valid output filename.");
+			return retVal;
+		} else {
+			saveImage = writeImage(outputFile, img, jpegCompression);
+			if (saveImage.errorCode gt 0)
+			{
+				return saveImage;
+			} else {
+				return retVal;
+			}
+		}
+	</cfscript>
+</cffunction>
+
+<cffunction name="setOption" access="public" output="true" returnType="void" hint="Sets values for allowed CFC options.">
+	<cfargument name="key" type="string" required="yes">
+	<cfargument name="val" type="string" required="yes">
+
+	<cfset var validKeys = "interpolation,textantialiasing,throwonerror,defaultJpegCompression">
+	<cfset arguments.key = lcase(trim(arguments.key))>
+	<cfset arguments.val = lcase(trim(arguments.val))>
+	<cfif listFind(validKeys, arguments.key) gt 0>
+		<cfset variables[arguments.key] = arguments.val>
+	</cfif>
+</cffunction>
+
+<cffunction name="getOption" access="public" output="true" returnType="any" hint="Returns the current value for the specified CFC option.">
+	<cfargument name="key" type="string" required="yes">
+
+	<cfset var validKeys = "interpolation,textantialiasing,throwonerror,defaultJpegCompression">
+	<cfset arguments.key = lcase(trim(arguments.key))>
+	<cfif listFindNoCase(validKeys, arguments.key) gt 0>
+		<cfreturn variables[arguments.key]>
+	<cfelse>
+		<cfreturn "">
+	</cfif>
+</cffunction>
+
+<cffunction name="getRenderingHints" access="private" output="true" returnType="any" hint="Internal method controls various aspects of rendering quality.">
+	<cfset var rh = CreateObject("java","java.awt.RenderingHints")>
+	<cfset var initMap = CreateObject("java","java.util.HashMap")>
+	<cfset initMap.init()>
+	<cfset rh.init(initMap)>
+	<cfset rh.put(rh.KEY_ALPHA_INTERPOLATION, rh.VALUE_ALPHA_INTERPOLATION_QUALITY)> <!--- QUALITY, SPEED, DEFAULT --->
+	<cfset rh.put(rh.KEY_ANTIALIASING, rh.VALUE_ANTIALIAS_ON)> <!--- ON, OFF, DEFAULT --->
+	<cfset rh.put(rh.KEY_COLOR_RENDERING, rh.VALUE_COLOR_RENDER_QUALITY)>  <!--- QUALITY, SPEED, DEFAULT --->
+	<cfset rh.put(rh.KEY_DITHERING, rh.VALUE_DITHER_DEFAULT)> <!--- DISABLE, ENABLE, DEFAULT --->
+	<cfset rh.put(rh.KEY_RENDERING, rh.VALUE_RENDER_QUALITY)> <!--- QUALITY, SPEED, DEFAULT --->
+	<cfset rh.put(rh.KEY_FRACTIONALMETRICS, rh.VALUE_FRACTIONALMETRICS_DEFAULT)> <!--- DISABLE, ENABLE, DEFAULT --->
+	<cfset rh.put(rh.KEY_STROKE_CONTROL, rh.VALUE_STROKE_DEFAULT)>
+
+	<cfif variables.textAntiAliasing>
+		<cfset rh.put(rh.KEY_TEXT_ANTIALIASING, rh.VALUE_TEXT_ANTIALIAS_ON)>
+	<cfelse>
+		<cfset rh.put(rh.KEY_TEXT_ANTIALIASING, rh.VALUE_TEXT_ANTIALIAS_OFF)>
+	</cfif>
+
+	<cfif variables.interpolation eq "nearest_neighbor">
+		<cfset rh.put(rh.KEY_INTERPOLATION, rh.VALUE_INTERPOLATION_NEAREST_NEIGHBOR)>
+	<cfelseif variables.interpolation eq "bilinear">
+		<cfset rh.put(rh.KEY_INTERPOLATION, rh.VALUE_INTERPOLATION_BILINEAR)>
+	<cfelse>
+		<cfset rh.put(rh.KEY_INTERPOLATION, rh.VALUE_INTERPOLATION_BICUBIC)>
+	</cfif>
+
+	<cfreturn rh>
+</cffunction>
+
+<cffunction name="readImage" access="public" output="true" returntype="struct" hint="Reads an image from a local file.  Requires an absolute path.">
+	<cfargument name="source" required="yes" type="string">
+	<cfargument name="forModification" required="no" type="boolean" default="yes">
+
+	<cfif isURL(source)>
+		<cfreturn readImageFromURL(source, forModification)>
+	<cfelse>
+		<cfreturn readImageFromFile(source, forModification)>
+	</cfif>
+</cffunction>
+
+<cffunction name="readImageFromFile" access="private" output="true" returntype="struct" hint="Reads an image from a local file.  Requires an absolute path.">
+	<cfargument name="inputFile" required="yes" type="string">
+	<cfargument name="forModification" required="no" type="boolean" default="yes">
+
+	<cfset var retVal = StructNew()>
+	<cfset var img = "">
+	<cfset var inFile = "">
+	<cfset var filename = getFileFromPath(inputFile)>
+	<cfset var extension = lcase(listLast(inputFile,"."))>
+	<cfset var imageIO = CreateObject("java", "javax.imageio.ImageIO")>
+	<cfset var validExtensionsToRead = ArrayToList(imageIO.getReaderFormatNames())>
+
+	<cfset retVal.errorCode = 0>
+	<cfset retVal.errorMessage = "">
+
+	<cfif not fileExists(arguments.inputFile)>
+		<cfset retVal = throw("The specified file #Chr(34)##arguments.inputFile##Chr(34)# could not be found.")>
+		<cfreturn retVal>
+	<cfelseif listLen(filename,".") lt 2>
+		<cfset retVal = throw("Sorry, image files without extensions cannot be manipulated.")>
+		<cfreturn retVal>
+	<cfelseif listFindNoCase(validExtensionsToRead, extension) is 0>
+		<cfset retVal = throw("Java is unable to read #extension# files.")>
+		<cfreturn retVal>
+	<cfelseif NOT fileExists(arguments.inputFile)>
+		<cfset retVal = throw("The specified input file does not exist.")>
+		<cfreturn retVal>
+	<cfelse>
+		<cfset img = CreateObject("java", "java.awt.image.BufferedImage")>
+		<cfset inFile = CreateObject("java", "java.io.File")>
+		<cfset inFile.init(arguments.inputFile)>
+		<cfif NOT inFile.canRead()>
+			<cfset retVal = throw("Unable to open source file #Chr(34)##arguments.inputFile##Chr(34)#.")>
+			<cfreturn retVal>
+		<cfelse>
+			<cftry>
+				<cfset img = imageIO.read(inFile)>
+				<cfcatch type="any">
+					<cfset retval = throw("An error occurred attempting to read the specified image.  #cfcatch.message# - #cfcatch.detail#")>
+					<cfreturn retVal>
+				</cfcatch>
+			</cftry>
+			<cfset retVal.img = img>
+			<cfset retVal.inFile = inFile>
+			<cfreturn retVal>
+		</cfif>
+	</cfif>
+</cffunction>
+
+<cffunction name="readImageFromURL" access="private" output="true" returntype="struct" hint="Read an image from a URL.  Requires an absolute URL.">
+	<cfargument name="inputURL" required="yes" type="string">
+	<cfargument name="forModification" required="no" type="boolean" default="yes">
+
+	<cfset var retVal = StructNew()>
+	<cfset var img = CreateObject("java", "java.awt.image.BufferedImage")>
+	<cfset var inURL	= CreateObject("java", "java.net.URL")>
+	<cfset var imageIO = CreateObject("java", "javax.imageio.ImageIO")>
+
+	<cfset retVal.errorCode = 0>
+	<cfset retVal.errorMessage = "">
+
+
+	<cfset inURL.init(arguments.inputURL)>
+	<cftry>
+		<cfset img = imageIO.read(inURL)>
+		<cfcatch type="any">
+			<cfset retval = throw("An error occurred attempting to read the specified image.  #cfcatch.message# - #cfcatch.detail#")>
+			<cfreturn retVal>
+		</cfcatch>
+	</cftry>
+	<cfset retVal.img = img>
+	<cfreturn retVal>
+</cffunction>
+
+<cffunction name="writeImage" access="public" output="true" returntype="struct" hint="Write an image to disk.">
+	<cfargument name="outputFile" required="yes" type="string">
+	<cfargument name="img" required="yes" type="any">
+	<cfargument name="jpegCompression" required="no" type="numeric" default="#variables.defaultJpegCompression#">
+
+	<cfset var retVal = StructNew()>
+	<cfset var outFile = "">
+	<cfset var filename = getFileFromPath(outputFile)>
+	<cfset var extension = lcase(listLast(filename,"."))>
+	<cfset var imageIO = CreateObject("java", "javax.imageio.ImageIO")>
+	<cfset var validExtensionsToWrite = ArrayToList(imageIO.getWriterFormatNames())>
+	<!--- used for jpeg output method --->
+	<cfset var out = "">
+	<cfset var fos = "">
+	<cfset var JPEGCodec = "">
+	<cfset var encoder = "">
+	<cfset var param = "">
+	<cfset var quality = javacast("float", jpegCompression/100)>
+	<cfset var tempOutputFile = "#variables.tempDirectory#\#createUUID()#.#extension#">
+
+	<cfset retVal.errorCode = 0>
+	<cfset retVal.errorMessage = "">
+
+	<cfif listFindNoCase(validExtensionsToWrite, extension) eq 0>
+		<cfset throw("Java is unable to write #extension# files.  Valid formats include: #validExtensionsToWrite#")>
+	</cfif>
+
+	<cfif extension neq "jpg" and extension neq "jpeg">
+		<!---
+			Simple output method for non jpeg images
+		--->
+		<cfset outFile = CreateObject("java", "java.io.File")>
+		<cfset outFile.init(tempOutputFile)>
+		<cfset imageIO.write(img, extension, outFile)>
+	<cfelse>
+		<cfscript>
+			/*
+				JPEG output method handles compression
+			*/
+			out = createObject("java", "java.io.BufferedOutputStream");
+			fos = createObject("java", "java.io.FileOutputStream");
+			fos.init(tempOutputFile);
+			out.init(fos);
+			JPEGCodec = createObject("java", "com.sun.image.codec.jpeg.JPEGCodec");
+			encoder = JPEGCodec.createJPEGEncoder(out);
+		    param = encoder.getDefaultJPEGEncodeParam(img);
+		    param.setQuality(quality, false);
+		    encoder.setJPEGEncodeParam(param);
+		    encoder.encode(img);
+		    out.close();
+		</cfscript>
+	</cfif>
+	<!--- move file to its final destination --->
+	<cffile action="MOVE" source="#tempOutputFile#" destination="#arguments.outputFile#">
+	<cfreturn retVal>
+</cffunction>
+
+<cffunction name="flipflop" access="private" output="true" returntype="struct" hint="Internal method used for flipping and flopping images.">
+	<cfargument name="objImage" required="yes" type="Any">
+	<cfargument name="inputFile" required="yes" type="string">
+	<cfargument name="outputFile" required="yes" type="string">
+	<cfargument name="direction" required="yes" type="string"><!--- horizontal or vertical --->
+	<cfargument name="jpegCompression" required="no" type="numeric" default="#variables.defaultJpegCompression#">
+
+	<cfset var retVal = StructNew()>
+	<cfset var loadImage = StructNew()>
+	<cfset var saveImage = StructNew()>
+	<cfset var flippedImage = "">
+	<cfset var rh = getRenderingHints()>
+	<cfset var img = "">
+
+	<cfset retVal.errorCode = 0>
+	<cfset retVal.errorMessage = "">
+
+	<cfif inputFile neq "">
+		<cfset loadImage = readImage(inputFile, "NO")>
+		<cfif loadImage.errorCode is 0>
+			<cfset img = loadImage.img>
+		<cfelse>
+			<cfset retVal = throw(loadImage.errorMessage)>
+			<cfreturn retVal>
+		</cfif>
+	<cfelse>
+		<cfset img = objImage>
+	</cfif>
+	<cfif img.getType() eq 0>
+		<cfset img = convertImageObject(img,img.TYPE_3BYTE_BGR)>
+	</cfif>
+	<cfscript>
+		flippedImage = CreateObject("java", "java.awt.image.BufferedImage");
+		at = CreateObject("java", "java.awt.geom.AffineTransform");
+		op = CreateObject("java", "java.awt.image.AffineTransformOp");
+
+		flippedImage.init(img.getWidth(), img.getHeight(), img.getType());
+
+		if (direction eq "horizontal") {
+			at = at.getScaleInstance(-1, 1);
+			at.translate(-img.getWidth(), 0);
+		} else {
+			at = at.getScaleInstance(1,-1);
+			at.translate(0, -img.getHeight());
+		}
+		op.init(at, rh);
+		op.filter(img, flippedImage);
+
+		if (outputFile eq "")
+		{
+			retVal.img = flippedImage;
+			return retVal;
+		} else {
+			saveImage = writeImage(outputFile, flippedImage, jpegCompression);
+			if (saveImage.errorCode gt 0)
+			{
+				return saveImage;
+			} else {
+				return retVal;
+			}
+		}
+	</cfscript>
+</cffunction>
+
+
+
+<cffunction name="filterFastBlur" access="public" output="true" returntype="struct" hint="Internal method used for flipping and flopping images.">
+	<cfargument name="objImage" required="yes" type="Any">
+	<cfargument name="inputFile" required="yes" type="string">
+	<cfargument name="outputFile" required="yes" type="string">
+	<cfargument name="blurAmount" required="yes" type="numeric">
+	<cfargument name="iterations" required="yes" type="numeric">
+	<cfargument name="jpegCompression" required="no" type="numeric" default="#variables.defaultJpegCompression#">
+
+	<cfset var retVal = StructNew()>
+	<cfset var loadImage = StructNew()>
+	<cfset var saveImage = StructNew()>
+	<cfset var srcImage = "">
+	<cfset var destImage = "">
+	<cfset var rh = getRenderingHints()>
+
+	<cfset retVal.errorCode = 0>
+	<cfset retVal.errorMessage = "">
+
+	<cfif NOT variables.javanulls>
+		<cfset throw("Sorry, but the blur filter is not supported on this platform.")>
+	</cfif>
+	<cfif inputFile neq "">
+		<cfset loadImage = readImage(inputFile, "NO")>
+		<cfif loadImage.errorCode is 0>
+			<cfset srcImage = loadImage.img>
+		<cfelse>
+			<cfset retVal = throw(loadImage.errorMessage)>
+			<cfreturn retVal>
+		</cfif>
+	<cfelse>
+		<cfset srcImage = objImage>
+	</cfif>
+	<cfif srcImage.getType() eq 0>
+		<cfset srcImage = convertImageObject(srcImage,srcImage.TYPE_3BYTE_BGR)>
+	</cfif>
+
+	<cfscript>
+
+		// initialize the blur filter
+		variables.blurFilter.init(arguments.blurAmount);
+		// move the source image into the destination image
+		// so we can repeatedly blur it.
+		destImage = srcImage;
+
+		for (i=1; i lte iterations; i=i+1)
+		{
+			// do the blur i times
+			destImage = variables.blurFilter.filter(destImage);
+		}
+
+
+		if (outputFile eq "")
+		{
+			// return the image object
+			retVal.img = destImage;
+			return retVal;
+		} else {
+			// write the image object to the specified file.
+			saveImage = writeImage(outputFile, destImage, jpegCompression);
+			if (saveImage.errorCode gt 0)
+			{
+				return saveImage;
+			} else {
+				return retVal;
+			}
+		}
+	</cfscript>
+</cffunction>
+
+<cffunction name="filterSharpen" access="public" output="true" returntype="struct" hint="Internal method used for flipping and flopping images.">
+	<cfargument name="objImage" required="yes" type="Any">
+	<cfargument name="inputFile" required="yes" type="string">
+	<cfargument name="outputFile" required="yes" type="string">
+	<cfargument name="jpegCompression" required="no" type="numeric" default="#variables.defaultJpegCompression#">
+
+	<cfset var retVal = StructNew()>
+	<cfset var loadImage = StructNew()>
+	<cfset var saveImage = StructNew()>
+	<cfset var srcImage = "">
+	<cfset var destImage = "">
+	<cfset var rh = getRenderingHints()>
+
+	<cfset retVal.errorCode = 0>
+	<cfset retVal.errorMessage = "">
+
+	<cfif NOT variables.javanulls>
+		<cfset throw("Sorry, but the blur filter is not supported on this platform.")>
+	</cfif>
+
+	<cfif inputFile neq "">
+		<cfset loadImage = readImage(inputFile, "NO")>
+		<cfif loadImage.errorCode is 0>
+			<cfset srcImage = loadImage.img>
+		<cfelse>
+			<cfset retVal = throw(loadImage.errorMessage)>
+			<cfreturn retVal>
+		</cfif>
+	<cfelse>
+		<cfset srcImage = objImage>
+	</cfif>
+	<cfif srcImage.getType() eq 0>
+		<cfset srcImage = convertImageObject(srcImage,srcImage.TYPE_3BYTE_BGR)>
+	</cfif>
+
+	<cfscript>
+		// initialize the sharpen filter
+		variables.sharpenFilter.init();
+
+		destImage = variables.sharpenFilter.filter(srcImage);
+
+
+		if (outputFile eq "")
+		{
+			// return the image object
+			retVal.img = destImage;
+			return retVal;
+		} else {
+			// write the image object to the specified file.
+			saveImage = writeImage(outputFile, destImage, jpegCompression);
+			if (saveImage.errorCode gt 0)
+			{
+				return saveImage;
+			} else {
+				return retVal;
+			}
+		}
+	</cfscript>
+</cffunction>
+
+
+<cffunction name="filterPosterize" access="public" output="true" returntype="struct" hint="Internal method used for flipping and flopping images.">
+	<cfargument name="objImage" required="yes" type="Any">
+	<cfargument name="inputFile" required="yes" type="string">
+	<cfargument name="outputFile" required="yes" type="string">
+	<cfargument name="amount" required="yes" type="string">
+	<cfargument name="jpegCompression" required="no" type="numeric" default="#variables.defaultJpegCompression#">
+
+	<cfset var retVal = StructNew()>
+	<cfset var loadImage = StructNew()>
+	<cfset var saveImage = StructNew()>
+	<cfset var srcImage = "">
+	<cfset var destImage = "">
+	<cfset var rh = getRenderingHints()>
+
+	<cfset retVal.errorCode = 0>
+	<cfset retVal.errorMessage = "">
+
+	<cfif NOT variables.javanulls>
+		<cfset throw("Sorry, but the blur filter is not supported on this platform.")>
+	</cfif>
+
+	<cfif inputFile neq "">
+		<cfset loadImage = readImage(inputFile, "NO")>
+		<cfif loadImage.errorCode is 0>
+			<cfset srcImage = loadImage.img>
+		<cfelse>
+			<cfset retVal = throw(loadImage.errorMessage)>
+			<cfreturn retVal>
+		</cfif>
+	<cfelse>
+		<cfset srcImage = objImage>
+	</cfif>
+	<cfif srcImage.getType() eq 0>
+		<cfset srcImage = convertImageObject(srcImage,srcImage.TYPE_3BYTE_BGR)>
+	</cfif>
+	<cfif srcImage.getType() neq 5>
+		<cfset throw("ImageCFC cannot posterize this image type (#srcImage.getType()#)")>
+	</cfif>
+	<cfscript>
+		// initialize the posterize filter
+		variables.posterizeFilter.init(arguments.amount);
+
+		destImage = variables.posterizeFilter.filter(srcImage);
+
+
+		if (outputFile eq "")
+		{
+			// return the image object
+			retVal.img = destImage;
+			return retVal;
+		} else {
+			// write the image object to the specified file.
+			saveImage = writeImage(outputFile, destImage, jpegCompression);
+			if (saveImage.errorCode gt 0)
+			{
+				return saveImage;
+			} else {
+				return retVal;
+			}
+		}
+	</cfscript>
+</cffunction>
+
+
+<cffunction name="addText" access="public" output="true" returntype="struct" hint="Add text to an image.">
+	<cfargument name="objImage" required="yes" type="Any">
+	<cfargument name="inputFile" required="yes" type="string">
+	<cfargument name="outputFile" required="yes" type="string">
+	<cfargument name="x" required="yes" type="numeric">
+	<cfargument name="y" required="yes" type="numeric">
+	<cfargument name="fontDetails" required="yes" type="struct">
+	<cfargument name="content" required="yes" type="String">
+	<cfargument name="jpegCompression" required="no" type="numeric" default="#variables.defaultJpegCompression#">
+
+	<cfset var retVal = StructNew()>
+	<cfset var loadImage = StructNew()>
+	<cfset var img = "">
+	<cfset var saveImage = StructNew()>
+	<cfset var g2d = "">
+	<cfset var bgImage = "">
+	<cfset var fontImage = "">
+	<cfset var overlayImage = "">
+	<cfset var Color = "">
+	<cfset var font = "">
+	<cfset var font_stream = "">
+	<cfset var ac = "">
+	<cfset var rgb = "">
+
+	<cfset retVal.errorCode = 0>
+	<cfset retVal.errorMessage = "">
+
+	<cfparam name="arguments.fontDetails.size" default="12">
+	<cfparam name="arguments.fontDetails.color" default="black">
+	<cfparam name="arguments.fontDetails.fontFile" default="">
+	<cfparam name="arguments.fontDetails.fontName" default="serif">
+
+	<cfif arguments.fontDetails.fontFile neq "" and not fileExists(arguments.fontDetails.fontFile)>
+		<cfset retVal = throw("The specified font file #Chr(34)##arguments.inputFile##Chr(34)# could not be found on the server.")>
+		<cfreturn retVal>
+	</cfif>
+	<cftry>
+		<cfset rgb = getRGB(arguments.fontDetails.color)>
+		<cfcatch type="any">
+			<cfset retVal = throw("Invalid color #Chr(34)##arguments.fontDetails.color##Chr(34)#")>
+			<cfreturn retVal>
+		</cfcatch>
+	</cftry>
+	<cfif inputFile neq "">
+		<cfset loadImage = readImage(inputFile, "NO")>
+		<cfif loadImage.errorCode is 0>
+			<cfset img = loadImage.img>
+		<cfelse>
+			<cfset retVal = throw(loadImage.errorMessage)>
+			<cfreturn retVal>
+		</cfif>
+	<cfelse>
+		<cfset img = objImage>
+	</cfif>
+	<cfif img.getType() eq 0>
+		<cfset img = convertImageObject(img,img.TYPE_3BYTE_BGR)>
+	</cfif>
+	<cfscript>
+		// load objects
+		bgImage = CreateObject("java", "java.awt.image.BufferedImage");
+		fontImage = CreateObject("java", "java.awt.image.BufferedImage");
+		overlayImage = CreateObject("java", "java.awt.image.BufferedImage");
+		Color = CreateObject("java","java.awt.Color");
+		font = createObject("java","java.awt.Font");
+		font_stream = createObject("java","java.io.FileInputStream");
+		ac = CreateObject("Java", "java.awt.AlphaComposite");
+
+		// set up basic needs
+		fontColor = Color.init(javacast("int", rgb.red), javacast("int", rgb.green), javacast("int", rgb.blue));
+
+		if (fontDetails.fontFile neq "")
+		{
+			font_stream.init(arguments.fontDetails.fontFile);
+			font = font.createFont(font.TRUETYPE_FONT, font_stream);
+			font = font.deriveFont(javacast("float",arguments.fontDetails.size));
+		} else {
+			font.init(fontDetails.fontName, evaluate(fontDetails.style), fontDetails.size);
+		}
+		// get font metrics using a 1x1 bufferedImage
+		fontImage.init(1,1,img.getType());
+		g2 = fontImage.createGraphics();
+		g2.setRenderingHints(getRenderingHints());
+		fc = g2.getFontRenderContext();
+		bounds = font.getStringBounds(content,fc);
+
+		g2 = img.createGraphics();
+		g2.setRenderingHints(getRenderingHints());
+		g2.setFont(font);
+		g2.setColor(fontColor);
+		// in case you want to change the alpha
+		// g2.setComposite(ac.getInstance(ac.SRC_OVER, 0.50));
+
+		// the location (arguments.fontDetails.size+y) doesn't really work
+		// the way I want it to.
+		g2.drawString(content,javacast("int",x),javacast("int",arguments.fontDetails.size+y));
+
+		if (outputFile eq "")
+		{
+			retVal.img = img;
+			return retVal;
+		} else {
+			saveImage = writeImage(outputFile, img, jpegCompression);
+			if (saveImage.errorCode gt 0)
+			{
+				return saveImage;
+			} else {
+				return retVal;
+			}
+		}
+	</cfscript>
+</cffunction>
+
+<cffunction name="watermark" access="public" output="false">
+	<cfargument name="objImage1" required="yes" type="Any">
+	<cfargument name="objImage2" required="yes" type="Any">
+	<cfargument name="inputFile1" required="yes" type="string">
+	<cfargument name="inputFile2" required="yes" type="string">
+	<cfargument name="alpha" required="yes" type="numeric">
+	<cfargument name="placeAtX" required="yes" type="numeric">
+	<cfargument name="placeAtY" required="yes" type="numeric">
+	<cfargument name="outputFile" required="yes" type="string">
+	<cfargument name="jpegCompression" required="no" type="numeric" default="#variables.defaultJpegCompression#">
+
+	<cfset var retVal = StructNew()>
+	<cfset var loadImage = StructNew()>
+	<cfset var originalImage = "">
+	<cfset var wmImage = "">
+	<cfset var saveImage = StructNew()>
+	<cfset var ac = "">
+	<cfset var rh = getRenderingHints()>
+
+	<cfset retVal.errorCode = 0>
+	<cfset retVal.errorMessage = "">
+
+	<cfif inputFile1 neq "">
+		<cfset loadImage = readImage(inputFile1, "NO")>
+		<cfif loadImage.errorCode is 0>
+			<cfset originalImage = loadImage.img>
+		<cfelse>
+			<cfset retVal = throw(loadImage.errorMessage)>
+			<cfreturn retVal>
+		</cfif>
+	<cfelse>
+		<cfset originalImage = objImage1>
+	</cfif>
+	<cfif originalImage.getType() eq 0>
+		<cfset originalImage = convertImageObject(originalImage,originalImage.TYPE_3BYTE_BGR)>
+	</cfif>
+
+	<cfif inputFile2 neq "">
+		<cfset loadImage = readImage(inputFile2, "NO")>
+		<cfif loadImage.errorCode is 0>
+			<cfset wmImage = loadImage.img>
+		<cfelse>
+			<cfset retVal = throw(loadImage.errorMessage)>
+			<cfreturn retVal>
+		</cfif>
+	<cfelse>
+		<cfset wmImage = objImage2>
+	</cfif>
+	<cfif wmImage.getType() eq 0>
+		<cfset wmImage = convertImageObject(wmImage,wmImage.TYPE_3BYTE_BGR)>
+	</cfif>
+
+
+	<cfscript>
+		at = CreateObject("java", "java.awt.geom.AffineTransform");
+		op = CreateObject("java", "java.awt.image.AffineTransformOp");
+		ac = CreateObject("Java", "java.awt.AlphaComposite");
+		gfx = originalImage.getGraphics();
+		gfx.setComposite(ac.getInstance(ac.SRC_OVER, alpha));
+
+		at.init();
+		// op.init(at,op.TYPE_BILINEAR);
+		op.init(at, rh);
+
+		gfx.drawImage(wmImage, op, javaCast("int",arguments.placeAtX), javacast("int", arguments.placeAtY));
+
+		gfx.dispose();
+
+		if (outputFile eq "")
+		{
+			retVal.img = originalImage;
+			return retVal;
+		} else {
+			saveImage = writeImage(outputFile, originalImage, jpegCompression);
+			if (saveImage.errorCode gt 0)
+			{
+				return saveImage;
+			} else {
+				return retVal;
+			}
+		}
+	</cfscript>
+</cffunction>
+
+<cffunction name="isURL" access="private" output="false" returnType="boolean">
+	<cfargument name="stringToCheck" required="yes" type="string">
+	<cfif REFindNoCase("^(((https?:)\/\/))[-[:alnum:]\?%,\.\/&##!@:=\+~_]+[A-Za-z0-9\/]$",stringToCheck) NEQ 0>
+		<cfreturn true>
+	<cfelse>
+		<cfreturn false>
+	</cfif>
+</cffunction>
+
+<!--- function returns RGB values in a structure for hex or the 16
+	HTML named colors --->
+<cffunction name="getRGB" access="private" output="true" returnType="struct">
+	<cfargument name="color" type="string" required="yes">
+
+	<cfset var retVal = structNew()>
+	<cfset var cnt = 0>
+	<cfset var namedColors = "aqua,black,blue,fuchsia,gray,green,lime,maroon,navy,olive,purple,red,silver,teal,white,yellow">
+	<cfset var namedColorsHexValues = "00ffff,000000,0000ff,ff00ff,808080,008000,00ff00,800000,000080,808080,ff0000,c0c0c0,008080,ffffff,ffff00">
+
+	<cfset retVal.red = 0>
+	<cfset retVal.green = 0>
+	<cfset retVal.blue = 0>
+
+	<cfset arguments.color = trim(arguments.color)>
+	<cfif len(arguments.color) is 0>
+		<cfreturn retVal>
+	<cfelseif listFind(namedColors, arguments.color) gt 0>
+		<cfset arguments.color = listGetAt(namedColorsHexValues, listFind(namedColors, arguments.color))>
+	</cfif>
+	<cfif left(arguments.color,1) eq "##">
+		<cfset arguments.color = right(arguments.color,len(arguments.color)-1)>
+	</cfif>
+	<cfif len(arguments.color) neq 6>
+		<cfreturn retVal>
+	<cfelse>
+		<cftry>
+			<cfset retVal.red = InputBaseN(mid(arguments.color,1,2),16)>
+			<cfset retVal.green = InputBaseN(mid(arguments.color,3,2),16)>
+			<cfset retVal.blue = InputBaseN(mid(arguments.color,5,2),16)>
+			<cfcatch type="any">
+				<cfset retVal.red = 0>
+				<cfset retVal.green = 0>
+				<cfset retVal.blue = 0>
+				<cfreturn retVal>
+			</cfcatch>
+		</cftry>
+	</cfif>
+	<cfreturn retVal>
+</cffunction>
+
+<cffunction name="throw" access="private" output="false" returnType="struct">
+	<cfargument name="detail" type="string" required="yes">
+	<cfargument name="force" type="boolean" required="no" default="no">
+
+	<cfset var retVal = StructNew()>
+
+	<cfif variables.throwOnError or arguments.force>
+		<cfthrow detail="#arguments.detail#" message="#arguments.detail#">
+	<cfelse>
+		<cfset retVal.errorCode = 1>
+		<cfset retVal.errorMessage = arguments.detail>
+		<cfreturn retVal>
+	</cfif>
+</cffunction>
+
+<cffunction name="debugDump" access="private">
+	<cfdump var="#arguments#"><cfabort>
+</cffunction>
+
+<cffunction name="convertImageObject" access="private" output="false" returnType="any">
+	<cfargument name="bImage" type="Any" required="yes">
+	<cfargument name="type" type="numeric" required="yes">
+
+	<cfscript>
+	// convert the image to a specified BufferedImage type and return it
+
+	var width = bImage.getWidth();
+	var height = bImage.getHeight();
+	var newImage = createObject("java","java.awt.image.BufferedImage").init(javacast("int",width), javacast("int",height), javacast("int",type));
+	// int[] rgbArray = new int[width*height];
+	var rgbArray = variables.arrObj.newInstance(variables.intClass, javacast("int",width*height));
+
+	bImage.getRGB(
+		javacast("int",0),
+		javacast("int",0),
+		javacast("int",width),
+		javacast("int",height),
+		rgbArray,
+		javacast("int",0),
+		javacast("int",width)
+		);
+	newImage.setRGB(
+		javacast("int",0),
+		javacast("int",0),
+		javacast("int",width),
+		javacast("int",height),
+		rgbArray,
+		javacast("int",0),
+		javacast("int",width)
+		);
+	return newImage;
+	</cfscript>
+
+</cffunction>
+
+</cfcomponent>

Added: announcement/trunk/src/main/webapp/fckeditor/editor/filemanager/connectors/cfm/upload.cfm
===================================================================
--- announcement/trunk/src/main/webapp/fckeditor/editor/filemanager/connectors/cfm/upload.cfm	                        (rev 0)
+++ announcement/trunk/src/main/webapp/fckeditor/editor/filemanager/connectors/cfm/upload.cfm	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,31 @@
+<cfsetting enablecfoutputonly="Yes">
+<!---
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2008 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * This is the "File Uploader" for ColdFusion (all versions).
+ *
+--->
+
+<cfset REQUEST.CFVersion = Left( SERVER.COLDFUSION.PRODUCTVERSION, Find( ",", SERVER.COLDFUSION.PRODUCTVERSION ) - 1 )>
+<cfif REQUEST.CFVersion lte 5>
+	<cfinclude template="cf5_upload.cfm">
+<cfelse>
+	<cfinclude template="cf_upload.cfm">
+</cfif>

Added: announcement/trunk/src/main/webapp/fckeditor/editor/filemanager/connectors/lasso/config.lasso
===================================================================
--- announcement/trunk/src/main/webapp/fckeditor/editor/filemanager/connectors/lasso/config.lasso	                        (rev 0)
+++ announcement/trunk/src/main/webapp/fckeditor/editor/filemanager/connectors/lasso/config.lasso	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,65 @@
+[//lasso
+/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2008 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * Configuration file for the File Manager Connector for Lasso.
+ */
+
+    /*.....................................................................
+    The connector uses the file tags, which require authentication. Enter a
+    valid username and password from Lasso admin for a group with file tags
+    permissions for uploads and the path you define in UserFilesPath below.
+    */
+
+	var('connection') = array(
+		-username='xxxxxxxx',
+		-password='xxxxxxxx'
+	);
+
+
+    /*.....................................................................
+    Set the base path for files that users can upload and browse (relative
+    to server root).
+
+    Set which file extensions are allowed and/or denied for each file type.
+    */
+	var('config') = map(
+		'Enabled' = false,
+		'UserFilesPath' = '/userfiles/',
+		'Subdirectories' = map(
+			'File' = 'File/',
+			'Image' = 'Image/',
+			'Flash' = 'Flash/',
+			'Media' = 'Media/'
+		),
+		'AllowedExtensions' = map(
+			'File' = array('7z','aiff','asf','avi','bmp','csv','doc','fla','flv','gif','gz','gzip','jpeg','jpg','mid','mov','mp3','mp4','mpc','mpeg','mpg','ods','odt','pdf','png','ppt','pxd','qt','ram','rar','rm','rmi','rmvb','rtf','sdc','sitd','swf','sxc','sxw','tar','tgz','tif','tiff','txt','vsd','wav','wma','wmv','xls','xml','zip'),
+			'Image' = array('bmp','gif','jpeg','jpg','png'),
+			'Flash' = array('swf','flv'),
+			'Media' = array('aiff','asf','avi','bmp','fla','flv','gif','jpeg','jpg','mid','mov','mp3','mp4','mpc','mpeg','mpg','png','qt','ram','rm','rmi','rmvb','swf','tif','tiff','wav','wma','wmv')
+		),
+		'DeniedExtensions' = map(
+			'File' = array(),
+			'Image' = array(),
+			'Flash' = array(),
+			'Media' = array()
+		)
+	);
+]

Added: announcement/trunk/src/main/webapp/fckeditor/editor/filemanager/connectors/lasso/connector.lasso
===================================================================
--- announcement/trunk/src/main/webapp/fckeditor/editor/filemanager/connectors/lasso/connector.lasso	                        (rev 0)
+++ announcement/trunk/src/main/webapp/fckeditor/editor/filemanager/connectors/lasso/connector.lasso	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,322 @@
+[//lasso
+/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2008 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * This is the File Manager Connector for Lasso.
+ */
+
+    /*.....................................................................
+    Include global configuration. See config.lasso for details.
+    */
+	include('config.lasso');
+
+
+    /*.....................................................................
+    Translate current date/time to GMT for custom header.
+    */
+	var('headerDate') = date_localtogmt(date)->format('%a, %d %b %Y %T GMT');
+
+
+    /*.....................................................................
+    Convert query string parameters to variables and initialize output.
+    */
+	var(
+		'Command'		=	action_param('Command'),
+		'Type'			=	action_param('Type'),
+		'CurrentFolder'	=	action_param('CurrentFolder'),
+		'ServerPath'	=	action_param('ServerPath'),
+		'NewFolderName'	=	action_param('NewFolderName'),
+		'NewFile'		=	null,
+		'NewFileName'	=	string,
+		'OrigFilePath'	=	string,
+		'NewFilePath'	=	string,
+		'commandData'	=	string,
+		'folders'		=	'\t<Folders>\n',
+		'files'			=	'\t<Files>\n',
+		'errorNumber'	=	integer,
+		'responseType'	=	'xml',
+		'uploadResult'	=	'0'
+	);
+
+	/*.....................................................................
+	Custom tag sets the HTML response.
+	*/
+
+	define_tag(
+		'htmlreply',
+		-namespace='fck_',
+		-priority='replace',
+		-required='uploadResult',
+		-optional='NewFilePath',
+		-type='string',
+		-description='Sets the HTML response for the FCKEditor File Upload feature.'
+	);
+		$__html_reply__ = '\
+<script type="text/javascript">
+(function()
+{
+	var d = document.domain ;
+
+	while ( true )
+	{
+		// Test if we can access a parent property.
+		try
+		{
+			var test = window.top.opener.document.domain ;
+			break ;
+		}
+		catch( e ) {}
+
+		// Remove a domain part: www.mytest.example.com => mytest.example.com => example.com ...
+		d = d.replace( /.*?(?:\\.|$)/, "" ) ;
+
+		if ( d.length == 0 )
+			break ;		// It was not able to detect the domain.
+
+		try
+		{
+			document.domain = d ;
+		}
+		catch (e)
+		{
+			break ;
+		}
+	}
+})() ;
+';
+			if($uploadResult == '0' || $uploadResult == '201');
+			$__html_reply__ = $__html_reply__ + '\
+	window.parent.OnUploadCompleted(' + $uploadResult + ',\'' + $NewFilePath + '\',\'' + $NewFilePath->split('/')->last + '\');
+</script>
+			';
+			else;
+			$__html_reply__ = $__html_reply__ + '\
+	window.parent.OnUploadCompleted(' + $uploadResult + ');
+</script>
+			';
+			/if;
+	/define_tag;
+
+
+    /*.....................................................................
+    Calculate the path to the current folder.
+    */
+	$ServerPath == '' ? $ServerPath = $config->find('UserFilesPath');
+
+	var('currentFolderURL' = $ServerPath
+		+ $config->find('Subdirectories')->find(action_param('Type'))
+		+ $CurrentFolder
+	);
+
+	if($CurrentFolder->(Find: '..') || $CurrentFolder->(Find: '\\'));
+		if($Command == 'FileUpload');
+			$responseType = 'html';
+			$uploadResult = '102';
+			fck_htmlreply(
+				-uploadResult=$uploadResult
+			);
+		else;
+			$errorNumber = 102;
+			$commandData += '<Error number="' + $errorNumber + '" />\n';
+		/if;
+	else;
+
+    /*.....................................................................
+    Build the appropriate response per the 'Command' parameter. Wrap the
+    entire process in an inline for file tag permissions.
+    */
+	inline($connection);
+		select($Command);
+            /*.............................................................
+            List all subdirectories in the 'Current Folder' directory.
+            */
+			case('GetFolders');
+				$commandData += '\t<Folders>\n';
+
+				iterate(file_listdirectory($currentFolderURL), local('this'));
+					#this->endswith('/') ? $commandData += '\t\t<Folder name="' + #this->removetrailing('/')& + '" />\n';
+				/iterate;
+
+				$commandData += '\t</Folders>\n';
+
+
+            /*.............................................................
+            List both files and folders in the 'Current Folder' directory.
+            Include the file sizes in kilobytes.
+            */
+			case('GetFoldersAndFiles');
+				iterate(file_listdirectory($currentFolderURL), local('this'));
+					if(#this->endswith('/'));
+						$folders += '\t\t<Folder name="' + #this->removetrailing('/')& + '" />\n';
+					else;
+						local('size') = file_getsize($currentFolderURL + #this) / 1024;
+						$files += '\t\t<File name="' + #this + '" size="' + #size + '" />\n';
+					/if;
+				/iterate;
+
+				$folders += '\t</Folders>\n';
+				$files += '\t</Files>\n';
+
+				$commandData += $folders + $files;
+
+
+            /*.............................................................
+            Create a directory 'NewFolderName' within the 'Current Folder.'
+            */
+			case('CreateFolder');
+				$NewFolderName = (String_ReplaceRegExp: $NewFolderName, -find='\\.|\\\\|\\/|\\||\\:|\\?|\\*|"|<|>', -replace='_');
+				var('newFolder' = $currentFolderURL + $NewFolderName + '/');
+				file_create($newFolder);
+
+
+                /*.........................................................
+                Map Lasso's file error codes to FCKEditor's error codes.
+                */
+				select(file_currenterror( -errorcode));
+					case(0);
+						$errorNumber = 0;
+					case( -9983);
+						$errorNumber = 101;
+					case( -9976);
+						$errorNumber = 102;
+					case( -9977);
+						$errorNumber = 102;
+					case( -9961);
+						$errorNumber = 103;
+					case;
+						$errorNumber = 110;
+				/select;
+
+				$commandData += '<Error number="' + $errorNumber + '" />\n';
+
+
+            /*.............................................................
+            Process an uploaded file.
+            */
+			case('FileUpload');
+                /*.........................................................
+                This is the only command that returns an HTML response.
+                */
+				$responseType = 'html';
+
+
+                /*.........................................................
+                Was a file actually uploaded?
+                */
+                if(file_uploads->size);
+                	$NewFile = file_uploads->get(1);
+                else;
+                	$uploadResult = '202';
+                /if;
+
+				if($uploadResult == '0');
+                    /*.....................................................
+                    Split the file's extension from the filename in order
+                    to follow the API's naming convention for duplicate
+                    files. (Test.txt, Test(1).txt, Test(2).txt, etc.)
+                    */
+					$NewFileName = $NewFile->find('OrigName');
+					$NewFileName = (String_ReplaceRegExp: $NewFileName, -find='\\\\|\\/|\\||\\:|\\?|\\*|"|<|>', -replace='_');
+					$OrigFilePath = $currentFolderURL + $NewFileName;
+					$NewFilePath = $OrigFilePath;
+					local('fileExtension') = '.' + $NewFile->find('OrigExtension');
+					#fileExtension = (String_ReplaceRegExp: #fileExtension, -find='\\\\|\\/|\\||\\:|\\?|\\*|"|<|>', -replace='_');
+					local('shortFileName') = $NewFileName->removetrailing(#fileExtension)&;
+
+
+                    /*.....................................................
+                    Make sure the file extension is allowed.
+                    */
+					if($config->find('DeniedExtensions')->find($Type) >> $NewFile->find('OrigExtension'));
+						$uploadResult = '202';
+					else;
+                        /*.................................................
+                        Rename the target path until it is unique.
+                        */
+						while(file_exists($NewFilePath));
+							$NewFilePath = $currentFolderURL + #shortFileName + '(' + loop_count + ')' + #fileExtension;
+						/while;
+
+
+                        /*.................................................
+                        Copy the uploaded file to its final location.
+                        */
+						file_copy($NewFile->find('path'), $NewFilePath);
+
+
+                        /*.................................................
+                        Set the error code for the response. Note whether
+                        the file had to be renamed.
+                        */
+						select(file_currenterror( -errorcode));
+							case(0);
+								$OrigFilePath != $NewFilePath ? $uploadResult = 201;
+							case;
+								$uploadResult = file_currenterror( -errorcode);
+						/select;
+					/if;
+				/if;
+				fck_htmlreply(
+					-uploadResult=$uploadResult,
+					-NewFilePath=$NewFilePath
+				);
+		/select;
+	/inline;
+	/if;
+
+    /*.....................................................................
+    Send a custom header for xml responses.
+    */
+	if($responseType == 'xml');
+		header;
+]
+HTTP/1.0 200 OK
+Date: [$headerDate]
+Server: Lasso Professional [lasso_version( -lassoversion)]
+Expires: Mon, 26 Jul 1997 05:00:00 GMT
+Last-Modified: [$headerDate]
+Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0
+Pragma: no-cache
+Keep-Alive: timeout=15, max=98
+Connection: Keep-Alive
+Content-Type: text/xml; charset=utf-8
+[//lasso
+/header;
+
+		/*
+			Set the content type encoding for Lasso.
+		*/
+		content_type('text/xml; charset=utf-8');
+
+		/*
+			Wrap the response as XML and output.
+		*/
+		$__html_reply__ = '\
+<?xml version="1.0" encoding="utf-8" ?>
+<Connector command="' + $Command + '" resourceType="' + $Type + '">';
+
+		if($errorNumber != '102');
+			$__html_reply__ += '<CurrentFolder path="' + $CurrentFolder + '" url="' + $currentFolderURL + '" />';
+		/if;
+
+		$__html_reply__ += $commandData + '
+</Connector>';
+	/if;
+]

Added: announcement/trunk/src/main/webapp/fckeditor/editor/filemanager/connectors/lasso/upload.lasso
===================================================================
--- announcement/trunk/src/main/webapp/fckeditor/editor/filemanager/connectors/lasso/upload.lasso	                        (rev 0)
+++ announcement/trunk/src/main/webapp/fckeditor/editor/filemanager/connectors/lasso/upload.lasso	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,168 @@
+[//lasso
+/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2008 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * This is the "File Uploader" for Lasso.
+ */
+
+    /*.....................................................................
+    Include global configuration. See config.lasso for details.
+    */
+	include('config.lasso');
+
+
+    /*.....................................................................
+    Convert query string parameters to variables and initialize output.
+    */
+	var(
+		'Type'			=	action_param('Type'),
+		'CurrentFolder'	=	action_param('CurrentFolder'),
+		'ServerPath'	=	action_param('ServerPath'),
+		'NewFile'		=	null,
+		'NewFileName'	=	string,
+		'OrigFilePath'	=	string,
+		'NewFilePath'	=	string,
+		'errorNumber'	=	0,
+		'customMsg'		=	''
+	);
+
+	$Type == '' ? $Type = 'File';
+
+
+    /*.....................................................................
+    Calculate the path to the current folder.
+    */
+	$ServerPath == '' ? $ServerPath = $config->find('UserFilesPath');
+
+	var('currentFolderURL' = $ServerPath
+		+ $config->find('Subdirectories')->find(action_param('Type'))
+		+ action_param('CurrentFolder')
+	);
+
+	/*.....................................................................
+	Custom tag sets the HTML response.
+	*/
+
+	define_tag(
+		'sendresults',
+		-namespace='fck_',
+		-priority='replace',
+		-required='errorNumber',
+		-type='integer',
+		-optional='fileUrl',
+		-type='string',
+		-optional='fileName',
+		-type='string',
+		-optional='customMsg',
+		-type='string',
+		-description='Sets the HTML response for the FCKEditor Quick Upload feature.'
+	);
+
+		$__html_reply__ = '<script type="text/javascript">';
+
+		// Minified version of the document.domain automatic fix script (#1919).
+		// The original script can be found at _dev/domain_fix_template.js
+		// Note: in Lasso replace \ with \\
+		$__html_reply__ = $__html_reply__ + "(function(){var d=document.domain;while (true){try{var A=window.parent.document.domain;break;}catch(e) {};d=d.replace(/.*?(?:\\.|$)/,'');if (d.length==0) break;try{document.domain=d;}catch (e){break;}}})();";
+
+		$__html_reply__ = $__html_reply__ + '\
+	window.parent.OnUploadCompleted(' + #errorNumber + ',"'
+		+ string_replace(#fileUrl, -find='"', -replace='\\"') + '","'
+		+ string_replace(#fileName, -find='"', -replace='\\"') + '","'
+		+ string_replace(#customMsg, -find='"', -replace='\\"') + '");
+</script>
+		';
+	/define_tag;
+
+	if($CurrentFolder->(Find: '..') || $CurrentFolder->(Find: '\\'));
+		$errorNumber = 102;
+	/if;
+
+	if($config->find('Enabled'));
+		/*.................................................................
+		Process an uploaded file.
+		*/
+		inline($connection);
+			/*.............................................................
+			Was a file actually uploaded?
+			*/
+			if($errorNumber != '102');
+				file_uploads->size ? $NewFile = file_uploads->get(1) | $errorNumber = 202;
+			/if;
+
+			if($errorNumber == 0);
+				/*.........................................................
+				Split the file's extension from the filename in order
+				to follow the API's naming convention for duplicate
+				files. (Test.txt, Test(1).txt, Test(2).txt, etc.)
+				*/
+				$NewFileName = $NewFile->find('OrigName');
+				$OrigFilePath = $currentFolderURL + $NewFileName;
+				$NewFilePath = $OrigFilePath;
+				local('fileExtension') = '.' + $NewFile->find('OrigExtension');
+				local('shortFileName') = $NewFileName->removetrailing(#fileExtension)&;
+
+
+				/*.........................................................
+				Make sure the file extension is allowed.
+				*/
+
+				if($config->find('DeniedExtensions')->find($Type) >> $NewFile->find('OrigExtension'));
+					$errorNumber = 202;
+				else;
+					/*.....................................................
+					Rename the target path until it is unique.
+					*/
+					while(file_exists($NewFilePath));
+						$NewFileName = #shortFileName + '(' + loop_count + ')' + #fileExtension;
+						$NewFilePath = $currentFolderURL + $NewFileName;
+					/while;
+
+
+					/*.....................................................
+					Copy the uploaded file to its final location.
+					*/
+					file_copy($NewFile->find('path'), $NewFilePath);
+
+
+					/*.....................................................
+					Set the error code for the response.
+					*/
+					select(file_currenterror( -errorcode));
+						case(0);
+							$OrigFilePath != $NewFilePath ? $errorNumber = 201;
+						case;
+							$errorNumber = 202;
+					/select;
+				/if;
+			/if;
+		/inline;
+	else;
+		$errorNumber = 1;
+		$customMsg = 'This file uploader is disabled. Please check the "editor/filemanager/upload/lasso/config.lasso" file.';
+	/if;
+
+	fck_sendresults(
+		-errorNumber=$errorNumber,
+		-fileUrl=$NewFilePath,
+		-fileName=$NewFileName,
+		-customMsg=$customMsg
+	);
+]

Added: announcement/trunk/src/main/webapp/fckeditor/editor/filemanager/connectors/perl/basexml.pl
===================================================================
--- announcement/trunk/src/main/webapp/fckeditor/editor/filemanager/connectors/perl/basexml.pl	                        (rev 0)
+++ announcement/trunk/src/main/webapp/fckeditor/editor/filemanager/connectors/perl/basexml.pl	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,63 @@
+#####
+#  FCKeditor - The text editor for Internet - http://www.fckeditor.net
+#  Copyright (C) 2003-2008 Frederico Caldeira Knabben
+#
+#  == BEGIN LICENSE ==
+#
+#  Licensed under the terms of any of the following licenses at your
+#  choice:
+#
+#   - GNU General Public License Version 2 or later (the "GPL")
+#     http://www.gnu.org/licenses/gpl.html
+#
+#   - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+#     http://www.gnu.org/licenses/lgpl.html
+#
+#   - Mozilla Public License Version 1.1 or later (the "MPL")
+#     http://www.mozilla.org/MPL/MPL-1.1.html
+#
+#  == END LICENSE ==
+#
+#  This is the File Manager Connector for Perl.
+#####
+
+sub CreateXmlHeader
+{
+	local($command,$resourceType,$currentFolder) = @_;
+
+	# Create the XML document header.
+	print '<?xml version="1.0" encoding="utf-8" ?>';
+
+	# Create the main "Connector" node.
+	print '<Connector command="' . $command . '" resourceType="' . $resourceType . '">';
+
+	# Add the current folder node.
+	print '<CurrentFolder path="' . ConvertToXmlAttribute($currentFolder) . '" url="' . ConvertToXmlAttribute(GetUrlFromPath($resourceType,$currentFolder)) . '" />';
+}
+
+sub CreateXmlFooter
+{
+	print '</Connector>';
+}
+
+sub SendError
+{
+	local( $number, $text ) = @_;
+
+	print << "_HTML_HEAD_";
+Content-Type:text/xml; charset=utf-8
+Pragma: no-cache
+Cache-Control: no-cache
+Expires: Thu, 01 Dec 1994 16:00:00 GMT
+
+_HTML_HEAD_
+
+	# Create the XML document header
+	print '<?xml version="1.0" encoding="utf-8" ?>' ;
+
+	print '<Connector><Error number="' . $number . '" text="' . &specialchar_cnv( $text ) . '" /></Connector>' ;
+
+	exit ;
+}
+
+1;


Property changes on: announcement/trunk/src/main/webapp/fckeditor/editor/filemanager/connectors/perl/basexml.pl
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/webapp/fckeditor/editor/filemanager/connectors/perl/commands.pl
===================================================================
--- announcement/trunk/src/main/webapp/fckeditor/editor/filemanager/connectors/perl/commands.pl	                        (rev 0)
+++ announcement/trunk/src/main/webapp/fckeditor/editor/filemanager/connectors/perl/commands.pl	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,187 @@
+#####
+#  FCKeditor - The text editor for Internet - http://www.fckeditor.net
+#  Copyright (C) 2003-2008 Frederico Caldeira Knabben
+#
+#  == BEGIN LICENSE ==
+#
+#  Licensed under the terms of any of the following licenses at your
+#  choice:
+#
+#   - GNU General Public License Version 2 or later (the "GPL")
+#     http://www.gnu.org/licenses/gpl.html
+#
+#   - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+#     http://www.gnu.org/licenses/lgpl.html
+#
+#   - Mozilla Public License Version 1.1 or later (the "MPL")
+#     http://www.mozilla.org/MPL/MPL-1.1.html
+#
+#  == END LICENSE ==
+#
+#  This is the File Manager Connector for Perl.
+#####
+
+sub GetFolders
+{
+
+	local($resourceType, $currentFolder) = @_;
+
+	# Map the virtual path to the local server path.
+	$sServerDir = &ServerMapFolder($resourceType, $currentFolder);
+	print "<Folders>";			# Open the "Folders" node.
+
+	opendir(DIR,"$sServerDir");
+	@files = grep(!/^\.\.?$/,readdir(DIR));
+	closedir(DIR);
+
+	foreach $sFile (@files) {
+		if($sFile != '.' && $sFile != '..' && (-d "$sServerDir$sFile")) {
+			$cnv_filename = &ConvertToXmlAttribute($sFile);
+			print '<Folder name="' . $cnv_filename . '" />';
+		}
+	}
+	print "</Folders>";			# Close the "Folders" node.
+}
+
+sub GetFoldersAndFiles
+{
+
+	local($resourceType, $currentFolder) = @_;
+	# Map the virtual path to the local server path.
+	$sServerDir = &ServerMapFolder($resourceType,$currentFolder);
+
+	# Initialize the output buffers for "Folders" and "Files".
+	$sFolders	= '<Folders>';
+	$sFiles		= '<Files>';
+
+	opendir(DIR,"$sServerDir");
+	@files = grep(!/^\.\.?$/,readdir(DIR));
+	closedir(DIR);
+
+	foreach $sFile (@files) {
+		if($sFile ne '.' && $sFile ne '..') {
+			if(-d "$sServerDir$sFile") {
+				$cnv_filename = &ConvertToXmlAttribute($sFile);
+				$sFolders .= '<Folder name="' . $cnv_filename . '" />' ;
+			} else {
+				($iFileSize,$refdate,$filedate,$fileperm) = (stat("$sServerDir$sFile"))[7,8,9,2];
+				if($iFileSize > 0) {
+					$iFileSize = int($iFileSize / 1024);
+					if($iFileSize < 1) {
+						$iFileSize = 1;
+					}
+				}
+				$cnv_filename = &ConvertToXmlAttribute($sFile);
+				$sFiles	.= '<File name="' . $cnv_filename . '" size="' . $iFileSize . '" />' ;
+			}
+		}
+	}
+	print $sFolders ;
+	print '</Folders>';			# Close the "Folders" node.
+	print $sFiles ;
+	print '</Files>';			# Close the "Files" node.
+}
+
+sub CreateFolder
+{
+
+	local($resourceType, $currentFolder) = @_;
+	$sErrorNumber	= '0' ;
+	$sErrorMsg		= '' ;
+
+	if($FORM{'NewFolderName'} ne "") {
+		$sNewFolderName = $FORM{'NewFolderName'};
+		$sNewFolderName =~ s/\.|\\|\/|\||\:|\?|\*|\"|<|>|[[:cntrl:]]/_/g;
+		# Map the virtual path to the local server path of the current folder.
+		$sServerDir = &ServerMapFolder($resourceType, $currentFolder);
+		if(-w $sServerDir) {
+			$sServerDir .= $sNewFolderName;
+			$sErrorMsg = &CreateServerFolder($sServerDir);
+			if($sErrorMsg == 0) {
+				$sErrorNumber = '0';
+			} elsif($sErrorMsg eq 'Invalid argument' || $sErrorMsg eq 'No such file or directory') {
+				$sErrorNumber = '102';		#// Path too long.
+			} else {
+				$sErrorNumber = '110';
+			}
+		} else {
+			$sErrorNumber = '103';
+		}
+	} else {
+		$sErrorNumber = '102' ;
+	}
+	# Create the "Error" node.
+	$cnv_errmsg = &ConvertToXmlAttribute($sErrorMsg);
+	print '<Error number="' . $sErrorNumber . '" originalDescription="' . $cnv_errmsg . '" />';
+}
+
+sub FileUpload
+{
+eval("use File::Copy;");
+
+	local($resourceType, $currentFolder) = @_;
+
+	$sErrorNumber = '0' ;
+	$sFileName = '' ;
+	if($new_fname) {
+		# Map the virtual path to the local server path.
+		$sServerDir = &ServerMapFolder($resourceType,$currentFolder);
+
+		# Get the uploaded file name.
+		$sFileName = $new_fname;
+		$sFileName =~ s/\\|\/|\||\:|\?|\*|\"|<|>|[[:cntrl:]]/_/g;
+		$sOriginalFileName = $sFileName;
+
+		$iCounter = 0;
+		while(1) {
+			$sFilePath = $sServerDir . $sFileName;
+			if(-e $sFilePath) {
+				$iCounter++ ;
+				($path,$BaseName,$ext) = &RemoveExtension($sOriginalFileName);
+				$sFileName = $BaseName . '(' . $iCounter . ').' . $ext;
+				$sErrorNumber = '201';
+			} else {
+				copy("$img_dir/$new_fname","$sFilePath");
+				if (defined $CHMOD_ON_UPLOAD) {
+					if ($CHMOD_ON_UPLOAD) {
+						umask(000);
+						chmod($CHMOD_ON_UPLOAD,$sFilePath);
+					}
+				}
+				else {
+					umask(000);
+					chmod(0777,$sFilePath);
+				}
+				unlink("$img_dir/$new_fname");
+				last;
+			}
+		}
+	} else {
+		$sErrorNumber = '202' ;
+	}
+	$sFileName	=~ s/"/\\"/g;
+
+	SendUploadResults($sErrorNumber, $resourceType.$currentFolder.$sFileName, $sFileName, '');
+}
+
+sub SendUploadResults
+{
+
+	local($sErrorNumber, $sFileUrl, $sFileName, $customMsg) = @_;
+
+	# Minified version of the document.domain automatic fix script (#1919).
+	# The original script can be found at _dev/domain_fix_template.js
+	# Note: in Perl replace \ with \\ and $ with \$
+	print <<EOF;
+Content-type: text/html
+
+<script type="text/javascript">
+(function(){var d=document.domain;while (true){try{var A=window.parent.document.domain;break;}catch(e) {};d=d.replace(/.*?(?:\\.|\$)/,'');if (d.length==0) break;try{document.domain=d;}catch (e){break;}}})();
+
+EOF
+	print 'window.parent.OnUploadCompleted(' . $sErrorNumber . ',"' . JS_cnv($sFileUrl) . '","' . JS_cnv($sFileName) . '","' . JS_cnv($customMsg) . '") ;';
+	print '</script>';
+	exit ;
+}
+
+1;


Property changes on: announcement/trunk/src/main/webapp/fckeditor/editor/filemanager/connectors/perl/commands.pl
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/webapp/fckeditor/editor/filemanager/connectors/perl/connector.cgi
===================================================================
--- announcement/trunk/src/main/webapp/fckeditor/editor/filemanager/connectors/perl/connector.cgi	                        (rev 0)
+++ announcement/trunk/src/main/webapp/fckeditor/editor/filemanager/connectors/perl/connector.cgi	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,136 @@
+#!/usr/bin/env perl
+
+#####
+#  FCKeditor - The text editor for Internet - http://www.fckeditor.net
+#  Copyright (C) 2003-2008 Frederico Caldeira Knabben
+#
+#  == BEGIN LICENSE ==
+#
+#  Licensed under the terms of any of the following licenses at your
+#  choice:
+#
+#   - GNU General Public License Version 2 or later (the "GPL")
+#     http://www.gnu.org/licenses/gpl.html
+#
+#   - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+#     http://www.gnu.org/licenses/lgpl.html
+#
+#   - Mozilla Public License Version 1.1 or later (the "MPL")
+#     http://www.mozilla.org/MPL/MPL-1.1.html
+#
+#  == END LICENSE ==
+#
+#  This is the File Manager Connector for Perl.
+#####
+
+##
+# ATTENTION: To enable this connector, look for the "SECURITY" comment in this file.
+##
+
+## START: Hack for Windows (Not important to understand the editor code... Perl specific).
+if(Windows_check()) {
+	chdir(GetScriptPath($0));
+}
+
+sub Windows_check
+{
+	# IIS,PWS(NT/95)
+	$www_server_os = $^O;
+	# Win98 & NT(SP4)
+	if($www_server_os eq "") { $www_server_os= $ENV{'OS'}; }
+	# AnHTTPd/Omni/IIS
+	if($ENV{'SERVER_SOFTWARE'} =~ /AnWeb|Omni|IIS\//i) { $www_server_os= 'win'; }
+	# Win Apache
+	if($ENV{'WINDIR'} ne "") { $www_server_os= 'win'; }
+	if($www_server_os=~ /win/i) { return(1); }
+	return(0);
+}
+
+sub GetScriptPath {
+	local($path) = @_;
+	if($path =~ /[\:\/\\]/) { $path =~ s/(.*?)[\/\\][^\/\\]+$/$1/; } else { $path = '.'; }
+	$path;
+}
+## END: Hack for IIS
+
+require 'util.pl';
+require 'io.pl';
+require 'basexml.pl';
+require 'commands.pl';
+require 'upload_fck.pl';
+
+##
+# SECURITY: REMOVE/COMMENT THE FOLLOWING LINE TO ENABLE THIS CONNECTOR.
+##
+	&SendError( 1, 'This connector is disabled. Please check the "editor/filemanager/connectors/perl/connector.cgi" file' ) ;
+
+	&read_input();
+
+	if($FORM{'ServerPath'} ne "") {
+		$GLOBALS{'UserFilesPath'} = $FORM{'ServerPath'};
+		if(!($GLOBALS{'UserFilesPath'} =~ /\/$/)) {
+			$GLOBALS{'UserFilesPath'} .= '/' ;
+		}
+	} else {
+		$GLOBALS{'UserFilesPath'} = '/userfiles/';
+	}
+
+	# Map the "UserFiles" path to a local directory.
+	$rootpath = &GetRootPath();
+	$GLOBALS{'UserFilesDirectory'} = $rootpath . $GLOBALS{'UserFilesPath'};
+
+	&DoResponse();
+
+sub DoResponse
+{
+
+	if($FORM{'Command'} eq "" || $FORM{'Type'} eq "" || $FORM{'CurrentFolder'} eq "") {
+		return ;
+	}
+	# Get the main request informaiton.
+	$sCommand		= $FORM{'Command'};
+	$sResourceType	= $FORM{'Type'};
+	$sCurrentFolder	= $FORM{'CurrentFolder'};
+
+	# Check the current folder syntax (must begin and start with a slash).
+	if(!($sCurrentFolder =~ /\/$/)) {
+		$sCurrentFolder .= '/';
+	}
+	if(!($sCurrentFolder =~ /^\//)) {
+		$sCurrentFolder = '/' . $sCurrentFolder;
+	}
+
+	# Check for invalid folder paths (..)
+	if ( $sCurrentFolder =~ /(?:\.\.|\\)/ ) {
+		SendError( 102, "" ) ;
+	}
+
+	# File Upload doesn't have to Return XML, so it must be intercepted before anything.
+	if($sCommand eq 'FileUpload') {
+		FileUpload($sResourceType,$sCurrentFolder);
+		return ;
+	}
+
+	print << "_HTML_HEAD_";
+Content-Type:text/xml; charset=utf-8
+Pragma: no-cache
+Cache-Control: no-cache
+Expires: Thu, 01 Dec 1994 16:00:00 GMT
+
+_HTML_HEAD_
+
+	&CreateXmlHeader($sCommand,$sResourceType,$sCurrentFolder);
+
+	# Execute the required command.
+	if($sCommand eq 'GetFolders') {
+		&GetFolders($sResourceType,$sCurrentFolder);
+	} elsif($sCommand eq 'GetFoldersAndFiles') {
+		&GetFoldersAndFiles($sResourceType,$sCurrentFolder);
+	} elsif($sCommand eq 'CreateFolder') {
+		&CreateFolder($sResourceType,$sCurrentFolder);
+	}
+
+	&CreateXmlFooter();
+
+	exit ;
+}


Property changes on: announcement/trunk/src/main/webapp/fckeditor/editor/filemanager/connectors/perl/connector.cgi
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/webapp/fckeditor/editor/filemanager/connectors/perl/io.pl
===================================================================
--- announcement/trunk/src/main/webapp/fckeditor/editor/filemanager/connectors/perl/io.pl	                        (rev 0)
+++ announcement/trunk/src/main/webapp/fckeditor/editor/filemanager/connectors/perl/io.pl	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,141 @@
+#####
+#  FCKeditor - The text editor for Internet - http://www.fckeditor.net
+#  Copyright (C) 2003-2008 Frederico Caldeira Knabben
+#
+#  == BEGIN LICENSE ==
+#
+#  Licensed under the terms of any of the following licenses at your
+#  choice:
+#
+#   - GNU General Public License Version 2 or later (the "GPL")
+#     http://www.gnu.org/licenses/gpl.html
+#
+#   - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+#     http://www.gnu.org/licenses/lgpl.html
+#
+#   - Mozilla Public License Version 1.1 or later (the "MPL")
+#     http://www.mozilla.org/MPL/MPL-1.1.html
+#
+#  == END LICENSE ==
+#
+#  This is the File Manager Connector for Perl.
+#####
+
+sub GetUrlFromPath
+{
+	local($resourceType, $folderPath) = @_;
+
+	if($resourceType eq '') {
+		$rmpath = &RemoveFromEnd($GLOBALS{'UserFilesPath'},'/');
+		return("$rmpath$folderPath");
+	} else {
+		return("$GLOBALS{'UserFilesPath'}$resourceType$folderPath");
+	}
+}
+
+sub RemoveExtension
+{
+	local($fileName) = @_;
+	local($path, $base, $ext);
+	if($fileName !~ /\./) {
+		$fileName .= '.';
+	}
+	if($fileName =~ /([^\\\/]*)\.(.*)$/) {
+		$base = $1;
+		$ext  = $2;
+		if($fileName =~ /(.*)$base\.$ext$/) {
+			$path = $1;
+		}
+	}
+	return($path,$base,$ext);
+
+}
+
+sub ServerMapFolder
+{
+	local($resourceType,$folderPath) = @_;
+
+	# Get the resource type directory.
+	$sResourceTypePath = $GLOBALS{'UserFilesDirectory'} . $resourceType . '/';
+
+	# Ensure that the directory exists.
+	&CreateServerFolder($sResourceTypePath);
+
+	# Return the resource type directory combined with the required path.
+	$rmpath = &RemoveFromStart($folderPath,'/');
+	return("$sResourceTypePath$rmpath");
+}
+
+sub GetParentFolder
+{
+	local($folderPath) = @_;
+
+	$folderPath =~ s/[\/][^\/]+[\/]?$//g;
+	return $folderPath;
+}
+
+sub CreateServerFolder
+{
+	local($folderPath) = @_;
+
+	$sParent = &GetParentFolder($folderPath);
+	# Check if the parent exists, or create it.
+	if(!(-e $sParent)) {
+		$sErrorMsg = &CreateServerFolder($sParent);
+		if($sErrorMsg == 1) {
+			return(1);
+		}
+	}
+	if(!(-e $folderPath)) {
+		if (defined $CHMOD_ON_FOLDER_CREATE && !$CHMOD_ON_FOLDER_CREATE) {
+			mkdir("$folderPath");
+		}
+		else {
+			umask(000);
+			if (defined $CHMOD_ON_FOLDER_CREATE) {
+				mkdir("$folderPath",$CHMOD_ON_FOLDER_CREATE);
+			}
+			else {
+				mkdir("$folderPath",0777);
+			}
+		}
+
+		return(0);
+	} else {
+		return(1);
+	}
+}
+
+sub GetRootPath
+{
+#use Cwd;
+
+#	my $dir = getcwd;
+#	print $dir;
+#	$dir  =~ s/$ENV{'DOCUMENT_ROOT'}//g;
+#	print $dir;
+#	return($dir);
+
+#	$wk = $0;
+#	$wk =~ s/\/connector\.cgi//g;
+#	if($wk) {
+#		$current_dir = $wk;
+#	} else {
+#		$current_dir = `pwd`;
+#	}
+#	return($current_dir);
+use Cwd;
+
+	if($ENV{'DOCUMENT_ROOT'}) {
+		$dir = $ENV{'DOCUMENT_ROOT'};
+	} else {
+		my $dir = getcwd;
+		$workdir =~ s/\/connector\.cgi//g;
+		$dir  =~ s/$workdir//g;
+	}
+	return($dir);
+
+
+
+}
+1;


Property changes on: announcement/trunk/src/main/webapp/fckeditor/editor/filemanager/connectors/perl/io.pl
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/webapp/fckeditor/editor/filemanager/connectors/perl/upload.cgi
===================================================================
--- announcement/trunk/src/main/webapp/fckeditor/editor/filemanager/connectors/perl/upload.cgi	                        (rev 0)
+++ announcement/trunk/src/main/webapp/fckeditor/editor/filemanager/connectors/perl/upload.cgi	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,117 @@
+#!/usr/bin/env perl
+
+#####
+#  FCKeditor - The text editor for Internet - http://www.fckeditor.net
+#  Copyright (C) 2003-2008 Frederico Caldeira Knabben
+#
+#  == BEGIN LICENSE ==
+#
+#  Licensed under the terms of any of the following licenses at your
+#  choice:
+#
+#   - GNU General Public License Version 2 or later (the "GPL")
+#     http://www.gnu.org/licenses/gpl.html
+#
+#   - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+#     http://www.gnu.org/licenses/lgpl.html
+#
+#   - Mozilla Public License Version 1.1 or later (the "MPL")
+#     http://www.mozilla.org/MPL/MPL-1.1.html
+#
+#  == END LICENSE ==
+#
+#  This is the File Manager Connector for Perl.
+#####
+
+##
+# ATTENTION: To enable this connector, look for the "SECURITY" comment in this file.
+##
+
+## START: Hack for Windows (Not important to understand the editor code... Perl specific).
+if(Windows_check()) {
+	chdir(GetScriptPath($0));
+}
+
+sub Windows_check
+{
+	# IIS,PWS(NT/95)
+	$www_server_os = $^O;
+	# Win98 & NT(SP4)
+	if($www_server_os eq "") { $www_server_os= $ENV{'OS'}; }
+	# AnHTTPd/Omni/IIS
+	if($ENV{'SERVER_SOFTWARE'} =~ /AnWeb|Omni|IIS\//i) { $www_server_os= 'win'; }
+	# Win Apache
+	if($ENV{'WINDIR'} ne "") { $www_server_os= 'win'; }
+	if($www_server_os=~ /win/i) { return(1); }
+	return(0);
+}
+
+sub GetScriptPath {
+	local($path) = @_;
+	if($path =~ /[\:\/\\]/) { $path =~ s/(.*?)[\/\\][^\/\\]+$/$1/; } else { $path = '.'; }
+	$path;
+}
+## END: Hack for IIS
+
+require 'util.pl';
+require 'io.pl';
+require 'basexml.pl';
+require 'commands.pl';
+require 'upload_fck.pl';
+
+##
+# SECURITY: REMOVE/COMMENT THE FOLLOWING LINE TO ENABLE THIS CONNECTOR.
+##
+	&SendUploadResults(1, '', '', 'This connector is disabled. Please check the "editor/filemanager/connectors/perl/upload.cgi" file' ) ;
+
+	&read_input();
+
+	if($FORM{'ServerPath'} ne "") {
+		$GLOBALS{'UserFilesPath'} = $FORM{'ServerPath'};
+		if(!($GLOBALS{'UserFilesPath'} =~ /\/$/)) {
+			$GLOBALS{'UserFilesPath'} .= '/' ;
+		}
+	} else {
+		$GLOBALS{'UserFilesPath'} = '/userfiles/';
+	}
+
+	# Map the "UserFiles" path to a local directory.
+	$rootpath = &GetRootPath();
+	$GLOBALS{'UserFilesDirectory'} = $rootpath . $GLOBALS{'UserFilesPath'};
+
+	&DoResponse();
+
+sub DoResponse
+{
+	# Get the main request information.
+	$sCommand		= 'FileUpload'; #$FORM{'Command'};
+	$sResourceType	= $FORM{'Type'};
+	$sCurrentFolder	= $FORM{'CurrentFolder'};
+
+	if ($sResourceType eq '') {
+		$sResourceType = 'File' ;
+	}
+	if ($sCurrentFolder eq '') {
+		$sCurrentFolder = '/' ;
+	}
+
+	# Check the current folder syntax (must begin and start with a slash).
+	if(!($sCurrentFolder =~ /\/$/)) {
+		$sCurrentFolder .= '/';
+	}
+	if(!($sCurrentFolder =~ /^\//)) {
+		$sCurrentFolder = '/' . $sCurrentFolder;
+	}
+
+	# Check for invalid folder paths (..)
+	if ( $sCurrentFolder =~ /(?:\.\.|\\)/ ) {
+		SendError( 102, "" ) ;
+	}
+
+	# File Upload doesn't have to Return XML, so it must be intercepted before anything.
+	if($sCommand eq 'FileUpload') {
+		FileUpload($sResourceType,$sCurrentFolder);
+		return ;
+	}
+
+}


Property changes on: announcement/trunk/src/main/webapp/fckeditor/editor/filemanager/connectors/perl/upload.cgi
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/webapp/fckeditor/editor/filemanager/connectors/perl/upload_fck.pl
===================================================================
--- announcement/trunk/src/main/webapp/fckeditor/editor/filemanager/connectors/perl/upload_fck.pl	                        (rev 0)
+++ announcement/trunk/src/main/webapp/fckeditor/editor/filemanager/connectors/perl/upload_fck.pl	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,686 @@
+#####
+#  FCKeditor - The text editor for Internet - http://www.fckeditor.net
+#  Copyright (C) 2003-2008 Frederico Caldeira Knabben
+#
+#  == BEGIN LICENSE ==
+#
+#  Licensed under the terms of any of the following licenses at your
+#  choice:
+#
+#   - GNU General Public License Version 2 or later (the "GPL")
+#     http://www.gnu.org/licenses/gpl.html
+#
+#   - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+#     http://www.gnu.org/licenses/lgpl.html
+#
+#   - Mozilla Public License Version 1.1 or later (the "MPL")
+#     http://www.mozilla.org/MPL/MPL-1.1.html
+#
+#  == END LICENSE ==
+#
+#  This is the File Manager Connector for Perl.
+#####
+
+# image data save dir
+$img_dir	= './temp/';
+
+
+# File size max(unit KB)
+$MAX_CONTENT_SIZE =  30000;
+
+# After file is uploaded, sometimes it is required to change its permissions
+# so that it was possible to access it at the later time.
+# If possible, it is recommended to set more restrictive permissions, like 0755.
+# Set to 0 to disable this feature.
+$CHMOD_ON_UPLOAD = 0777;
+
+# See comments above.
+# Used when creating folders that does not exist.
+$CHMOD_ON_FOLDER_CREATE = 0755;
+
+# Filelock (1=use,0=not use)
+$PM{'flock'}		= '1';
+
+
+# upload Content-Type list
+my %UPLOAD_CONTENT_TYPE_LIST = (
+	'image/(x-)?png'						=>	'png',	# PNG image
+	'image/p?jpe?g'							=>	'jpg',	# JPEG image
+	'image/gif'								=>	'gif',	# GIF image
+	'image/x-xbitmap'						=>	'xbm',	# XBM image
+
+	'image/(x-(MS-)?)?bmp'					=>	'bmp',	# Windows BMP image
+	'image/pict'							=>	'pict',	# Macintosh PICT image
+	'image/tiff'							=>	'tif',	# TIFF image
+	'application/pdf'						=>	'pdf',	# PDF image
+	'application/x-shockwave-flash'			=>	'swf',	# Shockwave Flash
+
+	'video/(x-)?msvideo'					=>	'avi',	# Microsoft Video
+	'video/quicktime'						=>	'mov',	# QuickTime Video
+	'video/mpeg'							=>	'mpeg',	# MPEG Video
+	'video/x-mpeg2'							=>	'mpv2', # MPEG2 Video
+
+	'audio/(x-)?midi?'						=>	'mid',	# MIDI Audio
+	'audio/(x-)?wav'						=>	'wav',	# WAV Audio
+	'audio/basic'							=>	'au',	# ULAW Audio
+	'audio/mpeg'							=>	'mpga',	# MPEG Audio
+
+	'application/(x-)?zip(-compressed)?'	=>	'zip',	# ZIP Compress
+
+	'text/html'								=>	'html', # HTML
+	'text/plain'							=>	'txt',	# TEXT
+	'(?:application|text)/(?:rtf|richtext)'	=>	'rtf',	# RichText
+
+	'application/msword'					=>	'doc',	# Microsoft Word
+	'application/vnd.ms-excel'				=>	'xls',	# Microsoft Excel
+
+	''
+);
+
+# Upload is permitted.
+# A regular expression is possible.
+my %UPLOAD_EXT_LIST = (
+	'png'					=>	'PNG image',
+	'p?jpe?g|jpe|jfif|pjp'	=>	'JPEG image',
+	'gif'					=>	'GIF image',
+	'xbm'					=>	'XBM image',
+
+	'bmp|dib|rle'			=>	'Windows BMP image',
+	'pi?ct'					=>	'Macintosh PICT image',
+	'tiff?'					=>	'TIFF image',
+	'pdf'					=>	'PDF image',
+	'swf'					=>	'Shockwave Flash',
+
+	'avi'					=>	'Microsoft Video',
+	'moo?v|qt'				=>	'QuickTime Video',
+	'm(p(e?gv?|e|v)|1v)'	=>	'MPEG Video',
+	'mp(v2|2v)'				=>	'MPEG2 Video',
+
+	'midi?|kar|smf|rmi|mff'	=>	'MIDI Audio',
+	'wav'					=>	'WAVE Audio',
+	'au|snd'				=>	'ULAW Audio',
+	'mp(e?ga|2|a|3)|abs'	=>	'MPEG Audio',
+
+	'zip'					=>	'ZIP Compress',
+	'lzh'					=>	'LZH Compress',
+	'cab'					=>	'CAB Compress',
+
+	'd?html?'				=>	'HTML',
+	'rtf|rtx'				=>	'RichText',
+	'txt|text'				=>	'Text',
+
+	''
+);
+
+
+# sjis or euc
+my $CHARCODE = 'sjis';
+
+$TRANS_2BYTE_CODE = 0;
+
+##############################################################################
+# Summary
+#
+# Form Read input
+#
+# Parameters
+# Returns
+# Memo
+##############################################################################
+sub read_input
+{
+eval("use File::Copy;");
+eval("use File::Path;");
+
+	my ($FORM) = @_;
+
+	if (defined $CHMOD_ON_FOLDER_CREATE && !$CHMOD_ON_FOLDER_CREATE) {
+		mkdir("$img_dir");
+	}
+	else {
+		umask(000);
+		if (defined $CHMOD_ON_FOLDER_CREATE) {
+			mkdir("$img_dir",$CHMOD_ON_FOLDER_CREATE);
+		}
+		else {
+			mkdir("$img_dir",0777);
+		}
+	}
+
+	undef $img_data_exists;
+	undef @NEWFNAMES;
+	undef @NEWFNAME_DATA;
+
+	if($ENV{'CONTENT_LENGTH'} > 10000000 || $ENV{'CONTENT_LENGTH'} > $MAX_CONTENT_SIZE * 1024) {
+		&upload_error(
+			'Size Error',
+			sprintf(
+				"Transmitting size is too large.MAX <strong>%d KB</strong> Now Size <strong>%d KB</strong>(<strong>%d bytes</strong> Over)",
+				$MAX_CONTENT_SIZE,
+				int($ENV{'CONTENT_LENGTH'} / 1024),
+				$ENV{'CONTENT_LENGTH'} - $MAX_CONTENT_SIZE * 1024
+			)
+		);
+	}
+
+	my $Buffer;
+	if($ENV{'CONTENT_TYPE'} =~ /multipart\/form-data/) {
+		# METHOD POST only
+		return	unless($ENV{'CONTENT_LENGTH'});
+
+		binmode(STDIN);
+		# STDIN A pause character is detected.'(MacIE3.0 boundary of $ENV{'CONTENT_TYPE'} cannot be trusted.)
+		my $Boundary = <STDIN>;
+		$Boundary =~ s/\x0D\x0A//;
+		$Boundary = quotemeta($Boundary);
+		while(<STDIN>) {
+			if(/^\s*Content-Disposition:/i) {
+				my($name,$ContentType,$FileName);
+				# form data get
+				if(/\bname="([^"]+)"/i || /\bname=([^\s:;]+)/i) {
+					$name = $1;
+					$name	=~ tr/+/ /;
+					$name	=~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
+					&Encode(\$name);
+				}
+				if(/\bfilename="([^"]*)"/i || /\bfilename=([^\s:;]*)/i) {
+					$FileName = $1 || 'unknown';
+				}
+				# head read
+				while(<STDIN>) {
+					last	if(! /\w/);
+					if(/^\s*Content-Type:\s*"([^"]+)"/i || /^\s*Content-Type:\s*([^\s:;]+)/i) {
+						$ContentType = $1;
+					}
+				}
+				# body read
+				$value = "";
+				while(<STDIN>) {
+					last	if(/^$Boundary/o);
+					$value .= $_;
+				};
+				$lastline = $_;
+				$value =~s /\x0D\x0A$//;
+				if($value ne '') {
+					if($FileName || $ContentType) {
+						$img_data_exists = 1;
+						(
+							$FileName,		#
+							$Ext,			#
+							$Length,		#
+							$ImageWidth,	#
+							$ImageHeight,	#
+							$ContentName	#
+						) = &CheckContentType(\$value,$FileName,$ContentType);
+
+						$FORM{$name}	= $FileName;
+						$new_fname		= $FileName;
+						push(@NEWFNAME_DATA,"$FileName\t$Ext\t$Length\t$ImageWidth\t$ImageHeight\t$ContentName");
+
+						# Multi-upload correspondence
+						push(@NEWFNAMES,$new_fname);
+						open(OUT,">$img_dir/$new_fname");
+						binmode(OUT);
+						eval "flock(OUT,2);" if($PM{'flock'} == 1);
+						print OUT $value;
+						eval "flock(OUT,8);" if($PM{'flock'} == 1);
+						close(OUT);
+
+					} elsif($name) {
+						$value	=~ tr/+/ /;
+						$value	=~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
+						&Encode(\$value,'trans');
+						$FORM{$name} .= "\0"			if(defined($FORM{$name}));
+						$FORM{$name} .= $value;
+					}
+				}
+			};
+			last if($lastline =~ /^$Boundary\-\-/o);
+		}
+	} elsif($ENV{'CONTENT_LENGTH'}) {
+		read(STDIN,$Buffer,$ENV{'CONTENT_LENGTH'});
+	}
+	foreach(split(/&/,$Buffer),split(/&/,$ENV{'QUERY_STRING'})) {
+		my($name, $value) = split(/=/);
+		$name	=~ tr/+/ /;
+		$name	=~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
+		$value	=~ tr/+/ /;
+		$value	=~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
+
+		&Encode(\$name);
+		&Encode(\$value,'trans');
+		$FORM{$name} .= "\0"			if(defined($FORM{$name}));
+		$FORM{$name} .= $value;
+
+	}
+
+}
+
+##############################################################################
+# Summary
+#
+#	CheckContentType
+#
+# Parameters
+# Returns
+# Memo
+##############################################################################
+sub CheckContentType
+{
+
+	my($DATA,$FileName,$ContentType) = @_;
+	my($Ext,$ImageWidth,$ImageHeight,$ContentName,$Infomation);
+	my $DataLength = length($$DATA);
+
+	# An unknown file type
+
+	$_ = $ContentType;
+	my $UnknownType = (
+		!$_
+		|| /^application\/(x-)?macbinary$/i
+		|| /^application\/applefile$/i
+		|| /^application\/octet-stream$/i
+		|| /^text\/plane$/i
+		|| /^x-unknown-content-type/i
+	);
+
+	# MacBinary(Mac Unnecessary data are deleted.)
+	if($UnknownType || $ENV{'HTTP_USER_AGENT'} =~ /Macintosh|Mac_/) {
+		if($DataLength > 128 && !unpack("C",substr($$DATA,0,1)) && !unpack("C",substr($$DATA,74,1)) && !unpack("C",substr($$DATA,82,1)) ) {
+			my $MacBinary_ForkLength = unpack("N", substr($$DATA, 83, 4));		# ForkLength Get
+			my $MacBinary_FileName = quotemeta(substr($$DATA, 2, unpack("C",substr($$DATA, 1, 1))));
+			if($MacBinary_FileName && $MacBinary_ForkLength && $DataLength >= $MacBinary_ForkLength + 128
+					&& ($FileName =~ /$MacBinary_FileName/i || substr($$DATA,102,4) eq 'mBIN')) {	# DATA TOP 128byte MacBinary!!
+				$$DATA				= substr($$DATA,128,$MacBinary_ForkLength);
+				my $ResourceLength	= $DataLength - $MacBinary_ForkLength - 128;
+				$DataLength			= $MacBinary_ForkLength;
+			}
+		}
+	}
+
+	# A file name is changed into EUC.
+#	&jcode::convert(\$FileName,'euc',$FormCodeDefault);
+#	&jcode::h2z_euc(\$FileName);
+	$FileName =~ s/^.*\\//;					# Windows, Mac
+	$FileName =~ s/^.*\///;					# UNIX
+	$FileName =~ s/&/&amp;/g;
+	$FileName =~ s/"/&quot;/g;
+	$FileName =~ s/</&lt;/g;
+	$FileName =~ s/>/&gt;/g;
+#
+#	if($CHARCODE ne 'euc') {
+#		&jcode::convert(\$FileName,$CHARCODE,'euc');
+#	}
+
+	# An extension is extracted and it changes into a small letter.
+	my $FileExt;
+	if($FileName =~ /\.(\w+)$/) {
+		$FileExt = $1;
+		$FileExt =~ tr/A-Z/a-z/;
+	}
+
+	# Executable file detection (ban on upload)
+	if($$DATA =~ /^MZ/) {
+		$Ext = 'exe';
+	}
+	# text
+	if(!$Ext && ($UnknownType || $ContentType =~ /^text\//i || $ContentType =~ /^application\/(?:rtf|richtext)$/i || $ContentType =~ /^image\/x-xbitmap$/i)
+				&& ! $$DATA =~ /[\000-\006\177\377]/) {
+#		$$DATA =~ s/\x0D\x0A/\n/g;
+#		$$DATA =~ tr/\x0D\x0A/\n\n/;
+#
+#		if(
+#			$$DATA =~ /<\s*SCRIPT(?:.|\n)*?>/i
+#				|| $$DATA =~ /<\s*(?:.|\n)*?\bONLOAD\s*=(?:.|\n)*?>/i
+#				|| $$DATA =~ /<\s*(?:.|\n)*?\bONCLICK\s*=(?:.|\n)*?>/i
+#				) {
+#			$Infomation = '(JavaScript contains)';
+#		}
+#		if($$DATA =~ /<\s*TABLE(?:.|\n)*?>/i
+#				|| $$DATA =~ /<\s*BLINK(?:.|\n)*?>/i
+#				|| $$DATA =~ /<\s*MARQUEE(?:.|\n)*?>/i
+#				|| $$DATA =~ /<\s*OBJECT(?:.|\n)*?>/i
+#				|| $$DATA =~ /<\s*EMBED(?:.|\n)*?>/i
+#				|| $$DATA =~ /<\s*FRAME(?:.|\n)*?>/i
+#				|| $$DATA =~ /<\s*APPLET(?:.|\n)*?>/i
+#				|| $$DATA =~ /<\s*FORM(?:.|\n)*?>/i
+#				|| $$DATA =~ /<\s*(?:.|\n)*?\bSRC\s*=(?:.|\n)*?>/i
+#				|| $$DATA =~ /<\s*(?:.|\n)*?\bDYNSRC\s*=(?:.|\n)*?>/i
+#				) {
+#			$Infomation = '(the HTML tag which is not safe is included)';
+#		}
+
+		if($FileExt =~ /^txt$/i || $FileExt =~ /^cgi$/i || $FileExt =~ /^pl$/i) {								# Text File
+			$Ext = 'txt';
+		} elsif($ContentType =~ /^text\/html$/i || $FileExt =~ /html?/i || $$DATA =~ /<\s*HTML(?:.|\n)*?>/i) {	# HTML File
+			$Ext = 'html';
+		} elsif($ContentType =~ /^image\/x-xbitmap$/i || $FileExt =~ /^xbm$/i) {								# XBM(x-BitMap) Image
+			my $XbmName = $1;
+			my ($XbmWidth, $XbmHeight);
+			if($$DATA =~ /\#define\s*$XbmName\_width\s*(\d+)/i) {
+				$XbmWidth = $1;
+			}
+			if($$DATA =~ /\#define\s*$XbmName\_height\s*(\d+)/i) {
+				$XbmHeight = $1;
+			}
+			if($XbmWidth && $XbmHeight) {
+				$Ext = 'xbm';
+				$ImageWidth		= $XbmWidth;
+				$ImageHeight	= $XbmHeight;
+			}
+		} else {		#
+			$Ext = 'txt';
+		}
+	}
+
+	# image
+	if(!$Ext && ($UnknownType || $ContentType =~ /^image\//i)) {
+		# PNG
+		if($$DATA =~ /^\x89PNG\x0D\x0A\x1A\x0A/) {
+			if(substr($$DATA, 12, 4) eq 'IHDR') {
+				$Ext = 'png';
+				($ImageWidth, $ImageHeight) = unpack("N2", substr($$DATA, 16, 8));
+			}
+		} elsif($$DATA =~ /^GIF8(?:9|7)a/) {															# GIF89a(modified), GIF89a, GIF87a
+			$Ext = 'gif';
+			($ImageWidth, $ImageHeight) = unpack("v2", substr($$DATA, 6, 4));
+		} elsif($$DATA =~ /^II\x2a\x00\x08\x00\x00\x00/ || $$DATA =~ /^MM\x00\x2a\x00\x00\x00\x08/) {	# TIFF
+			$Ext = 'tif';
+		} elsif($$DATA =~ /^BM/) {																		# BMP
+			$Ext = 'bmp';
+		} elsif($$DATA =~ /^\xFF\xD8\xFF/ || $$DATA =~ /JFIF/) {										# JPEG
+			my $HeaderPoint = index($$DATA, "\xFF\xD8\xFF", 0);
+			my $Point = $HeaderPoint + 2;
+			while($Point < $DataLength) {
+				my($Maker, $MakerType, $MakerLength) = unpack("C2n",substr($$DATA,$Point,4));
+				if($Maker != 0xFF || $MakerType == 0xd9 || $MakerType == 0xda) {
+					last;
+				} elsif($MakerType >= 0xC0 && $MakerType <= 0xC3) {
+					$Ext = 'jpg';
+					($ImageHeight, $ImageWidth) = unpack("n2", substr($$DATA, $Point + 5, 4));
+					if($HeaderPoint > 0) {
+						$$DATA = substr($$DATA, $HeaderPoint);
+						$DataLength = length($$DATA);
+					}
+					last;
+				} else {
+					$Point += $MakerLength + 2;
+				}
+			}
+		}
+	}
+
+	# audio
+	if(!$Ext && ($UnknownType || $ContentType =~ /^audio\//i)) {
+		# MIDI Audio
+		if($$DATA =~ /^MThd/) {
+			$Ext = 'mid';
+		} elsif($$DATA =~ /^\x2esnd/) {		# ULAW Audio
+			$Ext = 'au';
+		} elsif($$DATA =~ /^RIFF/ || $$DATA =~ /^ID3/ && $$DATA =~ /RIFF/) {
+			my $HeaderPoint = index($$DATA, "RIFF", 0);
+			$_ = substr($$DATA, $HeaderPoint + 8, 8);
+			if(/^WAVEfmt $/) {
+				# WAVE
+				if(unpack("V",substr($$DATA, $HeaderPoint + 16, 4)) == 16) {
+					$Ext = 'wav';
+				} else {					# RIFF WAVE MP3
+					$Ext = 'mp3';
+				}
+			} elsif(/^RMIDdata$/) {			# RIFF MIDI
+				$Ext = 'rmi';
+			} elsif(/^RMP3data$/) {			# RIFF MP3
+				$Ext = 'rmp';
+			}
+			if($ContentType =~ /^audio\//i) {
+				$Infomation .= '(RIFF '. substr($$DATA, $HeaderPoint + 8, 4). ')';
+			}
+		}
+	}
+
+	# a binary file
+	unless ($Ext) {
+		# PDF image
+		if($$DATA =~ /^\%PDF/) {
+			# Picture size is not measured.
+			$Ext = 'pdf';
+		} elsif($$DATA =~ /^FWS/) {		# Shockwave Flash
+			$Ext = 'swf';
+		} elsif($$DATA =~ /^RIFF/ || $$DATA =~ /^ID3/ && $$DATA =~ /RIFF/) {
+			my $HeaderPoint = index($$DATA, "RIFF", 0);
+			$_ = substr($$DATA,$HeaderPoint + 8, 8);
+			# AVI
+			if(/^AVI LIST$/) {
+				$Ext = 'avi';
+			}
+			if($ContentType =~ /^video\//i) {
+				$Infomation .= '(RIFF '. substr($$DATA, $HeaderPoint + 8, 4). ')';
+			}
+		} elsif($$DATA =~ /^PK/) {			# ZIP Compress File
+			$Ext = 'zip';
+		} elsif($$DATA =~ /^MSCF/) {		# CAB Compress File
+			$Ext = 'cab';
+		} elsif($$DATA =~ /^Rar\!/) {		# RAR Compress File
+			$Ext = 'rar';
+		} elsif(substr($$DATA, 2, 5) =~ /^\-lh(\d+|d)\-$/) {		# LHA Compress File
+			$Infomation .= "(lh$1)";
+			$Ext = 'lzh';
+		} elsif(substr($$DATA, 325, 25) eq "Apple Video Media Handler" || substr($$DATA, 325, 30) eq "Apple \x83\x72\x83\x66\x83\x49\x81\x45\x83\x81\x83\x66\x83\x42\x83\x41\x83\x6E\x83\x93\x83\x68\x83\x89") {
+			# QuickTime
+			$Ext = 'mov';
+		}
+	}
+
+	# Header analysis failure
+	unless ($Ext) {
+		# It will be followed if it applies for the MIME type from the browser.
+		foreach (keys %UPLOAD_CONTENT_TYPE_LIST) {
+			next unless ($_);
+			if($ContentType =~ /^$_$/i) {
+				$Ext = $UPLOAD_CONTENT_TYPE_LIST{$_};
+				$ContentName = &CheckContentExt($Ext);
+				if(
+					grep {$_ eq $Ext;} (
+						'png',
+						'gif',
+						'jpg',
+						'xbm',
+						'tif',
+						'bmp',
+						'pdf',
+						'swf',
+						'mov',
+						'zip',
+						'cab',
+						'lzh',
+						'rar',
+						'mid',
+						'rmi',
+						'au',
+						'wav',
+						'avi',
+						'exe'
+					)
+				) {
+					$Infomation .= ' / Header analysis failure';
+				}
+				if($Ext ne $FileExt && &CheckContentExt($FileExt) eq $ContentName) {
+					$Ext = $FileExt;
+				}
+				last;
+			}
+		}
+		# a MIME type is unknown--It judges from an extension.
+		unless ($Ext) {
+			$ContentName = &CheckContentExt($FileExt);
+			if($ContentName) {
+				$Ext = $FileExt;
+				$Infomation .= ' /	MIME type is unknown('. $ContentType. ')';
+				last;
+			}
+		}
+	}
+
+#	$ContentName = &CheckContentExt($Ext)	unless($ContentName);
+#	if($Ext && $ContentName) {
+#		$ContentName .=  $Infomation;
+#	} else {
+#		&upload_error(
+#			'Extension Error',
+#			"$FileName A not corresponding extension ($Ext)<BR>The extension which can be responded ". join(',', sort values(%UPLOAD_EXT_LIST))
+#		);
+#	}
+
+#	# SSI Tag Deletion
+#	if($Ext =~ /.?html?/ && $$DATA =~ /<\!/) {
+#		foreach (
+#			'config',
+#			'echo',
+#			'exec',
+#			'flastmod',
+#			'fsize',
+#			'include'
+#		) {
+#			$$DATA =~ s/\#\s*$_/\&\#35\;$_/ig
+#		}
+#	}
+
+	return (
+		$FileName,
+		$Ext,
+		int($DataLength / 1024 + 1),
+		$ImageWidth,
+		$ImageHeight,
+		$ContentName
+	);
+}
+
+##############################################################################
+# Summary
+#
+# Extension discernment
+#
+# Parameters
+# Returns
+# Memo
+##############################################################################
+
+sub CheckContentExt
+{
+
+	my($Ext) = @_;
+	my $ContentName;
+	foreach (keys %UPLOAD_EXT_LIST) {
+		next	unless ($_);
+		if($_ && $Ext =~ /^$_$/) {
+			$ContentName = $UPLOAD_EXT_LIST{$_};
+			last;
+		}
+	}
+	return $ContentName;
+
+}
+
+##############################################################################
+# Summary
+#
+# Form decode
+#
+# Parameters
+# Returns
+# Memo
+##############################################################################
+sub Encode
+{
+
+	my($value,$Trans) = @_;
+
+#	my $FormCode = &jcode::getcode($value) || $FormCodeDefault;
+#	$FormCodeDefault ||= $FormCode;
+#
+#	if($Trans && $TRANS_2BYTE_CODE) {
+#		if($FormCode ne 'euc') {
+#			&jcode::convert($value, 'euc', $FormCode);
+#		}
+#		&jcode::tr(
+#			$value,
+#			"\xA3\xB0-\xA3\xB9\xA3\xC1-\xA3\xDA\xA3\xE1-\xA3\xFA",
+#			'0-9A-Za-z'
+#		);
+#		if($CHARCODE ne 'euc') {
+#			&jcode::convert($value,$CHARCODE,'euc');
+#		}
+#	} else {
+#		if($CHARCODE ne $FormCode) {
+#			&jcode::convert($value,$CHARCODE,$FormCode);
+#		}
+#	}
+#	if($CHARCODE eq 'euc') {
+#		&jcode::h2z_euc($value);
+#	} elsif($CHARCODE eq 'sjis') {
+#		&jcode::h2z_sjis($value);
+#	}
+
+}
+
+##############################################################################
+# Summary
+#
+# Error Msg
+#
+# Parameters
+# Returns
+# Memo
+##############################################################################
+
+sub upload_error
+{
+
+	local($error_message)	= $_[0];
+	local($error_message2)	= $_[1];
+
+	print "Content-type: text/html\n\n";
+	print<<EOF;
+<HTML>
+<HEAD>
+<TITLE>Error Message</TITLE></HEAD>
+<BODY>
+<table border="1" cellspacing="10" cellpadding="10">
+	<TR bgcolor="#0000B0">
+	<TD bgcolor="#0000B0" NOWRAP><font size="-1" color="white"><B>Error Message</B></font></TD>
+	</TR>
+</table>
+<UL>
+<H4> $error_message </H4>
+$error_message2 <BR>
+</UL>
+</BODY>
+</HTML>
+EOF
+	&rm_tmp_uploaded_files; 		# Image Temporary deletion
+	exit;
+}
+
+##############################################################################
+# Summary
+#
+# Image Temporary deletion
+#
+# Parameters
+# Returns
+# Memo
+##############################################################################
+
+sub rm_tmp_uploaded_files
+{
+	if($img_data_exists == 1){
+		sleep 1;
+		foreach $fname_list(@NEWFNAMES) {
+			if(-e "$img_dir/$fname_list") {
+				unlink("$img_dir/$fname_list");
+			}
+		}
+	}
+
+}
+1;


Property changes on: announcement/trunk/src/main/webapp/fckeditor/editor/filemanager/connectors/perl/upload_fck.pl
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/webapp/fckeditor/editor/filemanager/connectors/perl/util.pl
===================================================================
--- announcement/trunk/src/main/webapp/fckeditor/editor/filemanager/connectors/perl/util.pl	                        (rev 0)
+++ announcement/trunk/src/main/webapp/fckeditor/editor/filemanager/connectors/perl/util.pl	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,68 @@
+#####
+#  FCKeditor - The text editor for Internet - http://www.fckeditor.net
+#  Copyright (C) 2003-2008 Frederico Caldeira Knabben
+#
+#  == BEGIN LICENSE ==
+#
+#  Licensed under the terms of any of the following licenses at your
+#  choice:
+#
+#   - GNU General Public License Version 2 or later (the "GPL")
+#     http://www.gnu.org/licenses/gpl.html
+#
+#   - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+#     http://www.gnu.org/licenses/lgpl.html
+#
+#   - Mozilla Public License Version 1.1 or later (the "MPL")
+#     http://www.mozilla.org/MPL/MPL-1.1.html
+#
+#  == END LICENSE ==
+#
+#  This is the File Manager Connector for Perl.
+#####
+
+sub RemoveFromStart
+{
+	local($sourceString, $charToRemove) = @_;
+	$sPattern = '^' . $charToRemove . '+' ;
+	$sourceString =~ s/^$charToRemove+//g;
+	return $sourceString;
+}
+
+sub RemoveFromEnd
+{
+	local($sourceString, $charToRemove) = @_;
+	$sPattern = $charToRemove . '+$' ;
+	$sourceString =~ s/$charToRemove+$//g;
+	return $sourceString;
+}
+
+sub ConvertToXmlAttribute
+{
+	local($value) = @_;
+	return $value;
+#	return utf8_encode(htmlspecialchars($value));
+
+}
+
+sub specialchar_cnv
+{
+	local($ch) = @_;
+
+	$ch =~ s/&/&amp;/g;		# &
+	$ch =~ s/\"/&quot;/g;	#"
+	$ch =~ s/\'/&#39;/g;	# '
+	$ch =~ s/</&lt;/g;		# <
+	$ch =~ s/>/&gt;/g;		# >
+	return($ch);
+}
+
+sub JS_cnv
+{
+	local($ch) = @_;
+
+	$ch =~ s/\"/\\\"/g;	#"
+	return($ch);
+}
+
+1;


Property changes on: announcement/trunk/src/main/webapp/fckeditor/editor/filemanager/connectors/perl/util.pl
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/webapp/fckeditor/editor/filemanager/connectors/php/basexml.php
===================================================================
--- announcement/trunk/src/main/webapp/fckeditor/editor/filemanager/connectors/php/basexml.php	                        (rev 0)
+++ announcement/trunk/src/main/webapp/fckeditor/editor/filemanager/connectors/php/basexml.php	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,93 @@
+<?php
+/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2008 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * These functions define the base of the XML response sent by the PHP
+ * connector.
+ */
+
+function SetXmlHeaders()
+{
+	ob_end_clean() ;
+
+	// Prevent the browser from caching the result.
+	// Date in the past
+	header('Expires: Mon, 26 Jul 1997 05:00:00 GMT') ;
+	// always modified
+	header('Last-Modified: ' . gmdate('D, d M Y H:i:s') . ' GMT') ;
+	// HTTP/1.1
+	header('Cache-Control: no-store, no-cache, must-revalidate') ;
+	header('Cache-Control: post-check=0, pre-check=0', false) ;
+	// HTTP/1.0
+	header('Pragma: no-cache') ;
+
+	// Set the response format.
+	header( 'Content-Type: text/xml; charset=utf-8' ) ;
+}
+
+function CreateXmlHeader( $command, $resourceType, $currentFolder )
+{
+	SetXmlHeaders() ;
+
+	// Create the XML document header.
+	echo '<?xml version="1.0" encoding="utf-8" ?>' ;
+
+	// Create the main "Connector" node.
+	echo '<Connector command="' . $command . '" resourceType="' . $resourceType . '">' ;
+
+	// Add the current folder node.
+	echo '<CurrentFolder path="' . ConvertToXmlAttribute( $currentFolder ) . '" url="' . ConvertToXmlAttribute( GetUrlFromPath( $resourceType, $currentFolder, $command ) ) . '" />' ;
+
+	$GLOBALS['HeaderSent'] = true ;
+}
+
+function CreateXmlFooter()
+{
+	echo '</Connector>' ;
+}
+
+function SendError( $number, $text )
+{
+	if ( isset( $GLOBALS['HeaderSent'] ) && $GLOBALS['HeaderSent'] )
+	{
+		SendErrorNode( $number, $text ) ;
+		CreateXmlFooter() ;
+	}
+	else
+	{
+		SetXmlHeaders() ;
+
+		// Create the XML document header
+		echo '<?xml version="1.0" encoding="utf-8" ?>' ;
+
+		echo '<Connector>' ;
+
+		SendErrorNode( $number, $text ) ;
+
+		echo '</Connector>' ;
+	}
+	exit ;
+}
+
+function SendErrorNode(  $number, $text )
+{
+	echo '<Error number="' . $number . '" text="' . htmlspecialchars( $text ) . '" />' ;
+}
+?>

Added: announcement/trunk/src/main/webapp/fckeditor/editor/filemanager/connectors/php/commands.php
===================================================================
--- announcement/trunk/src/main/webapp/fckeditor/editor/filemanager/connectors/php/commands.php	                        (rev 0)
+++ announcement/trunk/src/main/webapp/fckeditor/editor/filemanager/connectors/php/commands.php	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,273 @@
+<?php
+/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2008 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * This is the File Manager Connector for PHP.
+ */
+
+function GetFolders( $resourceType, $currentFolder )
+{
+	// Map the virtual path to the local server path.
+	$sServerDir = ServerMapFolder( $resourceType, $currentFolder, 'GetFolders' ) ;
+
+	// Array that will hold the folders names.
+	$aFolders	= array() ;
+
+	$oCurrentFolder = opendir( $sServerDir ) ;
+
+	while ( $sFile = readdir( $oCurrentFolder ) )
+	{
+		if ( $sFile != '.' && $sFile != '..' && is_dir( $sServerDir . $sFile ) )
+			$aFolders[] = '<Folder name="' . ConvertToXmlAttribute( $sFile ) . '" />' ;
+	}
+
+	closedir( $oCurrentFolder ) ;
+
+	// Open the "Folders" node.
+	echo "<Folders>" ;
+
+	natcasesort( $aFolders ) ;
+	foreach ( $aFolders as $sFolder )
+		echo $sFolder ;
+
+	// Close the "Folders" node.
+	echo "</Folders>" ;
+}
+
+function GetFoldersAndFiles( $resourceType, $currentFolder )
+{
+	// Map the virtual path to the local server path.
+	$sServerDir = ServerMapFolder( $resourceType, $currentFolder, 'GetFoldersAndFiles' ) ;
+
+	// Arrays that will hold the folders and files names.
+	$aFolders	= array() ;
+	$aFiles		= array() ;
+
+	$oCurrentFolder = opendir( $sServerDir ) ;
+
+	while ( $sFile = readdir( $oCurrentFolder ) )
+	{
+		if ( $sFile != '.' && $sFile != '..' )
+		{
+			if ( is_dir( $sServerDir . $sFile ) )
+				$aFolders[] = '<Folder name="' . ConvertToXmlAttribute( $sFile ) . '" />' ;
+			else
+			{
+				$iFileSize = @filesize( $sServerDir . $sFile ) ;
+				if ( !$iFileSize ) {
+					$iFileSize = 0 ;
+				}
+				if ( $iFileSize > 0 )
+				{
+					$iFileSize = round( $iFileSize / 1024 ) ;
+					if ( $iFileSize < 1 ) $iFileSize = 1 ;
+				}
+
+				$aFiles[] = '<File name="' . ConvertToXmlAttribute( $sFile ) . '" size="' . $iFileSize . '" />' ;
+			}
+		}
+	}
+
+	// Send the folders
+	natcasesort( $aFolders ) ;
+	echo '<Folders>' ;
+
+	foreach ( $aFolders as $sFolder )
+		echo $sFolder ;
+
+	echo '</Folders>' ;
+
+	// Send the files
+	natcasesort( $aFiles ) ;
+	echo '<Files>' ;
+
+	foreach ( $aFiles as $sFiles )
+		echo $sFiles ;
+
+	echo '</Files>' ;
+}
+
+function CreateFolder( $resourceType, $currentFolder )
+{
+	if (!isset($_GET)) {
+		global $_GET;
+	}
+	$sErrorNumber	= '0' ;
+	$sErrorMsg		= '' ;
+
+	if ( isset( $_GET['NewFolderName'] ) )
+	{
+		$sNewFolderName = $_GET['NewFolderName'] ;
+		$sNewFolderName = SanitizeFolderName( $sNewFolderName ) ;
+
+		if ( strpos( $sNewFolderName, '..' ) !== FALSE )
+			$sErrorNumber = '102' ;		// Invalid folder name.
+		else
+		{
+			// Map the virtual path to the local server path of the current folder.
+			$sServerDir = ServerMapFolder( $resourceType, $currentFolder, 'CreateFolder' ) ;
+
+			if ( is_writable( $sServerDir ) )
+			{
+				$sServerDir .= $sNewFolderName ;
+
+				$sErrorMsg = CreateServerFolder( $sServerDir ) ;
+
+				switch ( $sErrorMsg )
+				{
+					case '' :
+						$sErrorNumber = '0' ;
+						break ;
+					case 'Invalid argument' :
+					case 'No such file or directory' :
+						$sErrorNumber = '102' ;		// Path too long.
+						break ;
+					default :
+						$sErrorNumber = '110' ;
+						break ;
+				}
+			}
+			else
+				$sErrorNumber = '103' ;
+		}
+	}
+	else
+		$sErrorNumber = '102' ;
+
+	// Create the "Error" node.
+	echo '<Error number="' . $sErrorNumber . '" originalDescription="' . ConvertToXmlAttribute( $sErrorMsg ) . '" />' ;
+}
+
+function FileUpload( $resourceType, $currentFolder, $sCommand )
+{
+	if (!isset($_FILES)) {
+		global $_FILES;
+	}
+	$sErrorNumber = '0' ;
+	$sFileName = '' ;
+
+	if ( isset( $_FILES['NewFile'] ) && !is_null( $_FILES['NewFile']['tmp_name'] ) )
+	{
+		global $Config ;
+
+		$oFile = $_FILES['NewFile'] ;
+
+		// Map the virtual path to the local server path.
+		$sServerDir = ServerMapFolder( $resourceType, $currentFolder, $sCommand ) ;
+
+		// Get the uploaded file name.
+		$sFileName = $oFile['name'] ;
+		$sFileName = SanitizeFileName( $sFileName ) ;
+
+		$sOriginalFileName = $sFileName ;
+
+		// Get the extension.
+		$sExtension = substr( $sFileName, ( strrpos($sFileName, '.') + 1 ) ) ;
+		$sExtension = strtolower( $sExtension ) ;
+
+		if ( isset( $Config['SecureImageUploads'] ) )
+		{
+			if ( ( $isImageValid = IsImageValid( $oFile['tmp_name'], $sExtension ) ) === false )
+			{
+				$sErrorNumber = '202' ;
+			}
+		}
+
+		if ( isset( $Config['HtmlExtensions'] ) )
+		{
+			if ( !IsHtmlExtension( $sExtension, $Config['HtmlExtensions'] ) &&
+				( $detectHtml = DetectHtml( $oFile['tmp_name'] ) ) === true )
+			{
+				$sErrorNumber = '202' ;
+			}
+		}
+
+		// Check if it is an allowed extension.
+		if ( !$sErrorNumber && IsAllowedExt( $sExtension, $resourceType ) )
+		{
+			$iCounter = 0 ;
+
+			while ( true )
+			{
+				$sFilePath = $sServerDir . $sFileName ;
+
+				if ( is_file( $sFilePath ) )
+				{
+					$iCounter++ ;
+					$sFileName = RemoveExtension( $sOriginalFileName ) . '(' . $iCounter . ').' . $sExtension ;
+					$sErrorNumber = '201' ;
+				}
+				else
+				{
+					move_uploaded_file( $oFile['tmp_name'], $sFilePath ) ;
+
+					if ( is_file( $sFilePath ) )
+					{
+						if ( isset( $Config['ChmodOnUpload'] ) && !$Config['ChmodOnUpload'] )
+						{
+							break ;
+						}
+
+						$permissions = 0777;
+
+						if ( isset( $Config['ChmodOnUpload'] ) && $Config['ChmodOnUpload'] )
+						{
+							$permissions = $Config['ChmodOnUpload'] ;
+						}
+
+						$oldumask = umask(0) ;
+						chmod( $sFilePath, $permissions ) ;
+						umask( $oldumask ) ;
+					}
+
+					break ;
+				}
+			}
+
+			if ( file_exists( $sFilePath ) )
+			{
+				//previous checks failed, try once again
+				if ( isset( $isImageValid ) && $isImageValid === -1 && IsImageValid( $sFilePath, $sExtension ) === false )
+				{
+					@unlink( $sFilePath ) ;
+					$sErrorNumber = '202' ;
+				}
+				else if ( isset( $detectHtml ) && $detectHtml === -1 && DetectHtml( $sFilePath ) === true )
+				{
+					@unlink( $sFilePath ) ;
+					$sErrorNumber = '202' ;
+				}
+			}
+		}
+		else
+			$sErrorNumber = '202' ;
+	}
+	else
+		$sErrorNumber = '202' ;
+
+
+	$sFileUrl = CombinePaths( GetResourceTypePath( $resourceType, $sCommand ) , $currentFolder ) ;
+	$sFileUrl = CombinePaths( $sFileUrl, $sFileName ) ;
+
+	SendUploadResults( $sErrorNumber, $sFileUrl, $sFileName ) ;
+
+	exit ;
+}
+?>

Added: announcement/trunk/src/main/webapp/fckeditor/editor/filemanager/connectors/php/config.php
===================================================================
--- announcement/trunk/src/main/webapp/fckeditor/editor/filemanager/connectors/php/config.php	                        (rev 0)
+++ announcement/trunk/src/main/webapp/fckeditor/editor/filemanager/connectors/php/config.php	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,151 @@
+<?php
+/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2008 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * Configuration file for the File Manager Connector for PHP.
+ */
+
+global $Config ;
+
+// SECURITY: You must explicitly enable this "connector". (Set it to "true").
+// WARNING: don't just set "$Config['Enabled'] = true ;", you must be sure that only
+//		authenticated users can access this file or use some kind of session checking.
+$Config['Enabled'] = false ;
+
+
+// Path to user files relative to the document root.
+$Config['UserFilesPath'] = '/userfiles/' ;
+
+// Fill the following value it you prefer to specify the absolute path for the
+// user files directory. Useful if you are using a virtual directory, symbolic
+// link or alias. Examples: 'C:\\MySite\\userfiles\\' or '/root/mysite/userfiles/'.
+// Attention: The above 'UserFilesPath' must point to the same directory.
+$Config['UserFilesAbsolutePath'] = '' ;
+
+// Due to security issues with Apache modules, it is recommended to leave the
+// following setting enabled.
+$Config['ForceSingleExtension'] = true ;
+
+// Perform additional checks for image files.
+// If set to true, validate image size (using getimagesize).
+$Config['SecureImageUploads'] = true;
+
+// What the user can do with this connector.
+$Config['ConfigAllowedCommands'] = array('QuickUpload', 'FileUpload', 'GetFolders', 'GetFoldersAndFiles', 'CreateFolder') ;
+
+// Allowed Resource Types.
+$Config['ConfigAllowedTypes'] = array('File', 'Image', 'Flash', 'Media') ;
+
+// For security, HTML is allowed in the first Kb of data for files having the
+// following extensions only.
+$Config['HtmlExtensions'] = array("html", "htm", "xml", "xsd", "txt", "js") ;
+
+// After file is uploaded, sometimes it is required to change its permissions
+// so that it was possible to access it at the later time.
+// If possible, it is recommended to set more restrictive permissions, like 0755.
+// Set to 0 to disable this feature.
+// Note: not needed on Windows-based servers.
+$Config['ChmodOnUpload'] = 0777 ;
+
+// See comments above.
+// Used when creating folders that does not exist.
+$Config['ChmodOnFolderCreate'] = 0777 ;
+
+/*
+	Configuration settings for each Resource Type
+
+	- AllowedExtensions: the possible extensions that can be allowed.
+		If it is empty then any file type can be uploaded.
+	- DeniedExtensions: The extensions that won't be allowed.
+		If it is empty then no restrictions are done here.
+
+	For a file to be uploaded it has to fulfill both the AllowedExtensions
+	and DeniedExtensions (that's it: not being denied) conditions.
+
+	- FileTypesPath: the virtual folder relative to the document root where
+		these resources will be located.
+		Attention: It must start and end with a slash: '/'
+
+	- FileTypesAbsolutePath: the physical path to the above folder. It must be
+		an absolute path.
+		If it's an empty string then it will be autocalculated.
+		Useful if you are using a virtual directory, symbolic link or alias.
+		Examples: 'C:\\MySite\\userfiles\\' or '/root/mysite/userfiles/'.
+		Attention: The above 'FileTypesPath' must point to the same directory.
+		Attention: It must end with a slash: '/'
+
+	 - QuickUploadPath: the virtual folder relative to the document root where
+		these resources will be uploaded using the Upload tab in the resources
+		dialogs.
+		Attention: It must start and end with a slash: '/'
+
+	 - QuickUploadAbsolutePath: the physical path to the above folder. It must be
+		an absolute path.
+		If it's an empty string then it will be autocalculated.
+		Useful if you are using a virtual directory, symbolic link or alias.
+		Examples: 'C:\\MySite\\userfiles\\' or '/root/mysite/userfiles/'.
+		Attention: The above 'QuickUploadPath' must point to the same directory.
+		Attention: It must end with a slash: '/'
+
+	 	NOTE: by default, QuickUploadPath and QuickUploadAbsolutePath point to
+	 	"userfiles" directory to maintain backwards compatibility with older versions of FCKeditor.
+	 	This is fine, but you in some cases you will be not able to browse uploaded files using file browser.
+	 	Example: if you click on "image button", select "Upload" tab and send image
+	 	to the server, image will appear in FCKeditor correctly, but because it is placed
+	 	directly in /userfiles/ directory, you'll be not able to see it in built-in file browser.
+	 	The more expected behaviour would be to send images directly to "image" subfolder.
+	 	To achieve that, simply change
+			$Config['QuickUploadPath']['Image']			= $Config['UserFilesPath'] ;
+			$Config['QuickUploadAbsolutePath']['Image']	= $Config['UserFilesAbsolutePath'] ;
+		into:
+			$Config['QuickUploadPath']['Image']			= $Config['FileTypesPath']['Image'] ;
+			$Config['QuickUploadAbsolutePath']['Image'] 	= $Config['FileTypesAbsolutePath']['Image'] ;
+
+*/
+
+$Config['AllowedExtensions']['File']	= array('7z', 'aiff', 'asf', 'avi', 'bmp', 'csv', 'doc', 'fla', 'flv', 'gif', 'gz', 'gzip', 'jpeg', 'jpg', 'mid', 'mov', 'mp3', 'mp4', 'mpc', 'mpeg', 'mpg', 'ods', 'odt', 'pdf', 'png', 'ppt', 'pxd', 'qt', 'ram', 'rar', 'rm', 'rmi', 'rmvb', 'rtf', 'sdc', 'sitd', 'swf', 'sxc', 'sxw', 'tar', 'tgz', 'tif', 'tiff', 'txt', 'vsd', 'wav', 'wma', 'wmv', 'xls', 'xml', 'zip') ;
+$Config['DeniedExtensions']['File']		= array() ;
+$Config['FileTypesPath']['File']		= $Config['UserFilesPath'] . 'file/' ;
+$Config['FileTypesAbsolutePath']['File']= ($Config['UserFilesAbsolutePath'] == '') ? '' : $Config['UserFilesAbsolutePath'].'file/' ;
+$Config['QuickUploadPath']['File']		= $Config['UserFilesPath'] ;
+$Config['QuickUploadAbsolutePath']['File']= $Config['UserFilesAbsolutePath'] ;
+
+$Config['AllowedExtensions']['Image']	= array('bmp','gif','jpeg','jpg','png') ;
+$Config['DeniedExtensions']['Image']	= array() ;
+$Config['FileTypesPath']['Image']		= $Config['UserFilesPath'] . 'image/' ;
+$Config['FileTypesAbsolutePath']['Image']= ($Config['UserFilesAbsolutePath'] == '') ? '' : $Config['UserFilesAbsolutePath'].'image/' ;
+$Config['QuickUploadPath']['Image']		= $Config['UserFilesPath'] ;
+$Config['QuickUploadAbsolutePath']['Image']= $Config['UserFilesAbsolutePath'] ;
+
+$Config['AllowedExtensions']['Flash']	= array('swf','flv') ;
+$Config['DeniedExtensions']['Flash']	= array() ;
+$Config['FileTypesPath']['Flash']		= $Config['UserFilesPath'] . 'flash/' ;
+$Config['FileTypesAbsolutePath']['Flash']= ($Config['UserFilesAbsolutePath'] == '') ? '' : $Config['UserFilesAbsolutePath'].'flash/' ;
+$Config['QuickUploadPath']['Flash']		= $Config['UserFilesPath'] ;
+$Config['QuickUploadAbsolutePath']['Flash']= $Config['UserFilesAbsolutePath'] ;
+
+$Config['AllowedExtensions']['Media']	= array('aiff', 'asf', 'avi', 'bmp', 'fla', 'flv', 'gif', 'jpeg', 'jpg', 'mid', 'mov', 'mp3', 'mp4', 'mpc', 'mpeg', 'mpg', 'png', 'qt', 'ram', 'rm', 'rmi', 'rmvb', 'swf', 'tif', 'tiff', 'wav', 'wma', 'wmv') ;
+$Config['DeniedExtensions']['Media']	= array() ;
+$Config['FileTypesPath']['Media']		= $Config['UserFilesPath'] . 'media/' ;
+$Config['FileTypesAbsolutePath']['Media']= ($Config['UserFilesAbsolutePath'] == '') ? '' : $Config['UserFilesAbsolutePath'].'media/' ;
+$Config['QuickUploadPath']['Media']		= $Config['UserFilesPath'] ;
+$Config['QuickUploadAbsolutePath']['Media']= $Config['UserFilesAbsolutePath'] ;
+
+?>

Added: announcement/trunk/src/main/webapp/fckeditor/editor/filemanager/connectors/php/connector.php
===================================================================
--- announcement/trunk/src/main/webapp/fckeditor/editor/filemanager/connectors/php/connector.php	                        (rev 0)
+++ announcement/trunk/src/main/webapp/fckeditor/editor/filemanager/connectors/php/connector.php	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,87 @@
+<?php
+/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2008 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * This is the File Manager Connector for PHP.
+ */
+
+ob_start() ;
+
+require('./config.php') ;
+require('./util.php') ;
+require('./io.php') ;
+require('./basexml.php') ;
+require('./commands.php') ;
+require('./phpcompat.php') ;
+
+if ( !$Config['Enabled'] )
+	SendError( 1, 'This connector is disabled. Please check the "editor/filemanager/connectors/php/config.php" file' ) ;
+
+DoResponse() ;
+
+function DoResponse()
+{
+    if (!isset($_GET)) {
+        global $_GET;
+    }
+	if ( !isset( $_GET['Command'] ) || !isset( $_GET['Type'] ) || !isset( $_GET['CurrentFolder'] ) )
+		return ;
+
+	// Get the main request informaiton.
+	$sCommand		= $_GET['Command'] ;
+	$sResourceType	= $_GET['Type'] ;
+	$sCurrentFolder	= GetCurrentFolder() ;
+
+	// Check if it is an allowed command
+	if ( ! IsAllowedCommand( $sCommand ) )
+		SendError( 1, 'The "' . $sCommand . '" command isn\'t allowed' ) ;
+
+	// Check if it is an allowed type.
+	if ( !IsAllowedType( $sResourceType ) )
+		SendError( 1, 'Invalid type specified' ) ;
+
+	// File Upload doesn't have to Return XML, so it must be intercepted before anything.
+	if ( $sCommand == 'FileUpload' )
+	{
+		FileUpload( $sResourceType, $sCurrentFolder, $sCommand ) ;
+		return ;
+	}
+
+	CreateXmlHeader( $sCommand, $sResourceType, $sCurrentFolder ) ;
+
+	// Execute the required command.
+	switch ( $sCommand )
+	{
+		case 'GetFolders' :
+			GetFolders( $sResourceType, $sCurrentFolder ) ;
+			break ;
+		case 'GetFoldersAndFiles' :
+			GetFoldersAndFiles( $sResourceType, $sCurrentFolder ) ;
+			break ;
+		case 'CreateFolder' :
+			CreateFolder( $sResourceType, $sCurrentFolder ) ;
+			break ;
+	}
+
+	CreateXmlFooter() ;
+
+	exit ;
+}
+?>

Added: announcement/trunk/src/main/webapp/fckeditor/editor/filemanager/connectors/php/io.php
===================================================================
--- announcement/trunk/src/main/webapp/fckeditor/editor/filemanager/connectors/php/io.php	                        (rev 0)
+++ announcement/trunk/src/main/webapp/fckeditor/editor/filemanager/connectors/php/io.php	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,295 @@
+<?php
+/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2008 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * This is the File Manager Connector for PHP.
+ */
+function CombinePaths( $sBasePath, $sFolder )
+{
+	return RemoveFromEnd( $sBasePath, '/' ) . '/' . RemoveFromStart( $sFolder, '/' ) ;
+}
+function GetResourceTypePath( $resourceType, $sCommand )
+{
+	global $Config ;
+
+	if ( $sCommand == "QuickUpload")
+		return $Config['QuickUploadPath'][$resourceType] ;
+	else
+		return $Config['FileTypesPath'][$resourceType] ;
+}
+
+function GetResourceTypeDirectory( $resourceType, $sCommand )
+{
+	global $Config ;
+	if ( $sCommand == "QuickUpload")
+	{
+		if ( strlen( $Config['QuickUploadAbsolutePath'][$resourceType] ) > 0 )
+			return $Config['QuickUploadAbsolutePath'][$resourceType] ;
+
+		// Map the "UserFiles" path to a local directory.
+		return Server_MapPath( $Config['QuickUploadPath'][$resourceType] ) ;
+	}
+	else
+	{
+		if ( strlen( $Config['FileTypesAbsolutePath'][$resourceType] ) > 0 )
+			return $Config['FileTypesAbsolutePath'][$resourceType] ;
+
+		// Map the "UserFiles" path to a local directory.
+		return Server_MapPath( $Config['FileTypesPath'][$resourceType] ) ;
+	}
+}
+
+function GetUrlFromPath( $resourceType, $folderPath, $sCommand )
+{
+	return CombinePaths( GetResourceTypePath( $resourceType, $sCommand ), $folderPath ) ;
+}
+
+function RemoveExtension( $fileName )
+{
+	return substr( $fileName, 0, strrpos( $fileName, '.' ) ) ;
+}
+
+function ServerMapFolder( $resourceType, $folderPath, $sCommand )
+{
+	// Get the resource type directory.
+	$sResourceTypePath = GetResourceTypeDirectory( $resourceType, $sCommand ) ;
+
+	// Ensure that the directory exists.
+	$sErrorMsg = CreateServerFolder( $sResourceTypePath ) ;
+	if ( $sErrorMsg != '' )
+		SendError( 1, "Error creating folder \"{$sResourceTypePath}\" ({$sErrorMsg})" ) ;
+
+	// Return the resource type directory combined with the required path.
+	return CombinePaths( $sResourceTypePath , $folderPath ) ;
+}
+
+function GetParentFolder( $folderPath )
+{
+	$sPattern = "-[/\\\\][^/\\\\]+[/\\\\]?$-" ;
+	return preg_replace( $sPattern, '', $folderPath ) ;
+}
+
+function CreateServerFolder( $folderPath, $lastFolder = null )
+{
+	global $Config ;
+	$sParent = GetParentFolder( $folderPath ) ;
+
+	// Ensure the folder path has no double-slashes, or mkdir may fail on certain platforms
+	while ( strpos($folderPath, '//') !== false )
+	{
+		$folderPath = str_replace( '//', '/', $folderPath ) ;
+	}
+
+	// Check if the parent exists, or create it.
+	if ( !file_exists( $sParent ) )
+	{
+		//prevents agains infinite loop when we can't create root folder
+		if ( !is_null( $lastFolder ) && $lastFolder === $sParent) {
+			return "Can't create $folderPath directory" ;
+		}
+
+		$sErrorMsg = CreateServerFolder( $sParent, $folderPath ) ;
+		if ( $sErrorMsg != '' )
+			return $sErrorMsg ;
+	}
+
+	if ( !file_exists( $folderPath ) )
+	{
+		// Turn off all error reporting.
+		error_reporting( 0 ) ;
+
+		$php_errormsg = '' ;
+		// Enable error tracking to catch the error.
+		ini_set( 'track_errors', '1' ) ;
+
+		if ( isset( $Config['ChmodOnFolderCreate'] ) && !$Config['ChmodOnFolderCreate'] )
+		{
+			mkdir( $folderPath ) ;
+		}
+		else
+		{
+			$permissions = 0777 ;
+			if ( isset( $Config['ChmodOnFolderCreate'] ) )
+			{
+				$permissions = $Config['ChmodOnFolderCreate'] ;
+			}
+			// To create the folder with 0777 permissions, we need to set umask to zero.
+			$oldumask = umask(0) ;
+			mkdir( $folderPath, $permissions ) ;
+			umask( $oldumask ) ;
+		}
+
+		$sErrorMsg = $php_errormsg ;
+
+		// Restore the configurations.
+		ini_restore( 'track_errors' ) ;
+		ini_restore( 'error_reporting' ) ;
+
+		return $sErrorMsg ;
+	}
+	else
+		return '' ;
+}
+
+function GetRootPath()
+{
+	if (!isset($_SERVER)) {
+		global $_SERVER;
+	}
+	$sRealPath = realpath( './' ) ;
+	// #2124 ensure that no slash is at the end
+	$sRealPath = rtrim($sRealPath,"\\/");
+
+	$sSelfPath = $_SERVER['PHP_SELF'] ;
+	$sSelfPath = substr( $sSelfPath, 0, strrpos( $sSelfPath, '/' ) ) ;
+
+	$sSelfPath = str_replace( '/', DIRECTORY_SEPARATOR, $sSelfPath ) ;
+
+	$position = strpos( $sRealPath, $sSelfPath ) ;
+
+	// This can check only that this script isn't run from a virtual dir
+	// But it avoids the problems that arise if it isn't checked
+	if ( $position === false || $position <> strlen( $sRealPath ) - strlen( $sSelfPath ) )
+		SendError( 1, 'Sorry, can\'t map "UserFilesPath" to a physical path. You must set the "UserFilesAbsolutePath" value in "editor/filemanager/connectors/php/config.php".' ) ;
+
+	return substr( $sRealPath, 0, $position ) ;
+}
+
+// Emulate the asp Server.mapPath function.
+// given an url path return the physical directory that it corresponds to
+function Server_MapPath( $path )
+{
+	// This function is available only for Apache
+	if ( function_exists( 'apache_lookup_uri' ) )
+	{
+		$info = apache_lookup_uri( $path ) ;
+		return $info->filename . $info->path_info ;
+	}
+
+	// This isn't correct but for the moment there's no other solution
+	// If this script is under a virtual directory or symlink it will detect the problem and stop
+	return GetRootPath() . $path ;
+}
+
+function IsAllowedExt( $sExtension, $resourceType )
+{
+	global $Config ;
+	// Get the allowed and denied extensions arrays.
+	$arAllowed	= $Config['AllowedExtensions'][$resourceType] ;
+	$arDenied	= $Config['DeniedExtensions'][$resourceType] ;
+
+	if ( count($arAllowed) > 0 && !in_array( $sExtension, $arAllowed ) )
+		return false ;
+
+	if ( count($arDenied) > 0 && in_array( $sExtension, $arDenied ) )
+		return false ;
+
+	return true ;
+}
+
+function IsAllowedType( $resourceType )
+{
+	global $Config ;
+	if ( !in_array( $resourceType, $Config['ConfigAllowedTypes'] ) )
+		return false ;
+
+	return true ;
+}
+
+function IsAllowedCommand( $sCommand )
+{
+	global $Config ;
+
+	if ( !in_array( $sCommand, $Config['ConfigAllowedCommands'] ) )
+		return false ;
+
+	return true ;
+}
+
+function GetCurrentFolder()
+{
+	if (!isset($_GET)) {
+		global $_GET;
+	}
+	$sCurrentFolder	= isset( $_GET['CurrentFolder'] ) ? $_GET['CurrentFolder'] : '/' ;
+
+	// Check the current folder syntax (must begin and start with a slash).
+	if ( !preg_match( '|/$|', $sCurrentFolder ) )
+		$sCurrentFolder .= '/' ;
+	if ( strpos( $sCurrentFolder, '/' ) !== 0 )
+		$sCurrentFolder = '/' . $sCurrentFolder ;
+
+	// Ensure the folder path has no double-slashes
+	while ( strpos ($sCurrentFolder, '//') !== false ) {
+		$sCurrentFolder = str_replace ('//', '/', $sCurrentFolder) ;
+	}
+
+	// Check for invalid folder paths (..)
+	if ( strpos( $sCurrentFolder, '..' ) || strpos( $sCurrentFolder, "\\" ))
+		SendError( 102, '' ) ;
+
+	return $sCurrentFolder ;
+}
+
+// Do a cleanup of the folder name to avoid possible problems
+function SanitizeFolderName( $sNewFolderName )
+{
+	$sNewFolderName = stripslashes( $sNewFolderName ) ;
+
+	// Remove . \ / | : ? * " < >
+	$sNewFolderName = preg_replace( '/\\.|\\\\|\\/|\\||\\:|\\?|\\*|"|<|>|[[:cntrl:]]/', '_', $sNewFolderName ) ;
+
+	return $sNewFolderName ;
+}
+
+// Do a cleanup of the file name to avoid possible problems
+function SanitizeFileName( $sNewFileName )
+{
+	global $Config ;
+
+	$sNewFileName = stripslashes( $sNewFileName ) ;
+
+	// Replace dots in the name with underscores (only one dot can be there... security issue).
+	if ( $Config['ForceSingleExtension'] )
+		$sNewFileName = preg_replace( '/\\.(?![^.]*$)/', '_', $sNewFileName ) ;
+
+	// Remove \ / | : ? * " < >
+	$sNewFileName = preg_replace( '/\\\\|\\/|\\||\\:|\\?|\\*|"|<|>|[[:cntrl:]]/', '_', $sNewFileName ) ;
+
+	return $sNewFileName ;
+}
+
+// This is the function that sends the results of the uploading process.
+function SendUploadResults( $errorNumber, $fileUrl = '', $fileName = '', $customMsg = '' )
+{
+	// Minified version of the document.domain automatic fix script (#1919).
+	// The original script can be found at _dev/domain_fix_template.js
+	echo <<<EOF
+<script type="text/javascript">
+(function(){var d=document.domain;while (true){try{var A=window.parent.document.domain;break;}catch(e) {};d=d.replace(/.*?(?:\.|$)/,'');if (d.length==0) break;try{document.domain=d;}catch (e){break;}}})();
+EOF;
+
+	$rpl = array( '\\' => '\\\\', '"' => '\\"' ) ;
+	echo 'window.parent.OnUploadCompleted(' . $errorNumber . ',"' . strtr( $fileUrl, $rpl ) . '","' . strtr( $fileName, $rpl ) . '", "' . strtr( $customMsg, $rpl ) . '") ;' ;
+	echo '</script>' ;
+	exit ;
+}
+
+?>

Added: announcement/trunk/src/main/webapp/fckeditor/editor/filemanager/connectors/php/phpcompat.php
===================================================================
--- announcement/trunk/src/main/webapp/fckeditor/editor/filemanager/connectors/php/phpcompat.php	                        (rev 0)
+++ announcement/trunk/src/main/webapp/fckeditor/editor/filemanager/connectors/php/phpcompat.php	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,17 @@
+<?php
+
+if ( !isset( $_SERVER ) ) {
+    $_SERVER = $HTTP_SERVER_VARS ;
+}
+if ( !isset( $_GET ) ) {
+    $_GET = $HTTP_GET_VARS ;
+}
+if ( !isset( $_FILES ) ) {
+    $_FILES = $HTTP_POST_FILES ;
+}
+
+if ( !defined( 'DIRECTORY_SEPARATOR' ) ) {
+    define( 'DIRECTORY_SEPARATOR',
+        strtoupper(substr(PHP_OS, 0, 3) == 'WIN') ? '\\' : '/'
+    ) ;
+}

Added: announcement/trunk/src/main/webapp/fckeditor/editor/filemanager/connectors/php/upload.php
===================================================================
--- announcement/trunk/src/main/webapp/fckeditor/editor/filemanager/connectors/php/upload.php	                        (rev 0)
+++ announcement/trunk/src/main/webapp/fckeditor/editor/filemanager/connectors/php/upload.php	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,59 @@
+<?php
+/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2008 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * This is the "File Uploader" for PHP.
+ */
+
+require('./config.php') ;
+require('./util.php') ;
+require('./io.php') ;
+require('./commands.php') ;
+require('./phpcompat.php') ;
+
+function SendError( $number, $text )
+{
+	SendUploadResults( $number, '', '', $text ) ;
+}
+
+
+// Check if this uploader has been enabled.
+if ( !$Config['Enabled'] )
+	SendUploadResults( '1', '', '', 'This file uploader is disabled. Please check the "editor/filemanager/connectors/php/config.php" file' ) ;
+
+$sCommand = 'QuickUpload' ;
+
+// The file type (from the QueryString, by default 'File').
+$sType = isset( $_GET['Type'] ) ? $_GET['Type'] : 'File' ;
+
+$sCurrentFolder	= GetCurrentFolder() ;
+
+// Is enabled the upload?
+if ( ! IsAllowedCommand( $sCommand ) )
+	SendUploadResults( '1', '', '', 'The ""' . $sCommand . '"" command isn\'t allowed' ) ;
+
+// Check if it is an allowed type.
+if ( !IsAllowedType( $sType ) )
+    SendUploadResults( 1, '', '', 'Invalid type specified' ) ;
+
+
+FileUpload( $sType, $sCurrentFolder, $sCommand )
+
+?>

Added: announcement/trunk/src/main/webapp/fckeditor/editor/filemanager/connectors/php/util.php
===================================================================
--- announcement/trunk/src/main/webapp/fckeditor/editor/filemanager/connectors/php/util.php	                        (rev 0)
+++ announcement/trunk/src/main/webapp/fckeditor/editor/filemanager/connectors/php/util.php	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,220 @@
+<?php
+/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2008 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * Utility functions for the File Manager Connector for PHP.
+ */
+
+function RemoveFromStart( $sourceString, $charToRemove )
+{
+	$sPattern = '|^' . $charToRemove . '+|' ;
+	return preg_replace( $sPattern, '', $sourceString ) ;
+}
+
+function RemoveFromEnd( $sourceString, $charToRemove )
+{
+	$sPattern = '|' . $charToRemove . '+$|' ;
+	return preg_replace( $sPattern, '', $sourceString ) ;
+}
+
+function FindBadUtf8( $string )
+{
+	$regex =
+	'([\x00-\x7F]'.
+	'|[\xC2-\xDF][\x80-\xBF]'.
+	'|\xE0[\xA0-\xBF][\x80-\xBF]'.
+	'|[\xE1-\xEC\xEE\xEF][\x80-\xBF]{2}'.
+	'|\xED[\x80-\x9F][\x80-\xBF]'.
+	'|\xF0[\x90-\xBF][\x80-\xBF]{2}'.
+	'|[\xF1-\xF3][\x80-\xBF]{3}'.
+	'|\xF4[\x80-\x8F][\x80-\xBF]{2}'.
+	'|(.{1}))';
+
+	while (preg_match('/'.$regex.'/S', $string, $matches)) {
+		if ( isset($matches[2])) {
+			return true;
+		}
+		$string = substr($string, strlen($matches[0]));
+	}
+
+	return false;
+}
+
+function ConvertToXmlAttribute( $value )
+{
+	if ( defined( 'PHP_OS' ) )
+	{
+		$os = PHP_OS ;
+	}
+	else
+	{
+		$os = php_uname() ;
+	}
+
+	if ( strtoupper( substr( $os, 0, 3 ) ) === 'WIN' || FindBadUtf8( $value ) )
+	{
+		return ( utf8_encode( htmlspecialchars( $value ) ) ) ;
+	}
+	else
+	{
+		return ( htmlspecialchars( $value ) ) ;
+	}
+}
+
+/**
+ * Check whether given extension is in html etensions list
+ *
+ * @param string $ext
+ * @param array $htmlExtensions
+ * @return boolean
+ */
+function IsHtmlExtension( $ext, $htmlExtensions )
+{
+	if ( !$htmlExtensions || !is_array( $htmlExtensions ) )
+	{
+		return false ;
+	}
+	$lcaseHtmlExtensions = array() ;
+	foreach ( $htmlExtensions as $key => $val )
+	{
+		$lcaseHtmlExtensions[$key] = strtolower( $val ) ;
+	}
+	return in_array( $ext, $lcaseHtmlExtensions ) ;
+}
+
+/**
+ * Detect HTML in the first KB to prevent against potential security issue with
+ * IE/Safari/Opera file type auto detection bug.
+ * Returns true if file contain insecure HTML code at the beginning.
+ *
+ * @param string $filePath absolute path to file
+ * @return boolean
+ */
+function DetectHtml( $filePath )
+{
+	$fp = @fopen( $filePath, 'rb' ) ;
+
+	//open_basedir restriction, see #1906
+	if ( $fp === false || !flock( $fp, LOCK_SH ) )
+	{
+		return -1 ;
+	}
+
+	$chunk = fread( $fp, 1024 ) ;
+	flock( $fp, LOCK_UN ) ;
+	fclose( $fp ) ;
+
+	$chunk = strtolower( $chunk ) ;
+
+	if (!$chunk)
+	{
+		return false ;
+	}
+
+	$chunk = trim( $chunk ) ;
+
+	if ( preg_match( "/<!DOCTYPE\W*X?HTML/sim", $chunk ) )
+	{
+		return true;
+	}
+
+	$tags = array( '<body', '<head', '<html', '<img', '<pre', '<script', '<table', '<title' ) ;
+
+	foreach( $tags as $tag )
+	{
+		if( false !== strpos( $chunk, $tag ) )
+		{
+			return true ;
+		}
+	}
+
+	//type = javascript
+	if ( preg_match( '!type\s*=\s*[\'"]?\s*(?:\w*/)?(?:ecma|java)!sim', $chunk ) )
+	{
+		return true ;
+	}
+
+	//href = javascript
+	//src = javascript
+	//data = javascript
+	if ( preg_match( '!(?:href|src|data)\s*=\s*[\'"]?\s*(?:ecma|java)script:!sim', $chunk ) )
+	{
+		return true ;
+	}
+
+	//url(javascript
+	if ( preg_match( '!url\s*\(\s*[\'"]?\s*(?:ecma|java)script:!sim', $chunk ) )
+	{
+		return true ;
+	}
+
+	return false ;
+}
+
+/**
+ * Check file content.
+ * Currently this function validates only image files.
+ * Returns false if file is invalid.
+ *
+ * @param string $filePath absolute path to file
+ * @param string $extension file extension
+ * @param integer $detectionLevel 0 = none, 1 = use getimagesize for images, 2 = use DetectHtml for images
+ * @return boolean
+ */
+function IsImageValid( $filePath, $extension )
+{
+	if (!@is_readable($filePath)) {
+		return -1;
+	}
+
+	$imageCheckExtensions = array('gif', 'jpeg', 'jpg', 'png', 'swf', 'psd', 'bmp', 'iff');
+
+	// version_compare is available since PHP4 >= 4.0.7
+	if ( function_exists( 'version_compare' ) ) {
+		$sCurrentVersion = phpversion();
+		if ( version_compare( $sCurrentVersion, "4.2.0" ) >= 0 ) {
+			$imageCheckExtensions[] = "tiff";
+			$imageCheckExtensions[] = "tif";
+		}
+		if ( version_compare( $sCurrentVersion, "4.3.0" ) >= 0 ) {
+			$imageCheckExtensions[] = "swc";
+		}
+		if ( version_compare( $sCurrentVersion, "4.3.2" ) >= 0 ) {
+			$imageCheckExtensions[] = "jpc";
+			$imageCheckExtensions[] = "jp2";
+			$imageCheckExtensions[] = "jpx";
+			$imageCheckExtensions[] = "jb2";
+			$imageCheckExtensions[] = "xbm";
+			$imageCheckExtensions[] = "wbmp";
+		}
+	}
+
+	if ( !in_array( $extension, $imageCheckExtensions ) ) {
+		return true;
+	}
+
+	if ( @getimagesize( $filePath ) === false ) {
+		return false ;
+	}
+
+	return true;
+}
+
+?>

Added: announcement/trunk/src/main/webapp/fckeditor/editor/filemanager/connectors/py/config.py
===================================================================
--- announcement/trunk/src/main/webapp/fckeditor/editor/filemanager/connectors/py/config.py	                        (rev 0)
+++ announcement/trunk/src/main/webapp/fckeditor/editor/filemanager/connectors/py/config.py	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,146 @@
+#!/usr/bin/env python
+"""
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2008 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * Configuration file for the File Manager Connector for Python
+"""
+
+# INSTALLATION NOTE: You must set up your server environment accordingly to run
+# python scripts. This connector requires Python 2.4 or greater.
+#
+# Supported operation modes:
+#  * WSGI (recommended): You'll need apache + mod_python + modpython_gateway
+#                        or any web server capable of the WSGI python standard
+#  * Plain Old CGI:      Any server capable of running standard python scripts
+#                        (although mod_python is recommended for performance)
+#                        This was the previous connector version operation mode
+#
+# If you're using Apache web server, replace the htaccess.txt to to .htaccess,
+# and set the proper options and paths.
+# For WSGI and mod_python, you may need to download modpython_gateway from:
+# http://projects.amor.org/misc/svn/modpython_gateway.py and copy it in this
+# directory.
+
+
+# SECURITY: You must explicitly enable this "connector". (Set it to "True").
+# WARNING: don't just set "ConfigIsEnabled = True", you must be sure that only
+#		authenticated users can access this file or use some kind of session checking.
+Enabled = False
+
+# Path to user files relative to the document root.
+UserFilesPath = '/userfiles/'
+
+# Fill the following value it you prefer to specify the absolute path for the
+# user files directory. Useful if you are using a virtual directory, symbolic
+# link or alias. Examples: 'C:\\MySite\\userfiles\\' or '/root/mysite/userfiles/'.
+# Attention: The above 'UserFilesPath' must point to the same directory.
+# WARNING: GetRootPath may not work in virtual or mod_python configurations, and
+# may not be thread safe. Use this configuration parameter instead.
+UserFilesAbsolutePath = ''
+
+# Due to security issues with Apache modules, it is recommended to leave the
+# following setting enabled.
+ForceSingleExtension = True
+
+# What the user can do with this connector
+ConfigAllowedCommands = [ 'QuickUpload', 'FileUpload', 'GetFolders', 'GetFoldersAndFiles', 'CreateFolder' ]
+
+# Allowed Resource Types
+ConfigAllowedTypes = ['File', 'Image', 'Flash', 'Media']
+
+# After file is uploaded, sometimes it is required to change its permissions
+# so that it was possible to access it at the later time.
+# If possible, it is recommended to set more restrictive permissions, like 0755.
+# Set to 0 to disable this feature.
+# Note: not needed on Windows-based servers.
+ChmodOnUpload = 0755
+
+# See comments above.
+# Used when creating folders that does not exist.
+ChmodOnFolderCreate = 0755
+
+# Do not touch this 3 lines, see "Configuration settings for each Resource Type"
+AllowedExtensions = {}; DeniedExtensions = {};
+FileTypesPath = {}; FileTypesAbsolutePath = {};
+QuickUploadPath = {}; QuickUploadAbsolutePath = {};
+
+#	Configuration settings for each Resource Type
+#
+#	- AllowedExtensions: the possible extensions that can be allowed.
+#		If it is empty then any file type can be uploaded.
+#	- DeniedExtensions: The extensions that won't be allowed.
+#		If it is empty then no restrictions are done here.
+#
+#	For a file to be uploaded it has to fulfill both the AllowedExtensions
+#	and DeniedExtensions (that's it: not being denied) conditions.
+#
+#	- FileTypesPath: the virtual folder relative to the document root where
+#		these resources will be located.
+#		Attention: It must start and end with a slash: '/'
+#
+#	- FileTypesAbsolutePath: the physical path to the above folder. It must be
+#		an absolute path.
+#		If it's an empty string then it will be autocalculated.
+#		Useful if you are using a virtual directory, symbolic link or alias.
+#		Examples: 'C:\\MySite\\userfiles\\' or '/root/mysite/userfiles/'.
+#		Attention: The above 'FileTypesPath' must point to the same directory.
+#		Attention: It must end with a slash: '/'
+#
+#
+#	- QuickUploadPath: the virtual folder relative to the document root where
+#		these resources will be uploaded using the Upload tab in the resources
+#		dialogs.
+#		Attention: It must start and end with a slash: '/'
+#
+#	- QuickUploadAbsolutePath: the physical path to the above folder. It must be
+#		an absolute path.
+#		If it's an empty string then it will be autocalculated.
+#		Useful if you are using a virtual directory, symbolic link or alias.
+#		Examples: 'C:\\MySite\\userfiles\\' or '/root/mysite/userfiles/'.
+#		Attention: The above 'QuickUploadPath' must point to the same directory.
+#		Attention: It must end with a slash: '/'
+
+AllowedExtensions['File'] 		= ['7z','aiff','asf','avi','bmp','csv','doc','fla','flv','gif','gz','gzip','jpeg','jpg','mid','mov','mp3','mp4','mpc','mpeg','mpg','ods','odt','pdf','png','ppt','pxd','qt','ram','rar','rm','rmi','rmvb','rtf','sdc','sitd','swf','sxc','sxw','tar','tgz','tif','tiff','txt','vsd','wav','wma','wmv','xls','xml','zip']
+DeniedExtensions['File'] 		= []
+FileTypesPath['File'] 			= UserFilesPath + 'file/'
+FileTypesAbsolutePath['File'] 	= (not UserFilesAbsolutePath == '') and (UserFilesAbsolutePath + 'file/') or ''
+QuickUploadPath['File']			= FileTypesPath['File']
+QuickUploadAbsolutePath['File']	= FileTypesAbsolutePath['File']
+
+AllowedExtensions['Image']		= ['bmp','gif','jpeg','jpg','png']
+DeniedExtensions['Image']		= []
+FileTypesPath['Image']			= UserFilesPath + 'image/'
+FileTypesAbsolutePath['Image']	= (not UserFilesAbsolutePath == '') and UserFilesAbsolutePath + 'image/' or ''
+QuickUploadPath['Image']		= FileTypesPath['Image']
+QuickUploadAbsolutePath['Image']= FileTypesAbsolutePath['Image']
+
+AllowedExtensions['Flash']		= ['swf','flv']
+DeniedExtensions['Flash']		= []
+FileTypesPath['Flash']			= UserFilesPath + 'flash/'
+FileTypesAbsolutePath['Flash']	= ( not UserFilesAbsolutePath == '') and UserFilesAbsolutePath + 'flash/' or ''
+QuickUploadPath['Flash']		= FileTypesPath['Flash']
+QuickUploadAbsolutePath['Flash']= FileTypesAbsolutePath['Flash']
+
+AllowedExtensions['Media']		= ['aiff','asf','avi','bmp','fla', 'flv','gif','jpeg','jpg','mid','mov','mp3','mp4','mpc','mpeg','mpg','png','qt','ram','rm','rmi','rmvb','swf','tif','tiff','wav','wma','wmv']
+DeniedExtensions['Media']		= []
+FileTypesPath['Media']			= UserFilesPath + 'media/'
+FileTypesAbsolutePath['Media']	= ( not UserFilesAbsolutePath == '') and UserFilesAbsolutePath + 'media/' or ''
+QuickUploadPath['Media']		= FileTypesPath['Media']
+QuickUploadAbsolutePath['Media']= FileTypesAbsolutePath['Media']


Property changes on: announcement/trunk/src/main/webapp/fckeditor/editor/filemanager/connectors/py/config.py
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/webapp/fckeditor/editor/filemanager/connectors/py/connector.py
===================================================================
--- announcement/trunk/src/main/webapp/fckeditor/editor/filemanager/connectors/py/connector.py	                        (rev 0)
+++ announcement/trunk/src/main/webapp/fckeditor/editor/filemanager/connectors/py/connector.py	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,118 @@
+#!/usr/bin/env python
+
+"""
+FCKeditor - The text editor for Internet - http://www.fckeditor.net
+Copyright (C) 2003-2008 Frederico Caldeira Knabben
+
+== BEGIN LICENSE ==
+
+Licensed under the terms of any of the following licenses at your
+choice:
+
+ - GNU General Public License Version 2 or later (the "GPL")
+   http://www.gnu.org/licenses/gpl.html
+
+ - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+   http://www.gnu.org/licenses/lgpl.html
+
+ - Mozilla Public License Version 1.1 or later (the "MPL")
+   http://www.mozilla.org/MPL/MPL-1.1.html
+
+== END LICENSE ==
+
+Connector for Python (CGI and WSGI).
+
+See config.py for configuration settings
+
+"""
+import os
+
+from fckutil import *
+from fckcommands import * 	# default command's implementation
+from fckoutput import * 	# base http, xml and html output mixins
+from fckconnector import FCKeditorConnectorBase # import base connector
+import config as Config
+
+class FCKeditorConnector(	FCKeditorConnectorBase,
+							GetFoldersCommandMixin,
+							GetFoldersAndFilesCommandMixin,
+							CreateFolderCommandMixin,
+							UploadFileCommandMixin,
+							BaseHttpMixin, BaseXmlMixin, BaseHtmlMixin  ):
+	"The Standard connector class."
+	def doResponse(self):
+		"Main function. Process the request, set headers and return a string as response."
+		s = ""
+		# Check if this connector is disabled
+		if not(Config.Enabled):
+			return self.sendError(1, "This connector is disabled.  Please check the connector configurations in \"editor/filemanager/connectors/py/config.py\" and try again.")
+		# Make sure we have valid inputs
+		for key in ("Command","Type","CurrentFolder"):
+			if not self.request.has_key (key):
+				return
+		# Get command, resource type and current folder
+		command = self.request.get("Command")
+		resourceType = self.request.get("Type")
+		currentFolder = getCurrentFolder(self.request.get("CurrentFolder"))
+		# Check for invalid paths
+		if currentFolder is None:
+			return self.sendError(102, "")
+
+		# Check if it is an allowed command
+		if ( not command in Config.ConfigAllowedCommands ):
+			return self.sendError( 1, 'The %s command isn\'t allowed' % command )
+
+		if ( not resourceType in Config.ConfigAllowedTypes  ):
+			return self.sendError( 1, 'Invalid type specified' )
+
+		# Setup paths
+		if command == "QuickUpload":
+			self.userFilesFolder = Config.QuickUploadAbsolutePath[resourceType]
+			self.webUserFilesFolder =  Config.QuickUploadPath[resourceType]
+		else:
+			self.userFilesFolder = Config.FileTypesAbsolutePath[resourceType]
+			self.webUserFilesFolder = Config.FileTypesPath[resourceType]
+
+		if not self.userFilesFolder: # no absolute path given (dangerous...)
+			self.userFilesFolder = mapServerPath(self.environ,
+									self.webUserFilesFolder)
+		# Ensure that the directory exists.
+		if not os.path.exists(self.userFilesFolder):
+			try:
+				self.createServerFoldercreateServerFolder( self.userFilesFolder )
+			except:
+				return self.sendError(1, "This connector couldn\'t access to local user\'s files directories.  Please check the UserFilesAbsolutePath in \"editor/filemanager/connectors/py/config.py\" and try again. ")
+
+		# File upload doesn't have to return XML, so intercept here
+		if (command == "FileUpload"):
+			return self.uploadFile(resourceType, currentFolder)
+
+		# Create Url
+		url = combinePaths( self.webUserFilesFolder, currentFolder )
+
+		# Begin XML
+		s += self.createXmlHeader(command, resourceType, currentFolder, url)
+		# Execute the command
+		selector = {"GetFolders": self.getFolders,
+					"GetFoldersAndFiles": self.getFoldersAndFiles,
+					"CreateFolder": self.createFolder,
+					}
+		s += selector[command](resourceType, currentFolder)
+		s += self.createXmlFooter()
+		return s
+
+# Running from command line (plain old CGI)
+if __name__ == '__main__':
+	try:
+		# Create a Connector Instance
+		conn = FCKeditorConnector()
+		data = conn.doResponse()
+		for header in conn.headers:
+			print '%s: %s' % header
+		print
+		print data
+	except:
+		print "Content-Type: text/plain"
+		print
+		import cgi
+		cgi.print_exception()


Property changes on: announcement/trunk/src/main/webapp/fckeditor/editor/filemanager/connectors/py/connector.py
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/webapp/fckeditor/editor/filemanager/connectors/py/fckcommands.py
===================================================================
--- announcement/trunk/src/main/webapp/fckeditor/editor/filemanager/connectors/py/fckcommands.py	                        (rev 0)
+++ announcement/trunk/src/main/webapp/fckeditor/editor/filemanager/connectors/py/fckcommands.py	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,198 @@
+#!/usr/bin/env python
+
+"""
+FCKeditor - The text editor for Internet - http://www.fckeditor.net
+Copyright (C) 2003-2008 Frederico Caldeira Knabben
+
+== BEGIN LICENSE ==
+
+Licensed under the terms of any of the following licenses at your
+choice:
+
+- GNU General Public License Version 2 or later (the "GPL")
+http://www.gnu.org/licenses/gpl.html
+
+- GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+http://www.gnu.org/licenses/lgpl.html
+
+- Mozilla Public License Version 1.1 or later (the "MPL")
+http://www.mozilla.org/MPL/MPL-1.1.html
+
+== END LICENSE ==
+
+Connector for Python (CGI and WSGI).
+
+"""
+
+import os
+try: # Windows needs stdio set for binary mode for file upload to work.
+	import msvcrt
+	msvcrt.setmode (0, os.O_BINARY) # stdin  = 0
+	msvcrt.setmode (1, os.O_BINARY) # stdout = 1
+except ImportError:
+	pass
+
+from fckutil import *
+from fckoutput import *
+import config as Config
+
+class GetFoldersCommandMixin (object):
+	def getFolders(self, resourceType, currentFolder):
+		"""
+		Purpose: command to recieve a list of folders
+		"""
+		# Map the virtual path to our local server
+		serverPath = mapServerFolder(self.userFilesFolder,currentFolder)
+		s = """<Folders>"""	 # Open the folders node
+		for someObject in os.listdir(serverPath):
+			someObjectPath = mapServerFolder(serverPath, someObject)
+			if os.path.isdir(someObjectPath):
+				s += """<Folder name="%s" />""" % (
+						convertToXmlAttribute(someObject)
+						)
+		s += """</Folders>""" # Close the folders node
+		return s
+
+class GetFoldersAndFilesCommandMixin (object):
+	def getFoldersAndFiles(self, resourceType, currentFolder):
+		"""
+		Purpose: command to recieve a list of folders and files
+		"""
+		# Map the virtual path to our local server
+		serverPath = mapServerFolder(self.userFilesFolder,currentFolder)
+		# Open the folders / files node
+		folders = """<Folders>"""
+		files = """<Files>"""
+		for someObject in os.listdir(serverPath):
+			someObjectPath = mapServerFolder(serverPath, someObject)
+			if os.path.isdir(someObjectPath):
+				folders += """<Folder name="%s" />""" % (
+						convertToXmlAttribute(someObject)
+						)
+			elif os.path.isfile(someObjectPath):
+				size = os.path.getsize(someObjectPath)
+				files += """<File name="%s" size="%s" />""" % (
+						convertToXmlAttribute(someObject),
+						os.path.getsize(someObjectPath)
+						)
+		# Close the folders / files node
+		folders += """</Folders>"""
+		files += """</Files>"""
+		return folders + files
+
+class CreateFolderCommandMixin (object):
+	def createFolder(self, resourceType, currentFolder):
+		"""
+		Purpose: command to create a new folder
+		"""
+		errorNo = 0; errorMsg ='';
+		if self.request.has_key("NewFolderName"):
+			newFolder = self.request.get("NewFolderName", None)
+			newFolder = sanitizeFolderName (newFolder)
+			try:
+				newFolderPath = mapServerFolder(self.userFilesFolder, combinePaths(currentFolder, newFolder))
+				self.createServerFolder(newFolderPath)
+			except Exception, e:
+				errorMsg = str(e).decode('iso-8859-1').encode('utf-8') # warning with encodigns!!!
+				if hasattr(e,'errno'):
+					if e.errno==17: #file already exists
+						errorNo=0
+					elif e.errno==13: # permission denied
+						errorNo = 103
+					elif e.errno==36 or e.errno==2 or e.errno==22: # filename too long / no such file / invalid name
+						errorNo = 102
+				else:
+					errorNo = 110
+		else:
+			errorNo = 102
+		return self.sendErrorNode ( errorNo, errorMsg )
+
+	def createServerFolder(self, folderPath):
+		"Purpose: physically creates a folder on the server"
+		# No need to check if the parent exists, just create all hierachy
+
+		try:
+			permissions = Config.ChmodOnFolderCreate
+			if not permissions:
+				os.makedirs(folderPath)
+		except AttributeError: #ChmodOnFolderCreate undefined
+			permissions = 0755
+
+		if permissions:
+			oldumask = os.umask(0)
+			os.makedirs(folderPath,mode=0755)
+			os.umask( oldumask )
+
+class UploadFileCommandMixin (object):
+	def uploadFile(self, resourceType, currentFolder):
+		"""
+		Purpose: command to upload files to server (same as FileUpload)
+		"""
+		errorNo = 0
+		if self.request.has_key("NewFile"):
+			# newFile has all the contents we need
+			newFile = self.request.get("NewFile", "")
+			# Get the file name
+			newFileName = newFile.filename
+			newFileName = sanitizeFileName( newFileName )
+			newFileNameOnly = removeExtension(newFileName)
+			newFileExtension = getExtension(newFileName).lower()
+			allowedExtensions = Config.AllowedExtensions[resourceType]
+			deniedExtensions = Config.DeniedExtensions[resourceType]
+
+			if (allowedExtensions):
+				# Check for allowed
+				isAllowed = False
+				if (newFileExtension in allowedExtensions):
+					isAllowed = True
+			elif (deniedExtensions):
+				# Check for denied
+				isAllowed = True
+				if (newFileExtension in deniedExtensions):
+					isAllowed = False
+			else:
+				# No extension limitations
+				isAllowed = True
+
+			if (isAllowed):
+				# Upload to operating system
+				# Map the virtual path to the local server path
+				currentFolderPath = mapServerFolder(self.userFilesFolder, currentFolder)
+				i = 0
+				while (True):
+					newFilePath = os.path.join (currentFolderPath,newFileName)
+					if os.path.exists(newFilePath):
+						i += 1
+						newFileName = "%s(%04d).%s" % (
+								newFileNameOnly, i, newFileExtension
+								)
+						errorNo= 201 # file renamed
+					else:
+						# Read file contents and write to the desired path (similar to php's move_uploaded_file)
+						fout = file(newFilePath, 'wb')
+						while (True):
+							chunk = newFile.file.read(100000)
+							if not chunk: break
+							fout.write (chunk)
+						fout.close()
+
+						if os.path.exists ( newFilePath ):
+							doChmod = False
+							try:
+								doChmod = Config.ChmodOnUpload
+								permissions = Config.ChmodOnUpload
+							except AttributeError: #ChmodOnUpload undefined
+								doChmod = True
+								permissions = 0755
+							if ( doChmod ):
+								oldumask = os.umask(0)
+								os.chmod( newFilePath, permissions )
+								os.umask( oldumask )
+
+						newFileUrl = self.webUserFilesFolder + currentFolder + newFileName
+
+						return self.sendUploadResults( errorNo , newFileUrl, newFileName )
+			else:
+				return self.sendUploadResults( errorNo = 203, customMsg = "Extension not allowed" )
+		else:
+			return self.sendUploadResults( errorNo = 202, customMsg = "No File" )


Property changes on: announcement/trunk/src/main/webapp/fckeditor/editor/filemanager/connectors/py/fckcommands.py
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/webapp/fckeditor/editor/filemanager/connectors/py/fckconnector.py
===================================================================
--- announcement/trunk/src/main/webapp/fckeditor/editor/filemanager/connectors/py/fckconnector.py	                        (rev 0)
+++ announcement/trunk/src/main/webapp/fckeditor/editor/filemanager/connectors/py/fckconnector.py	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,90 @@
+#!/usr/bin/env python
+
+"""
+FCKeditor - The text editor for Internet - http://www.fckeditor.net
+Copyright (C) 2003-2008 Frederico Caldeira Knabben
+
+== BEGIN LICENSE ==
+
+Licensed under the terms of any of the following licenses at your
+choice:
+
+- GNU General Public License Version 2 or later (the "GPL")
+http://www.gnu.org/licenses/gpl.html
+
+- GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+http://www.gnu.org/licenses/lgpl.html
+
+- Mozilla Public License Version 1.1 or later (the "MPL")
+http://www.mozilla.org/MPL/MPL-1.1.html
+
+== END LICENSE ==
+
+Base Connector for Python (CGI and WSGI).
+
+See config.py for configuration settings
+
+"""
+import cgi, os
+
+from fckutil import *
+from fckcommands import * 	# default command's implementation
+from fckoutput import * 	# base http, xml and html output mixins
+import config as Config
+
+class FCKeditorConnectorBase( object ):
+	"The base connector class. Subclass it to extend functionality (see Zope example)"
+
+	def __init__(self, environ=None):
+		"Constructor: Here you should parse request fields, initialize variables, etc."
+		self.request = FCKeditorRequest(environ) # Parse request
+		self.headers = []						# Clean Headers
+		if environ:
+			self.environ = environ
+		else:
+			self.environ = os.environ
+
+	# local functions
+
+	def setHeader(self, key, value):
+		self.headers.append ((key, value))
+		return
+
+class FCKeditorRequest(object):
+	"A wrapper around the request object"
+	def __init__(self, environ):
+		if environ: # WSGI
+			self.request = cgi.FieldStorage(fp=environ['wsgi.input'],
+							environ=environ,
+							keep_blank_values=1)
+			self.environ = environ
+		else: # plain old cgi
+			self.environ = os.environ
+			self.request = cgi.FieldStorage()
+		if 'REQUEST_METHOD' in self.environ and 'QUERY_STRING' in self.environ:
+			if self.environ['REQUEST_METHOD'].upper()=='POST':
+				# we are in a POST, but GET query_string exists
+				# cgi parses by default POST data, so parse GET QUERY_STRING too
+				self.get_request = cgi.FieldStorage(fp=None,
+							environ={
+							'REQUEST_METHOD':'GET',
+							'QUERY_STRING':self.environ['QUERY_STRING'],
+							},
+							)
+		else:
+			self.get_request={}
+
+	def has_key(self, key):
+		return self.request.has_key(key) or self.get_request.has_key(key)
+
+	def get(self, key, default=None):
+		if key in self.request.keys():
+			field = self.request[key]
+		elif key in self.get_request.keys():
+			field = self.get_request[key]
+		else:
+			return default
+		if hasattr(field,"filename") and field.filename: #file upload, do not convert return value
+			return field
+		else:
+			return field.value


Property changes on: announcement/trunk/src/main/webapp/fckeditor/editor/filemanager/connectors/py/fckconnector.py
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/webapp/fckeditor/editor/filemanager/connectors/py/fckoutput.py
===================================================================
--- announcement/trunk/src/main/webapp/fckeditor/editor/filemanager/connectors/py/fckoutput.py	                        (rev 0)
+++ announcement/trunk/src/main/webapp/fckeditor/editor/filemanager/connectors/py/fckoutput.py	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,116 @@
+#!/usr/bin/env python
+
+"""
+FCKeditor - The text editor for Internet - http://www.fckeditor.net
+Copyright (C) 2003-2008 Frederico Caldeira Knabben
+
+== BEGIN LICENSE ==
+
+Licensed under the terms of any of the following licenses at your
+choice:
+
+- GNU General Public License Version 2 or later (the "GPL")
+http://www.gnu.org/licenses/gpl.html
+
+- GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+http://www.gnu.org/licenses/lgpl.html
+
+- Mozilla Public License Version 1.1 or later (the "MPL")
+http://www.mozilla.org/MPL/MPL-1.1.html
+
+== END LICENSE ==
+
+Connector for Python (CGI and WSGI).
+
+"""
+
+from time import gmtime, strftime
+import string
+
+def escape(text, replace=string.replace):
+	"""
+	Converts the special characters '<', '>', and '&'.
+
+	RFC 1866 specifies that these characters be represented
+	in HTML as &lt; &gt; and &amp; respectively. In Python
+	1.5 we use the new string.replace() function for speed.
+	"""
+	text = replace(text, '&', '&amp;') # must be done 1st
+	text = replace(text, '<', '&lt;')
+	text = replace(text, '>', '&gt;')
+	text = replace(text, '"', '&quot;')
+	return text
+
+def convertToXmlAttribute(value):
+	if (value is None):
+		value = ""
+	return escape(value)
+
+class BaseHttpMixin(object):
+	def setHttpHeaders(self, content_type='text/xml'):
+		"Purpose: to prepare the headers for the xml to return"
+		# Prevent the browser from caching the result.
+		# Date in the past
+		self.setHeader('Expires','Mon, 26 Jul 1997 05:00:00 GMT')
+		# always modified
+		self.setHeader('Last-Modified',strftime("%a, %d %b %Y %H:%M:%S GMT", gmtime()))
+		# HTTP/1.1
+		self.setHeader('Cache-Control','no-store, no-cache, must-revalidate')
+		self.setHeader('Cache-Control','post-check=0, pre-check=0')
+		# HTTP/1.0
+		self.setHeader('Pragma','no-cache')
+
+		# Set the response format.
+		self.setHeader( 'Content-Type', content_type + '; charset=utf-8' )
+		return
+
+class BaseXmlMixin(object):
+	def createXmlHeader(self, command, resourceType, currentFolder, url):
+		"Purpose: returns the xml header"
+		self.setHttpHeaders()
+		# Create the XML document header
+		s =  """<?xml version="1.0" encoding="utf-8" ?>"""
+		# Create the main connector node
+		s += """<Connector command="%s" resourceType="%s">""" % (
+				command,
+				resourceType
+				)
+		# Add the current folder node
+		s += """<CurrentFolder path="%s" url="%s" />""" % (
+				convertToXmlAttribute(currentFolder),
+				convertToXmlAttribute(url),
+				)
+		return s
+
+	def createXmlFooter(self):
+		"Purpose: returns the xml footer"
+		return """</Connector>"""
+
+	def sendError(self, number, text):
+		"Purpose: in the event of an error, return an xml based error"
+		self.setHttpHeaders()
+		return ("""<?xml version="1.0" encoding="utf-8" ?>""" +
+				"""<Connector>""" +
+				self.sendErrorNode (number, text) +
+				"""</Connector>""" )
+
+	def sendErrorNode(self, number, text):
+		return """<Error number="%s" text="%s" />""" % (number, convertToXmlAttribute(text))
+
+class BaseHtmlMixin(object):
+	def sendUploadResults( self, errorNo = 0, fileUrl = '', fileName = '', customMsg = '' ):
+		self.setHttpHeaders("text/html")
+		"This is the function that sends the results of the uploading process"
+
+		"Minified version of the document.domain automatic fix script (#1919)."
+		"The original script can be found at _dev/domain_fix_template.js"
+		return """<script type="text/javascript">
+			(function(){var d=document.domain;while (true){try{var A=window.parent.document.domain;break;}catch(e) {};d=d.replace(/.*?(?:\.|$)/,'');if (d.length==0) break;try{document.domain=d;}catch (e){break;}}})();
+
+			window.parent.OnUploadCompleted(%(errorNumber)s,"%(fileUrl)s","%(fileName)s","%(customMsg)s");
+			</script>""" % {
+			'errorNumber': errorNo,
+			'fileUrl': fileUrl.replace ('"', '\\"'),
+			'fileName': fileName.replace ( '"', '\\"' ) ,
+			'customMsg': customMsg.replace ( '"', '\\"' ),
+			}


Property changes on: announcement/trunk/src/main/webapp/fckeditor/editor/filemanager/connectors/py/fckoutput.py
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/webapp/fckeditor/editor/filemanager/connectors/py/fckutil.py
===================================================================
--- announcement/trunk/src/main/webapp/fckeditor/editor/filemanager/connectors/py/fckutil.py	                        (rev 0)
+++ announcement/trunk/src/main/webapp/fckeditor/editor/filemanager/connectors/py/fckutil.py	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,126 @@
+#!/usr/bin/env python
+
+"""
+FCKeditor - The text editor for Internet - http://www.fckeditor.net
+Copyright (C) 2003-2008 Frederico Caldeira Knabben
+
+== BEGIN LICENSE ==
+
+Licensed under the terms of any of the following licenses at your
+choice:
+
+- GNU General Public License Version 2 or later (the "GPL")
+http://www.gnu.org/licenses/gpl.html
+
+- GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+http://www.gnu.org/licenses/lgpl.html
+
+- Mozilla Public License Version 1.1 or later (the "MPL")
+http://www.mozilla.org/MPL/MPL-1.1.html
+
+== END LICENSE ==
+
+Utility functions for the File Manager Connector for Python
+
+"""
+
+import string, re
+import os
+import config as Config
+
+# Generic manipulation functions
+
+def removeExtension(fileName):
+	index = fileName.rindex(".")
+	newFileName = fileName[0:index]
+	return newFileName
+
+def getExtension(fileName):
+	index = fileName.rindex(".") + 1
+	fileExtension = fileName[index:]
+	return fileExtension
+
+def removeFromStart(string, char):
+	return string.lstrip(char)
+
+def removeFromEnd(string, char):
+	return string.rstrip(char)
+
+# Path functions
+
+def combinePaths( basePath, folder ):
+	return removeFromEnd( basePath, '/' ) + '/' + removeFromStart( folder, '/' )
+
+def getFileName(filename):
+	" Purpose: helper function to extrapolate the filename "
+	for splitChar in ["/", "\\"]:
+		array = filename.split(splitChar)
+		if (len(array) > 1):
+			filename = array[-1]
+	return filename
+
+def sanitizeFolderName( newFolderName ):
+	"Do a cleanup of the folder name to avoid possible problems"
+	# Remove . \ / | : ? * " < > and control characters
+	return re.sub( '(?u)\\.|\\\\|\\/|\\||\\:|\\?|\\*|"|<|>|[^\u0000-\u001f\u007f-\u009f]', '_', newFolderName )
+
+def sanitizeFileName( newFileName ):
+	"Do a cleanup of the file name to avoid possible problems"
+	# Replace dots in the name with underscores (only one dot can be there... security issue).
+	if ( Config.ForceSingleExtension ): # remove dots
+		newFileName = re.sub ( '/\\.(?![^.]*$)/', '_', newFileName ) ;
+	newFileName = newFileName.replace('\\','/')		# convert windows to unix path
+	newFileName = os.path.basename (newFileName)	# strip directories
+	# Remove \ / | : ? *
+	return re.sub ( '(?u)/\\\\|\\/|\\||\\:|\\?|\\*|"|<|>|[^\u0000-\u001f\u007f-\u009f]/', '_', newFileName )
+
+def getCurrentFolder(currentFolder):
+	if not currentFolder:
+		currentFolder = '/'
+
+	# Check the current folder syntax (must begin and end with a slash).
+	if (currentFolder[-1] <> "/"):
+		currentFolder += "/"
+	if (currentFolder[0] <> "/"):
+		currentFolder = "/" + currentFolder
+
+	# Ensure the folder path has no double-slashes
+	while '//' in currentFolder:
+		currentFolder = currentFolder.replace('//','/')
+
+	# Check for invalid folder paths (..)
+	if '..' in currentFolder or '\\' in currentFolder:
+		return None
+
+	return currentFolder
+
+def mapServerPath( environ, url):
+	" Emulate the asp Server.mapPath function. Given an url path return the physical directory that it corresponds to "
+	# This isn't correct but for the moment there's no other solution
+	# If this script is under a virtual directory or symlink it will detect the problem and stop
+	return combinePaths( getRootPath(environ), url )
+
+def mapServerFolder(resourceTypePath, folderPath):
+	return combinePaths ( resourceTypePath  , folderPath )
+
+def getRootPath(environ):
+	"Purpose: returns the root path on the server"
+	# WARNING: this may not be thread safe, and doesn't work w/ VirtualServer/mod_python
+	# Use Config.UserFilesAbsolutePath instead
+
+	if environ.has_key('DOCUMENT_ROOT'):
+		return environ['DOCUMENT_ROOT']
+	else:
+		realPath = os.path.realpath( './' )
+		selfPath = environ['SCRIPT_FILENAME']
+		selfPath = selfPath [ :  selfPath.rfind( '/'  ) ]
+		selfPath = selfPath.replace( '/', os.path.sep)
+
+		position = realPath.find(selfPath)
+
+		# This can check only that this script isn't run from a virtual dir
+		# But it avoids the problems that arise if it isn't checked
+		raise realPath
+		if ( position < 0 or position <> len(realPath) - len(selfPath) or realPath[ : position ]==''):
+			raise Exception('Sorry, can\'t map "UserFilesPath" to a physical path. You must set the "UserFilesAbsolutePath" value in "editor/filemanager/connectors/py/config.py".')
+		return realPath[ : position ]


Property changes on: announcement/trunk/src/main/webapp/fckeditor/editor/filemanager/connectors/py/fckutil.py
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/webapp/fckeditor/editor/filemanager/connectors/py/htaccess.txt
===================================================================
--- announcement/trunk/src/main/webapp/fckeditor/editor/filemanager/connectors/py/htaccess.txt	                        (rev 0)
+++ announcement/trunk/src/main/webapp/fckeditor/editor/filemanager/connectors/py/htaccess.txt	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,23 @@
+# replace the name of this file to .htaccess (if using apache),
+# and set the proper options and paths according your enviroment
+
+Allow from all
+
+# If using mod_python uncomment this:
+PythonPath "[r'C:\Archivos de programa\Apache Software Foundation\Apache2.2\htdocs\fckeditor\editor\filemanager\connectors\py'] + sys.path"
+
+
+# Recomended: WSGI application running with mod_python and modpython_gateway
+SetHandler python-program
+PythonHandler modpython_gateway::handler
+PythonOption wsgi.application wsgi::App
+
+
+# Emulated CGI with mod_python and cgihandler
+#AddHandler mod_python .py
+#PythonHandler mod_python.cgihandler
+
+
+# Plain old CGI
+#Options +ExecCGI
+#AddHandler cgi-script py


Property changes on: announcement/trunk/src/main/webapp/fckeditor/editor/filemanager/connectors/py/htaccess.txt
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/webapp/fckeditor/editor/filemanager/connectors/py/upload.py
===================================================================
--- announcement/trunk/src/main/webapp/fckeditor/editor/filemanager/connectors/py/upload.py	                        (rev 0)
+++ announcement/trunk/src/main/webapp/fckeditor/editor/filemanager/connectors/py/upload.py	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,88 @@
+#!/usr/bin/env python
+
+"""
+FCKeditor - The text editor for Internet - http://www.fckeditor.net
+Copyright (C) 2003-2008 Frederico Caldeira Knabben
+
+== BEGIN LICENSE ==
+
+Licensed under the terms of any of the following licenses at your
+choice:
+
+- GNU General Public License Version 2 or later (the "GPL")
+http://www.gnu.org/licenses/gpl.html
+
+- GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+http://www.gnu.org/licenses/lgpl.html
+
+- Mozilla Public License Version 1.1 or later (the "MPL")
+http://www.mozilla.org/MPL/MPL-1.1.html
+
+== END LICENSE ==
+
+This is the "File Uploader" for Python
+
+"""
+import os
+
+from fckutil import *
+from fckcommands import * 	# default command's implementation
+from fckconnector import FCKeditorConnectorBase # import base connector
+import config as Config
+
+class FCKeditorQuickUpload(	FCKeditorConnectorBase,
+							UploadFileCommandMixin,
+							BaseHttpMixin, BaseHtmlMixin):
+	def doResponse(self):
+		"Main function. Process the request, set headers and return a string as response."
+		# Check if this connector is disabled
+		if not(Config.Enabled):
+			return self.sendUploadResults(1, "This file uploader is disabled. Please check the \"editor/filemanager/connectors/py/config.py\"")
+		command = 'QuickUpload'
+		# The file type (from the QueryString, by default 'File').
+		resourceType  = self.request.get('Type','File')
+		currentFolder = getCurrentFolder(self.request.get("CurrentFolder",""))
+		# Check for invalid paths
+		if currentFolder is None:
+			return self.sendUploadResults(102, '', '', "")
+
+		# Check if it is an allowed command
+		if ( not command in Config.ConfigAllowedCommands ):
+			return self.sendUploadResults( 1, '', '', 'The %s command isn\'t allowed' % command )
+
+		if ( not resourceType in Config.ConfigAllowedTypes  ):
+			return self.sendUploadResults( 1, '', '', 'Invalid type specified' )
+
+		# Setup paths
+		self.userFilesFolder = Config.QuickUploadAbsolutePath[resourceType]
+		self.webUserFilesFolder =  Config.QuickUploadPath[resourceType]
+		if not self.userFilesFolder: # no absolute path given (dangerous...)
+			self.userFilesFolder = mapServerPath(self.environ,
+									self.webUserFilesFolder)
+
+		# Ensure that the directory exists.
+		if not os.path.exists(self.userFilesFolder):
+			try:
+				self.createServerFoldercreateServerFolder( self.userFilesFolder )
+			except:
+				return self.sendError(1, "This connector couldn\'t access to local user\'s files directories.  Please check the UserFilesAbsolutePath in \"editor/filemanager/connectors/py/config.py\" and try again. ")
+
+		# File upload doesn't have to return XML, so intercept here
+		return self.uploadFile(resourceType, currentFolder)
+
+# Running from command line (plain old CGI)
+if __name__ == '__main__':
+	try:
+		# Create a Connector Instance
+		conn = FCKeditorQuickUpload()
+		data = conn.doResponse()
+		for header in conn.headers:
+			if not header is None:
+				print '%s: %s' % header
+		print
+		print data
+	except:
+		print "Content-Type: text/plain"
+		print
+		import cgi
+		cgi.print_exception()


Property changes on: announcement/trunk/src/main/webapp/fckeditor/editor/filemanager/connectors/py/upload.py
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/webapp/fckeditor/editor/filemanager/connectors/py/wsgi.py
===================================================================
--- announcement/trunk/src/main/webapp/fckeditor/editor/filemanager/connectors/py/wsgi.py	                        (rev 0)
+++ announcement/trunk/src/main/webapp/fckeditor/editor/filemanager/connectors/py/wsgi.py	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,58 @@
+#!/usr/bin/env python
+
+"""
+FCKeditor - The text editor for Internet - http://www.fckeditor.net
+Copyright (C) 2003-2008 Frederico Caldeira Knabben
+
+== BEGIN LICENSE ==
+
+Licensed under the terms of any of the following licenses at your
+choice:
+
+ - GNU General Public License Version 2 or later (the "GPL")
+   http://www.gnu.org/licenses/gpl.html
+
+ - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+   http://www.gnu.org/licenses/lgpl.html
+
+ - Mozilla Public License Version 1.1 or later (the "MPL")
+   http://www.mozilla.org/MPL/MPL-1.1.html
+
+== END LICENSE ==
+
+Connector/QuickUpload for Python (WSGI wrapper).
+
+See config.py for configuration settings
+
+"""
+
+from connector import FCKeditorConnector
+from upload import FCKeditorQuickUpload
+
+import cgitb
+from cStringIO import StringIO
+
+# Running from WSGI capable server (recomended)
+def App(environ, start_response):
+	"WSGI entry point. Run the connector"
+	if environ['SCRIPT_NAME'].endswith("connector.py"):
+		conn = FCKeditorConnector(environ)
+	elif environ['SCRIPT_NAME'].endswith("upload.py"):
+		conn = FCKeditorQuickUpload(environ)
+	else:
+		start_response ("200 Ok", [('Content-Type','text/html')])
+		yield "Unknown page requested: "
+		yield environ['SCRIPT_NAME']
+		return
+	try:
+		# run the connector
+		data = conn.doResponse()
+		# Start WSGI response:
+		start_response ("200 Ok", conn.headers)
+		# Send response text
+		yield data
+	except:
+		start_response("500 Internal Server Error",[("Content-type","text/html")])
+		file = StringIO()
+		cgitb.Hook(file = file).handle()
+		yield file.getvalue()


Property changes on: announcement/trunk/src/main/webapp/fckeditor/editor/filemanager/connectors/py/wsgi.py
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/webapp/fckeditor/editor/filemanager/connectors/py/zope.py
===================================================================
--- announcement/trunk/src/main/webapp/fckeditor/editor/filemanager/connectors/py/zope.py	                        (rev 0)
+++ announcement/trunk/src/main/webapp/fckeditor/editor/filemanager/connectors/py/zope.py	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,188 @@
+#!/usr/bin/env python
+
+"""
+FCKeditor - The text editor for Internet - http://www.fckeditor.net
+Copyright (C) 2003-2008 Frederico Caldeira Knabben
+
+== BEGIN LICENSE ==
+
+Licensed under the terms of any of the following licenses at your
+choice:
+
+- GNU General Public License Version 2 or later (the "GPL")
+http://www.gnu.org/licenses/gpl.html
+
+- GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+http://www.gnu.org/licenses/lgpl.html
+
+- Mozilla Public License Version 1.1 or later (the "MPL")
+http://www.mozilla.org/MPL/MPL-1.1.html
+
+== END LICENSE ==
+
+Connector for Python and Zope.
+
+This code was not tested at all.
+It just was ported from pre 2.5 release, so for further reference see
+\editor\filemanager\browser\default\connectors\py\connector.py in previous
+releases.
+
+"""
+
+from fckutil import *
+from connector import *
+import config as Config
+
+class FCKeditorConnectorZope(FCKeditorConnector):
+	"""
+	Zope versiof FCKeditorConnector
+	"""
+	# Allow access (Zope)
+	__allow_access_to_unprotected_subobjects__ = 1
+
+	def __init__(self, context=None):
+		"""
+		Constructor
+		"""
+		FCKeditorConnector.__init__(self, environ=None) # call superclass constructor
+		# Instance Attributes
+		self.context = context
+		self.request = FCKeditorRequest(context)
+
+	def getZopeRootContext(self):
+		if self.zopeRootContext is None:
+			self.zopeRootContext = self.context.getPhysicalRoot()
+		return self.zopeRootContext
+
+	def getZopeUploadContext(self):
+		if self.zopeUploadContext is None:
+			folderNames = self.userFilesFolder.split("/")
+			c = self.getZopeRootContext()
+			for folderName in folderNames:
+				if (folderName <> ""):
+					c = c[folderName]
+			self.zopeUploadContext = c
+		return self.zopeUploadContext
+
+	def setHeader(self, key, value):
+		self.context.REQUEST.RESPONSE.setHeader(key, value)
+
+	def getFolders(self, resourceType, currentFolder):
+		# Open the folders node
+		s = ""
+		s += """<Folders>"""
+		zopeFolder = self.findZopeFolder(resourceType, currentFolder)
+		for (name, o) in zopeFolder.objectItems(["Folder"]):
+			s += """<Folder name="%s" />""" % (
+					convertToXmlAttribute(name)
+					)
+		# Close the folders node
+		s += """</Folders>"""
+		return s
+
+	def getZopeFoldersAndFiles(self, resourceType, currentFolder):
+		folders = self.getZopeFolders(resourceType, currentFolder)
+		files = self.getZopeFiles(resourceType, currentFolder)
+		s = folders + files
+		return s
+
+	def getZopeFiles(self, resourceType, currentFolder):
+		# Open the files node
+		s = ""
+		s += """<Files>"""
+		zopeFolder = self.findZopeFolder(resourceType, currentFolder)
+		for (name, o) in zopeFolder.objectItems(["File","Image"]):
+			s += """<File name="%s" size="%s" />""" % (
+					convertToXmlAttribute(name),
+					((o.get_size() / 1024) + 1)
+					)
+		# Close the files node
+		s += """</Files>"""
+		return s
+
+	def findZopeFolder(self, resourceType, folderName):
+		# returns the context of the resource / folder
+		zopeFolder = self.getZopeUploadContext()
+		folderName = self.removeFromStart(folderName, "/")
+		folderName = self.removeFromEnd(folderName, "/")
+		if (resourceType <> ""):
+			try:
+				zopeFolder = zopeFolder[resourceType]
+			except:
+				zopeFolder.manage_addProduct["OFSP"].manage_addFolder(id=resourceType, title=resourceType)
+				zopeFolder = zopeFolder[resourceType]
+		if (folderName <> ""):
+			folderNames = folderName.split("/")
+			for folderName in folderNames:
+				zopeFolder = zopeFolder[folderName]
+		return zopeFolder
+
+	def createFolder(self, resourceType, currentFolder):
+		# Find out where we are
+		zopeFolder = self.findZopeFolder(resourceType, currentFolder)
+		errorNo = 0
+		errorMsg = ""
+		if self.request.has_key("NewFolderName"):
+			newFolder = self.request.get("NewFolderName", None)
+			zopeFolder.manage_addProduct["OFSP"].manage_addFolder(id=newFolder, title=newFolder)
+		else:
+			errorNo = 102
+		return self.sendErrorNode ( errorNo, errorMsg )
+
+	def uploadFile(self, resourceType, currentFolder, count=None):
+		zopeFolder = self.findZopeFolder(resourceType, currentFolder)
+		file = self.request.get("NewFile", None)
+		fileName = self.getFileName(file.filename)
+		fileNameOnly = self.removeExtension(fileName)
+		fileExtension = self.getExtension(fileName).lower()
+		if (count):
+			nid = "%s.%s.%s" % (fileNameOnly, count, fileExtension)
+		else:
+			nid = fileName
+		title = nid
+		try:
+			zopeFolder.manage_addProduct['OFSP'].manage_addFile(
+					id=nid,
+					title=title,
+					file=file.read()
+					)
+		except:
+			if (count):
+				count += 1
+			else:
+				count = 1
+			return self.zopeFileUpload(resourceType, currentFolder, count)
+		return self.sendUploadResults( 0 )
+
+class FCKeditorRequest(object):
+	"A wrapper around the request object"
+	def __init__(self, context=None):
+		r = context.REQUEST
+		self.request = r
+
+	def has_key(self, key):
+		return self.request.has_key(key)
+
+	def get(self, key, default=None):
+		return self.request.get(key, default)
+
+"""
+Running from zope, you will need to modify this connector.
+If you have uploaded the FCKeditor into Zope (like me), you need to
+move this connector out of Zope, and replace the "connector" with an
+alias as below.  The key to it is to pass the Zope context in, as
+we then have a like to the Zope context.
+
+## Script (Python) "connector.py"
+##bind container=container
+##bind context=context
+##bind namespace=
+##bind script=script
+##bind subpath=traverse_subpath
+##parameters=*args, **kws
+##title=ALIAS
+##
+
+import Products.zope as connector
+return connector.FCKeditorConnectorZope(context=context).doResponse()
+"""


Property changes on: announcement/trunk/src/main/webapp/fckeditor/editor/filemanager/connectors/py/zope.py
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/webapp/fckeditor/editor/filemanager/connectors/test.html
===================================================================
--- announcement/trunk/src/main/webapp/fckeditor/editor/filemanager/connectors/test.html	                        (rev 0)
+++ announcement/trunk/src/main/webapp/fckeditor/editor/filemanager/connectors/test.html	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,210 @@
+<!--
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2008 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * Test page for the File Browser connectors.
+-->
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+	<title>FCKeditor - Connectors Tests</title>
+	<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+	<script type="text/javascript">
+
+// Automatically detect the correct document.domain (#1919).
+(function()
+{
+	var d = document.domain ;
+
+	while ( true )
+	{
+		// Test if we can access a parent property.
+		try
+		{
+			var test = window.opener.document.domain ;
+			break ;
+		}
+		catch( e ) {}
+
+		// Remove a domain part: www.mytest.example.com => mytest.example.com => example.com ...
+		d = d.replace( /.*?(?:\.|$)/, '' ) ;
+
+		if ( d.length == 0 )
+			break ;		// It was not able to detect the domain.
+
+		try
+		{
+			document.domain = d ;
+		}
+		catch (e)
+		{
+			break ;
+		}
+	}
+})() ;
+
+function BuildBaseUrl( command )
+{
+	var sUrl =
+		document.getElementById('cmbConnector').value +
+		'?Command=' + command +
+		'&Type=' + document.getElementById('cmbType').value +
+		'&CurrentFolder=' + encodeURIComponent(document.getElementById('txtFolder').value) ;
+
+	return sUrl ;
+}
+
+function SetFrameUrl( url )
+{
+	document.getElementById('eRunningFrame').src = url ;
+
+	document.getElementById('eUrl').innerHTML = url ;
+}
+
+function GetFolders()
+{
+	SetFrameUrl( BuildBaseUrl( 'GetFolders' ) ) ;
+	return false ;
+}
+
+function GetFoldersAndFiles()
+{
+	SetFrameUrl( BuildBaseUrl( 'GetFoldersAndFiles' ) ) ;
+	return false ;
+}
+
+function CreateFolder()
+{
+	var sFolder = prompt( 'Type the folder name:', 'Test Folder' ) ;
+
+	if ( ! sFolder )
+		return false ;
+
+	var sUrl = BuildBaseUrl( 'CreateFolder' ) ;
+	sUrl += '&NewFolderName=' + encodeURIComponent( sFolder ) ;
+
+	SetFrameUrl( sUrl ) ;
+	return false ;
+}
+
+function OnUploadCompleted( errorNumber, fileName )
+{
+	switch ( errorNumber )
+	{
+		case 0 :
+			alert( 'File uploaded with no errors' ) ;
+			break ;
+		case 201 :
+			GetFoldersAndFiles() ;
+			alert( 'A file with the same name is already available. The uploaded file has been renamed to "' + fileName + '"' ) ;
+			break ;
+		case 202 :
+			alert( 'Invalid file' ) ;
+			break ;
+		default :
+			alert( 'Error on file upload. Error number: ' + errorNumber ) ;
+			break ;
+	}
+}
+
+this.frames.frmUpload = this ;
+
+function SetAction()
+{
+	var sUrl = BuildBaseUrl( 'FileUpload' ) ;
+	document.getElementById('eUrl').innerHTML = sUrl ;
+	document.getElementById('frmUpload').action = sUrl ;
+}
+
+	</script>
+</head>
+<body>
+	<table height="100%" cellspacing="0" cellpadding="0" width="100%" border="0">
+		<tr>
+			<td>
+				<table cellspacing="0" cellpadding="0" border="0">
+					<tr>
+						<td>
+							Connector:<br />
+							<select id="cmbConnector" name="cmbConnector">
+								<option value="asp/connector.asp" selected="selected">ASP</option>
+								<option value="aspx/connector.aspx">ASP.Net</option>
+								<option value="cfm/connector.cfm">ColdFusion</option>
+								<option value="lasso/connector.lasso">Lasso</option>
+								<option value="perl/connector.cgi">Perl</option>
+								<option value="php/connector.php">PHP</option>
+								<option value="py/connector.py">Python</option>
+							</select>
+						</td>
+						<td>
+							&nbsp;&nbsp;&nbsp;</td>
+						<td>
+							Current Folder<br />
+							<input id="txtFolder" type="text" value="/" name="txtFolder" /></td>
+						<td>
+							&nbsp;&nbsp;&nbsp;</td>
+						<td>
+							Resource Type<br />
+							<select id="cmbType" name="cmbType">
+								<option value="File" selected="selected">File</option>
+								<option value="Image">Image</option>
+								<option value="Flash">Flash</option>
+								<option value="Media">Media</option>
+								<option value="Invalid">Invalid Type (for testing)</option>
+							</select>
+						</td>
+					</tr>
+				</table>
+				<br />
+				<table cellspacing="0" cellpadding="0" border="0">
+					<tr>
+						<td valign="top">
+							<a href="#" onclick="GetFolders();">Get Folders</a></td>
+						<td>
+							&nbsp;&nbsp;&nbsp;</td>
+						<td valign="top">
+							<a href="#" onclick="GetFoldersAndFiles();">Get Folders and Files</a></td>
+						<td>
+							&nbsp;&nbsp;&nbsp;</td>
+						<td valign="top">
+							<a href="#" onclick="CreateFolder();">Create Folder</a></td>
+						<td>
+							&nbsp;&nbsp;&nbsp;</td>
+						<td valign="top">
+							<form id="frmUpload" action="" target="eRunningFrame" method="post" enctype="multipart/form-data">
+								File Upload<br />
+								<input id="txtFileUpload" type="file" name="NewFile" />
+								<input type="submit" value="Upload" onclick="SetAction();" />
+							</form>
+						</td>
+					</tr>
+				</table>
+				<br />
+				URL: <span id="eUrl"></span>
+			</td>
+		</tr>
+		<tr>
+			<td height="100%" valign="top">
+				<iframe id="eRunningFrame" src="javascript:void(0)" name="eRunningFrame" width="100%"
+					height="100%"></iframe>
+			</td>
+		</tr>
+	</table>
+</body>
+</html>


Property changes on: announcement/trunk/src/main/webapp/fckeditor/editor/filemanager/connectors/test.html
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/webapp/fckeditor/editor/filemanager/connectors/uploadtest.html
===================================================================
--- announcement/trunk/src/main/webapp/fckeditor/editor/filemanager/connectors/uploadtest.html	                        (rev 0)
+++ announcement/trunk/src/main/webapp/fckeditor/editor/filemanager/connectors/uploadtest.html	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,192 @@
+<!--
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2008 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * Test page for the "File Uploaders".
+-->
+<html>
+	<head>
+		<title>FCKeditor - Uploaders Tests</title>
+		<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+		<script type="text/javascript">
+
+// Automatically detect the correct document.domain (#1919).
+(function()
+{
+	var d = document.domain ;
+
+	while ( true )
+	{
+		// Test if we can access a parent property.
+		try
+		{
+			var test = window.opener.document.domain ;
+			break ;
+		}
+		catch( e ) {}
+
+		// Remove a domain part: www.mytest.example.com => mytest.example.com => example.com ...
+		d = d.replace( /.*?(?:\.|$)/, '' ) ;
+
+		if ( d.length == 0 )
+			break ;		// It was not able to detect the domain.
+
+		try
+		{
+			document.domain = d ;
+		}
+		catch (e)
+		{
+			break ;
+		}
+	}
+})() ;
+
+function SendFile()
+{
+	var sUploaderUrl = cmbUploaderUrl.value ;
+
+	if ( sUploaderUrl.length == 0 )
+		sUploaderUrl = txtCustomUrl.value ;
+
+	if ( sUploaderUrl.length == 0 )
+	{
+		alert( 'Please provide your custom URL or select a default one' ) ;
+		return ;
+	}
+
+	eURL.innerHTML = sUploaderUrl ;
+	txtUrl.value = '' ;
+
+	var date = new Date()
+
+	frmUpload.action = sUploaderUrl + '?time=' + date.getTime();
+	if (document.getElementById('cmbType').value) {
+		frmUpload.action = frmUpload.action + '&Type='+document.getElementById('cmbType').value;
+	}
+	if (document.getElementById('CurrentFolder').value) {
+		frmUpload.action = frmUpload.action + '&CurrentFolder='+document.getElementById('CurrentFolder').value;
+	}
+	frmUpload.submit() ;
+}
+
+function OnUploadCompleted( errorNumber, fileUrl, fileName, customMsg )
+{
+	switch ( errorNumber )
+	{
+		case 0 :	// No errors
+			txtUrl.value = fileUrl ;
+			alert( 'File uploaded with no errors' ) ;
+			break ;
+		case 1 :	// Custom error
+			alert( customMsg ) ;
+			break ;
+		case 10 :	// Custom warning
+			txtUrl.value = fileUrl ;
+			alert( customMsg ) ;
+			break ;
+		case 201 :
+			txtUrl.value = fileUrl ;
+			alert( 'A file with the same name is already available. The uploaded file has been renamed to "' + fileName + '"' ) ;
+			break ;
+		case 202 :
+			alert( 'Invalid file' ) ;
+			break ;
+		case 203 :
+			alert( "Security error. You probably don't have enough permissions to upload. Please check your server." ) ;
+			break ;
+		default :
+			alert( 'Error on file upload. Error number: ' + errorNumber ) ;
+			break ;
+	}
+}
+
+		</script>
+	</head>
+	<body>
+		<table cellSpacing="0" cellPadding="0" width="100%" border="0" height="100%">
+			<tr>
+				<td>
+					<table cellSpacing="0" cellPadding="0" width="100%" border="0">
+						<tr>
+							<td nowrap>
+								Select the "File Uploader" to use: <br>
+								<select id="cmbUploaderUrl">
+									<option selected value="asp/upload.asp">ASP</option>
+									<option value="aspx/upload.aspx">ASP.Net</option>
+									<option value="cfm/upload.cfm">ColdFusion</option>
+									<option value="lasso/upload.lasso">Lasso</option>
+									<option value="perl/upload.cgi">Perl</option>
+									<option value="php/upload.php">PHP</option>
+									<option value="py/upload.py">Python</option>
+									<option value="">(Custom)</option>
+								</select>
+							</td>
+						<td>
+							Resource Type<br />
+							<select id="cmbType" name="cmbType">
+								<option value="">None</option>
+								<option value="File">File</option>
+								<option value="Image">Image</option>
+								<option value="Flash">Flash</option>
+								<option value="Media">Media</option>
+								<option value="Invalid">Invalid Type (for testing)</option>
+							</select>
+						</td>
+						<td>
+						Current Folder: <br>
+						<input type="text" name="CurrentFolder" id="CurrentFolder" value="/">
+						</td>
+							<td nowrap>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</td>
+							<td width="100%">
+								Custom Uploader URL:<BR>
+								<input id="txtCustomUrl" style="WIDTH: 100%; BACKGROUND-COLOR: #dcdcdc" disabled type="text">
+							</td>
+						</tr>
+					</table>
+					<br>
+					<table cellSpacing="0" cellPadding="0" width="100%" border="0">
+						<tr>
+							<td noWrap>
+								<form id="frmUpload" target="UploadWindow" enctype="multipart/form-data" action="" method="post">
+									Upload a new file:<br>
+									<input type="file" name="NewFile"><br>
+
+									<input type="button" value="Send it to the Server" onclick="SendFile();">
+								</form>
+							</td>
+							<td style="WIDTH: 16px">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</td>
+							<td vAlign="top" width="100%">
+								Uploaded File URL:<br>
+								<INPUT id="txtUrl" style="WIDTH: 100%" readonly type="text">
+							</td>
+						</tr>
+					</table>
+					<br>
+					Post URL: <span id="eURL">&nbsp;</span>
+				</td>
+			</tr>
+			<tr>
+				<td height="100%">
+					<iframe name="UploadWindow" width="100%" height="100%" src="javascript:void(0)"></iframe>
+				</td>
+			</tr>
+		</table>
+	</body>
+</html>


Property changes on: announcement/trunk/src/main/webapp/fckeditor/editor/filemanager/connectors/uploadtest.html
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/webapp/fckeditor/editor/images/anchor.gif
===================================================================
(Binary files differ)


Property changes on: announcement/trunk/src/main/webapp/fckeditor/editor/images/anchor.gif
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: announcement/trunk/src/main/webapp/fckeditor/editor/images/arrow_ltr.gif
===================================================================
(Binary files differ)


Property changes on: announcement/trunk/src/main/webapp/fckeditor/editor/images/arrow_ltr.gif
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: announcement/trunk/src/main/webapp/fckeditor/editor/images/arrow_rtl.gif
===================================================================
(Binary files differ)


Property changes on: announcement/trunk/src/main/webapp/fckeditor/editor/images/arrow_rtl.gif
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: announcement/trunk/src/main/webapp/fckeditor/editor/images/smiley/msn/angel_smile.gif
===================================================================
(Binary files differ)


Property changes on: announcement/trunk/src/main/webapp/fckeditor/editor/images/smiley/msn/angel_smile.gif
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: announcement/trunk/src/main/webapp/fckeditor/editor/images/smiley/msn/angry_smile.gif
===================================================================
(Binary files differ)


Property changes on: announcement/trunk/src/main/webapp/fckeditor/editor/images/smiley/msn/angry_smile.gif
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: announcement/trunk/src/main/webapp/fckeditor/editor/images/smiley/msn/broken_heart.gif
===================================================================
(Binary files differ)


Property changes on: announcement/trunk/src/main/webapp/fckeditor/editor/images/smiley/msn/broken_heart.gif
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: announcement/trunk/src/main/webapp/fckeditor/editor/images/smiley/msn/cake.gif
===================================================================
(Binary files differ)


Property changes on: announcement/trunk/src/main/webapp/fckeditor/editor/images/smiley/msn/cake.gif
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: announcement/trunk/src/main/webapp/fckeditor/editor/images/smiley/msn/confused_smile.gif
===================================================================
(Binary files differ)


Property changes on: announcement/trunk/src/main/webapp/fckeditor/editor/images/smiley/msn/confused_smile.gif
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: announcement/trunk/src/main/webapp/fckeditor/editor/images/smiley/msn/cry_smile.gif
===================================================================
(Binary files differ)


Property changes on: announcement/trunk/src/main/webapp/fckeditor/editor/images/smiley/msn/cry_smile.gif
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: announcement/trunk/src/main/webapp/fckeditor/editor/images/smiley/msn/devil_smile.gif
===================================================================
(Binary files differ)


Property changes on: announcement/trunk/src/main/webapp/fckeditor/editor/images/smiley/msn/devil_smile.gif
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: announcement/trunk/src/main/webapp/fckeditor/editor/images/smiley/msn/embaressed_smile.gif
===================================================================
(Binary files differ)


Property changes on: announcement/trunk/src/main/webapp/fckeditor/editor/images/smiley/msn/embaressed_smile.gif
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: announcement/trunk/src/main/webapp/fckeditor/editor/images/smiley/msn/envelope.gif
===================================================================
(Binary files differ)


Property changes on: announcement/trunk/src/main/webapp/fckeditor/editor/images/smiley/msn/envelope.gif
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: announcement/trunk/src/main/webapp/fckeditor/editor/images/smiley/msn/heart.gif
===================================================================
(Binary files differ)


Property changes on: announcement/trunk/src/main/webapp/fckeditor/editor/images/smiley/msn/heart.gif
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: announcement/trunk/src/main/webapp/fckeditor/editor/images/smiley/msn/kiss.gif
===================================================================
(Binary files differ)


Property changes on: announcement/trunk/src/main/webapp/fckeditor/editor/images/smiley/msn/kiss.gif
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: announcement/trunk/src/main/webapp/fckeditor/editor/images/smiley/msn/lightbulb.gif
===================================================================
(Binary files differ)


Property changes on: announcement/trunk/src/main/webapp/fckeditor/editor/images/smiley/msn/lightbulb.gif
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: announcement/trunk/src/main/webapp/fckeditor/editor/images/smiley/msn/omg_smile.gif
===================================================================
(Binary files differ)


Property changes on: announcement/trunk/src/main/webapp/fckeditor/editor/images/smiley/msn/omg_smile.gif
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: announcement/trunk/src/main/webapp/fckeditor/editor/images/smiley/msn/regular_smile.gif
===================================================================
(Binary files differ)


Property changes on: announcement/trunk/src/main/webapp/fckeditor/editor/images/smiley/msn/regular_smile.gif
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: announcement/trunk/src/main/webapp/fckeditor/editor/images/smiley/msn/sad_smile.gif
===================================================================
(Binary files differ)


Property changes on: announcement/trunk/src/main/webapp/fckeditor/editor/images/smiley/msn/sad_smile.gif
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: announcement/trunk/src/main/webapp/fckeditor/editor/images/smiley/msn/shades_smile.gif
===================================================================
(Binary files differ)


Property changes on: announcement/trunk/src/main/webapp/fckeditor/editor/images/smiley/msn/shades_smile.gif
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: announcement/trunk/src/main/webapp/fckeditor/editor/images/smiley/msn/teeth_smile.gif
===================================================================
(Binary files differ)


Property changes on: announcement/trunk/src/main/webapp/fckeditor/editor/images/smiley/msn/teeth_smile.gif
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: announcement/trunk/src/main/webapp/fckeditor/editor/images/smiley/msn/thumbs_down.gif
===================================================================
(Binary files differ)


Property changes on: announcement/trunk/src/main/webapp/fckeditor/editor/images/smiley/msn/thumbs_down.gif
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: announcement/trunk/src/main/webapp/fckeditor/editor/images/smiley/msn/thumbs_up.gif
===================================================================
(Binary files differ)


Property changes on: announcement/trunk/src/main/webapp/fckeditor/editor/images/smiley/msn/thumbs_up.gif
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: announcement/trunk/src/main/webapp/fckeditor/editor/images/smiley/msn/tounge_smile.gif
===================================================================
(Binary files differ)


Property changes on: announcement/trunk/src/main/webapp/fckeditor/editor/images/smiley/msn/tounge_smile.gif
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: announcement/trunk/src/main/webapp/fckeditor/editor/images/smiley/msn/whatchutalkingabout_smile.gif
===================================================================
(Binary files differ)


Property changes on: announcement/trunk/src/main/webapp/fckeditor/editor/images/smiley/msn/whatchutalkingabout_smile.gif
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: announcement/trunk/src/main/webapp/fckeditor/editor/images/smiley/msn/wink_smile.gif
===================================================================
(Binary files differ)


Property changes on: announcement/trunk/src/main/webapp/fckeditor/editor/images/smiley/msn/wink_smile.gif
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: announcement/trunk/src/main/webapp/fckeditor/editor/images/spacer.gif
===================================================================
(Binary files differ)


Property changes on: announcement/trunk/src/main/webapp/fckeditor/editor/images/spacer.gif
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: announcement/trunk/src/main/webapp/fckeditor/editor/js/fckadobeair.js
===================================================================
--- announcement/trunk/src/main/webapp/fckeditor/editor/js/fckadobeair.js	                        (rev 0)
+++ announcement/trunk/src/main/webapp/fckeditor/editor/js/fckadobeair.js	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,176 @@
+/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2008 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * Compatibility code for Adobe AIR.
+ */
+
+if ( FCKBrowserInfo.IsAIR )
+{
+	var FCKAdobeAIR = (function()
+	{
+		/*
+		 * ### Private functions.
+		 */
+
+		var getDocumentHead = function( doc )
+		{
+			var head ;
+			var heads = doc.getElementsByTagName( 'head' ) ;
+
+			if( heads && heads[0] )
+				head = heads[0] ;
+			else
+			{
+				head = doc.createElement( 'head' ) ;
+				doc.documentElement.insertBefore( head, doc.documentElement.firstChild ) ;
+			}
+
+			return head ;
+		} ;
+
+		/*
+		 * ### Public interface.
+		 */
+		return {
+			FCKeditorAPI_Evaluate : function( parentWindow, script )
+			{
+				// TODO : This one doesn't work always. The parent window will
+				// point to an anonymous function in this window. If this
+				// window is destroyied the parent window will be pointing to
+				// an invalid reference.
+
+				// Evaluate the script in this window.
+				eval( script ) ;
+
+				// Point the FCKeditorAPI property of the parent window to the
+				// local reference.
+				parentWindow.FCKeditorAPI = window.FCKeditorAPI ;
+			},
+
+			EditingArea_Start : function( doc, html )
+			{
+				// Get the HTML for the <head>.
+				var headInnerHtml = html.match( /<head>([\s\S]*)<\/head>/i )[1] ;
+
+				if ( headInnerHtml && headInnerHtml.length > 0 )
+				{
+					// Inject the <head> HTML inside a <div>.
+					// Do that before getDocumentHead because WebKit moves
+					// <link css> elements to the <head> at this point.
+					var div = doc.createElement( 'div' ) ;
+					div.innerHTML = headInnerHtml ;
+
+					// Move the <div> nodes to <head>.
+					FCKDomTools.MoveChildren( div, getDocumentHead( doc ) ) ;
+				}
+
+				doc.body.innerHTML = html.match( /<body>([\s\S]*)<\/body>/i )[1] ;
+
+				//prevent clicking on hyperlinks and navigating away
+				doc.addEventListener('click', function( ev )
+					{
+						ev.preventDefault() ;
+						ev.stopPropagation() ;
+					}, true ) ;
+			},
+
+			Panel_Contructor : function( doc, baseLocation )
+			{
+				var head = getDocumentHead( doc ) ;
+
+				// Set the <base> href.
+				head.appendChild( doc.createElement('base') ).href = baseLocation ;
+
+				doc.body.style.margin	= '0px' ;
+				doc.body.style.padding	= '0px' ;
+			},
+
+			ToolbarSet_GetOutElement : function( win, outMatch )
+			{
+				var toolbarTarget = win.parent ;
+
+				var targetWindowParts = outMatch[1].split( '.' ) ;
+				while ( targetWindowParts.length > 0 )
+				{
+					var part = targetWindowParts.shift() ;
+					if ( part.length > 0 )
+						toolbarTarget = toolbarTarget[ part ] ;
+				}
+
+				toolbarTarget = toolbarTarget.document.getElementById( outMatch[2] ) ;
+			},
+
+			ToolbarSet_InitOutFrame : function( doc )
+			{
+				var head = getDocumentHead( doc ) ;
+
+				head.appendChild( doc.createElement('base') ).href = window.document.location ;
+
+				var targetWindow = doc.defaultView;
+
+				targetWindow.adjust = function()
+				{
+					targetWindow.frameElement.height = doc.body.scrollHeight;
+				} ;
+
+				targetWindow.onresize = targetWindow.adjust ;
+				targetWindow.setTimeout( targetWindow.adjust, 0 ) ;
+
+				doc.body.style.overflow = 'hidden';
+				doc.body.innerHTML = document.getElementById( 'xToolbarSpace' ).innerHTML ;
+			}
+		} ;
+	})();
+
+	/*
+	 * ### Overrides
+	 */
+	( function()
+	{
+		// Save references for override reuse.
+		var _Original_FCKPanel_Window_OnFocus	= FCKPanel_Window_OnFocus ;
+		var _Original_FCKPanel_Window_OnBlur	= FCKPanel_Window_OnBlur ;
+		var _Original_FCK_StartEditor			= FCK.StartEditor ;
+
+		FCKPanel_Window_OnFocus = function( e, panel )
+		{
+			// Call the original implementation.
+			_Original_FCKPanel_Window_OnFocus.call( this, e, panel ) ;
+
+			if ( panel._focusTimer )
+				clearTimeout( panel._focusTimer ) ;
+		}
+
+		FCKPanel_Window_OnBlur = function( e, panel )
+		{
+			// Delay the execution of the original function.
+			panel._focusTimer = FCKTools.SetTimeout( _Original_FCKPanel_Window_OnBlur, 100, this, [ e, panel ] ) ;
+		}
+
+		FCK.StartEditor = function()
+		{
+			// Force pointing to the CSS files instead of using the inline CSS cached styles.
+			window.FCK_InternalCSS			= FCKConfig.BasePath + 'css/fck_internal.css' ;
+			window.FCK_ShowTableBordersCSS	= FCKConfig.BasePath + 'css/fck_showtableborders_gecko.css' ;
+
+			_Original_FCK_StartEditor.apply( this, arguments ) ;
+		}
+	})();
+}


Property changes on: announcement/trunk/src/main/webapp/fckeditor/editor/js/fckadobeair.js
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/webapp/fckeditor/editor/js/fckeditorcode_gecko.js
===================================================================
--- announcement/trunk/src/main/webapp/fckeditor/editor/js/fckeditorcode_gecko.js	                        (rev 0)
+++ announcement/trunk/src/main/webapp/fckeditor/editor/js/fckeditorcode_gecko.js	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,108 @@
+/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2008 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * This file has been compressed for better performance. The original source
+ * can be found at "editor/_source".
+ */
+
+var FCK_STATUS_NOTLOADED=window.parent.FCK_STATUS_NOTLOADED=0;var FCK_STATUS_ACTIVE=window.parent.FCK_STATUS_ACTIVE=1;var FCK_STATUS_COMPLETE=window.parent.FCK_STATUS_COMPLETE=2;var FCK_TRISTATE_OFF=window.parent.FCK_TRISTATE_OFF=0;var FCK_TRISTATE_ON=window.parent.FCK_TRISTATE_ON=1;var FCK_TRISTATE_DISABLED=window.parent.FCK_TRISTATE_DISABLED=-1;var FCK_UNKNOWN=window.parent.FCK_UNKNOWN=-9;var FCK_TOOLBARITEM_ONLYICON=window.parent.FCK_TOOLBARITEM_ONLYICON=0;var FCK_TOOLBARITEM_ONLYTEXT=window.parent.FCK_TOOLBARITEM_ONLYTEXT=1;var FCK_TOOLBARITEM_ICONTEXT=window.parent.FCK_TOOLBARITEM_ICONTEXT=2;var FCK_EDITMODE_WYSIWYG=window.parent.FCK_EDITMODE_WYSIWYG=0;var FCK_EDITMODE_SOURCE=window.parent.FCK_EDITMODE_SOURCE=1;var FCK_IMAGES_PATH='images/';var FCK_SPACER_PATH='images/spacer.gif';var CTRL=1000;var SHIFT=2000;var ALT=4000;var FCK_STYLE_BLOCK=0;var FCK_STYLE_INLINE=1;var FCK_STYLE_OBJECT=2;
+String.prototype.Contains=function(A){return (this.indexOf(A)>-1);};String.prototype.Equals=function(){var A=arguments;if (A.length==1&&A[0].pop) A=A[0];for (var i=0;i<A.length;i++){if (this==A[i]) return true;};return false;};String.prototype.IEquals=function(){var A=this.toUpperCase();var B=arguments;if (B.length==1&&B[0].pop) B=B[0];for (var i=0;i<B.length;i++){if (A==B[i].toUpperCase()) return true;};return false;};String.prototype.ReplaceAll=function(A,B){var C=this;for (var i=0;i<A.length;i++){C=C.replace(A[i],B[i]);};return C;};String.prototype.StartsWith=function(A){return (this.substr(0,A.length)==A);};String.prototype.EndsWith=function(A,B){var C=this.length;var D=A.length;if (D>C) return false;if (B){var E=new RegExp(A+'$','i');return E.test(this);}else return (D==0||this.substr(C-D,D)==A);};String.prototype.Remove=function(A,B){var s='';if (A>0) s=this.substring(0,A);if (A+B<this.length) s+=this.substring(A+B,this.length);return s;};String.prototype.Trim=function(){return this.replace(/(^[ \t\n\r]*)|([ \t\n\r]*$)/g,'');};String.prototype.LTrim=function(){return this.replace(/^[ \t\n\r]*/g,'');};String.prototype.RTrim=function(){return this.replace(/[ \t\n\r]*$/g,'');};String.prototype.ReplaceNewLineChars=function(A){return this.replace(/\n/g,A);};String.prototype.Replace=function(A,B,C){if (typeof B=='function'){return this.replace(A,function(){return B.apply(C||this,arguments);});}else return this.replace(A,B);};Array.prototype.AddItem=function(A){var i=this.length;this[i]=A;return i;};Array.prototype.IndexOf=function(A){for (var i=0;i<this.length;i++){if (this[i]==A) return i;};return-1;};
+var s=navigator.userAgent.toLowerCase();var FCKBrowserInfo={IsIE:/*@cc_on!@*/false,IsIE7:/*@cc_on!@*/false && ( parseInt( s.match( /msie (\d+)/)[1],10)>=7),IsIE6:/*@cc_on!@*/false && ( parseInt( s.match( /msie (\d+)/)[1],10)>=6),IsSafari:s.Contains(' applewebkit/'),IsOpera:!!window.opera,IsAIR:s.Contains(' adobeair/'),IsMac:s.Contains('macintosh')};(function(A){A.IsGecko=(navigator.product=='Gecko')&&!A.IsSafari&&!A.IsOpera;A.IsGeckoLike=(A.IsGecko||A.IsSafari||A.IsOpera);if (A.IsGecko){var B=s.match(/rv:(\d+\.\d+)/);var C=B&&parseFloat(B[1]);if (C){A.IsGecko10=(C<1.8);A.IsGecko19=(C>1.8);}}})(FCKBrowserInfo);
+var FCKURLParams={};(function(){var A=document.location.search.substr(1).split('&');for (var i=0;i<A.length;i++){var B=A[i].split('=');var C=decodeURIComponent(B[0]);var D=decodeURIComponent(B[1]);FCKURLParams[C]=D;}})();
+var FCKEvents=function(A){this.Owner=A;this._RegisteredEvents={};};FCKEvents.prototype.AttachEvent=function(A,B){var C;if (!(C=this._RegisteredEvents[A])) this._RegisteredEvents[A]=[B];else{if (C.IndexOf(B)==-1) C.push(B);}};FCKEvents.prototype.FireEvent=function(A,B){var C=true;var D=this._RegisteredEvents[A];if (D){for (var i=0;i<D.length;i++){try{C=(D[i](this.Owner,B)&&C);}catch(e){if (e.number!=-2146823277) throw e;}}};return C;};
+var FCKDataProcessor=function(){};FCKDataProcessor.prototype={ConvertToHtml:function(A){if (FCKConfig.FullPage){FCK.DocTypeDeclaration=A.match(FCKRegexLib.DocTypeTag);if (!FCKRegexLib.HasBodyTag.test(A)) A='<body>'+A+'</body>';if (!FCKRegexLib.HtmlOpener.test(A)) A='<html dir="'+FCKConfig.ContentLangDirection+'">'+A+'</html>';if (!FCKRegexLib.HeadOpener.test(A)) A=A.replace(FCKRegexLib.HtmlOpener,'$&<head><title></title></head>');return A;}else{var B=FCKConfig.DocType+'<html dir="'+FCKConfig.ContentLangDirection+'"';if (FCKBrowserInfo.IsIE&&FCKConfig.DocType.length>0&&!FCKRegexLib.Html4DocType.test(FCKConfig.DocType)) B+=' style="overflow-y: scroll"';B+='><head><title></title></head><body'+FCKConfig.GetBodyAttributes()+'>'+A+'</body></html>';return B;}},ConvertToDataFormat:function(A,B,C,D){var E=FCKXHtml.GetXHTML(A,!B,D);if (C&&FCKRegexLib.EmptyOutParagraph.test(E)) return '';return E;},FixHtml:function(A){return A;}};
+var FCK={Name:FCKURLParams['InstanceName'],Status:0,EditMode:0,Toolbar:null,HasFocus:false,DataProcessor:new FCKDataProcessor(),GetInstanceObject:(function(){var w=window;return function(name){return w[name];}})(),AttachToOnSelectionChange:function(A){this.Events.AttachEvent('OnSelectionChange',A);},GetLinkedFieldValue:function(){return this.LinkedField.value;},GetParentForm:function(){return this.LinkedField.form;},StartupValue:'',IsDirty:function(){if (this.EditMode==1) return (this.StartupValue!=this.EditingArea.Textarea.value);else{if (!this.EditorDocument) return false;return (this.StartupValue!=this.EditorDocument.body.innerHTML);}},ResetIsDirty:function(){if (this.EditMode==1) this.StartupValue=this.EditingArea.Textarea.value;else if (this.EditorDocument.body) this.StartupValue=this.EditorDocument.body.innerHTML;},StartEditor:function(){this.TempBaseTag=FCKConfig.BaseHref.length>0?'<base href="'+FCKConfig.BaseHref+'" _fcktemp="true"></base>':'';var A=FCK.KeystrokeHandler=new FCKKeystrokeHandler();A.OnKeystroke=_FCK_KeystrokeHandler_OnKeystroke;A.SetKeystrokes(FCKConfig.Keystrokes);if (FCKBrowserInfo.IsIE7){if ((CTRL+86/*V*/) in A.Keystrokes) A.SetKeystrokes([CTRL+86,true]);if ((SHIFT+45/*INS*/) in A.Keystrokes) A.SetKeystrokes([SHIFT+45,true]);};A.SetKeystrokes([CTRL+8,true]);this.EditingArea=new FCKEditingArea(document.getElementById('xEditingArea'));this.EditingArea.FFSpellChecker=FCKConfig.FirefoxSpellChecker;this.SetData(this.GetLinkedFieldValue(),true);FCKTools.AddEventListener(document,"keydown",this._TabKeyHandler);this.AttachToOnSelectionChange(_FCK_PaddingNodeListener);if (FCKBrowserInfo.IsGecko) this.AttachToOnSelectionChange(this._ExecCheckEmptyBlock);},Focus:function(){FCK.EditingArea.Focus();},SetStatus:function(A){this.Status=A;if (A==1){FCKFocusManager.AddWindow(window,true);if (FCKBrowserInfo.IsIE) FCKFocusManager.AddWindow(window.frameElement,true);if (FCKConfig.StartupFocus) FCK.Focus();};this.Events.FireEvent('OnStatusChange',A);},FixBody:function(){var A=FCKConfig.EnterMode;if (A!='p'&&A!='div') return;var B=this.EditorDocument;if (!B) return;var C=B.body;if (!C) return;FCKDomTools.TrimNode(C);var D=C.firstChild;var E;while (D){var F=false;switch (D.nodeType){case 1:var G=D.nodeName.toLowerCase();if (!FCKListsLib.BlockElements[G]&&G!='li'&&!D.getAttribute('_fckfakelement')&&D.getAttribute('_moz_dirty')==null) F=true;break;case 3:if (E||D.nodeValue.Trim().length>0) F=true;break;case 8:if (E) F=true;break;};if (F){var H=D.parentNode;if (!E) E=H.insertBefore(B.createElement(A),D);E.appendChild(H.removeChild(D));D=E.nextSibling;}else{if (E){FCKDomTools.TrimNode(E);E=null;};D=D.nextSibling;}};if (E) FCKDomTools.TrimNode(E);},GetData:function(A){if (FCK.EditMode==1) return FCK.EditingArea.Textarea.value;this.FixBody();var B=FCK.EditorDocument;if (!B) return null;var C=FCKConfig.FullPage;var D=FCK.DataProcessor.ConvertToDataFormat(C?B.documentElement:B.body,!C,FCKConfig.IgnoreEmptyParagraphValue,A);D=FCK.ProtectEventsRestore(D);if (FCKBrowserInfo.IsIE) D=D.replace(FCKRegexLib.ToReplace,'$1');if (C){if (FCK.DocTypeDeclaration&&FCK.DocTypeDeclaration.length>0) D=FCK.DocTypeDeclaration+'\n'+D;if (FCK.XmlDeclaration&&FCK.XmlDeclaration.length>0) D=FCK.XmlDeclaration+'\n'+D;};return FCKConfig.ProtectedSource.Revert(D);},UpdateLinkedField:function(){var A=FCK.GetXHTML(FCKConfig.FormatOutput);if (FCKConfig.HtmlEncodeOutput) A=FCKTools.HTMLEncode(A);FCK.LinkedField.value=A;FCK.Events.FireEvent('OnAfterLinkedFieldUpdate');},RegisteredDoubleClickHandlers:{},OnDoubleClick:function(A){var B=FCK.RegisteredDoubleClickHandlers[A.tagName.toUpperCase()];if (B){for (var i=0;i<B.length;i++) B[i](A);};B=FCK.RegisteredDoubleClickHandlers['*'];if (B){for (var i=0;i<B.length;i++) B[i](A);}},RegisterDoubleClickHandler:function(A,B){var C=B||'*';C=C.toUpperCase();var D;if (!(D=FCK.RegisteredDoubleClickHandlers[C])) FCK.RegisteredDoubleClickHandlers[C]=[A];else{if (D.IndexOf(A)==-1) D.push(A);}},OnAfterSetHTML:function(){FCKDocumentProcessor.Process(FCK.EditorDocument);FCKUndo.SaveUndoStep();FCK.Events.FireEvent('OnSelectionChange');FCK.Events.FireEvent('OnAfterSetHTML');},ProtectUrls:function(A){A=A.replace(FCKRegexLib.ProtectUrlsA,'$& _fcksavedurl=$1');A=A.replace(FCKRegexLib.ProtectUrlsImg,'$& _fcksavedurl=$1');A=A.replace(FCKRegexLib.ProtectUrlsArea,'$& _fcksavedurl=$1');return A;},ProtectEvents:function(A){return A.replace(FCKRegexLib.TagsWithEvent,_FCK_ProtectEvents_ReplaceTags);},ProtectEventsRestore:function(A){return A.replace(FCKRegexLib.ProtectedEvents,_FCK_ProtectEvents_RestoreEvents);},ProtectTags:function(A){var B=FCKConfig.ProtectedTags;if (FCKBrowserInfo.IsIE) B+=B.length>0?'|ABBR|XML|EMBED|OBJECT':'ABBR|XML|EMBED|OBJECT';var C;if (B.length>0){C=new RegExp('<('+B+')(?!\w|:)','gi');A=A.replace(C,'<FCK:$1');C=new RegExp('<\/('+B+')>','gi');A=A.replace(C,'<\/FCK:$1>');};B='META';if (FCKBrowserInfo.IsIE) B+='|HR';C=new RegExp('<(('+B+')(?=\\s|>|/)[\\s\\S]*?)/?>','gi');A=A.replace(C,'<FCK:$1 />');return A;},SetData:function(A,B){this.EditingArea.Mode=FCK.EditMode;if (FCKBrowserInfo.IsIE&&FCK.EditorDocument){FCK.EditorDocument.detachEvent("onselectionchange",Doc_OnSelectionChange);};if (FCK.EditMode==0){this._ForceResetIsDirty=(B===true);A=FCKConfig.ProtectedSource.Protect(A);A=FCK.DataProcessor.ConvertToHtml(A);A=A.replace(FCKRegexLib.InvalidSelfCloseTags,'$1></$2>');A=FCK.ProtectEvents(A);A=FCK.ProtectUrls(A);A=FCK.ProtectTags(A);if (FCK.TempBaseTag.length>0&&!FCKRegexLib.HasBaseTag.test(A)) A=A.replace(FCKRegexLib.HeadOpener,'$&'+FCK.TempBaseTag);var C='';if (!FCKConfig.FullPage) C+=_FCK_GetEditorAreaStyleTags();if (FCKBrowserInfo.IsIE) C+=FCK._GetBehaviorsStyle();else if (FCKConfig.ShowBorders) C+=FCKTools.GetStyleHtml(FCK_ShowTableBordersCSS,true);C+=FCKTools.GetStyleHtml(FCK_InternalCSS,true);A=A.replace(FCKRegexLib.HeadCloser,C+'$&');this.EditingArea.OnLoad=_FCK_EditingArea_OnLoad;this.EditingArea.Start(A);}else{FCK.EditorWindow=null;FCK.EditorDocument=null;FCKDomTools.PaddingNode=null;this.EditingArea.OnLoad=null;this.EditingArea.Start(A);this.EditingArea.Textarea._FCKShowContextMenu=true;FCK.EnterKeyHandler=null;if (B) this.ResetIsDirty();FCK.KeystrokeHandler.AttachToElement(this.EditingArea.Textarea);this.EditingArea.Textarea.focus();FCK.Events.FireEvent('OnAfterSetHTML');};if (FCKBrowserInfo.IsGecko) window.onresize();},RedirectNamedCommands:{},ExecuteNamedCommand:function(A,B,C,D){if (!D) FCKUndo.SaveUndoStep();if (!C&&FCK.RedirectNamedCommands[A]!=null) FCK.ExecuteRedirectedNamedCommand(A,B);else{FCK.Focus();FCK.EditorDocument.execCommand(A,false,B);FCK.Events.FireEvent('OnSelectionChange');};if (!D) FCKUndo.SaveUndoStep();},GetNamedCommandState:function(A){try{if (FCKBrowserInfo.IsSafari&&FCK.EditorWindow&&A.IEquals('Paste')) return 0;if (!FCK.EditorDocument.queryCommandEnabled(A)) return -1;else{return FCK.EditorDocument.queryCommandState(A)?1:0;}}catch (e){return 0;}},GetNamedCommandValue:function(A){var B='';var C=FCK.GetNamedCommandState(A);if (C==-1) return null;try{B=this.EditorDocument.queryCommandValue(A);}catch(e) {};return B?B:'';},Paste:function(A){if (FCK.Status!=2||!FCK.Events.FireEvent('OnPaste')) return false;return A||FCK._ExecPaste();},PasteFromWord:function(){FCKDialog.OpenDialog('FCKDialog_Paste',FCKLang.PasteFromWord,'dialog/fck_paste.html',400,330,'Word');},Preview:function(){var A;if (FCKConfig.FullPage){if (FCK.TempBaseTag.length>0) A=FCK.TempBaseTag+FCK.GetXHTML();else A=FCK.GetXHTML();}else{A=FCKConfig.DocType+'<html dir="'+FCKConfig.ContentLangDirection+'"><head>'+FCK.TempBaseTag+'<title>'+FCKLang.Preview+'</title>'+_FCK_GetEditorAreaStyleTags()+'</head><body'+FCKConfig.GetBodyAttributes()+'>'+FCK.GetXHTML()+'</body></html>';};var B=FCKConfig.ScreenWidth*0.8;var C=FCKConfig.ScreenHeight*0.7;var D=(FCKConfig.ScreenWidth-B)/2;var E='';if (FCK_IS_CUSTOM_DOMAIN&&FCKBrowserInfo.IsIE){window._FCKHtmlToLoad=A;E='javascript:void( (function(){document.open() ;document.domain="'+document.domain+'" ;document.write( window.opener._FCKHtmlToLoad );document.close() ;window.opener._FCKHtmlToLoad = null ;})() )';};var F=window.open(E,null,'toolbar=yes,location=no,status=yes,menubar=yes,scrollbars=yes,resizable=yes,width='+B+',height='+C+',left='+D);if (!FCK_IS_CUSTOM_DOMAIN||!FCKBrowserInfo.IsIE){F.document.write(A);F.document.close();}},SwitchEditMode:function(A){var B=(FCK.EditMode==0);var C=FCK.IsDirty();var D;if (B){FCKCommands.GetCommand('ShowBlocks').SaveState();if (!A&&FCKBrowserInfo.IsIE) FCKUndo.SaveUndoStep();D=FCK.GetXHTML(FCKConfig.FormatSource);if (D==null) return false;}else D=this.EditingArea.Textarea.value;FCK.EditMode=B?1:0;FCK.SetData(D,!C);FCK.Focus();FCKTools.RunFunction(FCK.ToolbarSet.RefreshModeState,FCK.ToolbarSet);return true;},InsertElement:function(A){if (typeof A=='string') A=this.EditorDocument.createElement(A);var B=A.nodeName.toLowerCase();FCKSelection.Restore();var C=new FCKDomRange(this.EditorWindow);C.MoveToSelection();C.DeleteContents();if (FCKListsLib.BlockElements[B]!=null){if (C.StartBlock){if (C.CheckStartOfBlock()) C.MoveToPosition(C.StartBlock,3);else if (C.CheckEndOfBlock()) C.MoveToPosition(C.StartBlock,4);else C.SplitBlock();};C.InsertNode(A);var D=FCKDomTools.GetNextSourceElement(A,false,null,['hr','br','param','img','area','input'],true);if (!D&&FCKConfig.EnterMode!='br'){D=this.EditorDocument.body.appendChild(this.EditorDocument.createElement(FCKConfig.EnterMode));if (FCKBrowserInfo.IsGeckoLike) FCKTools.AppendBogusBr(D);};if (FCKListsLib.EmptyElements[B]==null) C.MoveToElementEditStart(A);else if (D) C.MoveToElementEditStart(D);else C.MoveToPosition(A,4);if (FCKBrowserInfo.IsGecko){if (D) D.scrollIntoView(false);A.scrollIntoView(false);}}else{C.InsertNode(A);C.SetStart(A,4);C.SetEnd(A,4);};C.Select();C.Release();this.Focus();return A;},_InsertBlockElement:function(A){},_IsFunctionKey:function(A){if (A>=16&&A<=20) return true;if (A==27||(A>=33&&A<=40)) return true;if (A==45) return true;return false;},_KeyDownListener:function(A){if (!A) A=FCK.EditorWindow.event;if (FCK.EditorWindow){if (!FCK._IsFunctionKey(A.keyCode)&&!(A.ctrlKey||A.metaKey)&&!(A.keyCode==46)) FCK._KeyDownUndo();};return true;},_KeyDownUndo:function(){if (!FCKUndo.Typing){FCKUndo.SaveUndoStep();FCKUndo.Typing=true;FCK.Events.FireEvent("OnSelectionChange");};FCKUndo.TypesCount++;FCKUndo.Changed=1;if (FCKUndo.TypesCount>FCKUndo.MaxTypes){FCKUndo.TypesCount=0;FCKUndo.SaveUndoStep();}},_TabKeyHandler:function(A){if (!A) A=window.event;var B=A.keyCode;if (B==9&&FCK.EditMode!=0){if (FCKBrowserInfo.IsIE){var C=document.selection.createRange();if (C.parentElement()!=FCK.EditingArea.Textarea) return true;C.text='\t';C.select();}else{var a=[];var D=FCK.EditingArea.Textarea;var E=D.selectionStart;var F=D.selectionEnd;a.push(D.value.substr(0,E));a.push('\t');a.push(D.value.substr(F));D.value=a.join('');D.setSelectionRange(E+1,E+1);};if (A.preventDefault) return A.preventDefault();return A.returnValue=false;};return true;}};FCK.Events=new FCKEvents(FCK);FCK.GetHTML=FCK.GetXHTML=FCK.GetData;FCK.SetHTML=FCK.SetData;FCK.InsertElementAndGetIt=FCK.CreateElement=FCK.InsertElement;function _FCK_ProtectEvents_ReplaceTags(A){return A.replace(FCKRegexLib.EventAttributes,_FCK_ProtectEvents_ReplaceEvents);};function _FCK_ProtectEvents_ReplaceEvents(A,B){return ' '+B+'_fckprotectedatt="'+encodeURIComponent(A)+'"';};function _FCK_ProtectEvents_RestoreEvents(A,B){return decodeURIComponent(B);};function _FCK_MouseEventsListener(A){if (!A) A=window.event;if (A.type=='mousedown') FCK.MouseDownFlag=true;else if (A.type=='mouseup') FCK.MouseDownFlag=false;else if (A.type=='mousemove') FCK.Events.FireEvent('OnMouseMove',A);};function _FCK_PaddingNodeListener(){if (FCKConfig.EnterMode.IEquals('br')) return;FCKDomTools.EnforcePaddingNode(FCK.EditorDocument,FCKConfig.EnterMode);if (!FCKBrowserInfo.IsIE&&FCKDomTools.PaddingNode){var A=FCKSelection.GetSelection();if (A&&A.rangeCount==1){var B=A.getRangeAt(0);if (B.collapsed&&B.startContainer==FCK.EditorDocument.body&&B.startOffset==0){B.selectNodeContents(FCKDomTools.PaddingNode);B.collapse(true);A.removeAllRanges();A.addRange(B);}}}else if (FCKDomTools.PaddingNode){var C=FCKSelection.GetParentElement();var D=FCKDomTools.PaddingNode;if (C&&C.nodeName.IEquals('body')){if (FCK.EditorDocument.body.childNodes.length==1&&FCK.EditorDocument.body.firstChild==D){if (FCKSelection._GetSelectionDocument(FCK.EditorDocument.selection)!=FCK.EditorDocument) return;var B=FCK.EditorDocument.body.createTextRange();var F=false;if (!D.childNodes.firstChild){D.appendChild(FCKTools.GetElementDocument(D).createTextNode('\ufeff'));F=true;};B.moveToElementText(D);B.select();if (F) B.pasteHTML('');}}}};function _FCK_EditingArea_OnLoad(){FCK.EditorWindow=FCK.EditingArea.Window;FCK.EditorDocument=FCK.EditingArea.Document;FCK.InitializeBehaviors();FCK.MouseDownFlag=false;FCKTools.AddEventListener(FCK.EditorDocument,'mousemove',_FCK_MouseEventsListener);FCKTools.AddEventListener(FCK.EditorDocument,'mousedown',_FCK_MouseEventsListener);FCKTools.AddEventListener(FCK.EditorDocument,'mouseup',_FCK_MouseEventsListener);if (FCKBrowserInfo.IsSafari){var A=function(evt){if (!(evt.ctrlKey||evt.metaKey)) return;if (FCK.EditMode!=0) return;switch (evt.keyCode){case 89:FCKUndo.Redo();break;case 90:FCKUndo.Undo();break;}};FCKTools.AddEventListener(FCK.EditorDocument,'keyup',A);};FCK.EnterKeyHandler=new FCKEnterKey(FCK.EditorWindow,FCKConfig.EnterMode,FCKConfig.ShiftEnterMode,FCKConfig.TabSpaces);FCK.KeystrokeHandler.AttachToElement(FCK.EditorDocument);if (FCK._ForceResetIsDirty) FCK.ResetIsDirty();if (FCKBrowserInfo.IsIE&&FCK.HasFocus) FCK.EditorDocument.body.setActive();FCK.OnAfterSetHTML();FCKCommands.GetCommand('ShowBlocks').RestoreState();if (FCK.Status!=0) return;FCK.SetStatus(1);};function _FCK_GetEditorAreaStyleTags(){return FCKTools.GetStyleHtml(FCKConfig.EditorAreaCSS)+FCKTools.GetStyleHtml(FCKConfig.EditorAreaStyles);};function _FCK_KeystrokeHandler_OnKeystroke(A,B){if (FCK.Status!=2) return false;if (FCK.EditMode==0){switch (B){case 'Paste':return!FCK.Paste();case 'Cut':FCKUndo.SaveUndoStep();return false;}}else{if (B.Equals('Paste','Undo','Redo','SelectAll','Cut')) return false;};var C=FCK.Commands.GetCommand(B);if (C.GetState()==-1) return false;return (C.Execute.apply(C,FCKTools.ArgumentsToArray(arguments,2))!==false);};(function(){var A=window.parent.document;var B=A.getElementById(FCK.Name);var i=0;while (B||i==0){if (B&&B.tagName.toLowerCase().Equals('input','textarea')){FCK.LinkedField=B;break;};B=A.getElementsByName(FCK.Name)[i++];}})();var FCKTempBin={Elements:[],AddElement:function(A){var B=this.Elements.length;this.Elements[B]=A;return B;},RemoveElement:function(A){var e=this.Elements[A];this.Elements[A]=null;return e;},Reset:function(){var i=0;while (i<this.Elements.length) this.Elements[i++]=null;this.Elements.length=0;}};var FCKFocusManager=FCK.FocusManager={IsLocked:false,AddWindow:function(A,B){var C;if (FCKBrowserInfo.IsIE) C=A.nodeType==1?A:A.frameElement?A.frameElement:A.document;else if (FCKBrowserInfo.IsSafari) C=A;else C=A.document;FCKTools.AddEventListener(C,'blur',FCKFocusManager_Win_OnBlur);FCKTools.AddEventListener(C,'focus',B?FCKFocusManager_Win_OnFocus_Area:FCKFocusManager_Win_OnFocus);},RemoveWindow:function(A){if (FCKBrowserInfo.IsIE) oTarget=A.nodeType==1?A:A.frameElement?A.frameElement:A.document;else oTarget=A.document;FCKTools.RemoveEventListener(oTarget,'blur',FCKFocusManager_Win_OnBlur);FCKTools.RemoveEventListener(oTarget,'focus',FCKFocusManager_Win_OnFocus_Area);FCKTools.RemoveEventListener(oTarget,'focus',FCKFocusManager_Win_OnFocus);},Lock:function(){this.IsLocked=true;},Unlock:function(){if (this._HasPendingBlur) FCKFocusManager._Timer=window.setTimeout(FCKFocusManager_FireOnBlur,100);this.IsLocked=false;},_ResetTimer:function(){this._HasPendingBlur=false;if (this._Timer){window.clearTimeout(this._Timer);delete this._Timer;}}};function FCKFocusManager_Win_OnBlur(){if (typeof(FCK)!='undefined'&&FCK.HasFocus){FCKFocusManager._ResetTimer();FCKFocusManager._Timer=window.setTimeout(FCKFocusManager_FireOnBlur,100);}};function FCKFocusManager_FireOnBlur(){if (FCKFocusManager.IsLocked) FCKFocusManager._HasPendingBlur=true;else{FCK.HasFocus=false;FCK.Events.FireEvent("OnBlur");}};function FCKFocusManager_Win_OnFocus_Area(){if (FCKFocusManager._IsFocusing) return;FCKFocusManager._IsFocusing=true;FCK.Focus();FCKFocusManager_Win_OnFocus();FCKTools.RunFunction(function(){delete FCKFocusManager._IsFocusing;});};function FCKFocusManager_Win_OnFocus(){FCKFocusManager._ResetTimer();if (!FCK.HasFocus&&!FCKFocusManager.IsLocked){FCK.HasFocus=true;FCK.Events.FireEvent("OnFocus");}};(function(){var A=window.frameElement;var B=A.width;var C=A.height;if (/^\d+$/.test(B)) B+='px';if (/^\d+$/.test(C)) C+='px';var D=A.style;D.border=D.padding=D.margin=0;D.backgroundColor='transparent';D.backgroundImage='none';D.width=B;D.height=C;})();
+FCK.Description="FCKeditor for Gecko Browsers";FCK.InitializeBehaviors=function(){if (window.onresize) window.onresize();FCKFocusManager.AddWindow(this.EditorWindow);this.ExecOnSelectionChange=function(){FCK.Events.FireEvent("OnSelectionChange");};this._ExecDrop=function(evt){if (FCK.MouseDownFlag){FCK.MouseDownFlag=false;return;};if (FCKConfig.ForcePasteAsPlainText){if (evt.dataTransfer){var A=evt.dataTransfer.getData('Text');A=FCKTools.HTMLEncode(A);A=FCKTools.ProcessLineBreaks(window,FCKConfig,A);FCK.InsertHtml(A);}else if (FCKConfig.ShowDropDialog) FCK.PasteAsPlainText();evt.preventDefault();evt.stopPropagation();}};this._ExecCheckCaret=function(evt){if (FCK.EditMode!=0) return;if (evt.type=='keypress'){var B=evt.keyCode;if (B<33||B>40) return;};var C=function(H){if (H.nodeType!=1) return false;var D=H.tagName.toLowerCase();return (FCKListsLib.BlockElements[D]||FCKListsLib.EmptyElements[D]);};var E=function(){var F=FCKSelection.GetSelection();var G=F.getRangeAt(0);if (!G||!G.collapsed) return;var H=G.endContainer;if (H.nodeType!=3) return;if (H.nodeValue.length!=G.endOffset) return;var I=H.parentNode.tagName.toLowerCase();if (!(I=='a'||(!FCKBrowserInfo.IsOpera&&String(H.parentNode.contentEditable)=='false')||(!(FCKListsLib.BlockElements[I]||FCKListsLib.NonEmptyBlockElements[I])&&B==35))) return;var J=FCKTools.GetNextTextNode(H,H.parentNode,C);if (J) return;G=FCK.EditorDocument.createRange();J=FCKTools.GetNextTextNode(H,H.parentNode.parentNode,C);if (J){if (FCKBrowserInfo.IsOpera&&B==37) return;G.setStart(J,0);G.setEnd(J,0);}else{while (H.parentNode&&H.parentNode!=FCK.EditorDocument.body&&H.parentNode!=FCK.EditorDocument.documentElement&&H==H.parentNode.lastChild&&(!FCKListsLib.BlockElements[H.parentNode.tagName.toLowerCase()]&&!FCKListsLib.NonEmptyBlockElements[H.parentNode.tagName.toLowerCase()])) H=H.parentNode;if (FCKListsLib.BlockElements[I]||FCKListsLib.EmptyElements[I]||H==FCK.EditorDocument.body){G.setStart(H,H.childNodes.length);G.setEnd(H,H.childNodes.length);}else{var K=H.nextSibling;while (K){if (K.nodeType!=1){K=K.nextSibling;continue;};var L=K.tagName.toLowerCase();if (FCKListsLib.BlockElements[L]||FCKListsLib.EmptyElements[L]||FCKListsLib.NonEmptyBlockElements[L]) break;K=K.nextSibling;};var M=FCK.EditorDocument.createTextNode('');if (K) H.parentNode.insertBefore(M,K);else H.parentNode.appendChild(M);G.setStart(M,0);G.setEnd(M,0);}};F.removeAllRanges();F.addRange(G);FCK.Events.FireEvent("OnSelectionChange");};setTimeout(E,1);};this.ExecOnSelectionChangeTimer=function(){if (FCK.LastOnChangeTimer) window.clearTimeout(FCK.LastOnChangeTimer);FCK.LastOnChangeTimer=window.setTimeout(FCK.ExecOnSelectionChange,100);};this.EditorDocument.addEventListener('mouseup',this.ExecOnSelectionChange,false);this.EditorDocument.addEventListener('keyup',this.ExecOnSelectionChangeTimer,false);this._DblClickListener=function(e){FCK.OnDoubleClick(e.target);e.stopPropagation();};this.EditorDocument.addEventListener('dblclick',this._DblClickListener,true);this.EditorDocument.addEventListener('keydown',this._KeyDownListener,false);if (FCKBrowserInfo.IsGecko){this.EditorWindow.addEventListener('dragdrop',this._ExecDrop,true);}else if (FCKBrowserInfo.IsSafari){var N=function(evt){ if (!FCK.MouseDownFlag) evt.returnValue=false;};this.EditorDocument.addEventListener('dragenter',N,true);this.EditorDocument.addEventListener('dragover',N,true);this.EditorDocument.addEventListener('drop',this._ExecDrop,true);this.EditorDocument.addEventListener('mousedown',function(ev){var O=ev.srcElement;if (O.nodeName.IEquals('IMG','HR','INPUT','TEXTAREA','SELECT')){FCKSelection.SelectNode(O);}},true);this.EditorDocument.addEventListener('mouseup',function(ev){if (ev.srcElement.nodeName.IEquals('INPUT','TEXTAREA','SELECT')) ev.preventDefault()},true);this.EditorDocument.addEventListener('click',function(ev){if (ev.srcElement.nodeName.IEquals('INPUT','TEXTAREA','SELECT')) ev.preventDefault()},true);};if (FCKBrowserInfo.IsGecko||FCKBrowserInfo.IsOpera){this.EditorDocument.addEventListener('keypress',this._ExecCheckCaret,false);this.EditorDocument.addEventListener('click',this._ExecCheckCaret,false);};FCK.ContextMenu._InnerContextMenu.SetMouseClickWindow(FCK.EditorWindow);FCK.ContextMenu._InnerContextMenu.AttachToElement(FCK.EditorDocument);};FCK.MakeEditable=function(){this.EditingArea.MakeEditable();};function Document_OnContextMenu(e){if (!e.target._FCKShowContextMenu) e.preventDefault();};document.oncontextmenu=Document_OnContextMenu;FCK._BaseGetNamedCommandState=FCK.GetNamedCommandState;FCK.GetNamedCommandState=function(A){switch (A){case 'Unlink':return FCKSelection.HasAncestorNode('A')?0:-1;default:return FCK._BaseGetNamedCommandState(A);}};FCK.RedirectNamedCommands={Print:true,Paste:true};FCK.ExecuteRedirectedNamedCommand=function(A,B){switch (A){case 'Print':FCK.EditorWindow.print();break;case 'Paste':try{if (FCKBrowserInfo.IsSafari) throw '';if (FCK.Paste()) FCK.ExecuteNamedCommand('Paste',null,true);}catch (e)	{ FCKDialog.OpenDialog('FCKDialog_Paste',FCKLang.Paste,'dialog/fck_paste.html',400,330,'Security');};break;default:FCK.ExecuteNamedCommand(A,B);}};FCK._ExecPaste=function(){FCKUndo.SaveUndoStep();if (FCKConfig.ForcePasteAsPlainText){FCK.PasteAsPlainText();return false;};return true;};FCK.InsertHtml=function(A){var B=FCK.EditorDocument;A=FCKConfig.ProtectedSource.Protect(A);A=FCK.ProtectEvents(A);A=FCK.ProtectUrls(A);A=FCK.ProtectTags(A);FCKUndo.SaveUndoStep();if (FCKBrowserInfo.IsGecko){A='<span id="__fakeFCKRemove1__" style="display:none;">fakeFCKRemove</span>'+A+'<span id="__fakeFCKRemove2__" style="display:none;">fakeFCKRemove</span>';};B.execCommand('inserthtml',false,A);if (FCKBrowserInfo.IsGecko){FCKDomTools.RemoveNode(B.getElementById('__fakeFCKRemove1__'));FCKDomTools.RemoveNode(B.getElementById('__fakeFCKRemove2__'));};this.Focus();var C=new FCKDomRange(this.EditorWindow);C.MoveToSelection();var D=C.CreateBookmark();FCKDocumentProcessor.Process(B);try{C.MoveToBookmark(D);C.Select();}catch (e) {};this.Events.FireEvent("OnSelectionChange");};FCK.PasteAsPlainText=function(){FCKTools.RunFunction(FCKDialog.OpenDialog,FCKDialog,['FCKDialog_Paste',FCKLang.PasteAsText,'dialog/fck_paste.html',400,330,'PlainText']);};FCK.GetClipboardHTML=function(){return '';};FCK.CreateLink=function(A,B){var C=[];if (FCKSelection.GetSelection().isCollapsed) return C;FCK.ExecuteNamedCommand('Unlink',null,false,!!B);if (A.length>0){var D='javascript:void(0);/*'+(new Date().getTime())+'*/';FCK.ExecuteNamedCommand('CreateLink',D,false,!!B);var E=this.EditorDocument.evaluate("//a[@href='"+D+"']",this.EditorDocument.body,null,XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE,null);for (var i=0;i<E.snapshotLength;i++){var F=E.snapshotItem(i);F.href=A;C.push(F);}};return C;};FCK._FillEmptyBlock=function(A){if (!A||A.nodeType!=1) return;var B=A.tagName.toLowerCase();if (B!='p'&&B!='div') return;if (A.firstChild) return;FCKTools.AppendBogusBr(A);};FCK._ExecCheckEmptyBlock=function(){FCK._FillEmptyBlock(FCK.EditorDocument.body.firstChild);var A=FCKSelection.GetSelection();if (!A||A.rangeCount<1) return;var B=A.getRangeAt(0);FCK._FillEmptyBlock(B.startContainer);};
+var FCKConfig=FCK.Config={};if (document.location.protocol=='file:'){FCKConfig.BasePath=decodeURIComponent(document.location.pathname.substr(1));FCKConfig.BasePath=FCKConfig.BasePath.replace(/\\/gi, '/');var sFullProtocol=document.location.href.match(/^(file\:\/{2,3})/)[1];if (FCKBrowserInfo.IsOpera) sFullProtocol+='localhost/';FCKConfig.BasePath=sFullProtocol+FCKConfig.BasePath.substring(0,FCKConfig.BasePath.lastIndexOf('/')+1);}else FCKConfig.BasePath=document.location.protocol+'//'+document.location.host+document.location.pathname.substring(0,document.location.pathname.lastIndexOf('/')+1);FCKConfig.FullBasePath=FCKConfig.BasePath;FCKConfig.EditorPath=FCKConfig.BasePath.replace(/editor\/$/,'');try{FCKConfig.ScreenWidth=screen.width;FCKConfig.ScreenHeight=screen.height;}catch (e){FCKConfig.ScreenWidth=800;FCKConfig.ScreenHeight=600;};FCKConfig.ProcessHiddenField=function(){this.PageConfig={};var A=window.parent.document.getElementById(FCK.Name+'___Config');if (!A) return;var B=A.value.split('&');for (var i=0;i<B.length;i++){if (B[i].length==0) continue;var C=B[i].split('=');var D=decodeURIComponent(C[0]);var E=decodeURIComponent(C[1]);if (D=='CustomConfigurationsPath') FCKConfig[D]=E;else if (E.toLowerCase()=="true") this.PageConfig[D]=true;else if (E.toLowerCase()=="false") this.PageConfig[D]=false;else if (E.length>0&&!isNaN(E)) this.PageConfig[D]=parseInt(E,10);else this.PageConfig[D]=E;}};function FCKConfig_LoadPageConfig(){var A=FCKConfig.PageConfig;for (var B in A) FCKConfig[B]=A[B];};function FCKConfig_PreProcess(){var A=FCKConfig;if (A.AllowQueryStringDebug){try{if ((/fckdebug=true/i).test(window.top.location.search)) A.Debug=true;}catch (e) {/*Ignore it. Much probably we are inside a FRAME where the "top" is in another domain (security error).*/}};if (!A.PluginsPath.EndsWith('/')) A.PluginsPath+='/';var B=A.ToolbarComboPreviewCSS;if (!B||B.length==0) A.ToolbarComboPreviewCSS=A.EditorAreaCSS;A.RemoveAttributesArray=(A.RemoveAttributes||'').split(',');if (!FCKConfig.SkinEditorCSS||FCKConfig.SkinEditorCSS.length==0) FCKConfig.SkinEditorCSS=FCKConfig.SkinPath+'fck_editor.css';if (!FCKConfig.SkinDialogCSS||FCKConfig.SkinDialogCSS.length==0) FCKConfig.SkinDialogCSS=FCKConfig.SkinPath+'fck_dialog.css';};FCKConfig.ToolbarSets={};FCKConfig.Plugins={};FCKConfig.Plugins.Items=[];FCKConfig.Plugins.Add=function(A,B,C){FCKConfig.Plugins.Items.AddItem([A,B,C]);};FCKConfig.ProtectedSource={};FCKConfig.ProtectedSource._CodeTag=(new Date()).valueOf();FCKConfig.ProtectedSource.RegexEntries=[/<!--[\s\S]*?-->/g,/<script[\s\S]*?<\/script>/gi,/<noscript[\s\S]*?<\/noscript>/gi];FCKConfig.ProtectedSource.Add=function(A){this.RegexEntries.AddItem(A);};FCKConfig.ProtectedSource.Protect=function(A){var B=this._CodeTag;function _Replace(protectedSource){var C=FCKTempBin.AddElement(protectedSource);return '<!--{'+B+C+'}-->';};for (var i=0;i<this.RegexEntries.length;i++){A=A.replace(this.RegexEntries[i],_Replace);};return A;};FCKConfig.ProtectedSource.Revert=function(A,B){function _Replace(m,opener,index){var C=B?FCKTempBin.RemoveElement(index):FCKTempBin.Elements[index];return FCKConfig.ProtectedSource.Revert(C,B);};var D=new RegExp("(<|&lt;)!--\\{"+this._CodeTag+"(\\d+)\\}--(>|&gt;)","g");return A.replace(D,_Replace);};FCKConfig.GetBodyAttributes=function(){var A='';if (this.BodyId&&this.BodyId.length>0) A+=' id="'+this.BodyId+'"';if (this.BodyClass&&this.BodyClass.length>0) A+=' class="'+this.BodyClass+'"';return A;};FCKConfig.ApplyBodyAttributes=function(A){if (this.BodyId&&this.BodyId.length>0) A.id=FCKConfig.BodyId;if (this.BodyClass&&this.BodyClass.length>0) A.className+=' '+FCKConfig.BodyClass;};
+var FCKDebug={Output:function(){},OutputObject:function(){}};
+var FCKDomTools={MoveChildren:function(A,B,C){if (A==B) return;var D;if (C){while ((D=A.lastChild)) B.insertBefore(A.removeChild(D),B.firstChild);}else{while ((D=A.firstChild)) B.appendChild(A.removeChild(D));}},MoveNode:function(A,B,C){if (C) B.insertBefore(FCKDomTools.RemoveNode(A),B.firstChild);else B.appendChild(FCKDomTools.RemoveNode(A));},TrimNode:function(A){this.LTrimNode(A);this.RTrimNode(A);},LTrimNode:function(A){var B;while ((B=A.firstChild)){if (B.nodeType==3){var C=B.nodeValue.LTrim();var D=B.nodeValue.length;if (C.length==0){A.removeChild(B);continue;}else if (C.length<D){B.splitText(D-C.length);A.removeChild(A.firstChild);}};break;}},RTrimNode:function(A){var B;while ((B=A.lastChild)){if (B.nodeType==3){var C=B.nodeValue.RTrim();var D=B.nodeValue.length;if (C.length==0){B.parentNode.removeChild(B);continue;}else if (C.length<D){B.splitText(C.length);A.lastChild.parentNode.removeChild(A.lastChild);}};break;};if (!FCKBrowserInfo.IsIE&&!FCKBrowserInfo.IsOpera){B=A.lastChild;if (B&&B.nodeType==1&&B.nodeName.toLowerCase()=='br'){B.parentNode.removeChild(B);}}},RemoveNode:function(A,B){if (B){var C;while ((C=A.firstChild)) A.parentNode.insertBefore(A.removeChild(C),A);};return A.parentNode.removeChild(A);},GetFirstChild:function(A,B){if (typeof (B)=='string') B=[B];var C=A.firstChild;while(C){if (C.nodeType==1&&C.tagName.Equals.apply(C.tagName,B)) return C;C=C.nextSibling;};return null;},GetLastChild:function(A,B){if (typeof (B)=='string') B=[B];var C=A.lastChild;while(C){if (C.nodeType==1&&(!B||C.tagName.Equals(B))) return C;C=C.previousSibling;};return null;},GetPreviousSourceElement:function(A,B,C,D){if (!A) return null;if (C&&A.nodeType==1&&A.nodeName.IEquals(C)) return null;if (A.previousSibling) A=A.previousSibling;else return this.GetPreviousSourceElement(A.parentNode,B,C,D);while (A){if (A.nodeType==1){if (C&&A.nodeName.IEquals(C)) break;if (!D||!A.nodeName.IEquals(D)) return A;}else if (B&&A.nodeType==3&&A.nodeValue.RTrim().length>0) break;if (A.lastChild) A=A.lastChild;else return this.GetPreviousSourceElement(A,B,C,D);};return null;},GetNextSourceElement:function(A,B,C,D,E){while((A=this.GetNextSourceNode(A,E))){if (A.nodeType==1){if (C&&A.nodeName.IEquals(C)) break;if (D&&A.nodeName.IEquals(D)) return this.GetNextSourceElement(A,B,C,D);return A;}else if (B&&A.nodeType==3&&A.nodeValue.RTrim().length>0) break;};return null;},GetNextSourceNode:function(A,B,C,D){if (!A) return null;var E;if (!B&&A.firstChild) E=A.firstChild;else{if (D&&A==D) return null;E=A.nextSibling;if (!E&&(!D||D!=A.parentNode)) return this.GetNextSourceNode(A.parentNode,true,C,D);};if (C&&E&&E.nodeType!=C) return this.GetNextSourceNode(E,false,C,D);return E;},GetPreviousSourceNode:function(A,B,C,D){if (!A) return null;var E;if (!B&&A.lastChild) E=A.lastChild;else{if (D&&A==D) return null;E=A.previousSibling;if (!E&&(!D||D!=A.parentNode)) return this.GetPreviousSourceNode(A.parentNode,true,C,D);};if (C&&E&&E.nodeType!=C) return this.GetPreviousSourceNode(E,false,C,D);return E;},InsertAfterNode:function(A,B){return A.parentNode.insertBefore(B,A.nextSibling);},GetParents:function(A){var B=[];while (A){B.unshift(A);A=A.parentNode;};return B;},GetCommonParents:function(A,B){var C=this.GetParents(A);var D=this.GetParents(B);var E=[];for (var i=0;i<C.length;i++){if (C[i]==D[i]) E.push(C[i]);};return E;},GetCommonParentNode:function(A,B,C){var D={};if (!C.pop) C=[C];while (C.length>0) D[C.pop().toLowerCase()]=1;var E=this.GetCommonParents(A,B);var F=null;while ((F=E.pop())){if (D[F.nodeName.toLowerCase()]) return F;};return null;},GetIndexOf:function(A){var B=A.parentNode?A.parentNode.firstChild:null;var C=-1;while (B){C++;if (B==A) return C;B=B.nextSibling;};return-1;},PaddingNode:null,EnforcePaddingNode:function(A,B){try{if (!A||!A.body) return;}catch (e){return;};this.CheckAndRemovePaddingNode(A,B,true);try{if (A.body.lastChild&&(A.body.lastChild.nodeType!=1||A.body.lastChild.tagName.toLowerCase()==B.toLowerCase())) return;}catch (e){return;};var C=A.createElement(B);if (FCKBrowserInfo.IsGecko&&FCKListsLib.NonEmptyBlockElements[B]) FCKTools.AppendBogusBr(C);this.PaddingNode=C;if (A.body.childNodes.length==1&&A.body.firstChild.nodeType==1&&A.body.firstChild.tagName.toLowerCase()=='br'&&(A.body.firstChild.getAttribute('_moz_dirty')!=null||A.body.firstChild.getAttribute('type')=='_moz')) A.body.replaceChild(C,A.body.firstChild);else A.body.appendChild(C);},CheckAndRemovePaddingNode:function(A,B,C){var D=this.PaddingNode;if (!D) return;try{if (D.parentNode!=A.body||D.tagName.toLowerCase()!=B||(D.childNodes.length>1)||(D.firstChild&&D.firstChild.nodeValue!='\xa0'&&String(D.firstChild.tagName).toLowerCase()!='br')){this.PaddingNode=null;return;}}catch (e){this.PaddingNode=null;return;};if (!C){if (D.parentNode.childNodes.length>1) D.parentNode.removeChild(D);this.PaddingNode=null;}},HasAttribute:function(A,B){if (A.hasAttribute) return A.hasAttribute(B);else{var C=A.attributes[B];return (C!=undefined&&C.specified);}},HasAttributes:function(A){var B=A.attributes;for (var i=0;i<B.length;i++){if (FCKBrowserInfo.IsIE&&B[i].nodeName=='class'){if (A.className.length>0) return true;}else if (B[i].specified) return true;};return false;},RemoveAttribute:function(A,B){if (FCKBrowserInfo.IsIE&&B.toLowerCase()=='class') B='className';return A.removeAttribute(B,0);},RemoveAttributes:function (A,B){for (var i=0;i<B.length;i++) this.RemoveAttribute(A,B[i]);},GetAttributeValue:function(A,B){var C=B;if (typeof B=='string') B=A.attributes[B];else C=B.nodeName;if (B&&B.specified){if (C=='style') return A.style.cssText;else if (C=='class'||C.indexOf('on')==0) return B.nodeValue;else{return A.getAttribute(C,2);}};return null;},Contains:function(A,B){if (A.contains&&B.nodeType==1) return A.contains(B);while ((B=B.parentNode)){if (B==A) return true;};return false;},BreakParent:function(A,B,C){var D=C||new FCKDomRange(FCKTools.GetElementWindow(A));D.SetStart(A,4);D.SetEnd(B,4);var E=D.ExtractContents();D.InsertNode(A.parentNode.removeChild(A));E.InsertAfterNode(A);D.Release(!!C);},GetNodeAddress:function(A,B){var C=[];while (A&&A!=FCKTools.GetElementDocument(A).documentElement){var D=A.parentNode;var E=-1;for(var i=0;i<D.childNodes.length;i++){var F=D.childNodes[i];if (B===true&&F.nodeType==3&&F.previousSibling&&F.previousSibling.nodeType==3) continue;E++;if (D.childNodes[i]==A) break;};C.unshift(E);A=A.parentNode;};return C;},GetNodeFromAddress:function(A,B,C){var D=A.documentElement;for (var i=0;i<B.length;i++){var E=B[i];if (!C){D=D.childNodes[E];continue;};var F=-1;for (var j=0;j<D.childNodes.length;j++){var G=D.childNodes[j];if (C===true&&G.nodeType==3&&G.previousSibling&&G.previousSibling.nodeType==3) continue;F++;if (F==E){D=G;break;}}};return D;},CloneElement:function(A){A=A.cloneNode(false);A.removeAttribute('id',false);return A;},ClearElementJSProperty:function(A,B){if (FCKBrowserInfo.IsIE) A.removeAttribute(B);else delete A[B];},SetElementMarker:function (A,B,C,D){var E=String(parseInt(Math.random()*0xfffffff,10));B._FCKMarkerId=E;B[C]=D;if (!A[E]) A[E]={ 'element':B,'markers':{} };A[E]['markers'][C]=D;},ClearElementMarkers:function(A,B,C){var D=B._FCKMarkerId;if (!D) return;this.ClearElementJSProperty(B,'_FCKMarkerId');for (var j in A[D]['markers']) this.ClearElementJSProperty(B,j);if (C) delete A[D];},ClearAllMarkers:function(A){for (var i in A) this.ClearElementMarkers(A,A[i]['element'],true);},ListToArray:function(A,B,C,D,E){if (!A.nodeName.IEquals(['ul','ol'])) return [];if (!D) D=0;if (!C) C=[];for (var i=0;i<A.childNodes.length;i++){var F=A.childNodes[i];if (!F.nodeName.IEquals('li')) continue;var G={ 'parent':A,'indent':D,'contents':[] };if (!E){G.grandparent=A.parentNode;if (G.grandparent&&G.grandparent.nodeName.IEquals('li')) G.grandparent=G.grandparent.parentNode;}else G.grandparent=E;if (B) this.SetElementMarker(B,F,'_FCK_ListArray_Index',C.length);C.push(G);for (var j=0;j<F.childNodes.length;j++){var H=F.childNodes[j];if (H.nodeName.IEquals(['ul','ol'])) this.ListToArray(H,B,C,D+1,G.grandparent);else G.contents.push(H);}};return C;},ArrayToList:function(A,B,C){if (C==undefined) C=0;if (!A||A.length<C+1) return null;var D=FCKTools.GetElementDocument(A[C].parent);var E=D.createDocumentFragment();var F=null;var G=C;var H=Math.max(A[C].indent,0);var I=null;while (true){var J=A[G];if (J.indent==H){if (!F||A[G].parent.nodeName!=F.nodeName){F=A[G].parent.cloneNode(false);E.appendChild(F);};I=D.createElement('li');F.appendChild(I);for (var i=0;i<J.contents.length;i++) I.appendChild(J.contents[i].cloneNode(true));G++;}else if (J.indent==Math.max(H,0)+1){var K=this.ArrayToList(A,null,G);I.appendChild(K.listNode);G=K.nextIndex;}else if (J.indent==-1&&C==0&&J.grandparent){var I;if (J.grandparent.nodeName.IEquals(['ul','ol'])) I=D.createElement('li');else{if (FCKConfig.EnterMode.IEquals(['div','p'])&&!J.grandparent.nodeName.IEquals('td')) I=D.createElement(FCKConfig.EnterMode);else I=D.createDocumentFragment();};for (var i=0;i<J.contents.length;i++) I.appendChild(J.contents[i].cloneNode(true));if (I.nodeType==11){if (I.lastChild&&I.lastChild.getAttribute&&I.lastChild.getAttribute('type')=='_moz') I.removeChild(I.lastChild);I.appendChild(D.createElement('br'));};if (I.nodeName.IEquals(FCKConfig.EnterMode)&&I.firstChild){this.TrimNode(I);if (FCKListsLib.BlockBoundaries[I.firstChild.nodeName.toLowerCase()]){var M=D.createDocumentFragment();while (I.firstChild) M.appendChild(I.removeChild(I.firstChild));I=M;}};if (FCKBrowserInfo.IsGeckoLike&&I.nodeName.IEquals(['div','p'])) FCKTools.AppendBogusBr(I);E.appendChild(I);F=null;G++;}else return null;if (A.length<=G||Math.max(A[G].indent,0)<H){break;}};if (B){var N=E.firstChild;while (N){if (N.nodeType==1) this.ClearElementMarkers(B,N);N=this.GetNextSourceNode(N);}};return { 'listNode':E,'nextIndex':G };},GetNextSibling:function(A,B){A=A.nextSibling;while (A&&!B&&A.nodeType!=1&&(A.nodeType!=3||A.nodeValue.length==0)) A=A.nextSibling;return A;},GetPreviousSibling:function(A,B){A=A.previousSibling;while (A&&!B&&A.nodeType!=1&&(A.nodeType!=3||A.nodeValue.length==0)) A=A.previousSibling;return A;},CheckIsEmptyElement:function(A,B){var C=A.firstChild;var D;while (C){if (C.nodeType==1){if (D||!FCKListsLib.InlineNonEmptyElements[C.nodeName.toLowerCase()]) return false;if (!B||B(C)===true) D=C;}else if (C.nodeType==3&&C.nodeValue.length>0) return false;C=C.nextSibling;};return D?this.CheckIsEmptyElement(D,B):true;},SetElementStyles:function(A,B){var C=A.style;for (var D in B) C[D]=B[D];},SetOpacity:function(A,B){if (FCKBrowserInfo.IsIE){B=Math.round(B*100);A.style.filter=(B>100?'':'progid:DXImageTransform.Microsoft.Alpha(opacity='+B+')');}else A.style.opacity=B;},GetCurrentElementStyle:function(A,B){if (FCKBrowserInfo.IsIE) return A.currentStyle[B];else return A.ownerDocument.defaultView.getComputedStyle(A,'').getPropertyValue(B);},GetPositionedAncestor:function(A){var B=A;while (B!=FCKTools.GetElementDocument(B).documentElement){if (this.GetCurrentElementStyle(B,'position')!='static') return B;if (B==FCKTools.GetElementDocument(B).documentElement&&currentWindow!=w) B=currentWindow.frameElement;else B=B.parentNode;};return null;},ScrollIntoView:function(A,B){var C=FCKTools.GetElementWindow(A);var D=FCKTools.GetViewPaneSize(C).Height;var E=D*-1;if (B===false){E+=A.offsetHeight;E+=parseInt(this.GetCurrentElementStyle(A,'marginBottom')||0,10);};E+=A.offsetTop;while ((A=A.offsetParent)) E+=A.offsetTop||0;var F=FCKTools.GetScrollPosition(C).Y;if (E>0&&E>F) C.scrollTo(0,E);},CheckIsEditable:function(A){var B=A.nodeName.toLowerCase();var C=FCK.DTD[B]||FCK.DTD.span;return (C['#']&&!FCKListsLib.NonEditableElements[B]);}};
+var FCKTools={};FCKTools.CreateBogusBR=function(A){var B=A.createElement('br');B.setAttribute('type','_moz');return B;};FCKTools.FixCssUrls=function(A,B){if (!A||A.length==0) return B;return B.replace(/url\s*\(([\s'"]*)(.*?)([\s"']*)\)/g,function(match,opener,path,closer){if (/^\/|^\w?:/.test(path)) return match;else return 'url('+opener+A+path+closer+')';});};FCKTools._GetUrlFixedCss=function(A,B){var C=A.match(/^([^|]+)\|([\s\S]*)/);if (C) return FCKTools.FixCssUrls(C[1],C[2]);else return A;};FCKTools.AppendStyleSheet=function(A,B){if (!B) return [];if (typeof(B)=='string'){if (/[\\\/\.][^{}]*$/.test(B)){return this.AppendStyleSheet(A,B.split(','));}else return [this.AppendStyleString(A,FCKTools._GetUrlFixedCss(B))];}else{var C=[];for (var i=0;i<B.length;i++) C.push(this._AppendStyleSheet(A,B[i]));return C;}};FCKTools.GetStyleHtml=(function(){var A=function(styleDef,markTemp){if (styleDef.length==0) return '';var B=markTemp?' _fcktemp="true"':'';return '<style type="text/css"'+B+'>'+styleDef+'</style>';};var C=function(cssFileUrl,markTemp){if (cssFileUrl.length==0) return '';var B=markTemp?' _fcktemp="true"':'';return '<link href="'+cssFileUrl+'" type="text/css" rel="stylesheet" '+B+'/>';};return function(cssFileOrArrayOrDef,markTemp){if (!cssFileOrArrayOrDef) return '';if (typeof(cssFileOrArrayOrDef)=='string'){if (/[\\\/\.][^{}]*$/.test(cssFileOrArrayOrDef)){return this.GetStyleHtml(cssFileOrArrayOrDef.split(','),markTemp);}else return A(this._GetUrlFixedCss(cssFileOrArrayOrDef),markTemp);}else{var E='';for (var i=0;i<cssFileOrArrayOrDef.length;i++) E+=C(cssFileOrArrayOrDef[i],markTemp);return E;}}})();FCKTools.GetElementDocument=function (A){return A.ownerDocument||A.document;};FCKTools.GetElementWindow=function(A){return this.GetDocumentWindow(this.GetElementDocument(A));};FCKTools.GetDocumentWindow=function(A){if (FCKBrowserInfo.IsSafari&&!A.parentWindow) this.FixDocumentParentWindow(window.top);return A.parentWindow||A.defaultView;};FCKTools.FixDocumentParentWindow=function(A){if (A.document) A.document.parentWindow=A;for (var i=0;i<A.frames.length;i++) FCKTools.FixDocumentParentWindow(A.frames[i]);};FCKTools.HTMLEncode=function(A){if (!A) return '';A=A.replace(/&/g,'&amp;');A=A.replace(/</g,'&lt;');A=A.replace(/>/g,'&gt;');return A;};FCKTools.HTMLDecode=function(A){if (!A) return '';A=A.replace(/&gt;/g,'>');A=A.replace(/&lt;/g,'<');A=A.replace(/&amp;/g,'&');return A;};FCKTools._ProcessLineBreaksForPMode=function(A,B,C,D,E){var F=0;var G="<p>";var H="</p>";var I="<br />";if (C){G="<li>";H="</li>";F=1;}while (D&&D!=A.FCK.EditorDocument.body){if (D.tagName.toLowerCase()=='p'){F=1;break;};D=D.parentNode;};for (var i=0;i<B.length;i++){var c=B.charAt(i);if (c=='\r') continue;if (c!='\n'){E.push(c);continue;};var n=B.charAt(i+1);if (n=='\r'){i++;n=B.charAt(i+1);};if (n=='\n'){i++;if (F) E.push(H);E.push(G);F=1;}else E.push(I);}};FCKTools._ProcessLineBreaksForDivMode=function(A,B,C,D,E){var F=0;var G="<div>";var H="</div>";if (C){G="<li>";H="</li>";F=1;}while (D&&D!=A.FCK.EditorDocument.body){if (D.tagName.toLowerCase()=='div'){F=1;break;};D=D.parentNode;};for (var i=0;i<B.length;i++){var c=B.charAt(i);if (c=='\r') continue;if (c!='\n'){E.push(c);continue;};if (F){if (E[E.length-1]==G){E.push("&nbsp;");};E.push(H);};E.push(G);F=1;};if (F) E.push(H);};FCKTools._ProcessLineBreaksForBrMode=function(A,B,C,D,E){var F=0;var G="<br />";var H="";if (C){G="<li>";H="</li>";F=1;};for (var i=0;i<B.length;i++){var c=B.charAt(i);if (c=='\r') continue;if (c!='\n'){E.push(c);continue;};if (F&&H.length) E.push (H);E.push(G);F=1;}};FCKTools.ProcessLineBreaks=function(A,B,C){var D=B.EnterMode.toLowerCase();var E=[];var F=0;var G=new A.FCKDomRange(A.FCK.EditorWindow);G.MoveToSelection();var H=G._Range.startContainer;while (H&&H.nodeType!=1) H=H.parentNode;if (H&&H.tagName.toLowerCase()=='li') F=1;if (D=='p') this._ProcessLineBreaksForPMode(A,C,F,H,E);else if (D=='div') this._ProcessLineBreaksForDivMode(A,C,F,H,E);else if (D=='br') this._ProcessLineBreaksForBrMode(A,C,F,H,E);return E.join("");};FCKTools.AddSelectOption=function(A,B,C){var D=FCKTools.GetElementDocument(A).createElement("OPTION");D.text=B;D.value=C;A.options.add(D);return D;};FCKTools.RunFunction=function(A,B,C,D){if (A) this.SetTimeout(A,0,B,C,D);};FCKTools.SetTimeout=function(A,B,C,D,E){return (E||window).setTimeout(function(){if (D) A.apply(C,[].concat(D));else A.apply(C);},B);};FCKTools.SetInterval=function(A,B,C,D,E){return (E||window).setInterval(function(){A.apply(C,D||[]);},B);};FCKTools.ConvertStyleSizeToHtml=function(A){return A.EndsWith('%')?A:parseInt(A,10);};FCKTools.ConvertHtmlSizeToStyle=function(A){return A.EndsWith('%')?A:(A+'px');};FCKTools.GetElementAscensor=function(A,B){var e=A;var C=","+B.toUpperCase()+",";while (e){if (C.indexOf(","+e.nodeName.toUpperCase()+",")!=-1) return e;e=e.parentNode;};return null;};FCKTools.CreateEventListener=function(A,B){var f=function(){var C=[];for (var i=0;i<arguments.length;i++) C.push(arguments[i]);A.apply(this,C.concat(B));};return f;};FCKTools.IsStrictMode=function(A){return ('CSS1Compat'==(A.compatMode||(FCKBrowserInfo.IsSafari?'CSS1Compat':null)));};FCKTools.ArgumentsToArray=function(A,B,C){B=B||0;C=C||A.length;var D=[];for (var i=B;i<B+C&&i<A.length;i++) D.push(A[i]);return D;};FCKTools.CloneObject=function(A){var B=function() {};B.prototype=A;return new B;};FCKTools.AppendBogusBr=function(A){if (!A) return;var B=this.GetLastItem(A.getElementsByTagName('br'));if (!B||(B.getAttribute('type',2)!='_moz'&&B.getAttribute('_moz_dirty')==null)){var C=this.GetElementDocument(A);if (FCKBrowserInfo.IsOpera) A.appendChild(C.createTextNode(''));else A.appendChild(this.CreateBogusBR(C));}};FCKTools.GetLastItem=function(A){if (A.length>0) return A[A.length-1];return null;};FCKTools.GetDocumentPosition=function(w,A){var x=0;var y=0;var B=A;var C=null;var D=FCKTools.GetElementWindow(B);while (B&&!(D==w&&(B==w.document.body||B==w.document.documentElement))){x+=B.offsetLeft-B.scrollLeft;y+=B.offsetTop-B.scrollTop;if (!FCKBrowserInfo.IsOpera){var E=C;while (E&&E!=B){x-=E.scrollLeft;y-=E.scrollTop;E=E.parentNode;}};C=B;if (B.offsetParent) B=B.offsetParent;else{if (D!=w){B=D.frameElement;C=null;if (B) D=B.contentWindow.parent;}else B=null;}};if (FCKDomTools.GetCurrentElementStyle(w.document.body,'position')!='static'||(FCKBrowserInfo.IsIE&&FCKDomTools.GetPositionedAncestor(A)==null)){x+=w.document.body.offsetLeft;y+=w.document.body.offsetTop;};return { "x":x,"y":y };};FCKTools.GetWindowPosition=function(w,A){var B=this.GetDocumentPosition(w,A);var C=FCKTools.GetScrollPosition(w);B.x-=C.X;B.y-=C.Y;return B;};FCKTools.ProtectFormStyles=function(A){if (!A||A.nodeType!=1||A.tagName.toLowerCase()!='form') return [];var B=[];var C=['style','className'];for (var i=0;i<C.length;i++){var D=C[i];if (A.elements.namedItem(D)){var E=A.elements.namedItem(D);B.push([E,E.nextSibling]);A.removeChild(E);}};return B;};FCKTools.RestoreFormStyles=function(A,B){if (!A||A.nodeType!=1||A.tagName.toLowerCase()!='form') return;if (B.length>0){for (var i=B.length-1;i>=0;i--){var C=B[i][0];var D=B[i][1];if (D) A.insertBefore(C,D);else A.appendChild(C);}}};FCKTools.GetNextNode=function(A,B){if (A.firstChild) return A.firstChild;else if (A.nextSibling) return A.nextSibling;else{var C=A.parentNode;while (C){if (C==B) return null;if (C.nextSibling) return C.nextSibling;else C=C.parentNode;}};return null;};FCKTools.GetNextTextNode=function(A,B,C){node=this.GetNextNode(A,B);if (C&&node&&C(node)) return null;while (node&&node.nodeType!=3){node=this.GetNextNode(node,B);if (C&&node&&C(node)) return null;};return node;};FCKTools.Merge=function(){var A=arguments;var o=A[0];for (var i=1;i<A.length;i++){var B=A[i];for (var p in B) o[p]=B[p];};return o;};FCKTools.IsArray=function(A){return (A instanceof Array);};FCKTools.AppendLengthProperty=function(A,B){var C=0;for (var n in A) C++;return A[B||'length']=C;};FCKTools.NormalizeCssText=function(A){var B=document.createElement('span');B.style.cssText=A;return B.style.cssText;};FCKTools.Bind=function(A,B){return function(){ return B.apply(A,arguments);};};FCKTools.GetVoidUrl=function(){if (FCK_IS_CUSTOM_DOMAIN) return "javascript: void( function(){document.open();document.write('<html><head><title></title></head><body></body></html>');document.domain = '"+FCK_RUNTIME_DOMAIN+"';document.close();}() ) ;";if (FCKBrowserInfo.IsIE){if (FCKBrowserInfo.IsIE7||!FCKBrowserInfo.IsIE6) return "";else return "javascript: '';";};return "javascript: void(0);";};FCKTools.ResetStyles=function(A){A.style.cssText='margin:0;padding:0;border:0;background-color:transparent;background-image:none;';};
+FCKTools.CancelEvent=function(e){if (e) e.preventDefault();};FCKTools.DisableSelection=function(A){if (FCKBrowserInfo.IsGecko) A.style.MozUserSelect='none';else if (FCKBrowserInfo.IsSafari) A.style.KhtmlUserSelect='none';else A.style.userSelect='none';};FCKTools._AppendStyleSheet=function(A,B){var e=A.createElement('LINK');e.rel='stylesheet';e.type='text/css';e.href=B;A.getElementsByTagName("HEAD")[0].appendChild(e);return e;};FCKTools.AppendStyleString=function(A,B){if (!B) return null;var e=A.createElement("STYLE");e.appendChild(A.createTextNode(B));A.getElementsByTagName("HEAD")[0].appendChild(e);return e;};FCKTools.ClearElementAttributes=function(A){for (var i=0;i<A.attributes.length;i++){A.removeAttribute(A.attributes[i].name,0);}};FCKTools.GetAllChildrenIds=function(A){var B=[];var C=function(parent){for (var i=0;i<parent.childNodes.length;i++){var D=parent.childNodes[i].id;if (D&&D.length>0) B[B.length]=D;C(parent.childNodes[i]);}};C(A);return B;};FCKTools.RemoveOuterTags=function(e){var A=e.ownerDocument.createDocumentFragment();for (var i=0;i<e.childNodes.length;i++) A.appendChild(e.childNodes[i].cloneNode(true));e.parentNode.replaceChild(A,e);};FCKTools.CreateXmlObject=function(A){switch (A){case 'XmlHttp':return new XMLHttpRequest();case 'DOMDocument':var B=(new DOMParser()).parseFromString('<tmp></tmp>','text/xml');FCKDomTools.RemoveNode(B.firstChild);return B;};return null;};FCKTools.GetScrollPosition=function(A){return { X:A.pageXOffset,Y:A.pageYOffset };};FCKTools.AddEventListener=function(A,B,C){A.addEventListener(B,C,false);};FCKTools.RemoveEventListener=function(A,B,C){A.removeEventListener(B,C,false);};FCKTools.AddEventListenerEx=function(A,B,C,D){A.addEventListener(B,function(e){C.apply(A,[e].concat(D||[]));},false);};FCKTools.GetViewPaneSize=function(A){return { Width:A.innerWidth,Height:A.innerHeight };};FCKTools.SaveStyles=function(A){var B=FCKTools.ProtectFormStyles(A);var C={};if (A.className.length>0){C.Class=A.className;A.className='';};var D=A.getAttribute('style');if (D&&D.length>0){C.Inline=D;A.setAttribute('style','',0);};FCKTools.RestoreFormStyles(A,B);return C;};FCKTools.RestoreStyles=function(A,B){var C=FCKTools.ProtectFormStyles(A);A.className=B.Class||'';if (B.Inline) A.setAttribute('style',B.Inline,0);else A.removeAttribute('style',0);FCKTools.RestoreFormStyles(A,C);};FCKTools.RegisterDollarFunction=function(A){A.$=function(id){return A.document.getElementById(id);};};FCKTools.AppendElement=function(A,B){return A.appendChild(A.ownerDocument.createElement(B));};FCKTools.GetElementPosition=function(A,B){var c={ X:0,Y:0 };var C=B||window;var D=FCKTools.GetElementWindow(A);var E=null;while (A){var F=D.getComputedStyle(A,'').position;if (F&&F!='static'&&A.style.zIndex!=FCKConfig.FloatingPanelsZIndex) break;c.X+=A.offsetLeft-A.scrollLeft;c.Y+=A.offsetTop-A.scrollTop;if (!FCKBrowserInfo.IsOpera){var G=E;while (G&&G!=A){c.X-=G.scrollLeft;c.Y-=G.scrollTop;G=G.parentNode;}};E=A;if (A.offsetParent) A=A.offsetParent;else{if (D!=C){A=D.frameElement;E=null;if (A) D=FCKTools.GetElementWindow(A);}else{c.X+=A.scrollLeft;c.Y+=A.scrollTop;break;}}};return c;};
+var FCKeditorAPI;function InitializeAPI(){var A=window.parent;if (!(FCKeditorAPI=A.FCKeditorAPI)){var B='window.FCKeditorAPI = {Version : "2.6.2",VersionBuild : "19417",Instances : new Object(),GetInstance : function( name ){return this.Instances[ name ];},_FormSubmit : function(){for ( var name in FCKeditorAPI.Instances ){var oEditor = FCKeditorAPI.Instances[ name ] ;if ( oEditor.GetParentForm && oEditor.GetParentForm() == this )oEditor.UpdateLinkedField() ;}this._FCKOriginalSubmit() ;},_FunctionQueue	: {Functions : new Array(),IsRunning : false,Add : function( f ){this.Functions.push( f );if ( !this.IsRunning )this.StartNext();},StartNext : function(){var aQueue = this.Functions ;if ( aQueue.length > 0 ){this.IsRunning = true;aQueue[0].call();}else this.IsRunning = false;},Remove : function( f ){var aQueue = this.Functions;var i = 0, fFunc;while( (fFunc = aQueue[ i ]) ){if ( fFunc == f )aQueue.splice( i,1 );i++ ;}this.StartNext();}}}';if (A.execScript) A.execScript(B,'JavaScript');else{if (FCKBrowserInfo.IsGecko10){eval.call(A,B);}else if(FCKBrowserInfo.IsAIR){FCKAdobeAIR.FCKeditorAPI_Evaluate(A,B);}else if (FCKBrowserInfo.IsSafari||FCKBrowserInfo.IsGecko19){var C=A.document;var D=C.createElement('script');D.appendChild(C.createTextNode(B));C.documentElement.appendChild(D);}else A.eval(B);};FCKeditorAPI=A.FCKeditorAPI;FCKeditorAPI.__Instances=FCKeditorAPI.Instances;};FCKeditorAPI.Instances[FCK.Name]=FCK;};function _AttachFormSubmitToAPI(){var A=FCK.GetParentForm();if (A){FCKTools.AddEventListener(A,'submit',FCK.UpdateLinkedField);if (!A._FCKOriginalSubmit&&(typeof(A.submit)=='function'||(!A.submit.tagName&&!A.submit.length))){A._FCKOriginalSubmit=A.submit;A.submit=FCKeditorAPI._FormSubmit;}}};function FCKeditorAPI_Cleanup(){if (window.FCKConfig&&FCKConfig.MsWebBrowserControlCompat&&!window.FCKUnloadFlag) return;delete FCKeditorAPI.Instances[FCK.Name];};function FCKeditorAPI_ConfirmCleanup(){if (window.FCKConfig&&FCKConfig.MsWebBrowserControlCompat) window.FCKUnloadFlag=true;};FCKTools.AddEventListener(window,'unload',FCKeditorAPI_Cleanup);FCKTools.AddEventListener(window,'beforeunload',FCKeditorAPI_ConfirmCleanup);
+var FCKImagePreloader=function(){this._Images=[];};FCKImagePreloader.prototype={AddImages:function(A){if (typeof(A)=='string') A=A.split(';');this._Images=this._Images.concat(A);},Start:function(){var A=this._Images;this._PreloadCount=A.length;for (var i=0;i<A.length;i++){var B=document.createElement('img');FCKTools.AddEventListenerEx(B,'load',_FCKImagePreloader_OnImage,this);FCKTools.AddEventListenerEx(B,'error',_FCKImagePreloader_OnImage,this);B.src=A[i];_FCKImagePreloader_ImageCache.push(B);}}};var _FCKImagePreloader_ImageCache=[];function _FCKImagePreloader_OnImage(A,B){if ((--B._PreloadCount)==0&&B.OnComplete) B.OnComplete();};
+var FCKRegexLib={AposEntity:/&apos;/gi,ObjectElements:/^(?:IMG|TABLE|TR|TD|TH|INPUT|SELECT|TEXTAREA|HR|OBJECT|A|UL|OL|LI)$/i,NamedCommands:/^(?:Cut|Copy|Paste|Print|SelectAll|RemoveFormat|Unlink|Undo|Redo|Bold|Italic|Underline|StrikeThrough|Subscript|Superscript|JustifyLeft|JustifyCenter|JustifyRight|JustifyFull|Outdent|Indent|InsertOrderedList|InsertUnorderedList|InsertHorizontalRule)$/i,BeforeBody:/(^[\s\S]*\<body[^\>]*\>)/i,AfterBody:/(\<\/body\>[\s\S]*$)/i,ToReplace:/___fcktoreplace:([\w]+)/ig,MetaHttpEquiv:/http-equiv\s*=\s*["']?([^"' ]+)/i,HasBaseTag:/<base /i,HasBodyTag:/<body[\s|>]/i,HtmlOpener:/<html\s?[^>]*>/i,HeadOpener:/<head\s?[^>]*>/i,HeadCloser:/<\/head\s*>/i,FCK_Class:/\s*FCK__[^ ]*(?=\s+|$)/,ElementName:/(^[a-z_:][\w.\-:]*\w$)|(^[a-z_]$)/,ForceSimpleAmpersand:/___FCKAmp___/g,SpaceNoClose:/\/>/g,EmptyParagraph:/^<(p|div|address|h\d|center)(?=[ >])[^>]*>\s*(<\/\1>)?$/,EmptyOutParagraph:/^<(p|div|address|h\d|center)(?=[ >])[^>]*>(?:\s*|&nbsp;)(<\/\1>)?$/,TagBody:/></,GeckoEntitiesMarker:/#\?-\:/g,ProtectUrlsImg:/<img(?=\s).*?\ssrc=((?:(?:\s*)("|').*?\2)|(?:[^"'][^ >]+))/gi,ProtectUrlsA:/<a(?=\s).*?\shref=((?:(?:\s*)("|').*?\2)|(?:[^"'][^ >]+))/gi,ProtectUrlsArea:/<area(?=\s).*?\shref=((?:(?:\s*)("|').*?\2)|(?:[^"'][^ >]+))/gi,Html4DocType:/HTML 4\.0 Transitional/i,DocTypeTag:/<!DOCTYPE[^>]*>/i,HtmlDocType:/DTD HTML/,TagsWithEvent:/<[^\>]+ on\w+[\s\r\n]*=[\s\r\n]*?('|")[\s\S]+?\>/g,EventAttributes:/\s(on\w+)[\s\r\n]*=[\s\r\n]*?('|")([\s\S]*?)\2/g,ProtectedEvents:/\s\w+_fckprotectedatt="([^"]+)"/g,StyleProperties:/\S+\s*:/g,InvalidSelfCloseTags:/(<(?!base|meta|link|hr|br|param|img|area|input)([a-zA-Z0-9:]+)[^>]*)\/>/gi,StyleVariableAttName:/#\(\s*("|')(.+?)\1[^\)]*\s*\)/g,RegExp:/^\/(.*)\/([gim]*)$/,HtmlTag:/<[^\s<>](?:"[^"]*"|'[^']*'|[^<])*>/};
+var FCKListsLib={BlockElements:{ address:1,blockquote:1,center:1,div:1,dl:1,fieldset:1,form:1,h1:1,h2:1,h3:1,h4:1,h5:1,h6:1,hr:1,marquee:1,noscript:1,ol:1,p:1,pre:1,script:1,table:1,ul:1 },NonEmptyBlockElements:{ p:1,div:1,form:1,h1:1,h2:1,h3:1,h4:1,h5:1,h6:1,address:1,pre:1,ol:1,ul:1,li:1,td:1,th:1 },InlineChildReqElements:{ abbr:1,acronym:1,b:1,bdo:1,big:1,cite:1,code:1,del:1,dfn:1,em:1,font:1,i:1,ins:1,label:1,kbd:1,q:1,samp:1,small:1,span:1,strike:1,strong:1,sub:1,sup:1,tt:1,u:1,'var':1 },InlineNonEmptyElements:{ a:1,abbr:1,acronym:1,b:1,bdo:1,big:1,cite:1,code:1,del:1,dfn:1,em:1,font:1,i:1,ins:1,label:1,kbd:1,q:1,samp:1,small:1,span:1,strike:1,strong:1,sub:1,sup:1,tt:1,u:1,'var':1 },EmptyElements:{ base:1,col:1,meta:1,link:1,hr:1,br:1,param:1,img:1,area:1,input:1 },PathBlockElements:{ address:1,blockquote:1,dl:1,h1:1,h2:1,h3:1,h4:1,h5:1,h6:1,p:1,pre:1,li:1,dt:1,de:1 },PathBlockLimitElements:{ body:1,div:1,td:1,th:1,caption:1,form:1 },StyleBlockElements:{ address:1,div:1,h1:1,h2:1,h3:1,h4:1,h5:1,h6:1,p:1,pre:1 },StyleObjectElements:{ img:1,hr:1,li:1,table:1,tr:1,td:1,embed:1,object:1,ol:1,ul:1 },NonEditableElements:{ button:1,option:1,script:1,iframe:1,textarea:1,object:1,embed:1,map:1,applet:1 },BlockBoundaries:{ p:1,div:1,h1:1,h2:1,h3:1,h4:1,h5:1,h6:1,hr:1,address:1,pre:1,ol:1,ul:1,li:1,dt:1,de:1,table:1,thead:1,tbody:1,tfoot:1,tr:1,th:1,td:1,caption:1,col:1,colgroup:1,blockquote:1,body:1 },ListBoundaries:{ p:1,div:1,h1:1,h2:1,h3:1,h4:1,h5:1,h6:1,hr:1,address:1,pre:1,ol:1,ul:1,li:1,dt:1,de:1,table:1,thead:1,tbody:1,tfoot:1,tr:1,th:1,td:1,caption:1,col:1,colgroup:1,blockquote:1,body:1,br:1 }};
+var FCKLanguageManager=FCK.Language={AvailableLanguages:{af:'Afrikaans',ar:'Arabic',bg:'Bulgarian',bn:'Bengali/Bangla',bs:'Bosnian',ca:'Catalan',cs:'Czech',da:'Danish',de:'German',el:'Greek',en:'English','en-au':'English (Australia)','en-ca':'English (Canadian)','en-uk':'English (United Kingdom)',eo:'Esperanto',es:'Spanish',et:'Estonian',eu:'Basque',fa:'Persian',fi:'Finnish',fo:'Faroese',fr:'French','fr-ca':'French (Canada)',gl:'Galician',gu:'Gujarati',he:'Hebrew',hi:'Hindi',hr:'Croatian',hu:'Hungarian',it:'Italian',ja:'Japanese',km:'Khmer',ko:'Korean',lt:'Lithuanian',lv:'Latvian',mn:'Mongolian',ms:'Malay',nb:'Norwegian Bokmal',nl:'Dutch',no:'Norwegian',pl:'Polish',pt:'Portuguese (Portugal)','pt-br':'Portuguese (Brazil)',ro:'Romanian',ru:'Russian',sk:'Slovak',sl:'Slovenian',sr:'Serbian (Cyrillic)','sr-latn':'Serbian (Latin)',sv:'Swedish',th:'Thai',tr:'Turkish',uk:'Ukrainian',vi:'Vietnamese',zh:'Chinese Traditional','zh-cn':'Chinese Simplified'},GetActiveLanguage:function(){if (FCKConfig.AutoDetectLanguage){var A;if (navigator.userLanguage) A=navigator.userLanguage.toLowerCase();else if (navigator.language) A=navigator.language.toLowerCase();else{return FCKConfig.DefaultLanguage;};if (A.length>=5){A=A.substr(0,5);if (this.AvailableLanguages[A]) return A;};if (A.length>=2){A=A.substr(0,2);if (this.AvailableLanguages[A]) return A;}};return this.DefaultLanguage;},TranslateElements:function(A,B,C,D){var e=A.getElementsByTagName(B);var E,s;for (var i=0;i<e.length;i++){if ((E=e[i].getAttribute('fckLang'))){if ((s=FCKLang[E])){if (D) s=FCKTools.HTMLEncode(s);e[i][C]=s;}}}},TranslatePage:function(A){this.TranslateElements(A,'INPUT','value');this.TranslateElements(A,'SPAN','innerHTML');this.TranslateElements(A,'LABEL','innerHTML');this.TranslateElements(A,'OPTION','innerHTML',true);this.TranslateElements(A,'LEGEND','innerHTML');},Initialize:function(){if (this.AvailableLanguages[FCKConfig.DefaultLanguage]) this.DefaultLanguage=FCKConfig.DefaultLanguage;else this.DefaultLanguage='en';this.ActiveLanguage={};this.ActiveLanguage.Code=this.GetActiveLanguage();this.ActiveLanguage.Name=this.AvailableLanguages[this.ActiveLanguage.Code];}};
+var FCKXHtmlEntities={};FCKXHtmlEntities.Initialize=function(){if (FCKXHtmlEntities.Entities) return;var A='';var B,e;if (FCKConfig.ProcessHTMLEntities){FCKXHtmlEntities.Entities={' ':'nbsp','¡':'iexcl','¢':'cent','£':'pound','¤':'curren','¥':'yen','¦':'brvbar','§':'sect','¨':'uml','©':'copy','ª':'ordf','«':'laquo','¬':'not','­':'shy','®':'reg','¯':'macr','°':'deg','±':'plusmn','²':'sup2','³':'sup3','´':'acute','µ':'micro','¶':'para','·':'middot','¸':'cedil','¹':'sup1','º':'ordm','»':'raquo','¼':'frac14','½':'frac12','¾':'frac34','¿':'iquest','×':'times','÷':'divide','ƒ':'fnof','•':'bull','…':'hellip','′':'prime','″':'Prime','‾':'oline','⁄':'frasl','℘':'weierp','ℑ':'image','ℜ':'real','™':'trade','ℵ':'alefsym','←':'larr','↑':'uarr','→':'rarr','↓':'darr','↔':'harr','↵':'crarr','⇐':'lArr','⇑':'uArr','⇒':'rArr','⇓':'dArr','⇔':'hArr','∀':'forall','∂':'part','∃':'exist','∅':'empty','∇':'nabla','∈':'isin','∉':'notin','∋':'ni','∏':'prod','∑':'sum','−':'minus','∗':'lowast','√':'radic','∝':'prop','∞':'infin','∠':'ang','∧':'and','∨':'or','∩':'cap','∪':'cup','∫':'int','∴':'there4','∼':'sim','≅':'cong','≈':'asymp','≠':'ne','≡':'equiv','≤':'le','≥':'ge','⊂':'sub','⊃':'sup','⊄':'nsub','⊆':'sube','⊇':'supe','⊕':'oplus','⊗':'otimes','⊥':'perp','⋅':'sdot','\u2308':'lceil','\u2309':'rceil','\u230a':'lfloor','\u230b':'rfloor','\u2329':'lang','\u232a':'rang','◊':'loz','♠':'spades','♣':'clubs','♥':'hearts','♦':'diams','"':'quot','ˆ':'circ','˜':'tilde',' ':'ensp',' ':'emsp',' ':'thinsp','‌':'zwnj','‍':'zwj','‎':'lrm','‏':'rlm','–':'ndash','—':'mdash','‘':'lsquo','’':'rsquo','‚':'sbquo','“':'ldquo','”':'rdquo','„':'bdquo','†':'dagger','‡':'Dagger','‰':'permil','‹':'lsaquo','›':'rsaquo','€':'euro'};for (e in FCKXHtmlEntities.Entities) A+=e;if (FCKConfig.IncludeLatinEntities){B={'À':'Agrave','Á':'Aacute','Â':'Acirc','Ã':'Atilde','Ä':'Auml','Å':'Aring','Æ':'AElig','Ç':'Ccedil','È':'Egrave','É':'Eacute','Ê':'Ecirc','Ë':'Euml','Ì':'Igrave','Í':'Iacute','Î':'Icirc','Ï':'Iuml','Ð':'ETH','Ñ':'Ntilde','Ò':'Ograve','Ó':'Oacute','Ô':'Ocirc','Õ':'Otilde','Ö':'Ouml','Ø':'Oslash','Ù':'Ugrave','Ú':'Uacute','Û':'Ucirc','Ü':'Uuml','Ý':'Yacute','Þ':'THORN','ß':'szlig','à':'agrave','á':'aacute','â':'acirc','ã':'atilde','ä':'auml','å':'aring','æ':'aelig','ç':'ccedil','è':'egrave','é':'eacute','ê':'ecirc','ë':'euml','ì':'igrave','í':'iacute','î':'icirc','ï':'iuml','ð':'eth','ñ':'ntilde','ò':'ograve','ó':'oacute','ô':'ocirc','õ':'otilde','ö':'ouml','ø':'oslash','ù':'ugrave','ú':'uacute','û':'ucirc','ü':'uuml','ý':'yacute','þ':'thorn','ÿ':'yuml','Œ':'OElig','œ':'oelig','Š':'Scaron','š':'scaron','Ÿ':'Yuml'};for (e in B){FCKXHtmlEntities.Entities[e]=B[e];A+=e;};B=null;};if (FCKConfig.IncludeGreekEntities){B={'Α':'Alpha','Β':'Beta','Γ':'Gamma','Δ':'Delta','Ε':'Epsilon','Ζ':'Zeta','Η':'Eta','Θ':'Theta','Ι':'Iota','Κ':'Kappa','Λ':'Lambda','Μ':'Mu','Ν':'Nu','Ξ':'Xi','Ο':'Omicron','Π':'Pi','Ρ':'Rho','Σ':'Sigma','Τ':'Tau','Υ':'Upsilon','Φ':'Phi','Χ':'Chi','Ψ':'Psi','Ω':'Omega','α':'alpha','β':'beta','γ':'gamma','δ':'delta','ε':'epsilon','ζ':'zeta','η':'eta','θ':'theta','ι':'iota','κ':'kappa','λ':'lambda','μ':'mu','ν':'nu','ξ':'xi','ο':'omicron','π':'pi','ρ':'rho','ς':'sigmaf','σ':'sigma','τ':'tau','υ':'upsilon','φ':'phi','χ':'chi','ψ':'psi','ω':'omega','\u03d1':'thetasym','\u03d2':'upsih','\u03d6':'piv'};for (e in B){FCKXHtmlEntities.Entities[e]=B[e];A+=e;};B=null;}}else{FCKXHtmlEntities.Entities={};A=' ';};var C='['+A+']';if (FCKConfig.ProcessNumericEntities) C='[^ -~]|'+C;var D=FCKConfig.AdditionalNumericEntities;if (D&&D.length>0) C+='|'+FCKConfig.AdditionalNumericEntities;FCKXHtmlEntities.EntitiesRegex=new RegExp(C,'g');};
+var FCKXHtml={};FCKXHtml.CurrentJobNum=0;FCKXHtml.GetXHTML=function(A,B,C){FCKDomTools.CheckAndRemovePaddingNode(FCKTools.GetElementDocument(A),FCKConfig.EnterMode);FCKXHtmlEntities.Initialize();this._NbspEntity=(FCKConfig.ProcessHTMLEntities?'nbsp':'#160');var D=FCK.IsDirty();FCKXHtml.SpecialBlocks=[];this.XML=FCKTools.CreateXmlObject('DOMDocument');this.MainNode=this.XML.appendChild(this.XML.createElement('xhtml'));FCKXHtml.CurrentJobNum++;if (B) this._AppendNode(this.MainNode,A);else this._AppendChildNodes(this.MainNode,A,false);var E=this._GetMainXmlString();this.XML=null;if (FCKBrowserInfo.IsSafari) E=E.replace(/^<xhtml.*?>/,'<xhtml>');E=E.substr(7,E.length-15).Trim();if (FCKConfig.DocType.length>0&&FCKRegexLib.HtmlDocType.test(FCKConfig.DocType)) E=E.replace(FCKRegexLib.SpaceNoClose,'>');else E=E.replace(FCKRegexLib.SpaceNoClose,' />');if (FCKConfig.ForceSimpleAmpersand) E=E.replace(FCKRegexLib.ForceSimpleAmpersand,'&');if (C) E=FCKCodeFormatter.Format(E);for (var i=0;i<FCKXHtml.SpecialBlocks.length;i++){var F=new RegExp('___FCKsi___'+i);E=E.replace(F,FCKXHtml.SpecialBlocks[i]);};E=E.replace(FCKRegexLib.GeckoEntitiesMarker,'&');if (!D) FCK.ResetIsDirty();FCKDomTools.EnforcePaddingNode(FCKTools.GetElementDocument(A),FCKConfig.EnterMode);return E;};FCKXHtml._AppendAttribute=function(A,B,C){try{if (C==undefined||C==null) C='';else if (C.replace){if (FCKConfig.ForceSimpleAmpersand) C=C.replace(/&/g,'___FCKAmp___');C=C.replace(FCKXHtmlEntities.EntitiesRegex,FCKXHtml_GetEntity);};var D=this.XML.createAttribute(B);D.value=C;A.attributes.setNamedItem(D);}catch (e){}};FCKXHtml._AppendChildNodes=function(A,B,C){var D=B.firstChild;while (D){this._AppendNode(A,D);D=D.nextSibling;};if (C&&B.tagName&&B.tagName.toLowerCase()!='pre'){FCKDomTools.TrimNode(A);if (FCKConfig.FillEmptyBlocks){var E=A.lastChild;if (E&&E.nodeType==1&&E.nodeName=='br') this._AppendEntity(A,this._NbspEntity);}};if (A.childNodes.length==0){if (C&&FCKConfig.FillEmptyBlocks){this._AppendEntity(A,this._NbspEntity);return A;};var F=A.nodeName;if (FCKListsLib.InlineChildReqElements[F]) return null;if (!FCKListsLib.EmptyElements[F]) A.appendChild(this.XML.createTextNode(''));};return A;};FCKXHtml._AppendNode=function(A,B){if (!B) return false;switch (B.nodeType){case 1:if (FCKBrowserInfo.IsGecko&&B.tagName.toLowerCase()=='br'&&B.parentNode.tagName.toLowerCase()=='pre'){var C='\r';if (B==B.parentNode.firstChild) C+='\r';return FCKXHtml._AppendNode(A,this.XML.createTextNode(C));};if (B.getAttribute('_fckfakelement')) return FCKXHtml._AppendNode(A,FCK.GetRealElement(B));if (FCKBrowserInfo.IsGecko&&B.nextSibling&&(B.hasAttribute('_moz_editor_bogus_node')||B.getAttribute('type')=='_moz')) return false;if (B.getAttribute('_fcktemp')) return false;var D=B.tagName.toLowerCase();if (FCKBrowserInfo.IsIE){if (B.scopeName&&B.scopeName!='HTML'&&B.scopeName!='FCK') D=B.scopeName.toLowerCase()+':'+D;}else{if (D.StartsWith('fck:')) D=D.Remove(0,4);};if (!FCKRegexLib.ElementName.test(D)) return false;if (B._fckxhtmljob&&B._fckxhtmljob==FCKXHtml.CurrentJobNum) return false;var E=this.XML.createElement(D);FCKXHtml._AppendAttributes(A,B,E,D);B._fckxhtmljob=FCKXHtml.CurrentJobNum;var F=FCKXHtml.TagProcessors[D];if (F) E=F(E,B,A);else E=this._AppendChildNodes(E,B,Boolean(FCKListsLib.NonEmptyBlockElements[D]));if (!E) return false;A.appendChild(E);break;case 3:if (B.parentNode&&B.parentNode.nodeName.IEquals('pre')) return this._AppendTextNode(A,B.nodeValue);return this._AppendTextNode(A,B.nodeValue.ReplaceNewLineChars(' '));case 8:if (FCKBrowserInfo.IsIE&&!B.innerHTML) break;try { A.appendChild(this.XML.createComment(B.nodeValue));}catch (e) {/*Do nothing... probably this is a wrong format comment.*/};break;default:A.appendChild(this.XML.createComment("Element not supported - Type: "+B.nodeType+" Name: "+B.nodeName));break;};return true;};FCKXHtml._AppendSpecialItem=function(A){return '___FCKsi___'+FCKXHtml.SpecialBlocks.AddItem(A);};FCKXHtml._AppendEntity=function(A,B){A.appendChild(this.XML.createTextNode('#?-:'+B+';'));};FCKXHtml._AppendTextNode=function(A,B){var C=B.length>0;if (C) A.appendChild(this.XML.createTextNode(B.replace(FCKXHtmlEntities.EntitiesRegex,FCKXHtml_GetEntity)));return C;};function FCKXHtml_GetEntity(A){var B=FCKXHtmlEntities.Entities[A]||('#'+A.charCodeAt(0));return '#?-:'+B+';';};FCKXHtml.TagProcessors={a:function(A,B){if (B.innerHTML.Trim().length==0&&!B.name) return false;var C=B.getAttribute('_fcksavedurl');if (C!=null) FCKXHtml._AppendAttribute(A,'href',C);if (FCKBrowserInfo.IsIE){if (B.name) FCKXHtml._AppendAttribute(A,'name',B.name);};A=FCKXHtml._AppendChildNodes(A,B,false);return A;},area:function(A,B){var C=B.getAttribute('_fcksavedurl');if (C!=null) FCKXHtml._AppendAttribute(A,'href',C);if (FCKBrowserInfo.IsIE){if (!A.attributes.getNamedItem('coords')){var D=B.getAttribute('coords',2);if (D&&D!='0,0,0') FCKXHtml._AppendAttribute(A,'coords',D);};if (!A.attributes.getNamedItem('shape')){var E=B.getAttribute('shape',2);if (E&&E.length>0) FCKXHtml._AppendAttribute(A,'shape',E.toLowerCase());}};return A;},body:function(A,B){A=FCKXHtml._AppendChildNodes(A,B,false);A.removeAttribute('spellcheck');return A;},iframe:function(A,B){var C=B.innerHTML;if (FCKBrowserInfo.IsGecko) C=FCKTools.HTMLDecode(C);C=C.replace(/\s_fcksavedurl="[^"]*"/g,'');A.appendChild(FCKXHtml.XML.createTextNode(FCKXHtml._AppendSpecialItem(C)));return A;},img:function(A,B){if (!A.attributes.getNamedItem('alt')) FCKXHtml._AppendAttribute(A,'alt','');var C=B.getAttribute('_fcksavedurl');if (C!=null) FCKXHtml._AppendAttribute(A,'src',C);if (B.style.width) A.removeAttribute('width');if (B.style.height) A.removeAttribute('height');return A;},li:function(A,B,C){if (C.nodeName.IEquals(['ul','ol'])) return FCKXHtml._AppendChildNodes(A,B,true);var D=FCKXHtml.XML.createElement('ul');B._fckxhtmljob=null;do{FCKXHtml._AppendNode(D,B);do{B=FCKDomTools.GetNextSibling(B);} while (B&&B.nodeType==3&&B.nodeValue.Trim().length==0)}	while (B&&B.nodeName.toLowerCase()=='li') return D;},ol:function(A,B,C){if (B.innerHTML.Trim().length==0) return false;var D=C.lastChild;if (D&&D.nodeType==3) D=D.previousSibling;if (D&&D.nodeName.toUpperCase()=='LI'){B._fckxhtmljob=null;FCKXHtml._AppendNode(D,B);return false;};A=FCKXHtml._AppendChildNodes(A,B);return A;},pre:function (A,B){var C=B.firstChild;if (C&&C.nodeType==3) A.appendChild(FCKXHtml.XML.createTextNode(FCKXHtml._AppendSpecialItem('\r\n')));FCKXHtml._AppendChildNodes(A,B,true);return A;},script:function(A,B){if (!A.attributes.getNamedItem('type')) FCKXHtml._AppendAttribute(A,'type','text/javascript');A.appendChild(FCKXHtml.XML.createTextNode(FCKXHtml._AppendSpecialItem(B.text)));return A;},span:function(A,B){if (B.innerHTML.length==0) return false;A=FCKXHtml._AppendChildNodes(A,B,false);return A;},style:function(A,B){if (!A.attributes.getNamedItem('type')) FCKXHtml._AppendAttribute(A,'type','text/css');var C=B.innerHTML;if (FCKBrowserInfo.IsIE) C=C.replace(/^(\r\n|\n|\r)/,'');A.appendChild(FCKXHtml.XML.createTextNode(FCKXHtml._AppendSpecialItem(C)));return A;},title:function(A,B){A.appendChild(FCKXHtml.XML.createTextNode(FCK.EditorDocument.title));return A;}};FCKXHtml.TagProcessors.ul=FCKXHtml.TagProcessors.ol;
+FCKXHtml._GetMainXmlString=function(){return (new XMLSerializer()).serializeToString(this.MainNode);};FCKXHtml._AppendAttributes=function(A,B,C){var D=B.attributes;for (var n=0;n<D.length;n++){var E=D[n];if (E.specified){var F=E.nodeName.toLowerCase();var G;if (F.StartsWith('_fck')) continue;else if (F.indexOf('_moz')==0) continue;else if (F=='class'){G=E.nodeValue.replace(FCKRegexLib.FCK_Class,'');if (G.length==0) continue;}else if (E.nodeValue===true) G=F;else G=B.getAttribute(F,2);this._AppendAttribute(C,F,G);}}};if (FCKBrowserInfo.IsOpera){FCKXHtml.TagProcessors['head']=function(A,B){FCKXHtml.XML._HeadElement=A;A=FCKXHtml._AppendChildNodes(A,B,true);return A;};FCKXHtml.TagProcessors['meta']=function(A,B,C){if (B.parentNode.nodeName.toLowerCase()!='head'){var D=FCKXHtml.XML._HeadElement;if (D&&C!=D){delete B._fckxhtmljob;FCKXHtml._AppendNode(D,B);return null;}};return A;}};if (FCKBrowserInfo.IsGecko){FCKXHtml.TagProcessors['link']=function(A,B){if (B.href.substr(0,9).toLowerCase()=='chrome://') return false;return A;}};
+var FCKCodeFormatter={};FCKCodeFormatter.Init=function(){var A=this.Regex={};A.BlocksOpener=/\<(P|DIV|H1|H2|H3|H4|H5|H6|ADDRESS|PRE|OL|UL|LI|TITLE|META|LINK|BASE|SCRIPT|LINK|TD|TH|AREA|OPTION)[^\>]*\>/gi;A.BlocksCloser=/\<\/(P|DIV|H1|H2|H3|H4|H5|H6|ADDRESS|PRE|OL|UL|LI|TITLE|META|LINK|BASE|SCRIPT|LINK|TD|TH|AREA|OPTION)[^\>]*\>/gi;A.NewLineTags=/\<(BR|HR)[^\>]*\>/gi;A.MainTags=/\<\/?(HTML|HEAD|BODY|FORM|TABLE|TBODY|THEAD|TR)[^\>]*\>/gi;A.LineSplitter=/\s*\n+\s*/g;A.IncreaseIndent=/^\<(HTML|HEAD|BODY|FORM|TABLE|TBODY|THEAD|TR|UL|OL)[ \/\>]/i;A.DecreaseIndent=/^\<\/(HTML|HEAD|BODY|FORM|TABLE|TBODY|THEAD|TR|UL|OL)[ \>]/i;A.FormatIndentatorRemove=new RegExp('^'+FCKConfig.FormatIndentator);A.ProtectedTags=/(<PRE[^>]*>)([\s\S]*?)(<\/PRE>)/gi;};FCKCodeFormatter._ProtectData=function(A,B,C,D){return B+'___FCKpd___'+FCKCodeFormatter.ProtectedData.AddItem(C)+D;};FCKCodeFormatter.Format=function(A){if (!this.Regex) this.Init();FCKCodeFormatter.ProtectedData=[];var B=A.replace(this.Regex.ProtectedTags,FCKCodeFormatter._ProtectData);B=B.replace(this.Regex.BlocksOpener,'\n$&');B=B.replace(this.Regex.BlocksCloser,'$&\n');B=B.replace(this.Regex.NewLineTags,'$&\n');B=B.replace(this.Regex.MainTags,'\n$&\n');var C='';var D=B.split(this.Regex.LineSplitter);B='';for (var i=0;i<D.length;i++){var E=D[i];if (E.length==0) continue;if (this.Regex.DecreaseIndent.test(E)) C=C.replace(this.Regex.FormatIndentatorRemove,'');B+=C+E+'\n';if (this.Regex.IncreaseIndent.test(E)) C+=FCKConfig.FormatIndentator;};for (var j=0;j<FCKCodeFormatter.ProtectedData.length;j++){var F=new RegExp('___FCKpd___'+j);B=B.replace(F,FCKCodeFormatter.ProtectedData[j].replace(/\$/g,'$$$$'));};return B.Trim();};
+var FCKUndo={};FCKUndo.SavedData=[];FCKUndo.CurrentIndex=-1;FCKUndo.TypesCount=0;FCKUndo.Changed=false;FCKUndo.MaxTypes=25;FCKUndo.Typing=false;FCKUndo.SaveLocked=false;FCKUndo._GetBookmark=function(){FCKSelection.Restore();var A=new FCKDomRange(FCK.EditorWindow);try{A.MoveToSelection();}catch (e){return null;};if (FCKBrowserInfo.IsIE){var B=A.CreateBookmark();var C=FCK.EditorDocument.body.innerHTML;A.MoveToBookmark(B);return [B,C];};return A.CreateBookmark2();};FCKUndo._SelectBookmark=function(A){if (!A) return;var B=new FCKDomRange(FCK.EditorWindow);if (A instanceof Object){if (FCKBrowserInfo.IsIE) B.MoveToBookmark(A[0]);else B.MoveToBookmark2(A);try{B.Select();}catch (e){B.MoveToPosition(FCK.EditorDocument.body,4);B.Select();}}};FCKUndo._CompareCursors=function(A,B){for (var i=0;i<Math.min(A.length,B.length);i++){if (A[i]<B[i]) return-1;else if (A[i]>B[i]) return 1;};if (A.length<B.length) return-1;else if (A.length>B.length) return 1;return 0;};FCKUndo._CheckIsBookmarksEqual=function(A,B){if (!(A&&B)) return false;if (FCKBrowserInfo.IsIE){var C=A[1].search(A[0].StartId);var D=B[1].search(B[0].StartId);var E=A[1].search(A[0].EndId);var F=B[1].search(B[0].EndId);return C==D&&E==F;}else{return this._CompareCursors(A.Start,B.Start)==0&&this._CompareCursors(A.End,B.End)==0;}};FCKUndo.SaveUndoStep=function(){if (FCK.EditMode!=0||this.SaveLocked) return;if (this.SavedData.length) this.Changed=true;var A=FCK.EditorDocument.body.innerHTML;var B=this._GetBookmark();this.SavedData=this.SavedData.slice(0,this.CurrentIndex+1);if (this.CurrentIndex>0&&A==this.SavedData[this.CurrentIndex][0]&&this._CheckIsBookmarksEqual(B,this.SavedData[this.CurrentIndex][1])) return;else if (this.CurrentIndex==0&&this.SavedData.length&&A==this.SavedData[0][0]){this.SavedData[0][1]=B;return;};if (this.CurrentIndex+1>=FCKConfig.MaxUndoLevels) this.SavedData.shift();else this.CurrentIndex++;this.SavedData[this.CurrentIndex]=[A,B];FCK.Events.FireEvent("OnSelectionChange");};FCKUndo.CheckUndoState=function(){return (this.Changed||this.CurrentIndex>0);};FCKUndo.CheckRedoState=function(){return (this.CurrentIndex<(this.SavedData.length-1));};FCKUndo.Undo=function(){if (this.CheckUndoState()){if (this.CurrentIndex==(this.SavedData.length-1)){this.SaveUndoStep();};this._ApplyUndoLevel(--this.CurrentIndex);FCK.Events.FireEvent("OnSelectionChange");}};FCKUndo.Redo=function(){if (this.CheckRedoState()){this._ApplyUndoLevel(++this.CurrentIndex);FCK.Events.FireEvent("OnSelectionChange");}};FCKUndo._ApplyUndoLevel=function(A){var B=this.SavedData[A];if (!B) return;if (FCKBrowserInfo.IsIE){if (B[1]&&B[1][1]) FCK.SetInnerHtml(B[1][1]);else FCK.SetInnerHtml(B[0]);}else FCK.EditorDocument.body.innerHTML=B[0];this._SelectBookmark(B[1]);this.TypesCount=0;this.Changed=false;this.Typing=false;};
+var FCKEditingArea=function(A){this.TargetElement=A;this.Mode=0;if (FCK.IECleanup) FCK.IECleanup.AddItem(this,FCKEditingArea_Cleanup);};FCKEditingArea.prototype.Start=function(A,B){var C=this.TargetElement;var D=FCKTools.GetElementDocument(C);while(C.firstChild) C.removeChild(C.firstChild);if (this.Mode==0){if (FCK_IS_CUSTOM_DOMAIN) A='<script>document.domain="'+FCK_RUNTIME_DOMAIN+'";</script>'+A;if (FCKBrowserInfo.IsIE) A=A.replace(/(<base[^>]*?)\s*\/?>(?!\s*<\/base>)/gi,'$1></base>');else if (!B){var E=A.match(FCKRegexLib.BeforeBody);var F=A.match(FCKRegexLib.AfterBody);if (E&&F){var G=A.substr(E[1].length,A.length-E[1].length-F[1].length);A=E[1]+'&nbsp;'+F[1];if (FCKBrowserInfo.IsGecko&&(G.length==0||FCKRegexLib.EmptyParagraph.test(G))) G='<br type="_moz">';this._BodyHTML=G;}else this._BodyHTML=A;};var H=this.IFrame=D.createElement('iframe');var I='<script type="text/javascript" _fcktemp="true">window.onerror=function(){return true;};</script>';H.frameBorder=0;H.style.width=H.style.height='100%';if (FCK_IS_CUSTOM_DOMAIN&&FCKBrowserInfo.IsIE){window._FCKHtmlToLoad=A.replace(/<head>/i,'<head>'+I);H.src='javascript:void( (function(){document.open() ;document.domain="'+document.domain+'" ;document.write( window.parent._FCKHtmlToLoad );document.close() ;window.parent._FCKHtmlToLoad = null ;})() )';}else if (!FCKBrowserInfo.IsGecko){H.src='javascript:void(0)';};C.appendChild(H);this.Window=H.contentWindow;if (!FCK_IS_CUSTOM_DOMAIN||!FCKBrowserInfo.IsIE){var J=this.Window.document;J.open();J.write(A.replace(/<head>/i,'<head>'+I));J.close();};if (FCKBrowserInfo.IsAIR) FCKAdobeAIR.EditingArea_Start(J,A);if (FCKBrowserInfo.IsGecko10&&!B){this.Start(A,true);return;};if (H.readyState&&H.readyState!='completed'){var K=this;(H.onreadystatechange=function(){if (H.readyState=='complete'){H.onreadystatechange=null;K.Window._FCKEditingArea=K;FCKEditingArea_CompleteStart.call(K.Window);}})();}else{this.Window._FCKEditingArea=this;if (FCKBrowserInfo.IsGecko10) this.Window.setTimeout(FCKEditingArea_CompleteStart,500);else FCKEditingArea_CompleteStart.call(this.Window);}}else{var L=this.Textarea=D.createElement('textarea');L.className='SourceField';L.dir='ltr';FCKDomTools.SetElementStyles(L,{width:'100%',height:'100%',border:'none',resize:'none',outline:'none'});C.appendChild(L);L.value=A;FCKTools.RunFunction(this.OnLoad);}};function FCKEditingArea_CompleteStart(){if (!this.document.body){this.setTimeout(FCKEditingArea_CompleteStart,50);return;};var A=this._FCKEditingArea;A.Document=A.Window.document;A.MakeEditable();FCKTools.RunFunction(A.OnLoad);};FCKEditingArea.prototype.MakeEditable=function(){var A=this.Document;if (FCKBrowserInfo.IsIE){A.body.disabled=true;A.body.contentEditable=true;A.body.removeAttribute("disabled");}else{try{A.body.spellcheck=(this.FFSpellChecker!==false);if (this._BodyHTML){A.body.innerHTML=this._BodyHTML;A.body.offsetLeft;this._BodyHTML=null;};A.designMode='on';A.execCommand('enableObjectResizing',false,!FCKConfig.DisableObjectResizing);A.execCommand('enableInlineTableEditing',false,!FCKConfig.DisableFFTableHandles);}catch (e){FCKTools.AddEventListener(this.Window.frameElement,'DOMAttrModified',FCKEditingArea_Document_AttributeNodeModified);}}};function FCKEditingArea_Document_AttributeNodeModified(A){var B=A.currentTarget.contentWindow._FCKEditingArea;if (B._timer) window.clearTimeout(B._timer);B._timer=FCKTools.SetTimeout(FCKEditingArea_MakeEditableByMutation,1000,B);};function FCKEditingArea_MakeEditableByMutation(){delete this._timer;FCKTools.RemoveEventListener(this.Window.frameElement,'DOMAttrModified',FCKEditingArea_Document_AttributeNodeModified);this.MakeEditable();};FCKEditingArea.prototype.Focus=function(){try{if (this.Mode==0){if (FCKBrowserInfo.IsIE) this._FocusIE();else this.Window.focus();}else{var A=FCKTools.GetElementDocument(this.Textarea);if ((!A.hasFocus||A.hasFocus())&&A.activeElement==this.Textarea) return;this.Textarea.focus();}}catch(e) {}};FCKEditingArea.prototype._FocusIE=function(){this.Document.body.setActive();this.Window.focus();var A=this.Document.selection.createRange();var B=A.parentElement();var C=B.nodeName.toLowerCase();if (B.childNodes.length>0||!(FCKListsLib.BlockElements[C]||FCKListsLib.NonEmptyBlockElements[C])){return;};A=new FCKDomRange(this.Window);A.MoveToElementEditStart(B);A.Select();};function FCKEditingArea_Cleanup(){if (this.Document) this.Document.body.innerHTML="";this.TargetElement=null;this.IFrame=null;this.Document=null;this.Textarea=null;if (this.Window){this.Window._FCKEditingArea=null;this.Window=null;}};
+var FCKKeystrokeHandler=function(A){this.Keystrokes={};this.CancelCtrlDefaults=(A!==false);};FCKKeystrokeHandler.prototype.AttachToElement=function(A){FCKTools.AddEventListenerEx(A,'keydown',_FCKKeystrokeHandler_OnKeyDown,this);if (FCKBrowserInfo.IsGecko10||FCKBrowserInfo.IsOpera||(FCKBrowserInfo.IsGecko&&FCKBrowserInfo.IsMac)) FCKTools.AddEventListenerEx(A,'keypress',_FCKKeystrokeHandler_OnKeyPress,this);};FCKKeystrokeHandler.prototype.SetKeystrokes=function(){for (var i=0;i<arguments.length;i++){var A=arguments[i];if (!A) continue;if (typeof(A[0])=='object') this.SetKeystrokes.apply(this,A);else{if (A.length==1) delete this.Keystrokes[A[0]];else this.Keystrokes[A[0]]=A[1]===true?true:A;}}};function _FCKKeystrokeHandler_OnKeyDown(A,B){var C=A.keyCode||A.which;var D=0;if (A.ctrlKey||A.metaKey) D+=CTRL;if (A.shiftKey) D+=SHIFT;if (A.altKey) D+=ALT;var E=C+D;var F=B._CancelIt=false;var G=B.Keystrokes[E];if (G){if (G===true||!(B.OnKeystroke&&B.OnKeystroke.apply(B,G))) return true;F=true;};if (F||(B.CancelCtrlDefaults&&D==CTRL&&(C<33||C>40))){B._CancelIt=true;if (A.preventDefault) return A.preventDefault();A.returnValue=false;A.cancelBubble=true;return false;};return true;};function _FCKKeystrokeHandler_OnKeyPress(A,B){if (B._CancelIt){if (A.preventDefault) return A.preventDefault();return false;};return true;};
+FCK.DTD=(function(){var X=FCKTools.Merge;var A,L,J,M,N,O,D,H,P,K,Q,F,G,C,B,E,I;A={isindex:1,fieldset:1};B={input:1,button:1,select:1,textarea:1,label:1};C=X({a:1},B);D=X({iframe:1},C);E={hr:1,ul:1,menu:1,div:1,blockquote:1,noscript:1,table:1,center:1,address:1,dir:1,pre:1,h5:1,dl:1,h4:1,noframes:1,h6:1,ol:1,h1:1,h3:1,h2:1};F={ins:1,del:1,script:1};G=X({b:1,acronym:1,bdo:1,'var':1,'#':1,abbr:1,code:1,br:1,i:1,cite:1,kbd:1,u:1,strike:1,s:1,tt:1,strong:1,q:1,samp:1,em:1,dfn:1,span:1},F);H=X({sub:1,img:1,object:1,sup:1,basefont:1,map:1,applet:1,font:1,big:1,small:1},G);I=X({p:1},H);J=X({iframe:1},H,B);K={img:1,noscript:1,br:1,kbd:1,center:1,button:1,basefont:1,h5:1,h4:1,samp:1,h6:1,ol:1,h1:1,h3:1,h2:1,form:1,font:1,'#':1,select:1,menu:1,ins:1,abbr:1,label:1,code:1,table:1,script:1,cite:1,input:1,iframe:1,strong:1,textarea:1,noframes:1,big:1,small:1,span:1,hr:1,sub:1,bdo:1,'var':1,div:1,object:1,sup:1,strike:1,dir:1,map:1,dl:1,applet:1,del:1,isindex:1,fieldset:1,ul:1,b:1,acronym:1,a:1,blockquote:1,i:1,u:1,s:1,tt:1,address:1,q:1,pre:1,p:1,em:1,dfn:1};L=X({a:1},J);M={tr:1};N={'#':1};O=X({param:1},K);P=X({form:1},A,D,E,I);Q={li:1};return {col:{},tr:{td:1,th:1},img:{},colgroup:{col:1},noscript:P,td:P,br:{},th:P,center:P,kbd:L,button:X(I,E),basefont:{},h5:L,h4:L,samp:L,h6:L,ol:Q,h1:L,h3:L,option:N,h2:L,form:X(A,D,E,I),select:{optgroup:1,option:1},font:J,ins:P,menu:Q,abbr:L,label:L,table:{thead:1,col:1,tbody:1,tr:1,colgroup:1,caption:1,tfoot:1},code:L,script:N,tfoot:M,cite:L,li:P,input:{},iframe:P,strong:J,textarea:N,noframes:P,big:J,small:J,span:J,hr:{},dt:L,sub:J,optgroup:{option:1},param:{},bdo:L,'var':J,div:P,object:O,sup:J,dd:P,strike:J,area:{},dir:Q,map:X({area:1,form:1,p:1},A,F,E),applet:O,dl:{dt:1,dd:1},del:P,isindex:{},fieldset:X({legend:1},K),thead:M,ul:Q,acronym:L,b:J,a:J,blockquote:P,caption:L,i:J,u:J,tbody:M,s:L,address:X(D,I),tt:J,legend:L,q:L,pre:X(G,C),p:L,em:J,dfn:L};})();
+var FCKStyle=function(A){this.Element=(A.Element||'span').toLowerCase();this._StyleDesc=A;};FCKStyle.prototype={GetType:function(){var A=this.GetType_$;if (A!=undefined) return A;var B=this.Element;if (B=='#'||FCKListsLib.StyleBlockElements[B]) A=0;else if (FCKListsLib.StyleObjectElements[B]) A=2;else A=1;return (this.GetType_$=A);},ApplyToSelection:function(A){var B=new FCKDomRange(A);B.MoveToSelection();this.ApplyToRange(B,true);},ApplyToRange:function(A,B,C){switch (this.GetType()){case 0:this.ApplyToRange=this._ApplyBlockStyle;break;case 1:this.ApplyToRange=this._ApplyInlineStyle;break;default:return;};this.ApplyToRange(A,B,C);},ApplyToObject:function(A){if (!A) return;this.BuildElement(null,A);},RemoveFromSelection:function(A){var B=new FCKDomRange(A);B.MoveToSelection();this.RemoveFromRange(B,true);},RemoveFromRange:function(A,B,C){var D;var E=this._GetAttribsForComparison();var F=this._GetOverridesForComparison();if (A.CheckIsCollapsed()){var D=A.CreateBookmark(true);var H=A.GetBookmarkNode(D,true);var I=new FCKElementPath(H.parentNode);var J=[];var K=!FCKDomTools.GetNextSibling(H);var L=K||!FCKDomTools.GetPreviousSibling(H);var M;var N=-1;for (var i=0;i<I.Elements.length;i++){var O=I.Elements[i];if (this.CheckElementRemovable(O)){if (L&&!FCKDomTools.CheckIsEmptyElement(O,function(el){return (el!=H);})){M=O;N=J.length-1;}else{var P=O.nodeName.toLowerCase();if (P==this.Element){for (var Q in E){if (FCKDomTools.HasAttribute(O,Q)){switch (Q){case 'style':this._RemoveStylesFromElement(O);break;case 'class':if (FCKDomTools.GetAttributeValue(O,Q)!=this.GetFinalAttributeValue(Q)) continue;default:FCKDomTools.RemoveAttribute(O,Q);}}}};this._RemoveOverrides(O,F[P]);if (this.GetType()==1) this._RemoveNoAttribElement(O);}}else if (L) J.push(O);L=L&&((K&&!FCKDomTools.GetNextSibling(O))||(!K&&!FCKDomTools.GetPreviousSibling(O)));if (M&&(!L||(i==I.Elements.length-1))){var R=FCKDomTools.RemoveNode(H);for (var j=0;j<=N;j++){var S=FCKDomTools.CloneElement(J[j]);S.appendChild(R);R=S;};if (K) FCKDomTools.InsertAfterNode(M,R);else M.parentNode.insertBefore(R,M);L=false;M=null;}};if (B) A.SelectBookmark(D);if (C) A.MoveToBookmark(D);return;};A.Expand('inline_elements');D=A.CreateBookmark(true);var T=A.GetBookmarkNode(D,true);var U=A.GetBookmarkNode(D,false);A.Release(true);var I=new FCKElementPath(T);var X=I.Elements;var O;for (var i=1;i<X.length;i++){O=X[i];if (O==I.Block||O==I.BlockLimit) break;if (this.CheckElementRemovable(O)) FCKDomTools.BreakParent(T,O,A);};I=new FCKElementPath(U);X=I.Elements;for (var i=1;i<X.length;i++){O=X[i];if (O==I.Block||O==I.BlockLimit) break;b=O.nodeName.toLowerCase();if (this.CheckElementRemovable(O)) FCKDomTools.BreakParent(U,O,A);};var Z=FCKDomTools.GetNextSourceNode(T,true);while (Z){var a=FCKDomTools.GetNextSourceNode(Z);if (Z.nodeType==1){var b=Z.nodeName.toLowerCase();var c=(b==this.Element);if (c){for (var Q in E){if (FCKDomTools.HasAttribute(Z,Q)){switch (Q){case 'style':this._RemoveStylesFromElement(Z);break;case 'class':if (FCKDomTools.GetAttributeValue(Z,Q)!=this.GetFinalAttributeValue(Q)) continue;default:FCKDomTools.RemoveAttribute(Z,Q);}}}}else c=!!F[b];if (c){this._RemoveOverrides(Z,F[b]);this._RemoveNoAttribElement(Z);}};if (a==U) break;Z=a;};this._FixBookmarkStart(T);if (B) A.SelectBookmark(D);if (C) A.MoveToBookmark(D);},CheckElementRemovable:function(A,B){if (!A) return false;var C=A.nodeName.toLowerCase();if (C==this.Element){if (!B&&!FCKDomTools.HasAttributes(A)) return true;var D=this._GetAttribsForComparison();var E=(D._length==0);for (var F in D){if (F=='_length') continue;if (this._CompareAttributeValues(F,FCKDomTools.GetAttributeValue(A,F),(this.GetFinalAttributeValue(F)||''))){E=true;if (!B) break;}else{E=false;if (B) return false;}};if (E) return true;};var G=this._GetOverridesForComparison()[C];if (G){if (!(D=G.Attributes)) return true;for (var i=0;i<D.length;i++){var H=D[i][0];if (FCKDomTools.HasAttribute(A,H)){var I=D[i][1];if (I==null||(typeof I=='string'&&FCKDomTools.GetAttributeValue(A,H)==I)||I.test(FCKDomTools.GetAttributeValue(A,H))) return true;}}};return false;},CheckActive:function(A){switch (this.GetType()){case 0:return this.CheckElementRemovable(A.Block||A.BlockLimit,true);case 1:var B=A.Elements;for (var i=0;i<B.length;i++){var C=B[i];if (C==A.Block||C==A.BlockLimit) continue;if (this.CheckElementRemovable(C,true)) return true;}};return false;},RemoveFromElement:function(A){var B=this._GetAttribsForComparison();var C=this._GetOverridesForComparison();var D=A.getElementsByTagName(this.Element);for (var i=D.length-1;i>=0;i--){var E=D[i];for (var F in B){if (FCKDomTools.HasAttribute(E,F)){switch (F){case 'style':this._RemoveStylesFromElement(E);break;case 'class':if (FCKDomTools.GetAttributeValue(E,F)!=this.GetFinalAttributeValue(F)) continue;default:FCKDomTools.RemoveAttribute(E,F);}}};this._RemoveOverrides(E,C[this.Element]);this._RemoveNoAttribElement(E);};for (var G in C){if (G!=this.Element){D=A.getElementsByTagName(G);for (var i=D.length-1;i>=0;i--){var E=D[i];this._RemoveOverrides(E,C[G]);this._RemoveNoAttribElement(E);}}}},_RemoveStylesFromElement:function(A){var B=A.style.cssText;var C=this.GetFinalStyleValue();if (B.length>0&&C.length==0) return;C='(^|;)\\s*('+C.replace(/\s*([^ ]+):.*?(;|$)/g,'$1|').replace(/\|$/,'')+'):[^;]+';var D=new RegExp(C,'gi');B=B.replace(D,'').Trim();if (B.length==0||B==';') FCKDomTools.RemoveAttribute(A,'style');else A.style.cssText=B.replace(D,'');},_RemoveOverrides:function(A,B){var C=B&&B.Attributes;if (C){for (var i=0;i<C.length;i++){var D=C[i][0];if (FCKDomTools.HasAttribute(A,D)){var E=C[i][1];if (E==null||(E.test&&E.test(FCKDomTools.GetAttributeValue(A,D)))||(typeof E=='string'&&FCKDomTools.GetAttributeValue(A,D)==E)) FCKDomTools.RemoveAttribute(A,D);}}}},_RemoveNoAttribElement:function(A){if (!FCKDomTools.HasAttributes(A)){var B=A.firstChild;var C=A.lastChild;FCKDomTools.RemoveNode(A,true);this._MergeSiblings(B);if (B!=C) this._MergeSiblings(C);}},BuildElement:function(A,B){var C=B||A.createElement(this.Element);var D=this._StyleDesc.Attributes;var E;if (D){for (var F in D){E=this.GetFinalAttributeValue(F);if (F.toLowerCase()=='class') C.className=E;else C.setAttribute(F,E);}};if (this._GetStyleText().length>0) C.style.cssText=this.GetFinalStyleValue();return C;},_CompareAttributeValues:function(A,B,C){if (A=='style'&&B&&C){B=B.replace(/;$/,'').toLowerCase();C=C.replace(/;$/,'').toLowerCase();};return (B==C||((B===null||B==='')&&(C===null||C==='')))},GetFinalAttributeValue:function(A){var B=this._StyleDesc.Attributes;var B=B?B[A]:null;if (!B&&A=='style') return this.GetFinalStyleValue();if (B&&this._Variables) B=B.Replace(FCKRegexLib.StyleVariableAttName,this._GetVariableReplace,this);return B;},GetFinalStyleValue:function(){var A=this._GetStyleText();if (A.length>0&&this._Variables){A=A.Replace(FCKRegexLib.StyleVariableAttName,this._GetVariableReplace,this);A=FCKTools.NormalizeCssText(A);};return A;},_GetVariableReplace:function(){return this._Variables[arguments[2]]||arguments[0];},SetVariable:function(A,B){var C=this._Variables;if (!C) C=this._Variables={};this._Variables[A]=B;},_FromPre:function(A,B,C){var D=B.innerHTML;D=D.replace(/(\r\n|\r)/g,'\n');D=D.replace(/^[ \t]*\n/,'');D=D.replace(/\n$/,'');D=D.replace(/^[ \t]+|[ \t]+$/g,function(match,offset,s){if (match.length==1) return '&nbsp;';else if (offset==0) return new Array(match.length).join('&nbsp;')+' ';else return ' '+new Array(match.length).join('&nbsp;');});var E=new FCKHtmlIterator(D);var F=[];E.Each(function(isTag,value){if (!isTag){value=value.replace(/\n/g,'<BR>');value=value.replace(/[ \t]{2,}/g,function (match){return new Array(match.length).join('&nbsp;')+' ';});};F.push(value);});C.innerHTML=F.join('');return C;},_ToPre:function(A,B,C){var D=B.innerHTML.Trim();D=D.replace(/[ \t\r\n]*(<br[^>]*>)[ \t\r\n]*/gi,'<BR />');var E=new FCKHtmlIterator(D);var F=[];E.Each(function(isTag,value){if (!isTag) value=value.replace(/([ \t\n\r]+|&nbsp;)/g,' ');else if (isTag&&value=='<BR />') value='\n';F.push(value);});if (FCKBrowserInfo.IsIE){var G=A.createElement('div');G.appendChild(C);C.outerHTML='<PRE>\n'+F.join('')+'</PRE>';C=G.removeChild(G.firstChild);}else C.innerHTML=F.join('');return C;},_ApplyBlockStyle:function(A,B,C){var D;if (B) D=A.CreateBookmark();var E=new FCKDomRangeIterator(A);E.EnforceRealBlocks=true;var F;var G=A.Window.document;var H=[];var I=[];while((F=E.GetNextParagraph())){var J=this.BuildElement(G);var K=J.nodeName.IEquals('pre');var L=F.nodeName.IEquals('pre');if (K&&!L){J=this._ToPre(G,F,J);H.push(J);}else if (!K&&L){J=this._FromPre(G,F,J);I.push(J);}else FCKDomTools.MoveChildren(F,J);F.parentNode.insertBefore(J,F);FCKDomTools.RemoveNode(F);};for (var i=0;i<H.length-1;i++){if (FCKDomTools.GetNextSourceElement(H[i],true,[],[],true)!=H[i+1]) continue;H[i+1].innerHTML=H[i].innerHTML+'\n\n'+H[i+1].innerHTML;FCKDomTools.RemoveNode(H[i]);};for (var i=0;i<I.length;i++){var M=I[i];var N=null;for (var j=0;j<M.childNodes.length;j++){var O=M.childNodes[j];if (O.nodeName.IEquals('br')&&j!=0&&j!=M.childNodes.length-2&&O.nextSibling&&O.nextSibling.nodeName.IEquals('br')){FCKDomTools.RemoveNode(O.nextSibling);FCKDomTools.RemoveNode(O);j--;N=FCKDomTools.InsertAfterNode(N||M,G.createElement(M.nodeName));continue;};if (N){FCKDomTools.MoveNode(O,N);j--;}}};if (B) A.SelectBookmark(D);if (C) A.MoveToBookmark(D);},_ApplyInlineStyle:function(A,B,C){var D=A.Window.document;if (A.CheckIsCollapsed()){var E=this.BuildElement(D);A.InsertNode(E);A.MoveToPosition(E,2);A.Select();return;};var F=this.Element;var G=FCK.DTD[F]||FCK.DTD.span;var H=this._GetAttribsForComparison();var I;A.Expand('inline_elements');var J=A.CreateBookmark(true);var K=A.GetBookmarkNode(J,true);var L=A.GetBookmarkNode(J,false);A.Release(true);var M=FCKDomTools.GetNextSourceNode(K,true);while (M){var N=false;var O=M.nodeType;var P=O==1?M.nodeName.toLowerCase():null;if (!P||G[P]){if ((FCK.DTD[M.parentNode.nodeName.toLowerCase()]||FCK.DTD.span)[F]||!FCK.DTD[F]){if (!A.CheckHasRange()) A.SetStart(M,3);if (O!=1||M.childNodes.length==0){var Q=M;var R=Q.parentNode;while (Q==R.lastChild&&G[R.nodeName.toLowerCase()]){Q=R;};A.SetEnd(Q,4);if (Q==Q.parentNode.lastChild&&!G[Q.parentNode.nodeName.toLowerCase()]) N=true;}else{A.SetEnd(M,3);}}else N=true;}else N=true;M=FCKDomTools.GetNextSourceNode(M);if (M==L){M=null;N=true;};if (N&&A.CheckHasRange()&&!A.CheckIsCollapsed()){I=this.BuildElement(D);A.ExtractContents().AppendTo(I);if (I.innerHTML.RTrim().length>0){A.InsertNode(I);this.RemoveFromElement(I);this._MergeSiblings(I,this._GetAttribsForComparison());if (!FCKBrowserInfo.IsIE) I.normalize();};A.Release(true);}};this._FixBookmarkStart(K);if (B) A.SelectBookmark(J);if (C) A.MoveToBookmark(J);},_FixBookmarkStart:function(A){var B;while ((B=A.nextSibling)){if (B.nodeType==1&&FCKListsLib.InlineNonEmptyElements[B.nodeName.toLowerCase()]){if (!B.firstChild) FCKDomTools.RemoveNode(B);else FCKDomTools.MoveNode(A,B,true);continue;};if (B.nodeType==3&&B.length==0){FCKDomTools.RemoveNode(B);continue;};break;}},_MergeSiblings:function(A,B){if (!A||A.nodeType!=1||!FCKListsLib.InlineNonEmptyElements[A.nodeName.toLowerCase()]) return;this._MergeNextSibling(A,B);this._MergePreviousSibling(A,B);},_MergeNextSibling:function(A,B){var C=A.nextSibling;var D=(C&&C.nodeType==1&&C.getAttribute('_fck_bookmark'));if (D) C=C.nextSibling;if (C&&C.nodeType==1&&C.nodeName==A.nodeName){if (!B) B=this._CreateElementAttribsForComparison(A);if (this._CheckAttributesMatch(C,B)){var E=A.lastChild;if (D) FCKDomTools.MoveNode(A.nextSibling,A);FCKDomTools.MoveChildren(C,A);FCKDomTools.RemoveNode(C);if (E) this._MergeNextSibling(E);}}},_MergePreviousSibling:function(A,B){var C=A.previousSibling;var D=(C&&C.nodeType==1&&C.getAttribute('_fck_bookmark'));if (D) C=C.previousSibling;if (C&&C.nodeType==1&&C.nodeName==A.nodeName){if (!B) B=this._CreateElementAttribsForComparison(A);if (this._CheckAttributesMatch(C,B)){var E=A.firstChild;if (D) FCKDomTools.MoveNode(A.previousSibling,A,true);FCKDomTools.MoveChildren(C,A,true);FCKDomTools.RemoveNode(C);if (E) this._MergePreviousSibling(E);}}},_GetStyleText:function(){var A=this._StyleDesc.Styles;var B=(this._StyleDesc.Attributes?this._StyleDesc.Attributes['style']||'':'');if (B.length>0) B+=';';for (var C in A) B+=C+':'+A[C]+';';if (B.length>0&&!(/#\(/.test(B))){B=FCKTools.NormalizeCssText(B);};return (this._GetStyleText=function() { return B;})();},_GetAttribsForComparison:function(){var A=this._GetAttribsForComparison_$;if (A) return A;A={};var B=this._StyleDesc.Attributes;if (B){for (var C in B){A[C.toLowerCase()]=B[C].toLowerCase();}};if (this._GetStyleText().length>0){A['style']=this._GetStyleText().toLowerCase();};FCKTools.AppendLengthProperty(A,'_length');return (this._GetAttribsForComparison_$=A);},_GetOverridesForComparison:function(){var A=this._GetOverridesForComparison_$;if (A) return A;A={};var B=this._StyleDesc.Overrides;if (B){if (!FCKTools.IsArray(B)) B=[B];for (var i=0;i<B.length;i++){var C=B[i];var D;var E;var F;if (typeof C=='string') D=C.toLowerCase();else{D=C.Element?C.Element.toLowerCase():this.Element;F=C.Attributes;};E=A[D]||(A[D]={});if (F){var G=(E.Attributes=E.Attributes||[]);for (var H in F){G.push([H.toLowerCase(),F[H]]);}}}};return (this._GetOverridesForComparison_$=A);},_CreateElementAttribsForComparison:function(A){var B={};var C=0;for (var i=0;i<A.attributes.length;i++){var D=A.attributes[i];if (D.specified){B[D.nodeName.toLowerCase()]=FCKDomTools.GetAttributeValue(A,D).toLowerCase();C++;}};B._length=C;return B;},_CheckAttributesMatch:function(A,B){var C=A.attributes;var D=0;for (var i=0;i<C.length;i++){var E=C[i];if (E.specified){var F=E.nodeName.toLowerCase();var G=B[F];if (!G) break;if (G!=FCKDomTools.GetAttributeValue(A,E).toLowerCase()) break;D++;}};return (D==B._length);}};
+var FCKStyles=FCK.Styles={_Callbacks:{},_ObjectStyles:{},ApplyStyle:function(A){if (typeof A=='string') A=this.GetStyles()[A];if (A){if (A.GetType()==2) A.ApplyToObject(FCKSelection.GetSelectedElement());else A.ApplyToSelection(FCK.EditorWindow);FCK.Events.FireEvent('OnSelectionChange');}},RemoveStyle:function(A){if (typeof A=='string') A=this.GetStyles()[A];if (A){A.RemoveFromSelection(FCK.EditorWindow);FCK.Events.FireEvent('OnSelectionChange');}},AttachStyleStateChange:function(A,B,C){var D=this._Callbacks[A];if (!D) D=this._Callbacks[A]=[];D.push([B,C]);},CheckSelectionChanges:function(){var A=FCKSelection.GetBoundaryParentElement(true);if (!A) return;var B=new FCKElementPath(A);var C=this.GetStyles();for (var D in C){var E=this._Callbacks[D];if (E){var F=C[D];var G=F.CheckActive(B);if (G!=(F._LastState||null)){F._LastState=G;for (var i=0;i<E.length;i++){var H=E[i][0];var I=E[i][1];H.call(I||window,D,G);}}}}},CheckStyleInSelection:function(A){return false;},_GetRemoveFormatTagsRegex:function (){var A=new RegExp('^(?:'+FCKConfig.RemoveFormatTags.replace(/,/g,'|')+')$','i');return (this._GetRemoveFormatTagsRegex=function(){return A;})&&A;},RemoveAll:function(){var A=new FCKDomRange(FCK.EditorWindow);A.MoveToSelection();if (A.CheckIsCollapsed()) return;A.Expand('inline_elements');var B=A.CreateBookmark(true);var C=A.GetBookmarkNode(B,true);var D=A.GetBookmarkNode(B,false);A.Release(true);var E=this._GetRemoveFormatTagsRegex();var F=new FCKElementPath(C);var G=F.Elements;var H;for (var i=1;i<G.length;i++){H=G[i];if (H==F.Block||H==F.BlockLimit) break;if (E.test(H.nodeName)) FCKDomTools.BreakParent(C,H,A);};F=new FCKElementPath(D);G=F.Elements;for (var i=1;i<G.length;i++){H=G[i];if (H==F.Block||H==F.BlockLimit) break;elementName=H.nodeName.toLowerCase();if (E.test(H.nodeName)) FCKDomTools.BreakParent(D,H,A);};var I=FCKDomTools.GetNextSourceNode(C,true,1);while (I){if (I==D) break;var J=FCKDomTools.GetNextSourceNode(I,false,1);if (E.test(I.nodeName)) FCKDomTools.RemoveNode(I,true);else FCKDomTools.RemoveAttributes(I,FCKConfig.RemoveAttributesArray);I=J;};A.SelectBookmark(B);FCK.Events.FireEvent('OnSelectionChange');},GetStyle:function(A){return this.GetStyles()[A];},GetStyles:function(){var A=this._GetStyles;if (!A){A=this._GetStyles=FCKTools.Merge(this._LoadStylesCore(),this._LoadStylesCustom(),this._LoadStylesXml());};return A;},CheckHasObjectStyle:function(A){return!!this._ObjectStyles[A];},_LoadStylesCore:function(){var A={};var B=FCKConfig.CoreStyles;for (var C in B){var D=A['_FCK_'+C]=new FCKStyle(B[C]);D.IsCore=true;};return A;},_LoadStylesCustom:function(){var A={};var B=FCKConfig.CustomStyles;if (B){for (var C in B){var D=A[C]=new FCKStyle(B[C]);D.Name=C;}};return A;},_LoadStylesXml:function(){var A={};var B=FCKConfig.StylesXmlPath;if (!B||B.length==0) return A;var C=new FCKXml();C.LoadUrl(B);var D=FCKXml.TransformToObject(C.SelectSingleNode('Styles'));var E=D.$Style;if (!E) return A;for (var i=0;i<E.length;i++){var F=E[i];var G=(F.element||'').toLowerCase();if (G.length==0) throw('The element name is required. Error loading "'+B+'"');var H={Element:G,Attributes:{},Styles:{},Overrides:[]};var I=F.$Attribute||[];for (var j=0;j<I.length;j++){H.Attributes[I[j].name]=I[j].value;};var J=F.$Style||[];for (j=0;j<J.length;j++){H.Styles[J[j].name]=J[j].value;};var K=F.$Override;if (K){for (j=0;j<K.length;j++){var L=K[j];var M={Element:L.element};var N=L.$Attribute;if (N){M.Attributes={};for (var k=0;k<N.length;k++){var O=N[k].value||null;if (O){var P=O&&FCKRegexLib.RegExp.exec(O);if (P) O=new RegExp(P[1],P[2]||'');};M.Attributes[N[k].name]=O;}};H.Overrides.push(M);}};var Q=new FCKStyle(H);Q.Name=F.name||G;if (Q.GetType()==2) this._ObjectStyles[G]=true;A[Q.Name]=Q;};return A;}};
+var FCKListHandler={OutdentListItem:function(A){var B=A.parentNode;if (B.tagName.toUpperCase().Equals('UL','OL')){var C=FCKTools.GetElementDocument(A);var D=new FCKDocumentFragment(C);var E=D.RootNode;var F=false;var G=FCKDomTools.GetFirstChild(A,['UL','OL']);if (G){F=true;var H;while ((H=G.firstChild)) E.appendChild(G.removeChild(H));FCKDomTools.RemoveNode(G);};var I;var J=false;while ((I=A.nextSibling)){if (!F&&I.nodeType==1&&I.nodeName.toUpperCase()=='LI') J=F=true;E.appendChild(I.parentNode.removeChild(I));if (!J&&I.nodeType==1&&I.nodeName.toUpperCase().Equals('UL','OL')) FCKDomTools.RemoveNode(I,true);};var K=B.parentNode.tagName.toUpperCase();var L=(K=='LI');if (L||K.Equals('UL','OL')){if (F){var G=B.cloneNode(false);D.AppendTo(G);A.appendChild(G);}else if (L) D.InsertAfterNode(B.parentNode);else D.InsertAfterNode(B);if (L) FCKDomTools.InsertAfterNode(B.parentNode,B.removeChild(A));else FCKDomTools.InsertAfterNode(B,B.removeChild(A));}else{if (F){var N=B.cloneNode(false);D.AppendTo(N);FCKDomTools.InsertAfterNode(B,N);};var O=C.createElement(FCKConfig.EnterMode=='p'?'p':'div');FCKDomTools.MoveChildren(B.removeChild(A),O);FCKDomTools.InsertAfterNode(B,O);if (FCKConfig.EnterMode=='br'){if (FCKBrowserInfo.IsGecko) O.parentNode.insertBefore(FCKTools.CreateBogusBR(C),O);else FCKDomTools.InsertAfterNode(O,FCKTools.CreateBogusBR(C));FCKDomTools.RemoveNode(O,true);}};if (this.CheckEmptyList(B)) FCKDomTools.RemoveNode(B,true);}},CheckEmptyList:function(A){return (FCKDomTools.GetFirstChild(A,'LI')==null);},CheckListHasContents:function(A){var B=A.firstChild;while (B){switch (B.nodeType){case 1:if (!B.nodeName.IEquals('UL','LI')) return true;break;case 3:if (B.nodeValue.Trim().length>0) return true;};B=B.nextSibling;};return false;}};
+var FCKElementPath=function(A){var B=null;var C=null;var D=[];var e=A;while (e){if (e.nodeType==1){if (!this.LastElement) this.LastElement=e;var E=e.nodeName.toLowerCase();if (FCKBrowserInfo.IsIE&&e.scopeName!='HTML') E=e.scopeName.toLowerCase()+':'+E;if (!C){if (!B&&FCKListsLib.PathBlockElements[E]!=null) B=e;if (FCKListsLib.PathBlockLimitElements[E]!=null){if (!B&&E=='div'&&!FCKElementPath._CheckHasBlock(e)) B=e;else C=e;}};D.push(e);if (E=='body') break;};e=e.parentNode;};this.Block=B;this.BlockLimit=C;this.Elements=D;};FCKElementPath._CheckHasBlock=function(A){var B=A.childNodes;for (var i=0,count=B.length;i<count;i++){var C=B[i];if (C.nodeType==1&&FCKListsLib.BlockElements[C.nodeName.toLowerCase()]) return true;};return false;};
+var FCKDomRange=function(A){this.Window=A;this._Cache={};};FCKDomRange.prototype={_UpdateElementInfo:function(){var A=this._Range;if (!A) this.Release(true);else{var B=A.startContainer;var C=A.endContainer;var D=new FCKElementPath(B);this.StartNode=B.nodeType==3?B:B.childNodes[A.startOffset];this.StartContainer=B;this.StartBlock=D.Block;this.StartBlockLimit=D.BlockLimit;if (B!=C) D=new FCKElementPath(C);var E=C;if (A.endOffset==0){while (E&&!E.previousSibling) E=E.parentNode;if (E) E=E.previousSibling;}else if (E.nodeType==1) E=E.childNodes[A.endOffset-1];this.EndNode=E;this.EndContainer=C;this.EndBlock=D.Block;this.EndBlockLimit=D.BlockLimit;};this._Cache={};},CreateRange:function(){return new FCKW3CRange(this.Window.document);},DeleteContents:function(){if (this._Range){this._Range.deleteContents();this._UpdateElementInfo();}},ExtractContents:function(){if (this._Range){var A=this._Range.extractContents();this._UpdateElementInfo();return A;};return null;},CheckIsCollapsed:function(){if (this._Range) return this._Range.collapsed;return false;},Collapse:function(A){if (this._Range) this._Range.collapse(A);this._UpdateElementInfo();},Clone:function(){var A=FCKTools.CloneObject(this);if (this._Range) A._Range=this._Range.cloneRange();return A;},MoveToNodeContents:function(A){if (!this._Range) this._Range=this.CreateRange();this._Range.selectNodeContents(A);this._UpdateElementInfo();},MoveToElementStart:function(A){this.SetStart(A,1);this.SetEnd(A,1);},MoveToElementEditStart:function(A){var B;while (A&&A.nodeType==1){if (FCKDomTools.CheckIsEditable(A)) B=A;else if (B) break;A=A.firstChild;};if (B) this.MoveToElementStart(B);},InsertNode:function(A){if (this._Range) this._Range.insertNode(A);},CheckIsEmpty:function(){if (this.CheckIsCollapsed()) return true;var A=this.Window.document.createElement('div');this._Range.cloneContents().AppendTo(A);FCKDomTools.TrimNode(A);return (A.innerHTML.length==0);},CheckStartOfBlock:function(){var A=this._Cache;var B=A.IsStartOfBlock;if (B!=undefined) return B;var C=this.StartBlock||this.StartBlockLimit;var D=this._Range.startContainer;var E=this._Range.startOffset;var F;if (E>0){if (D.nodeType==3){var G=D.nodeValue.substr(0,E).Trim();if (G.length!=0) return A.IsStartOfBlock=false;}else F=D.childNodes[E-1];};if (!F) F=FCKDomTools.GetPreviousSourceNode(D,true,null,C);while (F){switch (F.nodeType){case 1:if (!FCKListsLib.InlineChildReqElements[F.nodeName.toLowerCase()]) return A.IsStartOfBlock=false;break;case 3:if (F.nodeValue.Trim().length>0) return A.IsStartOfBlock=false;};F=FCKDomTools.GetPreviousSourceNode(F,false,null,C);};return A.IsStartOfBlock=true;},CheckEndOfBlock:function(A){var B=this._Cache.IsEndOfBlock;if (B!=undefined) return B;var C=this.EndBlock||this.EndBlockLimit;var D=this._Range.endContainer;var E=this._Range.endOffset;var F;if (D.nodeType==3){var G=D.nodeValue;if (E<G.length){G=G.substr(E);if (G.Trim().length!=0) return this._Cache.IsEndOfBlock=false;}}else F=D.childNodes[E];if (!F) F=FCKDomTools.GetNextSourceNode(D,true,null,C);var H=false;while (F){switch (F.nodeType){case 1:var I=F.nodeName.toLowerCase();if (FCKListsLib.InlineChildReqElements[I]) break;if (I=='br'&&!H){H=true;break;};return this._Cache.IsEndOfBlock=false;case 3:if (F.nodeValue.Trim().length>0) return this._Cache.IsEndOfBlock=false;};F=FCKDomTools.GetNextSourceNode(F,false,null,C);};if (A) this.Select();return this._Cache.IsEndOfBlock=true;},CreateBookmark:function(A){var B={StartId:(new Date()).valueOf()+Math.floor(Math.random()*1000)+'S',EndId:(new Date()).valueOf()+Math.floor(Math.random()*1000)+'E'};var C=this.Window.document;var D;var E;var F;if (!this.CheckIsCollapsed()){E=C.createElement('span');E.style.display='none';E.id=B.EndId;E.setAttribute('_fck_bookmark',true);E.innerHTML='&nbsp;';F=this.Clone();F.Collapse(false);F.InsertNode(E);};D=C.createElement('span');D.style.display='none';D.id=B.StartId;D.setAttribute('_fck_bookmark',true);D.innerHTML='&nbsp;';F=this.Clone();F.Collapse(true);F.InsertNode(D);if (A){B.StartNode=D;B.EndNode=E;};if (E){this.SetStart(D,4);this.SetEnd(E,3);}else this.MoveToPosition(D,4);return B;},GetBookmarkNode:function(A,B){var C=this.Window.document;if (B) return A.StartNode||C.getElementById(A.StartId);else return A.EndNode||C.getElementById(A.EndId);},MoveToBookmark:function(A,B){var C=this.GetBookmarkNode(A,true);var D=this.GetBookmarkNode(A,false);this.SetStart(C,3);if (!B) FCKDomTools.RemoveNode(C);if (D){this.SetEnd(D,3);if (!B) FCKDomTools.RemoveNode(D);}else this.Collapse(true);this._UpdateElementInfo();},CreateBookmark2:function(){if (!this._Range) return { "Start":0,"End":0 };var A={"Start":[this._Range.startOffset],"End":[this._Range.endOffset]};var B=this._Range.startContainer.previousSibling;var C=this._Range.endContainer.previousSibling;var D=this._Range.startContainer;var E=this._Range.endContainer;while (B&&D.nodeType==3){A.Start[0]+=B.length;D=B;B=B.previousSibling;}while (C&&E.nodeType==3){A.End[0]+=C.length;E=C;C=C.previousSibling;};if (D.nodeType==1&&D.childNodes[A.Start[0]]&&D.childNodes[A.Start[0]].nodeType==3){var F=D.childNodes[A.Start[0]];var G=0;while (F.previousSibling&&F.previousSibling.nodeType==3){F=F.previousSibling;G+=F.length;};D=F;A.Start[0]=G;};if (E.nodeType==1&&E.childNodes[A.End[0]]&&E.childNodes[A.End[0]].nodeType==3){var F=E.childNodes[A.End[0]];var G=0;while (F.previousSibling&&F.previousSibling.nodeType==3){F=F.previousSibling;G+=F.length;};E=F;A.End[0]=G;};A.Start=FCKDomTools.GetNodeAddress(D,true).concat(A.Start);A.End=FCKDomTools.GetNodeAddress(E,true).concat(A.End);return A;},MoveToBookmark2:function(A){var B=FCKDomTools.GetNodeFromAddress(this.Window.document,A.Start.slice(0,-1),true);var C=FCKDomTools.GetNodeFromAddress(this.Window.document,A.End.slice(0,-1),true);this.Release(true);this._Range=new FCKW3CRange(this.Window.document);var D=A.Start[A.Start.length-1];var E=A.End[A.End.length-1];while (B.nodeType==3&&D>B.length){if (!B.nextSibling||B.nextSibling.nodeType!=3) break;D-=B.length;B=B.nextSibling;}while (C.nodeType==3&&E>C.length){if (!C.nextSibling||C.nextSibling.nodeType!=3) break;E-=C.length;C=C.nextSibling;};this._Range.setStart(B,D);this._Range.setEnd(C,E);this._UpdateElementInfo();},MoveToPosition:function(A,B){this.SetStart(A,B);this.Collapse(true);},SetStart:function(A,B,C){var D=this._Range;if (!D) D=this._Range=this.CreateRange();switch(B){case 1:D.setStart(A,0);break;case 2:D.setStart(A,A.childNodes.length);break;case 3:D.setStartBefore(A);break;case 4:D.setStartAfter(A);};if (!C) this._UpdateElementInfo();},SetEnd:function(A,B,C){var D=this._Range;if (!D) D=this._Range=this.CreateRange();switch(B){case 1:D.setEnd(A,0);break;case 2:D.setEnd(A,A.childNodes.length);break;case 3:D.setEndBefore(A);break;case 4:D.setEndAfter(A);};if (!C) this._UpdateElementInfo();},Expand:function(A){var B,oSibling;switch (A){case 'inline_elements':if (this._Range.startOffset==0){B=this._Range.startContainer;if (B.nodeType!=1) B=B.previousSibling?null:B.parentNode;if (B){while (FCKListsLib.InlineNonEmptyElements[B.nodeName.toLowerCase()]){this._Range.setStartBefore(B);if (B!=B.parentNode.firstChild) break;B=B.parentNode;}}};B=this._Range.endContainer;var C=this._Range.endOffset;if ((B.nodeType==3&&C>=B.nodeValue.length)||(B.nodeType==1&&C>=B.childNodes.length)||(B.nodeType!=1&&B.nodeType!=3)){if (B.nodeType!=1) B=B.nextSibling?null:B.parentNode;if (B){while (FCKListsLib.InlineNonEmptyElements[B.nodeName.toLowerCase()]){this._Range.setEndAfter(B);if (B!=B.parentNode.lastChild) break;B=B.parentNode;}}};break;case 'block_contents':case 'list_contents':var D=FCKListsLib.BlockBoundaries;if (A=='list_contents'||FCKConfig.EnterMode=='br') D=FCKListsLib.ListBoundaries;if (this.StartBlock&&FCKConfig.EnterMode!='br'&&A=='block_contents') this.SetStart(this.StartBlock,1);else{B=this._Range.startContainer;if (B.nodeType==1){var E=B.childNodes[this._Range.startOffset];if (E) B=FCKDomTools.GetPreviousSourceNode(E,true);else B=B.lastChild||B;}while (B&&(B.nodeType!=1||(B!=this.StartBlockLimit&&!D[B.nodeName.toLowerCase()]))){this._Range.setStartBefore(B);B=B.previousSibling||B.parentNode;}};if (this.EndBlock&&FCKConfig.EnterMode!='br'&&A=='block_contents'&&this.EndBlock.nodeName.toLowerCase()!='li') this.SetEnd(this.EndBlock,2);else{B=this._Range.endContainer;if (B.nodeType==1) B=B.childNodes[this._Range.endOffset]||B.lastChild;while (B&&(B.nodeType!=1||(B!=this.StartBlockLimit&&!D[B.nodeName.toLowerCase()]))){this._Range.setEndAfter(B);B=B.nextSibling||B.parentNode;};if (B&&B.nodeName.toLowerCase()=='br') this._Range.setEndAfter(B);};this._UpdateElementInfo();}},SplitBlock:function(A){var B=A||FCKConfig.EnterMode;if (!this._Range) this.MoveToSelection();if (this.StartBlockLimit==this.EndBlockLimit){var C=this.StartBlock;var D=this.EndBlock;var E=null;if (B!='br'){if (!C){C=this.FixBlock(true,B);D=this.EndBlock;};if (!D) D=this.FixBlock(false,B);};var F=(C!=null&&this.CheckStartOfBlock());var G=(D!=null&&this.CheckEndOfBlock());if (!this.CheckIsEmpty()) this.DeleteContents();if (C&&D&&C==D){if (G){E=new FCKElementPath(this.StartContainer);this.MoveToPosition(D,4);D=null;}else if (F){E=new FCKElementPath(this.StartContainer);this.MoveToPosition(C,3);C=null;}else{this.SetEnd(C,2);var H=this.ExtractContents();D=C.cloneNode(false);D.removeAttribute('id',false);H.AppendTo(D);FCKDomTools.InsertAfterNode(C,D);this.MoveToPosition(C,4);if (FCKBrowserInfo.IsGecko&&!C.nodeName.IEquals(['ul','ol'])) FCKTools.AppendBogusBr(C);}};return {PreviousBlock:C,NextBlock:D,WasStartOfBlock:F,WasEndOfBlock:G,ElementPath:E};};return null;},FixBlock:function(A,B){var C=this.CreateBookmark();this.Collapse(A);this.Expand('block_contents');var D=this.Window.document.createElement(B);this.ExtractContents().AppendTo(D);FCKDomTools.TrimNode(D);if (FCKDomTools.CheckIsEmptyElement(D,function(element) { return element.getAttribute('_fck_bookmark')!='true';})&&FCKBrowserInfo.IsGeckoLike) FCKTools.AppendBogusBr(D);this.InsertNode(D);this.MoveToBookmark(C);return D;},Release:function(A){if (!A) this.Window=null;this.StartNode=null;this.StartContainer=null;this.StartBlock=null;this.StartBlockLimit=null;this.EndNode=null;this.EndContainer=null;this.EndBlock=null;this.EndBlockLimit=null;this._Range=null;this._Cache=null;},CheckHasRange:function(){return!!this._Range;},GetTouchedStartNode:function(){var A=this._Range;var B=A.startContainer;if (A.collapsed||B.nodeType!=1) return B;return B.childNodes[A.startOffset]||B;},GetTouchedEndNode:function(){var A=this._Range;var B=A.endContainer;if (A.collapsed||B.nodeType!=1) return B;return B.childNodes[A.endOffset-1]||B;}};
+FCKDomRange.prototype.MoveToSelection=function(){this.Release(true);var A=this.Window.getSelection();if (A&&A.rangeCount>0){this._Range=FCKW3CRange.CreateFromRange(this.Window.document,A.getRangeAt(0));this._UpdateElementInfo();}else if (this.Window.document) this.MoveToElementStart(this.Window.document.body);};FCKDomRange.prototype.Select=function(){var A=this._Range;if (A){var B=A.startContainer;if (A.collapsed&&B.nodeType==1&&B.childNodes.length==0) B.appendChild(A._Document.createTextNode(''));var C=this.Window.document.createRange();C.setStart(B,A.startOffset);try{C.setEnd(A.endContainer,A.endOffset);}catch (e){if (e.toString().Contains('NS_ERROR_ILLEGAL_VALUE')){A.collapse(true);C.setEnd(A.endContainer,A.endOffset);}else throw(e);};var D=this.Window.getSelection();D.removeAllRanges();D.addRange(C);}};FCKDomRange.prototype.SelectBookmark=function(A){var B=this.Window.document.createRange();var C=this.GetBookmarkNode(A,true);var D=this.GetBookmarkNode(A,false);B.setStart(C.parentNode,FCKDomTools.GetIndexOf(C));FCKDomTools.RemoveNode(C);if (D){B.setEnd(D.parentNode,FCKDomTools.GetIndexOf(D));FCKDomTools.RemoveNode(D);};var E=this.Window.getSelection();E.removeAllRanges();E.addRange(B);};
+var FCKDomRangeIterator=function(A){this.Range=A;this.ForceBrBreak=false;this.EnforceRealBlocks=false;};FCKDomRangeIterator.CreateFromSelection=function(A){var B=new FCKDomRange(A);B.MoveToSelection();return new FCKDomRangeIterator(B);};FCKDomRangeIterator.prototype={GetNextParagraph:function(){var A;var B;var C;var D;var E;var F=this.ForceBrBreak?FCKListsLib.ListBoundaries:FCKListsLib.BlockBoundaries;if (!this._LastNode){var B=this.Range.Clone();B.Expand(this.ForceBrBreak?'list_contents':'block_contents');this._NextNode=B.GetTouchedStartNode();this._LastNode=B.GetTouchedEndNode();B=null;};var H=this._NextNode;var I=this._LastNode;this._NextNode=null;while (H){var J=false;var K=(H.nodeType!=1);var L=false;if (!K){var M=H.nodeName.toLowerCase();if (F[M]&&(!FCKBrowserInfo.IsIE||H.scopeName=='HTML')){if (M=='br') K=true;else if (!B&&H.childNodes.length==0&&M!='hr'){A=H;C=H==I;break;};if (B){B.SetEnd(H,3,true);if (M!='br') this._NextNode=H;};J=true;}else{if (H.firstChild){if (!B){B=new FCKDomRange(this.Range.Window);B.SetStart(H,3,true);};H=H.firstChild;continue;};K=true;}}else if (H.nodeType==3){if (/^[\r\n\t ]+$/.test(H.nodeValue)) K=false;};if (K&&!B){B=new FCKDomRange(this.Range.Window);B.SetStart(H,3,true);};C=((!J||K)&&H==I);if (B&&!J){while (!H.nextSibling&&!C){var N=H.parentNode;if (F[N.nodeName.toLowerCase()]){J=true;C=C||(N==I);break;};H=N;K=true;C=(H==I);L=true;}};if (K) B.SetEnd(H,4,true);if ((J||C)&&B){B._UpdateElementInfo();if (B.StartNode==B.EndNode&&B.StartNode.parentNode==B.StartBlockLimit&&B.StartNode.getAttribute&&B.StartNode.getAttribute('_fck_bookmark')) B=null;else break;};if (C) break;H=FCKDomTools.GetNextSourceNode(H,L,null,I);};if (!A){if (!B){this._NextNode=null;return null;};A=B.StartBlock;if (!A&&!this.EnforceRealBlocks&&B.StartBlockLimit.nodeName.IEquals('DIV','TH','TD')&&B.CheckStartOfBlock()&&B.CheckEndOfBlock()){A=B.StartBlockLimit;}else if (!A||(this.EnforceRealBlocks&&A.nodeName.toLowerCase()=='li')){A=this.Range.Window.document.createElement(FCKConfig.EnterMode=='p'?'p':'div');B.ExtractContents().AppendTo(A);FCKDomTools.TrimNode(A);B.InsertNode(A);D=true;E=true;}else if (A.nodeName.toLowerCase()!='li'){if (!B.CheckStartOfBlock()||!B.CheckEndOfBlock()){A=A.cloneNode(false);B.ExtractContents().AppendTo(A);FCKDomTools.TrimNode(A);var O=B.SplitBlock();D=!O.WasStartOfBlock;E=!O.WasEndOfBlock;B.InsertNode(A);}}else if (!C){this._NextNode=A==I?null:FCKDomTools.GetNextSourceNode(B.EndNode,true,null,I);return A;}};if (D){var P=A.previousSibling;if (P&&P.nodeType==1){if (P.nodeName.toLowerCase()=='br') P.parentNode.removeChild(P);else if (P.lastChild&&P.lastChild.nodeName.IEquals('br')) P.removeChild(P.lastChild);}};if (E){var Q=A.lastChild;if (Q&&Q.nodeType==1&&Q.nodeName.toLowerCase()=='br') A.removeChild(Q);};if (!this._NextNode) this._NextNode=(C||A==I)?null:FCKDomTools.GetNextSourceNode(A,true,null,I);return A;}};
+var FCKDocumentFragment=function(A,B){this.RootNode=B||A.createDocumentFragment();};FCKDocumentFragment.prototype={AppendTo:function(A){A.appendChild(this.RootNode);},InsertAfterNode:function(A){FCKDomTools.InsertAfterNode(A,this.RootNode);}};
+var FCKW3CRange=function(A){this._Document=A;this.startContainer=null;this.startOffset=null;this.endContainer=null;this.endOffset=null;this.collapsed=true;};FCKW3CRange.CreateRange=function(A){return new FCKW3CRange(A);};FCKW3CRange.CreateFromRange=function(A,B){var C=FCKW3CRange.CreateRange(A);C.setStart(B.startContainer,B.startOffset);C.setEnd(B.endContainer,B.endOffset);return C;};FCKW3CRange.prototype={_UpdateCollapsed:function(){this.collapsed=(this.startContainer==this.endContainer&&this.startOffset==this.endOffset);},setStart:function(A,B){this.startContainer=A;this.startOffset=B;if (!this.endContainer){this.endContainer=A;this.endOffset=B;};this._UpdateCollapsed();},setEnd:function(A,B){this.endContainer=A;this.endOffset=B;if (!this.startContainer){this.startContainer=A;this.startOffset=B;};this._UpdateCollapsed();},setStartAfter:function(A){this.setStart(A.parentNode,FCKDomTools.GetIndexOf(A)+1);},setStartBefore:function(A){this.setStart(A.parentNode,FCKDomTools.GetIndexOf(A));},setEndAfter:function(A){this.setEnd(A.parentNode,FCKDomTools.GetIndexOf(A)+1);},setEndBefore:function(A){this.setEnd(A.parentNode,FCKDomTools.GetIndexOf(A));},collapse:function(A){if (A){this.endContainer=this.startContainer;this.endOffset=this.startOffset;}else{this.startContainer=this.endContainer;this.startOffset=this.endOffset;};this.collapsed=true;},selectNodeContents:function(A){this.setStart(A,0);this.setEnd(A,A.nodeType==3?A.data.length:A.childNodes.length);},insertNode:function(A){var B=this.startContainer;var C=this.startOffset;if (B.nodeType==3){B.splitText(C);if (B==this.endContainer) this.setEnd(B.nextSibling,this.endOffset-this.startOffset);FCKDomTools.InsertAfterNode(B,A);return;}else{B.insertBefore(A,B.childNodes[C]||null);if (B==this.endContainer){this.endOffset++;this.collapsed=false;}}},deleteContents:function(){if (this.collapsed) return;this._ExecContentsAction(0);},extractContents:function(){var A=new FCKDocumentFragment(this._Document);if (!this.collapsed) this._ExecContentsAction(1,A);return A;},cloneContents:function(){var A=new FCKDocumentFragment(this._Document);if (!this.collapsed) this._ExecContentsAction(2,A);return A;},_ExecContentsAction:function(A,B){var C=this.startContainer;var D=this.endContainer;var E=this.startOffset;var F=this.endOffset;var G=false;var H=false;if (D.nodeType==3) D=D.splitText(F);else{if (D.childNodes.length>0){if (F>D.childNodes.length-1){D=FCKDomTools.InsertAfterNode(D.lastChild,this._Document.createTextNode(''));H=true;}else D=D.childNodes[F];}};if (C.nodeType==3){C.splitText(E);if (C==D) D=C.nextSibling;}else{if (E==0){C=C.insertBefore(this._Document.createTextNode(''),C.firstChild);G=true;}else if (E>C.childNodes.length-1){C=C.appendChild(this._Document.createTextNode(''));G=true;}else C=C.childNodes[E].previousSibling;};var I=FCKDomTools.GetParents(C);var J=FCKDomTools.GetParents(D);var i,topStart,topEnd;for (i=0;i<I.length;i++){topStart=I[i];topEnd=J[i];if (topStart!=topEnd) break;};var K,levelStartNode,levelClone,currentNode,currentSibling;if (B) K=B.RootNode;for (var j=i;j<I.length;j++){levelStartNode=I[j];if (K&&levelStartNode!=C) levelClone=K.appendChild(levelStartNode.cloneNode(levelStartNode==C));currentNode=levelStartNode.nextSibling;while(currentNode){if (currentNode==J[j]||currentNode==D) break;currentSibling=currentNode.nextSibling;if (A==2) K.appendChild(currentNode.cloneNode(true));else{currentNode.parentNode.removeChild(currentNode);if (A==1) K.appendChild(currentNode);};currentNode=currentSibling;};if (K) K=levelClone;};if (B) K=B.RootNode;for (var k=i;k<J.length;k++){levelStartNode=J[k];if (A>0&&levelStartNode!=D) levelClone=K.appendChild(levelStartNode.cloneNode(levelStartNode==D));if (!I[k]||levelStartNode.parentNode!=I[k].parentNode){currentNode=levelStartNode.previousSibling;while(currentNode){if (currentNode==I[k]||currentNode==C) break;currentSibling=currentNode.previousSibling;if (A==2) K.insertBefore(currentNode.cloneNode(true),K.firstChild);else{currentNode.parentNode.removeChild(currentNode);if (A==1) K.insertBefore(currentNode,K.firstChild);};currentNode=currentSibling;}};if (K) K=levelClone;};if (A==2){var L=this.startContainer;if (L.nodeType==3){L.data+=L.nextSibling.data;L.parentNode.removeChild(L.nextSibling);};var M=this.endContainer;if (M.nodeType==3&&M.nextSibling){M.data+=M.nextSibling.data;M.parentNode.removeChild(M.nextSibling);}}else{if (topStart&&topEnd&&(C.parentNode!=topStart.parentNode||D.parentNode!=topEnd.parentNode)){var N=FCKDomTools.GetIndexOf(topEnd);if (G&&topEnd.parentNode==C.parentNode) N--;this.setStart(topEnd.parentNode,N);};this.collapse(true);};if(G) C.parentNode.removeChild(C);if(H&&D.parentNode) D.parentNode.removeChild(D);},cloneRange:function(){return FCKW3CRange.CreateFromRange(this._Document,this);}};
+var FCKEnterKey=function(A,B,C,D){this.Window=A;this.EnterMode=B||'p';this.ShiftEnterMode=C||'br';var E=new FCKKeystrokeHandler(false);E._EnterKey=this;E.OnKeystroke=FCKEnterKey_OnKeystroke;E.SetKeystrokes([[13,'Enter'],[SHIFT+13,'ShiftEnter'],[8,'Backspace'],[CTRL+8,'CtrlBackspace'],[46,'Delete']]);this.TabText='';if (D>0||FCKBrowserInfo.IsSafari){while (D--) this.TabText+='\xa0';E.SetKeystrokes([9,'Tab']);};E.AttachToElement(A.document);};function FCKEnterKey_OnKeystroke(A,B){var C=this._EnterKey;try{switch (B){case 'Enter':return C.DoEnter();break;case 'ShiftEnter':return C.DoShiftEnter();break;case 'Backspace':return C.DoBackspace();break;case 'Delete':return C.DoDelete();break;case 'Tab':return C.DoTab();break;case 'CtrlBackspace':return C.DoCtrlBackspace();break;}}catch (e){};return false;};FCKEnterKey.prototype.DoEnter=function(A,B){FCKUndo.SaveUndoStep();this._HasShift=(B===true);var C=FCKSelection.GetParentElement();var D=new FCKElementPath(C);var E=A||this.EnterMode;if (E=='br'||D.Block&&D.Block.tagName.toLowerCase()=='pre') return this._ExecuteEnterBr();else return this._ExecuteEnterBlock(E);};FCKEnterKey.prototype.DoShiftEnter=function(){return this.DoEnter(this.ShiftEnterMode,true);};FCKEnterKey.prototype.DoBackspace=function(){var A=false;var B=new FCKDomRange(this.Window);B.MoveToSelection();if (FCKBrowserInfo.IsIE&&this._CheckIsAllContentsIncluded(B,this.Window.document.body)){this._FixIESelectAllBug(B);return true;};var C=B.CheckIsCollapsed();if (!C){if (FCKBrowserInfo.IsIE&&this.Window.document.selection.type.toLowerCase()=="control"){var D=this.Window.document.selection.createRange();for (var i=D.length-1;i>=0;i--){var E=D.item(i);E.parentNode.removeChild(E);};return true;};return false;};if (FCKBrowserInfo.IsIE){var F=FCKDomTools.GetPreviousSourceElement(B.StartNode,true);if (F&&F.nodeName.toLowerCase()=='br'){var G=B.Clone();G.SetStart(F,4);if (G.CheckIsEmpty()){F.parentNode.removeChild(F);return true;}}};var H=B.StartBlock;var I=B.EndBlock;if (B.StartBlockLimit==B.EndBlockLimit&&H&&I){if (!C){var J=B.CheckEndOfBlock();B.DeleteContents();if (H!=I){B.SetStart(I,1);B.SetEnd(I,1);};B.Select();A=(H==I);};if (B.CheckStartOfBlock()){var K=B.StartBlock;var L=FCKDomTools.GetPreviousSourceElement(K,true,['BODY',B.StartBlockLimit.nodeName],['UL','OL']);A=this._ExecuteBackspace(B,L,K);}else if (FCKBrowserInfo.IsGeckoLike){B.Select();}};B.Release();return A;};FCKEnterKey.prototype.DoCtrlBackspace=function(){FCKUndo.SaveUndoStep();var A=new FCKDomRange(this.Window);A.MoveToSelection();if (FCKBrowserInfo.IsIE&&this._CheckIsAllContentsIncluded(A,this.Window.document.body)){this._FixIESelectAllBug(A);return true;};return false;};FCKEnterKey.prototype._ExecuteBackspace=function(A,B,C){var D=false;if (!B&&C&&C.nodeName.IEquals('LI')&&C.parentNode.parentNode.nodeName.IEquals('LI')){this._OutdentWithSelection(C,A);return true;};if (B&&B.nodeName.IEquals('LI')){var E=FCKDomTools.GetLastChild(B,['UL','OL']);while (E){B=FCKDomTools.GetLastChild(E,'LI');E=FCKDomTools.GetLastChild(B,['UL','OL']);}};if (B&&C){if (C.nodeName.IEquals('LI')&&!B.nodeName.IEquals('LI')){this._OutdentWithSelection(C,A);return true;};var F=C.parentNode;var G=B.nodeName.toLowerCase();if (FCKListsLib.EmptyElements[G]!=null||G=='table'){FCKDomTools.RemoveNode(B);D=true;}else{FCKDomTools.RemoveNode(C);while (F.innerHTML.Trim().length==0){var H=F.parentNode;H.removeChild(F);F=H;};FCKDomTools.LTrimNode(C);FCKDomTools.RTrimNode(B);A.SetStart(B,2,true);A.Collapse(true);var I=A.CreateBookmark(true);if (!C.tagName.IEquals(['TABLE'])) FCKDomTools.MoveChildren(C,B);A.SelectBookmark(I);D=true;}};return D;};FCKEnterKey.prototype.DoDelete=function(){FCKUndo.SaveUndoStep();var A=false;var B=new FCKDomRange(this.Window);B.MoveToSelection();if (FCKBrowserInfo.IsIE&&this._CheckIsAllContentsIncluded(B,this.Window.document.body)){this._FixIESelectAllBug(B);return true;};if (B.CheckIsCollapsed()&&B.CheckEndOfBlock(FCKBrowserInfo.IsGeckoLike)){var C=B.StartBlock;var D=FCKTools.GetElementAscensor(C,'td');var E=FCKDomTools.GetNextSourceElement(C,true,[B.StartBlockLimit.nodeName],['UL','OL','TR'],true);if (D){var F=FCKTools.GetElementAscensor(E,'td');if (F!=D) return true;};A=this._ExecuteBackspace(B,C,E);};B.Release();return A;};FCKEnterKey.prototype.DoTab=function(){var A=new FCKDomRange(this.Window);A.MoveToSelection();var B=A._Range.startContainer;while (B){if (B.nodeType==1){var C=B.tagName.toLowerCase();if (C=="tr"||C=="td"||C=="th"||C=="tbody"||C=="table") return false;else break;};B=B.parentNode;};if (this.TabText){A.DeleteContents();A.InsertNode(this.Window.document.createTextNode(this.TabText));A.Collapse(false);A.Select();};return true;};FCKEnterKey.prototype._ExecuteEnterBlock=function(A,B){var C=B||new FCKDomRange(this.Window);var D=C.SplitBlock(A);if (D){var E=D.PreviousBlock;var F=D.NextBlock;var G=D.WasStartOfBlock;var H=D.WasEndOfBlock;if (F){if (F.parentNode.nodeName.IEquals('li')){FCKDomTools.BreakParent(F,F.parentNode);FCKDomTools.MoveNode(F,F.nextSibling,true);}}else if (E&&E.parentNode.nodeName.IEquals('li')){FCKDomTools.BreakParent(E,E.parentNode);C.MoveToElementEditStart(E.nextSibling);FCKDomTools.MoveNode(E,E.previousSibling);};if (!G&&!H){if (F.nodeName.IEquals('li')&&F.firstChild&&F.firstChild.nodeName.IEquals(['ul','ol'])) F.insertBefore(FCKTools.GetElementDocument(F).createTextNode('\xa0'),F.firstChild);if (F) C.MoveToElementEditStart(F);}else{if (G&&H&&E.tagName.toUpperCase()=='LI'){C.MoveToElementStart(E);this._OutdentWithSelection(E,C);C.Release();return true;};var I;if (E){var J=E.tagName.toUpperCase();if (!this._HasShift&&!(/^H[1-6]$/).test(J)){I=FCKDomTools.CloneElement(E);}}else if (F) I=FCKDomTools.CloneElement(F);if (!I) I=this.Window.document.createElement(A);var K=D.ElementPath;if (K){for (var i=0,len=K.Elements.length;i<len;i++){var L=K.Elements[i];if (L==K.Block||L==K.BlockLimit) break;if (FCKListsLib.InlineChildReqElements[L.nodeName.toLowerCase()]){L=FCKDomTools.CloneElement(L);FCKDomTools.MoveChildren(I,L);I.appendChild(L);}}};if (FCKBrowserInfo.IsGeckoLike) FCKTools.AppendBogusBr(I);C.InsertNode(I);if (FCKBrowserInfo.IsIE){C.MoveToElementEditStart(I);C.Select();};C.MoveToElementEditStart(G&&!H?F:I);};if (FCKBrowserInfo.IsGeckoLike) FCKDomTools.ScrollIntoView(F||I,false);C.Select();};C.Release();return true;};FCKEnterKey.prototype._ExecuteEnterBr=function(A){var B=new FCKDomRange(this.Window);B.MoveToSelection();if (B.StartBlockLimit==B.EndBlockLimit){B.DeleteContents();B.MoveToSelection();var C=B.CheckStartOfBlock();var D=B.CheckEndOfBlock();var E=B.StartBlock?B.StartBlock.tagName.toUpperCase():'';var F=this._HasShift;var G=false;if (!F&&E=='LI') return this._ExecuteEnterBlock(null,B);if (!F&&D&&(/^H[1-6]$/).test(E)){FCKDomTools.InsertAfterNode(B.StartBlock,this.Window.document.createElement('br'));if (FCKBrowserInfo.IsGecko) FCKDomTools.InsertAfterNode(B.StartBlock,this.Window.document.createTextNode(''));B.SetStart(B.StartBlock.nextSibling,FCKBrowserInfo.IsIE?3:1);}else{var H;G=E.IEquals('pre');if (G) H=this.Window.document.createTextNode(FCKBrowserInfo.IsIE?'\r':'\n');else H=this.Window.document.createElement('br');B.InsertNode(H);if (FCKBrowserInfo.IsGecko) FCKDomTools.InsertAfterNode(H,this.Window.document.createTextNode(''));if (D&&FCKBrowserInfo.IsGeckoLike) FCKTools.AppendBogusBr(H.parentNode);if (FCKBrowserInfo.IsIE) B.SetStart(H,4);else B.SetStart(H.nextSibling,1);if (!FCKBrowserInfo.IsIE){var I=null;if (FCKBrowserInfo.IsOpera) I=this.Window.document.createElement('span');else I=this.Window.document.createElement('br');H.parentNode.insertBefore(I,H.nextSibling);if (FCKBrowserInfo.IsSafari) FCKDomTools.ScrollIntoView(I,false);else I.scrollIntoView(false);I.parentNode.removeChild(I);}};B.Collapse(true);B.Select(G);};B.Release();return true;};FCKEnterKey.prototype._OutdentWithSelection=function(A,B){var C=B.CreateBookmark();FCKListHandler.OutdentListItem(A);B.MoveToBookmark(C);B.Select();};FCKEnterKey.prototype._CheckIsAllContentsIncluded=function(A,B){var C=false;var D=false;if (A.StartContainer==B||A.StartContainer==B.firstChild) C=(A._Range.startOffset==0);if (A.EndContainer==B||A.EndContainer==B.lastChild){var E=A.EndContainer.nodeType==3?A.EndContainer.length:A.EndContainer.childNodes.length;D=(A._Range.endOffset==E);};return C&&D;};FCKEnterKey.prototype._FixIESelectAllBug=function(A){var B=this.Window.document;B.body.innerHTML='';var C;if (FCKConfig.EnterMode.IEquals(['div','p'])){C=B.createElement(FCKConfig.EnterMode);B.body.appendChild(C);}else C=B.body;A.MoveToNodeContents(C);A.Collapse(true);A.Select();A.Release();};
+var FCKDocumentProcessor={};FCKDocumentProcessor._Items=[];FCKDocumentProcessor.AppendNew=function(){var A={};this._Items.AddItem(A);return A;};FCKDocumentProcessor.Process=function(A){var B=FCK.IsDirty();var C,i=0;while((C=this._Items[i++])) C.ProcessDocument(A);if (!B) FCK.ResetIsDirty();};var FCKDocumentProcessor_CreateFakeImage=function(A,B){var C=FCKTools.GetElementDocument(B).createElement('IMG');C.className=A;C.src=FCKConfig.BasePath+'images/spacer.gif';C.setAttribute('_fckfakelement','true',0);C.setAttribute('_fckrealelement',FCKTempBin.AddElement(B),0);return C;};if (FCKBrowserInfo.IsIE||FCKBrowserInfo.IsOpera){var FCKAnchorsProcessor=FCKDocumentProcessor.AppendNew();FCKAnchorsProcessor.ProcessDocument=function(A){var B=A.getElementsByTagName('A');var C;var i=B.length-1;while (i>=0&&(C=B[i--])){if (C.name.length>0){if (C.innerHTML!==''){if (FCKBrowserInfo.IsIE) C.className+=' FCK__AnchorC';}else{var D=FCKDocumentProcessor_CreateFakeImage('FCK__Anchor',C.cloneNode(true));D.setAttribute('_fckanchor','true',0);C.parentNode.insertBefore(D,C);C.parentNode.removeChild(C);}}}}};var FCKPageBreaksProcessor=FCKDocumentProcessor.AppendNew();FCKPageBreaksProcessor.ProcessDocument=function(A){var B=A.getElementsByTagName('DIV');var C;var i=B.length-1;while (i>=0&&(C=B[i--])){if (C.style.pageBreakAfter=='always'&&C.childNodes.length==1&&C.childNodes[0].style&&C.childNodes[0].style.display=='none'){var D=FCKDocumentProcessor_CreateFakeImage('FCK__PageBreak',C.cloneNode(true));C.parentNode.insertBefore(D,C);C.parentNode.removeChild(C);}}};FCKEmbedAndObjectProcessor=(function(){var A=[];var B=function(el){var C=el.cloneNode(true);var D;var E=D=FCKDocumentProcessor_CreateFakeImage('FCK__UnknownObject',C);FCKEmbedAndObjectProcessor.RefreshView(E,el);for (var i=0;i<A.length;i++) D=A[i](el,D)||D;if (D!=E) FCKTempBin.RemoveElement(E.getAttribute('_fckrealelement'));el.parentNode.replaceChild(D,el);};return FCKTools.Merge(FCKDocumentProcessor.AppendNew(),{ProcessDocument:function(doc){FCKTools.RunFunction(function(){var F=doc.getElementsByTagName('object');for (var i=F.length-1;i>=0;i--) B(F[i]);var G=doc.getElementsByTagName('embed');for (var i=G.length-1;i>=0;i--) B(G[i]);});},RefreshView:function(placeHolder,original){if (original.getAttribute('width')>0) placeHolder.style.width=FCKTools.ConvertHtmlSizeToStyle(original.getAttribute('width'));if (original.getAttribute('height')>0) placeHolder.style.height=FCKTools.ConvertHtmlSizeToStyle(original.getAttribute('height'));},AddCustomHandler:function(func){A.push(func);}});})();FCK.GetRealElement=function(A){var e=FCKTempBin.Elements[A.getAttribute('_fckrealelement')];if (A.getAttribute('_fckflash')){if (A.style.width.length>0) e.width=FCKTools.ConvertStyleSizeToHtml(A.style.width);if (A.style.height.length>0) e.height=FCKTools.ConvertStyleSizeToHtml(A.style.height);};return e;};if (FCKBrowserInfo.IsIE){FCKDocumentProcessor.AppendNew().ProcessDocument=function(A){var B=A.getElementsByTagName('HR');var C;var i=B.length-1;while (i>=0&&(C=B[i--])){var D=A.createElement('hr');D.mergeAttributes(C,true);FCKDomTools.InsertAfterNode(C,D);C.parentNode.removeChild(C);}}};FCKDocumentProcessor.AppendNew().ProcessDocument=function(A){var B=A.getElementsByTagName('INPUT');var C;var i=B.length-1;while (i>=0&&(C=B[i--])){if (C.type=='hidden'){var D=FCKDocumentProcessor_CreateFakeImage('FCK__InputHidden',C.cloneNode(true));D.setAttribute('_fckinputhidden','true',0);C.parentNode.insertBefore(D,C);C.parentNode.removeChild(C);}}};FCKEmbedAndObjectProcessor.AddCustomHandler(function(A,B){if (!(A.nodeName.IEquals('embed')&&(A.type=='application/x-shockwave-flash'||/\.swf($|#|\?)/i.test(A.src)))) return;B.className='FCK__Flash';B.setAttribute('_fckflash','true',0);});if (FCKBrowserInfo.IsSafari){FCKDocumentProcessor.AppendNew().ProcessDocument=function(A){var B=A.getElementsByClassName?A.getElementsByClassName('Apple-style-span'):Array.prototype.filter.call(A.getElementsByTagName('span'),function(item){ return item.className=='Apple-style-span';});for (var i=B.length-1;i>=0;i--) FCKDomTools.RemoveNode(B[i],true);}};
+var FCKSelection=FCK.Selection={GetParentBlock:function(){var A=this.GetParentElement();while (A){if (FCKListsLib.BlockBoundaries[A.nodeName.toLowerCase()]) break;A=A.parentNode;};return A;},ApplyStyle:function(A){FCKStyles.ApplyStyle(new FCKStyle(A));}};
+FCKSelection.GetType=function(){var A='Text';var B;try { B=this.GetSelection();} catch (e) {};if (B&&B.rangeCount==1){var C=B.getRangeAt(0);if (C.startContainer==C.endContainer&&(C.endOffset-C.startOffset)==1&&C.startContainer.nodeType==1&&FCKListsLib.StyleObjectElements[C.startContainer.childNodes[C.startOffset].nodeName.toLowerCase()]){A='Control';}};return A;};FCKSelection.GetSelectedElement=function(){var A=!!FCK.EditorWindow&&this.GetSelection();if (!A||A.rangeCount<1) return null;var B=A.getRangeAt(0);if (B.startContainer!=B.endContainer||B.startContainer.nodeType!=1||B.startOffset!=B.endOffset-1) return null;var C=B.startContainer.childNodes[B.startOffset];if (C.nodeType!=1) return null;return C;};FCKSelection.GetParentElement=function(){if (this.GetType()=='Control') return FCKSelection.GetSelectedElement().parentNode;else{var A=this.GetSelection();if (A){if (A.anchorNode&&A.anchorNode==A.focusNode) return A.anchorNode.parentNode;var B=new FCKElementPath(A.anchorNode);var C=new FCKElementPath(A.focusNode);var D=null;var E=null;if (B.Elements.length>C.Elements.length){D=B.Elements;E=C.Elements;}else{D=C.Elements;E=B.Elements;};var F=D.length-E.length;for(var i=0;i<E.length;i++){if (D[F+i]==E[i]) return E[i];};return null;}};return null;};FCKSelection.GetBoundaryParentElement=function(A){if (!FCK.EditorWindow) return null;if (this.GetType()=='Control') return FCKSelection.GetSelectedElement().parentNode;else{var B=this.GetSelection();if (B&&B.rangeCount>0){var C=B.getRangeAt(A?0:(B.rangeCount-1));var D=A?C.startContainer:C.endContainer;return (D.nodeType==1?D:D.parentNode);}};return null;};FCKSelection.SelectNode=function(A){var B=FCK.EditorDocument.createRange();B.selectNode(A);var C=this.GetSelection();C.removeAllRanges();C.addRange(B);};FCKSelection.Collapse=function(A){var B=this.GetSelection();if (A==null||A===true) B.collapseToStart();else B.collapseToEnd();};FCKSelection.HasAncestorNode=function(A){var B=this.GetSelectedElement();if (!B&&FCK.EditorWindow){try		{ B=this.GetSelection().getRangeAt(0).startContainer;}catch(e){}}while (B){if (B.nodeType==1&&B.nodeName.IEquals(A)) return true;B=B.parentNode;};return false;};FCKSelection.MoveToAncestorNode=function(A){var B;var C=this.GetSelectedElement();if (!C) C=this.GetSelection().getRangeAt(0).startContainer;while (C){if (C.nodeName.IEquals(A)) return C;C=C.parentNode;};return null;};FCKSelection.Delete=function(){var A=this.GetSelection();for (var i=0;i<A.rangeCount;i++){A.getRangeAt(i).deleteContents();};return A;};FCKSelection.GetSelection=function(){return FCK.EditorWindow.getSelection();};FCKSelection.Save=function(){};FCKSelection.Restore=function(){};FCKSelection.Release=function(){};
+var FCKTableHandler={};FCKTableHandler.InsertRow=function(A){var B=FCKSelection.MoveToAncestorNode('TR');if (!B) return;var C=B.cloneNode(true);B.parentNode.insertBefore(C,B);FCKTableHandler.ClearRow(A?C:B);};FCKTableHandler.DeleteRows=function(A){if (!A){var B=FCKTableHandler.GetSelectedCells();var C=[];for (var i=0;i<B.length;i++){var D=FCKTools.GetElementAscensor(B[i],'TR');C[D.rowIndex]=D;};for (var i=C.length;i>=0;i--){if (C[i]) FCKTableHandler.DeleteRows(C[i]);};return;};var E=FCKTools.GetElementAscensor(A,'TABLE');if (E.rows.length==1){FCKTableHandler.DeleteTable(E);return;};A.parentNode.removeChild(A);};FCKTableHandler.DeleteTable=function(A){if (!A){A=FCKSelection.GetSelectedElement();if (!A||A.tagName!='TABLE') A=FCKSelection.MoveToAncestorNode('TABLE');};if (!A) return;FCKSelection.SelectNode(A);FCKSelection.Collapse();if (A.parentNode.childNodes.length==1) A.parentNode.parentNode.removeChild(A.parentNode);else A.parentNode.removeChild(A);};FCKTableHandler.InsertColumn=function(A){var B=null;var C=this.GetSelectedCells();if (C&&C.length) B=C[A?0:(C.length-1)];if (!B) return;var D=FCKTools.GetElementAscensor(B,'TABLE');var E=B.cellIndex;for (var i=0;i<D.rows.length;i++){var F=D.rows[i];if (F.cells.length<(E+1)) continue;B=F.cells[E].cloneNode(false);if (FCKBrowserInfo.IsGeckoLike) FCKTools.AppendBogusBr(B);var G=F.cells[E];if (A) F.insertBefore(B,G);else if (G.nextSibling) F.insertBefore(B,G.nextSibling);else F.appendChild(B);}};FCKTableHandler.DeleteColumns=function(A){if (!A){var B=FCKTableHandler.GetSelectedCells();for (var i=B.length;i>=0;i--){if (B[i]) FCKTableHandler.DeleteColumns(B[i]);};return;};if (!A) return;var C=FCKTools.GetElementAscensor(A,'TABLE');var D=A.cellIndex;for (var i=C.rows.length-1;i>=0;i--){var E=C.rows[i];if (D==0&&E.cells.length==1){FCKTableHandler.DeleteRows(E);continue;};if (E.cells[D]) E.removeChild(E.cells[D]);}};FCKTableHandler.InsertCell=function(A,B){var C=null;var D=this.GetSelectedCells();if (D&&D.length) C=D[B?0:(D.length-1)];if (!C) return null;var E=FCK.EditorDocument.createElement('TD');if (FCKBrowserInfo.IsGeckoLike) FCKTools.AppendBogusBr(E);if (!B&&C.cellIndex==C.parentNode.cells.length-1) C.parentNode.appendChild(E);else C.parentNode.insertBefore(E,B?C:C.nextSibling);return E;};FCKTableHandler.DeleteCell=function(A){if (A.parentNode.cells.length==1){FCKTableHandler.DeleteRows(FCKTools.GetElementAscensor(A,'TR'));return;};A.parentNode.removeChild(A);};FCKTableHandler.DeleteCells=function(){var A=FCKTableHandler.GetSelectedCells();for (var i=A.length-1;i>=0;i--){FCKTableHandler.DeleteCell(A[i]);}};FCKTableHandler._MarkCells=function(A,B){for (var i=0;i<A.length;i++) A[i][B]=true;};FCKTableHandler._UnmarkCells=function(A,B){for (var i=0;i<A.length;i++){if (FCKBrowserInfo.IsIE) A[i].removeAttribute(B);else delete A[i][B];}};FCKTableHandler._ReplaceCellsByMarker=function(A,B,C){for (var i=0;i<A.length;i++){for (var j=0;j<A[i].length;j++){if (A[i][j][B]) A[i][j]=C;}}};FCKTableHandler._GetMarkerGeometry=function(A,B,C,D){var E=0;var F=0;var G=0;var H=0;for (var i=C;A[B][i]&&A[B][i][D];i++) E++;for (var i=C-1;A[B][i]&&A[B][i][D];i--){E++;G++;};for (var i=B;A[i]&&A[i][C]&&A[i][C][D];i++) F++;for (var i=B-1;A[i]&&A[i][C]&&A[i][C][D];i--){F++;H++;};return { 'width':E,'height':F,'x':G,'y':H };};FCKTableHandler.CheckIsSelectionRectangular=function(){var A=FCKTableHandler.GetSelectedCells();if (A.length<1) return false;this._MarkCells(A,'_CellSelected');var B=this._CreateTableMap(A[0].parentNode.parentNode);var C=A[0].parentNode.rowIndex;var D=this._GetCellIndexSpan(B,C,A[0]);var E=this._GetMarkerGeometry(B,C,D,'_CellSelected');var F=D-E.x;var G=C-E.y;if (E.width>=E.height){for (D=F;D<F+E.width;D++){C=G+(D-F) % E.height;if (!B[C]||!B[C][D]){this._UnmarkCells(A,'_CellSelected');return false;};var g=this._GetMarkerGeometry(B,C,D,'_CellSelected');if (g.width!=E.width||g.height!=E.height){this._UnmarkCells(A,'_CellSelected');return false;}}}else{for (C=G;C<G+E.height;C++){D=F+(C-G) % E.width;if (!B[C]||!B[C][D]){this._UnmarkCells(A,'_CellSelected');return false;};var g=this._GetMarkerGeometry(B,C,D,'_CellSelected');if (g.width!=E.width||g.height!=E.height){this._UnmarkCells(A,'_CellSelected');return false;}}};this._UnmarkCells(A,'_CellSelected');return true;};FCKTableHandler.MergeCells=function(){var A=this.GetSelectedCells();if (A.length<2) return;var B=A[0];var C=this._CreateTableMap(B.parentNode.parentNode);var D=B.parentNode.rowIndex;var E=this._GetCellIndexSpan(C,D,B);this._MarkCells(A,'_SelectedCells');var F=this._GetMarkerGeometry(C,D,E,'_SelectedCells');var G=E-F.x;var H=D-F.y;var I=FCKTools.GetElementDocument(B).createDocumentFragment();for (var i=0;i<F.height;i++){var J=0;for (var j=0;j<F.width;j++){var K=C[H+i][G+j];while (K.childNodes.length>0){var L=K.removeChild(K.firstChild);if (L.nodeType!=1||(L.getAttribute('type',2)!='_moz'&&L.getAttribute('_moz_dirty')!=null)){I.appendChild(L);J++;}}};if (J>0) I.appendChild(FCKTools.GetElementDocument(B).createElement('br'));};this._ReplaceCellsByMarker(C,'_SelectedCells',B);this._UnmarkCells(A,'_SelectedCells');this._InstallTableMap(C,B.parentNode.parentNode);B.appendChild(I);if (FCKBrowserInfo.IsGeckoLike&&(!B.firstChild)) FCKTools.AppendBogusBr(B);this._MoveCaretToCell(B,false);};FCKTableHandler.MergeRight=function(){var A=this.GetMergeRightTarget();if (A==null) return;var B=A.refCell;var C=A.tableMap;var D=A.nextCell;var E=FCK.EditorDocument.createDocumentFragment();while (D&&D.childNodes&&D.childNodes.length>0) E.appendChild(D.removeChild(D.firstChild));D.parentNode.removeChild(D);B.appendChild(E);this._MarkCells([D],'_Replace');this._ReplaceCellsByMarker(C,'_Replace',B);this._InstallTableMap(C,B.parentNode.parentNode);this._MoveCaretToCell(B,false);};FCKTableHandler.MergeDown=function(){var A=this.GetMergeDownTarget();if (A==null) return;var B=A.refCell;var C=A.tableMap;var D=A.nextCell;var E=FCKTools.GetElementDocument(B).createDocumentFragment();while (D&&D.childNodes&&D.childNodes.length>0) E.appendChild(D.removeChild(D.firstChild));if (E.firstChild) E.insertBefore(FCKTools.GetElementDocument(D).createElement('br'),E.firstChild);B.appendChild(E);this._MarkCells([D],'_Replace');this._ReplaceCellsByMarker(C,'_Replace',B);this._InstallTableMap(C,B.parentNode.parentNode);this._MoveCaretToCell(B,false);};FCKTableHandler.HorizontalSplitCell=function(){var A=FCKTableHandler.GetSelectedCells();if (A.length!=1) return;var B=A[0];var C=this._CreateTableMap(B.parentNode.parentNode);var D=B.parentNode.rowIndex;var E=FCKTableHandler._GetCellIndexSpan(C,D,B);var F=isNaN(B.colSpan)?1:B.colSpan;if (F>1){var G=Math.ceil(F/2);var H=FCKTools.GetElementDocument(B).createElement('td');if (FCKBrowserInfo.IsGeckoLike) FCKTools.AppendBogusBr(H);var I=E+G;var J=E+F;var K=isNaN(B.rowSpan)?1:B.rowSpan;for (var r=D;r<D+K;r++){for (var i=I;i<J;i++) C[r][i]=H;}}else{var L=[];for (var i=0;i<C.length;i++){var M=C[i].slice(0,E);if (C[i].length<=E){L.push(M);continue;};if (C[i][E]==B){M.push(B);M.push(FCKTools.GetElementDocument(B).createElement('td'));if (FCKBrowserInfo.IsGeckoLike) FCKTools.AppendBogusBr(M[M.length-1]);}else{M.push(C[i][E]);M.push(C[i][E]);};for (var j=E+1;j<C[i].length;j++) M.push(C[i][j]);L.push(M);};C=L;};this._InstallTableMap(C,B.parentNode.parentNode);};FCKTableHandler.VerticalSplitCell=function(){var A=FCKTableHandler.GetSelectedCells();if (A.length!=1) return;var B=A[0];var C=this._CreateTableMap(B.parentNode.parentNode);var D=FCKTableHandler._GetCellIndexSpan(C,B.parentNode.rowIndex,B);var E=B.rowSpan;var F=B.parentNode.rowIndex;if (isNaN(E)) E=1;if (E>1){B.rowSpan=Math.ceil(E/2);var G=F+Math.ceil(E/2);var H=null;for (var i=D+1;i<C[G].length;i++){if (C[G][i].parentNode.rowIndex==G){H=C[G][i];break;}};var I=FCK.EditorDocument.createElement('td');I.rowSpan=Math.floor(E/2);if (FCKBrowserInfo.IsGeckoLike) FCKTools.AppendBogusBr(I);B.parentNode.parentNode.rows[G].insertBefore(I,H);}else{var G=F+1;var K=FCK.EditorDocument.createElement('tr');B.parentNode.parentNode.insertBefore(K,B.parentNode.parentNode.rows[G]);for (var i=0;i<C[F].length;){var L=C[F][i].colSpan;if (isNaN(L)||L<1) L=1;if (i==D){i+=L;continue;};var M=C[F][i].rowSpan;if (isNaN(M)) M=1;C[F][i].rowSpan=M+1;i+=L;};var I=FCK.EditorDocument.createElement('td');if (FCKBrowserInfo.IsGeckoLike) FCKTools.AppendBogusBr(I);K.appendChild(I);}};FCKTableHandler._GetCellIndexSpan=function(A,B,C){if (A.length<B+1) return null;var D=A[B];for (var c=0;c<D.length;c++){if (D[c]==C) return c;};return null;};FCKTableHandler._GetCellLocation=function(A,B){for (var i=0;i<A.length;i++){for (var c=0;c<A[i].length;c++){if (A[i][c]==B) return [i,c];}};return null;};FCKTableHandler._GetColumnCells=function(A,B){var C=[];for (var r=0;r<A.length;r++){var D=A[r][B];if (D&&(C.length==0||C[C.length-1]!=D)) C[C.length]=D;};return C;};FCKTableHandler._CreateTableMap=function(A){var B=A.rows;var r=-1;var C=[];for (var i=0;i<B.length;i++){r++;if (!C[r]) C[r]=[];var c=-1;for (var j=0;j<B[i].cells.length;j++){var D=B[i].cells[j];c++;while (C[r][c]) c++;var E=isNaN(D.colSpan)?1:D.colSpan;var F=isNaN(D.rowSpan)?1:D.rowSpan;for (var G=0;G<F;G++){if (!C[r+G]) C[r+G]=[];for (var H=0;H<E;H++){C[r+G][c+H]=B[i].cells[j];}};c+=E-1;}};return C;};FCKTableHandler._InstallTableMap=function(A,B){while (B.rows.length>0){var C=B.rows[0];C.parentNode.removeChild(C);};for (var i=0;i<A.length;i++){for (var j=0;j<A[i].length;j++){var D=A[i][j];if (D.parentNode) D.parentNode.removeChild(D);D.colSpan=D.rowSpan=1;}};var E=0;for (var i=0;i<A.length;i++){for (var j=0;j<A[i].length;j++){var D=A[i][j];if (!D) continue;if (j>E) E=j;if (D._colScanned===true) continue;if (A[i][j-1]==D) D.colSpan++;if (A[i][j+1]!=D) D._colScanned=true;}};for (var i=0;i<=E;i++){for (var j=0;j<A.length;j++){if (!A[j]) continue;var D=A[j][i];if (!D||D._rowScanned===true) continue;if (A[j-1]&&A[j-1][i]==D) D.rowSpan++;if (!A[j+1]||A[j+1][i]!=D) D._rowScanned=true;}};for (var i=0;i<A.length;i++){for (var j=0;j<A[i].length;j++){var D=A[i][j];if (FCKBrowserInfo.IsIE){D.removeAttribute('_colScanned');D.removeAttribute('_rowScanned');}else{delete D._colScanned;delete D._rowScanned;}}};for (var i=0;i<A.length;i++){var I=FCKTools.GetElementDocument(B).createElement('tr');for (var j=0;j<A[i].length;){var D=A[i][j];if (A[i-1]&&A[i-1][j]==D){j+=D.colSpan;continue;};I.appendChild(D);j+=D.colSpan;if (D.colSpan==1) D.removeAttribute('colspan');if (D.rowSpan==1) D.removeAttribute('rowspan');};B.appendChild(I);}};FCKTableHandler._MoveCaretToCell=function (A,B){var C=new FCKDomRange(FCK.EditorWindow);C.MoveToNodeContents(A);C.Collapse(B);C.Select();};FCKTableHandler.ClearRow=function(A){var B=A.cells;for (var i=0;i<B.length;i++){B[i].innerHTML='';if (FCKBrowserInfo.IsGeckoLike) FCKTools.AppendBogusBr(B[i]);}};FCKTableHandler.GetMergeRightTarget=function(){var A=this.GetSelectedCells();if (A.length!=1) return null;var B=A[0];var C=this._CreateTableMap(B.parentNode.parentNode);var D=B.parentNode.rowIndex;var E=this._GetCellIndexSpan(C,D,B);var F=E+(isNaN(B.colSpan)?1:B.colSpan);var G=C[D][F];if (!G) return null;this._MarkCells([B,G],'_SizeTest');var H=this._GetMarkerGeometry(C,D,E,'_SizeTest');var I=this._GetMarkerGeometry(C,D,F,'_SizeTest');this._UnmarkCells([B,G],'_SizeTest');if (H.height!=I.height||H.y!=I.y) return null;return { 'refCell':B,'nextCell':G,'tableMap':C };};FCKTableHandler.GetMergeDownTarget=function(){var A=this.GetSelectedCells();if (A.length!=1) return null;var B=A[0];var C=this._CreateTableMap(B.parentNode.parentNode);var D=B.parentNode.rowIndex;var E=this._GetCellIndexSpan(C,D,B);var F=D+(isNaN(B.rowSpan)?1:B.rowSpan);if (!C[F]) return null;var G=C[F][E];if (!G) return null;this._MarkCells([B,G],'_SizeTest');var H=this._GetMarkerGeometry(C,D,E,'_SizeTest');var I=this._GetMarkerGeometry(C,F,E,'_SizeTest');this._UnmarkCells([B,G],'_SizeTest');if (H.width!=I.width||H.x!=I.x) return null;return { 'refCell':B,'nextCell':G,'tableMap':C };};
+FCKTableHandler.GetSelectedCells=function(){var A=[];var B=FCKSelection.GetSelection();if (B.rangeCount==1&&B.anchorNode.nodeType==3){var C=FCKTools.GetElementAscensor(B.anchorNode,'TD,TH');if (C) A[0]=C;return A;};for (var i=0;i<B.rangeCount;i++){var D=B.getRangeAt(i);var E;if (D.startContainer.tagName.Equals('TD','TH')) E=D.startContainer;else E=D.startContainer.childNodes[D.startOffset];if (E.tagName.Equals('TD','TH')) A[A.length]=E;};return A;};
+var FCKXml=function(){this.Error=false;};FCKXml.GetAttribute=function(A,B,C){var D=A.attributes.getNamedItem(B);return D?D.value:C;};FCKXml.TransformToObject=function(A){if (!A) return null;var B={};var C=A.attributes;for (var i=0;i<C.length;i++){var D=C[i];B[D.name]=D.value;};var E=A.childNodes;for (i=0;i<E.length;i++){var F=E[i];if (F.nodeType==1){var G='$'+F.nodeName;var H=B[G];if (!H) H=B[G]=[];H.push(this.TransformToObject(F));}};return B;};
+FCKXml.prototype={LoadUrl:function(A){this.Error=false;var B;var C=FCKTools.CreateXmlObject('XmlHttp');C.open('GET',A,false);C.send(null);if (C.status==200||C.status==304||(C.status==0&&C.readyState==4)){B=C.responseXML;if (!B) B=(new DOMParser()).parseFromString(C.responseText,'text/xml');}else B=null;if (B){try{var D=B.firstChild;}catch (e){B=(new DOMParser()).parseFromString(C.responseText,'text/xml');}};if (!B||!B.firstChild){this.Error=true;if (window.confirm('Error loading "'+A+'" (HTTP Status: '+C.status+').\r\nDo you want to see the server response dump?')) alert(C.responseText);};this.DOMDocument=B;},SelectNodes:function(A,B){if (this.Error) return [];var C=[];var D=this.DOMDocument.evaluate(A,B?B:this.DOMDocument,this.DOMDocument.createNSResolver(this.DOMDocument.documentElement),XPathResult.ORDERED_NODE_ITERATOR_TYPE,null);if (D){var E=D.iterateNext();while(E){C[C.length]=E;E=D.iterateNext();}};return C;},SelectSingleNode:function(A,B){if (this.Error) return null;var C=this.DOMDocument.evaluate(A,B?B:this.DOMDocument,this.DOMDocument.createNSResolver(this.DOMDocument.documentElement),9,null);if (C&&C.singleNodeValue) return C.singleNodeValue;else return null;}};
+var FCKNamedCommand=function(A){this.Name=A;};FCKNamedCommand.prototype.Execute=function(){FCK.ExecuteNamedCommand(this.Name);};FCKNamedCommand.prototype.GetState=function(){if (FCK.EditMode!=0) return -1;return FCK.GetNamedCommandState(this.Name);};
+var FCKStyleCommand=function(){};FCKStyleCommand.prototype={Name:'Style',Execute:function(A,B){FCKUndo.SaveUndoStep();if (B.Selected) FCK.Styles.RemoveStyle(B.Style);else FCK.Styles.ApplyStyle(B.Style);FCKUndo.SaveUndoStep();FCK.Focus();FCK.Events.FireEvent('OnSelectionChange');},GetState:function(){if (FCK.EditMode!=0||!FCK.EditorDocument) return -1;if (FCKSelection.GetType()=='Control'){var A=FCKSelection.GetSelectedElement();if (!A||!FCKStyles.CheckHasObjectStyle(A.nodeName.toLowerCase())) return -1;};return 0;}};
+var FCKDialogCommand=function(A,B,C,D,E,F,G,H){this.Name=A;this.Title=B;this.Url=C;this.Width=D;this.Height=E;this.CustomValue=H;this.GetStateFunction=F;this.GetStateParam=G;this.Resizable=false;};FCKDialogCommand.prototype.Execute=function(){FCKDialog.OpenDialog('FCKDialog_'+this.Name,this.Title,this.Url,this.Width,this.Height,this.CustomValue,null,this.Resizable);};FCKDialogCommand.prototype.GetState=function(){if (this.GetStateFunction) return this.GetStateFunction(this.GetStateParam);else return FCK.EditMode==0?0:-1;};var FCKUndefinedCommand=function(){this.Name='Undefined';};FCKUndefinedCommand.prototype.Execute=function(){alert(FCKLang.NotImplemented);};FCKUndefinedCommand.prototype.GetState=function(){return 0;};var FCKFormatBlockCommand=function(){};FCKFormatBlockCommand.prototype={Name:'FormatBlock',Execute:FCKStyleCommand.prototype.Execute,GetState:function(){return FCK.EditorDocument?0:-1;}};var FCKFontNameCommand=function(){};FCKFontNameCommand.prototype={Name:'FontName',Execute:FCKStyleCommand.prototype.Execute,GetState:FCKFormatBlockCommand.prototype.GetState};var FCKFontSizeCommand=function(){};FCKFontSizeCommand.prototype={Name:'FontSize',Execute:FCKStyleCommand.prototype.Execute,GetState:FCKFormatBlockCommand.prototype.GetState};var FCKPreviewCommand=function(){this.Name='Preview';};FCKPreviewCommand.prototype.Execute=function(){FCK.Preview();};FCKPreviewCommand.prototype.GetState=function(){return 0;};var FCKSaveCommand=function(){this.Name='Save';};FCKSaveCommand.prototype.Execute=function(){var A=FCK.GetParentForm();if (typeof(A.onsubmit)=='function'){var B=A.onsubmit();if (B!=null&&B===false) return;};if (typeof(A.submit)=='function') A.submit();else A.submit.click();};FCKSaveCommand.prototype.GetState=function(){return 0;};var FCKNewPageCommand=function(){this.Name='NewPage';};FCKNewPageCommand.prototype.Execute=function(){FCKUndo.SaveUndoStep();FCK.SetData('');FCKUndo.Typing=true;FCK.Focus();};FCKNewPageCommand.prototype.GetState=function(){return 0;};var FCKSourceCommand=function(){this.Name='Source';};FCKSourceCommand.prototype.Execute=function(){if (FCKConfig.SourcePopup){var A=FCKConfig.ScreenWidth*0.65;var B=FCKConfig.ScreenHeight*0.65;FCKDialog.OpenDialog('FCKDialog_Source',FCKLang.Source,'dialog/fck_source.html',A,B,null,null,true);}else FCK.SwitchEditMode();};FCKSourceCommand.prototype.GetState=function(){return (FCK.EditMode==0?0:1);};var FCKUndoCommand=function(){this.Name='Undo';};FCKUndoCommand.prototype.Execute=function(){FCKUndo.Undo();};FCKUndoCommand.prototype.GetState=function(){if (FCK.EditMode!=0) return -1;return (FCKUndo.CheckUndoState()?0:-1);};var FCKRedoCommand=function(){this.Name='Redo';};FCKRedoCommand.prototype.Execute=function(){FCKUndo.Redo();};FCKRedoCommand.prototype.GetState=function(){if (FCK.EditMode!=0) return -1;return (FCKUndo.CheckRedoState()?0:-1);};var FCKPageBreakCommand=function(){this.Name='PageBreak';};FCKPageBreakCommand.prototype.Execute=function(){FCKUndo.SaveUndoStep();var e=FCK.EditorDocument.createElement('DIV');e.style.pageBreakAfter='always';e.innerHTML='<span style="DISPLAY:none">&nbsp;</span>';var A=FCKDocumentProcessor_CreateFakeImage('FCK__PageBreak',e);var B=new FCKDomRange(FCK.EditorWindow);B.MoveToSelection();var C=B.SplitBlock();B.InsertNode(A);FCK.Events.FireEvent('OnSelectionChange');};FCKPageBreakCommand.prototype.GetState=function(){if (FCK.EditMode!=0) return -1;return 0;};var FCKUnlinkCommand=function(){this.Name='Unlink';};FCKUnlinkCommand.prototype.Execute=function(){FCKUndo.SaveUndoStep();if (FCKBrowserInfo.IsGeckoLike){var A=FCK.Selection.MoveToAncestorNode('A');if (A) FCKTools.RemoveOuterTags(A);return;};FCK.ExecuteNamedCommand(this.Name);};FCKUnlinkCommand.prototype.GetState=function(){if (FCK.EditMode!=0) return -1;var A=FCK.GetNamedCommandState(this.Name);if (A==0&&FCK.EditMode==0){var B=FCKSelection.MoveToAncestorNode('A');var C=(B&&B.name.length>0&&B.href.length==0);if (C) A=-1;};return A;};var FCKSelectAllCommand=function(){this.Name='SelectAll';};FCKSelectAllCommand.prototype.Execute=function(){if (FCK.EditMode==0){FCK.ExecuteNamedCommand('SelectAll');}else{var A=FCK.EditingArea.Textarea;if (FCKBrowserInfo.IsIE){A.createTextRange().execCommand('SelectAll');}else{A.selectionStart=0;A.selectionEnd=A.value.length;};A.focus();}};FCKSelectAllCommand.prototype.GetState=function(){if (FCK.EditMode!=0) return -1;return 0;};var FCKPasteCommand=function(){this.Name='Paste';};FCKPasteCommand.prototype={Execute:function(){if (FCKBrowserInfo.IsIE) FCK.Paste();else FCK.ExecuteNamedCommand('Paste');},GetState:function(){if (FCK.EditMode!=0) return -1;return FCK.GetNamedCommandState('Paste');}};var FCKRuleCommand=function(){this.Name='Rule';};FCKRuleCommand.prototype={Execute:function(){FCKUndo.SaveUndoStep();FCK.InsertElement('hr');},GetState:function(){if (FCK.EditMode!=0) return -1;return FCK.GetNamedCommandState('InsertHorizontalRule');}};var FCKCutCopyCommand=function(A){this.Name=A?'Cut':'Copy';};FCKCutCopyCommand.prototype={Execute:function(){var A=false;if (FCKBrowserInfo.IsIE){var B=function(){A=true;};var C='on'+this.Name.toLowerCase();FCK.EditorDocument.body.attachEvent(C,B);FCK.ExecuteNamedCommand(this.Name);FCK.EditorDocument.body.detachEvent(C,B);}else{try{FCK.ExecuteNamedCommand(this.Name);A=true;}catch(e){}};if (!A) alert(FCKLang['PasteError'+this.Name]);},GetState:function(){return FCK.EditMode!=0?-1:FCK.GetNamedCommandState('Cut');}};var FCKAnchorDeleteCommand=function(){this.Name='AnchorDelete';};FCKAnchorDeleteCommand.prototype={Execute:function(){if (FCK.Selection.GetType()=='Control'){FCK.Selection.Delete();}else{var A=FCK.Selection.GetSelectedElement();if (A){if (A.tagName=='IMG'&&A.getAttribute('_fckanchor')) oAnchor=FCK.GetRealElement(A);else A=null;};if (!A){oAnchor=FCK.Selection.MoveToAncestorNode('A');if (oAnchor) FCK.Selection.SelectNode(oAnchor);};if (oAnchor.href.length!=0){oAnchor.removeAttribute('name');if (FCKBrowserInfo.IsIE) oAnchor.className=oAnchor.className.replace(FCKRegexLib.FCK_Class,'');return;};if (A){A.parentNode.removeChild(A);return;};if (oAnchor.innerHTML.length==0){oAnchor.parentNode.removeChild(oAnchor);return;};FCKTools.RemoveOuterTags(oAnchor);};if (FCKBrowserInfo.IsGecko) FCK.Selection.Collapse(true);},GetState:function(){if (FCK.EditMode!=0) return -1;return FCK.GetNamedCommandState('Unlink');}};
+var FCKShowBlockCommand=function(A,B){this.Name=A;if (B!=undefined) this._SavedState=B;else this._SavedState=null;};FCKShowBlockCommand.prototype.Execute=function(){var A=this.GetState();if (A==-1) return;var B=FCK.EditorDocument.body;if (A==1) B.className=B.className.replace(/(^| )FCK__ShowBlocks/g,'');else B.className+=' FCK__ShowBlocks';FCK.Events.FireEvent('OnSelectionChange');};FCKShowBlockCommand.prototype.GetState=function(){if (FCK.EditMode!=0) return -1;if (!FCK.EditorDocument) return 0;if (/FCK__ShowBlocks(?:\s|$)/.test(FCK.EditorDocument.body.className)) return 1;return 0;};FCKShowBlockCommand.prototype.SaveState=function(){this._SavedState=this.GetState();};FCKShowBlockCommand.prototype.RestoreState=function(){if (this._SavedState!=null&&this.GetState()!=this._SavedState) this.Execute();};
+var FCKSpellCheckCommand=function(){this.Name='SpellCheck';this.IsEnabled=(FCKConfig.SpellChecker=='SpellerPages');};FCKSpellCheckCommand.prototype.Execute=function(){FCKDialog.OpenDialog('FCKDialog_SpellCheck','Spell Check','dialog/fck_spellerpages.html',440,480);};FCKSpellCheckCommand.prototype.GetState=function(){if (FCK.EditMode!=0) return -1;return this.IsEnabled?0:-1;};
+var FCKTextColorCommand=function(A){this.Name=A=='ForeColor'?'TextColor':'BGColor';this.Type=A;var B;if (FCKBrowserInfo.IsIE) B=window;else if (FCK.ToolbarSet._IFrame) B=FCKTools.GetElementWindow(FCK.ToolbarSet._IFrame);else B=window.parent;this._Panel=new FCKPanel(B);this._Panel.AppendStyleSheet(FCKConfig.SkinEditorCSS);this._Panel.MainNode.className='FCK_Panel';this._CreatePanelBody(this._Panel.Document,this._Panel.MainNode);FCK.ToolbarSet.ToolbarItems.GetItem(this.Name).RegisterPanel(this._Panel);FCKTools.DisableSelection(this._Panel.Document.body);};FCKTextColorCommand.prototype.Execute=function(A,B,C){this._Panel.Show(A,B,C);};FCKTextColorCommand.prototype.SetColor=function(A){FCKUndo.SaveUndoStep();var B=FCKStyles.GetStyle('_FCK_'+(this.Type=='ForeColor'?'Color':'BackColor'));if (!A||A.length==0) FCK.Styles.RemoveStyle(B);else{B.SetVariable('Color',A);FCKStyles.ApplyStyle(B);};FCKUndo.SaveUndoStep();FCK.Focus();FCK.Events.FireEvent('OnSelectionChange');};FCKTextColorCommand.prototype.GetState=function(){if (FCK.EditMode!=0) return -1;return 0;};function FCKTextColorCommand_OnMouseOver(){this.className='ColorSelected';};function FCKTextColorCommand_OnMouseOut(){this.className='ColorDeselected';};function FCKTextColorCommand_OnClick(A,B,C){this.className='ColorDeselected';B.SetColor(C);B._Panel.Hide();};function FCKTextColorCommand_AutoOnClick(A,B){this.className='ColorDeselected';B.SetColor('');B._Panel.Hide();};function FCKTextColorCommand_MoreOnClick(A,B){this.className='ColorDeselected';B._Panel.Hide();FCKDialog.OpenDialog('FCKDialog_Color',FCKLang.DlgColorTitle,'dialog/fck_colorselector.html',410,320,FCKTools.Bind(B,B.SetColor));};FCKTextColorCommand.prototype._CreatePanelBody=function(A,B){function CreateSelectionDiv(){var C=A.createElement("DIV");C.className='ColorDeselected';FCKTools.AddEventListenerEx(C,'mouseover',FCKTextColorCommand_OnMouseOver);FCKTools.AddEventListenerEx(C,'mouseout',FCKTextColorCommand_OnMouseOut);return C;};var D=B.appendChild(A.createElement("TABLE"));D.className='ForceBaseFont';D.style.tableLayout='fixed';D.cellPadding=0;D.cellSpacing=0;D.border=0;D.width=150;var E=D.insertRow(-1).insertCell(-1);E.colSpan=8;var C=E.appendChild(CreateSelectionDiv());C.innerHTML='<table cellspacing="0" cellpadding="0" width="100%" border="0">\n			<tr>\n				<td><div class="ColorBoxBorder"><div class="ColorBox" style="background-color: #000000"></div></div></td>\n				<td nowrap width="100%" align="center">'+FCKLang.ColorAutomatic+'</td>\n			</tr>\n		</table>';FCKTools.AddEventListenerEx(C,'click',FCKTextColorCommand_AutoOnClick,this);if (!FCKBrowserInfo.IsIE) C.style.width='96%';var G=FCKConfig.FontColors.toString().split(',');var H=0;while (H<G.length){var I=D.insertRow(-1);for (var i=0;i<8;i++,H++){if (H<G.length){var J=G[H].split('/');var K='#'+J[0];var L=J[1]||K;};C=I.insertCell(-1).appendChild(CreateSelectionDiv());C.innerHTML='<div class="ColorBoxBorder"><div class="ColorBox" style="background-color: '+K+'"></div></div>';if (H>=G.length) C.style.visibility='hidden';else FCKTools.AddEventListenerEx(C,'click',FCKTextColorCommand_OnClick,[this,L]);}};if (FCKConfig.EnableMoreFontColors){E=D.insertRow(-1).insertCell(-1);E.colSpan=8;C=E.appendChild(CreateSelectionDiv());C.innerHTML='<table width="100%" cellpadding="0" cellspacing="0" border="0"><tr><td nowrap align="center">'+FCKLang.ColorMoreColors+'</td></tr></table>';FCKTools.AddEventListenerEx(C,'click',FCKTextColorCommand_MoreOnClick,this);};if (!FCKBrowserInfo.IsIE) C.style.width='96%';};
+var FCKPastePlainTextCommand=function(){this.Name='PasteText';};FCKPastePlainTextCommand.prototype.Execute=function(){FCK.PasteAsPlainText();};FCKPastePlainTextCommand.prototype.GetState=function(){if (FCK.EditMode!=0) return -1;return FCK.GetNamedCommandState('Paste');};
+var FCKPasteWordCommand=function(){this.Name='PasteWord';};FCKPasteWordCommand.prototype.Execute=function(){FCK.PasteFromWord();};FCKPasteWordCommand.prototype.GetState=function(){if (FCK.EditMode!=0||FCKConfig.ForcePasteAsPlainText) return -1;else return FCK.GetNamedCommandState('Paste');};
+var FCKTableCommand=function(A){this.Name=A;};FCKTableCommand.prototype.Execute=function(){FCKUndo.SaveUndoStep();if (!FCKBrowserInfo.IsGecko){switch (this.Name){case 'TableMergeRight':return FCKTableHandler.MergeRight();case 'TableMergeDown':return FCKTableHandler.MergeDown();}};switch (this.Name){case 'TableInsertRowAfter':return FCKTableHandler.InsertRow(false);case 'TableInsertRowBefore':return FCKTableHandler.InsertRow(true);case 'TableDeleteRows':return FCKTableHandler.DeleteRows();case 'TableInsertColumnAfter':return FCKTableHandler.InsertColumn(false);case 'TableInsertColumnBefore':return FCKTableHandler.InsertColumn(true);case 'TableDeleteColumns':return FCKTableHandler.DeleteColumns();case 'TableInsertCellAfter':return FCKTableHandler.InsertCell(null,false);case 'TableInsertCellBefore':return FCKTableHandler.InsertCell(null,true);case 'TableDeleteCells':return FCKTableHandler.DeleteCells();case 'TableMergeCells':return FCKTableHandler.MergeCells();case 'TableHorizontalSplitCell':return FCKTableHandler.HorizontalSplitCell();case 'TableVerticalSplitCell':return FCKTableHandler.VerticalSplitCell();case 'TableDelete':return FCKTableHandler.DeleteTable();default:return alert(FCKLang.UnknownCommand.replace(/%1/g,this.Name));}};FCKTableCommand.prototype.GetState=function(){if (FCK.EditorDocument!=null&&FCKSelection.HasAncestorNode('TABLE')){switch (this.Name){case 'TableHorizontalSplitCell':case 'TableVerticalSplitCell':if (FCKTableHandler.GetSelectedCells().length==1) return 0;else return -1;case 'TableMergeCells':if (FCKTableHandler.CheckIsSelectionRectangular()&&FCKTableHandler.GetSelectedCells().length>1) return 0;else return -1;case 'TableMergeRight':return FCKTableHandler.GetMergeRightTarget()?0:-1;case 'TableMergeDown':return FCKTableHandler.GetMergeDownTarget()?0:-1;default:return 0;}}else return -1;};
+var FCKFitWindow=function(){this.Name='FitWindow';};FCKFitWindow.prototype.Execute=function(){var A=window.frameElement;var B=A.style;var C=parent;var D=C.document.documentElement;var E=C.document.body;var F=E.style;var G;if (!this.IsMaximized){if(FCKBrowserInfo.IsIE) C.attachEvent('onresize',FCKFitWindow_Resize);else C.addEventListener('resize',FCKFitWindow_Resize,true);this._ScrollPos=FCKTools.GetScrollPosition(C);G=A;while((G=G.parentNode)){if (G.nodeType==1){G._fckSavedStyles=FCKTools.SaveStyles(G);G.style.zIndex=FCKConfig.FloatingPanelsZIndex-1;}};if (FCKBrowserInfo.IsIE){this.documentElementOverflow=D.style.overflow;D.style.overflow='hidden';F.overflow='hidden';}else{F.overflow='hidden';F.width='0px';F.height='0px';};this._EditorFrameStyles=FCKTools.SaveStyles(A);var H=FCKTools.GetViewPaneSize(C);B.position="absolute";A.offsetLeft;B.zIndex=FCKConfig.FloatingPanelsZIndex-1;B.left="0px";B.top="0px";B.width=H.Width+"px";B.height=H.Height+"px";if (!FCKBrowserInfo.IsIE){B.borderRight=B.borderBottom="9999px solid white";B.backgroundColor="white";};C.scrollTo(0,0);var I=FCKTools.GetWindowPosition(C,A);if (I.x!=0) B.left=(-1*I.x)+"px";if (I.y!=0) B.top=(-1*I.y)+"px";this.IsMaximized=true;}else{if(FCKBrowserInfo.IsIE) C.detachEvent("onresize",FCKFitWindow_Resize);else C.removeEventListener("resize",FCKFitWindow_Resize,true);G=A;while((G=G.parentNode)){if (G._fckSavedStyles){FCKTools.RestoreStyles(G,G._fckSavedStyles);G._fckSavedStyles=null;}};if (FCKBrowserInfo.IsIE) D.style.overflow=this.documentElementOverflow;FCKTools.RestoreStyles(A,this._EditorFrameStyles);C.scrollTo(this._ScrollPos.X,this._ScrollPos.Y);this.IsMaximized=false;};FCKToolbarItems.GetItem('FitWindow').RefreshState();if (FCK.EditMode==0) FCK.EditingArea.MakeEditable();FCK.Focus();};FCKFitWindow.prototype.GetState=function(){if (FCKConfig.ToolbarLocation!='In') return -1;else return (this.IsMaximized?1:0);};function FCKFitWindow_Resize(){var A=FCKTools.GetViewPaneSize(parent);var B=window.frameElement.style;B.width=A.Width+'px';B.height=A.Height+'px';};
+var FCKListCommand=function(A,B){this.Name=A;this.TagName=B;};FCKListCommand.prototype={GetState:function(){if (FCK.EditMode!=0||!FCK.EditorWindow) return -1;var A=FCKSelection.GetBoundaryParentElement(true);var B=A;while (B){if (B.nodeName.IEquals(['ul','ol'])) break;B=B.parentNode;};if (B&&B.nodeName.IEquals(this.TagName)) return 1;else return 0;},Execute:function(){FCKUndo.SaveUndoStep();var A=FCK.EditorDocument;var B=new FCKDomRange(FCK.EditorWindow);B.MoveToSelection();var C=this.GetState();if (C==0){FCKDomTools.TrimNode(A.body);if (!A.body.firstChild){var D=A.createElement('p');A.body.appendChild(D);B.MoveToNodeContents(D);}};var E=B.CreateBookmark();var F=[];var G={};var H=new FCKDomRangeIterator(B);var I;H.ForceBrBreak=(C==0);var J=true;var K=null;while (J){while ((I=H.GetNextParagraph())){var L=new FCKElementPath(I);var M=null;var N=false;var O=L.BlockLimit;for (var i=L.Elements.length-1;i>=0;i--){var P=L.Elements[i];if (P.nodeName.IEquals(['ol','ul'])){if (O._FCK_ListGroupObject) O._FCK_ListGroupObject=null;var Q=P._FCK_ListGroupObject;if (Q) Q.contents.push(I);else{Q={ 'root':P,'contents':[I] };F.push(Q);FCKDomTools.SetElementMarker(G,P,'_FCK_ListGroupObject',Q);};N=true;break;}};if (N) continue;var R=O;if (R._FCK_ListGroupObject) R._FCK_ListGroupObject.contents.push(I);else{var Q={ 'root':R,'contents':[I] };FCKDomTools.SetElementMarker(G,R,'_FCK_ListGroupObject',Q);F.push(Q);}};if (FCKBrowserInfo.IsIE) J=false;else{if (K==null){K=[];var T=FCKSelection.GetSelection();if (T&&F.length==0) K.push(T.getRangeAt(0));for (var i=1;T&&i<T.rangeCount;i++) K.push(T.getRangeAt(i));};if (K.length<1) J=false;else{var U=FCKW3CRange.CreateFromRange(A,K.shift());B._Range=U;B._UpdateElementInfo();if (B.StartNode.nodeName.IEquals('td')) B.SetStart(B.StartNode,1);if (B.EndNode.nodeName.IEquals('td')) B.SetEnd(B.EndNode,2);H=new FCKDomRangeIterator(B);H.ForceBrBreak=(C==0);}}};var W=[];while (F.length>0){var Q=F.shift();if (C==0){if (Q.root.nodeName.IEquals(['ul','ol'])) this._ChangeListType(Q,G,W);else this._CreateList(Q,W);}else if (C==1&&Q.root.nodeName.IEquals(['ul','ol'])) this._RemoveList(Q,G);};for (var i=0;i<W.length;i++){var M=W[i];var Z=false;var a=M;while (!Z){a=a.nextSibling;if (a&&a.nodeType==3&&a.nodeValue.search(/^[\n\r\t ]*$/)==0) continue;Z=true;};if (a&&a.nodeName.IEquals(this.TagName)){a.parentNode.removeChild(a);while (a.firstChild) M.appendChild(a.removeChild(a.firstChild));};Z=false;a=M;while (!Z){a=a.previousSibling;if (a&&a.nodeType==3&&a.nodeValue.search(/^[\n\r\t ]*$/)==0) continue;Z=true;};if (a&&a.nodeName.IEquals(this.TagName)){a.parentNode.removeChild(a);while (a.lastChild) M.insertBefore(a.removeChild(a.lastChild),M.firstChild);}};FCKDomTools.ClearAllMarkers(G);B.MoveToBookmark(E);B.Select();FCK.Focus();FCK.Events.FireEvent('OnSelectionChange');},_ChangeListType:function(A,B,C){var D=FCKDomTools.ListToArray(A.root,B);var E=[];for (var i=0;i<A.contents.length;i++){var F=A.contents[i];F=FCKTools.GetElementAscensor(F,'li');if (!F||F._FCK_ListItem_Processed) continue;E.push(F);FCKDomTools.SetElementMarker(B,F,'_FCK_ListItem_Processed',true);};var G=FCKTools.GetElementDocument(A.root).createElement(this.TagName);for (var i=0;i<E.length;i++){var H=E[i]._FCK_ListArray_Index;D[H].parent=G;};var I=FCKDomTools.ArrayToList(D,B);for (var i=0;i<I.listNode.childNodes.length;i++){if (I.listNode.childNodes[i].nodeName.IEquals(this.TagName)) C.push(I.listNode.childNodes[i]);};A.root.parentNode.replaceChild(I.listNode,A.root);},_CreateList:function(A,B){var C=A.contents;var D=FCKTools.GetElementDocument(A.root);var E=[];if (C.length==1&&C[0]==A.root){var F=D.createElement('div');while (C[0].firstChild) F.appendChild(C[0].removeChild(C[0].firstChild));C[0].appendChild(F);C[0]=F;};var G=A.contents[0].parentNode;for (var i=0;i<C.length;i++) G=FCKDomTools.GetCommonParents(G,C[i].parentNode).pop();for (var i=0;i<C.length;i++){var H=C[i];while (H.parentNode){if (H.parentNode==G){E.push(H);break;};H=H.parentNode;}};if (E.length<1) return;var I=E[E.length-1].nextSibling;var J=D.createElement(this.TagName);B.push(J);while (E.length){var K=E.shift();var L=D.createDocumentFragment();while (K.firstChild) L.appendChild(K.removeChild(K.firstChild));K.parentNode.removeChild(K);var M=D.createElement('li');M.appendChild(L);J.appendChild(M);};G.insertBefore(J,I);},_RemoveList:function(A,B){var C=FCKDomTools.ListToArray(A.root,B);var D=[];for (var i=0;i<A.contents.length;i++){var E=A.contents[i];E=FCKTools.GetElementAscensor(E,'li');if (!E||E._FCK_ListItem_Processed) continue;D.push(E);FCKDomTools.SetElementMarker(B,E,'_FCK_ListItem_Processed',true);};var F=null;for (var i=0;i<D.length;i++){var G=D[i]._FCK_ListArray_Index;C[G].indent=-1;F=G;};for (var i=F+1;i<C.length;i++){if (C[i].indent>C[i-1].indent+1){var H=C[i-1].indent+1-C[i].indent;var I=C[i].indent;while (C[i]&&C[i].indent>=I){C[i].indent+=H;i++;};i--;}};var J=FCKDomTools.ArrayToList(C,B);if (A.root.nextSibling==null||A.root.nextSibling.nodeName.IEquals('br')){if (J.listNode.lastChild.nodeName.IEquals('br')) J.listNode.removeChild(J.listNode.lastChild);};A.root.parentNode.replaceChild(J.listNode,A.root);}};
+var FCKJustifyCommand=function(A){this.AlignValue=A;var B=FCKConfig.ContentLangDirection.toLowerCase();this.IsDefaultAlign=(A=='left'&&B=='ltr')||(A=='right'&&B=='rtl');var C=this._CssClassName=(function(){var D=FCKConfig.JustifyClasses;if (D){switch (A){case 'left':return D[0]||null;case 'center':return D[1]||null;case 'right':return D[2]||null;case 'justify':return D[3]||null;}};return null;})();if (C&&C.length>0) this._CssClassRegex=new RegExp('(?:^|\\s+)'+C+'(?=$|\\s)');};FCKJustifyCommand._GetClassNameRegex=function(){var A=FCKJustifyCommand._ClassRegex;if (A!=undefined) return A;var B=[];var C=FCKConfig.JustifyClasses;if (C){for (var i=0;i<4;i++){var D=C[i];if (D&&D.length>0) B.push(D);}};if (B.length>0) A=new RegExp('(?:^|\\s+)(?:'+B.join('|')+')(?=$|\\s)');else A=null;return FCKJustifyCommand._ClassRegex=A;};FCKJustifyCommand.prototype={Execute:function(){FCKUndo.SaveUndoStep();var A=new FCKDomRange(FCK.EditorWindow);A.MoveToSelection();var B=this.GetState();if (B==-1) return;var C=A.CreateBookmark();var D=this._CssClassName;var E=new FCKDomRangeIterator(A);var F;while ((F=E.GetNextParagraph())){F.removeAttribute('align');if (D){var G=F.className.replace(FCKJustifyCommand._GetClassNameRegex(),'');if (B==0){if (G.length>0) G+=' ';F.className=G+D;}else if (G.length==0) FCKDomTools.RemoveAttribute(F,'class');}else{var H=F.style;if (B==0) H.textAlign=this.AlignValue;else{H.textAlign='';if (H.cssText.length==0) F.removeAttribute('style');}}};A.MoveToBookmark(C);A.Select();FCK.Focus();FCK.Events.FireEvent('OnSelectionChange');},GetState:function(){if (FCK.EditMode!=0||!FCK.EditorWindow) return -1;var A=new FCKElementPath(FCKSelection.GetBoundaryParentElement(true));var B=A.Block||A.BlockLimit;if (!B||B.nodeName.toLowerCase()=='body') return 0;var C;if (FCKBrowserInfo.IsIE) C=B.currentStyle.textAlign;else C=FCK.EditorWindow.getComputedStyle(B,'').getPropertyValue('text-align');C=C.replace(/(-moz-|-webkit-|start|auto)/i,'');if ((!C&&this.IsDefaultAlign)||C==this.AlignValue) return 1;return 0;}};
+var FCKIndentCommand=function(A,B){this.Name=A;this.Offset=B;this.IndentCSSProperty=FCKConfig.ContentLangDirection.IEquals('ltr')?'marginLeft':'marginRight';};FCKIndentCommand._InitIndentModeParameters=function(){if (FCKConfig.IndentClasses&&FCKConfig.IndentClasses.length>0){this._UseIndentClasses=true;this._IndentClassMap={};for (var i=0;i<FCKConfig.IndentClasses.length;i++) this._IndentClassMap[FCKConfig.IndentClasses[i]]=i+1;this._ClassNameRegex=new RegExp('(?:^|\\s+)('+FCKConfig.IndentClasses.join('|')+')(?=$|\\s)');}else this._UseIndentClasses=false;};FCKIndentCommand.prototype={Execute:function(){FCKUndo.SaveUndoStep();var A=new FCKDomRange(FCK.EditorWindow);A.MoveToSelection();var B=A.CreateBookmark();var C=FCKDomTools.GetCommonParentNode(A.StartNode||A.StartContainer,A.EndNode||A.EndContainer,['ul','ol']);if (C) this._IndentList(A,C);else this._IndentBlock(A);A.MoveToBookmark(B);A.Select();FCK.Focus();FCK.Events.FireEvent('OnSelectionChange');},GetState:function(){if (FCK.EditMode!=0||!FCK.EditorWindow) return -1;if (FCKIndentCommand._UseIndentClasses==undefined) FCKIndentCommand._InitIndentModeParameters();var A=FCKSelection.GetBoundaryParentElement(true);var B=FCKSelection.GetBoundaryParentElement(false);var C=FCKDomTools.GetCommonParentNode(A,B,['ul','ol']);if (C){if (this.Name.IEquals('outdent')) return 0;var D=FCKTools.GetElementAscensor(A,'li');if (!D||!D.previousSibling) return -1;return 0;};if (!FCKIndentCommand._UseIndentClasses&&this.Name.IEquals('indent')) return 0;var E=new FCKElementPath(A);var F=E.Block||E.BlockLimit;if (!F) return -1;if (FCKIndentCommand._UseIndentClasses){var G=F.className.match(FCKIndentCommand._ClassNameRegex);var H=0;if (G!=null){G=G[1];H=FCKIndentCommand._IndentClassMap[G];};if ((this.Name=='outdent'&&H==0)||(this.Name=='indent'&&H==FCKConfig.IndentClasses.length)) return -1;return 0;}else{var I=parseInt(F.style[this.IndentCSSProperty],10);if (isNaN(I)) I=0;if (I<=0) return -1;return 0;}},_IndentBlock:function(A){var B=new FCKDomRangeIterator(A);B.EnforceRealBlocks=true;A.Expand('block_contents');var C=FCKDomTools.GetCommonParents(A.StartContainer,A.EndContainer);var D=C[C.length-1];var E;while ((E=B.GetNextParagraph())){if (!(E==D||E.parentNode==D)) continue;if (FCKIndentCommand._UseIndentClasses){var F=E.className.match(FCKIndentCommand._ClassNameRegex);var G=0;if (F!=null){F=F[1];G=FCKIndentCommand._IndentClassMap[F];};if (this.Name.IEquals('outdent')) G--;else if (this.Name.IEquals('indent')) G++;G=Math.min(G,FCKConfig.IndentClasses.length);G=Math.max(G,0);var H=E.className.replace(FCKIndentCommand._ClassNameRegex,'');if (G<1) E.className=H;else E.className=(H.length>0?H+' ':'')+FCKConfig.IndentClasses[G-1];}else{var I=parseInt(E.style[this.IndentCSSProperty],10);if (isNaN(I)) I=0;I+=this.Offset;I=Math.max(I,0);I=Math.ceil(I/this.Offset)*this.Offset;E.style[this.IndentCSSProperty]=I?I+FCKConfig.IndentUnit:'';if (E.getAttribute('style')=='') E.removeAttribute('style');}}},_IndentList:function(A,B){var C=A.StartContainer;var D=A.EndContainer;while (C&&C.parentNode!=B) C=C.parentNode;while (D&&D.parentNode!=B) D=D.parentNode;if (!C||!D) return;var E=C;var F=[];var G=false;while (G==false){if (E==D) G=true;F.push(E);E=E.nextSibling;};if (F.length<1) return;var H=FCKDomTools.GetParents(B);for (var i=0;i<H.length;i++){if (H[i].nodeName.IEquals(['ul','ol'])){B=H[i];break;}};var I=this.Name.IEquals('indent')?1:-1;var J=F[0];var K=F[F.length-1];var L={};var M=FCKDomTools.ListToArray(B,L);var N=M[K._FCK_ListArray_Index].indent;for (var i=J._FCK_ListArray_Index;i<=K._FCK_ListArray_Index;i++) M[i].indent+=I;for (var i=K._FCK_ListArray_Index+1;i<M.length&&M[i].indent>N;i++) M[i].indent+=I;var O=FCKDomTools.ArrayToList(M);if (O) B.parentNode.replaceChild(O.listNode,B);FCKDomTools.ClearAllMarkers(L);}};
+var FCKBlockQuoteCommand=function(){};FCKBlockQuoteCommand.prototype={Execute:function(){FCKUndo.SaveUndoStep();var A=this.GetState();var B=new FCKDomRange(FCK.EditorWindow);B.MoveToSelection();var C=B.CreateBookmark();if (FCKBrowserInfo.IsIE){var D=B.GetBookmarkNode(C,true);var E=B.GetBookmarkNode(C,false);var F;if (D&&D.parentNode.nodeName.IEquals('blockquote')&&!D.previousSibling){F=D;while ((F=F.nextSibling)){if (FCKListsLib.BlockElements[F.nodeName.toLowerCase()]) FCKDomTools.MoveNode(D,F,true);}};if (E&&E.parentNode.nodeName.IEquals('blockquote')&&!E.previousSibling){F=E;while ((F=F.nextSibling)){if (FCKListsLib.BlockElements[F.nodeName.toLowerCase()]){if (F.firstChild==D) FCKDomTools.InsertAfterNode(D,E);else FCKDomTools.MoveNode(E,F,true);}}}};var G=new FCKDomRangeIterator(B);var H;if (A==0){G.EnforceRealBlocks=true;var I=[];while ((H=G.GetNextParagraph())) I.push(H);if (I.length<1){para=B.Window.document.createElement(FCKConfig.EnterMode.IEquals('p')?'p':'div');B.InsertNode(para);para.appendChild(B.Window.document.createTextNode('\ufeff'));B.MoveToBookmark(C);B.MoveToNodeContents(para);B.Collapse(true);C=B.CreateBookmark();I.push(para);};var J=I[0].parentNode;var K=[];for (var i=0;i<I.length;i++){H=I[i];J=FCKDomTools.GetCommonParents(H.parentNode,J).pop();};var L=null;while (I.length>0){H=I.shift();while (H.parentNode!=J) H=H.parentNode;if (H!=L) K.push(H);L=H;}while (K.length>0){H=K.shift();if (H.nodeName.IEquals('blockquote')){var M=FCKTools.GetElementDocument(H).createDocumentFragment();while (H.firstChild){M.appendChild(H.removeChild(H.firstChild));I.push(M.lastChild);};H.parentNode.replaceChild(M,H);}else I.push(H);};var N=B.Window.document.createElement('blockquote');J.insertBefore(N,I[0]);while (I.length>0){H=I.shift();N.appendChild(H);}}else if (A==1){var O=[];while ((H=G.GetNextParagraph())){var P=null;var Q=null;while (H.parentNode){if (H.parentNode.nodeName.IEquals('blockquote')){P=H.parentNode;Q=H;break;};H=H.parentNode;};if (P&&Q) O.push(Q);};var R=[];while (O.length>0){var S=O.shift();var N=S.parentNode;if (S==S.parentNode.firstChild){N.parentNode.insertBefore(N.removeChild(S),N);if (!N.firstChild) N.parentNode.removeChild(N);}else if (S==S.parentNode.lastChild){N.parentNode.insertBefore(N.removeChild(S),N.nextSibling);if (!N.firstChild) N.parentNode.removeChild(N);}else FCKDomTools.BreakParent(S,S.parentNode,B);R.push(S);};if (FCKConfig.EnterMode.IEquals('br')){while (R.length){var S=R.shift();var W=true;if (S.nodeName.IEquals('div')){var M=FCKTools.GetElementDocument(S).createDocumentFragment();var Y=W&&S.previousSibling&&!FCKListsLib.BlockBoundaries[S.previousSibling.nodeName.toLowerCase()];if (W&&Y) M.appendChild(FCKTools.GetElementDocument(S).createElement('br'));var Z=S.nextSibling&&!FCKListsLib.BlockBoundaries[S.nextSibling.nodeName.toLowerCase()];while (S.firstChild) M.appendChild(S.removeChild(S.firstChild));if (Z) M.appendChild(FCKTools.GetElementDocument(S).createElement('br'));S.parentNode.replaceChild(M,S);W=false;}}}};B.MoveToBookmark(C);B.Select();FCK.Focus();FCK.Events.FireEvent('OnSelectionChange');},GetState:function(){if (FCK.EditMode!=0||!FCK.EditorWindow) return -1;var A=new FCKElementPath(FCKSelection.GetBoundaryParentElement(true));var B=A.Block||A.BlockLimit;if (!B||B.nodeName.toLowerCase()=='body') return 0;for (var i=0;i<A.Elements.length;i++){if (A.Elements[i].nodeName.IEquals('blockquote')) return 1;};return 0;}};
+var FCKCoreStyleCommand=function(A){this.Name='CoreStyle';this.StyleName='_FCK_'+A;this.IsActive=false;FCKStyles.AttachStyleStateChange(this.StyleName,this._OnStyleStateChange,this);};FCKCoreStyleCommand.prototype={Execute:function(){FCKUndo.SaveUndoStep();if (this.IsActive) FCKStyles.RemoveStyle(this.StyleName);else FCKStyles.ApplyStyle(this.StyleName);FCK.Focus();FCK.Events.FireEvent('OnSelectionChange');},GetState:function(){if (FCK.EditMode!=0) return -1;return this.IsActive?1:0;},_OnStyleStateChange:function(A,B){this.IsActive=B;}};
+var FCKRemoveFormatCommand=function(){this.Name='RemoveFormat';};FCKRemoveFormatCommand.prototype={Execute:function(){FCKStyles.RemoveAll();FCK.Focus();FCK.Events.FireEvent('OnSelectionChange');},GetState:function(){return FCK.EditorWindow?0:-1;}};
+var FCKCommands=FCK.Commands={};FCKCommands.LoadedCommands={};FCKCommands.RegisterCommand=function(A,B){this.LoadedCommands[A]=B;};FCKCommands.GetCommand=function(A){var B=FCKCommands.LoadedCommands[A];if (B) return B;switch (A){case 'Bold':case 'Italic':case 'Underline':case 'StrikeThrough':case 'Subscript':case 'Superscript':B=new FCKCoreStyleCommand(A);break;case 'RemoveFormat':B=new FCKRemoveFormatCommand();break;case 'DocProps':B=new FCKDialogCommand('DocProps',FCKLang.DocProps,'dialog/fck_docprops.html',400,380,FCKCommands.GetFullPageState);break;case 'Templates':B=new FCKDialogCommand('Templates',FCKLang.DlgTemplatesTitle,'dialog/fck_template.html',380,450);break;case 'Link':B=new FCKDialogCommand('Link',FCKLang.DlgLnkWindowTitle,'dialog/fck_link.html',400,300);break;case 'Unlink':B=new FCKUnlinkCommand();break;case 'Anchor':B=new FCKDialogCommand('Anchor',FCKLang.DlgAnchorTitle,'dialog/fck_anchor.html',370,160);break;case 'AnchorDelete':B=new FCKAnchorDeleteCommand();break;case 'BulletedList':B=new FCKDialogCommand('BulletedList',FCKLang.BulletedListProp,'dialog/fck_listprop.html?UL',370,160);break;case 'NumberedList':B=new FCKDialogCommand('NumberedList',FCKLang.NumberedListProp,'dialog/fck_listprop.html?OL',370,160);break;case 'About':B=new FCKDialogCommand('About',FCKLang.About,'dialog/fck_about.html',420,330,function(){ return 0;});break;case 'Find':B=new FCKDialogCommand('Find',FCKLang.DlgFindAndReplaceTitle,'dialog/fck_replace.html',340,230,null,null,'Find');break;case 'Replace':B=new FCKDialogCommand('Replace',FCKLang.DlgFindAndReplaceTitle,'dialog/fck_replace.html',340,230,null,null,'Replace');break;case 'Image':B=new FCKDialogCommand('Image',FCKLang.DlgImgTitle,'dialog/fck_image.html',450,390);break;case 'Flash':B=new FCKDialogCommand('Flash',FCKLang.DlgFlashTitle,'dialog/fck_flash.html',450,390);break;case 'SpecialChar':B=new FCKDialogCommand('SpecialChar',FCKLang.DlgSpecialCharTitle,'dialog/fck_specialchar.html',400,290);break;case 'Smiley':B=new FCKDialogCommand('Smiley',FCKLang.DlgSmileyTitle,'dialog/fck_smiley.html',FCKConfig.SmileyWindowWidth,FCKConfig.SmileyWindowHeight);break;case 'Table':B=new FCKDialogCommand('Table',FCKLang.DlgTableTitle,'dialog/fck_table.html',480,250);break;case 'TableProp':B=new FCKDialogCommand('Table',FCKLang.DlgTableTitle,'dialog/fck_table.html?Parent',480,250);break;case 'TableCellProp':B=new FCKDialogCommand('TableCell',FCKLang.DlgCellTitle,'dialog/fck_tablecell.html',550,240);break;case 'Style':B=new FCKStyleCommand();break;case 'FontName':B=new FCKFontNameCommand();break;case 'FontSize':B=new FCKFontSizeCommand();break;case 'FontFormat':B=new FCKFormatBlockCommand();break;case 'Source':B=new FCKSourceCommand();break;case 'Preview':B=new FCKPreviewCommand();break;case 'Save':B=new FCKSaveCommand();break;case 'NewPage':B=new FCKNewPageCommand();break;case 'PageBreak':B=new FCKPageBreakCommand();break;case 'Rule':B=new FCKRuleCommand();break;case 'TextColor':B=new FCKTextColorCommand('ForeColor');break;case 'BGColor':B=new FCKTextColorCommand('BackColor');break;case 'Paste':B=new FCKPasteCommand();break;case 'PasteText':B=new FCKPastePlainTextCommand();break;case 'PasteWord':B=new FCKPasteWordCommand();break;case 'JustifyLeft':B=new FCKJustifyCommand('left');break;case 'JustifyCenter':B=new FCKJustifyCommand('center');break;case 'JustifyRight':B=new FCKJustifyCommand('right');break;case 'JustifyFull':B=new FCKJustifyCommand('justify');break;case 'Indent':B=new FCKIndentCommand('indent',FCKConfig.IndentLength);break;case 'Outdent':B=new FCKIndentCommand('outdent',FCKConfig.IndentLength*-1);break;case 'Blockquote':B=new FCKBlockQuoteCommand();break;case 'TableInsertRowAfter':B=new FCKTableCommand('TableInsertRowAfter');break;case 'TableInsertRowBefore':B=new FCKTableCommand('TableInsertRowBefore');break;case 'TableDeleteRows':B=new FCKTableCommand('TableDeleteRows');break;case 'TableInsertColumnAfter':B=new FCKTableCommand('TableInsertColumnAfter');break;case 'TableInsertColumnBefore':B=new FCKTableCommand('TableInsertColumnBefore');break;case 'TableDeleteColumns':B=new FCKTableCommand('TableDeleteColumns');break;case 'TableInsertCellAfter':B=new FCKTableCommand('TableInsertCellAfter');break;case 'TableInsertCellBefore':B=new FCKTableCommand('TableInsertCellBefore');break;case 'TableDeleteCells':B=new FCKTableCommand('TableDeleteCells');break;case 'TableMergeCells':B=new FCKTableCommand('TableMergeCells');break;case 'TableMergeRight':B=new FCKTableCommand('TableMergeRight');break;case 'TableMergeDown':B=new FCKTableCommand('TableMergeDown');break;case 'TableHorizontalSplitCell':B=new FCKTableCommand('TableHorizontalSplitCell');break;case 'TableVerticalSplitCell':B=new FCKTableCommand('TableVerticalSplitCell');break;case 'TableDelete':B=new FCKTableCommand('TableDelete');break;case 'Form':B=new FCKDialogCommand('Form',FCKLang.Form,'dialog/fck_form.html',380,210);break;case 'Checkbox':B=new FCKDialogCommand('Checkbox',FCKLang.Checkbox,'dialog/fck_checkbox.html',380,200);break;case 'Radio':B=new FCKDialogCommand('Radio',FCKLang.RadioButton,'dialog/fck_radiobutton.html',380,200);break;case 'TextField':B=new FCKDialogCommand('TextField',FCKLang.TextField,'dialog/fck_textfield.html',380,210);break;case 'Textarea':B=new FCKDialogCommand('Textarea',FCKLang.Textarea,'dialog/fck_textarea.html',380,210);break;case 'HiddenField':B=new FCKDialogCommand('HiddenField',FCKLang.HiddenField,'dialog/fck_hiddenfield.html',380,190);break;case 'Button':B=new FCKDialogCommand('Button',FCKLang.Button,'dialog/fck_button.html',380,210);break;case 'Select':B=new FCKDialogCommand('Select',FCKLang.SelectionField,'dialog/fck_select.html',400,340);break;case 'ImageButton':B=new FCKDialogCommand('ImageButton',FCKLang.ImageButton,'dialog/fck_image.html?ImageButton',450,390);break;case 'SpellCheck':B=new FCKSpellCheckCommand();break;case 'FitWindow':B=new FCKFitWindow();break;case 'Undo':B=new FCKUndoCommand();break;case 'Redo':B=new FCKRedoCommand();break;case 'Copy':B=new FCKCutCopyCommand(false);break;case 'Cut':B=new FCKCutCopyCommand(true);break;case 'SelectAll':B=new FCKSelectAllCommand();break;case 'InsertOrderedList':B=new FCKListCommand('insertorderedlist','ol');break;case 'InsertUnorderedList':B=new FCKListCommand('insertunorderedlist','ul');break;case 'ShowBlocks':B=new FCKShowBlockCommand('ShowBlocks',FCKConfig.StartupShowBlocks?1:0);break;case 'Undefined':B=new FCKUndefinedCommand();break;default:if (FCKRegexLib.NamedCommands.test(A)) B=new FCKNamedCommand(A);else{alert(FCKLang.UnknownCommand.replace(/%1/g,A));return null;}};FCKCommands.LoadedCommands[A]=B;return B;};FCKCommands.GetFullPageState=function(){return FCKConfig.FullPage?0:-1;};FCKCommands.GetBooleanState=function(A){return A?-1:0;};
+var FCKPanel=function(A){this.IsRTL=(FCKLang.Dir=='rtl');this.IsContextMenu=false;this._LockCounter=0;this._Window=A||window;var B;if (FCKBrowserInfo.IsIE){this._Popup=this._Window.createPopup();var C=this._Window.document;if (FCK_IS_CUSTOM_DOMAIN&&!FCKBrowserInfo.IsIE7){C.domain=FCK_ORIGINAL_DOMAIN;document.domain=FCK_ORIGINAL_DOMAIN;};B=this.Document=this._Popup.document;if (FCK_IS_CUSTOM_DOMAIN){B.domain=FCK_RUNTIME_DOMAIN;C.domain=FCK_RUNTIME_DOMAIN;document.domain=FCK_RUNTIME_DOMAIN;};FCK.IECleanup.AddItem(this,FCKPanel_Cleanup);}else{var D=this._IFrame=this._Window.document.createElement('iframe');FCKTools.ResetStyles(D);D.src='javascript:void(0)';D.allowTransparency=true;D.frameBorder='0';D.scrolling='no';D.style.width=D.style.height='0px';FCKDomTools.SetElementStyles(D,{position:'absolute',zIndex:FCKConfig.FloatingPanelsZIndex});this._Window.document.body.appendChild(D);var E=D.contentWindow;B=this.Document=E.document;var F='';if (FCKBrowserInfo.IsSafari) F='<base href="'+window.document.location+'">';B.open();B.write('<html><head>'+F+'<\/head><body style="margin:0px;padding:0px;"><\/body><\/html>');B.close();if(FCKBrowserInfo.IsAIR) FCKAdobeAIR.Panel_Contructor(B,window.document.location);FCKTools.AddEventListenerEx(E,'focus',FCKPanel_Window_OnFocus,this);FCKTools.AddEventListenerEx(E,'blur',FCKPanel_Window_OnBlur,this);};B.dir=FCKLang.Dir;FCKTools.AddEventListener(B,'contextmenu',FCKTools.CancelEvent);this.MainNode=B.body.appendChild(B.createElement('DIV'));this.MainNode.style.cssFloat=this.IsRTL?'right':'left';};FCKPanel.prototype.AppendStyleSheet=function(A){FCKTools.AppendStyleSheet(this.Document,A);};FCKPanel.prototype.Preload=function(x,y,A){if (this._Popup) this._Popup.show(x,y,0,0,A);};FCKPanel.prototype.Show=function(x,y,A,B,C){var D;var E=this.MainNode;if (this._Popup){this._Popup.show(x,y,0,0,A);FCKDomTools.SetElementStyles(E,{B:B?B+'px':'',C:C?C+'px':''});D=E.offsetWidth;if (this.IsRTL){if (this.IsContextMenu) x=x-D+1;else if (A) x=(x*-1)+A.offsetWidth-D;};this._Popup.show(x,y,D,E.offsetHeight,A);if (this.OnHide){if (this._Timer) CheckPopupOnHide.call(this,true);this._Timer=FCKTools.SetInterval(CheckPopupOnHide,100,this);}}else{if (typeof(FCK.ToolbarSet.CurrentInstance.FocusManager)!='undefined') FCK.ToolbarSet.CurrentInstance.FocusManager.Lock();if (this.ParentPanel){this.ParentPanel.Lock();FCKPanel_Window_OnBlur(null,this.ParentPanel);};if (FCKBrowserInfo.IsGecko&&FCKBrowserInfo.IsMac){this._IFrame.scrolling='';FCKTools.RunFunction(function(){ this._IFrame.scrolling='no';},this);};if (FCK.ToolbarSet.CurrentInstance.GetInstanceObject('FCKPanel')._OpenedPanel&&FCK.ToolbarSet.CurrentInstance.GetInstanceObject('FCKPanel')._OpenedPanel!=this) FCK.ToolbarSet.CurrentInstance.GetInstanceObject('FCKPanel')._OpenedPanel.Hide(false,true);FCKDomTools.SetElementStyles(E,{B:B?B+'px':'',C:C?C+'px':''});D=E.offsetWidth;if (!B)	this._IFrame.width=1;if (!C)	this._IFrame.height=1;D=E.offsetWidth||E.firstChild.offsetWidth;var F=FCKTools.GetDocumentPosition(this._Window,A.nodeType==9?(FCKTools.IsStrictMode(A)?A.documentElement:A.body):A);var G=FCKDomTools.GetPositionedAncestor(this._IFrame.parentNode);if (G){var H=FCKTools.GetDocumentPosition(FCKTools.GetElementWindow(G),G);F.x-=H.x;F.y-=H.y;};if (this.IsRTL&&!this.IsContextMenu) x=(x*-1);x+=F.x;y+=F.y;if (this.IsRTL){if (this.IsContextMenu) x=x-D+1;else if (A) x=x+A.offsetWidth-D;}else{var I=FCKTools.GetViewPaneSize(this._Window);var J=FCKTools.GetScrollPosition(this._Window);var K=I.Height+J.Y;var L=I.Width+J.X;if ((x+D)>L) x-=x+D-L;if ((y+E.offsetHeight)>K) y-=y+E.offsetHeight-K;};FCKDomTools.SetElementStyles(this._IFrame,{left:x+'px',top:y+'px'});this._IFrame.contentWindow.focus();this._IsOpened=true;var M=this;this._resizeTimer=setTimeout(function(){var N=E.offsetWidth||E.firstChild.offsetWidth;var O=E.offsetHeight;M._IFrame.style.width=N+'px';M._IFrame.style.height=O+'px';},0);FCK.ToolbarSet.CurrentInstance.GetInstanceObject('FCKPanel')._OpenedPanel=this;};FCKTools.RunFunction(this.OnShow,this);};FCKPanel.prototype.Hide=function(A,B){if (this._Popup) this._Popup.hide();else{if (!this._IsOpened||this._LockCounter>0) return;if (typeof(FCKFocusManager)!='undefined'&&!B) FCKFocusManager.Unlock();this._IFrame.style.width=this._IFrame.style.height='0px';this._IsOpened=false;if (this._resizeTimer){clearTimeout(this._resizeTimer);this._resizeTimer=null;};if (this.ParentPanel) this.ParentPanel.Unlock();if (!A) FCKTools.RunFunction(this.OnHide,this);}};FCKPanel.prototype.CheckIsOpened=function(){if (this._Popup) return this._Popup.isOpen;else return this._IsOpened;};FCKPanel.prototype.CreateChildPanel=function(){var A=this._Popup?FCKTools.GetDocumentWindow(this.Document):this._Window;var B=new FCKPanel(A);B.ParentPanel=this;return B;};FCKPanel.prototype.Lock=function(){this._LockCounter++;};FCKPanel.prototype.Unlock=function(){if (--this._LockCounter==0&&!this.HasFocus) this.Hide();};function FCKPanel_Window_OnFocus(e,A){A.HasFocus=true;};function FCKPanel_Window_OnBlur(e,A){A.HasFocus=false;if (A._LockCounter==0) FCKTools.RunFunction(A.Hide,A);};function CheckPopupOnHide(A){if (A||!this._Popup.isOpen){window.clearInterval(this._Timer);this._Timer=null;FCKTools.RunFunction(this.OnHide,this);}};function FCKPanel_Cleanup(){this._Popup=null;this._Window=null;this.Document=null;this.MainNode=null;};
+var FCKIcon=function(A){var B=A?typeof(A):'undefined';switch (B){case 'number':this.Path=FCKConfig.SkinPath+'fck_strip.gif';this.Size=16;this.Position=A;break;case 'undefined':this.Path=FCK_SPACER_PATH;break;case 'string':this.Path=A;break;default:this.Path=A[0];this.Size=A[1];this.Position=A[2];}};FCKIcon.prototype.CreateIconElement=function(A){var B,eIconImage;if (this.Position){var C='-'+((this.Position-1)*this.Size)+'px';if (FCKBrowserInfo.IsIE){B=A.createElement('DIV');eIconImage=B.appendChild(A.createElement('IMG'));eIconImage.src=this.Path;eIconImage.style.top=C;}else{B=A.createElement('IMG');B.src=FCK_SPACER_PATH;B.style.backgroundPosition='0px '+C;B.style.backgroundImage='url("'+this.Path+'")';}}else{if (FCKBrowserInfo.IsIE){B=A.createElement('DIV');eIconImage=B.appendChild(A.createElement('IMG'));eIconImage.src=this.Path?this.Path:FCK_SPACER_PATH;}else{B=A.createElement('IMG');B.src=this.Path?this.Path:FCK_SPACER_PATH;}};B.className='TB_Button_Image';return B;};
+var FCKToolbarButtonUI=function(A,B,C,D,E,F){this.Name=A;this.Label=B||A;this.Tooltip=C||this.Label;this.Style=E||0;this.State=F||0;this.Icon=new FCKIcon(D);if (FCK.IECleanup) FCK.IECleanup.AddItem(this,FCKToolbarButtonUI_Cleanup);};FCKToolbarButtonUI.prototype._CreatePaddingElement=function(A){var B=A.createElement('IMG');B.className='TB_Button_Padding';B.src=FCK_SPACER_PATH;return B;};FCKToolbarButtonUI.prototype.Create=function(A){var B=FCKTools.GetElementDocument(A);var C=this.MainElement=B.createElement('DIV');C.title=this.Tooltip;if (FCKBrowserInfo.IsGecko) C.onmousedown=FCKTools.CancelEvent;FCKTools.AddEventListenerEx(C,'mouseover',FCKToolbarButtonUI_OnMouseOver,this);FCKTools.AddEventListenerEx(C,'mouseout',FCKToolbarButtonUI_OnMouseOut,this);FCKTools.AddEventListenerEx(C,'click',FCKToolbarButtonUI_OnClick,this);this.ChangeState(this.State,true);if (this.Style==0&&!this.ShowArrow){C.appendChild(this.Icon.CreateIconElement(B));}else{var D=C.appendChild(B.createElement('TABLE'));D.cellPadding=0;D.cellSpacing=0;var E=D.insertRow(-1);var F=E.insertCell(-1);if (this.Style==0||this.Style==2) F.appendChild(this.Icon.CreateIconElement(B));else F.appendChild(this._CreatePaddingElement(B));if (this.Style==1||this.Style==2){F=E.insertCell(-1);F.className='TB_Button_Text';F.noWrap=true;F.appendChild(B.createTextNode(this.Label));};if (this.ShowArrow){if (this.Style!=0){E.insertCell(-1).appendChild(this._CreatePaddingElement(B));};F=E.insertCell(-1);var G=F.appendChild(B.createElement('IMG'));G.src=FCKConfig.SkinPath+'images/toolbar.buttonarrow.gif';G.width=5;G.height=3;};F=E.insertCell(-1);F.appendChild(this._CreatePaddingElement(B));};A.appendChild(C);};FCKToolbarButtonUI.prototype.ChangeState=function(A,B){if (!B&&this.State==A) return;var e=this.MainElement;if (!e) return;switch (parseInt(A,10)){case 0:e.className='TB_Button_Off';break;case 1:e.className='TB_Button_On';break;case -1:e.className='TB_Button_Disabled';break;};this.State=A;};function FCKToolbarButtonUI_OnMouseOver(A,B){if (B.State==0) this.className='TB_Button_Off_Over';else if (B.State==1) this.className='TB_Button_On_Over';};function FCKToolbarButtonUI_OnMouseOut(A,B){if (B.State==0) this.className='TB_Button_Off';else if (B.State==1) this.className='TB_Button_On';};function FCKToolbarButtonUI_OnClick(A,B){if (B.OnClick&&B.State!=-1) B.OnClick(B);};function FCKToolbarButtonUI_Cleanup(){this.MainElement=null;};
+var FCKToolbarButton=function(A,B,C,D,E,F,G){this.CommandName=A;this.Label=B;this.Tooltip=C;this.Style=D;this.SourceView=E?true:false;this.ContextSensitive=F?true:false;if (G==null) this.IconPath=FCKConfig.SkinPath+'toolbar/'+A.toLowerCase()+'.gif';else if (typeof(G)=='number') this.IconPath=[FCKConfig.SkinPath+'fck_strip.gif',16,G];else this.IconPath=G;};FCKToolbarButton.prototype.Create=function(A){this._UIButton=new FCKToolbarButtonUI(this.CommandName,this.Label,this.Tooltip,this.IconPath,this.Style);this._UIButton.OnClick=this.Click;this._UIButton._ToolbarButton=this;this._UIButton.Create(A);};FCKToolbarButton.prototype.RefreshState=function(){var A=this._UIButton;if (!A) return;var B=FCK.ToolbarSet.CurrentInstance.Commands.GetCommand(this.CommandName).GetState();if (B==A.State) return;A.ChangeState(B);};FCKToolbarButton.prototype.Click=function(){var A=this._ToolbarButton||this;FCK.ToolbarSet.CurrentInstance.Commands.GetCommand(A.CommandName).Execute();};FCKToolbarButton.prototype.Enable=function(){this.RefreshState();};FCKToolbarButton.prototype.Disable=function(){this._UIButton.ChangeState(-1);};
+var FCKSpecialCombo=function(A,B,C,D,E){this.FieldWidth=B||100;this.PanelWidth=C||150;this.PanelMaxHeight=D||150;this.Label='&nbsp;';this.Caption=A;this.Tooltip=A;this.Style=2;this.Enabled=true;this.Items={};this._Panel=new FCKPanel(E||window);this._Panel.AppendStyleSheet(FCKConfig.SkinEditorCSS);this._PanelBox=this._Panel.MainNode.appendChild(this._Panel.Document.createElement('DIV'));this._PanelBox.className='SC_Panel';this._PanelBox.style.width=this.PanelWidth+'px';this._PanelBox.innerHTML='<table cellpadding="0" cellspacing="0" width="100%" style="TABLE-LAYOUT: fixed"><tr><td nowrap></td></tr></table>';this._ItemsHolderEl=this._PanelBox.getElementsByTagName('TD')[0];if (FCK.IECleanup) FCK.IECleanup.AddItem(this,FCKSpecialCombo_Cleanup);};function FCKSpecialCombo_ItemOnMouseOver(){this.className+=' SC_ItemOver';};function FCKSpecialCombo_ItemOnMouseOut(){this.className=this.originalClass;};function FCKSpecialCombo_ItemOnClick(A,B,C){this.className=this.originalClass;B._Panel.Hide();B.SetLabel(this.FCKItemLabel);if (typeof(B.OnSelect)=='function') B.OnSelect(C,this);};FCKSpecialCombo.prototype.ClearItems=function (){if (this.Items) this.Items={};var A=this._ItemsHolderEl;while (A.firstChild) A.removeChild(A.firstChild);};FCKSpecialCombo.prototype.AddItem=function(A,B,C,D){var E=this._ItemsHolderEl.appendChild(this._Panel.Document.createElement('DIV'));E.className=E.originalClass='SC_Item';E.innerHTML=B;E.FCKItemLabel=C||A;E.Selected=false;if (FCKBrowserInfo.IsIE) E.style.width='100%';if (D) E.style.backgroundColor=D;FCKTools.AddEventListenerEx(E,'mouseover',FCKSpecialCombo_ItemOnMouseOver);FCKTools.AddEventListenerEx(E,'mouseout',FCKSpecialCombo_ItemOnMouseOut);FCKTools.AddEventListenerEx(E,'click',FCKSpecialCombo_ItemOnClick,[this,A]);this.Items[A.toString().toLowerCase()]=E;return E;};FCKSpecialCombo.prototype.SelectItem=function(A){if (typeof A=='string') A=this.Items[A.toString().toLowerCase()];if (A){A.className=A.originalClass='SC_ItemSelected';A.Selected=true;}};FCKSpecialCombo.prototype.SelectItemByLabel=function(A,B){for (var C in this.Items){var D=this.Items[C];if (D.FCKItemLabel==A){D.className=D.originalClass='SC_ItemSelected';D.Selected=true;if (B) this.SetLabel(A);}}};FCKSpecialCombo.prototype.DeselectAll=function(A){for (var i in this.Items){if (!this.Items[i]) continue;this.Items[i].className=this.Items[i].originalClass='SC_Item';this.Items[i].Selected=false;};if (A) this.SetLabel('');};FCKSpecialCombo.prototype.SetLabelById=function(A){A=A?A.toString().toLowerCase():'';var B=this.Items[A];this.SetLabel(B?B.FCKItemLabel:'');};FCKSpecialCombo.prototype.SetLabel=function(A){A=(!A||A.length==0)?'&nbsp;':A;if (A==this.Label) return;this.Label=A;var B=this._LabelEl;if (B){B.innerHTML=A;FCKTools.DisableSelection(B);}};FCKSpecialCombo.prototype.SetEnabled=function(A){this.Enabled=A;if (this._OuterTable) this._OuterTable.className=A?'':'SC_FieldDisabled';};FCKSpecialCombo.prototype.Create=function(A){var B=FCKTools.GetElementDocument(A);var C=this._OuterTable=A.appendChild(B.createElement('TABLE'));C.cellPadding=0;C.cellSpacing=0;C.insertRow(-1);var D;var E;switch (this.Style){case 0:D='TB_ButtonType_Icon';E=false;break;case 1:D='TB_ButtonType_Text';E=false;break;case 2:E=true;break;};if (this.Caption&&this.Caption.length>0&&E){var F=C.rows[0].insertCell(-1);F.innerHTML=this.Caption;F.className='SC_FieldCaption';};var G=FCKTools.AppendElement(C.rows[0].insertCell(-1),'div');if (E){G.className='SC_Field';G.style.width=this.FieldWidth+'px';G.innerHTML='<table width="100%" cellpadding="0" cellspacing="0" style="TABLE-LAYOUT: fixed;"><tbody><tr><td class="SC_FieldLabel"><label>&nbsp;</label></td><td class="SC_FieldButton">&nbsp;</td></tr></tbody></table>';this._LabelEl=G.getElementsByTagName('label')[0];this._LabelEl.innerHTML=this.Label;}else{G.className='TB_Button_Off';G.innerHTML='<table title="'+this.Tooltip+'" class="'+D+'" cellspacing="0" cellpadding="0" border="0"><tr><td><img class="TB_Button_Padding" src="'+FCK_SPACER_PATH+'" /></td><td class="TB_Text">'+this.Caption+'</td><td><img class="TB_Button_Padding" src="'+FCK_SPACER_PATH+'" /></td><td class="TB_ButtonArrow"><img src="'+FCKConfig.SkinPath+'images/toolbar.buttonarrow.gif" width="5" height="3"></td><td><img class="TB_Button_Padding" src="'+FCK_SPACER_PATH+'" /></td></tr></table>';};FCKTools.AddEventListenerEx(G,'mouseover',FCKSpecialCombo_OnMouseOver,this);FCKTools.AddEventListenerEx(G,'mouseout',FCKSpecialCombo_OnMouseOut,this);FCKTools.AddEventListenerEx(G,'click',FCKSpecialCombo_OnClick,this);FCKTools.DisableSelection(this._Panel.Document.body);};function FCKSpecialCombo_Cleanup(){this._LabelEl=null;this._OuterTable=null;this._ItemsHolderEl=null;this._PanelBox=null;if (this.Items){for (var A in this.Items) this.Items[A]=null;}};function FCKSpecialCombo_OnMouseOver(A,B){if (B.Enabled){switch (B.Style){case 0:this.className='TB_Button_On_Over';break;case 1:this.className='TB_Button_On_Over';break;case 2:this.className='SC_Field SC_FieldOver';break;}}};function FCKSpecialCombo_OnMouseOut(A,B){switch (B.Style){case 0:this.className='TB_Button_Off';break;case 1:this.className='TB_Button_Off';break;case 2:this.className='SC_Field';break;}};function FCKSpecialCombo_OnClick(e,A){if (A.Enabled){var B=A._Panel;var C=A._PanelBox;var D=A._ItemsHolderEl;var E=A.PanelMaxHeight;if (A.OnBeforeClick) A.OnBeforeClick(A);if (FCKBrowserInfo.IsIE) B.Preload(0,this.offsetHeight,this);if (D.offsetHeight>E) C.style.height=E+'px';else C.style.height='';B.Show(0,this.offsetHeight,this);}};
+var FCKToolbarSpecialCombo=function(){this.SourceView=false;this.ContextSensitive=true;this.FieldWidth=null;this.PanelWidth=null;this.PanelMaxHeight=null;};FCKToolbarSpecialCombo.prototype.DefaultLabel='';function FCKToolbarSpecialCombo_OnSelect(A,B){FCK.ToolbarSet.CurrentInstance.Commands.GetCommand(this.CommandName).Execute(A,B);};FCKToolbarSpecialCombo.prototype.Create=function(A){this._Combo=new FCKSpecialCombo(this.GetLabel(),this.FieldWidth,this.PanelWidth,this.PanelMaxHeight,FCKBrowserInfo.IsIE?window:FCKTools.GetElementWindow(A).parent);this._Combo.Tooltip=this.Tooltip;this._Combo.Style=this.Style;this.CreateItems(this._Combo);this._Combo.Create(A);this._Combo.CommandName=this.CommandName;this._Combo.OnSelect=FCKToolbarSpecialCombo_OnSelect;};function FCKToolbarSpecialCombo_RefreshActiveItems(A,B){A.DeselectAll();A.SelectItem(B);A.SetLabelById(B);};FCKToolbarSpecialCombo.prototype.RefreshState=function(){var A;var B=FCK.ToolbarSet.CurrentInstance.Commands.GetCommand(this.CommandName).GetState();if (B!=-1){A=1;if (this.RefreshActiveItems) this.RefreshActiveItems(this._Combo,B);else{if (this._LastValue!==B){this._LastValue=B;if (!B||B.length==0){this._Combo.DeselectAll();this._Combo.SetLabel(this.DefaultLabel);}else FCKToolbarSpecialCombo_RefreshActiveItems(this._Combo,B);}}}else A=-1;if (A==this.State) return;if (A==-1){this._Combo.DeselectAll();this._Combo.SetLabel('');};this.State=A;this._Combo.SetEnabled(A!=-1);};FCKToolbarSpecialCombo.prototype.Enable=function(){this.RefreshState();};FCKToolbarSpecialCombo.prototype.Disable=function(){this.State=-1;this._Combo.DeselectAll();this._Combo.SetLabel('');this._Combo.SetEnabled(false);};
+var FCKToolbarStyleCombo=function(A,B){if (A===false) return;this.CommandName='Style';this.Label=this.GetLabel();this.Tooltip=A?A:this.Label;this.Style=B?B:2;this.DefaultLabel=FCKConfig.DefaultStyleLabel||'';};FCKToolbarStyleCombo.prototype=new FCKToolbarSpecialCombo;FCKToolbarStyleCombo.prototype.GetLabel=function(){return FCKLang.Style;};FCKToolbarStyleCombo.prototype.GetStyles=function(){var A={};var B=FCK.ToolbarSet.CurrentInstance.Styles.GetStyles();for (var C in B){var D=B[C];if (!D.IsCore) A[C]=D;};return A;};FCKToolbarStyleCombo.prototype.CreateItems=function(A){var B=A._Panel.Document;FCKTools.AppendStyleSheet(B,FCKConfig.ToolbarComboPreviewCSS);FCKTools.AppendStyleString(B,FCKConfig.EditorAreaStyles);B.body.className+=' ForceBaseFont';FCKConfig.ApplyBodyAttributes(B.body);var C=this.GetStyles();for (var D in C){var E=C[D];var F=E.GetType()==2?D:FCKToolbarStyleCombo_BuildPreview(E,E.Label||D);var G=A.AddItem(D,F);G.Style=E;};A.OnBeforeClick=this.StyleCombo_OnBeforeClick;};FCKToolbarStyleCombo.prototype.RefreshActiveItems=function(A){var B=FCK.ToolbarSet.CurrentInstance.Selection.GetBoundaryParentElement(true);if (B){var C=new FCKElementPath(B);var D=C.Elements;for (var e=0;e<D.length;e++){for (var i in A.Items){var E=A.Items[i];var F=E.Style;if (F.CheckElementRemovable(D[e],true)){A.SetLabel(F.Label||F.Name);return;}}}};A.SetLabel(this.DefaultLabel);};FCKToolbarStyleCombo.prototype.StyleCombo_OnBeforeClick=function(A){A.DeselectAll();var B;var C;var D;var E=FCK.ToolbarSet.CurrentInstance.Selection;if (E.GetType()=='Control'){B=E.GetSelectedElement();D=B.nodeName.toLowerCase();}else{B=E.GetBoundaryParentElement(true);C=new FCKElementPath(B);};for (var i in A.Items){var F=A.Items[i];var G=F.Style;if ((D&&G.Element==D)||(!D&&G.GetType()!=2)){F.style.display='';if ((C&&G.CheckActive(C))||(!C&&G.CheckElementRemovable(B,true))) A.SelectItem(G.Name);}else F.style.display='none';}};function FCKToolbarStyleCombo_BuildPreview(A,B){var C=A.GetType();var D=[];if (C==0) D.push('<div class="BaseFont">');var E=A.Element;if (E=='bdo') E='span';D=['<',E];var F=A._StyleDesc.Attributes;if (F){for (var G in F){D.push(' ',G,'="',A.GetFinalAttributeValue(G),'"');}};if (A._GetStyleText().length>0) D.push(' style="',A.GetFinalStyleValue(),'"');D.push('>',B,'</',E,'>');if (C==0) D.push('</div>');return D.join('');};
+var FCKToolbarFontFormatCombo=function(A,B){if (A===false) return;this.CommandName='FontFormat';this.Label=this.GetLabel();this.Tooltip=A?A:this.Label;this.Style=B?B:2;this.NormalLabel='Normal';this.PanelWidth=190;this.DefaultLabel=FCKConfig.DefaultFontFormatLabel||'';};FCKToolbarFontFormatCombo.prototype=new FCKToolbarStyleCombo(false);FCKToolbarFontFormatCombo.prototype.GetLabel=function(){return FCKLang.FontFormat;};FCKToolbarFontFormatCombo.prototype.GetStyles=function(){var A={};var B=FCKLang['FontFormats'].split(';');var C={p:B[0],pre:B[1],address:B[2],h1:B[3],h2:B[4],h3:B[5],h4:B[6],h5:B[7],h6:B[8],div:B[9]||(B[0]+' (DIV)')};var D=FCKConfig.FontFormats.split(';');for (var i=0;i<D.length;i++){var E=D[i];var F=FCKStyles.GetStyle('_FCK_'+E);if (F){F.Label=C[E];A['_FCK_'+E]=F;}else alert("The FCKConfig.CoreStyles['"+E+"'] setting was not found. Please check the fckconfig.js file");};return A;};FCKToolbarFontFormatCombo.prototype.RefreshActiveItems=function(A){var B=FCK.ToolbarSet.CurrentInstance.Selection.GetBoundaryParentElement(true);if (B){var C=new FCKElementPath(B);var D=C.Block;if (D){for (var i in A.Items){var E=A.Items[i];var F=E.Style;if (F.CheckElementRemovable(D)){A.SetLabel(F.Label);return;}}}};A.SetLabel(this.DefaultLabel);};FCKToolbarFontFormatCombo.prototype.StyleCombo_OnBeforeClick=function(A){A.DeselectAll();var B=FCK.ToolbarSet.CurrentInstance.Selection.GetBoundaryParentElement(true);if (B){var C=new FCKElementPath(B);var D=C.Block;for (var i in A.Items){var E=A.Items[i];var F=E.Style;if (F.CheckElementRemovable(D)){A.SelectItem(E);return;}}}};
+var FCKToolbarFontsCombo=function(A,B){this.CommandName='FontName';this.Label=this.GetLabel();this.Tooltip=A?A:this.Label;this.Style=B?B:2;this.DefaultLabel=FCKConfig.DefaultFontLabel||'';};FCKToolbarFontsCombo.prototype=new FCKToolbarFontFormatCombo(false);FCKToolbarFontsCombo.prototype.GetLabel=function(){return FCKLang.Font;};FCKToolbarFontsCombo.prototype.GetStyles=function(){var A=FCKStyles.GetStyle('_FCK_FontFace');if (!A){alert("The FCKConfig.CoreStyles['Size'] setting was not found. Please check the fckconfig.js file");return {};};var B={};var C=FCKConfig.FontNames.split(';');for (var i=0;i<C.length;i++){var D=C[i].split('/');var E=D[0];var F=D[1]||E;var G=FCKTools.CloneObject(A);G.SetVariable('Font',E);G.Label=F;B[F]=G;};return B;};FCKToolbarFontsCombo.prototype.RefreshActiveItems=FCKToolbarStyleCombo.prototype.RefreshActiveItems;FCKToolbarFontsCombo.prototype.StyleCombo_OnBeforeClick=function(A){A.DeselectAll();var B=FCKSelection.GetBoundaryParentElement(true);if (B){var C=new FCKElementPath(B);for (var i in A.Items){var D=A.Items[i];var E=D.Style;if (E.CheckActive(C)){A.SelectItem(D);return;}}}};
+var FCKToolbarFontSizeCombo=function(A,B){this.CommandName='FontSize';this.Label=this.GetLabel();this.Tooltip=A?A:this.Label;this.Style=B?B:2;this.DefaultLabel=FCKConfig.DefaultFontSizeLabel||'';this.FieldWidth=70;};FCKToolbarFontSizeCombo.prototype=new FCKToolbarFontFormatCombo(false);FCKToolbarFontSizeCombo.prototype.GetLabel=function(){return FCKLang.FontSize;};FCKToolbarFontSizeCombo.prototype.GetStyles=function(){var A=FCKStyles.GetStyle('_FCK_Size');if (!A){alert("The FCKConfig.CoreStyles['FontFace'] setting was not found. Please check the fckconfig.js file");return {};};var B={};var C=FCKConfig.FontSizes.split(';');for (var i=0;i<C.length;i++){var D=C[i].split('/');var E=D[0];var F=D[1]||E;var G=FCKTools.CloneObject(A);G.SetVariable('Size',E);G.Label=F;B[F]=G;};return B;};FCKToolbarFontSizeCombo.prototype.RefreshActiveItems=FCKToolbarStyleCombo.prototype.RefreshActiveItems;FCKToolbarFontSizeCombo.prototype.StyleCombo_OnBeforeClick=FCKToolbarFontsCombo.prototype.StyleCombo_OnBeforeClick;
+var FCKToolbarPanelButton=function(A,B,C,D,E){this.CommandName=A;var F;if (E==null) F=FCKConfig.SkinPath+'toolbar/'+A.toLowerCase()+'.gif';else if (typeof(E)=='number') F=[FCKConfig.SkinPath+'fck_strip.gif',16,E];var G=this._UIButton=new FCKToolbarButtonUI(A,B,C,F,D);G._FCKToolbarPanelButton=this;G.ShowArrow=true;G.OnClick=FCKToolbarPanelButton_OnButtonClick;};FCKToolbarPanelButton.prototype.TypeName='FCKToolbarPanelButton';FCKToolbarPanelButton.prototype.Create=function(A){A.className+='Menu';this._UIButton.Create(A);var B=FCK.ToolbarSet.CurrentInstance.Commands.GetCommand(this.CommandName)._Panel;this.RegisterPanel(B);};FCKToolbarPanelButton.prototype.RegisterPanel=function(A){if (A._FCKToolbarPanelButton) return;A._FCKToolbarPanelButton=this;var B=A.Document.body.appendChild(A.Document.createElement('div'));B.style.position='absolute';B.style.top='0px';var C=A._FCKToolbarPanelButtonLineDiv=B.appendChild(A.Document.createElement('IMG'));C.className='TB_ConnectionLine';C.style.position='absolute';C.src=FCK_SPACER_PATH;A.OnHide=FCKToolbarPanelButton_OnPanelHide;};function FCKToolbarPanelButton_OnButtonClick(A){var B=this._FCKToolbarPanelButton;var e=B._UIButton.MainElement;B._UIButton.ChangeState(1);var C=FCK.ToolbarSet.CurrentInstance.Commands.GetCommand(B.CommandName);var D=C._Panel;D._FCKToolbarPanelButtonLineDiv.style.width=(e.offsetWidth-2)+'px';C.Execute(0,e.offsetHeight-1,e);};function FCKToolbarPanelButton_OnPanelHide(){var A=this._FCKToolbarPanelButton;A._UIButton.ChangeState(0);};FCKToolbarPanelButton.prototype.RefreshState=FCKToolbarButton.prototype.RefreshState;FCKToolbarPanelButton.prototype.Enable=FCKToolbarButton.prototype.Enable;FCKToolbarPanelButton.prototype.Disable=FCKToolbarButton.prototype.Disable;
+var FCKToolbarItems={};FCKToolbarItems.LoadedItems={};FCKToolbarItems.RegisterItem=function(A,B){this.LoadedItems[A]=B;};FCKToolbarItems.GetItem=function(A){var B=FCKToolbarItems.LoadedItems[A];if (B) return B;switch (A){case 'Source':B=new FCKToolbarButton('Source',FCKLang.Source,null,2,true,true,1);break;case 'DocProps':B=new FCKToolbarButton('DocProps',FCKLang.DocProps,null,null,null,null,2);break;case 'Save':B=new FCKToolbarButton('Save',FCKLang.Save,null,null,true,null,3);break;case 'NewPage':B=new FCKToolbarButton('NewPage',FCKLang.NewPage,null,null,true,null,4);break;case 'Preview':B=new FCKToolbarButton('Preview',FCKLang.Preview,null,null,true,null,5);break;case 'Templates':B=new FCKToolbarButton('Templates',FCKLang.Templates,null,null,null,null,6);break;case 'About':B=new FCKToolbarButton('About',FCKLang.About,null,null,true,null,47);break;case 'Cut':B=new FCKToolbarButton('Cut',FCKLang.Cut,null,null,false,true,7);break;case 'Copy':B=new FCKToolbarButton('Copy',FCKLang.Copy,null,null,false,true,8);break;case 'Paste':B=new FCKToolbarButton('Paste',FCKLang.Paste,null,null,false,true,9);break;case 'PasteText':B=new FCKToolbarButton('PasteText',FCKLang.PasteText,null,null,false,true,10);break;case 'PasteWord':B=new FCKToolbarButton('PasteWord',FCKLang.PasteWord,null,null,false,true,11);break;case 'Print':B=new FCKToolbarButton('Print',FCKLang.Print,null,null,false,true,12);break;case 'SpellCheck':B=new FCKToolbarButton('SpellCheck',FCKLang.SpellCheck,null,null,null,null,13);break;case 'Undo':B=new FCKToolbarButton('Undo',FCKLang.Undo,null,null,false,true,14);break;case 'Redo':B=new FCKToolbarButton('Redo',FCKLang.Redo,null,null,false,true,15);break;case 'SelectAll':B=new FCKToolbarButton('SelectAll',FCKLang.SelectAll,null,null,true,null,18);break;case 'RemoveFormat':B=new FCKToolbarButton('RemoveFormat',FCKLang.RemoveFormat,null,null,false,true,19);break;case 'FitWindow':B=new FCKToolbarButton('FitWindow',FCKLang.FitWindow,null,null,true,true,66);break;case 'Bold':B=new FCKToolbarButton('Bold',FCKLang.Bold,null,null,false,true,20);break;case 'Italic':B=new FCKToolbarButton('Italic',FCKLang.Italic,null,null,false,true,21);break;case 'Underline':B=new FCKToolbarButton('Underline',FCKLang.Underline,null,null,false,true,22);break;case 'StrikeThrough':B=new FCKToolbarButton('StrikeThrough',FCKLang.StrikeThrough,null,null,false,true,23);break;case 'Subscript':B=new FCKToolbarButton('Subscript',FCKLang.Subscript,null,null,false,true,24);break;case 'Superscript':B=new FCKToolbarButton('Superscript',FCKLang.Superscript,null,null,false,true,25);break;case 'OrderedList':B=new FCKToolbarButton('InsertOrderedList',FCKLang.NumberedListLbl,FCKLang.NumberedList,null,false,true,26);break;case 'UnorderedList':B=new FCKToolbarButton('InsertUnorderedList',FCKLang.BulletedListLbl,FCKLang.BulletedList,null,false,true,27);break;case 'Outdent':B=new FCKToolbarButton('Outdent',FCKLang.DecreaseIndent,null,null,false,true,28);break;case 'Indent':B=new FCKToolbarButton('Indent',FCKLang.IncreaseIndent,null,null,false,true,29);break;case 'Blockquote':B=new FCKToolbarButton('Blockquote',FCKLang.Blockquote,null,null,false,true,73);break;case 'Link':B=new FCKToolbarButton('Link',FCKLang.InsertLinkLbl,FCKLang.InsertLink,null,false,true,34);break;case 'Unlink':B=new FCKToolbarButton('Unlink',FCKLang.RemoveLink,null,null,false,true,35);break;case 'Anchor':B=new FCKToolbarButton('Anchor',FCKLang.Anchor,null,null,null,null,36);break;case 'Image':B=new FCKToolbarButton('Image',FCKLang.InsertImageLbl,FCKLang.InsertImage,null,false,true,37);break;case 'Flash':B=new FCKToolbarButton('Flash',FCKLang.InsertFlashLbl,FCKLang.InsertFlash,null,false,true,38);break;case 'Table':B=new FCKToolbarButton('Table',FCKLang.InsertTableLbl,FCKLang.InsertTable,null,false,true,39);break;case 'SpecialChar':B=new FCKToolbarButton('SpecialChar',FCKLang.InsertSpecialCharLbl,FCKLang.InsertSpecialChar,null,false,true,42);break;case 'Smiley':B=new FCKToolbarButton('Smiley',FCKLang.InsertSmileyLbl,FCKLang.InsertSmiley,null,false,true,41);break;case 'PageBreak':B=new FCKToolbarButton('PageBreak',FCKLang.PageBreakLbl,FCKLang.PageBreak,null,false,true,43);break;case 'Rule':B=new FCKToolbarButton('Rule',FCKLang.InsertLineLbl,FCKLang.InsertLine,null,false,true,40);break;case 'JustifyLeft':B=new FCKToolbarButton('JustifyLeft',FCKLang.LeftJustify,null,null,false,true,30);break;case 'JustifyCenter':B=new FCKToolbarButton('JustifyCenter',FCKLang.CenterJustify,null,null,false,true,31);break;case 'JustifyRight':B=new FCKToolbarButton('JustifyRight',FCKLang.RightJustify,null,null,false,true,32);break;case 'JustifyFull':B=new FCKToolbarButton('JustifyFull',FCKLang.BlockJustify,null,null,false,true,33);break;case 'Style':B=new FCKToolbarStyleCombo();break;case 'FontName':B=new FCKToolbarFontsCombo();break;case 'FontSize':B=new FCKToolbarFontSizeCombo();break;case 'FontFormat':B=new FCKToolbarFontFormatCombo();break;case 'TextColor':B=new FCKToolbarPanelButton('TextColor',FCKLang.TextColor,null,null,45);break;case 'BGColor':B=new FCKToolbarPanelButton('BGColor',FCKLang.BGColor,null,null,46);break;case 'Find':B=new FCKToolbarButton('Find',FCKLang.Find,null,null,null,null,16);break;case 'Replace':B=new FCKToolbarButton('Replace',FCKLang.Replace,null,null,null,null,17);break;case 'Form':B=new FCKToolbarButton('Form',FCKLang.Form,null,null,null,null,48);break;case 'Checkbox':B=new FCKToolbarButton('Checkbox',FCKLang.Checkbox,null,null,null,null,49);break;case 'Radio':B=new FCKToolbarButton('Radio',FCKLang.RadioButton,null,null,null,null,50);break;case 'TextField':B=new FCKToolbarButton('TextField',FCKLang.TextField,null,null,null,null,51);break;case 'Textarea':B=new FCKToolbarButton('Textarea',FCKLang.Textarea,null,null,null,null,52);break;case 'HiddenField':B=new FCKToolbarButton('HiddenField',FCKLang.HiddenField,null,null,null,null,56);break;case 'Button':B=new FCKToolbarButton('Button',FCKLang.Button,null,null,null,null,54);break;case 'Select':B=new FCKToolbarButton('Select',FCKLang.SelectionField,null,null,null,null,53);break;case 'ImageButton':B=new FCKToolbarButton('ImageButton',FCKLang.ImageButton,null,null,null,null,55);break;case 'ShowBlocks':B=new FCKToolbarButton('ShowBlocks',FCKLang.ShowBlocks,null,null,null,true,72);break;default:alert(FCKLang.UnknownToolbarItem.replace(/%1/g,A));return null;};FCKToolbarItems.LoadedItems[A]=B;return B;};
+var FCKToolbar=function(){this.Items=[];};FCKToolbar.prototype.AddItem=function(A){return this.Items[this.Items.length]=A;};FCKToolbar.prototype.AddButton=function(A,B,C,D,E,F){if (typeof(D)=='number') D=[this.DefaultIconsStrip,this.DefaultIconSize,D];var G=new FCKToolbarButtonUI(A,B,C,D,E,F);G._FCKToolbar=this;G.OnClick=FCKToolbar_OnItemClick;return this.AddItem(G);};function FCKToolbar_OnItemClick(A){var B=A._FCKToolbar;if (B.OnItemClick) B.OnItemClick(B,A);};FCKToolbar.prototype.AddSeparator=function(){this.AddItem(new FCKToolbarSeparator());};FCKToolbar.prototype.Create=function(A){var B=FCKTools.GetElementDocument(A);var e=B.createElement('table');e.className='TB_Toolbar';e.style.styleFloat=e.style.cssFloat=(FCKLang.Dir=='ltr'?'left':'right');e.dir=FCKLang.Dir;e.cellPadding=0;e.cellSpacing=0;var C=e.insertRow(-1);var D;if (!this.HideStart){D=C.insertCell(-1);D.appendChild(B.createElement('div')).className='TB_Start';};for (var i=0;i<this.Items.length;i++){this.Items[i].Create(C.insertCell(-1));};if (!this.HideEnd){D=C.insertCell(-1);D.appendChild(B.createElement('div')).className='TB_End';};A.appendChild(e);};var FCKToolbarSeparator=function(){};FCKToolbarSeparator.prototype.Create=function(A){FCKTools.AppendElement(A,'div').className='TB_Separator';};
+var FCKToolbarBreak=function(){};FCKToolbarBreak.prototype.Create=function(A){var B=A.ownerDocument.createElement('div');B.style.clear=B.style.cssFloat=FCKLang.Dir=='rtl'?'right':'left';A.appendChild(B);};
+function FCKToolbarSet_Create(A){var B;var C=A||FCKConfig.ToolbarLocation;switch (C){case 'In':document.getElementById('xToolbarRow').style.display='';B=new FCKToolbarSet(document);break;case 'None':B=new FCKToolbarSet(document);break;default:FCK.Events.AttachEvent('OnBlur',FCK_OnBlur);FCK.Events.AttachEvent('OnFocus',FCK_OnFocus);var D;var E=C.match(/^Out:(.+)\((\w+)\)$/);if (E){if (FCKBrowserInfo.IsAIR) FCKAdobeAIR.ToolbarSet_GetOutElement(window,E);else D=eval('parent.'+E[1]).document.getElementById(E[2]);}else{E=C.match(/^Out:(\w+)$/);if (E) D=parent.document.getElementById(E[1]);};if (!D){alert('Invalid value for "ToolbarLocation"');return arguments.callee('In');};B=D.__FCKToolbarSet;if (B) break;var F=FCKTools.GetElementDocument(D).createElement('iframe');F.src='javascript:void(0)';F.frameBorder=0;F.width='100%';F.height='10';D.appendChild(F);F.unselectable='on';var G=F.contentWindow.document;var H='';if (FCKBrowserInfo.IsSafari) H='<base href="'+window.document.location+'">';G.open();G.write('<html><head>'+H+'<script type="text/javascript"> var adjust = function() { window.frameElement.height = document.body.scrollHeight ; }; window.onresize = window.onload = function(){var timer = null;var lastHeight = -1;var lastChange = 0;var poller = function(){var currentHeight = document.body.scrollHeight || 0;var currentTime = (new Date()).getTime();if (currentHeight != lastHeight){lastChange = currentTime;adjust();lastHeight = document.body.scrollHeight;}if (lastChange < currentTime - 1000) clearInterval(timer);};timer = setInterval(poller, 100);}</script></head><body style="overflow: hidden">'+document.getElementById('xToolbarSpace').innerHTML+'</body></html>');G.close();if(FCKBrowserInfo.IsAIR) FCKAdobeAIR.ToolbarSet_InitOutFrame(G);FCKTools.AddEventListener(G,'contextmenu',FCKTools.CancelEvent);FCKTools.AppendStyleSheet(G,FCKConfig.SkinEditorCSS);B=D.__FCKToolbarSet=new FCKToolbarSet(G);B._IFrame=F;if (FCK.IECleanup) FCK.IECleanup.AddItem(D,FCKToolbarSet_Target_Cleanup);};B.CurrentInstance=FCK;if (!B.ToolbarItems) B.ToolbarItems=FCKToolbarItems;FCK.AttachToOnSelectionChange(B.RefreshItemsState);return B;};function FCK_OnBlur(A){var B=A.ToolbarSet;if (B.CurrentInstance==A) B.Disable();};function FCK_OnFocus(A){var B=A.ToolbarSet;var C=A||FCK;B.CurrentInstance.FocusManager.RemoveWindow(B._IFrame.contentWindow);B.CurrentInstance=C;C.FocusManager.AddWindow(B._IFrame.contentWindow,true);B.Enable();};function FCKToolbarSet_Cleanup(){this._TargetElement=null;this._IFrame=null;};function FCKToolbarSet_Target_Cleanup(){this.__FCKToolbarSet=null;};var FCKToolbarSet=function(A){this._Document=A;this._TargetElement=A.getElementById('xToolbar');var B=A.getElementById('xExpandHandle');var C=A.getElementById('xCollapseHandle');B.title=FCKLang.ToolbarExpand;FCKTools.AddEventListener(B,'click',FCKToolbarSet_Expand_OnClick);C.title=FCKLang.ToolbarCollapse;FCKTools.AddEventListener(C,'click',FCKToolbarSet_Collapse_OnClick);if (!FCKConfig.ToolbarCanCollapse||FCKConfig.ToolbarStartExpanded) this.Expand();else this.Collapse();C.style.display=FCKConfig.ToolbarCanCollapse?'':'none';if (FCKConfig.ToolbarCanCollapse) C.style.display='';else A.getElementById('xTBLeftBorder').style.display='';this.Toolbars=[];this.IsLoaded=false;if (FCK.IECleanup) FCK.IECleanup.AddItem(this,FCKToolbarSet_Cleanup);};function FCKToolbarSet_Expand_OnClick(){FCK.ToolbarSet.Expand();};function FCKToolbarSet_Collapse_OnClick(){FCK.ToolbarSet.Collapse();};FCKToolbarSet.prototype.Expand=function(){this._ChangeVisibility(false);};FCKToolbarSet.prototype.Collapse=function(){this._ChangeVisibility(true);};FCKToolbarSet.prototype._ChangeVisibility=function(A){this._Document.getElementById('xCollapsed').style.display=A?'':'none';this._Document.getElementById('xExpanded').style.display=A?'none':'';if (FCKBrowserInfo.IsGecko){FCKTools.RunFunction(window.onresize);}};FCKToolbarSet.prototype.Load=function(A){this.Name=A;this.Items=[];this.ItemsWysiwygOnly=[];this.ItemsContextSensitive=[];this._TargetElement.innerHTML='';var B=FCKConfig.ToolbarSets[A];if (!B){alert(FCKLang.UnknownToolbarSet.replace(/%1/g,A));return;};this.Toolbars=[];for (var x=0;x<B.length;x++){var C=B[x];if (!C) continue;var D;if (typeof(C)=='string'){if (C=='/') D=new FCKToolbarBreak();}else{D=new FCKToolbar();for (var j=0;j<C.length;j++){var E=C[j];if (E=='-') D.AddSeparator();else{var F=FCKToolbarItems.GetItem(E);if (F){D.AddItem(F);this.Items.push(F);if (!F.SourceView) this.ItemsWysiwygOnly.push(F);if (F.ContextSensitive) this.ItemsContextSensitive.push(F);}}}};D.Create(this._TargetElement);this.Toolbars[this.Toolbars.length]=D;};FCKTools.DisableSelection(this._Document.getElementById('xCollapseHandle').parentNode);if (FCK.Status!=2) FCK.Events.AttachEvent('OnStatusChange',this.RefreshModeState);else this.RefreshModeState();this.IsLoaded=true;this.IsEnabled=true;FCKTools.RunFunction(this.OnLoad);};FCKToolbarSet.prototype.Enable=function(){if (this.IsEnabled) return;this.IsEnabled=true;var A=this.Items;for (var i=0;i<A.length;i++) A[i].RefreshState();};FCKToolbarSet.prototype.Disable=function(){if (!this.IsEnabled) return;this.IsEnabled=false;var A=this.Items;for (var i=0;i<A.length;i++) A[i].Disable();};FCKToolbarSet.prototype.RefreshModeState=function(A){if (FCK.Status!=2) return;var B=A?A.ToolbarSet:this;var C=B.ItemsWysiwygOnly;if (FCK.EditMode==0){for (var i=0;i<C.length;i++) C[i].Enable();B.RefreshItemsState(A);}else{B.RefreshItemsState(A);for (var j=0;j<C.length;j++) C[j].Disable();}};FCKToolbarSet.prototype.RefreshItemsState=function(A){var B=(A?A.ToolbarSet:this).ItemsContextSensitive;for (var i=0;i<B.length;i++) B[i].RefreshState();};
+var FCKDialog=(function(){var A;var B;var C;var D=window.parent;while (D.parent&&D.parent!=D){try{if (D.parent.document.domain!=document.domain) break;if (D.parent.document.getElementsByTagName('frameset').length>0) break;}catch (e){break;};D=D.parent;};var E=D.document;var F=function(){if (!B) B=FCKConfig.FloatingPanelsZIndex+999;return++B;};var G=function(){if (!C) return;var H=FCKTools.IsStrictMode(E)?E.documentElement:E.body;FCKDomTools.SetElementStyles(C,{'width':Math.max(H.scrollWidth,H.clientWidth,E.scrollWidth||0)-1+'px','height':Math.max(H.scrollHeight,H.clientHeight,E.scrollHeight||0)-1+'px'});};return {OpenDialog:function(dialogName,dialogTitle,dialogPage,width,height,customValue,parentWindow,resizable){if (!A) this.DisplayMainCover();var I={Title:dialogTitle,Page:dialogPage,Editor:window,CustomValue:customValue,TopWindow:D};FCK.ToolbarSet.CurrentInstance.Selection.Save();var J=FCKTools.GetViewPaneSize(D);var K={ 'X':0,'Y':0 };var L=FCKBrowserInfo.IsIE&&(!FCKBrowserInfo.IsIE7||!FCKTools.IsStrictMode(D.document));if (L) K=FCKTools.GetScrollPosition(D);var M=Math.max(K.Y+(J.Height-height-20)/2,0);var N=Math.max(K.X+(J.Width-width-20)/2,0);var O=E.createElement('iframe');FCKTools.ResetStyles(O);O.src=FCKConfig.BasePath+'fckdialog.html';O.frameBorder=0;O.allowTransparency=true;FCKDomTools.SetElementStyles(O,{'position':(L)?'absolute':'fixed','top':M+'px','left':N+'px','width':width+'px','height':height+'px','zIndex':F()});O._DialogArguments=I;E.body.appendChild(O);O._ParentDialog=A;A=O;},OnDialogClose:function(dialogWindow){var O=dialogWindow.frameElement;FCKDomTools.RemoveNode(O);if (O._ParentDialog){A=O._ParentDialog;O._ParentDialog.contentWindow.SetEnabled(true);}else{if (!FCKBrowserInfo.IsIE) FCK.Focus();this.HideMainCover();setTimeout(function(){ A=null;},0);FCK.ToolbarSet.CurrentInstance.Selection.Release();}},DisplayMainCover:function(){C=E.createElement('div');FCKTools.ResetStyles(C);FCKDomTools.SetElementStyles(C,{'position':'absolute','zIndex':F(),'top':'0px','left':'0px','backgroundColor':FCKConfig.BackgroundBlockerColor});FCKDomTools.SetOpacity(C,FCKConfig.BackgroundBlockerOpacity);if (FCKBrowserInfo.IsIE&&!FCKBrowserInfo.IsIE7){var Q=E.createElement('iframe');FCKTools.ResetStyles(Q);Q.hideFocus=true;Q.frameBorder=0;Q.src=FCKTools.GetVoidUrl();FCKDomTools.SetElementStyles(Q,{'width':'100%','height':'100%','position':'absolute','left':'0px','top':'0px','filter':'progid:DXImageTransform.Microsoft.Alpha(opacity=0)'});C.appendChild(Q);};FCKTools.AddEventListener(D,'resize',G);G();E.body.appendChild(C);FCKFocusManager.Lock();var R=FCK.ToolbarSet.CurrentInstance.GetInstanceObject('frameElement');R._fck_originalTabIndex=R.tabIndex;R.tabIndex=-1;},HideMainCover:function(){FCKDomTools.RemoveNode(C);FCKFocusManager.Unlock();var R=FCK.ToolbarSet.CurrentInstance.GetInstanceObject('frameElement');R.tabIndex=R._fck_originalTabIndex;FCKDomTools.ClearElementJSProperty(R,'_fck_originalTabIndex');},GetCover:function(){return C;}};})();
+var FCKMenuItem=function(A,B,C,D,E,F){this.Name=B;this.Label=C||B;this.IsDisabled=E;this.Icon=new FCKIcon(D);this.SubMenu=new FCKMenuBlockPanel();this.SubMenu.Parent=A;this.SubMenu.OnClick=FCKTools.CreateEventListener(FCKMenuItem_SubMenu_OnClick,this);this.CustomData=F;if (FCK.IECleanup) FCK.IECleanup.AddItem(this,FCKMenuItem_Cleanup);};FCKMenuItem.prototype.AddItem=function(A,B,C,D,E){this.HasSubMenu=true;return this.SubMenu.AddItem(A,B,C,D,E);};FCKMenuItem.prototype.AddSeparator=function(){this.SubMenu.AddSeparator();};FCKMenuItem.prototype.Create=function(A){var B=this.HasSubMenu;var C=FCKTools.GetElementDocument(A);var r=this.MainElement=A.insertRow(-1);r.className=this.IsDisabled?'MN_Item_Disabled':'MN_Item';if (!this.IsDisabled){FCKTools.AddEventListenerEx(r,'mouseover',FCKMenuItem_OnMouseOver,[this]);FCKTools.AddEventListenerEx(r,'click',FCKMenuItem_OnClick,[this]);if (!B) FCKTools.AddEventListenerEx(r,'mouseout',FCKMenuItem_OnMouseOut,[this]);};var D=r.insertCell(-1);D.className='MN_Icon';D.appendChild(this.Icon.CreateIconElement(C));D=r.insertCell(-1);D.className='MN_Label';D.noWrap=true;D.appendChild(C.createTextNode(this.Label));D=r.insertCell(-1);if (B){D.className='MN_Arrow';var E=D.appendChild(C.createElement('IMG'));E.src=FCK_IMAGES_PATH+'arrow_'+FCKLang.Dir+'.gif';E.width=4;E.height=7;this.SubMenu.Create();this.SubMenu.Panel.OnHide=FCKTools.CreateEventListener(FCKMenuItem_SubMenu_OnHide,this);}};FCKMenuItem.prototype.Activate=function(){this.MainElement.className='MN_Item_Over';if (this.HasSubMenu){this.SubMenu.Show(this.MainElement.offsetWidth+2,-2,this.MainElement);};FCKTools.RunFunction(this.OnActivate,this);};FCKMenuItem.prototype.Deactivate=function(){this.MainElement.className='MN_Item';if (this.HasSubMenu) this.SubMenu.Hide();};function FCKMenuItem_SubMenu_OnClick(A,B){FCKTools.RunFunction(B.OnClick,B,[A]);};function FCKMenuItem_SubMenu_OnHide(A){A.Deactivate();};function FCKMenuItem_OnClick(A,B){if (B.HasSubMenu) B.Activate();else{B.Deactivate();FCKTools.RunFunction(B.OnClick,B,[B]);}};function FCKMenuItem_OnMouseOver(A,B){B.Activate();};function FCKMenuItem_OnMouseOut(A,B){B.Deactivate();};function FCKMenuItem_Cleanup(){this.MainElement=null;};
+var FCKMenuBlock=function(){this._Items=[];};FCKMenuBlock.prototype.Count=function(){return this._Items.length;};FCKMenuBlock.prototype.AddItem=function(A,B,C,D,E){var F=new FCKMenuItem(this,A,B,C,D,E);F.OnClick=FCKTools.CreateEventListener(FCKMenuBlock_Item_OnClick,this);F.OnActivate=FCKTools.CreateEventListener(FCKMenuBlock_Item_OnActivate,this);this._Items.push(F);return F;};FCKMenuBlock.prototype.AddSeparator=function(){this._Items.push(new FCKMenuSeparator());};FCKMenuBlock.prototype.RemoveAllItems=function(){this._Items=[];var A=this._ItemsTable;if (A){while (A.rows.length>0) A.deleteRow(0);}};FCKMenuBlock.prototype.Create=function(A){if (!this._ItemsTable){if (FCK.IECleanup) FCK.IECleanup.AddItem(this,FCKMenuBlock_Cleanup);this._Window=FCKTools.GetElementWindow(A);var B=FCKTools.GetElementDocument(A);var C=A.appendChild(B.createElement('table'));C.cellPadding=0;C.cellSpacing=0;FCKTools.DisableSelection(C);var D=C.insertRow(-1).insertCell(-1);D.className='MN_Menu';var E=this._ItemsTable=D.appendChild(B.createElement('table'));E.cellPadding=0;E.cellSpacing=0;};for (var i=0;i<this._Items.length;i++) this._Items[i].Create(this._ItemsTable);};function FCKMenuBlock_Item_OnClick(A,B){if (B.Hide) B.Hide();FCKTools.RunFunction(B.OnClick,B,[A]);};function FCKMenuBlock_Item_OnActivate(A){var B=A._ActiveItem;if (B&&B!=this){if (!FCKBrowserInfo.IsIE&&B.HasSubMenu&&!this.HasSubMenu){A._Window.focus();A.Panel.HasFocus=true;};B.Deactivate();};A._ActiveItem=this;};function FCKMenuBlock_Cleanup(){this._Window=null;this._ItemsTable=null;};var FCKMenuSeparator=function(){};FCKMenuSeparator.prototype.Create=function(A){var B=FCKTools.GetElementDocument(A);var r=A.insertRow(-1);var C=r.insertCell(-1);C.className='MN_Separator MN_Icon';C=r.insertCell(-1);C.className='MN_Separator';C.appendChild(B.createElement('DIV')).className='MN_Separator_Line';C=r.insertCell(-1);C.className='MN_Separator';C.appendChild(B.createElement('DIV')).className='MN_Separator_Line';};
+var FCKMenuBlockPanel=function(){FCKMenuBlock.call(this);};FCKMenuBlockPanel.prototype=new FCKMenuBlock();FCKMenuBlockPanel.prototype.Create=function(){var A=this.Panel=(this.Parent&&this.Parent.Panel?this.Parent.Panel.CreateChildPanel():new FCKPanel());A.AppendStyleSheet(FCKConfig.SkinEditorCSS);FCKMenuBlock.prototype.Create.call(this,A.MainNode);};FCKMenuBlockPanel.prototype.Show=function(x,y,A){if (!this.Panel.CheckIsOpened()) this.Panel.Show(x,y,A);};FCKMenuBlockPanel.prototype.Hide=function(){if (this.Panel.CheckIsOpened()) this.Panel.Hide();};
+var FCKContextMenu=function(A,B){this.CtrlDisable=false;var C=this._Panel=new FCKPanel(A);C.AppendStyleSheet(FCKConfig.SkinEditorCSS);C.IsContextMenu=true;if (FCKBrowserInfo.IsGecko) C.Document.addEventListener('draggesture',function(e) {e.preventDefault();return false;},true);var D=this._MenuBlock=new FCKMenuBlock();D.Panel=C;D.OnClick=FCKTools.CreateEventListener(FCKContextMenu_MenuBlock_OnClick,this);this._Redraw=true;};FCKContextMenu.prototype.SetMouseClickWindow=function(A){if (!FCKBrowserInfo.IsIE){this._Document=A.document;if (FCKBrowserInfo.IsOpera&&!('oncontextmenu' in document.createElement('foo'))){this._Document.addEventListener('mousedown',FCKContextMenu_Document_OnMouseDown,false);this._Document.addEventListener('mouseup',FCKContextMenu_Document_OnMouseUp,false);};this._Document.addEventListener('contextmenu',FCKContextMenu_Document_OnContextMenu,false);}};FCKContextMenu.prototype.AddItem=function(A,B,C,D,E){var F=this._MenuBlock.AddItem(A,B,C,D,E);this._Redraw=true;return F;};FCKContextMenu.prototype.AddSeparator=function(){this._MenuBlock.AddSeparator();this._Redraw=true;};FCKContextMenu.prototype.RemoveAllItems=function(){this._MenuBlock.RemoveAllItems();this._Redraw=true;};FCKContextMenu.prototype.AttachToElement=function(A){if (FCKBrowserInfo.IsIE) FCKTools.AddEventListenerEx(A,'contextmenu',FCKContextMenu_AttachedElement_OnContextMenu,this);else A._FCKContextMenu=this;};function FCKContextMenu_Document_OnContextMenu(e){var A=e.target;while (A){if (A._FCKContextMenu){if (A._FCKContextMenu.CtrlDisable&&(e.ctrlKey||e.metaKey)) return true;FCKTools.CancelEvent(e);FCKContextMenu_AttachedElement_OnContextMenu(e,A._FCKContextMenu,A);return false;};A=A.parentNode;};return true;};var FCKContextMenu_OverrideButton;function FCKContextMenu_Document_OnMouseDown(e){if(!e||e.button!=2) return false;var A=e.target;while (A){if (A._FCKContextMenu){if (A._FCKContextMenu.CtrlDisable&&(e.ctrlKey||e.metaKey)) return true;var B=FCKContextMenu_OverrideButton;if(!B){var C=FCKTools.GetElementDocument(e.target);B=FCKContextMenu_OverrideButton=C.createElement('input');B.type='button';var D=C.createElement('p');C.body.appendChild(D);D.appendChild(B);};B.style.cssText='position:absolute;top:'+(e.clientY-2)+'px;left:'+(e.clientX-2)+'px;width:5px;height:5px;opacity:0.01';};A=A.parentNode;};return false;};function FCKContextMenu_Document_OnMouseUp(e){var A=FCKContextMenu_OverrideButton;if (A){var B=A.parentNode;B.parentNode.removeChild(B);FCKContextMenu_OverrideButton=undefined;if(e&&e.button==2){FCKContextMenu_Document_OnContextMenu(e);return false;}};return true;};function FCKContextMenu_AttachedElement_OnContextMenu(A,B,C){if (B.CtrlDisable&&(A.ctrlKey||A.metaKey)) return true;var D=C||this;if (B.OnBeforeOpen) B.OnBeforeOpen.call(B,D);if (B._MenuBlock.Count()==0) return false;if (B._Redraw){B._MenuBlock.Create(B._Panel.MainNode);B._Redraw=false;};FCKTools.DisableSelection(B._Panel.Document.body);var x=0;var y=0;if (FCKBrowserInfo.IsIE){x=A.screenX;y=A.screenY;}else if (FCKBrowserInfo.IsSafari){x=A.clientX;y=A.clientY;}else{x=A.pageX;y=A.pageY;};B._Panel.Show(x,y,A.currentTarget||null);return false;};function FCKContextMenu_MenuBlock_OnClick(A,B){B._Panel.Hide();FCKTools.RunFunction(B.OnItemClick,B,A);};
+FCK.ContextMenu={};FCK.ContextMenu.Listeners=[];FCK.ContextMenu.RegisterListener=function(A){if (A) this.Listeners.push(A);};function FCK_ContextMenu_Init(){var A=FCK.ContextMenu._InnerContextMenu=new FCKContextMenu(FCKBrowserInfo.IsIE?window:window.parent,FCKLang.Dir);A.CtrlDisable=FCKConfig.BrowserContextMenuOnCtrl;A.OnBeforeOpen=FCK_ContextMenu_OnBeforeOpen;A.OnItemClick=FCK_ContextMenu_OnItemClick;var B=FCK.ContextMenu;for (var i=0;i<FCKConfig.ContextMenu.length;i++) B.RegisterListener(FCK_ContextMenu_GetListener(FCKConfig.ContextMenu[i]));};function FCK_ContextMenu_GetListener(A){switch (A){case 'Generic':return {AddItems:function(menu,tag,tagName){menu.AddItem('Cut',FCKLang.Cut,7,FCKCommands.GetCommand('Cut').GetState()==-1);menu.AddItem('Copy',FCKLang.Copy,8,FCKCommands.GetCommand('Copy').GetState()==-1);menu.AddItem('Paste',FCKLang.Paste,9,FCKCommands.GetCommand('Paste').GetState()==-1);}};case 'Table':return {AddItems:function(menu,tag,tagName){var B=(tagName=='TABLE');var C=(!B&&FCKSelection.HasAncestorNode('TABLE'));if (C){menu.AddSeparator();var D=menu.AddItem('Cell',FCKLang.CellCM);D.AddItem('TableInsertCellBefore',FCKLang.InsertCellBefore,69);D.AddItem('TableInsertCellAfter',FCKLang.InsertCellAfter,58);D.AddItem('TableDeleteCells',FCKLang.DeleteCells,59);if (FCKBrowserInfo.IsGecko) D.AddItem('TableMergeCells',FCKLang.MergeCells,60,FCKCommands.GetCommand('TableMergeCells').GetState()==-1);else{D.AddItem('TableMergeRight',FCKLang.MergeRight,60,FCKCommands.GetCommand('TableMergeRight').GetState()==-1);D.AddItem('TableMergeDown',FCKLang.MergeDown,60,FCKCommands.GetCommand('TableMergeDown').GetState()==-1);};D.AddItem('TableHorizontalSplitCell',FCKLang.HorizontalSplitCell,61,FCKCommands.GetCommand('TableHorizontalSplitCell').GetState()==-1);D.AddItem('TableVerticalSplitCell',FCKLang.VerticalSplitCell,61,FCKCommands.GetCommand('TableVerticalSplitCell').GetState()==-1);D.AddSeparator();D.AddItem('TableCellProp',FCKLang.CellProperties,57,FCKCommands.GetCommand('TableCellProp').GetState()==-1);menu.AddSeparator();D=menu.AddItem('Row',FCKLang.RowCM);D.AddItem('TableInsertRowBefore',FCKLang.InsertRowBefore,70);D.AddItem('TableInsertRowAfter',FCKLang.InsertRowAfter,62);D.AddItem('TableDeleteRows',FCKLang.DeleteRows,63);menu.AddSeparator();D=menu.AddItem('Column',FCKLang.ColumnCM);D.AddItem('TableInsertColumnBefore',FCKLang.InsertColumnBefore,71);D.AddItem('TableInsertColumnAfter',FCKLang.InsertColumnAfter,64);D.AddItem('TableDeleteColumns',FCKLang.DeleteColumns,65);};if (B||C){menu.AddSeparator();menu.AddItem('TableDelete',FCKLang.TableDelete);menu.AddItem('TableProp',FCKLang.TableProperties,39);}}};case 'Link':return {AddItems:function(menu,tag,tagName){var E=(tagName=='A'||FCKSelection.HasAncestorNode('A'));if (E||FCK.GetNamedCommandState('Unlink')!=-1){var F=FCKSelection.MoveToAncestorNode('A');var G=(F&&F.name.length>0&&F.href.length==0);if (G) return;menu.AddSeparator();if (E) menu.AddItem('Link',FCKLang.EditLink,34);menu.AddItem('Unlink',FCKLang.RemoveLink,35);}}};case 'Image':return {AddItems:function(menu,tag,tagName){if (tagName=='IMG'&&!tag.getAttribute('_fckfakelement')){menu.AddSeparator();menu.AddItem('Image',FCKLang.ImageProperties,37);}}};case 'Anchor':return {AddItems:function(menu,tag,tagName){var F=FCKSelection.MoveToAncestorNode('A');var G=(F&&F.name.length>0);if (G||(tagName=='IMG'&&tag.getAttribute('_fckanchor'))){menu.AddSeparator();menu.AddItem('Anchor',FCKLang.AnchorProp,36);menu.AddItem('AnchorDelete',FCKLang.AnchorDelete);}}};case 'Flash':return {AddItems:function(menu,tag,tagName){if (tagName=='IMG'&&tag.getAttribute('_fckflash')){menu.AddSeparator();menu.AddItem('Flash',FCKLang.FlashProperties,38);}}};case 'Form':return {AddItems:function(menu,tag,tagName){if (FCKSelection.HasAncestorNode('FORM')){menu.AddSeparator();menu.AddItem('Form',FCKLang.FormProp,48);}}};case 'Checkbox':return {AddItems:function(menu,tag,tagName){if (tagName=='INPUT'&&tag.type=='checkbox'){menu.AddSeparator();menu.AddItem('Checkbox',FCKLang.CheckboxProp,49);}}};case 'Radio':return {AddItems:function(menu,tag,tagName){if (tagName=='INPUT'&&tag.type=='radio'){menu.AddSeparator();menu.AddItem('Radio',FCKLang.RadioButtonProp,50);}}};case 'TextField':return {AddItems:function(menu,tag,tagName){if (tagName=='INPUT'&&(tag.type=='text'||tag.type=='password')){menu.AddSeparator();menu.AddItem('TextField',FCKLang.TextFieldProp,51);}}};case 'HiddenField':return {AddItems:function(menu,tag,tagName){if (tagName=='IMG'&&tag.getAttribute('_fckinputhidden')){menu.AddSeparator();menu.AddItem('HiddenField',FCKLang.HiddenFieldProp,56);}}};case 'ImageButton':return {AddItems:function(menu,tag,tagName){if (tagName=='INPUT'&&tag.type=='image'){menu.AddSeparator();menu.AddItem('ImageButton',FCKLang.ImageButtonProp,55);}}};case 'Button':return {AddItems:function(menu,tag,tagName){if (tagName=='INPUT'&&(tag.type=='button'||tag.type=='submit'||tag.type=='reset')){menu.AddSeparator();menu.AddItem('Button',FCKLang.ButtonProp,54);}}};case 'Select':return {AddItems:function(menu,tag,tagName){if (tagName=='SELECT'){menu.AddSeparator();menu.AddItem('Select',FCKLang.SelectionFieldProp,53);}}};case 'Textarea':return {AddItems:function(menu,tag,tagName){if (tagName=='TEXTAREA'){menu.AddSeparator();menu.AddItem('Textarea',FCKLang.TextareaProp,52);}}};case 'BulletedList':return {AddItems:function(menu,tag,tagName){if (FCKSelection.HasAncestorNode('UL')){menu.AddSeparator();menu.AddItem('BulletedList',FCKLang.BulletedListProp,27);}}};case 'NumberedList':return {AddItems:function(menu,tag,tagName){if (FCKSelection.HasAncestorNode('OL')){menu.AddSeparator();menu.AddItem('NumberedList',FCKLang.NumberedListProp,26);}}};};return null;};function FCK_ContextMenu_OnBeforeOpen(){FCK.Events.FireEvent('OnSelectionChange');var A,sTagName;if ((A=FCKSelection.GetSelectedElement())) sTagName=A.tagName;var B=FCK.ContextMenu._InnerContextMenu;B.RemoveAllItems();var C=FCK.ContextMenu.Listeners;for (var i=0;i<C.length;i++) C[i].AddItems(B,A,sTagName);};function FCK_ContextMenu_OnItemClick(A){FCK.Focus();FCKCommands.GetCommand(A.Name).Execute(A.CustomData);};
+var FCKHtmlIterator=function(A){this._sourceHtml=A;};FCKHtmlIterator.prototype={Next:function(){var A=this._sourceHtml;if (A==null) return null;var B=FCKRegexLib.HtmlTag.exec(A);var C=false;var D="";if (B){if (B.index>0){D=A.substr(0,B.index);this._sourceHtml=A.substr(B.index);}else{C=true;D=B[0];this._sourceHtml=A.substr(B[0].length);}}else{D=A;this._sourceHtml=null;};return { 'isTag':C,'value':D };},Each:function(A){var B;while ((B=this.Next())) A(B.isTag,B.value);}};var FCKHtmlIterator=function(A){this._sourceHtml=A;};FCKHtmlIterator.prototype={Next:function(){var A=this._sourceHtml;if (A==null) return null;var B=FCKRegexLib.HtmlTag.exec(A);var C=false;var D="";if (B){if (B.index>0){D=A.substr(0,B.index);this._sourceHtml=A.substr(B.index);}else{C=true;D=B[0];this._sourceHtml=A.substr(B[0].length);}}else{D=A;this._sourceHtml=null;};return { 'isTag':C,'value':D };},Each:function(A){var B;while ((B=this.Next())) A(B.isTag,B.value);}};
+var FCKPlugin=function(A,B,C){this.Name=A;this.BasePath=C?C:FCKConfig.PluginsPath;this.Path=this.BasePath+A+'/';if (!B||B.length==0) this.AvailableLangs=[];else this.AvailableLangs=B.split(',');};FCKPlugin.prototype.Load=function(){if (this.AvailableLangs.length>0){var A;if (this.AvailableLangs.IndexOf(FCKLanguageManager.ActiveLanguage.Code)>=0) A=FCKLanguageManager.ActiveLanguage.Code;else A=this.AvailableLangs[0];LoadScript(this.Path+'lang/'+A+'.js');};LoadScript(this.Path+'fckplugin.js');};
+var FCKPlugins=FCK.Plugins={};FCKPlugins.ItemsCount=0;FCKPlugins.Items={};FCKPlugins.Load=function(){var A=FCKPlugins.Items;for (var i=0;i<FCKConfig.Plugins.Items.length;i++){var B=FCKConfig.Plugins.Items[i];var C=A[B[0]]=new FCKPlugin(B[0],B[1],B[2]);FCKPlugins.ItemsCount++;};for (var s in A) A[s].Load();FCKPlugins.Load=null;};


Property changes on: announcement/trunk/src/main/webapp/fckeditor/editor/js/fckeditorcode_gecko.js
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/webapp/fckeditor/editor/js/fckeditorcode_ie.js
===================================================================
--- announcement/trunk/src/main/webapp/fckeditor/editor/js/fckeditorcode_ie.js	                        (rev 0)
+++ announcement/trunk/src/main/webapp/fckeditor/editor/js/fckeditorcode_ie.js	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,109 @@
+/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2008 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * This file has been compressed for better performance. The original source
+ * can be found at "editor/_source".
+ */
+
+var FCK_STATUS_NOTLOADED=window.parent.FCK_STATUS_NOTLOADED=0;var FCK_STATUS_ACTIVE=window.parent.FCK_STATUS_ACTIVE=1;var FCK_STATUS_COMPLETE=window.parent.FCK_STATUS_COMPLETE=2;var FCK_TRISTATE_OFF=window.parent.FCK_TRISTATE_OFF=0;var FCK_TRISTATE_ON=window.parent.FCK_TRISTATE_ON=1;var FCK_TRISTATE_DISABLED=window.parent.FCK_TRISTATE_DISABLED=-1;var FCK_UNKNOWN=window.parent.FCK_UNKNOWN=-9;var FCK_TOOLBARITEM_ONLYICON=window.parent.FCK_TOOLBARITEM_ONLYICON=0;var FCK_TOOLBARITEM_ONLYTEXT=window.parent.FCK_TOOLBARITEM_ONLYTEXT=1;var FCK_TOOLBARITEM_ICONTEXT=window.parent.FCK_TOOLBARITEM_ICONTEXT=2;var FCK_EDITMODE_WYSIWYG=window.parent.FCK_EDITMODE_WYSIWYG=0;var FCK_EDITMODE_SOURCE=window.parent.FCK_EDITMODE_SOURCE=1;var FCK_IMAGES_PATH='images/';var FCK_SPACER_PATH='images/spacer.gif';var CTRL=1000;var SHIFT=2000;var ALT=4000;var FCK_STYLE_BLOCK=0;var FCK_STYLE_INLINE=1;var FCK_STYLE_OBJECT=2;
+String.prototype.Contains=function(A){return (this.indexOf(A)>-1);};String.prototype.Equals=function(){var A=arguments;if (A.length==1&&A[0].pop) A=A[0];for (var i=0;i<A.length;i++){if (this==A[i]) return true;};return false;};String.prototype.IEquals=function(){var A=this.toUpperCase();var B=arguments;if (B.length==1&&B[0].pop) B=B[0];for (var i=0;i<B.length;i++){if (A==B[i].toUpperCase()) return true;};return false;};String.prototype.ReplaceAll=function(A,B){var C=this;for (var i=0;i<A.length;i++){C=C.replace(A[i],B[i]);};return C;};String.prototype.StartsWith=function(A){return (this.substr(0,A.length)==A);};String.prototype.EndsWith=function(A,B){var C=this.length;var D=A.length;if (D>C) return false;if (B){var E=new RegExp(A+'$','i');return E.test(this);}else return (D==0||this.substr(C-D,D)==A);};String.prototype.Remove=function(A,B){var s='';if (A>0) s=this.substring(0,A);if (A+B<this.length) s+=this.substring(A+B,this.length);return s;};String.prototype.Trim=function(){return this.replace(/(^[ \t\n\r]*)|([ \t\n\r]*$)/g,'');};String.prototype.LTrim=function(){return this.replace(/^[ \t\n\r]*/g,'');};String.prototype.RTrim=function(){return this.replace(/[ \t\n\r]*$/g,'');};String.prototype.ReplaceNewLineChars=function(A){return this.replace(/\n/g,A);};String.prototype.Replace=function(A,B,C){if (typeof B=='function'){return this.replace(A,function(){return B.apply(C||this,arguments);});}else return this.replace(A,B);};Array.prototype.AddItem=function(A){var i=this.length;this[i]=A;return i;};Array.prototype.IndexOf=function(A){for (var i=0;i<this.length;i++){if (this[i]==A) return i;};return-1;};
+var	FCKIECleanup=function(A){if (A._FCKCleanupObj) this.Items=A._FCKCleanupObj.Items;else{this.Items=[];A._FCKCleanupObj=this;FCKTools.AddEventListenerEx(A,'unload',FCKIECleanup_Cleanup);}};FCKIECleanup.prototype.AddItem=function(A,B){this.Items.push([A,B]);};function FCKIECleanup_Cleanup(){if (!this._FCKCleanupObj||(FCKConfig.MsWebBrowserControlCompat&&!window.FCKUnloadFlag)) return;var A=this._FCKCleanupObj.Items;while (A.length>0){var B=A.pop();if (B) B[1].call(B[0]);};this._FCKCleanupObj=null;if (CollectGarbage) CollectGarbage();};
+var s=navigator.userAgent.toLowerCase();var FCKBrowserInfo={IsIE:/*@cc_on!@*/false,IsIE7:/*@cc_on!@*/false && ( parseInt( s.match( /msie (\d+)/)[1],10)>=7),IsIE6:/*@cc_on!@*/false && ( parseInt( s.match( /msie (\d+)/)[1],10)>=6),IsSafari:s.Contains(' applewebkit/'),IsOpera:!!window.opera,IsAIR:s.Contains(' adobeair/'),IsMac:s.Contains('macintosh')};(function(A){A.IsGecko=(navigator.product=='Gecko')&&!A.IsSafari&&!A.IsOpera;A.IsGeckoLike=(A.IsGecko||A.IsSafari||A.IsOpera);if (A.IsGecko){var B=s.match(/rv:(\d+\.\d+)/);var C=B&&parseFloat(B[1]);if (C){A.IsGecko10=(C<1.8);A.IsGecko19=(C>1.8);}}})(FCKBrowserInfo);
+var FCKURLParams={};(function(){var A=document.location.search.substr(1).split('&');for (var i=0;i<A.length;i++){var B=A[i].split('=');var C=decodeURIComponent(B[0]);var D=decodeURIComponent(B[1]);FCKURLParams[C]=D;}})();
+var FCKEvents=function(A){this.Owner=A;this._RegisteredEvents={};};FCKEvents.prototype.AttachEvent=function(A,B){var C;if (!(C=this._RegisteredEvents[A])) this._RegisteredEvents[A]=[B];else{if (C.IndexOf(B)==-1) C.push(B);}};FCKEvents.prototype.FireEvent=function(A,B){var C=true;var D=this._RegisteredEvents[A];if (D){for (var i=0;i<D.length;i++){try{C=(D[i](this.Owner,B)&&C);}catch(e){if (e.number!=-2146823277) throw e;}}};return C;};
+var FCKDataProcessor=function(){};FCKDataProcessor.prototype={ConvertToHtml:function(A){if (FCKConfig.FullPage){FCK.DocTypeDeclaration=A.match(FCKRegexLib.DocTypeTag);if (!FCKRegexLib.HasBodyTag.test(A)) A='<body>'+A+'</body>';if (!FCKRegexLib.HtmlOpener.test(A)) A='<html dir="'+FCKConfig.ContentLangDirection+'">'+A+'</html>';if (!FCKRegexLib.HeadOpener.test(A)) A=A.replace(FCKRegexLib.HtmlOpener,'$&<head><title></title></head>');return A;}else{var B=FCKConfig.DocType+'<html dir="'+FCKConfig.ContentLangDirection+'"';if (FCKBrowserInfo.IsIE&&FCKConfig.DocType.length>0&&!FCKRegexLib.Html4DocType.test(FCKConfig.DocType)) B+=' style="overflow-y: scroll"';B+='><head><title></title></head><body'+FCKConfig.GetBodyAttributes()+'>'+A+'</body></html>';return B;}},ConvertToDataFormat:function(A,B,C,D){var E=FCKXHtml.GetXHTML(A,!B,D);if (C&&FCKRegexLib.EmptyOutParagraph.test(E)) return '';return E;},FixHtml:function(A){return A;}};
+var FCK={Name:FCKURLParams['InstanceName'],Status:0,EditMode:0,Toolbar:null,HasFocus:false,DataProcessor:new FCKDataProcessor(),GetInstanceObject:(function(){var w=window;return function(name){return w[name];}})(),AttachToOnSelectionChange:function(A){this.Events.AttachEvent('OnSelectionChange',A);},GetLinkedFieldValue:function(){return this.LinkedField.value;},GetParentForm:function(){return this.LinkedField.form;},StartupValue:'',IsDirty:function(){if (this.EditMode==1) return (this.StartupValue!=this.EditingArea.Textarea.value);else{if (!this.EditorDocument) return false;return (this.StartupValue!=this.EditorDocument.body.innerHTML);}},ResetIsDirty:function(){if (this.EditMode==1) this.StartupValue=this.EditingArea.Textarea.value;else if (this.EditorDocument.body) this.StartupValue=this.EditorDocument.body.innerHTML;},StartEditor:function(){this.TempBaseTag=FCKConfig.BaseHref.length>0?'<base href="'+FCKConfig.BaseHref+'" _fcktemp="true"></base>':'';var A=FCK.KeystrokeHandler=new FCKKeystrokeHandler();A.OnKeystroke=_FCK_KeystrokeHandler_OnKeystroke;A.SetKeystrokes(FCKConfig.Keystrokes);if (FCKBrowserInfo.IsIE7){if ((CTRL+86/*V*/) in A.Keystrokes) A.SetKeystrokes([CTRL+86,true]);if ((SHIFT+45/*INS*/) in A.Keystrokes) A.SetKeystrokes([SHIFT+45,true]);};A.SetKeystrokes([CTRL+8,true]);this.EditingArea=new FCKEditingArea(document.getElementById('xEditingArea'));this.EditingArea.FFSpellChecker=FCKConfig.FirefoxSpellChecker;this.SetData(this.GetLinkedFieldValue(),true);FCKTools.AddEventListener(document,"keydown",this._TabKeyHandler);this.AttachToOnSelectionChange(_FCK_PaddingNodeListener);if (FCKBrowserInfo.IsGecko) this.AttachToOnSelectionChange(this._ExecCheckEmptyBlock);},Focus:function(){FCK.EditingArea.Focus();},SetStatus:function(A){this.Status=A;if (A==1){FCKFocusManager.AddWindow(window,true);if (FCKBrowserInfo.IsIE) FCKFocusManager.AddWindow(window.frameElement,true);if (FCKConfig.StartupFocus) FCK.Focus();};this.Events.FireEvent('OnStatusChange',A);},FixBody:function(){var A=FCKConfig.EnterMode;if (A!='p'&&A!='div') return;var B=this.EditorDocument;if (!B) return;var C=B.body;if (!C) return;FCKDomTools.TrimNode(C);var D=C.firstChild;var E;while (D){var F=false;switch (D.nodeType){case 1:var G=D.nodeName.toLowerCase();if (!FCKListsLib.BlockElements[G]&&G!='li'&&!D.getAttribute('_fckfakelement')&&D.getAttribute('_moz_dirty')==null) F=true;break;case 3:if (E||D.nodeValue.Trim().length>0) F=true;break;case 8:if (E) F=true;break;};if (F){var H=D.parentNode;if (!E) E=H.insertBefore(B.createElement(A),D);E.appendChild(H.removeChild(D));D=E.nextSibling;}else{if (E){FCKDomTools.TrimNode(E);E=null;};D=D.nextSibling;}};if (E) FCKDomTools.TrimNode(E);},GetData:function(A){if (FCK.EditMode==1) return FCK.EditingArea.Textarea.value;this.FixBody();var B=FCK.EditorDocument;if (!B) return null;var C=FCKConfig.FullPage;var D=FCK.DataProcessor.ConvertToDataFormat(C?B.documentElement:B.body,!C,FCKConfig.IgnoreEmptyParagraphValue,A);D=FCK.ProtectEventsRestore(D);if (FCKBrowserInfo.IsIE) D=D.replace(FCKRegexLib.ToReplace,'$1');if (C){if (FCK.DocTypeDeclaration&&FCK.DocTypeDeclaration.length>0) D=FCK.DocTypeDeclaration+'\n'+D;if (FCK.XmlDeclaration&&FCK.XmlDeclaration.length>0) D=FCK.XmlDeclaration+'\n'+D;};return FCKConfig.ProtectedSource.Revert(D);},UpdateLinkedField:function(){var A=FCK.GetXHTML(FCKConfig.FormatOutput);if (FCKConfig.HtmlEncodeOutput) A=FCKTools.HTMLEncode(A);FCK.LinkedField.value=A;FCK.Events.FireEvent('OnAfterLinkedFieldUpdate');},RegisteredDoubleClickHandlers:{},OnDoubleClick:function(A){var B=FCK.RegisteredDoubleClickHandlers[A.tagName.toUpperCase()];if (B){for (var i=0;i<B.length;i++) B[i](A);};B=FCK.RegisteredDoubleClickHandlers['*'];if (B){for (var i=0;i<B.length;i++) B[i](A);}},RegisterDoubleClickHandler:function(A,B){var C=B||'*';C=C.toUpperCase();var D;if (!(D=FCK.RegisteredDoubleClickHandlers[C])) FCK.RegisteredDoubleClickHandlers[C]=[A];else{if (D.IndexOf(A)==-1) D.push(A);}},OnAfterSetHTML:function(){FCKDocumentProcessor.Process(FCK.EditorDocument);FCKUndo.SaveUndoStep();FCK.Events.FireEvent('OnSelectionChange');FCK.Events.FireEvent('OnAfterSetHTML');},ProtectUrls:function(A){A=A.replace(FCKRegexLib.ProtectUrlsA,'$& _fcksavedurl=$1');A=A.replace(FCKRegexLib.ProtectUrlsImg,'$& _fcksavedurl=$1');A=A.replace(FCKRegexLib.ProtectUrlsArea,'$& _fcksavedurl=$1');return A;},ProtectEvents:function(A){return A.replace(FCKRegexLib.TagsWithEvent,_FCK_ProtectEvents_ReplaceTags);},ProtectEventsRestore:function(A){return A.replace(FCKRegexLib.ProtectedEvents,_FCK_ProtectEvents_RestoreEvents);},ProtectTags:function(A){var B=FCKConfig.ProtectedTags;if (FCKBrowserInfo.IsIE) B+=B.length>0?'|ABBR|XML|EMBED|OBJECT':'ABBR|XML|EMBED|OBJECT';var C;if (B.length>0){C=new RegExp('<('+B+')(?!\w|:)','gi');A=A.replace(C,'<FCK:$1');C=new RegExp('<\/('+B+')>','gi');A=A.replace(C,'<\/FCK:$1>');};B='META';if (FCKBrowserInfo.IsIE) B+='|HR';C=new RegExp('<(('+B+')(?=\\s|>|/)[\\s\\S]*?)/?>','gi');A=A.replace(C,'<FCK:$1 />');return A;},SetData:function(A,B){this.EditingArea.Mode=FCK.EditMode;if (FCKBrowserInfo.IsIE&&FCK.EditorDocument){FCK.EditorDocument.detachEvent("onselectionchange",Doc_OnSelectionChange);};if (FCK.EditMode==0){this._ForceResetIsDirty=(B===true);A=FCKConfig.ProtectedSource.Protect(A);A=FCK.DataProcessor.ConvertToHtml(A);A=A.replace(FCKRegexLib.InvalidSelfCloseTags,'$1></$2>');A=FCK.ProtectEvents(A);A=FCK.ProtectUrls(A);A=FCK.ProtectTags(A);if (FCK.TempBaseTag.length>0&&!FCKRegexLib.HasBaseTag.test(A)) A=A.replace(FCKRegexLib.HeadOpener,'$&'+FCK.TempBaseTag);var C='';if (!FCKConfig.FullPage) C+=_FCK_GetEditorAreaStyleTags();if (FCKBrowserInfo.IsIE) C+=FCK._GetBehaviorsStyle();else if (FCKConfig.ShowBorders) C+=FCKTools.GetStyleHtml(FCK_ShowTableBordersCSS,true);C+=FCKTools.GetStyleHtml(FCK_InternalCSS,true);A=A.replace(FCKRegexLib.HeadCloser,C+'$&');this.EditingArea.OnLoad=_FCK_EditingArea_OnLoad;this.EditingArea.Start(A);}else{FCK.EditorWindow=null;FCK.EditorDocument=null;FCKDomTools.PaddingNode=null;this.EditingArea.OnLoad=null;this.EditingArea.Start(A);this.EditingArea.Textarea._FCKShowContextMenu=true;FCK.EnterKeyHandler=null;if (B) this.ResetIsDirty();FCK.KeystrokeHandler.AttachToElement(this.EditingArea.Textarea);this.EditingArea.Textarea.focus();FCK.Events.FireEvent('OnAfterSetHTML');};if (FCKBrowserInfo.IsGecko) window.onresize();},RedirectNamedCommands:{},ExecuteNamedCommand:function(A,B,C,D){if (!D) FCKUndo.SaveUndoStep();if (!C&&FCK.RedirectNamedCommands[A]!=null) FCK.ExecuteRedirectedNamedCommand(A,B);else{FCK.Focus();FCK.EditorDocument.execCommand(A,false,B);FCK.Events.FireEvent('OnSelectionChange');};if (!D) FCKUndo.SaveUndoStep();},GetNamedCommandState:function(A){try{if (FCKBrowserInfo.IsSafari&&FCK.EditorWindow&&A.IEquals('Paste')) return 0;if (!FCK.EditorDocument.queryCommandEnabled(A)) return -1;else{return FCK.EditorDocument.queryCommandState(A)?1:0;}}catch (e){return 0;}},GetNamedCommandValue:function(A){var B='';var C=FCK.GetNamedCommandState(A);if (C==-1) return null;try{B=this.EditorDocument.queryCommandValue(A);}catch(e) {};return B?B:'';},Paste:function(A){if (FCK.Status!=2||!FCK.Events.FireEvent('OnPaste')) return false;return A||FCK._ExecPaste();},PasteFromWord:function(){FCKDialog.OpenDialog('FCKDialog_Paste',FCKLang.PasteFromWord,'dialog/fck_paste.html',400,330,'Word');},Preview:function(){var A;if (FCKConfig.FullPage){if (FCK.TempBaseTag.length>0) A=FCK.TempBaseTag+FCK.GetXHTML();else A=FCK.GetXHTML();}else{A=FCKConfig.DocType+'<html dir="'+FCKConfig.ContentLangDirection+'"><head>'+FCK.TempBaseTag+'<title>'+FCKLang.Preview+'</title>'+_FCK_GetEditorAreaStyleTags()+'</head><body'+FCKConfig.GetBodyAttributes()+'>'+FCK.GetXHTML()+'</body></html>';};var B=FCKConfig.ScreenWidth*0.8;var C=FCKConfig.ScreenHeight*0.7;var D=(FCKConfig.ScreenWidth-B)/2;var E='';if (FCK_IS_CUSTOM_DOMAIN&&FCKBrowserInfo.IsIE){window._FCKHtmlToLoad=A;E='javascript:void( (function(){document.open() ;document.domain="'+document.domain+'" ;document.write( window.opener._FCKHtmlToLoad );document.close() ;window.opener._FCKHtmlToLoad = null ;})() )';};var F=window.open(E,null,'toolbar=yes,location=no,status=yes,menubar=yes,scrollbars=yes,resizable=yes,width='+B+',height='+C+',left='+D);if (!FCK_IS_CUSTOM_DOMAIN||!FCKBrowserInfo.IsIE){F.document.write(A);F.document.close();}},SwitchEditMode:function(A){var B=(FCK.EditMode==0);var C=FCK.IsDirty();var D;if (B){FCKCommands.GetCommand('ShowBlocks').SaveState();if (!A&&FCKBrowserInfo.IsIE) FCKUndo.SaveUndoStep();D=FCK.GetXHTML(FCKConfig.FormatSource);if (D==null) return false;}else D=this.EditingArea.Textarea.value;FCK.EditMode=B?1:0;FCK.SetData(D,!C);FCK.Focus();FCKTools.RunFunction(FCK.ToolbarSet.RefreshModeState,FCK.ToolbarSet);return true;},InsertElement:function(A){if (typeof A=='string') A=this.EditorDocument.createElement(A);var B=A.nodeName.toLowerCase();FCKSelection.Restore();var C=new FCKDomRange(this.EditorWindow);C.MoveToSelection();C.DeleteContents();if (FCKListsLib.BlockElements[B]!=null){if (C.StartBlock){if (C.CheckStartOfBlock()) C.MoveToPosition(C.StartBlock,3);else if (C.CheckEndOfBlock()) C.MoveToPosition(C.StartBlock,4);else C.SplitBlock();};C.InsertNode(A);var D=FCKDomTools.GetNextSourceElement(A,false,null,['hr','br','param','img','area','input'],true);if (!D&&FCKConfig.EnterMode!='br'){D=this.EditorDocument.body.appendChild(this.EditorDocument.createElement(FCKConfig.EnterMode));if (FCKBrowserInfo.IsGeckoLike) FCKTools.AppendBogusBr(D);};if (FCKListsLib.EmptyElements[B]==null) C.MoveToElementEditStart(A);else if (D) C.MoveToElementEditStart(D);else C.MoveToPosition(A,4);if (FCKBrowserInfo.IsGecko){if (D) D.scrollIntoView(false);A.scrollIntoView(false);}}else{C.InsertNode(A);C.SetStart(A,4);C.SetEnd(A,4);};C.Select();C.Release();this.Focus();return A;},_InsertBlockElement:function(A){},_IsFunctionKey:function(A){if (A>=16&&A<=20) return true;if (A==27||(A>=33&&A<=40)) return true;if (A==45) return true;return false;},_KeyDownListener:function(A){if (!A) A=FCK.EditorWindow.event;if (FCK.EditorWindow){if (!FCK._IsFunctionKey(A.keyCode)&&!(A.ctrlKey||A.metaKey)&&!(A.keyCode==46)) FCK._KeyDownUndo();};return true;},_KeyDownUndo:function(){if (!FCKUndo.Typing){FCKUndo.SaveUndoStep();FCKUndo.Typing=true;FCK.Events.FireEvent("OnSelectionChange");};FCKUndo.TypesCount++;FCKUndo.Changed=1;if (FCKUndo.TypesCount>FCKUndo.MaxTypes){FCKUndo.TypesCount=0;FCKUndo.SaveUndoStep();}},_TabKeyHandler:function(A){if (!A) A=window.event;var B=A.keyCode;if (B==9&&FCK.EditMode!=0){if (FCKBrowserInfo.IsIE){var C=document.selection.createRange();if (C.parentElement()!=FCK.EditingArea.Textarea) return true;C.text='\t';C.select();}else{var a=[];var D=FCK.EditingArea.Textarea;var E=D.selectionStart;var F=D.selectionEnd;a.push(D.value.substr(0,E));a.push('\t');a.push(D.value.substr(F));D.value=a.join('');D.setSelectionRange(E+1,E+1);};if (A.preventDefault) return A.preventDefault();return A.returnValue=false;};return true;}};FCK.Events=new FCKEvents(FCK);FCK.GetHTML=FCK.GetXHTML=FCK.GetData;FCK.SetHTML=FCK.SetData;FCK.InsertElementAndGetIt=FCK.CreateElement=FCK.InsertElement;function _FCK_ProtectEvents_ReplaceTags(A){return A.replace(FCKRegexLib.EventAttributes,_FCK_ProtectEvents_ReplaceEvents);};function _FCK_ProtectEvents_ReplaceEvents(A,B){return ' '+B+'_fckprotectedatt="'+encodeURIComponent(A)+'"';};function _FCK_ProtectEvents_RestoreEvents(A,B){return decodeURIComponent(B);};function _FCK_MouseEventsListener(A){if (!A) A=window.event;if (A.type=='mousedown') FCK.MouseDownFlag=true;else if (A.type=='mouseup') FCK.MouseDownFlag=false;else if (A.type=='mousemove') FCK.Events.FireEvent('OnMouseMove',A);};function _FCK_PaddingNodeListener(){if (FCKConfig.EnterMode.IEquals('br')) return;FCKDomTools.EnforcePaddingNode(FCK.EditorDocument,FCKConfig.EnterMode);if (!FCKBrowserInfo.IsIE&&FCKDomTools.PaddingNode){var A=FCKSelection.GetSelection();if (A&&A.rangeCount==1){var B=A.getRangeAt(0);if (B.collapsed&&B.startContainer==FCK.EditorDocument.body&&B.startOffset==0){B.selectNodeContents(FCKDomTools.PaddingNode);B.collapse(true);A.removeAllRanges();A.addRange(B);}}}else if (FCKDomTools.PaddingNode){var C=FCKSelection.GetParentElement();var D=FCKDomTools.PaddingNode;if (C&&C.nodeName.IEquals('body')){if (FCK.EditorDocument.body.childNodes.length==1&&FCK.EditorDocument.body.firstChild==D){if (FCKSelection._GetSelectionDocument(FCK.EditorDocument.selection)!=FCK.EditorDocument) return;var B=FCK.EditorDocument.body.createTextRange();var F=false;if (!D.childNodes.firstChild){D.appendChild(FCKTools.GetElementDocument(D).createTextNode('\ufeff'));F=true;};B.moveToElementText(D);B.select();if (F) B.pasteHTML('');}}}};function _FCK_EditingArea_OnLoad(){FCK.EditorWindow=FCK.EditingArea.Window;FCK.EditorDocument=FCK.EditingArea.Document;FCK.InitializeBehaviors();FCK.MouseDownFlag=false;FCKTools.AddEventListener(FCK.EditorDocument,'mousemove',_FCK_MouseEventsListener);FCKTools.AddEventListener(FCK.EditorDocument,'mousedown',_FCK_MouseEventsListener);FCKTools.AddEventListener(FCK.EditorDocument,'mouseup',_FCK_MouseEventsListener);if (FCKBrowserInfo.IsSafari){var A=function(evt){if (!(evt.ctrlKey||evt.metaKey)) return;if (FCK.EditMode!=0) return;switch (evt.keyCode){case 89:FCKUndo.Redo();break;case 90:FCKUndo.Undo();break;}};FCKTools.AddEventListener(FCK.EditorDocument,'keyup',A);};FCK.EnterKeyHandler=new FCKEnterKey(FCK.EditorWindow,FCKConfig.EnterMode,FCKConfig.ShiftEnterMode,FCKConfig.TabSpaces);FCK.KeystrokeHandler.AttachToElement(FCK.EditorDocument);if (FCK._ForceResetIsDirty) FCK.ResetIsDirty();if (FCKBrowserInfo.IsIE&&FCK.HasFocus) FCK.EditorDocument.body.setActive();FCK.OnAfterSetHTML();FCKCommands.GetCommand('ShowBlocks').RestoreState();if (FCK.Status!=0) return;FCK.SetStatus(1);};function _FCK_GetEditorAreaStyleTags(){return FCKTools.GetStyleHtml(FCKConfig.EditorAreaCSS)+FCKTools.GetStyleHtml(FCKConfig.EditorAreaStyles);};function _FCK_KeystrokeHandler_OnKeystroke(A,B){if (FCK.Status!=2) return false;if (FCK.EditMode==0){switch (B){case 'Paste':return!FCK.Paste();case 'Cut':FCKUndo.SaveUndoStep();return false;}}else{if (B.Equals('Paste','Undo','Redo','SelectAll','Cut')) return false;};var C=FCK.Commands.GetCommand(B);if (C.GetState()==-1) return false;return (C.Execute.apply(C,FCKTools.ArgumentsToArray(arguments,2))!==false);};(function(){var A=window.parent.document;var B=A.getElementById(FCK.Name);var i=0;while (B||i==0){if (B&&B.tagName.toLowerCase().Equals('input','textarea')){FCK.LinkedField=B;break;};B=A.getElementsByName(FCK.Name)[i++];}})();var FCKTempBin={Elements:[],AddElement:function(A){var B=this.Elements.length;this.Elements[B]=A;return B;},RemoveElement:function(A){var e=this.Elements[A];this.Elements[A]=null;return e;},Reset:function(){var i=0;while (i<this.Elements.length) this.Elements[i++]=null;this.Elements.length=0;}};var FCKFocusManager=FCK.FocusManager={IsLocked:false,AddWindow:function(A,B){var C;if (FCKBrowserInfo.IsIE) C=A.nodeType==1?A:A.frameElement?A.frameElement:A.document;else if (FCKBrowserInfo.IsSafari) C=A;else C=A.document;FCKTools.AddEventListener(C,'blur',FCKFocusManager_Win_OnBlur);FCKTools.AddEventListener(C,'focus',B?FCKFocusManager_Win_OnFocus_Area:FCKFocusManager_Win_OnFocus);},RemoveWindow:function(A){if (FCKBrowserInfo.IsIE) oTarget=A.nodeType==1?A:A.frameElement?A.frameElement:A.document;else oTarget=A.document;FCKTools.RemoveEventListener(oTarget,'blur',FCKFocusManager_Win_OnBlur);FCKTools.RemoveEventListener(oTarget,'focus',FCKFocusManager_Win_OnFocus_Area);FCKTools.RemoveEventListener(oTarget,'focus',FCKFocusManager_Win_OnFocus);},Lock:function(){this.IsLocked=true;},Unlock:function(){if (this._HasPendingBlur) FCKFocusManager._Timer=window.setTimeout(FCKFocusManager_FireOnBlur,100);this.IsLocked=false;},_ResetTimer:function(){this._HasPendingBlur=false;if (this._Timer){window.clearTimeout(this._Timer);delete this._Timer;}}};function FCKFocusManager_Win_OnBlur(){if (typeof(FCK)!='undefined'&&FCK.HasFocus){FCKFocusManager._ResetTimer();FCKFocusManager._Timer=window.setTimeout(FCKFocusManager_FireOnBlur,100);}};function FCKFocusManager_FireOnBlur(){if (FCKFocusManager.IsLocked) FCKFocusManager._HasPendingBlur=true;else{FCK.HasFocus=false;FCK.Events.FireEvent("OnBlur");}};function FCKFocusManager_Win_OnFocus_Area(){if (FCKFocusManager._IsFocusing) return;FCKFocusManager._IsFocusing=true;FCK.Focus();FCKFocusManager_Win_OnFocus();FCKTools.RunFunction(function(){delete FCKFocusManager._IsFocusing;});};function FCKFocusManager_Win_OnFocus(){FCKFocusManager._ResetTimer();if (!FCK.HasFocus&&!FCKFocusManager.IsLocked){FCK.HasFocus=true;FCK.Events.FireEvent("OnFocus");}};(function(){var A=window.frameElement;var B=A.width;var C=A.height;if (/^\d+$/.test(B)) B+='px';if (/^\d+$/.test(C)) C+='px';var D=A.style;D.border=D.padding=D.margin=0;D.backgroundColor='transparent';D.backgroundImage='none';D.width=B;D.height=C;})();
+FCK.Description="FCKeditor for Internet Explorer 5.5+";FCK._GetBehaviorsStyle=function(){if (!FCK._BehaviorsStyle){var A=FCKConfig.BasePath;var B='';var C;C='<style type="text/css" _fcktemp="true">';if (FCKConfig.ShowBorders) B='url('+A+'css/behaviors/showtableborders.htc)';C+='INPUT,TEXTAREA,SELECT,.FCK__Anchor,.FCK__PageBreak,.FCK__InputHidden';if (FCKConfig.DisableObjectResizing){C+=',IMG';B+=' url('+A+'css/behaviors/disablehandles.htc)';};C+=' { behavior: url('+A+'css/behaviors/disablehandles.htc) ; }';if (B.length>0) C+='TABLE { behavior: '+B+' ; }';C+='</style>';FCK._BehaviorsStyle=C;};return FCK._BehaviorsStyle;};function Doc_OnMouseUp(){if (FCK.EditorWindow.event.srcElement.tagName=='HTML'){FCK.Focus();FCK.EditorWindow.event.cancelBubble=true;FCK.EditorWindow.event.returnValue=false;}};function Doc_OnPaste(){var A=FCK.EditorDocument.body;A.detachEvent('onpaste',Doc_OnPaste);var B=FCK.Paste(!FCKConfig.ForcePasteAsPlainText&&!FCKConfig.AutoDetectPasteFromWord);A.attachEvent('onpaste',Doc_OnPaste);return B;};function Doc_OnDblClick(){FCK.OnDoubleClick(FCK.EditorWindow.event.srcElement);FCK.EditorWindow.event.cancelBubble=true;};function Doc_OnSelectionChange(){if (!FCK.IsSelectionChangeLocked&&FCK.EditorDocument) FCK.Events.FireEvent("OnSelectionChange");};function Doc_OnDrop(){if (FCK.MouseDownFlag){FCK.MouseDownFlag=false;return;};if (FCKConfig.ForcePasteAsPlainText){var A=FCK.EditorWindow.event;if (FCK._CheckIsPastingEnabled()||FCKConfig.ShowDropDialog) FCK.PasteAsPlainText(A.dataTransfer.getData('Text'));A.returnValue=false;A.cancelBubble=true;}};FCK.InitializeBehaviors=function(A){this.EditorDocument.attachEvent('onmouseup',Doc_OnMouseUp);this.EditorDocument.body.attachEvent('onpaste',Doc_OnPaste);this.EditorDocument.body.attachEvent('ondrop',Doc_OnDrop);FCK.ContextMenu._InnerContextMenu.AttachToElement(FCK.EditorDocument.body);this.EditorDocument.attachEvent("onkeydown",FCK._KeyDownListener);this.EditorDocument.attachEvent("ondblclick",Doc_OnDblClick);this.EditorDocument.attachEvent("onselectionchange",Doc_OnSelectionChange);FCKTools.AddEventListener(FCK.EditorDocument,'mousedown',Doc_OnMouseDown);};FCK.InsertHtml=function(A){A=FCKConfig.ProtectedSource.Protect(A);A=FCK.ProtectEvents(A);A=FCK.ProtectUrls(A);A=FCK.ProtectTags(A);FCKSelection.Restore();FCK.EditorWindow.focus();FCKUndo.SaveUndoStep();var B=FCKSelection.GetSelection();if (B.type.toLowerCase()=='control') B.clear();A='<span id="__fakeFCKRemove__" style="display:none;">fakeFCKRemove</span>'+A;B.createRange().pasteHTML(A);FCK.EditorDocument.getElementById('__fakeFCKRemove__').removeNode(true);FCKDocumentProcessor.Process(FCK.EditorDocument);this.Events.FireEvent("OnSelectionChange");};FCK.SetInnerHtml=function(A){var B=FCK.EditorDocument;B.body.innerHTML='<div id="__fakeFCKRemove__">&nbsp;</div>'+A;B.getElementById('__fakeFCKRemove__').removeNode(true);};function FCK_PreloadImages(){var A=new FCKImagePreloader();A.AddImages(FCKConfig.PreloadImages);A.AddImages(FCKConfig.SkinPath+'fck_strip.gif');A.OnComplete=LoadToolbarSetup;A.Start();};function Document_OnContextMenu(){return (event.srcElement._FCKShowContextMenu==true);};document.oncontextmenu=Document_OnContextMenu;function FCK_Cleanup(){this.LinkedField=null;this.EditorWindow=null;this.EditorDocument=null;};FCK._ExecPaste=function(){if (FCK._PasteIsRunning) return true;if (FCKConfig.ForcePasteAsPlainText){FCK.PasteAsPlainText();return false;};var A=FCK._CheckIsPastingEnabled(true);if (A===false) FCKTools.RunFunction(FCKDialog.OpenDialog,FCKDialog,['FCKDialog_Paste',FCKLang.Paste,'dialog/fck_paste.html',400,330,'Security']);else{if (FCKConfig.AutoDetectPasteFromWord&&A.length>0){var B=/<\w[^>]*(( class="?MsoNormal"?)|(="mso-))/gi;if (B.test(A)){if (confirm(FCKLang.PasteWordConfirm)){FCK.PasteFromWord();return false;}}};FCK._PasteIsRunning=true;FCK.ExecuteNamedCommand('Paste');delete FCK._PasteIsRunning;};return false;};FCK.PasteAsPlainText=function(A){if (!FCK._CheckIsPastingEnabled()){FCKDialog.OpenDialog('FCKDialog_Paste',FCKLang.PasteAsText,'dialog/fck_paste.html',400,330,'PlainText');return;};var B=null;if (!A) B=clipboardData.getData("Text");else B=A;if (B&&B.length>0){B=FCKTools.HTMLEncode(B);B=FCKTools.ProcessLineBreaks(window,FCKConfig,B);var C=B.search('</p>');var D=B.search('<p>');if ((C!=-1&&D!=-1&&C<D)||(C!=-1&&D==-1)){var E=B.substr(0,C);B=B.substr(C+4);this.InsertHtml(E);};FCKUndo.SaveLocked=true;this.InsertHtml(B);FCKUndo.SaveLocked=false;}};FCK._CheckIsPastingEnabled=function(A){FCK._PasteIsEnabled=false;document.body.attachEvent('onpaste',FCK_CheckPasting_Listener);var B=FCK.GetClipboardHTML();document.body.detachEvent('onpaste',FCK_CheckPasting_Listener);if (FCK._PasteIsEnabled){if (!A) B=true;}else B=false;delete FCK._PasteIsEnabled;return B;};function FCK_CheckPasting_Listener(){FCK._PasteIsEnabled=true;};FCK.GetClipboardHTML=function(){var A=document.getElementById('___FCKHiddenDiv');if (!A){A=document.createElement('DIV');A.id='___FCKHiddenDiv';var B=A.style;B.position='absolute';B.visibility=B.overflow='hidden';B.width=B.height=1;document.body.appendChild(A);};A.innerHTML='';var C=document.body.createTextRange();C.moveToElementText(A);C.execCommand('Paste');var D=A.innerHTML;A.innerHTML='';return D;};FCK.CreateLink=function(A,B){var C=[];FCK.ExecuteNamedCommand('Unlink',null,false,!!B);if (A.length>0){if (FCKSelection.GetType()=='Control'){var D=this.EditorDocument.createElement('A');D.href=A;var E=FCKSelection.GetSelectedElement();E.parentNode.insertBefore(D,E);E.parentNode.removeChild(E);D.appendChild(E);return [D];};var F='javascript:void(0);/*'+(new Date().getTime())+'*/';FCK.ExecuteNamedCommand('CreateLink',F,false,!!B);var G=this.EditorDocument.links;for (i=0;i<G.length;i++){var D=G[i];if (D.getAttribute('href',2)==F){var I=D.innerHTML;D.href=A;D.innerHTML=I;var J=D.lastChild;if (J&&J.nodeName=='BR'){FCKDomTools.InsertAfterNode(D,D.removeChild(J));};C.push(D);}}};return C;};function _FCK_RemoveDisabledAtt(){this.removeAttribute('disabled');};function Doc_OnMouseDown(A){var e=A.srcElement;if (e.nodeName.IEquals('input')&&e.type.IEquals(['radio','checkbox'])&&!e.disabled){e.disabled=true;FCKTools.SetTimeout(_FCK_RemoveDisabledAtt,1,e);}};
+var FCKConfig=FCK.Config={};if (document.location.protocol=='file:'){FCKConfig.BasePath=decodeURIComponent(document.location.pathname.substr(1));FCKConfig.BasePath=FCKConfig.BasePath.replace(/\\/gi, '/');var sFullProtocol=document.location.href.match(/^(file\:\/{2,3})/)[1];if (FCKBrowserInfo.IsOpera) sFullProtocol+='localhost/';FCKConfig.BasePath=sFullProtocol+FCKConfig.BasePath.substring(0,FCKConfig.BasePath.lastIndexOf('/')+1);}else FCKConfig.BasePath=document.location.protocol+'//'+document.location.host+document.location.pathname.substring(0,document.location.pathname.lastIndexOf('/')+1);FCKConfig.FullBasePath=FCKConfig.BasePath;FCKConfig.EditorPath=FCKConfig.BasePath.replace(/editor\/$/,'');try{FCKConfig.ScreenWidth=screen.width;FCKConfig.ScreenHeight=screen.height;}catch (e){FCKConfig.ScreenWidth=800;FCKConfig.ScreenHeight=600;};FCKConfig.ProcessHiddenField=function(){this.PageConfig={};var A=window.parent.document.getElementById(FCK.Name+'___Config');if (!A) return;var B=A.value.split('&');for (var i=0;i<B.length;i++){if (B[i].length==0) continue;var C=B[i].split('=');var D=decodeURIComponent(C[0]);var E=decodeURIComponent(C[1]);if (D=='CustomConfigurationsPath') FCKConfig[D]=E;else if (E.toLowerCase()=="true") this.PageConfig[D]=true;else if (E.toLowerCase()=="false") this.PageConfig[D]=false;else if (E.length>0&&!isNaN(E)) this.PageConfig[D]=parseInt(E,10);else this.PageConfig[D]=E;}};function FCKConfig_LoadPageConfig(){var A=FCKConfig.PageConfig;for (var B in A) FCKConfig[B]=A[B];};function FCKConfig_PreProcess(){var A=FCKConfig;if (A.AllowQueryStringDebug){try{if ((/fckdebug=true/i).test(window.top.location.search)) A.Debug=true;}catch (e) {/*Ignore it. Much probably we are inside a FRAME where the "top" is in another domain (security error).*/}};if (!A.PluginsPath.EndsWith('/')) A.PluginsPath+='/';var B=A.ToolbarComboPreviewCSS;if (!B||B.length==0) A.ToolbarComboPreviewCSS=A.EditorAreaCSS;A.RemoveAttributesArray=(A.RemoveAttributes||'').split(',');if (!FCKConfig.SkinEditorCSS||FCKConfig.SkinEditorCSS.length==0) FCKConfig.SkinEditorCSS=FCKConfig.SkinPath+'fck_editor.css';if (!FCKConfig.SkinDialogCSS||FCKConfig.SkinDialogCSS.length==0) FCKConfig.SkinDialogCSS=FCKConfig.SkinPath+'fck_dialog.css';};FCKConfig.ToolbarSets={};FCKConfig.Plugins={};FCKConfig.Plugins.Items=[];FCKConfig.Plugins.Add=function(A,B,C){FCKConfig.Plugins.Items.AddItem([A,B,C]);};FCKConfig.ProtectedSource={};FCKConfig.ProtectedSource._CodeTag=(new Date()).valueOf();FCKConfig.ProtectedSource.RegexEntries=[/<!--[\s\S]*?-->/g,/<script[\s\S]*?<\/script>/gi,/<noscript[\s\S]*?<\/noscript>/gi];FCKConfig.ProtectedSource.Add=function(A){this.RegexEntries.AddItem(A);};FCKConfig.ProtectedSource.Protect=function(A){var B=this._CodeTag;function _Replace(protectedSource){var C=FCKTempBin.AddElement(protectedSource);return '<!--{'+B+C+'}-->';};for (var i=0;i<this.RegexEntries.length;i++){A=A.replace(this.RegexEntries[i],_Replace);};return A;};FCKConfig.ProtectedSource.Revert=function(A,B){function _Replace(m,opener,index){var C=B?FCKTempBin.RemoveElement(index):FCKTempBin.Elements[index];return FCKConfig.ProtectedSource.Revert(C,B);};var D=new RegExp("(<|&lt;)!--\\{"+this._CodeTag+"(\\d+)\\}--(>|&gt;)","g");return A.replace(D,_Replace);};FCKConfig.GetBodyAttributes=function(){var A='';if (this.BodyId&&this.BodyId.length>0) A+=' id="'+this.BodyId+'"';if (this.BodyClass&&this.BodyClass.length>0) A+=' class="'+this.BodyClass+'"';return A;};FCKConfig.ApplyBodyAttributes=function(A){if (this.BodyId&&this.BodyId.length>0) A.id=FCKConfig.BodyId;if (this.BodyClass&&this.BodyClass.length>0) A.className+=' '+FCKConfig.BodyClass;};
+var FCKDebug={Output:function(){},OutputObject:function(){}};
+var FCKDomTools={MoveChildren:function(A,B,C){if (A==B) return;var D;if (C){while ((D=A.lastChild)) B.insertBefore(A.removeChild(D),B.firstChild);}else{while ((D=A.firstChild)) B.appendChild(A.removeChild(D));}},MoveNode:function(A,B,C){if (C) B.insertBefore(FCKDomTools.RemoveNode(A),B.firstChild);else B.appendChild(FCKDomTools.RemoveNode(A));},TrimNode:function(A){this.LTrimNode(A);this.RTrimNode(A);},LTrimNode:function(A){var B;while ((B=A.firstChild)){if (B.nodeType==3){var C=B.nodeValue.LTrim();var D=B.nodeValue.length;if (C.length==0){A.removeChild(B);continue;}else if (C.length<D){B.splitText(D-C.length);A.removeChild(A.firstChild);}};break;}},RTrimNode:function(A){var B;while ((B=A.lastChild)){if (B.nodeType==3){var C=B.nodeValue.RTrim();var D=B.nodeValue.length;if (C.length==0){B.parentNode.removeChild(B);continue;}else if (C.length<D){B.splitText(C.length);A.lastChild.parentNode.removeChild(A.lastChild);}};break;};if (!FCKBrowserInfo.IsIE&&!FCKBrowserInfo.IsOpera){B=A.lastChild;if (B&&B.nodeType==1&&B.nodeName.toLowerCase()=='br'){B.parentNode.removeChild(B);}}},RemoveNode:function(A,B){if (B){var C;while ((C=A.firstChild)) A.parentNode.insertBefore(A.removeChild(C),A);};return A.parentNode.removeChild(A);},GetFirstChild:function(A,B){if (typeof (B)=='string') B=[B];var C=A.firstChild;while(C){if (C.nodeType==1&&C.tagName.Equals.apply(C.tagName,B)) return C;C=C.nextSibling;};return null;},GetLastChild:function(A,B){if (typeof (B)=='string') B=[B];var C=A.lastChild;while(C){if (C.nodeType==1&&(!B||C.tagName.Equals(B))) return C;C=C.previousSibling;};return null;},GetPreviousSourceElement:function(A,B,C,D){if (!A) return null;if (C&&A.nodeType==1&&A.nodeName.IEquals(C)) return null;if (A.previousSibling) A=A.previousSibling;else return this.GetPreviousSourceElement(A.parentNode,B,C,D);while (A){if (A.nodeType==1){if (C&&A.nodeName.IEquals(C)) break;if (!D||!A.nodeName.IEquals(D)) return A;}else if (B&&A.nodeType==3&&A.nodeValue.RTrim().length>0) break;if (A.lastChild) A=A.lastChild;else return this.GetPreviousSourceElement(A,B,C,D);};return null;},GetNextSourceElement:function(A,B,C,D,E){while((A=this.GetNextSourceNode(A,E))){if (A.nodeType==1){if (C&&A.nodeName.IEquals(C)) break;if (D&&A.nodeName.IEquals(D)) return this.GetNextSourceElement(A,B,C,D);return A;}else if (B&&A.nodeType==3&&A.nodeValue.RTrim().length>0) break;};return null;},GetNextSourceNode:function(A,B,C,D){if (!A) return null;var E;if (!B&&A.firstChild) E=A.firstChild;else{if (D&&A==D) return null;E=A.nextSibling;if (!E&&(!D||D!=A.parentNode)) return this.GetNextSourceNode(A.parentNode,true,C,D);};if (C&&E&&E.nodeType!=C) return this.GetNextSourceNode(E,false,C,D);return E;},GetPreviousSourceNode:function(A,B,C,D){if (!A) return null;var E;if (!B&&A.lastChild) E=A.lastChild;else{if (D&&A==D) return null;E=A.previousSibling;if (!E&&(!D||D!=A.parentNode)) return this.GetPreviousSourceNode(A.parentNode,true,C,D);};if (C&&E&&E.nodeType!=C) return this.GetPreviousSourceNode(E,false,C,D);return E;},InsertAfterNode:function(A,B){return A.parentNode.insertBefore(B,A.nextSibling);},GetParents:function(A){var B=[];while (A){B.unshift(A);A=A.parentNode;};return B;},GetCommonParents:function(A,B){var C=this.GetParents(A);var D=this.GetParents(B);var E=[];for (var i=0;i<C.length;i++){if (C[i]==D[i]) E.push(C[i]);};return E;},GetCommonParentNode:function(A,B,C){var D={};if (!C.pop) C=[C];while (C.length>0) D[C.pop().toLowerCase()]=1;var E=this.GetCommonParents(A,B);var F=null;while ((F=E.pop())){if (D[F.nodeName.toLowerCase()]) return F;};return null;},GetIndexOf:function(A){var B=A.parentNode?A.parentNode.firstChild:null;var C=-1;while (B){C++;if (B==A) return C;B=B.nextSibling;};return-1;},PaddingNode:null,EnforcePaddingNode:function(A,B){try{if (!A||!A.body) return;}catch (e){return;};this.CheckAndRemovePaddingNode(A,B,true);try{if (A.body.lastChild&&(A.body.lastChild.nodeType!=1||A.body.lastChild.tagName.toLowerCase()==B.toLowerCase())) return;}catch (e){return;};var C=A.createElement(B);if (FCKBrowserInfo.IsGecko&&FCKListsLib.NonEmptyBlockElements[B]) FCKTools.AppendBogusBr(C);this.PaddingNode=C;if (A.body.childNodes.length==1&&A.body.firstChild.nodeType==1&&A.body.firstChild.tagName.toLowerCase()=='br'&&(A.body.firstChild.getAttribute('_moz_dirty')!=null||A.body.firstChild.getAttribute('type')=='_moz')) A.body.replaceChild(C,A.body.firstChild);else A.body.appendChild(C);},CheckAndRemovePaddingNode:function(A,B,C){var D=this.PaddingNode;if (!D) return;try{if (D.parentNode!=A.body||D.tagName.toLowerCase()!=B||(D.childNodes.length>1)||(D.firstChild&&D.firstChild.nodeValue!='\xa0'&&String(D.firstChild.tagName).toLowerCase()!='br')){this.PaddingNode=null;return;}}catch (e){this.PaddingNode=null;return;};if (!C){if (D.parentNode.childNodes.length>1) D.parentNode.removeChild(D);this.PaddingNode=null;}},HasAttribute:function(A,B){if (A.hasAttribute) return A.hasAttribute(B);else{var C=A.attributes[B];return (C!=undefined&&C.specified);}},HasAttributes:function(A){var B=A.attributes;for (var i=0;i<B.length;i++){if (FCKBrowserInfo.IsIE&&B[i].nodeName=='class'){if (A.className.length>0) return true;}else if (B[i].specified) return true;};return false;},RemoveAttribute:function(A,B){if (FCKBrowserInfo.IsIE&&B.toLowerCase()=='class') B='className';return A.removeAttribute(B,0);},RemoveAttributes:function (A,B){for (var i=0;i<B.length;i++) this.RemoveAttribute(A,B[i]);},GetAttributeValue:function(A,B){var C=B;if (typeof B=='string') B=A.attributes[B];else C=B.nodeName;if (B&&B.specified){if (C=='style') return A.style.cssText;else if (C=='class'||C.indexOf('on')==0) return B.nodeValue;else{return A.getAttribute(C,2);}};return null;},Contains:function(A,B){if (A.contains&&B.nodeType==1) return A.contains(B);while ((B=B.parentNode)){if (B==A) return true;};return false;},BreakParent:function(A,B,C){var D=C||new FCKDomRange(FCKTools.GetElementWindow(A));D.SetStart(A,4);D.SetEnd(B,4);var E=D.ExtractContents();D.InsertNode(A.parentNode.removeChild(A));E.InsertAfterNode(A);D.Release(!!C);},GetNodeAddress:function(A,B){var C=[];while (A&&A!=FCKTools.GetElementDocument(A).documentElement){var D=A.parentNode;var E=-1;for(var i=0;i<D.childNodes.length;i++){var F=D.childNodes[i];if (B===true&&F.nodeType==3&&F.previousSibling&&F.previousSibling.nodeType==3) continue;E++;if (D.childNodes[i]==A) break;};C.unshift(E);A=A.parentNode;};return C;},GetNodeFromAddress:function(A,B,C){var D=A.documentElement;for (var i=0;i<B.length;i++){var E=B[i];if (!C){D=D.childNodes[E];continue;};var F=-1;for (var j=0;j<D.childNodes.length;j++){var G=D.childNodes[j];if (C===true&&G.nodeType==3&&G.previousSibling&&G.previousSibling.nodeType==3) continue;F++;if (F==E){D=G;break;}}};return D;},CloneElement:function(A){A=A.cloneNode(false);A.removeAttribute('id',false);return A;},ClearElementJSProperty:function(A,B){if (FCKBrowserInfo.IsIE) A.removeAttribute(B);else delete A[B];},SetElementMarker:function (A,B,C,D){var E=String(parseInt(Math.random()*0xfffffff,10));B._FCKMarkerId=E;B[C]=D;if (!A[E]) A[E]={ 'element':B,'markers':{} };A[E]['markers'][C]=D;},ClearElementMarkers:function(A,B,C){var D=B._FCKMarkerId;if (!D) return;this.ClearElementJSProperty(B,'_FCKMarkerId');for (var j in A[D]['markers']) this.ClearElementJSProperty(B,j);if (C) delete A[D];},ClearAllMarkers:function(A){for (var i in A) this.ClearElementMarkers(A,A[i]['element'],true);},ListToArray:function(A,B,C,D,E){if (!A.nodeName.IEquals(['ul','ol'])) return [];if (!D) D=0;if (!C) C=[];for (var i=0;i<A.childNodes.length;i++){var F=A.childNodes[i];if (!F.nodeName.IEquals('li')) continue;var G={ 'parent':A,'indent':D,'contents':[] };if (!E){G.grandparent=A.parentNode;if (G.grandparent&&G.grandparent.nodeName.IEquals('li')) G.grandparent=G.grandparent.parentNode;}else G.grandparent=E;if (B) this.SetElementMarker(B,F,'_FCK_ListArray_Index',C.length);C.push(G);for (var j=0;j<F.childNodes.length;j++){var H=F.childNodes[j];if (H.nodeName.IEquals(['ul','ol'])) this.ListToArray(H,B,C,D+1,G.grandparent);else G.contents.push(H);}};return C;},ArrayToList:function(A,B,C){if (C==undefined) C=0;if (!A||A.length<C+1) return null;var D=FCKTools.GetElementDocument(A[C].parent);var E=D.createDocumentFragment();var F=null;var G=C;var H=Math.max(A[C].indent,0);var I=null;while (true){var J=A[G];if (J.indent==H){if (!F||A[G].parent.nodeName!=F.nodeName){F=A[G].parent.cloneNode(false);E.appendChild(F);};I=D.createElement('li');F.appendChild(I);for (var i=0;i<J.contents.length;i++) I.appendChild(J.contents[i].cloneNode(true));G++;}else if (J.indent==Math.max(H,0)+1){var K=this.ArrayToList(A,null,G);I.appendChild(K.listNode);G=K.nextIndex;}else if (J.indent==-1&&C==0&&J.grandparent){var I;if (J.grandparent.nodeName.IEquals(['ul','ol'])) I=D.createElement('li');else{if (FCKConfig.EnterMode.IEquals(['div','p'])&&!J.grandparent.nodeName.IEquals('td')) I=D.createElement(FCKConfig.EnterMode);else I=D.createDocumentFragment();};for (var i=0;i<J.contents.length;i++) I.appendChild(J.contents[i].cloneNode(true));if (I.nodeType==11){if (I.lastChild&&I.lastChild.getAttribute&&I.lastChild.getAttribute('type')=='_moz') I.removeChild(I.lastChild);I.appendChild(D.createElement('br'));};if (I.nodeName.IEquals(FCKConfig.EnterMode)&&I.firstChild){this.TrimNode(I);if (FCKListsLib.BlockBoundaries[I.firstChild.nodeName.toLowerCase()]){var M=D.createDocumentFragment();while (I.firstChild) M.appendChild(I.removeChild(I.firstChild));I=M;}};if (FCKBrowserInfo.IsGeckoLike&&I.nodeName.IEquals(['div','p'])) FCKTools.AppendBogusBr(I);E.appendChild(I);F=null;G++;}else return null;if (A.length<=G||Math.max(A[G].indent,0)<H){break;}};if (B){var N=E.firstChild;while (N){if (N.nodeType==1) this.ClearElementMarkers(B,N);N=this.GetNextSourceNode(N);}};return { 'listNode':E,'nextIndex':G };},GetNextSibling:function(A,B){A=A.nextSibling;while (A&&!B&&A.nodeType!=1&&(A.nodeType!=3||A.nodeValue.length==0)) A=A.nextSibling;return A;},GetPreviousSibling:function(A,B){A=A.previousSibling;while (A&&!B&&A.nodeType!=1&&(A.nodeType!=3||A.nodeValue.length==0)) A=A.previousSibling;return A;},CheckIsEmptyElement:function(A,B){var C=A.firstChild;var D;while (C){if (C.nodeType==1){if (D||!FCKListsLib.InlineNonEmptyElements[C.nodeName.toLowerCase()]) return false;if (!B||B(C)===true) D=C;}else if (C.nodeType==3&&C.nodeValue.length>0) return false;C=C.nextSibling;};return D?this.CheckIsEmptyElement(D,B):true;},SetElementStyles:function(A,B){var C=A.style;for (var D in B) C[D]=B[D];},SetOpacity:function(A,B){if (FCKBrowserInfo.IsIE){B=Math.round(B*100);A.style.filter=(B>100?'':'progid:DXImageTransform.Microsoft.Alpha(opacity='+B+')');}else A.style.opacity=B;},GetCurrentElementStyle:function(A,B){if (FCKBrowserInfo.IsIE) return A.currentStyle[B];else return A.ownerDocument.defaultView.getComputedStyle(A,'').getPropertyValue(B);},GetPositionedAncestor:function(A){var B=A;while (B!=FCKTools.GetElementDocument(B).documentElement){if (this.GetCurrentElementStyle(B,'position')!='static') return B;if (B==FCKTools.GetElementDocument(B).documentElement&&currentWindow!=w) B=currentWindow.frameElement;else B=B.parentNode;};return null;},ScrollIntoView:function(A,B){var C=FCKTools.GetElementWindow(A);var D=FCKTools.GetViewPaneSize(C).Height;var E=D*-1;if (B===false){E+=A.offsetHeight;E+=parseInt(this.GetCurrentElementStyle(A,'marginBottom')||0,10);};E+=A.offsetTop;while ((A=A.offsetParent)) E+=A.offsetTop||0;var F=FCKTools.GetScrollPosition(C).Y;if (E>0&&E>F) C.scrollTo(0,E);},CheckIsEditable:function(A){var B=A.nodeName.toLowerCase();var C=FCK.DTD[B]||FCK.DTD.span;return (C['#']&&!FCKListsLib.NonEditableElements[B]);}};
+var FCKTools={};FCKTools.CreateBogusBR=function(A){var B=A.createElement('br');B.setAttribute('type','_moz');return B;};FCKTools.FixCssUrls=function(A,B){if (!A||A.length==0) return B;return B.replace(/url\s*\(([\s'"]*)(.*?)([\s"']*)\)/g,function(match,opener,path,closer){if (/^\/|^\w?:/.test(path)) return match;else return 'url('+opener+A+path+closer+')';});};FCKTools._GetUrlFixedCss=function(A,B){var C=A.match(/^([^|]+)\|([\s\S]*)/);if (C) return FCKTools.FixCssUrls(C[1],C[2]);else return A;};FCKTools.AppendStyleSheet=function(A,B){if (!B) return [];if (typeof(B)=='string'){if (/[\\\/\.][^{}]*$/.test(B)){return this.AppendStyleSheet(A,B.split(','));}else return [this.AppendStyleString(A,FCKTools._GetUrlFixedCss(B))];}else{var C=[];for (var i=0;i<B.length;i++) C.push(this._AppendStyleSheet(A,B[i]));return C;}};FCKTools.GetStyleHtml=(function(){var A=function(styleDef,markTemp){if (styleDef.length==0) return '';var B=markTemp?' _fcktemp="true"':'';return '<style type="text/css"'+B+'>'+styleDef+'</style>';};var C=function(cssFileUrl,markTemp){if (cssFileUrl.length==0) return '';var B=markTemp?' _fcktemp="true"':'';return '<link href="'+cssFileUrl+'" type="text/css" rel="stylesheet" '+B+'/>';};return function(cssFileOrArrayOrDef,markTemp){if (!cssFileOrArrayOrDef) return '';if (typeof(cssFileOrArrayOrDef)=='string'){if (/[\\\/\.][^{}]*$/.test(cssFileOrArrayOrDef)){return this.GetStyleHtml(cssFileOrArrayOrDef.split(','),markTemp);}else return A(this._GetUrlFixedCss(cssFileOrArrayOrDef),markTemp);}else{var E='';for (var i=0;i<cssFileOrArrayOrDef.length;i++) E+=C(cssFileOrArrayOrDef[i],markTemp);return E;}}})();FCKTools.GetElementDocument=function (A){return A.ownerDocument||A.document;};FCKTools.GetElementWindow=function(A){return this.GetDocumentWindow(this.GetElementDocument(A));};FCKTools.GetDocumentWindow=function(A){if (FCKBrowserInfo.IsSafari&&!A.parentWindow) this.FixDocumentParentWindow(window.top);return A.parentWindow||A.defaultView;};FCKTools.FixDocumentParentWindow=function(A){if (A.document) A.document.parentWindow=A;for (var i=0;i<A.frames.length;i++) FCKTools.FixDocumentParentWindow(A.frames[i]);};FCKTools.HTMLEncode=function(A){if (!A) return '';A=A.replace(/&/g,'&amp;');A=A.replace(/</g,'&lt;');A=A.replace(/>/g,'&gt;');return A;};FCKTools.HTMLDecode=function(A){if (!A) return '';A=A.replace(/&gt;/g,'>');A=A.replace(/&lt;/g,'<');A=A.replace(/&amp;/g,'&');return A;};FCKTools._ProcessLineBreaksForPMode=function(A,B,C,D,E){var F=0;var G="<p>";var H="</p>";var I="<br />";if (C){G="<li>";H="</li>";F=1;}while (D&&D!=A.FCK.EditorDocument.body){if (D.tagName.toLowerCase()=='p'){F=1;break;};D=D.parentNode;};for (var i=0;i<B.length;i++){var c=B.charAt(i);if (c=='\r') continue;if (c!='\n'){E.push(c);continue;};var n=B.charAt(i+1);if (n=='\r'){i++;n=B.charAt(i+1);};if (n=='\n'){i++;if (F) E.push(H);E.push(G);F=1;}else E.push(I);}};FCKTools._ProcessLineBreaksForDivMode=function(A,B,C,D,E){var F=0;var G="<div>";var H="</div>";if (C){G="<li>";H="</li>";F=1;}while (D&&D!=A.FCK.EditorDocument.body){if (D.tagName.toLowerCase()=='div'){F=1;break;};D=D.parentNode;};for (var i=0;i<B.length;i++){var c=B.charAt(i);if (c=='\r') continue;if (c!='\n'){E.push(c);continue;};if (F){if (E[E.length-1]==G){E.push("&nbsp;");};E.push(H);};E.push(G);F=1;};if (F) E.push(H);};FCKTools._ProcessLineBreaksForBrMode=function(A,B,C,D,E){var F=0;var G="<br />";var H="";if (C){G="<li>";H="</li>";F=1;};for (var i=0;i<B.length;i++){var c=B.charAt(i);if (c=='\r') continue;if (c!='\n'){E.push(c);continue;};if (F&&H.length) E.push (H);E.push(G);F=1;}};FCKTools.ProcessLineBreaks=function(A,B,C){var D=B.EnterMode.toLowerCase();var E=[];var F=0;var G=new A.FCKDomRange(A.FCK.EditorWindow);G.MoveToSelection();var H=G._Range.startContainer;while (H&&H.nodeType!=1) H=H.parentNode;if (H&&H.tagName.toLowerCase()=='li') F=1;if (D=='p') this._ProcessLineBreaksForPMode(A,C,F,H,E);else if (D=='div') this._ProcessLineBreaksForDivMode(A,C,F,H,E);else if (D=='br') this._ProcessLineBreaksForBrMode(A,C,F,H,E);return E.join("");};FCKTools.AddSelectOption=function(A,B,C){var D=FCKTools.GetElementDocument(A).createElement("OPTION");D.text=B;D.value=C;A.options.add(D);return D;};FCKTools.RunFunction=function(A,B,C,D){if (A) this.SetTimeout(A,0,B,C,D);};FCKTools.SetTimeout=function(A,B,C,D,E){return (E||window).setTimeout(function(){if (D) A.apply(C,[].concat(D));else A.apply(C);},B);};FCKTools.SetInterval=function(A,B,C,D,E){return (E||window).setInterval(function(){A.apply(C,D||[]);},B);};FCKTools.ConvertStyleSizeToHtml=function(A){return A.EndsWith('%')?A:parseInt(A,10);};FCKTools.ConvertHtmlSizeToStyle=function(A){return A.EndsWith('%')?A:(A+'px');};FCKTools.GetElementAscensor=function(A,B){var e=A;var C=","+B.toUpperCase()+",";while (e){if (C.indexOf(","+e.nodeName.toUpperCase()+",")!=-1) return e;e=e.parentNode;};return null;};FCKTools.CreateEventListener=function(A,B){var f=function(){var C=[];for (var i=0;i<arguments.length;i++) C.push(arguments[i]);A.apply(this,C.concat(B));};return f;};FCKTools.IsStrictMode=function(A){return ('CSS1Compat'==(A.compatMode||(FCKBrowserInfo.IsSafari?'CSS1Compat':null)));};FCKTools.ArgumentsToArray=function(A,B,C){B=B||0;C=C||A.length;var D=[];for (var i=B;i<B+C&&i<A.length;i++) D.push(A[i]);return D;};FCKTools.CloneObject=function(A){var B=function() {};B.prototype=A;return new B;};FCKTools.AppendBogusBr=function(A){if (!A) return;var B=this.GetLastItem(A.getElementsByTagName('br'));if (!B||(B.getAttribute('type',2)!='_moz'&&B.getAttribute('_moz_dirty')==null)){var C=this.GetElementDocument(A);if (FCKBrowserInfo.IsOpera) A.appendChild(C.createTextNode(''));else A.appendChild(this.CreateBogusBR(C));}};FCKTools.GetLastItem=function(A){if (A.length>0) return A[A.length-1];return null;};FCKTools.GetDocumentPosition=function(w,A){var x=0;var y=0;var B=A;var C=null;var D=FCKTools.GetElementWindow(B);while (B&&!(D==w&&(B==w.document.body||B==w.document.documentElement))){x+=B.offsetLeft-B.scrollLeft;y+=B.offsetTop-B.scrollTop;if (!FCKBrowserInfo.IsOpera){var E=C;while (E&&E!=B){x-=E.scrollLeft;y-=E.scrollTop;E=E.parentNode;}};C=B;if (B.offsetParent) B=B.offsetParent;else{if (D!=w){B=D.frameElement;C=null;if (B) D=B.contentWindow.parent;}else B=null;}};if (FCKDomTools.GetCurrentElementStyle(w.document.body,'position')!='static'||(FCKBrowserInfo.IsIE&&FCKDomTools.GetPositionedAncestor(A)==null)){x+=w.document.body.offsetLeft;y+=w.document.body.offsetTop;};return { "x":x,"y":y };};FCKTools.GetWindowPosition=function(w,A){var B=this.GetDocumentPosition(w,A);var C=FCKTools.GetScrollPosition(w);B.x-=C.X;B.y-=C.Y;return B;};FCKTools.ProtectFormStyles=function(A){if (!A||A.nodeType!=1||A.tagName.toLowerCase()!='form') return [];var B=[];var C=['style','className'];for (var i=0;i<C.length;i++){var D=C[i];if (A.elements.namedItem(D)){var E=A.elements.namedItem(D);B.push([E,E.nextSibling]);A.removeChild(E);}};return B;};FCKTools.RestoreFormStyles=function(A,B){if (!A||A.nodeType!=1||A.tagName.toLowerCase()!='form') return;if (B.length>0){for (var i=B.length-1;i>=0;i--){var C=B[i][0];var D=B[i][1];if (D) A.insertBefore(C,D);else A.appendChild(C);}}};FCKTools.GetNextNode=function(A,B){if (A.firstChild) return A.firstChild;else if (A.nextSibling) return A.nextSibling;else{var C=A.parentNode;while (C){if (C==B) return null;if (C.nextSibling) return C.nextSibling;else C=C.parentNode;}};return null;};FCKTools.GetNextTextNode=function(A,B,C){node=this.GetNextNode(A,B);if (C&&node&&C(node)) return null;while (node&&node.nodeType!=3){node=this.GetNextNode(node,B);if (C&&node&&C(node)) return null;};return node;};FCKTools.Merge=function(){var A=arguments;var o=A[0];for (var i=1;i<A.length;i++){var B=A[i];for (var p in B) o[p]=B[p];};return o;};FCKTools.IsArray=function(A){return (A instanceof Array);};FCKTools.AppendLengthProperty=function(A,B){var C=0;for (var n in A) C++;return A[B||'length']=C;};FCKTools.NormalizeCssText=function(A){var B=document.createElement('span');B.style.cssText=A;return B.style.cssText;};FCKTools.Bind=function(A,B){return function(){ return B.apply(A,arguments);};};FCKTools.GetVoidUrl=function(){if (FCK_IS_CUSTOM_DOMAIN) return "javascript: void( function(){document.open();document.write('<html><head><title></title></head><body></body></html>');document.domain = '"+FCK_RUNTIME_DOMAIN+"';document.close();}() ) ;";if (FCKBrowserInfo.IsIE){if (FCKBrowserInfo.IsIE7||!FCKBrowserInfo.IsIE6) return "";else return "javascript: '';";};return "javascript: void(0);";};FCKTools.ResetStyles=function(A){A.style.cssText='margin:0;padding:0;border:0;background-color:transparent;background-image:none;';};
+FCKTools.CancelEvent=function(e){return false;};FCKTools._AppendStyleSheet=function(A,B){return A.createStyleSheet(B).owningElement;};FCKTools.AppendStyleString=function(A,B){if (!B) return null;var s=A.createStyleSheet("");s.cssText=B;return s;};FCKTools.ClearElementAttributes=function(A){A.clearAttributes();};FCKTools.GetAllChildrenIds=function(A){var B=[];for (var i=0;i<A.all.length;i++){var C=A.all[i].id;if (C&&C.length>0) B[B.length]=C;};return B;};FCKTools.RemoveOuterTags=function(e){e.insertAdjacentHTML('beforeBegin',e.innerHTML);e.parentNode.removeChild(e);};FCKTools.CreateXmlObject=function(A){var B;switch (A){case 'XmlHttp':try { return new XMLHttpRequest();} catch (e) {};B=['MSXML2.XmlHttp','Microsoft.XmlHttp'];break;case 'DOMDocument':B=['MSXML2.DOMDocument','Microsoft.XmlDom'];break;};for (var i=0;i<2;i++){try { return new ActiveXObject(B[i]);}catch (e){}};if (FCKLang.NoActiveX){alert(FCKLang.NoActiveX);FCKLang.NoActiveX=null;};return null;};FCKTools.DisableSelection=function(A){A.unselectable='on';var e,i=0;while ((e=A.all[i++])){switch (e.tagName){case 'IFRAME':case 'TEXTAREA':case 'INPUT':case 'SELECT':break;default:e.unselectable='on';}}};FCKTools.GetScrollPosition=function(A){var B=A.document;var C={ X:B.documentElement.scrollLeft,Y:B.documentElement.scrollTop };if (C.X>0||C.Y>0) return C;return { X:B.body.scrollLeft,Y:B.body.scrollTop };};FCKTools.AddEventListener=function(A,B,C){A.attachEvent('on'+B,C);};FCKTools.RemoveEventListener=function(A,B,C){A.detachEvent('on'+B,C);};FCKTools.AddEventListenerEx=function(A,B,C,D){var o={};o.Source=A;o.Params=D||[];o.Listener=function(ev){return C.apply(o.Source,[ev].concat(o.Params));};if (FCK.IECleanup) FCK.IECleanup.AddItem(null,function() { o.Source=null;o.Params=null;});A.attachEvent('on'+B,o.Listener);A=null;D=null;};FCKTools.GetViewPaneSize=function(A){var B;var C=A.document.documentElement;if (C&&C.clientWidth) B=C;else B=A.document.body;if (B) return { Width:B.clientWidth,Height:B.clientHeight };else return { Width:0,Height:0 };};FCKTools.SaveStyles=function(A){var B=FCKTools.ProtectFormStyles(A);var C={};if (A.className.length>0){C.Class=A.className;A.className='';};var D=A.style.cssText;if (D.length>0){C.Inline=D;A.style.cssText='';};FCKTools.RestoreFormStyles(A,B);return C;};FCKTools.RestoreStyles=function(A,B){var C=FCKTools.ProtectFormStyles(A);A.className=B.Class||'';A.style.cssText=B.Inline||'';FCKTools.RestoreFormStyles(A,C);};FCKTools.RegisterDollarFunction=function(A){A.$=A.document.getElementById;};FCKTools.AppendElement=function(A,B){return A.appendChild(this.GetElementDocument(A).createElement(B));};FCKTools.ToLowerCase=function(A){return A.toLowerCase();};
+var FCKeditorAPI;function InitializeAPI(){var A=window.parent;if (!(FCKeditorAPI=A.FCKeditorAPI)){var B='window.FCKeditorAPI = {Version : "2.6.2",VersionBuild : "19417",Instances : new Object(),GetInstance : function( name ){return this.Instances[ name ];},_FormSubmit : function(){for ( var name in FCKeditorAPI.Instances ){var oEditor = FCKeditorAPI.Instances[ name ] ;if ( oEditor.GetParentForm && oEditor.GetParentForm() == this )oEditor.UpdateLinkedField() ;}this._FCKOriginalSubmit() ;},_FunctionQueue	: {Functions : new Array(),IsRunning : false,Add : function( f ){this.Functions.push( f );if ( !this.IsRunning )this.StartNext();},StartNext : function(){var aQueue = this.Functions ;if ( aQueue.length > 0 ){this.IsRunning = true;aQueue[0].call();}else this.IsRunning = false;},Remove : function( f ){var aQueue = this.Functions;var i = 0, fFunc;while( (fFunc = aQueue[ i ]) ){if ( fFunc == f )aQueue.splice( i,1 );i++ ;}this.StartNext();}}}';if (A.execScript) A.execScript(B,'JavaScript');else{if (FCKBrowserInfo.IsGecko10){eval.call(A,B);}else if(FCKBrowserInfo.IsAIR){FCKAdobeAIR.FCKeditorAPI_Evaluate(A,B);}else if (FCKBrowserInfo.IsSafari||FCKBrowserInfo.IsGecko19){var C=A.document;var D=C.createElement('script');D.appendChild(C.createTextNode(B));C.documentElement.appendChild(D);}else A.eval(B);};FCKeditorAPI=A.FCKeditorAPI;FCKeditorAPI.__Instances=FCKeditorAPI.Instances;};FCKeditorAPI.Instances[FCK.Name]=FCK;};function _AttachFormSubmitToAPI(){var A=FCK.GetParentForm();if (A){FCKTools.AddEventListener(A,'submit',FCK.UpdateLinkedField);if (!A._FCKOriginalSubmit&&(typeof(A.submit)=='function'||(!A.submit.tagName&&!A.submit.length))){A._FCKOriginalSubmit=A.submit;A.submit=FCKeditorAPI._FormSubmit;}}};function FCKeditorAPI_Cleanup(){if (window.FCKConfig&&FCKConfig.MsWebBrowserControlCompat&&!window.FCKUnloadFlag) return;delete FCKeditorAPI.Instances[FCK.Name];};function FCKeditorAPI_ConfirmCleanup(){if (window.FCKConfig&&FCKConfig.MsWebBrowserControlCompat) window.FCKUnloadFlag=true;};FCKTools.AddEventListener(window,'unload',FCKeditorAPI_Cleanup);FCKTools.AddEventListener(window,'beforeunload',FCKeditorAPI_ConfirmCleanup);
+var FCKImagePreloader=function(){this._Images=[];};FCKImagePreloader.prototype={AddImages:function(A){if (typeof(A)=='string') A=A.split(';');this._Images=this._Images.concat(A);},Start:function(){var A=this._Images;this._PreloadCount=A.length;for (var i=0;i<A.length;i++){var B=document.createElement('img');FCKTools.AddEventListenerEx(B,'load',_FCKImagePreloader_OnImage,this);FCKTools.AddEventListenerEx(B,'error',_FCKImagePreloader_OnImage,this);B.src=A[i];_FCKImagePreloader_ImageCache.push(B);}}};var _FCKImagePreloader_ImageCache=[];function _FCKImagePreloader_OnImage(A,B){if ((--B._PreloadCount)==0&&B.OnComplete) B.OnComplete();};
+var FCKRegexLib={AposEntity:/&apos;/gi,ObjectElements:/^(?:IMG|TABLE|TR|TD|TH|INPUT|SELECT|TEXTAREA|HR|OBJECT|A|UL|OL|LI)$/i,NamedCommands:/^(?:Cut|Copy|Paste|Print|SelectAll|RemoveFormat|Unlink|Undo|Redo|Bold|Italic|Underline|StrikeThrough|Subscript|Superscript|JustifyLeft|JustifyCenter|JustifyRight|JustifyFull|Outdent|Indent|InsertOrderedList|InsertUnorderedList|InsertHorizontalRule)$/i,BeforeBody:/(^[\s\S]*\<body[^\>]*\>)/i,AfterBody:/(\<\/body\>[\s\S]*$)/i,ToReplace:/___fcktoreplace:([\w]+)/ig,MetaHttpEquiv:/http-equiv\s*=\s*["']?([^"' ]+)/i,HasBaseTag:/<base /i,HasBodyTag:/<body[\s|>]/i,HtmlOpener:/<html\s?[^>]*>/i,HeadOpener:/<head\s?[^>]*>/i,HeadCloser:/<\/head\s*>/i,FCK_Class:/\s*FCK__[^ ]*(?=\s+|$)/,ElementName:/(^[a-z_:][\w.\-:]*\w$)|(^[a-z_]$)/,ForceSimpleAmpersand:/___FCKAmp___/g,SpaceNoClose:/\/>/g,EmptyParagraph:/^<(p|div|address|h\d|center)(?=[ >])[^>]*>\s*(<\/\1>)?$/,EmptyOutParagraph:/^<(p|div|address|h\d|center)(?=[ >])[^>]*>(?:\s*|&nbsp;)(<\/\1>)?$/,TagBody:/></,GeckoEntitiesMarker:/#\?-\:/g,ProtectUrlsImg:/<img(?=\s).*?\ssrc=((?:(?:\s*)("|').*?\2)|(?:[^"'][^ >]+))/gi,ProtectUrlsA:/<a(?=\s).*?\shref=((?:(?:\s*)("|').*?\2)|(?:[^"'][^ >]+))/gi,ProtectUrlsArea:/<area(?=\s).*?\shref=((?:(?:\s*)("|').*?\2)|(?:[^"'][^ >]+))/gi,Html4DocType:/HTML 4\.0 Transitional/i,DocTypeTag:/<!DOCTYPE[^>]*>/i,HtmlDocType:/DTD HTML/,TagsWithEvent:/<[^\>]+ on\w+[\s\r\n]*=[\s\r\n]*?('|")[\s\S]+?\>/g,EventAttributes:/\s(on\w+)[\s\r\n]*=[\s\r\n]*?('|")([\s\S]*?)\2/g,ProtectedEvents:/\s\w+_fckprotectedatt="([^"]+)"/g,StyleProperties:/\S+\s*:/g,InvalidSelfCloseTags:/(<(?!base|meta|link|hr|br|param|img|area|input)([a-zA-Z0-9:]+)[^>]*)\/>/gi,StyleVariableAttName:/#\(\s*("|')(.+?)\1[^\)]*\s*\)/g,RegExp:/^\/(.*)\/([gim]*)$/,HtmlTag:/<[^\s<>](?:"[^"]*"|'[^']*'|[^<])*>/};
+var FCKListsLib={BlockElements:{ address:1,blockquote:1,center:1,div:1,dl:1,fieldset:1,form:1,h1:1,h2:1,h3:1,h4:1,h5:1,h6:1,hr:1,marquee:1,noscript:1,ol:1,p:1,pre:1,script:1,table:1,ul:1 },NonEmptyBlockElements:{ p:1,div:1,form:1,h1:1,h2:1,h3:1,h4:1,h5:1,h6:1,address:1,pre:1,ol:1,ul:1,li:1,td:1,th:1 },InlineChildReqElements:{ abbr:1,acronym:1,b:1,bdo:1,big:1,cite:1,code:1,del:1,dfn:1,em:1,font:1,i:1,ins:1,label:1,kbd:1,q:1,samp:1,small:1,span:1,strike:1,strong:1,sub:1,sup:1,tt:1,u:1,'var':1 },InlineNonEmptyElements:{ a:1,abbr:1,acronym:1,b:1,bdo:1,big:1,cite:1,code:1,del:1,dfn:1,em:1,font:1,i:1,ins:1,label:1,kbd:1,q:1,samp:1,small:1,span:1,strike:1,strong:1,sub:1,sup:1,tt:1,u:1,'var':1 },EmptyElements:{ base:1,col:1,meta:1,link:1,hr:1,br:1,param:1,img:1,area:1,input:1 },PathBlockElements:{ address:1,blockquote:1,dl:1,h1:1,h2:1,h3:1,h4:1,h5:1,h6:1,p:1,pre:1,li:1,dt:1,de:1 },PathBlockLimitElements:{ body:1,div:1,td:1,th:1,caption:1,form:1 },StyleBlockElements:{ address:1,div:1,h1:1,h2:1,h3:1,h4:1,h5:1,h6:1,p:1,pre:1 },StyleObjectElements:{ img:1,hr:1,li:1,table:1,tr:1,td:1,embed:1,object:1,ol:1,ul:1 },NonEditableElements:{ button:1,option:1,script:1,iframe:1,textarea:1,object:1,embed:1,map:1,applet:1 },BlockBoundaries:{ p:1,div:1,h1:1,h2:1,h3:1,h4:1,h5:1,h6:1,hr:1,address:1,pre:1,ol:1,ul:1,li:1,dt:1,de:1,table:1,thead:1,tbody:1,tfoot:1,tr:1,th:1,td:1,caption:1,col:1,colgroup:1,blockquote:1,body:1 },ListBoundaries:{ p:1,div:1,h1:1,h2:1,h3:1,h4:1,h5:1,h6:1,hr:1,address:1,pre:1,ol:1,ul:1,li:1,dt:1,de:1,table:1,thead:1,tbody:1,tfoot:1,tr:1,th:1,td:1,caption:1,col:1,colgroup:1,blockquote:1,body:1,br:1 }};
+var FCKLanguageManager=FCK.Language={AvailableLanguages:{af:'Afrikaans',ar:'Arabic',bg:'Bulgarian',bn:'Bengali/Bangla',bs:'Bosnian',ca:'Catalan',cs:'Czech',da:'Danish',de:'German',el:'Greek',en:'English','en-au':'English (Australia)','en-ca':'English (Canadian)','en-uk':'English (United Kingdom)',eo:'Esperanto',es:'Spanish',et:'Estonian',eu:'Basque',fa:'Persian',fi:'Finnish',fo:'Faroese',fr:'French','fr-ca':'French (Canada)',gl:'Galician',gu:'Gujarati',he:'Hebrew',hi:'Hindi',hr:'Croatian',hu:'Hungarian',it:'Italian',ja:'Japanese',km:'Khmer',ko:'Korean',lt:'Lithuanian',lv:'Latvian',mn:'Mongolian',ms:'Malay',nb:'Norwegian Bokmal',nl:'Dutch',no:'Norwegian',pl:'Polish',pt:'Portuguese (Portugal)','pt-br':'Portuguese (Brazil)',ro:'Romanian',ru:'Russian',sk:'Slovak',sl:'Slovenian',sr:'Serbian (Cyrillic)','sr-latn':'Serbian (Latin)',sv:'Swedish',th:'Thai',tr:'Turkish',uk:'Ukrainian',vi:'Vietnamese',zh:'Chinese Traditional','zh-cn':'Chinese Simplified'},GetActiveLanguage:function(){if (FCKConfig.AutoDetectLanguage){var A;if (navigator.userLanguage) A=navigator.userLanguage.toLowerCase();else if (navigator.language) A=navigator.language.toLowerCase();else{return FCKConfig.DefaultLanguage;};if (A.length>=5){A=A.substr(0,5);if (this.AvailableLanguages[A]) return A;};if (A.length>=2){A=A.substr(0,2);if (this.AvailableLanguages[A]) return A;}};return this.DefaultLanguage;},TranslateElements:function(A,B,C,D){var e=A.getElementsByTagName(B);var E,s;for (var i=0;i<e.length;i++){if ((E=e[i].getAttribute('fckLang'))){if ((s=FCKLang[E])){if (D) s=FCKTools.HTMLEncode(s);e[i][C]=s;}}}},TranslatePage:function(A){this.TranslateElements(A,'INPUT','value');this.TranslateElements(A,'SPAN','innerHTML');this.TranslateElements(A,'LABEL','innerHTML');this.TranslateElements(A,'OPTION','innerHTML',true);this.TranslateElements(A,'LEGEND','innerHTML');},Initialize:function(){if (this.AvailableLanguages[FCKConfig.DefaultLanguage]) this.DefaultLanguage=FCKConfig.DefaultLanguage;else this.DefaultLanguage='en';this.ActiveLanguage={};this.ActiveLanguage.Code=this.GetActiveLanguage();this.ActiveLanguage.Name=this.AvailableLanguages[this.ActiveLanguage.Code];}};
+var FCKXHtmlEntities={};FCKXHtmlEntities.Initialize=function(){if (FCKXHtmlEntities.Entities) return;var A='';var B,e;if (FCKConfig.ProcessHTMLEntities){FCKXHtmlEntities.Entities={' ':'nbsp','¡':'iexcl','¢':'cent','£':'pound','¤':'curren','¥':'yen','¦':'brvbar','§':'sect','¨':'uml','©':'copy','ª':'ordf','«':'laquo','¬':'not','­':'shy','®':'reg','¯':'macr','°':'deg','±':'plusmn','²':'sup2','³':'sup3','´':'acute','µ':'micro','¶':'para','·':'middot','¸':'cedil','¹':'sup1','º':'ordm','»':'raquo','¼':'frac14','½':'frac12','¾':'frac34','¿':'iquest','×':'times','÷':'divide','ƒ':'fnof','•':'bull','…':'hellip','′':'prime','″':'Prime','‾':'oline','⁄':'frasl','℘':'weierp','ℑ':'image','ℜ':'real','™':'trade','ℵ':'alefsym','←':'larr','↑':'uarr','→':'rarr','↓':'darr','↔':'harr','↵':'crarr','⇐':'lArr','⇑':'uArr','⇒':'rArr','⇓':'dArr','⇔':'hArr','∀':'forall','∂':'part','∃':'exist','∅':'empty','∇':'nabla','∈':'isin','∉':'notin','∋':'ni','∏':'prod','∑':'sum','−':'minus','∗':'lowast','√':'radic','∝':'prop','∞':'infin','∠':'ang','∧':'and','∨':'or','∩':'cap','∪':'cup','∫':'int','∴':'there4','∼':'sim','≅':'cong','≈':'asymp','≠':'ne','≡':'equiv','≤':'le','≥':'ge','⊂':'sub','⊃':'sup','⊄':'nsub','⊆':'sube','⊇':'supe','⊕':'oplus','⊗':'otimes','⊥':'perp','⋅':'sdot','\u2308':'lceil','\u2309':'rceil','\u230a':'lfloor','\u230b':'rfloor','\u2329':'lang','\u232a':'rang','◊':'loz','♠':'spades','♣':'clubs','♥':'hearts','♦':'diams','"':'quot','ˆ':'circ','˜':'tilde',' ':'ensp',' ':'emsp',' ':'thinsp','‌':'zwnj','‍':'zwj','‎':'lrm','‏':'rlm','–':'ndash','—':'mdash','‘':'lsquo','’':'rsquo','‚':'sbquo','“':'ldquo','”':'rdquo','„':'bdquo','†':'dagger','‡':'Dagger','‰':'permil','‹':'lsaquo','›':'rsaquo','€':'euro'};for (e in FCKXHtmlEntities.Entities) A+=e;if (FCKConfig.IncludeLatinEntities){B={'À':'Agrave','Á':'Aacute','Â':'Acirc','Ã':'Atilde','Ä':'Auml','Å':'Aring','Æ':'AElig','Ç':'Ccedil','È':'Egrave','É':'Eacute','Ê':'Ecirc','Ë':'Euml','Ì':'Igrave','Í':'Iacute','Î':'Icirc','Ï':'Iuml','Ð':'ETH','Ñ':'Ntilde','Ò':'Ograve','Ó':'Oacute','Ô':'Ocirc','Õ':'Otilde','Ö':'Ouml','Ø':'Oslash','Ù':'Ugrave','Ú':'Uacute','Û':'Ucirc','Ü':'Uuml','Ý':'Yacute','Þ':'THORN','ß':'szlig','à':'agrave','á':'aacute','â':'acirc','ã':'atilde','ä':'auml','å':'aring','æ':'aelig','ç':'ccedil','è':'egrave','é':'eacute','ê':'ecirc','ë':'euml','ì':'igrave','í':'iacute','î':'icirc','ï':'iuml','ð':'eth','ñ':'ntilde','ò':'ograve','ó':'oacute','ô':'ocirc','õ':'otilde','ö':'ouml','ø':'oslash','ù':'ugrave','ú':'uacute','û':'ucirc','ü':'uuml','ý':'yacute','þ':'thorn','ÿ':'yuml','Œ':'OElig','œ':'oelig','Š':'Scaron','š':'scaron','Ÿ':'Yuml'};for (e in B){FCKXHtmlEntities.Entities[e]=B[e];A+=e;};B=null;};if (FCKConfig.IncludeGreekEntities){B={'Α':'Alpha','Β':'Beta','Γ':'Gamma','Δ':'Delta','Ε':'Epsilon','Ζ':'Zeta','Η':'Eta','Θ':'Theta','Ι':'Iota','Κ':'Kappa','Λ':'Lambda','Μ':'Mu','Ν':'Nu','Ξ':'Xi','Ο':'Omicron','Π':'Pi','Ρ':'Rho','Σ':'Sigma','Τ':'Tau','Υ':'Upsilon','Φ':'Phi','Χ':'Chi','Ψ':'Psi','Ω':'Omega','α':'alpha','β':'beta','γ':'gamma','δ':'delta','ε':'epsilon','ζ':'zeta','η':'eta','θ':'theta','ι':'iota','κ':'kappa','λ':'lambda','μ':'mu','ν':'nu','ξ':'xi','ο':'omicron','π':'pi','ρ':'rho','ς':'sigmaf','σ':'sigma','τ':'tau','υ':'upsilon','φ':'phi','χ':'chi','ψ':'psi','ω':'omega','\u03d1':'thetasym','\u03d2':'upsih','\u03d6':'piv'};for (e in B){FCKXHtmlEntities.Entities[e]=B[e];A+=e;};B=null;}}else{FCKXHtmlEntities.Entities={};A=' ';};var C='['+A+']';if (FCKConfig.ProcessNumericEntities) C='[^ -~]|'+C;var D=FCKConfig.AdditionalNumericEntities;if (D&&D.length>0) C+='|'+FCKConfig.AdditionalNumericEntities;FCKXHtmlEntities.EntitiesRegex=new RegExp(C,'g');};
+var FCKXHtml={};FCKXHtml.CurrentJobNum=0;FCKXHtml.GetXHTML=function(A,B,C){FCKDomTools.CheckAndRemovePaddingNode(FCKTools.GetElementDocument(A),FCKConfig.EnterMode);FCKXHtmlEntities.Initialize();this._NbspEntity=(FCKConfig.ProcessHTMLEntities?'nbsp':'#160');var D=FCK.IsDirty();FCKXHtml.SpecialBlocks=[];this.XML=FCKTools.CreateXmlObject('DOMDocument');this.MainNode=this.XML.appendChild(this.XML.createElement('xhtml'));FCKXHtml.CurrentJobNum++;if (B) this._AppendNode(this.MainNode,A);else this._AppendChildNodes(this.MainNode,A,false);var E=this._GetMainXmlString();this.XML=null;if (FCKBrowserInfo.IsSafari) E=E.replace(/^<xhtml.*?>/,'<xhtml>');E=E.substr(7,E.length-15).Trim();if (FCKConfig.DocType.length>0&&FCKRegexLib.HtmlDocType.test(FCKConfig.DocType)) E=E.replace(FCKRegexLib.SpaceNoClose,'>');else E=E.replace(FCKRegexLib.SpaceNoClose,' />');if (FCKConfig.ForceSimpleAmpersand) E=E.replace(FCKRegexLib.ForceSimpleAmpersand,'&');if (C) E=FCKCodeFormatter.Format(E);for (var i=0;i<FCKXHtml.SpecialBlocks.length;i++){var F=new RegExp('___FCKsi___'+i);E=E.replace(F,FCKXHtml.SpecialBlocks[i]);};E=E.replace(FCKRegexLib.GeckoEntitiesMarker,'&');if (!D) FCK.ResetIsDirty();FCKDomTools.EnforcePaddingNode(FCKTools.GetElementDocument(A),FCKConfig.EnterMode);return E;};FCKXHtml._AppendAttribute=function(A,B,C){try{if (C==undefined||C==null) C='';else if (C.replace){if (FCKConfig.ForceSimpleAmpersand) C=C.replace(/&/g,'___FCKAmp___');C=C.replace(FCKXHtmlEntities.EntitiesRegex,FCKXHtml_GetEntity);};var D=this.XML.createAttribute(B);D.value=C;A.attributes.setNamedItem(D);}catch (e){}};FCKXHtml._AppendChildNodes=function(A,B,C){var D=B.firstChild;while (D){this._AppendNode(A,D);D=D.nextSibling;};if (C&&B.tagName&&B.tagName.toLowerCase()!='pre'){FCKDomTools.TrimNode(A);if (FCKConfig.FillEmptyBlocks){var E=A.lastChild;if (E&&E.nodeType==1&&E.nodeName=='br') this._AppendEntity(A,this._NbspEntity);}};if (A.childNodes.length==0){if (C&&FCKConfig.FillEmptyBlocks){this._AppendEntity(A,this._NbspEntity);return A;};var F=A.nodeName;if (FCKListsLib.InlineChildReqElements[F]) return null;if (!FCKListsLib.EmptyElements[F]) A.appendChild(this.XML.createTextNode(''));};return A;};FCKXHtml._AppendNode=function(A,B){if (!B) return false;switch (B.nodeType){case 1:if (FCKBrowserInfo.IsGecko&&B.tagName.toLowerCase()=='br'&&B.parentNode.tagName.toLowerCase()=='pre'){var C='\r';if (B==B.parentNode.firstChild) C+='\r';return FCKXHtml._AppendNode(A,this.XML.createTextNode(C));};if (B.getAttribute('_fckfakelement')) return FCKXHtml._AppendNode(A,FCK.GetRealElement(B));if (FCKBrowserInfo.IsGecko&&B.nextSibling&&(B.hasAttribute('_moz_editor_bogus_node')||B.getAttribute('type')=='_moz')) return false;if (B.getAttribute('_fcktemp')) return false;var D=B.tagName.toLowerCase();if (FCKBrowserInfo.IsIE){if (B.scopeName&&B.scopeName!='HTML'&&B.scopeName!='FCK') D=B.scopeName.toLowerCase()+':'+D;}else{if (D.StartsWith('fck:')) D=D.Remove(0,4);};if (!FCKRegexLib.ElementName.test(D)) return false;if (B._fckxhtmljob&&B._fckxhtmljob==FCKXHtml.CurrentJobNum) return false;var E=this.XML.createElement(D);FCKXHtml._AppendAttributes(A,B,E,D);B._fckxhtmljob=FCKXHtml.CurrentJobNum;var F=FCKXHtml.TagProcessors[D];if (F) E=F(E,B,A);else E=this._AppendChildNodes(E,B,Boolean(FCKListsLib.NonEmptyBlockElements[D]));if (!E) return false;A.appendChild(E);break;case 3:if (B.parentNode&&B.parentNode.nodeName.IEquals('pre')) return this._AppendTextNode(A,B.nodeValue);return this._AppendTextNode(A,B.nodeValue.ReplaceNewLineChars(' '));case 8:if (FCKBrowserInfo.IsIE&&!B.innerHTML) break;try { A.appendChild(this.XML.createComment(B.nodeValue));}catch (e) {/*Do nothing... probably this is a wrong format comment.*/};break;default:A.appendChild(this.XML.createComment("Element not supported - Type: "+B.nodeType+" Name: "+B.nodeName));break;};return true;};FCKXHtml._AppendSpecialItem=function(A){return '___FCKsi___'+FCKXHtml.SpecialBlocks.AddItem(A);};FCKXHtml._AppendEntity=function(A,B){A.appendChild(this.XML.createTextNode('#?-:'+B+';'));};FCKXHtml._AppendTextNode=function(A,B){var C=B.length>0;if (C) A.appendChild(this.XML.createTextNode(B.replace(FCKXHtmlEntities.EntitiesRegex,FCKXHtml_GetEntity)));return C;};function FCKXHtml_GetEntity(A){var B=FCKXHtmlEntities.Entities[A]||('#'+A.charCodeAt(0));return '#?-:'+B+';';};FCKXHtml.TagProcessors={a:function(A,B){if (B.innerHTML.Trim().length==0&&!B.name) return false;var C=B.getAttribute('_fcksavedurl');if (C!=null) FCKXHtml._AppendAttribute(A,'href',C);if (FCKBrowserInfo.IsIE){if (B.name) FCKXHtml._AppendAttribute(A,'name',B.name);};A=FCKXHtml._AppendChildNodes(A,B,false);return A;},area:function(A,B){var C=B.getAttribute('_fcksavedurl');if (C!=null) FCKXHtml._AppendAttribute(A,'href',C);if (FCKBrowserInfo.IsIE){if (!A.attributes.getNamedItem('coords')){var D=B.getAttribute('coords',2);if (D&&D!='0,0,0') FCKXHtml._AppendAttribute(A,'coords',D);};if (!A.attributes.getNamedItem('shape')){var E=B.getAttribute('shape',2);if (E&&E.length>0) FCKXHtml._AppendAttribute(A,'shape',E.toLowerCase());}};return A;},body:function(A,B){A=FCKXHtml._AppendChildNodes(A,B,false);A.removeAttribute('spellcheck');return A;},iframe:function(A,B){var C=B.innerHTML;if (FCKBrowserInfo.IsGecko) C=FCKTools.HTMLDecode(C);C=C.replace(/\s_fcksavedurl="[^"]*"/g,'');A.appendChild(FCKXHtml.XML.createTextNode(FCKXHtml._AppendSpecialItem(C)));return A;},img:function(A,B){if (!A.attributes.getNamedItem('alt')) FCKXHtml._AppendAttribute(A,'alt','');var C=B.getAttribute('_fcksavedurl');if (C!=null) FCKXHtml._AppendAttribute(A,'src',C);if (B.style.width) A.removeAttribute('width');if (B.style.height) A.removeAttribute('height');return A;},li:function(A,B,C){if (C.nodeName.IEquals(['ul','ol'])) return FCKXHtml._AppendChildNodes(A,B,true);var D=FCKXHtml.XML.createElement('ul');B._fckxhtmljob=null;do{FCKXHtml._AppendNode(D,B);do{B=FCKDomTools.GetNextSibling(B);} while (B&&B.nodeType==3&&B.nodeValue.Trim().length==0)}	while (B&&B.nodeName.toLowerCase()=='li') return D;},ol:function(A,B,C){if (B.innerHTML.Trim().length==0) return false;var D=C.lastChild;if (D&&D.nodeType==3) D=D.previousSibling;if (D&&D.nodeName.toUpperCase()=='LI'){B._fckxhtmljob=null;FCKXHtml._AppendNode(D,B);return false;};A=FCKXHtml._AppendChildNodes(A,B);return A;},pre:function (A,B){var C=B.firstChild;if (C&&C.nodeType==3) A.appendChild(FCKXHtml.XML.createTextNode(FCKXHtml._AppendSpecialItem('\r\n')));FCKXHtml._AppendChildNodes(A,B,true);return A;},script:function(A,B){if (!A.attributes.getNamedItem('type')) FCKXHtml._AppendAttribute(A,'type','text/javascript');A.appendChild(FCKXHtml.XML.createTextNode(FCKXHtml._AppendSpecialItem(B.text)));return A;},span:function(A,B){if (B.innerHTML.length==0) return false;A=FCKXHtml._AppendChildNodes(A,B,false);return A;},style:function(A,B){if (!A.attributes.getNamedItem('type')) FCKXHtml._AppendAttribute(A,'type','text/css');var C=B.innerHTML;if (FCKBrowserInfo.IsIE) C=C.replace(/^(\r\n|\n|\r)/,'');A.appendChild(FCKXHtml.XML.createTextNode(FCKXHtml._AppendSpecialItem(C)));return A;},title:function(A,B){A.appendChild(FCKXHtml.XML.createTextNode(FCK.EditorDocument.title));return A;}};FCKXHtml.TagProcessors.ul=FCKXHtml.TagProcessors.ol;
+FCKXHtml._GetMainXmlString=function(){return this.MainNode.xml;};FCKXHtml._AppendAttributes=function(A,B,C,D){var E=B.attributes;for (var n=0;n<E.length;n++){var F=E[n];if (F.specified){var G=F.nodeName.toLowerCase();var H;if (G.StartsWith('_fck')) continue;else if (G=='style'){var I=FCKTools.ProtectFormStyles(B);H=B.style.cssText.replace(FCKRegexLib.StyleProperties,FCKTools.ToLowerCase);FCKTools.RestoreFormStyles(B,I);}else if (G=='class'){H=F.nodeValue.replace(FCKRegexLib.FCK_Class,'');if (H.length==0) continue;}else if (G.indexOf('on')==0) H=F.nodeValue;else if (D=='body'&&G=='contenteditable') continue;else if (F.nodeValue===true) H=G;else{try{H=B.getAttribute(G,2);}catch (e) {}};this._AppendAttribute(C,G,H||F.nodeValue);}}};FCKXHtml.TagProcessors['div']=function(A,B){if (B.align.length>0) FCKXHtml._AppendAttribute(A,'align',B.align);A=FCKXHtml._AppendChildNodes(A,B,true);return A;};FCKXHtml.TagProcessors['font']=function(A,B){if (A.attributes.length==0) A=FCKXHtml.XML.createDocumentFragment();A=FCKXHtml._AppendChildNodes(A,B);return A;};FCKXHtml.TagProcessors['form']=function(A,B){if (B.acceptCharset&&B.acceptCharset.length>0&&B.acceptCharset!='UNKNOWN') FCKXHtml._AppendAttribute(A,'accept-charset',B.acceptCharset);var C=B.attributes['name'];if (C&&C.value.length>0) FCKXHtml._AppendAttribute(A,'name',C.value);A=FCKXHtml._AppendChildNodes(A,B,true);return A;};FCKXHtml.TagProcessors['input']=function(A,B){if (B.name) FCKXHtml._AppendAttribute(A,'name',B.name);if (B.value&&!A.attributes.getNamedItem('value')) FCKXHtml._AppendAttribute(A,'value',B.value);if (!A.attributes.getNamedItem('type')) FCKXHtml._AppendAttribute(A,'type','text');return A;};FCKXHtml.TagProcessors['label']=function(A,B){if (B.htmlFor.length>0) FCKXHtml._AppendAttribute(A,'for',B.htmlFor);A=FCKXHtml._AppendChildNodes(A,B);return A;};FCKXHtml.TagProcessors['map']=function(A,B){if (!A.attributes.getNamedItem('name')){var C=B.name;if (C) FCKXHtml._AppendAttribute(A,'name',C);};A=FCKXHtml._AppendChildNodes(A,B,true);return A;};FCKXHtml.TagProcessors['meta']=function(A,B){var C=A.attributes.getNamedItem('http-equiv');if (C==null||C.value.length==0){var D=B.outerHTML.match(FCKRegexLib.MetaHttpEquiv);if (D){D=D[1];FCKXHtml._AppendAttribute(A,'http-equiv',D);}};return A;};FCKXHtml.TagProcessors['option']=function(A,B){if (B.selected&&!A.attributes.getNamedItem('selected')) FCKXHtml._AppendAttribute(A,'selected','selected');A=FCKXHtml._AppendChildNodes(A,B);return A;};FCKXHtml.TagProcessors['textarea']=FCKXHtml.TagProcessors['select']=function(A,B){if (B.name) FCKXHtml._AppendAttribute(A,'name',B.name);A=FCKXHtml._AppendChildNodes(A,B);return A;};
+var FCKCodeFormatter={};FCKCodeFormatter.Init=function(){var A=this.Regex={};A.BlocksOpener=/\<(P|DIV|H1|H2|H3|H4|H5|H6|ADDRESS|PRE|OL|UL|LI|TITLE|META|LINK|BASE|SCRIPT|LINK|TD|TH|AREA|OPTION)[^\>]*\>/gi;A.BlocksCloser=/\<\/(P|DIV|H1|H2|H3|H4|H5|H6|ADDRESS|PRE|OL|UL|LI|TITLE|META|LINK|BASE|SCRIPT|LINK|TD|TH|AREA|OPTION)[^\>]*\>/gi;A.NewLineTags=/\<(BR|HR)[^\>]*\>/gi;A.MainTags=/\<\/?(HTML|HEAD|BODY|FORM|TABLE|TBODY|THEAD|TR)[^\>]*\>/gi;A.LineSplitter=/\s*\n+\s*/g;A.IncreaseIndent=/^\<(HTML|HEAD|BODY|FORM|TABLE|TBODY|THEAD|TR|UL|OL)[ \/\>]/i;A.DecreaseIndent=/^\<\/(HTML|HEAD|BODY|FORM|TABLE|TBODY|THEAD|TR|UL|OL)[ \>]/i;A.FormatIndentatorRemove=new RegExp('^'+FCKConfig.FormatIndentator);A.ProtectedTags=/(<PRE[^>]*>)([\s\S]*?)(<\/PRE>)/gi;};FCKCodeFormatter._ProtectData=function(A,B,C,D){return B+'___FCKpd___'+FCKCodeFormatter.ProtectedData.AddItem(C)+D;};FCKCodeFormatter.Format=function(A){if (!this.Regex) this.Init();FCKCodeFormatter.ProtectedData=[];var B=A.replace(this.Regex.ProtectedTags,FCKCodeFormatter._ProtectData);B=B.replace(this.Regex.BlocksOpener,'\n$&');B=B.replace(this.Regex.BlocksCloser,'$&\n');B=B.replace(this.Regex.NewLineTags,'$&\n');B=B.replace(this.Regex.MainTags,'\n$&\n');var C='';var D=B.split(this.Regex.LineSplitter);B='';for (var i=0;i<D.length;i++){var E=D[i];if (E.length==0) continue;if (this.Regex.DecreaseIndent.test(E)) C=C.replace(this.Regex.FormatIndentatorRemove,'');B+=C+E+'\n';if (this.Regex.IncreaseIndent.test(E)) C+=FCKConfig.FormatIndentator;};for (var j=0;j<FCKCodeFormatter.ProtectedData.length;j++){var F=new RegExp('___FCKpd___'+j);B=B.replace(F,FCKCodeFormatter.ProtectedData[j].replace(/\$/g,'$$$$'));};return B.Trim();};
+var FCKUndo={};FCKUndo.SavedData=[];FCKUndo.CurrentIndex=-1;FCKUndo.TypesCount=0;FCKUndo.Changed=false;FCKUndo.MaxTypes=25;FCKUndo.Typing=false;FCKUndo.SaveLocked=false;FCKUndo._GetBookmark=function(){FCKSelection.Restore();var A=new FCKDomRange(FCK.EditorWindow);try{A.MoveToSelection();}catch (e){return null;};if (FCKBrowserInfo.IsIE){var B=A.CreateBookmark();var C=FCK.EditorDocument.body.innerHTML;A.MoveToBookmark(B);return [B,C];};return A.CreateBookmark2();};FCKUndo._SelectBookmark=function(A){if (!A) return;var B=new FCKDomRange(FCK.EditorWindow);if (A instanceof Object){if (FCKBrowserInfo.IsIE) B.MoveToBookmark(A[0]);else B.MoveToBookmark2(A);try{B.Select();}catch (e){B.MoveToPosition(FCK.EditorDocument.body,4);B.Select();}}};FCKUndo._CompareCursors=function(A,B){for (var i=0;i<Math.min(A.length,B.length);i++){if (A[i]<B[i]) return-1;else if (A[i]>B[i]) return 1;};if (A.length<B.length) return-1;else if (A.length>B.length) return 1;return 0;};FCKUndo._CheckIsBookmarksEqual=function(A,B){if (!(A&&B)) return false;if (FCKBrowserInfo.IsIE){var C=A[1].search(A[0].StartId);var D=B[1].search(B[0].StartId);var E=A[1].search(A[0].EndId);var F=B[1].search(B[0].EndId);return C==D&&E==F;}else{return this._CompareCursors(A.Start,B.Start)==0&&this._CompareCursors(A.End,B.End)==0;}};FCKUndo.SaveUndoStep=function(){if (FCK.EditMode!=0||this.SaveLocked) return;if (this.SavedData.length) this.Changed=true;var A=FCK.EditorDocument.body.innerHTML;var B=this._GetBookmark();this.SavedData=this.SavedData.slice(0,this.CurrentIndex+1);if (this.CurrentIndex>0&&A==this.SavedData[this.CurrentIndex][0]&&this._CheckIsBookmarksEqual(B,this.SavedData[this.CurrentIndex][1])) return;else if (this.CurrentIndex==0&&this.SavedData.length&&A==this.SavedData[0][0]){this.SavedData[0][1]=B;return;};if (this.CurrentIndex+1>=FCKConfig.MaxUndoLevels) this.SavedData.shift();else this.CurrentIndex++;this.SavedData[this.CurrentIndex]=[A,B];FCK.Events.FireEvent("OnSelectionChange");};FCKUndo.CheckUndoState=function(){return (this.Changed||this.CurrentIndex>0);};FCKUndo.CheckRedoState=function(){return (this.CurrentIndex<(this.SavedData.length-1));};FCKUndo.Undo=function(){if (this.CheckUndoState()){if (this.CurrentIndex==(this.SavedData.length-1)){this.SaveUndoStep();};this._ApplyUndoLevel(--this.CurrentIndex);FCK.Events.FireEvent("OnSelectionChange");}};FCKUndo.Redo=function(){if (this.CheckRedoState()){this._ApplyUndoLevel(++this.CurrentIndex);FCK.Events.FireEvent("OnSelectionChange");}};FCKUndo._ApplyUndoLevel=function(A){var B=this.SavedData[A];if (!B) return;if (FCKBrowserInfo.IsIE){if (B[1]&&B[1][1]) FCK.SetInnerHtml(B[1][1]);else FCK.SetInnerHtml(B[0]);}else FCK.EditorDocument.body.innerHTML=B[0];this._SelectBookmark(B[1]);this.TypesCount=0;this.Changed=false;this.Typing=false;};
+var FCKEditingArea=function(A){this.TargetElement=A;this.Mode=0;if (FCK.IECleanup) FCK.IECleanup.AddItem(this,FCKEditingArea_Cleanup);};FCKEditingArea.prototype.Start=function(A,B){var C=this.TargetElement;var D=FCKTools.GetElementDocument(C);while(C.firstChild) C.removeChild(C.firstChild);if (this.Mode==0){if (FCK_IS_CUSTOM_DOMAIN) A='<script>document.domain="'+FCK_RUNTIME_DOMAIN+'";</script>'+A;if (FCKBrowserInfo.IsIE) A=A.replace(/(<base[^>]*?)\s*\/?>(?!\s*<\/base>)/gi,'$1></base>');else if (!B){var E=A.match(FCKRegexLib.BeforeBody);var F=A.match(FCKRegexLib.AfterBody);if (E&&F){var G=A.substr(E[1].length,A.length-E[1].length-F[1].length);A=E[1]+'&nbsp;'+F[1];if (FCKBrowserInfo.IsGecko&&(G.length==0||FCKRegexLib.EmptyParagraph.test(G))) G='<br type="_moz">';this._BodyHTML=G;}else this._BodyHTML=A;};var H=this.IFrame=D.createElement('iframe');var I='<script type="text/javascript" _fcktemp="true">window.onerror=function(){return true;};</script>';H.frameBorder=0;H.style.width=H.style.height='100%';if (FCK_IS_CUSTOM_DOMAIN&&FCKBrowserInfo.IsIE){window._FCKHtmlToLoad=A.replace(/<head>/i,'<head>'+I);H.src='javascript:void( (function(){document.open() ;document.domain="'+document.domain+'" ;document.write( window.parent._FCKHtmlToLoad );document.close() ;window.parent._FCKHtmlToLoad = null ;})() )';}else if (!FCKBrowserInfo.IsGecko){H.src='javascript:void(0)';};C.appendChild(H);this.Window=H.contentWindow;if (!FCK_IS_CUSTOM_DOMAIN||!FCKBrowserInfo.IsIE){var J=this.Window.document;J.open();J.write(A.replace(/<head>/i,'<head>'+I));J.close();};if (FCKBrowserInfo.IsAIR) FCKAdobeAIR.EditingArea_Start(J,A);if (FCKBrowserInfo.IsGecko10&&!B){this.Start(A,true);return;};if (H.readyState&&H.readyState!='completed'){var K=this;(H.onreadystatechange=function(){if (H.readyState=='complete'){H.onreadystatechange=null;K.Window._FCKEditingArea=K;FCKEditingArea_CompleteStart.call(K.Window);}})();}else{this.Window._FCKEditingArea=this;if (FCKBrowserInfo.IsGecko10) this.Window.setTimeout(FCKEditingArea_CompleteStart,500);else FCKEditingArea_CompleteStart.call(this.Window);}}else{var L=this.Textarea=D.createElement('textarea');L.className='SourceField';L.dir='ltr';FCKDomTools.SetElementStyles(L,{width:'100%',height:'100%',border:'none',resize:'none',outline:'none'});C.appendChild(L);L.value=A;FCKTools.RunFunction(this.OnLoad);}};function FCKEditingArea_CompleteStart(){if (!this.document.body){this.setTimeout(FCKEditingArea_CompleteStart,50);return;};var A=this._FCKEditingArea;A.Document=A.Window.document;A.MakeEditable();FCKTools.RunFunction(A.OnLoad);};FCKEditingArea.prototype.MakeEditable=function(){var A=this.Document;if (FCKBrowserInfo.IsIE){A.body.disabled=true;A.body.contentEditable=true;A.body.removeAttribute("disabled");}else{try{A.body.spellcheck=(this.FFSpellChecker!==false);if (this._BodyHTML){A.body.innerHTML=this._BodyHTML;A.body.offsetLeft;this._BodyHTML=null;};A.designMode='on';A.execCommand('enableObjectResizing',false,!FCKConfig.DisableObjectResizing);A.execCommand('enableInlineTableEditing',false,!FCKConfig.DisableFFTableHandles);}catch (e){FCKTools.AddEventListener(this.Window.frameElement,'DOMAttrModified',FCKEditingArea_Document_AttributeNodeModified);}}};function FCKEditingArea_Document_AttributeNodeModified(A){var B=A.currentTarget.contentWindow._FCKEditingArea;if (B._timer) window.clearTimeout(B._timer);B._timer=FCKTools.SetTimeout(FCKEditingArea_MakeEditableByMutation,1000,B);};function FCKEditingArea_MakeEditableByMutation(){delete this._timer;FCKTools.RemoveEventListener(this.Window.frameElement,'DOMAttrModified',FCKEditingArea_Document_AttributeNodeModified);this.MakeEditable();};FCKEditingArea.prototype.Focus=function(){try{if (this.Mode==0){if (FCKBrowserInfo.IsIE) this._FocusIE();else this.Window.focus();}else{var A=FCKTools.GetElementDocument(this.Textarea);if ((!A.hasFocus||A.hasFocus())&&A.activeElement==this.Textarea) return;this.Textarea.focus();}}catch(e) {}};FCKEditingArea.prototype._FocusIE=function(){this.Document.body.setActive();this.Window.focus();var A=this.Document.selection.createRange();var B=A.parentElement();var C=B.nodeName.toLowerCase();if (B.childNodes.length>0||!(FCKListsLib.BlockElements[C]||FCKListsLib.NonEmptyBlockElements[C])){return;};A=new FCKDomRange(this.Window);A.MoveToElementEditStart(B);A.Select();};function FCKEditingArea_Cleanup(){if (this.Document) this.Document.body.innerHTML="";this.TargetElement=null;this.IFrame=null;this.Document=null;this.Textarea=null;if (this.Window){this.Window._FCKEditingArea=null;this.Window=null;}};
+var FCKKeystrokeHandler=function(A){this.Keystrokes={};this.CancelCtrlDefaults=(A!==false);};FCKKeystrokeHandler.prototype.AttachToElement=function(A){FCKTools.AddEventListenerEx(A,'keydown',_FCKKeystrokeHandler_OnKeyDown,this);if (FCKBrowserInfo.IsGecko10||FCKBrowserInfo.IsOpera||(FCKBrowserInfo.IsGecko&&FCKBrowserInfo.IsMac)) FCKTools.AddEventListenerEx(A,'keypress',_FCKKeystrokeHandler_OnKeyPress,this);};FCKKeystrokeHandler.prototype.SetKeystrokes=function(){for (var i=0;i<arguments.length;i++){var A=arguments[i];if (!A) continue;if (typeof(A[0])=='object') this.SetKeystrokes.apply(this,A);else{if (A.length==1) delete this.Keystrokes[A[0]];else this.Keystrokes[A[0]]=A[1]===true?true:A;}}};function _FCKKeystrokeHandler_OnKeyDown(A,B){var C=A.keyCode||A.which;var D=0;if (A.ctrlKey||A.metaKey) D+=CTRL;if (A.shiftKey) D+=SHIFT;if (A.altKey) D+=ALT;var E=C+D;var F=B._CancelIt=false;var G=B.Keystrokes[E];if (G){if (G===true||!(B.OnKeystroke&&B.OnKeystroke.apply(B,G))) return true;F=true;};if (F||(B.CancelCtrlDefaults&&D==CTRL&&(C<33||C>40))){B._CancelIt=true;if (A.preventDefault) return A.preventDefault();A.returnValue=false;A.cancelBubble=true;return false;};return true;};function _FCKKeystrokeHandler_OnKeyPress(A,B){if (B._CancelIt){if (A.preventDefault) return A.preventDefault();return false;};return true;};
+FCK.DTD=(function(){var X=FCKTools.Merge;var A,L,J,M,N,O,D,H,P,K,Q,F,G,C,B,E,I;A={isindex:1,fieldset:1};B={input:1,button:1,select:1,textarea:1,label:1};C=X({a:1},B);D=X({iframe:1},C);E={hr:1,ul:1,menu:1,div:1,blockquote:1,noscript:1,table:1,center:1,address:1,dir:1,pre:1,h5:1,dl:1,h4:1,noframes:1,h6:1,ol:1,h1:1,h3:1,h2:1};F={ins:1,del:1,script:1};G=X({b:1,acronym:1,bdo:1,'var':1,'#':1,abbr:1,code:1,br:1,i:1,cite:1,kbd:1,u:1,strike:1,s:1,tt:1,strong:1,q:1,samp:1,em:1,dfn:1,span:1},F);H=X({sub:1,img:1,object:1,sup:1,basefont:1,map:1,applet:1,font:1,big:1,small:1},G);I=X({p:1},H);J=X({iframe:1},H,B);K={img:1,noscript:1,br:1,kbd:1,center:1,button:1,basefont:1,h5:1,h4:1,samp:1,h6:1,ol:1,h1:1,h3:1,h2:1,form:1,font:1,'#':1,select:1,menu:1,ins:1,abbr:1,label:1,code:1,table:1,script:1,cite:1,input:1,iframe:1,strong:1,textarea:1,noframes:1,big:1,small:1,span:1,hr:1,sub:1,bdo:1,'var':1,div:1,object:1,sup:1,strike:1,dir:1,map:1,dl:1,applet:1,del:1,isindex:1,fieldset:1,ul:1,b:1,acronym:1,a:1,blockquote:1,i:1,u:1,s:1,tt:1,address:1,q:1,pre:1,p:1,em:1,dfn:1};L=X({a:1},J);M={tr:1};N={'#':1};O=X({param:1},K);P=X({form:1},A,D,E,I);Q={li:1};return {col:{},tr:{td:1,th:1},img:{},colgroup:{col:1},noscript:P,td:P,br:{},th:P,center:P,kbd:L,button:X(I,E),basefont:{},h5:L,h4:L,samp:L,h6:L,ol:Q,h1:L,h3:L,option:N,h2:L,form:X(A,D,E,I),select:{optgroup:1,option:1},font:J,ins:P,menu:Q,abbr:L,label:L,table:{thead:1,col:1,tbody:1,tr:1,colgroup:1,caption:1,tfoot:1},code:L,script:N,tfoot:M,cite:L,li:P,input:{},iframe:P,strong:J,textarea:N,noframes:P,big:J,small:J,span:J,hr:{},dt:L,sub:J,optgroup:{option:1},param:{},bdo:L,'var':J,div:P,object:O,sup:J,dd:P,strike:J,area:{},dir:Q,map:X({area:1,form:1,p:1},A,F,E),applet:O,dl:{dt:1,dd:1},del:P,isindex:{},fieldset:X({legend:1},K),thead:M,ul:Q,acronym:L,b:J,a:J,blockquote:P,caption:L,i:J,u:J,tbody:M,s:L,address:X(D,I),tt:J,legend:L,q:L,pre:X(G,C),p:L,em:J,dfn:L};})();
+var FCKStyle=function(A){this.Element=(A.Element||'span').toLowerCase();this._StyleDesc=A;};FCKStyle.prototype={GetType:function(){var A=this.GetType_$;if (A!=undefined) return A;var B=this.Element;if (B=='#'||FCKListsLib.StyleBlockElements[B]) A=0;else if (FCKListsLib.StyleObjectElements[B]) A=2;else A=1;return (this.GetType_$=A);},ApplyToSelection:function(A){var B=new FCKDomRange(A);B.MoveToSelection();this.ApplyToRange(B,true);},ApplyToRange:function(A,B,C){switch (this.GetType()){case 0:this.ApplyToRange=this._ApplyBlockStyle;break;case 1:this.ApplyToRange=this._ApplyInlineStyle;break;default:return;};this.ApplyToRange(A,B,C);},ApplyToObject:function(A){if (!A) return;this.BuildElement(null,A);},RemoveFromSelection:function(A){var B=new FCKDomRange(A);B.MoveToSelection();this.RemoveFromRange(B,true);},RemoveFromRange:function(A,B,C){var D;var E=this._GetAttribsForComparison();var F=this._GetOverridesForComparison();if (A.CheckIsCollapsed()){var D=A.CreateBookmark(true);var H=A.GetBookmarkNode(D,true);var I=new FCKElementPath(H.parentNode);var J=[];var K=!FCKDomTools.GetNextSibling(H);var L=K||!FCKDomTools.GetPreviousSibling(H);var M;var N=-1;for (var i=0;i<I.Elements.length;i++){var O=I.Elements[i];if (this.CheckElementRemovable(O)){if (L&&!FCKDomTools.CheckIsEmptyElement(O,function(el){return (el!=H);})){M=O;N=J.length-1;}else{var P=O.nodeName.toLowerCase();if (P==this.Element){for (var Q in E){if (FCKDomTools.HasAttribute(O,Q)){switch (Q){case 'style':this._RemoveStylesFromElement(O);break;case 'class':if (FCKDomTools.GetAttributeValue(O,Q)!=this.GetFinalAttributeValue(Q)) continue;default:FCKDomTools.RemoveAttribute(O,Q);}}}};this._RemoveOverrides(O,F[P]);if (this.GetType()==1) this._RemoveNoAttribElement(O);}}else if (L) J.push(O);L=L&&((K&&!FCKDomTools.GetNextSibling(O))||(!K&&!FCKDomTools.GetPreviousSibling(O)));if (M&&(!L||(i==I.Elements.length-1))){var R=FCKDomTools.RemoveNode(H);for (var j=0;j<=N;j++){var S=FCKDomTools.CloneElement(J[j]);S.appendChild(R);R=S;};if (K) FCKDomTools.InsertAfterNode(M,R);else M.parentNode.insertBefore(R,M);L=false;M=null;}};if (B) A.SelectBookmark(D);if (C) A.MoveToBookmark(D);return;};A.Expand('inline_elements');D=A.CreateBookmark(true);var T=A.GetBookmarkNode(D,true);var U=A.GetBookmarkNode(D,false);A.Release(true);var I=new FCKElementPath(T);var X=I.Elements;var O;for (var i=1;i<X.length;i++){O=X[i];if (O==I.Block||O==I.BlockLimit) break;if (this.CheckElementRemovable(O)) FCKDomTools.BreakParent(T,O,A);};I=new FCKElementPath(U);X=I.Elements;for (var i=1;i<X.length;i++){O=X[i];if (O==I.Block||O==I.BlockLimit) break;b=O.nodeName.toLowerCase();if (this.CheckElementRemovable(O)) FCKDomTools.BreakParent(U,O,A);};var Z=FCKDomTools.GetNextSourceNode(T,true);while (Z){var a=FCKDomTools.GetNextSourceNode(Z);if (Z.nodeType==1){var b=Z.nodeName.toLowerCase();var c=(b==this.Element);if (c){for (var Q in E){if (FCKDomTools.HasAttribute(Z,Q)){switch (Q){case 'style':this._RemoveStylesFromElement(Z);break;case 'class':if (FCKDomTools.GetAttributeValue(Z,Q)!=this.GetFinalAttributeValue(Q)) continue;default:FCKDomTools.RemoveAttribute(Z,Q);}}}}else c=!!F[b];if (c){this._RemoveOverrides(Z,F[b]);this._RemoveNoAttribElement(Z);}};if (a==U) break;Z=a;};this._FixBookmarkStart(T);if (B) A.SelectBookmark(D);if (C) A.MoveToBookmark(D);},CheckElementRemovable:function(A,B){if (!A) return false;var C=A.nodeName.toLowerCase();if (C==this.Element){if (!B&&!FCKDomTools.HasAttributes(A)) return true;var D=this._GetAttribsForComparison();var E=(D._length==0);for (var F in D){if (F=='_length') continue;if (this._CompareAttributeValues(F,FCKDomTools.GetAttributeValue(A,F),(this.GetFinalAttributeValue(F)||''))){E=true;if (!B) break;}else{E=false;if (B) return false;}};if (E) return true;};var G=this._GetOverridesForComparison()[C];if (G){if (!(D=G.Attributes)) return true;for (var i=0;i<D.length;i++){var H=D[i][0];if (FCKDomTools.HasAttribute(A,H)){var I=D[i][1];if (I==null||(typeof I=='string'&&FCKDomTools.GetAttributeValue(A,H)==I)||I.test(FCKDomTools.GetAttributeValue(A,H))) return true;}}};return false;},CheckActive:function(A){switch (this.GetType()){case 0:return this.CheckElementRemovable(A.Block||A.BlockLimit,true);case 1:var B=A.Elements;for (var i=0;i<B.length;i++){var C=B[i];if (C==A.Block||C==A.BlockLimit) continue;if (this.CheckElementRemovable(C,true)) return true;}};return false;},RemoveFromElement:function(A){var B=this._GetAttribsForComparison();var C=this._GetOverridesForComparison();var D=A.getElementsByTagName(this.Element);for (var i=D.length-1;i>=0;i--){var E=D[i];for (var F in B){if (FCKDomTools.HasAttribute(E,F)){switch (F){case 'style':this._RemoveStylesFromElement(E);break;case 'class':if (FCKDomTools.GetAttributeValue(E,F)!=this.GetFinalAttributeValue(F)) continue;default:FCKDomTools.RemoveAttribute(E,F);}}};this._RemoveOverrides(E,C[this.Element]);this._RemoveNoAttribElement(E);};for (var G in C){if (G!=this.Element){D=A.getElementsByTagName(G);for (var i=D.length-1;i>=0;i--){var E=D[i];this._RemoveOverrides(E,C[G]);this._RemoveNoAttribElement(E);}}}},_RemoveStylesFromElement:function(A){var B=A.style.cssText;var C=this.GetFinalStyleValue();if (B.length>0&&C.length==0) return;C='(^|;)\\s*('+C.replace(/\s*([^ ]+):.*?(;|$)/g,'$1|').replace(/\|$/,'')+'):[^;]+';var D=new RegExp(C,'gi');B=B.replace(D,'').Trim();if (B.length==0||B==';') FCKDomTools.RemoveAttribute(A,'style');else A.style.cssText=B.replace(D,'');},_RemoveOverrides:function(A,B){var C=B&&B.Attributes;if (C){for (var i=0;i<C.length;i++){var D=C[i][0];if (FCKDomTools.HasAttribute(A,D)){var E=C[i][1];if (E==null||(E.test&&E.test(FCKDomTools.GetAttributeValue(A,D)))||(typeof E=='string'&&FCKDomTools.GetAttributeValue(A,D)==E)) FCKDomTools.RemoveAttribute(A,D);}}}},_RemoveNoAttribElement:function(A){if (!FCKDomTools.HasAttributes(A)){var B=A.firstChild;var C=A.lastChild;FCKDomTools.RemoveNode(A,true);this._MergeSiblings(B);if (B!=C) this._MergeSiblings(C);}},BuildElement:function(A,B){var C=B||A.createElement(this.Element);var D=this._StyleDesc.Attributes;var E;if (D){for (var F in D){E=this.GetFinalAttributeValue(F);if (F.toLowerCase()=='class') C.className=E;else C.setAttribute(F,E);}};if (this._GetStyleText().length>0) C.style.cssText=this.GetFinalStyleValue();return C;},_CompareAttributeValues:function(A,B,C){if (A=='style'&&B&&C){B=B.replace(/;$/,'').toLowerCase();C=C.replace(/;$/,'').toLowerCase();};return (B==C||((B===null||B==='')&&(C===null||C==='')))},GetFinalAttributeValue:function(A){var B=this._StyleDesc.Attributes;var B=B?B[A]:null;if (!B&&A=='style') return this.GetFinalStyleValue();if (B&&this._Variables) B=B.Replace(FCKRegexLib.StyleVariableAttName,this._GetVariableReplace,this);return B;},GetFinalStyleValue:function(){var A=this._GetStyleText();if (A.length>0&&this._Variables){A=A.Replace(FCKRegexLib.StyleVariableAttName,this._GetVariableReplace,this);A=FCKTools.NormalizeCssText(A);};return A;},_GetVariableReplace:function(){return this._Variables[arguments[2]]||arguments[0];},SetVariable:function(A,B){var C=this._Variables;if (!C) C=this._Variables={};this._Variables[A]=B;},_FromPre:function(A,B,C){var D=B.innerHTML;D=D.replace(/(\r\n|\r)/g,'\n');D=D.replace(/^[ \t]*\n/,'');D=D.replace(/\n$/,'');D=D.replace(/^[ \t]+|[ \t]+$/g,function(match,offset,s){if (match.length==1) return '&nbsp;';else if (offset==0) return new Array(match.length).join('&nbsp;')+' ';else return ' '+new Array(match.length).join('&nbsp;');});var E=new FCKHtmlIterator(D);var F=[];E.Each(function(isTag,value){if (!isTag){value=value.replace(/\n/g,'<BR>');value=value.replace(/[ \t]{2,}/g,function (match){return new Array(match.length).join('&nbsp;')+' ';});};F.push(value);});C.innerHTML=F.join('');return C;},_ToPre:function(A,B,C){var D=B.innerHTML.Trim();D=D.replace(/[ \t\r\n]*(<br[^>]*>)[ \t\r\n]*/gi,'<BR />');var E=new FCKHtmlIterator(D);var F=[];E.Each(function(isTag,value){if (!isTag) value=value.replace(/([ \t\n\r]+|&nbsp;)/g,' ');else if (isTag&&value=='<BR />') value='\n';F.push(value);});if (FCKBrowserInfo.IsIE){var G=A.createElement('div');G.appendChild(C);C.outerHTML='<PRE>\n'+F.join('')+'</PRE>';C=G.removeChild(G.firstChild);}else C.innerHTML=F.join('');return C;},_ApplyBlockStyle:function(A,B,C){var D;if (B) D=A.CreateBookmark();var E=new FCKDomRangeIterator(A);E.EnforceRealBlocks=true;var F;var G=A.Window.document;var H=[];var I=[];while((F=E.GetNextParagraph())){var J=this.BuildElement(G);var K=J.nodeName.IEquals('pre');var L=F.nodeName.IEquals('pre');if (K&&!L){J=this._ToPre(G,F,J);H.push(J);}else if (!K&&L){J=this._FromPre(G,F,J);I.push(J);}else FCKDomTools.MoveChildren(F,J);F.parentNode.insertBefore(J,F);FCKDomTools.RemoveNode(F);};for (var i=0;i<H.length-1;i++){if (FCKDomTools.GetNextSourceElement(H[i],true,[],[],true)!=H[i+1]) continue;H[i+1].innerHTML=H[i].innerHTML+'\n\n'+H[i+1].innerHTML;FCKDomTools.RemoveNode(H[i]);};for (var i=0;i<I.length;i++){var M=I[i];var N=null;for (var j=0;j<M.childNodes.length;j++){var O=M.childNodes[j];if (O.nodeName.IEquals('br')&&j!=0&&j!=M.childNodes.length-2&&O.nextSibling&&O.nextSibling.nodeName.IEquals('br')){FCKDomTools.RemoveNode(O.nextSibling);FCKDomTools.RemoveNode(O);j--;N=FCKDomTools.InsertAfterNode(N||M,G.createElement(M.nodeName));continue;};if (N){FCKDomTools.MoveNode(O,N);j--;}}};if (B) A.SelectBookmark(D);if (C) A.MoveToBookmark(D);},_ApplyInlineStyle:function(A,B,C){var D=A.Window.document;if (A.CheckIsCollapsed()){var E=this.BuildElement(D);A.InsertNode(E);A.MoveToPosition(E,2);A.Select();return;};var F=this.Element;var G=FCK.DTD[F]||FCK.DTD.span;var H=this._GetAttribsForComparison();var I;A.Expand('inline_elements');var J=A.CreateBookmark(true);var K=A.GetBookmarkNode(J,true);var L=A.GetBookmarkNode(J,false);A.Release(true);var M=FCKDomTools.GetNextSourceNode(K,true);while (M){var N=false;var O=M.nodeType;var P=O==1?M.nodeName.toLowerCase():null;if (!P||G[P]){if ((FCK.DTD[M.parentNode.nodeName.toLowerCase()]||FCK.DTD.span)[F]||!FCK.DTD[F]){if (!A.CheckHasRange()) A.SetStart(M,3);if (O!=1||M.childNodes.length==0){var Q=M;var R=Q.parentNode;while (Q==R.lastChild&&G[R.nodeName.toLowerCase()]){Q=R;};A.SetEnd(Q,4);if (Q==Q.parentNode.lastChild&&!G[Q.parentNode.nodeName.toLowerCase()]) N=true;}else{A.SetEnd(M,3);}}else N=true;}else N=true;M=FCKDomTools.GetNextSourceNode(M);if (M==L){M=null;N=true;};if (N&&A.CheckHasRange()&&!A.CheckIsCollapsed()){I=this.BuildElement(D);A.ExtractContents().AppendTo(I);if (I.innerHTML.RTrim().length>0){A.InsertNode(I);this.RemoveFromElement(I);this._MergeSiblings(I,this._GetAttribsForComparison());if (!FCKBrowserInfo.IsIE) I.normalize();};A.Release(true);}};this._FixBookmarkStart(K);if (B) A.SelectBookmark(J);if (C) A.MoveToBookmark(J);},_FixBookmarkStart:function(A){var B;while ((B=A.nextSibling)){if (B.nodeType==1&&FCKListsLib.InlineNonEmptyElements[B.nodeName.toLowerCase()]){if (!B.firstChild) FCKDomTools.RemoveNode(B);else FCKDomTools.MoveNode(A,B,true);continue;};if (B.nodeType==3&&B.length==0){FCKDomTools.RemoveNode(B);continue;};break;}},_MergeSiblings:function(A,B){if (!A||A.nodeType!=1||!FCKListsLib.InlineNonEmptyElements[A.nodeName.toLowerCase()]) return;this._MergeNextSibling(A,B);this._MergePreviousSibling(A,B);},_MergeNextSibling:function(A,B){var C=A.nextSibling;var D=(C&&C.nodeType==1&&C.getAttribute('_fck_bookmark'));if (D) C=C.nextSibling;if (C&&C.nodeType==1&&C.nodeName==A.nodeName){if (!B) B=this._CreateElementAttribsForComparison(A);if (this._CheckAttributesMatch(C,B)){var E=A.lastChild;if (D) FCKDomTools.MoveNode(A.nextSibling,A);FCKDomTools.MoveChildren(C,A);FCKDomTools.RemoveNode(C);if (E) this._MergeNextSibling(E);}}},_MergePreviousSibling:function(A,B){var C=A.previousSibling;var D=(C&&C.nodeType==1&&C.getAttribute('_fck_bookmark'));if (D) C=C.previousSibling;if (C&&C.nodeType==1&&C.nodeName==A.nodeName){if (!B) B=this._CreateElementAttribsForComparison(A);if (this._CheckAttributesMatch(C,B)){var E=A.firstChild;if (D) FCKDomTools.MoveNode(A.previousSibling,A,true);FCKDomTools.MoveChildren(C,A,true);FCKDomTools.RemoveNode(C);if (E) this._MergePreviousSibling(E);}}},_GetStyleText:function(){var A=this._StyleDesc.Styles;var B=(this._StyleDesc.Attributes?this._StyleDesc.Attributes['style']||'':'');if (B.length>0) B+=';';for (var C in A) B+=C+':'+A[C]+';';if (B.length>0&&!(/#\(/.test(B))){B=FCKTools.NormalizeCssText(B);};return (this._GetStyleText=function() { return B;})();},_GetAttribsForComparison:function(){var A=this._GetAttribsForComparison_$;if (A) return A;A={};var B=this._StyleDesc.Attributes;if (B){for (var C in B){A[C.toLowerCase()]=B[C].toLowerCase();}};if (this._GetStyleText().length>0){A['style']=this._GetStyleText().toLowerCase();};FCKTools.AppendLengthProperty(A,'_length');return (this._GetAttribsForComparison_$=A);},_GetOverridesForComparison:function(){var A=this._GetOverridesForComparison_$;if (A) return A;A={};var B=this._StyleDesc.Overrides;if (B){if (!FCKTools.IsArray(B)) B=[B];for (var i=0;i<B.length;i++){var C=B[i];var D;var E;var F;if (typeof C=='string') D=C.toLowerCase();else{D=C.Element?C.Element.toLowerCase():this.Element;F=C.Attributes;};E=A[D]||(A[D]={});if (F){var G=(E.Attributes=E.Attributes||[]);for (var H in F){G.push([H.toLowerCase(),F[H]]);}}}};return (this._GetOverridesForComparison_$=A);},_CreateElementAttribsForComparison:function(A){var B={};var C=0;for (var i=0;i<A.attributes.length;i++){var D=A.attributes[i];if (D.specified){B[D.nodeName.toLowerCase()]=FCKDomTools.GetAttributeValue(A,D).toLowerCase();C++;}};B._length=C;return B;},_CheckAttributesMatch:function(A,B){var C=A.attributes;var D=0;for (var i=0;i<C.length;i++){var E=C[i];if (E.specified){var F=E.nodeName.toLowerCase();var G=B[F];if (!G) break;if (G!=FCKDomTools.GetAttributeValue(A,E).toLowerCase()) break;D++;}};return (D==B._length);}};
+var FCKStyles=FCK.Styles={_Callbacks:{},_ObjectStyles:{},ApplyStyle:function(A){if (typeof A=='string') A=this.GetStyles()[A];if (A){if (A.GetType()==2) A.ApplyToObject(FCKSelection.GetSelectedElement());else A.ApplyToSelection(FCK.EditorWindow);FCK.Events.FireEvent('OnSelectionChange');}},RemoveStyle:function(A){if (typeof A=='string') A=this.GetStyles()[A];if (A){A.RemoveFromSelection(FCK.EditorWindow);FCK.Events.FireEvent('OnSelectionChange');}},AttachStyleStateChange:function(A,B,C){var D=this._Callbacks[A];if (!D) D=this._Callbacks[A]=[];D.push([B,C]);},CheckSelectionChanges:function(){var A=FCKSelection.GetBoundaryParentElement(true);if (!A) return;var B=new FCKElementPath(A);var C=this.GetStyles();for (var D in C){var E=this._Callbacks[D];if (E){var F=C[D];var G=F.CheckActive(B);if (G!=(F._LastState||null)){F._LastState=G;for (var i=0;i<E.length;i++){var H=E[i][0];var I=E[i][1];H.call(I||window,D,G);}}}}},CheckStyleInSelection:function(A){return false;},_GetRemoveFormatTagsRegex:function (){var A=new RegExp('^(?:'+FCKConfig.RemoveFormatTags.replace(/,/g,'|')+')$','i');return (this._GetRemoveFormatTagsRegex=function(){return A;})&&A;},RemoveAll:function(){var A=new FCKDomRange(FCK.EditorWindow);A.MoveToSelection();if (A.CheckIsCollapsed()) return;A.Expand('inline_elements');var B=A.CreateBookmark(true);var C=A.GetBookmarkNode(B,true);var D=A.GetBookmarkNode(B,false);A.Release(true);var E=this._GetRemoveFormatTagsRegex();var F=new FCKElementPath(C);var G=F.Elements;var H;for (var i=1;i<G.length;i++){H=G[i];if (H==F.Block||H==F.BlockLimit) break;if (E.test(H.nodeName)) FCKDomTools.BreakParent(C,H,A);};F=new FCKElementPath(D);G=F.Elements;for (var i=1;i<G.length;i++){H=G[i];if (H==F.Block||H==F.BlockLimit) break;elementName=H.nodeName.toLowerCase();if (E.test(H.nodeName)) FCKDomTools.BreakParent(D,H,A);};var I=FCKDomTools.GetNextSourceNode(C,true,1);while (I){if (I==D) break;var J=FCKDomTools.GetNextSourceNode(I,false,1);if (E.test(I.nodeName)) FCKDomTools.RemoveNode(I,true);else FCKDomTools.RemoveAttributes(I,FCKConfig.RemoveAttributesArray);I=J;};A.SelectBookmark(B);FCK.Events.FireEvent('OnSelectionChange');},GetStyle:function(A){return this.GetStyles()[A];},GetStyles:function(){var A=this._GetStyles;if (!A){A=this._GetStyles=FCKTools.Merge(this._LoadStylesCore(),this._LoadStylesCustom(),this._LoadStylesXml());};return A;},CheckHasObjectStyle:function(A){return!!this._ObjectStyles[A];},_LoadStylesCore:function(){var A={};var B=FCKConfig.CoreStyles;for (var C in B){var D=A['_FCK_'+C]=new FCKStyle(B[C]);D.IsCore=true;};return A;},_LoadStylesCustom:function(){var A={};var B=FCKConfig.CustomStyles;if (B){for (var C in B){var D=A[C]=new FCKStyle(B[C]);D.Name=C;}};return A;},_LoadStylesXml:function(){var A={};var B=FCKConfig.StylesXmlPath;if (!B||B.length==0) return A;var C=new FCKXml();C.LoadUrl(B);var D=FCKXml.TransformToObject(C.SelectSingleNode('Styles'));var E=D.$Style;if (!E) return A;for (var i=0;i<E.length;i++){var F=E[i];var G=(F.element||'').toLowerCase();if (G.length==0) throw('The element name is required. Error loading "'+B+'"');var H={Element:G,Attributes:{},Styles:{},Overrides:[]};var I=F.$Attribute||[];for (var j=0;j<I.length;j++){H.Attributes[I[j].name]=I[j].value;};var J=F.$Style||[];for (j=0;j<J.length;j++){H.Styles[J[j].name]=J[j].value;};var K=F.$Override;if (K){for (j=0;j<K.length;j++){var L=K[j];var M={Element:L.element};var N=L.$Attribute;if (N){M.Attributes={};for (var k=0;k<N.length;k++){var O=N[k].value||null;if (O){var P=O&&FCKRegexLib.RegExp.exec(O);if (P) O=new RegExp(P[1],P[2]||'');};M.Attributes[N[k].name]=O;}};H.Overrides.push(M);}};var Q=new FCKStyle(H);Q.Name=F.name||G;if (Q.GetType()==2) this._ObjectStyles[G]=true;A[Q.Name]=Q;};return A;}};
+var FCKListHandler={OutdentListItem:function(A){var B=A.parentNode;if (B.tagName.toUpperCase().Equals('UL','OL')){var C=FCKTools.GetElementDocument(A);var D=new FCKDocumentFragment(C);var E=D.RootNode;var F=false;var G=FCKDomTools.GetFirstChild(A,['UL','OL']);if (G){F=true;var H;while ((H=G.firstChild)) E.appendChild(G.removeChild(H));FCKDomTools.RemoveNode(G);};var I;var J=false;while ((I=A.nextSibling)){if (!F&&I.nodeType==1&&I.nodeName.toUpperCase()=='LI') J=F=true;E.appendChild(I.parentNode.removeChild(I));if (!J&&I.nodeType==1&&I.nodeName.toUpperCase().Equals('UL','OL')) FCKDomTools.RemoveNode(I,true);};var K=B.parentNode.tagName.toUpperCase();var L=(K=='LI');if (L||K.Equals('UL','OL')){if (F){var G=B.cloneNode(false);D.AppendTo(G);A.appendChild(G);}else if (L) D.InsertAfterNode(B.parentNode);else D.InsertAfterNode(B);if (L) FCKDomTools.InsertAfterNode(B.parentNode,B.removeChild(A));else FCKDomTools.InsertAfterNode(B,B.removeChild(A));}else{if (F){var N=B.cloneNode(false);D.AppendTo(N);FCKDomTools.InsertAfterNode(B,N);};var O=C.createElement(FCKConfig.EnterMode=='p'?'p':'div');FCKDomTools.MoveChildren(B.removeChild(A),O);FCKDomTools.InsertAfterNode(B,O);if (FCKConfig.EnterMode=='br'){if (FCKBrowserInfo.IsGecko) O.parentNode.insertBefore(FCKTools.CreateBogusBR(C),O);else FCKDomTools.InsertAfterNode(O,FCKTools.CreateBogusBR(C));FCKDomTools.RemoveNode(O,true);}};if (this.CheckEmptyList(B)) FCKDomTools.RemoveNode(B,true);}},CheckEmptyList:function(A){return (FCKDomTools.GetFirstChild(A,'LI')==null);},CheckListHasContents:function(A){var B=A.firstChild;while (B){switch (B.nodeType){case 1:if (!B.nodeName.IEquals('UL','LI')) return true;break;case 3:if (B.nodeValue.Trim().length>0) return true;};B=B.nextSibling;};return false;}};
+var FCKElementPath=function(A){var B=null;var C=null;var D=[];var e=A;while (e){if (e.nodeType==1){if (!this.LastElement) this.LastElement=e;var E=e.nodeName.toLowerCase();if (FCKBrowserInfo.IsIE&&e.scopeName!='HTML') E=e.scopeName.toLowerCase()+':'+E;if (!C){if (!B&&FCKListsLib.PathBlockElements[E]!=null) B=e;if (FCKListsLib.PathBlockLimitElements[E]!=null){if (!B&&E=='div'&&!FCKElementPath._CheckHasBlock(e)) B=e;else C=e;}};D.push(e);if (E=='body') break;};e=e.parentNode;};this.Block=B;this.BlockLimit=C;this.Elements=D;};FCKElementPath._CheckHasBlock=function(A){var B=A.childNodes;for (var i=0,count=B.length;i<count;i++){var C=B[i];if (C.nodeType==1&&FCKListsLib.BlockElements[C.nodeName.toLowerCase()]) return true;};return false;};
+var FCKDomRange=function(A){this.Window=A;this._Cache={};};FCKDomRange.prototype={_UpdateElementInfo:function(){var A=this._Range;if (!A) this.Release(true);else{var B=A.startContainer;var C=A.endContainer;var D=new FCKElementPath(B);this.StartNode=B.nodeType==3?B:B.childNodes[A.startOffset];this.StartContainer=B;this.StartBlock=D.Block;this.StartBlockLimit=D.BlockLimit;if (B!=C) D=new FCKElementPath(C);var E=C;if (A.endOffset==0){while (E&&!E.previousSibling) E=E.parentNode;if (E) E=E.previousSibling;}else if (E.nodeType==1) E=E.childNodes[A.endOffset-1];this.EndNode=E;this.EndContainer=C;this.EndBlock=D.Block;this.EndBlockLimit=D.BlockLimit;};this._Cache={};},CreateRange:function(){return new FCKW3CRange(this.Window.document);},DeleteContents:function(){if (this._Range){this._Range.deleteContents();this._UpdateElementInfo();}},ExtractContents:function(){if (this._Range){var A=this._Range.extractContents();this._UpdateElementInfo();return A;};return null;},CheckIsCollapsed:function(){if (this._Range) return this._Range.collapsed;return false;},Collapse:function(A){if (this._Range) this._Range.collapse(A);this._UpdateElementInfo();},Clone:function(){var A=FCKTools.CloneObject(this);if (this._Range) A._Range=this._Range.cloneRange();return A;},MoveToNodeContents:function(A){if (!this._Range) this._Range=this.CreateRange();this._Range.selectNodeContents(A);this._UpdateElementInfo();},MoveToElementStart:function(A){this.SetStart(A,1);this.SetEnd(A,1);},MoveToElementEditStart:function(A){var B;while (A&&A.nodeType==1){if (FCKDomTools.CheckIsEditable(A)) B=A;else if (B) break;A=A.firstChild;};if (B) this.MoveToElementStart(B);},InsertNode:function(A){if (this._Range) this._Range.insertNode(A);},CheckIsEmpty:function(){if (this.CheckIsCollapsed()) return true;var A=this.Window.document.createElement('div');this._Range.cloneContents().AppendTo(A);FCKDomTools.TrimNode(A);return (A.innerHTML.length==0);},CheckStartOfBlock:function(){var A=this._Cache;var B=A.IsStartOfBlock;if (B!=undefined) return B;var C=this.StartBlock||this.StartBlockLimit;var D=this._Range.startContainer;var E=this._Range.startOffset;var F;if (E>0){if (D.nodeType==3){var G=D.nodeValue.substr(0,E).Trim();if (G.length!=0) return A.IsStartOfBlock=false;}else F=D.childNodes[E-1];};if (!F) F=FCKDomTools.GetPreviousSourceNode(D,true,null,C);while (F){switch (F.nodeType){case 1:if (!FCKListsLib.InlineChildReqElements[F.nodeName.toLowerCase()]) return A.IsStartOfBlock=false;break;case 3:if (F.nodeValue.Trim().length>0) return A.IsStartOfBlock=false;};F=FCKDomTools.GetPreviousSourceNode(F,false,null,C);};return A.IsStartOfBlock=true;},CheckEndOfBlock:function(A){var B=this._Cache.IsEndOfBlock;if (B!=undefined) return B;var C=this.EndBlock||this.EndBlockLimit;var D=this._Range.endContainer;var E=this._Range.endOffset;var F;if (D.nodeType==3){var G=D.nodeValue;if (E<G.length){G=G.substr(E);if (G.Trim().length!=0) return this._Cache.IsEndOfBlock=false;}}else F=D.childNodes[E];if (!F) F=FCKDomTools.GetNextSourceNode(D,true,null,C);var H=false;while (F){switch (F.nodeType){case 1:var I=F.nodeName.toLowerCase();if (FCKListsLib.InlineChildReqElements[I]) break;if (I=='br'&&!H){H=true;break;};return this._Cache.IsEndOfBlock=false;case 3:if (F.nodeValue.Trim().length>0) return this._Cache.IsEndOfBlock=false;};F=FCKDomTools.GetNextSourceNode(F,false,null,C);};if (A) this.Select();return this._Cache.IsEndOfBlock=true;},CreateBookmark:function(A){var B={StartId:(new Date()).valueOf()+Math.floor(Math.random()*1000)+'S',EndId:(new Date()).valueOf()+Math.floor(Math.random()*1000)+'E'};var C=this.Window.document;var D;var E;var F;if (!this.CheckIsCollapsed()){E=C.createElement('span');E.style.display='none';E.id=B.EndId;E.setAttribute('_fck_bookmark',true);E.innerHTML='&nbsp;';F=this.Clone();F.Collapse(false);F.InsertNode(E);};D=C.createElement('span');D.style.display='none';D.id=B.StartId;D.setAttribute('_fck_bookmark',true);D.innerHTML='&nbsp;';F=this.Clone();F.Collapse(true);F.InsertNode(D);if (A){B.StartNode=D;B.EndNode=E;};if (E){this.SetStart(D,4);this.SetEnd(E,3);}else this.MoveToPosition(D,4);return B;},GetBookmarkNode:function(A,B){var C=this.Window.document;if (B) return A.StartNode||C.getElementById(A.StartId);else return A.EndNode||C.getElementById(A.EndId);},MoveToBookmark:function(A,B){var C=this.GetBookmarkNode(A,true);var D=this.GetBookmarkNode(A,false);this.SetStart(C,3);if (!B) FCKDomTools.RemoveNode(C);if (D){this.SetEnd(D,3);if (!B) FCKDomTools.RemoveNode(D);}else this.Collapse(true);this._UpdateElementInfo();},CreateBookmark2:function(){if (!this._Range) return { "Start":0,"End":0 };var A={"Start":[this._Range.startOffset],"End":[this._Range.endOffset]};var B=this._Range.startContainer.previousSibling;var C=this._Range.endContainer.previousSibling;var D=this._Range.startContainer;var E=this._Range.endContainer;while (B&&D.nodeType==3){A.Start[0]+=B.length;D=B;B=B.previousSibling;}while (C&&E.nodeType==3){A.End[0]+=C.length;E=C;C=C.previousSibling;};if (D.nodeType==1&&D.childNodes[A.Start[0]]&&D.childNodes[A.Start[0]].nodeType==3){var F=D.childNodes[A.Start[0]];var G=0;while (F.previousSibling&&F.previousSibling.nodeType==3){F=F.previousSibling;G+=F.length;};D=F;A.Start[0]=G;};if (E.nodeType==1&&E.childNodes[A.End[0]]&&E.childNodes[A.End[0]].nodeType==3){var F=E.childNodes[A.End[0]];var G=0;while (F.previousSibling&&F.previousSibling.nodeType==3){F=F.previousSibling;G+=F.length;};E=F;A.End[0]=G;};A.Start=FCKDomTools.GetNodeAddress(D,true).concat(A.Start);A.End=FCKDomTools.GetNodeAddress(E,true).concat(A.End);return A;},MoveToBookmark2:function(A){var B=FCKDomTools.GetNodeFromAddress(this.Window.document,A.Start.slice(0,-1),true);var C=FCKDomTools.GetNodeFromAddress(this.Window.document,A.End.slice(0,-1),true);this.Release(true);this._Range=new FCKW3CRange(this.Window.document);var D=A.Start[A.Start.length-1];var E=A.End[A.End.length-1];while (B.nodeType==3&&D>B.length){if (!B.nextSibling||B.nextSibling.nodeType!=3) break;D-=B.length;B=B.nextSibling;}while (C.nodeType==3&&E>C.length){if (!C.nextSibling||C.nextSibling.nodeType!=3) break;E-=C.length;C=C.nextSibling;};this._Range.setStart(B,D);this._Range.setEnd(C,E);this._UpdateElementInfo();},MoveToPosition:function(A,B){this.SetStart(A,B);this.Collapse(true);},SetStart:function(A,B,C){var D=this._Range;if (!D) D=this._Range=this.CreateRange();switch(B){case 1:D.setStart(A,0);break;case 2:D.setStart(A,A.childNodes.length);break;case 3:D.setStartBefore(A);break;case 4:D.setStartAfter(A);};if (!C) this._UpdateElementInfo();},SetEnd:function(A,B,C){var D=this._Range;if (!D) D=this._Range=this.CreateRange();switch(B){case 1:D.setEnd(A,0);break;case 2:D.setEnd(A,A.childNodes.length);break;case 3:D.setEndBefore(A);break;case 4:D.setEndAfter(A);};if (!C) this._UpdateElementInfo();},Expand:function(A){var B,oSibling;switch (A){case 'inline_elements':if (this._Range.startOffset==0){B=this._Range.startContainer;if (B.nodeType!=1) B=B.previousSibling?null:B.parentNode;if (B){while (FCKListsLib.InlineNonEmptyElements[B.nodeName.toLowerCase()]){this._Range.setStartBefore(B);if (B!=B.parentNode.firstChild) break;B=B.parentNode;}}};B=this._Range.endContainer;var C=this._Range.endOffset;if ((B.nodeType==3&&C>=B.nodeValue.length)||(B.nodeType==1&&C>=B.childNodes.length)||(B.nodeType!=1&&B.nodeType!=3)){if (B.nodeType!=1) B=B.nextSibling?null:B.parentNode;if (B){while (FCKListsLib.InlineNonEmptyElements[B.nodeName.toLowerCase()]){this._Range.setEndAfter(B);if (B!=B.parentNode.lastChild) break;B=B.parentNode;}}};break;case 'block_contents':case 'list_contents':var D=FCKListsLib.BlockBoundaries;if (A=='list_contents'||FCKConfig.EnterMode=='br') D=FCKListsLib.ListBoundaries;if (this.StartBlock&&FCKConfig.EnterMode!='br'&&A=='block_contents') this.SetStart(this.StartBlock,1);else{B=this._Range.startContainer;if (B.nodeType==1){var E=B.childNodes[this._Range.startOffset];if (E) B=FCKDomTools.GetPreviousSourceNode(E,true);else B=B.lastChild||B;}while (B&&(B.nodeType!=1||(B!=this.StartBlockLimit&&!D[B.nodeName.toLowerCase()]))){this._Range.setStartBefore(B);B=B.previousSibling||B.parentNode;}};if (this.EndBlock&&FCKConfig.EnterMode!='br'&&A=='block_contents'&&this.EndBlock.nodeName.toLowerCase()!='li') this.SetEnd(this.EndBlock,2);else{B=this._Range.endContainer;if (B.nodeType==1) B=B.childNodes[this._Range.endOffset]||B.lastChild;while (B&&(B.nodeType!=1||(B!=this.StartBlockLimit&&!D[B.nodeName.toLowerCase()]))){this._Range.setEndAfter(B);B=B.nextSibling||B.parentNode;};if (B&&B.nodeName.toLowerCase()=='br') this._Range.setEndAfter(B);};this._UpdateElementInfo();}},SplitBlock:function(A){var B=A||FCKConfig.EnterMode;if (!this._Range) this.MoveToSelection();if (this.StartBlockLimit==this.EndBlockLimit){var C=this.StartBlock;var D=this.EndBlock;var E=null;if (B!='br'){if (!C){C=this.FixBlock(true,B);D=this.EndBlock;};if (!D) D=this.FixBlock(false,B);};var F=(C!=null&&this.CheckStartOfBlock());var G=(D!=null&&this.CheckEndOfBlock());if (!this.CheckIsEmpty()) this.DeleteContents();if (C&&D&&C==D){if (G){E=new FCKElementPath(this.StartContainer);this.MoveToPosition(D,4);D=null;}else if (F){E=new FCKElementPath(this.StartContainer);this.MoveToPosition(C,3);C=null;}else{this.SetEnd(C,2);var H=this.ExtractContents();D=C.cloneNode(false);D.removeAttribute('id',false);H.AppendTo(D);FCKDomTools.InsertAfterNode(C,D);this.MoveToPosition(C,4);if (FCKBrowserInfo.IsGecko&&!C.nodeName.IEquals(['ul','ol'])) FCKTools.AppendBogusBr(C);}};return {PreviousBlock:C,NextBlock:D,WasStartOfBlock:F,WasEndOfBlock:G,ElementPath:E};};return null;},FixBlock:function(A,B){var C=this.CreateBookmark();this.Collapse(A);this.Expand('block_contents');var D=this.Window.document.createElement(B);this.ExtractContents().AppendTo(D);FCKDomTools.TrimNode(D);if (FCKDomTools.CheckIsEmptyElement(D,function(element) { return element.getAttribute('_fck_bookmark')!='true';})&&FCKBrowserInfo.IsGeckoLike) FCKTools.AppendBogusBr(D);this.InsertNode(D);this.MoveToBookmark(C);return D;},Release:function(A){if (!A) this.Window=null;this.StartNode=null;this.StartContainer=null;this.StartBlock=null;this.StartBlockLimit=null;this.EndNode=null;this.EndContainer=null;this.EndBlock=null;this.EndBlockLimit=null;this._Range=null;this._Cache=null;},CheckHasRange:function(){return!!this._Range;},GetTouchedStartNode:function(){var A=this._Range;var B=A.startContainer;if (A.collapsed||B.nodeType!=1) return B;return B.childNodes[A.startOffset]||B;},GetTouchedEndNode:function(){var A=this._Range;var B=A.endContainer;if (A.collapsed||B.nodeType!=1) return B;return B.childNodes[A.endOffset-1]||B;}};
+FCKDomRange.prototype.MoveToSelection=function(){this.Release(true);this._Range=new FCKW3CRange(this.Window.document);var A=this.Window.document.selection;if (A.type!='Control'){var B=this._GetSelectionMarkerTag(true);var C=this._GetSelectionMarkerTag(false);if (!B&&!C){this._Range.setStart(this.Window.document.body,0);this._UpdateElementInfo();return;};this._Range.setStart(B.parentNode,FCKDomTools.GetIndexOf(B));B.parentNode.removeChild(B);this._Range.setEnd(C.parentNode,FCKDomTools.GetIndexOf(C));C.parentNode.removeChild(C);this._UpdateElementInfo();}else{var D=A.createRange().item(0);if (D){this._Range.setStartBefore(D);this._Range.setEndAfter(D);this._UpdateElementInfo();}}};FCKDomRange.prototype.Select=function(A){if (this._Range) this.SelectBookmark(this.CreateBookmark(true),A);};FCKDomRange.prototype.SelectBookmark=function(A,B){var C=this.CheckIsCollapsed();var D;var E;var F=this.GetBookmarkNode(A,true);if (!F) return;var G;if (!C) G=this.GetBookmarkNode(A,false);var H=this.Window.document.body.createTextRange();H.moveToElementText(F);H.moveStart('character',1);if (G){var I=this.Window.document.body.createTextRange();I.moveToElementText(G);H.setEndPoint('EndToEnd',I);H.moveEnd('character',-1);}else{D=(B||!F.previousSibling||F.previousSibling.nodeName.toLowerCase()=='br')&&!F.nextSibing;E=this.Window.document.createElement('span');E.innerHTML='&#65279;';F.parentNode.insertBefore(E,F);if (D){F.parentNode.insertBefore(this.Window.document.createTextNode('\ufeff'),F);}};if (!this._Range) this._Range=this.CreateRange();this._Range.setStartBefore(F);F.parentNode.removeChild(F);if (C){if (D){H.moveStart('character',-1);H.select();this.Window.document.selection.clear();}else H.select();FCKDomTools.RemoveNode(E);}else{this._Range.setEndBefore(G);G.parentNode.removeChild(G);H.select();}};FCKDomRange.prototype._GetSelectionMarkerTag=function(A){var B=this.Window.document;var C=B.selection;var D;try{D=C.createRange();}catch (e){return null;};if (D.parentElement().document!=B) return null;D.collapse(A===true);var E='fck_dom_range_temp_'+(new Date()).valueOf()+'_'+Math.floor(Math.random()*1000);D.pasteHTML('<span id="'+E+'"></span>');return B.getElementById(E);};
+var FCKDomRangeIterator=function(A){this.Range=A;this.ForceBrBreak=false;this.EnforceRealBlocks=false;};FCKDomRangeIterator.CreateFromSelection=function(A){var B=new FCKDomRange(A);B.MoveToSelection();return new FCKDomRangeIterator(B);};FCKDomRangeIterator.prototype={GetNextParagraph:function(){var A;var B;var C;var D;var E;var F=this.ForceBrBreak?FCKListsLib.ListBoundaries:FCKListsLib.BlockBoundaries;if (!this._LastNode){var B=this.Range.Clone();B.Expand(this.ForceBrBreak?'list_contents':'block_contents');this._NextNode=B.GetTouchedStartNode();this._LastNode=B.GetTouchedEndNode();B=null;};var H=this._NextNode;var I=this._LastNode;this._NextNode=null;while (H){var J=false;var K=(H.nodeType!=1);var L=false;if (!K){var M=H.nodeName.toLowerCase();if (F[M]&&(!FCKBrowserInfo.IsIE||H.scopeName=='HTML')){if (M=='br') K=true;else if (!B&&H.childNodes.length==0&&M!='hr'){A=H;C=H==I;break;};if (B){B.SetEnd(H,3,true);if (M!='br') this._NextNode=H;};J=true;}else{if (H.firstChild){if (!B){B=new FCKDomRange(this.Range.Window);B.SetStart(H,3,true);};H=H.firstChild;continue;};K=true;}}else if (H.nodeType==3){if (/^[\r\n\t ]+$/.test(H.nodeValue)) K=false;};if (K&&!B){B=new FCKDomRange(this.Range.Window);B.SetStart(H,3,true);};C=((!J||K)&&H==I);if (B&&!J){while (!H.nextSibling&&!C){var N=H.parentNode;if (F[N.nodeName.toLowerCase()]){J=true;C=C||(N==I);break;};H=N;K=true;C=(H==I);L=true;}};if (K) B.SetEnd(H,4,true);if ((J||C)&&B){B._UpdateElementInfo();if (B.StartNode==B.EndNode&&B.StartNode.parentNode==B.StartBlockLimit&&B.StartNode.getAttribute&&B.StartNode.getAttribute('_fck_bookmark')) B=null;else break;};if (C) break;H=FCKDomTools.GetNextSourceNode(H,L,null,I);};if (!A){if (!B){this._NextNode=null;return null;};A=B.StartBlock;if (!A&&!this.EnforceRealBlocks&&B.StartBlockLimit.nodeName.IEquals('DIV','TH','TD')&&B.CheckStartOfBlock()&&B.CheckEndOfBlock()){A=B.StartBlockLimit;}else if (!A||(this.EnforceRealBlocks&&A.nodeName.toLowerCase()=='li')){A=this.Range.Window.document.createElement(FCKConfig.EnterMode=='p'?'p':'div');B.ExtractContents().AppendTo(A);FCKDomTools.TrimNode(A);B.InsertNode(A);D=true;E=true;}else if (A.nodeName.toLowerCase()!='li'){if (!B.CheckStartOfBlock()||!B.CheckEndOfBlock()){A=A.cloneNode(false);B.ExtractContents().AppendTo(A);FCKDomTools.TrimNode(A);var O=B.SplitBlock();D=!O.WasStartOfBlock;E=!O.WasEndOfBlock;B.InsertNode(A);}}else if (!C){this._NextNode=A==I?null:FCKDomTools.GetNextSourceNode(B.EndNode,true,null,I);return A;}};if (D){var P=A.previousSibling;if (P&&P.nodeType==1){if (P.nodeName.toLowerCase()=='br') P.parentNode.removeChild(P);else if (P.lastChild&&P.lastChild.nodeName.IEquals('br')) P.removeChild(P.lastChild);}};if (E){var Q=A.lastChild;if (Q&&Q.nodeType==1&&Q.nodeName.toLowerCase()=='br') A.removeChild(Q);};if (!this._NextNode) this._NextNode=(C||A==I)?null:FCKDomTools.GetNextSourceNode(A,true,null,I);return A;}};
+var FCKDocumentFragment=function(A){this._Document=A;this.RootNode=A.createElement('div');};FCKDocumentFragment.prototype={AppendTo:function(A){FCKDomTools.MoveChildren(this.RootNode,A);},AppendHtml:function(A){var B=this._Document.createElement('div');B.innerHTML=A;FCKDomTools.MoveChildren(B,this.RootNode);},InsertAfterNode:function(A){var B=this.RootNode;var C;while((C=B.lastChild)) FCKDomTools.InsertAfterNode(A,B.removeChild(C));}};
+var FCKW3CRange=function(A){this._Document=A;this.startContainer=null;this.startOffset=null;this.endContainer=null;this.endOffset=null;this.collapsed=true;};FCKW3CRange.CreateRange=function(A){return new FCKW3CRange(A);};FCKW3CRange.CreateFromRange=function(A,B){var C=FCKW3CRange.CreateRange(A);C.setStart(B.startContainer,B.startOffset);C.setEnd(B.endContainer,B.endOffset);return C;};FCKW3CRange.prototype={_UpdateCollapsed:function(){this.collapsed=(this.startContainer==this.endContainer&&this.startOffset==this.endOffset);},setStart:function(A,B){this.startContainer=A;this.startOffset=B;if (!this.endContainer){this.endContainer=A;this.endOffset=B;};this._UpdateCollapsed();},setEnd:function(A,B){this.endContainer=A;this.endOffset=B;if (!this.startContainer){this.startContainer=A;this.startOffset=B;};this._UpdateCollapsed();},setStartAfter:function(A){this.setStart(A.parentNode,FCKDomTools.GetIndexOf(A)+1);},setStartBefore:function(A){this.setStart(A.parentNode,FCKDomTools.GetIndexOf(A));},setEndAfter:function(A){this.setEnd(A.parentNode,FCKDomTools.GetIndexOf(A)+1);},setEndBefore:function(A){this.setEnd(A.parentNode,FCKDomTools.GetIndexOf(A));},collapse:function(A){if (A){this.endContainer=this.startContainer;this.endOffset=this.startOffset;}else{this.startContainer=this.endContainer;this.startOffset=this.endOffset;};this.collapsed=true;},selectNodeContents:function(A){this.setStart(A,0);this.setEnd(A,A.nodeType==3?A.data.length:A.childNodes.length);},insertNode:function(A){var B=this.startContainer;var C=this.startOffset;if (B.nodeType==3){B.splitText(C);if (B==this.endContainer) this.setEnd(B.nextSibling,this.endOffset-this.startOffset);FCKDomTools.InsertAfterNode(B,A);return;}else{B.insertBefore(A,B.childNodes[C]||null);if (B==this.endContainer){this.endOffset++;this.collapsed=false;}}},deleteContents:function(){if (this.collapsed) return;this._ExecContentsAction(0);},extractContents:function(){var A=new FCKDocumentFragment(this._Document);if (!this.collapsed) this._ExecContentsAction(1,A);return A;},cloneContents:function(){var A=new FCKDocumentFragment(this._Document);if (!this.collapsed) this._ExecContentsAction(2,A);return A;},_ExecContentsAction:function(A,B){var C=this.startContainer;var D=this.endContainer;var E=this.startOffset;var F=this.endOffset;var G=false;var H=false;if (D.nodeType==3) D=D.splitText(F);else{if (D.childNodes.length>0){if (F>D.childNodes.length-1){D=FCKDomTools.InsertAfterNode(D.lastChild,this._Document.createTextNode(''));H=true;}else D=D.childNodes[F];}};if (C.nodeType==3){C.splitText(E);if (C==D) D=C.nextSibling;}else{if (E==0){C=C.insertBefore(this._Document.createTextNode(''),C.firstChild);G=true;}else if (E>C.childNodes.length-1){C=C.appendChild(this._Document.createTextNode(''));G=true;}else C=C.childNodes[E].previousSibling;};var I=FCKDomTools.GetParents(C);var J=FCKDomTools.GetParents(D);var i,topStart,topEnd;for (i=0;i<I.length;i++){topStart=I[i];topEnd=J[i];if (topStart!=topEnd) break;};var K,levelStartNode,levelClone,currentNode,currentSibling;if (B) K=B.RootNode;for (var j=i;j<I.length;j++){levelStartNode=I[j];if (K&&levelStartNode!=C) levelClone=K.appendChild(levelStartNode.cloneNode(levelStartNode==C));currentNode=levelStartNode.nextSibling;while(currentNode){if (currentNode==J[j]||currentNode==D) break;currentSibling=currentNode.nextSibling;if (A==2) K.appendChild(currentNode.cloneNode(true));else{currentNode.parentNode.removeChild(currentNode);if (A==1) K.appendChild(currentNode);};currentNode=currentSibling;};if (K) K=levelClone;};if (B) K=B.RootNode;for (var k=i;k<J.length;k++){levelStartNode=J[k];if (A>0&&levelStartNode!=D) levelClone=K.appendChild(levelStartNode.cloneNode(levelStartNode==D));if (!I[k]||levelStartNode.parentNode!=I[k].parentNode){currentNode=levelStartNode.previousSibling;while(currentNode){if (currentNode==I[k]||currentNode==C) break;currentSibling=currentNode.previousSibling;if (A==2) K.insertBefore(currentNode.cloneNode(true),K.firstChild);else{currentNode.parentNode.removeChild(currentNode);if (A==1) K.insertBefore(currentNode,K.firstChild);};currentNode=currentSibling;}};if (K) K=levelClone;};if (A==2){var L=this.startContainer;if (L.nodeType==3){L.data+=L.nextSibling.data;L.parentNode.removeChild(L.nextSibling);};var M=this.endContainer;if (M.nodeType==3&&M.nextSibling){M.data+=M.nextSibling.data;M.parentNode.removeChild(M.nextSibling);}}else{if (topStart&&topEnd&&(C.parentNode!=topStart.parentNode||D.parentNode!=topEnd.parentNode)){var N=FCKDomTools.GetIndexOf(topEnd);if (G&&topEnd.parentNode==C.parentNode) N--;this.setStart(topEnd.parentNode,N);};this.collapse(true);};if(G) C.parentNode.removeChild(C);if(H&&D.parentNode) D.parentNode.removeChild(D);},cloneRange:function(){return FCKW3CRange.CreateFromRange(this._Document,this);}};
+var FCKEnterKey=function(A,B,C,D){this.Window=A;this.EnterMode=B||'p';this.ShiftEnterMode=C||'br';var E=new FCKKeystrokeHandler(false);E._EnterKey=this;E.OnKeystroke=FCKEnterKey_OnKeystroke;E.SetKeystrokes([[13,'Enter'],[SHIFT+13,'ShiftEnter'],[8,'Backspace'],[CTRL+8,'CtrlBackspace'],[46,'Delete']]);this.TabText='';if (D>0||FCKBrowserInfo.IsSafari){while (D--) this.TabText+='\xa0';E.SetKeystrokes([9,'Tab']);};E.AttachToElement(A.document);};function FCKEnterKey_OnKeystroke(A,B){var C=this._EnterKey;try{switch (B){case 'Enter':return C.DoEnter();break;case 'ShiftEnter':return C.DoShiftEnter();break;case 'Backspace':return C.DoBackspace();break;case 'Delete':return C.DoDelete();break;case 'Tab':return C.DoTab();break;case 'CtrlBackspace':return C.DoCtrlBackspace();break;}}catch (e){};return false;};FCKEnterKey.prototype.DoEnter=function(A,B){FCKUndo.SaveUndoStep();this._HasShift=(B===true);var C=FCKSelection.GetParentElement();var D=new FCKElementPath(C);var E=A||this.EnterMode;if (E=='br'||D.Block&&D.Block.tagName.toLowerCase()=='pre') return this._ExecuteEnterBr();else return this._ExecuteEnterBlock(E);};FCKEnterKey.prototype.DoShiftEnter=function(){return this.DoEnter(this.ShiftEnterMode,true);};FCKEnterKey.prototype.DoBackspace=function(){var A=false;var B=new FCKDomRange(this.Window);B.MoveToSelection();if (FCKBrowserInfo.IsIE&&this._CheckIsAllContentsIncluded(B,this.Window.document.body)){this._FixIESelectAllBug(B);return true;};var C=B.CheckIsCollapsed();if (!C){if (FCKBrowserInfo.IsIE&&this.Window.document.selection.type.toLowerCase()=="control"){var D=this.Window.document.selection.createRange();for (var i=D.length-1;i>=0;i--){var E=D.item(i);E.parentNode.removeChild(E);};return true;};return false;};if (FCKBrowserInfo.IsIE){var F=FCKDomTools.GetPreviousSourceElement(B.StartNode,true);if (F&&F.nodeName.toLowerCase()=='br'){var G=B.Clone();G.SetStart(F,4);if (G.CheckIsEmpty()){F.parentNode.removeChild(F);return true;}}};var H=B.StartBlock;var I=B.EndBlock;if (B.StartBlockLimit==B.EndBlockLimit&&H&&I){if (!C){var J=B.CheckEndOfBlock();B.DeleteContents();if (H!=I){B.SetStart(I,1);B.SetEnd(I,1);};B.Select();A=(H==I);};if (B.CheckStartOfBlock()){var K=B.StartBlock;var L=FCKDomTools.GetPreviousSourceElement(K,true,['BODY',B.StartBlockLimit.nodeName],['UL','OL']);A=this._ExecuteBackspace(B,L,K);}else if (FCKBrowserInfo.IsGeckoLike){B.Select();}};B.Release();return A;};FCKEnterKey.prototype.DoCtrlBackspace=function(){FCKUndo.SaveUndoStep();var A=new FCKDomRange(this.Window);A.MoveToSelection();if (FCKBrowserInfo.IsIE&&this._CheckIsAllContentsIncluded(A,this.Window.document.body)){this._FixIESelectAllBug(A);return true;};return false;};FCKEnterKey.prototype._ExecuteBackspace=function(A,B,C){var D=false;if (!B&&C&&C.nodeName.IEquals('LI')&&C.parentNode.parentNode.nodeName.IEquals('LI')){this._OutdentWithSelection(C,A);return true;};if (B&&B.nodeName.IEquals('LI')){var E=FCKDomTools.GetLastChild(B,['UL','OL']);while (E){B=FCKDomTools.GetLastChild(E,'LI');E=FCKDomTools.GetLastChild(B,['UL','OL']);}};if (B&&C){if (C.nodeName.IEquals('LI')&&!B.nodeName.IEquals('LI')){this._OutdentWithSelection(C,A);return true;};var F=C.parentNode;var G=B.nodeName.toLowerCase();if (FCKListsLib.EmptyElements[G]!=null||G=='table'){FCKDomTools.RemoveNode(B);D=true;}else{FCKDomTools.RemoveNode(C);while (F.innerHTML.Trim().length==0){var H=F.parentNode;H.removeChild(F);F=H;};FCKDomTools.LTrimNode(C);FCKDomTools.RTrimNode(B);A.SetStart(B,2,true);A.Collapse(true);var I=A.CreateBookmark(true);if (!C.tagName.IEquals(['TABLE'])) FCKDomTools.MoveChildren(C,B);A.SelectBookmark(I);D=true;}};return D;};FCKEnterKey.prototype.DoDelete=function(){FCKUndo.SaveUndoStep();var A=false;var B=new FCKDomRange(this.Window);B.MoveToSelection();if (FCKBrowserInfo.IsIE&&this._CheckIsAllContentsIncluded(B,this.Window.document.body)){this._FixIESelectAllBug(B);return true;};if (B.CheckIsCollapsed()&&B.CheckEndOfBlock(FCKBrowserInfo.IsGeckoLike)){var C=B.StartBlock;var D=FCKTools.GetElementAscensor(C,'td');var E=FCKDomTools.GetNextSourceElement(C,true,[B.StartBlockLimit.nodeName],['UL','OL','TR'],true);if (D){var F=FCKTools.GetElementAscensor(E,'td');if (F!=D) return true;};A=this._ExecuteBackspace(B,C,E);};B.Release();return A;};FCKEnterKey.prototype.DoTab=function(){var A=new FCKDomRange(this.Window);A.MoveToSelection();var B=A._Range.startContainer;while (B){if (B.nodeType==1){var C=B.tagName.toLowerCase();if (C=="tr"||C=="td"||C=="th"||C=="tbody"||C=="table") return false;else break;};B=B.parentNode;};if (this.TabText){A.DeleteContents();A.InsertNode(this.Window.document.createTextNode(this.TabText));A.Collapse(false);A.Select();};return true;};FCKEnterKey.prototype._ExecuteEnterBlock=function(A,B){var C=B||new FCKDomRange(this.Window);var D=C.SplitBlock(A);if (D){var E=D.PreviousBlock;var F=D.NextBlock;var G=D.WasStartOfBlock;var H=D.WasEndOfBlock;if (F){if (F.parentNode.nodeName.IEquals('li')){FCKDomTools.BreakParent(F,F.parentNode);FCKDomTools.MoveNode(F,F.nextSibling,true);}}else if (E&&E.parentNode.nodeName.IEquals('li')){FCKDomTools.BreakParent(E,E.parentNode);C.MoveToElementEditStart(E.nextSibling);FCKDomTools.MoveNode(E,E.previousSibling);};if (!G&&!H){if (F.nodeName.IEquals('li')&&F.firstChild&&F.firstChild.nodeName.IEquals(['ul','ol'])) F.insertBefore(FCKTools.GetElementDocument(F).createTextNode('\xa0'),F.firstChild);if (F) C.MoveToElementEditStart(F);}else{if (G&&H&&E.tagName.toUpperCase()=='LI'){C.MoveToElementStart(E);this._OutdentWithSelection(E,C);C.Release();return true;};var I;if (E){var J=E.tagName.toUpperCase();if (!this._HasShift&&!(/^H[1-6]$/).test(J)){I=FCKDomTools.CloneElement(E);}}else if (F) I=FCKDomTools.CloneElement(F);if (!I) I=this.Window.document.createElement(A);var K=D.ElementPath;if (K){for (var i=0,len=K.Elements.length;i<len;i++){var L=K.Elements[i];if (L==K.Block||L==K.BlockLimit) break;if (FCKListsLib.InlineChildReqElements[L.nodeName.toLowerCase()]){L=FCKDomTools.CloneElement(L);FCKDomTools.MoveChildren(I,L);I.appendChild(L);}}};if (FCKBrowserInfo.IsGeckoLike) FCKTools.AppendBogusBr(I);C.InsertNode(I);if (FCKBrowserInfo.IsIE){C.MoveToElementEditStart(I);C.Select();};C.MoveToElementEditStart(G&&!H?F:I);};if (FCKBrowserInfo.IsGeckoLike) FCKDomTools.ScrollIntoView(F||I,false);C.Select();};C.Release();return true;};FCKEnterKey.prototype._ExecuteEnterBr=function(A){var B=new FCKDomRange(this.Window);B.MoveToSelection();if (B.StartBlockLimit==B.EndBlockLimit){B.DeleteContents();B.MoveToSelection();var C=B.CheckStartOfBlock();var D=B.CheckEndOfBlock();var E=B.StartBlock?B.StartBlock.tagName.toUpperCase():'';var F=this._HasShift;var G=false;if (!F&&E=='LI') return this._ExecuteEnterBlock(null,B);if (!F&&D&&(/^H[1-6]$/).test(E)){FCKDomTools.InsertAfterNode(B.StartBlock,this.Window.document.createElement('br'));if (FCKBrowserInfo.IsGecko) FCKDomTools.InsertAfterNode(B.StartBlock,this.Window.document.createTextNode(''));B.SetStart(B.StartBlock.nextSibling,FCKBrowserInfo.IsIE?3:1);}else{var H;G=E.IEquals('pre');if (G) H=this.Window.document.createTextNode(FCKBrowserInfo.IsIE?'\r':'\n');else H=this.Window.document.createElement('br');B.InsertNode(H);if (FCKBrowserInfo.IsGecko) FCKDomTools.InsertAfterNode(H,this.Window.document.createTextNode(''));if (D&&FCKBrowserInfo.IsGeckoLike) FCKTools.AppendBogusBr(H.parentNode);if (FCKBrowserInfo.IsIE) B.SetStart(H,4);else B.SetStart(H.nextSibling,1);if (!FCKBrowserInfo.IsIE){var I=null;if (FCKBrowserInfo.IsOpera) I=this.Window.document.createElement('span');else I=this.Window.document.createElement('br');H.parentNode.insertBefore(I,H.nextSibling);if (FCKBrowserInfo.IsSafari) FCKDomTools.ScrollIntoView(I,false);else I.scrollIntoView(false);I.parentNode.removeChild(I);}};B.Collapse(true);B.Select(G);};B.Release();return true;};FCKEnterKey.prototype._OutdentWithSelection=function(A,B){var C=B.CreateBookmark();FCKListHandler.OutdentListItem(A);B.MoveToBookmark(C);B.Select();};FCKEnterKey.prototype._CheckIsAllContentsIncluded=function(A,B){var C=false;var D=false;if (A.StartContainer==B||A.StartContainer==B.firstChild) C=(A._Range.startOffset==0);if (A.EndContainer==B||A.EndContainer==B.lastChild){var E=A.EndContainer.nodeType==3?A.EndContainer.length:A.EndContainer.childNodes.length;D=(A._Range.endOffset==E);};return C&&D;};FCKEnterKey.prototype._FixIESelectAllBug=function(A){var B=this.Window.document;B.body.innerHTML='';var C;if (FCKConfig.EnterMode.IEquals(['div','p'])){C=B.createElement(FCKConfig.EnterMode);B.body.appendChild(C);}else C=B.body;A.MoveToNodeContents(C);A.Collapse(true);A.Select();A.Release();};
+var FCKDocumentProcessor={};FCKDocumentProcessor._Items=[];FCKDocumentProcessor.AppendNew=function(){var A={};this._Items.AddItem(A);return A;};FCKDocumentProcessor.Process=function(A){var B=FCK.IsDirty();var C,i=0;while((C=this._Items[i++])) C.ProcessDocument(A);if (!B) FCK.ResetIsDirty();};var FCKDocumentProcessor_CreateFakeImage=function(A,B){var C=FCKTools.GetElementDocument(B).createElement('IMG');C.className=A;C.src=FCKConfig.BasePath+'images/spacer.gif';C.setAttribute('_fckfakelement','true',0);C.setAttribute('_fckrealelement',FCKTempBin.AddElement(B),0);return C;};if (FCKBrowserInfo.IsIE||FCKBrowserInfo.IsOpera){var FCKAnchorsProcessor=FCKDocumentProcessor.AppendNew();FCKAnchorsProcessor.ProcessDocument=function(A){var B=A.getElementsByTagName('A');var C;var i=B.length-1;while (i>=0&&(C=B[i--])){if (C.name.length>0){if (C.innerHTML!==''){if (FCKBrowserInfo.IsIE) C.className+=' FCK__AnchorC';}else{var D=FCKDocumentProcessor_CreateFakeImage('FCK__Anchor',C.cloneNode(true));D.setAttribute('_fckanchor','true',0);C.parentNode.insertBefore(D,C);C.parentNode.removeChild(C);}}}}};var FCKPageBreaksProcessor=FCKDocumentProcessor.AppendNew();FCKPageBreaksProcessor.ProcessDocument=function(A){var B=A.getElementsByTagName('DIV');var C;var i=B.length-1;while (i>=0&&(C=B[i--])){if (C.style.pageBreakAfter=='always'&&C.childNodes.length==1&&C.childNodes[0].style&&C.childNodes[0].style.display=='none'){var D=FCKDocumentProcessor_CreateFakeImage('FCK__PageBreak',C.cloneNode(true));C.parentNode.insertBefore(D,C);C.parentNode.removeChild(C);}}};FCKEmbedAndObjectProcessor=(function(){var A=[];var B=function(el){var C=el.cloneNode(true);var D;var E=D=FCKDocumentProcessor_CreateFakeImage('FCK__UnknownObject',C);FCKEmbedAndObjectProcessor.RefreshView(E,el);for (var i=0;i<A.length;i++) D=A[i](el,D)||D;if (D!=E) FCKTempBin.RemoveElement(E.getAttribute('_fckrealelement'));el.parentNode.replaceChild(D,el);};return FCKTools.Merge(FCKDocumentProcessor.AppendNew(),{ProcessDocument:function(doc){FCKTools.RunFunction(function(){var F=doc.getElementsByTagName('object');for (var i=F.length-1;i>=0;i--) B(F[i]);var G=doc.getElementsByTagName('embed');for (var i=G.length-1;i>=0;i--) B(G[i]);});},RefreshView:function(placeHolder,original){if (original.getAttribute('width')>0) placeHolder.style.width=FCKTools.ConvertHtmlSizeToStyle(original.getAttribute('width'));if (original.getAttribute('height')>0) placeHolder.style.height=FCKTools.ConvertHtmlSizeToStyle(original.getAttribute('height'));},AddCustomHandler:function(func){A.push(func);}});})();FCK.GetRealElement=function(A){var e=FCKTempBin.Elements[A.getAttribute('_fckrealelement')];if (A.getAttribute('_fckflash')){if (A.style.width.length>0) e.width=FCKTools.ConvertStyleSizeToHtml(A.style.width);if (A.style.height.length>0) e.height=FCKTools.ConvertStyleSizeToHtml(A.style.height);};return e;};if (FCKBrowserInfo.IsIE){FCKDocumentProcessor.AppendNew().ProcessDocument=function(A){var B=A.getElementsByTagName('HR');var C;var i=B.length-1;while (i>=0&&(C=B[i--])){var D=A.createElement('hr');D.mergeAttributes(C,true);FCKDomTools.InsertAfterNode(C,D);C.parentNode.removeChild(C);}}};FCKDocumentProcessor.AppendNew().ProcessDocument=function(A){var B=A.getElementsByTagName('INPUT');var C;var i=B.length-1;while (i>=0&&(C=B[i--])){if (C.type=='hidden'){var D=FCKDocumentProcessor_CreateFakeImage('FCK__InputHidden',C.cloneNode(true));D.setAttribute('_fckinputhidden','true',0);C.parentNode.insertBefore(D,C);C.parentNode.removeChild(C);}}};FCKEmbedAndObjectProcessor.AddCustomHandler(function(A,B){if (!(A.nodeName.IEquals('embed')&&(A.type=='application/x-shockwave-flash'||/\.swf($|#|\?)/i.test(A.src)))) return;B.className='FCK__Flash';B.setAttribute('_fckflash','true',0);});if (FCKBrowserInfo.IsSafari){FCKDocumentProcessor.AppendNew().ProcessDocument=function(A){var B=A.getElementsByClassName?A.getElementsByClassName('Apple-style-span'):Array.prototype.filter.call(A.getElementsByTagName('span'),function(item){ return item.className=='Apple-style-span';});for (var i=B.length-1;i>=0;i--) FCKDomTools.RemoveNode(B[i],true);}};
+var FCKSelection=FCK.Selection={GetParentBlock:function(){var A=this.GetParentElement();while (A){if (FCKListsLib.BlockBoundaries[A.nodeName.toLowerCase()]) break;A=A.parentNode;};return A;},ApplyStyle:function(A){FCKStyles.ApplyStyle(new FCKStyle(A));}};
+FCKSelection.GetType=function(){try{var A=FCKSelection.GetSelection().type;if (A=='Control'||A=='Text') return A;if (this.GetSelection().createRange().parentElement) return 'Text';}catch(e){};return 'None';};FCKSelection.GetSelectedElement=function(){if (this.GetType()=='Control'){var A=this.GetSelection().createRange();if (A&&A.item) return this.GetSelection().createRange().item(0);};return null;};FCKSelection.GetParentElement=function(){switch (this.GetType()){case 'Control':var A=FCKSelection.GetSelectedElement();return A?A.parentElement:null;case 'None':return null;default:return this.GetSelection().createRange().parentElement();}};FCKSelection.GetBoundaryParentElement=function(A){switch (this.GetType()){case 'Control':var B=FCKSelection.GetSelectedElement();return B?B.parentElement:null;case 'None':return null;default:var C=FCK.EditorDocument;var D=C.selection.createRange();D.collapse(A!==false);var B=D.parentElement();return FCKTools.GetElementDocument(B)==C?B:null;}};FCKSelection.SelectNode=function(A){FCK.Focus();this.GetSelection().empty();var B;try{B=FCK.EditorDocument.body.createControlRange();B.addElement(A);}catch(e){B=FCK.EditorDocument.body.createTextRange();B.moveToElementText(A);};B.select();};FCKSelection.Collapse=function(A){FCK.Focus();if (this.GetType()=='Text'){var B=this.GetSelection().createRange();B.collapse(A==null||A===true);B.select();}};FCKSelection.HasAncestorNode=function(A){var B;if (this.GetSelection().type=="Control"){B=this.GetSelectedElement();}else{var C=this.GetSelection().createRange();B=C.parentElement();}while (B){if (B.nodeName.IEquals(A)) return true;B=B.parentNode;};return false;};FCKSelection.MoveToAncestorNode=function(A){var B,oRange;if (!FCK.EditorDocument) return null;if (this.GetSelection().type=="Control"){oRange=this.GetSelection().createRange();for (i=0;i<oRange.length;i++){if (oRange(i).parentNode){B=oRange(i).parentNode;break;}}}else{oRange=this.GetSelection().createRange();B=oRange.parentElement();}while (B&&B.nodeName!=A) B=B.parentNode;return B;};FCKSelection.Delete=function(){var A=this.GetSelection();if (A.type.toLowerCase()!="none"){A.clear();};return A;};FCKSelection.GetSelection=function(){this.Restore();return FCK.EditorDocument.selection;};FCKSelection.Save=function(){FCK.Focus();var A=FCK.EditorDocument;if (!A) return;var B=A.selection;var C;if (B){C=B.createRange();if (C){if (C.parentElement&&FCKTools.GetElementDocument(C.parentElement())!=A) C=null;else if (C.item&&FCKTools.GetElementDocument(C.item(0))!=A) C=null;}};this.SelectionData=C;};FCKSelection._GetSelectionDocument=function(A){var B=A.createRange();if (!B) return null;else if (B.item) return FCKTools.GetElementDocument(B.item(0));else return FCKTools.GetElementDocument(B.parentElement());};FCKSelection.Restore=function(){if (this.SelectionData){FCK.IsSelectionChangeLocked=true;try{if (this._GetSelectionDocument(FCK.EditorDocument.selection)==FCK.EditorDocument){FCK.IsSelectionChangeLocked=false;return;};this.SelectionData.select();}catch (e) {};FCK.IsSelectionChangeLocked=false;}};FCKSelection.Release=function(){delete this.SelectionData;};
+var FCKTableHandler={};FCKTableHandler.InsertRow=function(A){var B=FCKSelection.MoveToAncestorNode('TR');if (!B) return;var C=B.cloneNode(true);B.parentNode.insertBefore(C,B);FCKTableHandler.ClearRow(A?C:B);};FCKTableHandler.DeleteRows=function(A){if (!A){var B=FCKTableHandler.GetSelectedCells();var C=[];for (var i=0;i<B.length;i++){var D=FCKTools.GetElementAscensor(B[i],'TR');C[D.rowIndex]=D;};for (var i=C.length;i>=0;i--){if (C[i]) FCKTableHandler.DeleteRows(C[i]);};return;};var E=FCKTools.GetElementAscensor(A,'TABLE');if (E.rows.length==1){FCKTableHandler.DeleteTable(E);return;};A.parentNode.removeChild(A);};FCKTableHandler.DeleteTable=function(A){if (!A){A=FCKSelection.GetSelectedElement();if (!A||A.tagName!='TABLE') A=FCKSelection.MoveToAncestorNode('TABLE');};if (!A) return;FCKSelection.SelectNode(A);FCKSelection.Collapse();if (A.parentNode.childNodes.length==1) A.parentNode.parentNode.removeChild(A.parentNode);else A.parentNode.removeChild(A);};FCKTableHandler.InsertColumn=function(A){var B=null;var C=this.GetSelectedCells();if (C&&C.length) B=C[A?0:(C.length-1)];if (!B) return;var D=FCKTools.GetElementAscensor(B,'TABLE');var E=B.cellIndex;for (var i=0;i<D.rows.length;i++){var F=D.rows[i];if (F.cells.length<(E+1)) continue;B=F.cells[E].cloneNode(false);if (FCKBrowserInfo.IsGeckoLike) FCKTools.AppendBogusBr(B);var G=F.cells[E];if (A) F.insertBefore(B,G);else if (G.nextSibling) F.insertBefore(B,G.nextSibling);else F.appendChild(B);}};FCKTableHandler.DeleteColumns=function(A){if (!A){var B=FCKTableHandler.GetSelectedCells();for (var i=B.length;i>=0;i--){if (B[i]) FCKTableHandler.DeleteColumns(B[i]);};return;};if (!A) return;var C=FCKTools.GetElementAscensor(A,'TABLE');var D=A.cellIndex;for (var i=C.rows.length-1;i>=0;i--){var E=C.rows[i];if (D==0&&E.cells.length==1){FCKTableHandler.DeleteRows(E);continue;};if (E.cells[D]) E.removeChild(E.cells[D]);}};FCKTableHandler.InsertCell=function(A,B){var C=null;var D=this.GetSelectedCells();if (D&&D.length) C=D[B?0:(D.length-1)];if (!C) return null;var E=FCK.EditorDocument.createElement('TD');if (FCKBrowserInfo.IsGeckoLike) FCKTools.AppendBogusBr(E);if (!B&&C.cellIndex==C.parentNode.cells.length-1) C.parentNode.appendChild(E);else C.parentNode.insertBefore(E,B?C:C.nextSibling);return E;};FCKTableHandler.DeleteCell=function(A){if (A.parentNode.cells.length==1){FCKTableHandler.DeleteRows(FCKTools.GetElementAscensor(A,'TR'));return;};A.parentNode.removeChild(A);};FCKTableHandler.DeleteCells=function(){var A=FCKTableHandler.GetSelectedCells();for (var i=A.length-1;i>=0;i--){FCKTableHandler.DeleteCell(A[i]);}};FCKTableHandler._MarkCells=function(A,B){for (var i=0;i<A.length;i++) A[i][B]=true;};FCKTableHandler._UnmarkCells=function(A,B){for (var i=0;i<A.length;i++){if (FCKBrowserInfo.IsIE) A[i].removeAttribute(B);else delete A[i][B];}};FCKTableHandler._ReplaceCellsByMarker=function(A,B,C){for (var i=0;i<A.length;i++){for (var j=0;j<A[i].length;j++){if (A[i][j][B]) A[i][j]=C;}}};FCKTableHandler._GetMarkerGeometry=function(A,B,C,D){var E=0;var F=0;var G=0;var H=0;for (var i=C;A[B][i]&&A[B][i][D];i++) E++;for (var i=C-1;A[B][i]&&A[B][i][D];i--){E++;G++;};for (var i=B;A[i]&&A[i][C]&&A[i][C][D];i++) F++;for (var i=B-1;A[i]&&A[i][C]&&A[i][C][D];i--){F++;H++;};return { 'width':E,'height':F,'x':G,'y':H };};FCKTableHandler.CheckIsSelectionRectangular=function(){var A=FCKTableHandler.GetSelectedCells();if (A.length<1) return false;this._MarkCells(A,'_CellSelected');var B=this._CreateTableMap(A[0].parentNode.parentNode);var C=A[0].parentNode.rowIndex;var D=this._GetCellIndexSpan(B,C,A[0]);var E=this._GetMarkerGeometry(B,C,D,'_CellSelected');var F=D-E.x;var G=C-E.y;if (E.width>=E.height){for (D=F;D<F+E.width;D++){C=G+(D-F) % E.height;if (!B[C]||!B[C][D]){this._UnmarkCells(A,'_CellSelected');return false;};var g=this._GetMarkerGeometry(B,C,D,'_CellSelected');if (g.width!=E.width||g.height!=E.height){this._UnmarkCells(A,'_CellSelected');return false;}}}else{for (C=G;C<G+E.height;C++){D=F+(C-G) % E.width;if (!B[C]||!B[C][D]){this._UnmarkCells(A,'_CellSelected');return false;};var g=this._GetMarkerGeometry(B,C,D,'_CellSelected');if (g.width!=E.width||g.height!=E.height){this._UnmarkCells(A,'_CellSelected');return false;}}};this._UnmarkCells(A,'_CellSelected');return true;};FCKTableHandler.MergeCells=function(){var A=this.GetSelectedCells();if (A.length<2) return;var B=A[0];var C=this._CreateTableMap(B.parentNode.parentNode);var D=B.parentNode.rowIndex;var E=this._GetCellIndexSpan(C,D,B);this._MarkCells(A,'_SelectedCells');var F=this._GetMarkerGeometry(C,D,E,'_SelectedCells');var G=E-F.x;var H=D-F.y;var I=FCKTools.GetElementDocument(B).createDocumentFragment();for (var i=0;i<F.height;i++){var J=0;for (var j=0;j<F.width;j++){var K=C[H+i][G+j];while (K.childNodes.length>0){var L=K.removeChild(K.firstChild);if (L.nodeType!=1||(L.getAttribute('type',2)!='_moz'&&L.getAttribute('_moz_dirty')!=null)){I.appendChild(L);J++;}}};if (J>0) I.appendChild(FCKTools.GetElementDocument(B).createElement('br'));};this._ReplaceCellsByMarker(C,'_SelectedCells',B);this._UnmarkCells(A,'_SelectedCells');this._InstallTableMap(C,B.parentNode.parentNode);B.appendChild(I);if (FCKBrowserInfo.IsGeckoLike&&(!B.firstChild)) FCKTools.AppendBogusBr(B);this._MoveCaretToCell(B,false);};FCKTableHandler.MergeRight=function(){var A=this.GetMergeRightTarget();if (A==null) return;var B=A.refCell;var C=A.tableMap;var D=A.nextCell;var E=FCK.EditorDocument.createDocumentFragment();while (D&&D.childNodes&&D.childNodes.length>0) E.appendChild(D.removeChild(D.firstChild));D.parentNode.removeChild(D);B.appendChild(E);this._MarkCells([D],'_Replace');this._ReplaceCellsByMarker(C,'_Replace',B);this._InstallTableMap(C,B.parentNode.parentNode);this._MoveCaretToCell(B,false);};FCKTableHandler.MergeDown=function(){var A=this.GetMergeDownTarget();if (A==null) return;var B=A.refCell;var C=A.tableMap;var D=A.nextCell;var E=FCKTools.GetElementDocument(B).createDocumentFragment();while (D&&D.childNodes&&D.childNodes.length>0) E.appendChild(D.removeChild(D.firstChild));if (E.firstChild) E.insertBefore(FCKTools.GetElementDocument(D).createElement('br'),E.firstChild);B.appendChild(E);this._MarkCells([D],'_Replace');this._ReplaceCellsByMarker(C,'_Replace',B);this._InstallTableMap(C,B.parentNode.parentNode);this._MoveCaretToCell(B,false);};FCKTableHandler.HorizontalSplitCell=function(){var A=FCKTableHandler.GetSelectedCells();if (A.length!=1) return;var B=A[0];var C=this._CreateTableMap(B.parentNode.parentNode);var D=B.parentNode.rowIndex;var E=FCKTableHandler._GetCellIndexSpan(C,D,B);var F=isNaN(B.colSpan)?1:B.colSpan;if (F>1){var G=Math.ceil(F/2);var H=FCKTools.GetElementDocument(B).createElement('td');if (FCKBrowserInfo.IsGeckoLike) FCKTools.AppendBogusBr(H);var I=E+G;var J=E+F;var K=isNaN(B.rowSpan)?1:B.rowSpan;for (var r=D;r<D+K;r++){for (var i=I;i<J;i++) C[r][i]=H;}}else{var L=[];for (var i=0;i<C.length;i++){var M=C[i].slice(0,E);if (C[i].length<=E){L.push(M);continue;};if (C[i][E]==B){M.push(B);M.push(FCKTools.GetElementDocument(B).createElement('td'));if (FCKBrowserInfo.IsGeckoLike) FCKTools.AppendBogusBr(M[M.length-1]);}else{M.push(C[i][E]);M.push(C[i][E]);};for (var j=E+1;j<C[i].length;j++) M.push(C[i][j]);L.push(M);};C=L;};this._InstallTableMap(C,B.parentNode.parentNode);};FCKTableHandler.VerticalSplitCell=function(){var A=FCKTableHandler.GetSelectedCells();if (A.length!=1) return;var B=A[0];var C=this._CreateTableMap(B.parentNode.parentNode);var D=FCKTableHandler._GetCellIndexSpan(C,B.parentNode.rowIndex,B);var E=B.rowSpan;var F=B.parentNode.rowIndex;if (isNaN(E)) E=1;if (E>1){B.rowSpan=Math.ceil(E/2);var G=F+Math.ceil(E/2);var H=null;for (var i=D+1;i<C[G].length;i++){if (C[G][i].parentNode.rowIndex==G){H=C[G][i];break;}};var I=FCK.EditorDocument.createElement('td');I.rowSpan=Math.floor(E/2);if (FCKBrowserInfo.IsGeckoLike) FCKTools.AppendBogusBr(I);B.parentNode.parentNode.rows[G].insertBefore(I,H);}else{var G=F+1;var K=FCK.EditorDocument.createElement('tr');B.parentNode.parentNode.insertBefore(K,B.parentNode.parentNode.rows[G]);for (var i=0;i<C[F].length;){var L=C[F][i].colSpan;if (isNaN(L)||L<1) L=1;if (i==D){i+=L;continue;};var M=C[F][i].rowSpan;if (isNaN(M)) M=1;C[F][i].rowSpan=M+1;i+=L;};var I=FCK.EditorDocument.createElement('td');if (FCKBrowserInfo.IsGeckoLike) FCKTools.AppendBogusBr(I);K.appendChild(I);}};FCKTableHandler._GetCellIndexSpan=function(A,B,C){if (A.length<B+1) return null;var D=A[B];for (var c=0;c<D.length;c++){if (D[c]==C) return c;};return null;};FCKTableHandler._GetCellLocation=function(A,B){for (var i=0;i<A.length;i++){for (var c=0;c<A[i].length;c++){if (A[i][c]==B) return [i,c];}};return null;};FCKTableHandler._GetColumnCells=function(A,B){var C=[];for (var r=0;r<A.length;r++){var D=A[r][B];if (D&&(C.length==0||C[C.length-1]!=D)) C[C.length]=D;};return C;};FCKTableHandler._CreateTableMap=function(A){var B=A.rows;var r=-1;var C=[];for (var i=0;i<B.length;i++){r++;if (!C[r]) C[r]=[];var c=-1;for (var j=0;j<B[i].cells.length;j++){var D=B[i].cells[j];c++;while (C[r][c]) c++;var E=isNaN(D.colSpan)?1:D.colSpan;var F=isNaN(D.rowSpan)?1:D.rowSpan;for (var G=0;G<F;G++){if (!C[r+G]) C[r+G]=[];for (var H=0;H<E;H++){C[r+G][c+H]=B[i].cells[j];}};c+=E-1;}};return C;};FCKTableHandler._InstallTableMap=function(A,B){while (B.rows.length>0){var C=B.rows[0];C.parentNode.removeChild(C);};for (var i=0;i<A.length;i++){for (var j=0;j<A[i].length;j++){var D=A[i][j];if (D.parentNode) D.parentNode.removeChild(D);D.colSpan=D.rowSpan=1;}};var E=0;for (var i=0;i<A.length;i++){for (var j=0;j<A[i].length;j++){var D=A[i][j];if (!D) continue;if (j>E) E=j;if (D._colScanned===true) continue;if (A[i][j-1]==D) D.colSpan++;if (A[i][j+1]!=D) D._colScanned=true;}};for (var i=0;i<=E;i++){for (var j=0;j<A.length;j++){if (!A[j]) continue;var D=A[j][i];if (!D||D._rowScanned===true) continue;if (A[j-1]&&A[j-1][i]==D) D.rowSpan++;if (!A[j+1]||A[j+1][i]!=D) D._rowScanned=true;}};for (var i=0;i<A.length;i++){for (var j=0;j<A[i].length;j++){var D=A[i][j];if (FCKBrowserInfo.IsIE){D.removeAttribute('_colScanned');D.removeAttribute('_rowScanned');}else{delete D._colScanned;delete D._rowScanned;}}};for (var i=0;i<A.length;i++){var I=FCKTools.GetElementDocument(B).createElement('tr');for (var j=0;j<A[i].length;){var D=A[i][j];if (A[i-1]&&A[i-1][j]==D){j+=D.colSpan;continue;};I.appendChild(D);j+=D.colSpan;if (D.colSpan==1) D.removeAttribute('colspan');if (D.rowSpan==1) D.removeAttribute('rowspan');};B.appendChild(I);}};FCKTableHandler._MoveCaretToCell=function (A,B){var C=new FCKDomRange(FCK.EditorWindow);C.MoveToNodeContents(A);C.Collapse(B);C.Select();};FCKTableHandler.ClearRow=function(A){var B=A.cells;for (var i=0;i<B.length;i++){B[i].innerHTML='';if (FCKBrowserInfo.IsGeckoLike) FCKTools.AppendBogusBr(B[i]);}};FCKTableHandler.GetMergeRightTarget=function(){var A=this.GetSelectedCells();if (A.length!=1) return null;var B=A[0];var C=this._CreateTableMap(B.parentNode.parentNode);var D=B.parentNode.rowIndex;var E=this._GetCellIndexSpan(C,D,B);var F=E+(isNaN(B.colSpan)?1:B.colSpan);var G=C[D][F];if (!G) return null;this._MarkCells([B,G],'_SizeTest');var H=this._GetMarkerGeometry(C,D,E,'_SizeTest');var I=this._GetMarkerGeometry(C,D,F,'_SizeTest');this._UnmarkCells([B,G],'_SizeTest');if (H.height!=I.height||H.y!=I.y) return null;return { 'refCell':B,'nextCell':G,'tableMap':C };};FCKTableHandler.GetMergeDownTarget=function(){var A=this.GetSelectedCells();if (A.length!=1) return null;var B=A[0];var C=this._CreateTableMap(B.parentNode.parentNode);var D=B.parentNode.rowIndex;var E=this._GetCellIndexSpan(C,D,B);var F=D+(isNaN(B.rowSpan)?1:B.rowSpan);if (!C[F]) return null;var G=C[F][E];if (!G) return null;this._MarkCells([B,G],'_SizeTest');var H=this._GetMarkerGeometry(C,D,E,'_SizeTest');var I=this._GetMarkerGeometry(C,F,E,'_SizeTest');this._UnmarkCells([B,G],'_SizeTest');if (H.width!=I.width||H.x!=I.x) return null;return { 'refCell':B,'nextCell':G,'tableMap':C };};
+FCKTableHandler.GetSelectedCells=function(){if (FCKSelection.GetType()=='Control'){var A=FCKSelection.MoveToAncestorNode('TD');return A?[A]:[];};var B=[];var C=FCKSelection.GetSelection().createRange();var D=FCKSelection.GetParentElement();if (D&&D.tagName.Equals('TD','TH')) B[0]=D;else{D=FCKSelection.MoveToAncestorNode('TABLE');if (D){for (var i=0;i<D.cells.length;i++){var E=FCK.EditorDocument.body.createTextRange();E.moveToElementText(D.cells[i]);if (C.inRange(E)||(C.compareEndPoints('StartToStart',E)>=0&&C.compareEndPoints('StartToEnd',E)<=0)||(C.compareEndPoints('EndToStart',E)>=0&&C.compareEndPoints('EndToEnd',E)<=0)){B[B.length]=D.cells[i];}}}};return B;};
+var FCKXml=function(){this.Error=false;};FCKXml.GetAttribute=function(A,B,C){var D=A.attributes.getNamedItem(B);return D?D.value:C;};FCKXml.TransformToObject=function(A){if (!A) return null;var B={};var C=A.attributes;for (var i=0;i<C.length;i++){var D=C[i];B[D.name]=D.value;};var E=A.childNodes;for (i=0;i<E.length;i++){var F=E[i];if (F.nodeType==1){var G='$'+F.nodeName;var H=B[G];if (!H) H=B[G]=[];H.push(this.TransformToObject(F));}};return B;};
+FCKXml.prototype={LoadUrl:function(A){this.Error=false;var B=FCKTools.CreateXmlObject('XmlHttp');if (!B){this.Error=true;return;};B.open("GET",A,false);B.send(null);if (B.status==200||B.status==304||(B.status==0&&B.readyState==4)){this.DOMDocument=B.responseXML;if (!this.DOMDocument||this.DOMDocument.firstChild==null){this.DOMDocument=FCKTools.CreateXmlObject('DOMDocument');this.DOMDocument.async=false;this.DOMDocument.resolveExternals=false;this.DOMDocument.loadXML(B.responseText);}}else{this.DOMDocument=null;};if (this.DOMDocument==null||this.DOMDocument.firstChild==null){this.Error=true;if (window.confirm('Error loading "'+A+'"\r\nDo you want to see more info?')) alert('URL requested: "'+A+'"\r\nServer response:\r\nStatus: '+B.status+'\r\nResponse text:\r\n'+B.responseText);}},SelectNodes:function(A,B){if (this.Error) return [];if (B) return B.selectNodes(A);else return this.DOMDocument.selectNodes(A);},SelectSingleNode:function(A,B){if (this.Error) return null;if (B) return B.selectSingleNode(A);else return this.DOMDocument.selectSingleNode(A);}};
+var FCKNamedCommand=function(A){this.Name=A;};FCKNamedCommand.prototype.Execute=function(){FCK.ExecuteNamedCommand(this.Name);};FCKNamedCommand.prototype.GetState=function(){if (FCK.EditMode!=0) return -1;return FCK.GetNamedCommandState(this.Name);};
+var FCKStyleCommand=function(){};FCKStyleCommand.prototype={Name:'Style',Execute:function(A,B){FCKUndo.SaveUndoStep();if (B.Selected) FCK.Styles.RemoveStyle(B.Style);else FCK.Styles.ApplyStyle(B.Style);FCKUndo.SaveUndoStep();FCK.Focus();FCK.Events.FireEvent('OnSelectionChange');},GetState:function(){if (FCK.EditMode!=0||!FCK.EditorDocument) return -1;if (FCKSelection.GetType()=='Control'){var A=FCKSelection.GetSelectedElement();if (!A||!FCKStyles.CheckHasObjectStyle(A.nodeName.toLowerCase())) return -1;};return 0;}};
+var FCKDialogCommand=function(A,B,C,D,E,F,G,H){this.Name=A;this.Title=B;this.Url=C;this.Width=D;this.Height=E;this.CustomValue=H;this.GetStateFunction=F;this.GetStateParam=G;this.Resizable=false;};FCKDialogCommand.prototype.Execute=function(){FCKDialog.OpenDialog('FCKDialog_'+this.Name,this.Title,this.Url,this.Width,this.Height,this.CustomValue,null,this.Resizable);};FCKDialogCommand.prototype.GetState=function(){if (this.GetStateFunction) return this.GetStateFunction(this.GetStateParam);else return FCK.EditMode==0?0:-1;};var FCKUndefinedCommand=function(){this.Name='Undefined';};FCKUndefinedCommand.prototype.Execute=function(){alert(FCKLang.NotImplemented);};FCKUndefinedCommand.prototype.GetState=function(){return 0;};var FCKFormatBlockCommand=function(){};FCKFormatBlockCommand.prototype={Name:'FormatBlock',Execute:FCKStyleCommand.prototype.Execute,GetState:function(){return FCK.EditorDocument?0:-1;}};var FCKFontNameCommand=function(){};FCKFontNameCommand.prototype={Name:'FontName',Execute:FCKStyleCommand.prototype.Execute,GetState:FCKFormatBlockCommand.prototype.GetState};var FCKFontSizeCommand=function(){};FCKFontSizeCommand.prototype={Name:'FontSize',Execute:FCKStyleCommand.prototype.Execute,GetState:FCKFormatBlockCommand.prototype.GetState};var FCKPreviewCommand=function(){this.Name='Preview';};FCKPreviewCommand.prototype.Execute=function(){FCK.Preview();};FCKPreviewCommand.prototype.GetState=function(){return 0;};var FCKSaveCommand=function(){this.Name='Save';};FCKSaveCommand.prototype.Execute=function(){var A=FCK.GetParentForm();if (typeof(A.onsubmit)=='function'){var B=A.onsubmit();if (B!=null&&B===false) return;};if (typeof(A.submit)=='function') A.submit();else A.submit.click();};FCKSaveCommand.prototype.GetState=function(){return 0;};var FCKNewPageCommand=function(){this.Name='NewPage';};FCKNewPageCommand.prototype.Execute=function(){FCKUndo.SaveUndoStep();FCK.SetData('');FCKUndo.Typing=true;FCK.Focus();};FCKNewPageCommand.prototype.GetState=function(){return 0;};var FCKSourceCommand=function(){this.Name='Source';};FCKSourceCommand.prototype.Execute=function(){if (FCKConfig.SourcePopup){var A=FCKConfig.ScreenWidth*0.65;var B=FCKConfig.ScreenHeight*0.65;FCKDialog.OpenDialog('FCKDialog_Source',FCKLang.Source,'dialog/fck_source.html',A,B,null,null,true);}else FCK.SwitchEditMode();};FCKSourceCommand.prototype.GetState=function(){return (FCK.EditMode==0?0:1);};var FCKUndoCommand=function(){this.Name='Undo';};FCKUndoCommand.prototype.Execute=function(){FCKUndo.Undo();};FCKUndoCommand.prototype.GetState=function(){if (FCK.EditMode!=0) return -1;return (FCKUndo.CheckUndoState()?0:-1);};var FCKRedoCommand=function(){this.Name='Redo';};FCKRedoCommand.prototype.Execute=function(){FCKUndo.Redo();};FCKRedoCommand.prototype.GetState=function(){if (FCK.EditMode!=0) return -1;return (FCKUndo.CheckRedoState()?0:-1);};var FCKPageBreakCommand=function(){this.Name='PageBreak';};FCKPageBreakCommand.prototype.Execute=function(){FCKUndo.SaveUndoStep();var e=FCK.EditorDocument.createElement('DIV');e.style.pageBreakAfter='always';e.innerHTML='<span style="DISPLAY:none">&nbsp;</span>';var A=FCKDocumentProcessor_CreateFakeImage('FCK__PageBreak',e);var B=new FCKDomRange(FCK.EditorWindow);B.MoveToSelection();var C=B.SplitBlock();B.InsertNode(A);FCK.Events.FireEvent('OnSelectionChange');};FCKPageBreakCommand.prototype.GetState=function(){if (FCK.EditMode!=0) return -1;return 0;};var FCKUnlinkCommand=function(){this.Name='Unlink';};FCKUnlinkCommand.prototype.Execute=function(){FCKUndo.SaveUndoStep();if (FCKBrowserInfo.IsGeckoLike){var A=FCK.Selection.MoveToAncestorNode('A');if (A) FCKTools.RemoveOuterTags(A);return;};FCK.ExecuteNamedCommand(this.Name);};FCKUnlinkCommand.prototype.GetState=function(){if (FCK.EditMode!=0) return -1;var A=FCK.GetNamedCommandState(this.Name);if (A==0&&FCK.EditMode==0){var B=FCKSelection.MoveToAncestorNode('A');var C=(B&&B.name.length>0&&B.href.length==0);if (C) A=-1;};return A;};var FCKSelectAllCommand=function(){this.Name='SelectAll';};FCKSelectAllCommand.prototype.Execute=function(){if (FCK.EditMode==0){FCK.ExecuteNamedCommand('SelectAll');}else{var A=FCK.EditingArea.Textarea;if (FCKBrowserInfo.IsIE){A.createTextRange().execCommand('SelectAll');}else{A.selectionStart=0;A.selectionEnd=A.value.length;};A.focus();}};FCKSelectAllCommand.prototype.GetState=function(){if (FCK.EditMode!=0) return -1;return 0;};var FCKPasteCommand=function(){this.Name='Paste';};FCKPasteCommand.prototype={Execute:function(){if (FCKBrowserInfo.IsIE) FCK.Paste();else FCK.ExecuteNamedCommand('Paste');},GetState:function(){if (FCK.EditMode!=0) return -1;return FCK.GetNamedCommandState('Paste');}};var FCKRuleCommand=function(){this.Name='Rule';};FCKRuleCommand.prototype={Execute:function(){FCKUndo.SaveUndoStep();FCK.InsertElement('hr');},GetState:function(){if (FCK.EditMode!=0) return -1;return FCK.GetNamedCommandState('InsertHorizontalRule');}};var FCKCutCopyCommand=function(A){this.Name=A?'Cut':'Copy';};FCKCutCopyCommand.prototype={Execute:function(){var A=false;if (FCKBrowserInfo.IsIE){var B=function(){A=true;};var C='on'+this.Name.toLowerCase();FCK.EditorDocument.body.attachEvent(C,B);FCK.ExecuteNamedCommand(this.Name);FCK.EditorDocument.body.detachEvent(C,B);}else{try{FCK.ExecuteNamedCommand(this.Name);A=true;}catch(e){}};if (!A) alert(FCKLang['PasteError'+this.Name]);},GetState:function(){return FCK.EditMode!=0?-1:FCK.GetNamedCommandState('Cut');}};var FCKAnchorDeleteCommand=function(){this.Name='AnchorDelete';};FCKAnchorDeleteCommand.prototype={Execute:function(){if (FCK.Selection.GetType()=='Control'){FCK.Selection.Delete();}else{var A=FCK.Selection.GetSelectedElement();if (A){if (A.tagName=='IMG'&&A.getAttribute('_fckanchor')) oAnchor=FCK.GetRealElement(A);else A=null;};if (!A){oAnchor=FCK.Selection.MoveToAncestorNode('A');if (oAnchor) FCK.Selection.SelectNode(oAnchor);};if (oAnchor.href.length!=0){oAnchor.removeAttribute('name');if (FCKBrowserInfo.IsIE) oAnchor.className=oAnchor.className.replace(FCKRegexLib.FCK_Class,'');return;};if (A){A.parentNode.removeChild(A);return;};if (oAnchor.innerHTML.length==0){oAnchor.parentNode.removeChild(oAnchor);return;};FCKTools.RemoveOuterTags(oAnchor);};if (FCKBrowserInfo.IsGecko) FCK.Selection.Collapse(true);},GetState:function(){if (FCK.EditMode!=0) return -1;return FCK.GetNamedCommandState('Unlink');}};
+var FCKShowBlockCommand=function(A,B){this.Name=A;if (B!=undefined) this._SavedState=B;else this._SavedState=null;};FCKShowBlockCommand.prototype.Execute=function(){var A=this.GetState();if (A==-1) return;var B=FCK.EditorDocument.body;if (A==1) B.className=B.className.replace(/(^| )FCK__ShowBlocks/g,'');else B.className+=' FCK__ShowBlocks';FCK.Events.FireEvent('OnSelectionChange');};FCKShowBlockCommand.prototype.GetState=function(){if (FCK.EditMode!=0) return -1;if (!FCK.EditorDocument) return 0;if (/FCK__ShowBlocks(?:\s|$)/.test(FCK.EditorDocument.body.className)) return 1;return 0;};FCKShowBlockCommand.prototype.SaveState=function(){this._SavedState=this.GetState();};FCKShowBlockCommand.prototype.RestoreState=function(){if (this._SavedState!=null&&this.GetState()!=this._SavedState) this.Execute();};
+var FCKSpellCheckCommand=function(){this.Name='SpellCheck';this.IsEnabled=(FCKConfig.SpellChecker=='ieSpell'||FCKConfig.SpellChecker=='SpellerPages');};FCKSpellCheckCommand.prototype.Execute=function(){switch (FCKConfig.SpellChecker){case 'ieSpell':this._RunIeSpell();break;case 'SpellerPages':FCKDialog.OpenDialog('FCKDialog_SpellCheck','Spell Check','dialog/fck_spellerpages.html',440,480);break;}};FCKSpellCheckCommand.prototype._RunIeSpell=function(){try{var A=new ActiveXObject("ieSpell.ieSpellExtension");A.CheckAllLinkedDocuments(FCK.EditorDocument);}catch(e){if(e.number==-2146827859){if (confirm(FCKLang.IeSpellDownload)) window.open(FCKConfig.IeSpellDownloadUrl,'IeSpellDownload');}else alert('Error Loading ieSpell: '+e.message+' ('+e.number+')');}};FCKSpellCheckCommand.prototype.GetState=function(){if (FCK.EditMode!=0) return -1;return this.IsEnabled?0:-1;};
+var FCKTextColorCommand=function(A){this.Name=A=='ForeColor'?'TextColor':'BGColor';this.Type=A;var B;if (FCKBrowserInfo.IsIE) B=window;else if (FCK.ToolbarSet._IFrame) B=FCKTools.GetElementWindow(FCK.ToolbarSet._IFrame);else B=window.parent;this._Panel=new FCKPanel(B);this._Panel.AppendStyleSheet(FCKConfig.SkinEditorCSS);this._Panel.MainNode.className='FCK_Panel';this._CreatePanelBody(this._Panel.Document,this._Panel.MainNode);FCK.ToolbarSet.ToolbarItems.GetItem(this.Name).RegisterPanel(this._Panel);FCKTools.DisableSelection(this._Panel.Document.body);};FCKTextColorCommand.prototype.Execute=function(A,B,C){this._Panel.Show(A,B,C);};FCKTextColorCommand.prototype.SetColor=function(A){FCKUndo.SaveUndoStep();var B=FCKStyles.GetStyle('_FCK_'+(this.Type=='ForeColor'?'Color':'BackColor'));if (!A||A.length==0) FCK.Styles.RemoveStyle(B);else{B.SetVariable('Color',A);FCKStyles.ApplyStyle(B);};FCKUndo.SaveUndoStep();FCK.Focus();FCK.Events.FireEvent('OnSelectionChange');};FCKTextColorCommand.prototype.GetState=function(){if (FCK.EditMode!=0) return -1;return 0;};function FCKTextColorCommand_OnMouseOver(){this.className='ColorSelected';};function FCKTextColorCommand_OnMouseOut(){this.className='ColorDeselected';};function FCKTextColorCommand_OnClick(A,B,C){this.className='ColorDeselected';B.SetColor(C);B._Panel.Hide();};function FCKTextColorCommand_AutoOnClick(A,B){this.className='ColorDeselected';B.SetColor('');B._Panel.Hide();};function FCKTextColorCommand_MoreOnClick(A,B){this.className='ColorDeselected';B._Panel.Hide();FCKDialog.OpenDialog('FCKDialog_Color',FCKLang.DlgColorTitle,'dialog/fck_colorselector.html',410,320,FCKTools.Bind(B,B.SetColor));};FCKTextColorCommand.prototype._CreatePanelBody=function(A,B){function CreateSelectionDiv(){var C=A.createElement("DIV");C.className='ColorDeselected';FCKTools.AddEventListenerEx(C,'mouseover',FCKTextColorCommand_OnMouseOver);FCKTools.AddEventListenerEx(C,'mouseout',FCKTextColorCommand_OnMouseOut);return C;};var D=B.appendChild(A.createElement("TABLE"));D.className='ForceBaseFont';D.style.tableLayout='fixed';D.cellPadding=0;D.cellSpacing=0;D.border=0;D.width=150;var E=D.insertRow(-1).insertCell(-1);E.colSpan=8;var C=E.appendChild(CreateSelectionDiv());C.innerHTML='<table cellspacing="0" cellpadding="0" width="100%" border="0">\n			<tr>\n				<td><div class="ColorBoxBorder"><div class="ColorBox" style="background-color: #000000"></div></div></td>\n				<td nowrap width="100%" align="center">'+FCKLang.ColorAutomatic+'</td>\n			</tr>\n		</table>';FCKTools.AddEventListenerEx(C,'click',FCKTextColorCommand_AutoOnClick,this);if (!FCKBrowserInfo.IsIE) C.style.width='96%';var G=FCKConfig.FontColors.toString().split(',');var H=0;while (H<G.length){var I=D.insertRow(-1);for (var i=0;i<8;i++,H++){if (H<G.length){var J=G[H].split('/');var K='#'+J[0];var L=J[1]||K;};C=I.insertCell(-1).appendChild(CreateSelectionDiv());C.innerHTML='<div class="ColorBoxBorder"><div class="ColorBox" style="background-color: '+K+'"></div></div>';if (H>=G.length) C.style.visibility='hidden';else FCKTools.AddEventListenerEx(C,'click',FCKTextColorCommand_OnClick,[this,L]);}};if (FCKConfig.EnableMoreFontColors){E=D.insertRow(-1).insertCell(-1);E.colSpan=8;C=E.appendChild(CreateSelectionDiv());C.innerHTML='<table width="100%" cellpadding="0" cellspacing="0" border="0"><tr><td nowrap align="center">'+FCKLang.ColorMoreColors+'</td></tr></table>';FCKTools.AddEventListenerEx(C,'click',FCKTextColorCommand_MoreOnClick,this);};if (!FCKBrowserInfo.IsIE) C.style.width='96%';};
+var FCKPastePlainTextCommand=function(){this.Name='PasteText';};FCKPastePlainTextCommand.prototype.Execute=function(){FCK.PasteAsPlainText();};FCKPastePlainTextCommand.prototype.GetState=function(){if (FCK.EditMode!=0) return -1;return FCK.GetNamedCommandState('Paste');};
+var FCKPasteWordCommand=function(){this.Name='PasteWord';};FCKPasteWordCommand.prototype.Execute=function(){FCK.PasteFromWord();};FCKPasteWordCommand.prototype.GetState=function(){if (FCK.EditMode!=0||FCKConfig.ForcePasteAsPlainText) return -1;else return FCK.GetNamedCommandState('Paste');};
+var FCKTableCommand=function(A){this.Name=A;};FCKTableCommand.prototype.Execute=function(){FCKUndo.SaveUndoStep();if (!FCKBrowserInfo.IsGecko){switch (this.Name){case 'TableMergeRight':return FCKTableHandler.MergeRight();case 'TableMergeDown':return FCKTableHandler.MergeDown();}};switch (this.Name){case 'TableInsertRowAfter':return FCKTableHandler.InsertRow(false);case 'TableInsertRowBefore':return FCKTableHandler.InsertRow(true);case 'TableDeleteRows':return FCKTableHandler.DeleteRows();case 'TableInsertColumnAfter':return FCKTableHandler.InsertColumn(false);case 'TableInsertColumnBefore':return FCKTableHandler.InsertColumn(true);case 'TableDeleteColumns':return FCKTableHandler.DeleteColumns();case 'TableInsertCellAfter':return FCKTableHandler.InsertCell(null,false);case 'TableInsertCellBefore':return FCKTableHandler.InsertCell(null,true);case 'TableDeleteCells':return FCKTableHandler.DeleteCells();case 'TableMergeCells':return FCKTableHandler.MergeCells();case 'TableHorizontalSplitCell':return FCKTableHandler.HorizontalSplitCell();case 'TableVerticalSplitCell':return FCKTableHandler.VerticalSplitCell();case 'TableDelete':return FCKTableHandler.DeleteTable();default:return alert(FCKLang.UnknownCommand.replace(/%1/g,this.Name));}};FCKTableCommand.prototype.GetState=function(){if (FCK.EditorDocument!=null&&FCKSelection.HasAncestorNode('TABLE')){switch (this.Name){case 'TableHorizontalSplitCell':case 'TableVerticalSplitCell':if (FCKTableHandler.GetSelectedCells().length==1) return 0;else return -1;case 'TableMergeCells':if (FCKTableHandler.CheckIsSelectionRectangular()&&FCKTableHandler.GetSelectedCells().length>1) return 0;else return -1;case 'TableMergeRight':return FCKTableHandler.GetMergeRightTarget()?0:-1;case 'TableMergeDown':return FCKTableHandler.GetMergeDownTarget()?0:-1;default:return 0;}}else return -1;};
+var FCKFitWindow=function(){this.Name='FitWindow';};FCKFitWindow.prototype.Execute=function(){var A=window.frameElement;var B=A.style;var C=parent;var D=C.document.documentElement;var E=C.document.body;var F=E.style;var G;if (!this.IsMaximized){if(FCKBrowserInfo.IsIE) C.attachEvent('onresize',FCKFitWindow_Resize);else C.addEventListener('resize',FCKFitWindow_Resize,true);this._ScrollPos=FCKTools.GetScrollPosition(C);G=A;while((G=G.parentNode)){if (G.nodeType==1){G._fckSavedStyles=FCKTools.SaveStyles(G);G.style.zIndex=FCKConfig.FloatingPanelsZIndex-1;}};if (FCKBrowserInfo.IsIE){this.documentElementOverflow=D.style.overflow;D.style.overflow='hidden';F.overflow='hidden';}else{F.overflow='hidden';F.width='0px';F.height='0px';};this._EditorFrameStyles=FCKTools.SaveStyles(A);var H=FCKTools.GetViewPaneSize(C);B.position="absolute";A.offsetLeft;B.zIndex=FCKConfig.FloatingPanelsZIndex-1;B.left="0px";B.top="0px";B.width=H.Width+"px";B.height=H.Height+"px";if (!FCKBrowserInfo.IsIE){B.borderRight=B.borderBottom="9999px solid white";B.backgroundColor="white";};C.scrollTo(0,0);var I=FCKTools.GetWindowPosition(C,A);if (I.x!=0) B.left=(-1*I.x)+"px";if (I.y!=0) B.top=(-1*I.y)+"px";this.IsMaximized=true;}else{if(FCKBrowserInfo.IsIE) C.detachEvent("onresize",FCKFitWindow_Resize);else C.removeEventListener("resize",FCKFitWindow_Resize,true);G=A;while((G=G.parentNode)){if (G._fckSavedStyles){FCKTools.RestoreStyles(G,G._fckSavedStyles);G._fckSavedStyles=null;}};if (FCKBrowserInfo.IsIE) D.style.overflow=this.documentElementOverflow;FCKTools.RestoreStyles(A,this._EditorFrameStyles);C.scrollTo(this._ScrollPos.X,this._ScrollPos.Y);this.IsMaximized=false;};FCKToolbarItems.GetItem('FitWindow').RefreshState();if (FCK.EditMode==0) FCK.EditingArea.MakeEditable();FCK.Focus();};FCKFitWindow.prototype.GetState=function(){if (FCKConfig.ToolbarLocation!='In') return -1;else return (this.IsMaximized?1:0);};function FCKFitWindow_Resize(){var A=FCKTools.GetViewPaneSize(parent);var B=window.frameElement.style;B.width=A.Width+'px';B.height=A.Height+'px';};
+var FCKListCommand=function(A,B){this.Name=A;this.TagName=B;};FCKListCommand.prototype={GetState:function(){if (FCK.EditMode!=0||!FCK.EditorWindow) return -1;var A=FCKSelection.GetBoundaryParentElement(true);var B=A;while (B){if (B.nodeName.IEquals(['ul','ol'])) break;B=B.parentNode;};if (B&&B.nodeName.IEquals(this.TagName)) return 1;else return 0;},Execute:function(){FCKUndo.SaveUndoStep();var A=FCK.EditorDocument;var B=new FCKDomRange(FCK.EditorWindow);B.MoveToSelection();var C=this.GetState();if (C==0){FCKDomTools.TrimNode(A.body);if (!A.body.firstChild){var D=A.createElement('p');A.body.appendChild(D);B.MoveToNodeContents(D);}};var E=B.CreateBookmark();var F=[];var G={};var H=new FCKDomRangeIterator(B);var I;H.ForceBrBreak=(C==0);var J=true;var K=null;while (J){while ((I=H.GetNextParagraph())){var L=new FCKElementPath(I);var M=null;var N=false;var O=L.BlockLimit;for (var i=L.Elements.length-1;i>=0;i--){var P=L.Elements[i];if (P.nodeName.IEquals(['ol','ul'])){if (O._FCK_ListGroupObject) O._FCK_ListGroupObject=null;var Q=P._FCK_ListGroupObject;if (Q) Q.contents.push(I);else{Q={ 'root':P,'contents':[I] };F.push(Q);FCKDomTools.SetElementMarker(G,P,'_FCK_ListGroupObject',Q);};N=true;break;}};if (N) continue;var R=O;if (R._FCK_ListGroupObject) R._FCK_ListGroupObject.contents.push(I);else{var Q={ 'root':R,'contents':[I] };FCKDomTools.SetElementMarker(G,R,'_FCK_ListGroupObject',Q);F.push(Q);}};if (FCKBrowserInfo.IsIE) J=false;else{if (K==null){K=[];var T=FCKSelection.GetSelection();if (T&&F.length==0) K.push(T.getRangeAt(0));for (var i=1;T&&i<T.rangeCount;i++) K.push(T.getRangeAt(i));};if (K.length<1) J=false;else{var U=FCKW3CRange.CreateFromRange(A,K.shift());B._Range=U;B._UpdateElementInfo();if (B.StartNode.nodeName.IEquals('td')) B.SetStart(B.StartNode,1);if (B.EndNode.nodeName.IEquals('td')) B.SetEnd(B.EndNode,2);H=new FCKDomRangeIterator(B);H.ForceBrBreak=(C==0);}}};var W=[];while (F.length>0){var Q=F.shift();if (C==0){if (Q.root.nodeName.IEquals(['ul','ol'])) this._ChangeListType(Q,G,W);else this._CreateList(Q,W);}else if (C==1&&Q.root.nodeName.IEquals(['ul','ol'])) this._RemoveList(Q,G);};for (var i=0;i<W.length;i++){var M=W[i];var Z=false;var a=M;while (!Z){a=a.nextSibling;if (a&&a.nodeType==3&&a.nodeValue.search(/^[\n\r\t ]*$/)==0) continue;Z=true;};if (a&&a.nodeName.IEquals(this.TagName)){a.parentNode.removeChild(a);while (a.firstChild) M.appendChild(a.removeChild(a.firstChild));};Z=false;a=M;while (!Z){a=a.previousSibling;if (a&&a.nodeType==3&&a.nodeValue.search(/^[\n\r\t ]*$/)==0) continue;Z=true;};if (a&&a.nodeName.IEquals(this.TagName)){a.parentNode.removeChild(a);while (a.lastChild) M.insertBefore(a.removeChild(a.lastChild),M.firstChild);}};FCKDomTools.ClearAllMarkers(G);B.MoveToBookmark(E);B.Select();FCK.Focus();FCK.Events.FireEvent('OnSelectionChange');},_ChangeListType:function(A,B,C){var D=FCKDomTools.ListToArray(A.root,B);var E=[];for (var i=0;i<A.contents.length;i++){var F=A.contents[i];F=FCKTools.GetElementAscensor(F,'li');if (!F||F._FCK_ListItem_Processed) continue;E.push(F);FCKDomTools.SetElementMarker(B,F,'_FCK_ListItem_Processed',true);};var G=FCKTools.GetElementDocument(A.root).createElement(this.TagName);for (var i=0;i<E.length;i++){var H=E[i]._FCK_ListArray_Index;D[H].parent=G;};var I=FCKDomTools.ArrayToList(D,B);for (var i=0;i<I.listNode.childNodes.length;i++){if (I.listNode.childNodes[i].nodeName.IEquals(this.TagName)) C.push(I.listNode.childNodes[i]);};A.root.parentNode.replaceChild(I.listNode,A.root);},_CreateList:function(A,B){var C=A.contents;var D=FCKTools.GetElementDocument(A.root);var E=[];if (C.length==1&&C[0]==A.root){var F=D.createElement('div');while (C[0].firstChild) F.appendChild(C[0].removeChild(C[0].firstChild));C[0].appendChild(F);C[0]=F;};var G=A.contents[0].parentNode;for (var i=0;i<C.length;i++) G=FCKDomTools.GetCommonParents(G,C[i].parentNode).pop();for (var i=0;i<C.length;i++){var H=C[i];while (H.parentNode){if (H.parentNode==G){E.push(H);break;};H=H.parentNode;}};if (E.length<1) return;var I=E[E.length-1].nextSibling;var J=D.createElement(this.TagName);B.push(J);while (E.length){var K=E.shift();var L=D.createDocumentFragment();while (K.firstChild) L.appendChild(K.removeChild(K.firstChild));K.parentNode.removeChild(K);var M=D.createElement('li');M.appendChild(L);J.appendChild(M);};G.insertBefore(J,I);},_RemoveList:function(A,B){var C=FCKDomTools.ListToArray(A.root,B);var D=[];for (var i=0;i<A.contents.length;i++){var E=A.contents[i];E=FCKTools.GetElementAscensor(E,'li');if (!E||E._FCK_ListItem_Processed) continue;D.push(E);FCKDomTools.SetElementMarker(B,E,'_FCK_ListItem_Processed',true);};var F=null;for (var i=0;i<D.length;i++){var G=D[i]._FCK_ListArray_Index;C[G].indent=-1;F=G;};for (var i=F+1;i<C.length;i++){if (C[i].indent>C[i-1].indent+1){var H=C[i-1].indent+1-C[i].indent;var I=C[i].indent;while (C[i]&&C[i].indent>=I){C[i].indent+=H;i++;};i--;}};var J=FCKDomTools.ArrayToList(C,B);if (A.root.nextSibling==null||A.root.nextSibling.nodeName.IEquals('br')){if (J.listNode.lastChild.nodeName.IEquals('br')) J.listNode.removeChild(J.listNode.lastChild);};A.root.parentNode.replaceChild(J.listNode,A.root);}};
+var FCKJustifyCommand=function(A){this.AlignValue=A;var B=FCKConfig.ContentLangDirection.toLowerCase();this.IsDefaultAlign=(A=='left'&&B=='ltr')||(A=='right'&&B=='rtl');var C=this._CssClassName=(function(){var D=FCKConfig.JustifyClasses;if (D){switch (A){case 'left':return D[0]||null;case 'center':return D[1]||null;case 'right':return D[2]||null;case 'justify':return D[3]||null;}};return null;})();if (C&&C.length>0) this._CssClassRegex=new RegExp('(?:^|\\s+)'+C+'(?=$|\\s)');};FCKJustifyCommand._GetClassNameRegex=function(){var A=FCKJustifyCommand._ClassRegex;if (A!=undefined) return A;var B=[];var C=FCKConfig.JustifyClasses;if (C){for (var i=0;i<4;i++){var D=C[i];if (D&&D.length>0) B.push(D);}};if (B.length>0) A=new RegExp('(?:^|\\s+)(?:'+B.join('|')+')(?=$|\\s)');else A=null;return FCKJustifyCommand._ClassRegex=A;};FCKJustifyCommand.prototype={Execute:function(){FCKUndo.SaveUndoStep();var A=new FCKDomRange(FCK.EditorWindow);A.MoveToSelection();var B=this.GetState();if (B==-1) return;var C=A.CreateBookmark();var D=this._CssClassName;var E=new FCKDomRangeIterator(A);var F;while ((F=E.GetNextParagraph())){F.removeAttribute('align');if (D){var G=F.className.replace(FCKJustifyCommand._GetClassNameRegex(),'');if (B==0){if (G.length>0) G+=' ';F.className=G+D;}else if (G.length==0) FCKDomTools.RemoveAttribute(F,'class');}else{var H=F.style;if (B==0) H.textAlign=this.AlignValue;else{H.textAlign='';if (H.cssText.length==0) F.removeAttribute('style');}}};A.MoveToBookmark(C);A.Select();FCK.Focus();FCK.Events.FireEvent('OnSelectionChange');},GetState:function(){if (FCK.EditMode!=0||!FCK.EditorWindow) return -1;var A=new FCKElementPath(FCKSelection.GetBoundaryParentElement(true));var B=A.Block||A.BlockLimit;if (!B||B.nodeName.toLowerCase()=='body') return 0;var C;if (FCKBrowserInfo.IsIE) C=B.currentStyle.textAlign;else C=FCK.EditorWindow.getComputedStyle(B,'').getPropertyValue('text-align');C=C.replace(/(-moz-|-webkit-|start|auto)/i,'');if ((!C&&this.IsDefaultAlign)||C==this.AlignValue) return 1;return 0;}};
+var FCKIndentCommand=function(A,B){this.Name=A;this.Offset=B;this.IndentCSSProperty=FCKConfig.ContentLangDirection.IEquals('ltr')?'marginLeft':'marginRight';};FCKIndentCommand._InitIndentModeParameters=function(){if (FCKConfig.IndentClasses&&FCKConfig.IndentClasses.length>0){this._UseIndentClasses=true;this._IndentClassMap={};for (var i=0;i<FCKConfig.IndentClasses.length;i++) this._IndentClassMap[FCKConfig.IndentClasses[i]]=i+1;this._ClassNameRegex=new RegExp('(?:^|\\s+)('+FCKConfig.IndentClasses.join('|')+')(?=$|\\s)');}else this._UseIndentClasses=false;};FCKIndentCommand.prototype={Execute:function(){FCKUndo.SaveUndoStep();var A=new FCKDomRange(FCK.EditorWindow);A.MoveToSelection();var B=A.CreateBookmark();var C=FCKDomTools.GetCommonParentNode(A.StartNode||A.StartContainer,A.EndNode||A.EndContainer,['ul','ol']);if (C) this._IndentList(A,C);else this._IndentBlock(A);A.MoveToBookmark(B);A.Select();FCK.Focus();FCK.Events.FireEvent('OnSelectionChange');},GetState:function(){if (FCK.EditMode!=0||!FCK.EditorWindow) return -1;if (FCKIndentCommand._UseIndentClasses==undefined) FCKIndentCommand._InitIndentModeParameters();var A=FCKSelection.GetBoundaryParentElement(true);var B=FCKSelection.GetBoundaryParentElement(false);var C=FCKDomTools.GetCommonParentNode(A,B,['ul','ol']);if (C){if (this.Name.IEquals('outdent')) return 0;var D=FCKTools.GetElementAscensor(A,'li');if (!D||!D.previousSibling) return -1;return 0;};if (!FCKIndentCommand._UseIndentClasses&&this.Name.IEquals('indent')) return 0;var E=new FCKElementPath(A);var F=E.Block||E.BlockLimit;if (!F) return -1;if (FCKIndentCommand._UseIndentClasses){var G=F.className.match(FCKIndentCommand._ClassNameRegex);var H=0;if (G!=null){G=G[1];H=FCKIndentCommand._IndentClassMap[G];};if ((this.Name=='outdent'&&H==0)||(this.Name=='indent'&&H==FCKConfig.IndentClasses.length)) return -1;return 0;}else{var I=parseInt(F.style[this.IndentCSSProperty],10);if (isNaN(I)) I=0;if (I<=0) return -1;return 0;}},_IndentBlock:function(A){var B=new FCKDomRangeIterator(A);B.EnforceRealBlocks=true;A.Expand('block_contents');var C=FCKDomTools.GetCommonParents(A.StartContainer,A.EndContainer);var D=C[C.length-1];var E;while ((E=B.GetNextParagraph())){if (!(E==D||E.parentNode==D)) continue;if (FCKIndentCommand._UseIndentClasses){var F=E.className.match(FCKIndentCommand._ClassNameRegex);var G=0;if (F!=null){F=F[1];G=FCKIndentCommand._IndentClassMap[F];};if (this.Name.IEquals('outdent')) G--;else if (this.Name.IEquals('indent')) G++;G=Math.min(G,FCKConfig.IndentClasses.length);G=Math.max(G,0);var H=E.className.replace(FCKIndentCommand._ClassNameRegex,'');if (G<1) E.className=H;else E.className=(H.length>0?H+' ':'')+FCKConfig.IndentClasses[G-1];}else{var I=parseInt(E.style[this.IndentCSSProperty],10);if (isNaN(I)) I=0;I+=this.Offset;I=Math.max(I,0);I=Math.ceil(I/this.Offset)*this.Offset;E.style[this.IndentCSSProperty]=I?I+FCKConfig.IndentUnit:'';if (E.getAttribute('style')=='') E.removeAttribute('style');}}},_IndentList:function(A,B){var C=A.StartContainer;var D=A.EndContainer;while (C&&C.parentNode!=B) C=C.parentNode;while (D&&D.parentNode!=B) D=D.parentNode;if (!C||!D) return;var E=C;var F=[];var G=false;while (G==false){if (E==D) G=true;F.push(E);E=E.nextSibling;};if (F.length<1) return;var H=FCKDomTools.GetParents(B);for (var i=0;i<H.length;i++){if (H[i].nodeName.IEquals(['ul','ol'])){B=H[i];break;}};var I=this.Name.IEquals('indent')?1:-1;var J=F[0];var K=F[F.length-1];var L={};var M=FCKDomTools.ListToArray(B,L);var N=M[K._FCK_ListArray_Index].indent;for (var i=J._FCK_ListArray_Index;i<=K._FCK_ListArray_Index;i++) M[i].indent+=I;for (var i=K._FCK_ListArray_Index+1;i<M.length&&M[i].indent>N;i++) M[i].indent+=I;var O=FCKDomTools.ArrayToList(M);if (O) B.parentNode.replaceChild(O.listNode,B);FCKDomTools.ClearAllMarkers(L);}};
+var FCKBlockQuoteCommand=function(){};FCKBlockQuoteCommand.prototype={Execute:function(){FCKUndo.SaveUndoStep();var A=this.GetState();var B=new FCKDomRange(FCK.EditorWindow);B.MoveToSelection();var C=B.CreateBookmark();if (FCKBrowserInfo.IsIE){var D=B.GetBookmarkNode(C,true);var E=B.GetBookmarkNode(C,false);var F;if (D&&D.parentNode.nodeName.IEquals('blockquote')&&!D.previousSibling){F=D;while ((F=F.nextSibling)){if (FCKListsLib.BlockElements[F.nodeName.toLowerCase()]) FCKDomTools.MoveNode(D,F,true);}};if (E&&E.parentNode.nodeName.IEquals('blockquote')&&!E.previousSibling){F=E;while ((F=F.nextSibling)){if (FCKListsLib.BlockElements[F.nodeName.toLowerCase()]){if (F.firstChild==D) FCKDomTools.InsertAfterNode(D,E);else FCKDomTools.MoveNode(E,F,true);}}}};var G=new FCKDomRangeIterator(B);var H;if (A==0){G.EnforceRealBlocks=true;var I=[];while ((H=G.GetNextParagraph())) I.push(H);if (I.length<1){para=B.Window.document.createElement(FCKConfig.EnterMode.IEquals('p')?'p':'div');B.InsertNode(para);para.appendChild(B.Window.document.createTextNode('\ufeff'));B.MoveToBookmark(C);B.MoveToNodeContents(para);B.Collapse(true);C=B.CreateBookmark();I.push(para);};var J=I[0].parentNode;var K=[];for (var i=0;i<I.length;i++){H=I[i];J=FCKDomTools.GetCommonParents(H.parentNode,J).pop();};var L=null;while (I.length>0){H=I.shift();while (H.parentNode!=J) H=H.parentNode;if (H!=L) K.push(H);L=H;}while (K.length>0){H=K.shift();if (H.nodeName.IEquals('blockquote')){var M=FCKTools.GetElementDocument(H).createDocumentFragment();while (H.firstChild){M.appendChild(H.removeChild(H.firstChild));I.push(M.lastChild);};H.parentNode.replaceChild(M,H);}else I.push(H);};var N=B.Window.document.createElement('blockquote');J.insertBefore(N,I[0]);while (I.length>0){H=I.shift();N.appendChild(H);}}else if (A==1){var O=[];while ((H=G.GetNextParagraph())){var P=null;var Q=null;while (H.parentNode){if (H.parentNode.nodeName.IEquals('blockquote')){P=H.parentNode;Q=H;break;};H=H.parentNode;};if (P&&Q) O.push(Q);};var R=[];while (O.length>0){var S=O.shift();var N=S.parentNode;if (S==S.parentNode.firstChild){N.parentNode.insertBefore(N.removeChild(S),N);if (!N.firstChild) N.parentNode.removeChild(N);}else if (S==S.parentNode.lastChild){N.parentNode.insertBefore(N.removeChild(S),N.nextSibling);if (!N.firstChild) N.parentNode.removeChild(N);}else FCKDomTools.BreakParent(S,S.parentNode,B);R.push(S);};if (FCKConfig.EnterMode.IEquals('br')){while (R.length){var S=R.shift();var W=true;if (S.nodeName.IEquals('div')){var M=FCKTools.GetElementDocument(S).createDocumentFragment();var Y=W&&S.previousSibling&&!FCKListsLib.BlockBoundaries[S.previousSibling.nodeName.toLowerCase()];if (W&&Y) M.appendChild(FCKTools.GetElementDocument(S).createElement('br'));var Z=S.nextSibling&&!FCKListsLib.BlockBoundaries[S.nextSibling.nodeName.toLowerCase()];while (S.firstChild) M.appendChild(S.removeChild(S.firstChild));if (Z) M.appendChild(FCKTools.GetElementDocument(S).createElement('br'));S.parentNode.replaceChild(M,S);W=false;}}}};B.MoveToBookmark(C);B.Select();FCK.Focus();FCK.Events.FireEvent('OnSelectionChange');},GetState:function(){if (FCK.EditMode!=0||!FCK.EditorWindow) return -1;var A=new FCKElementPath(FCKSelection.GetBoundaryParentElement(true));var B=A.Block||A.BlockLimit;if (!B||B.nodeName.toLowerCase()=='body') return 0;for (var i=0;i<A.Elements.length;i++){if (A.Elements[i].nodeName.IEquals('blockquote')) return 1;};return 0;}};
+var FCKCoreStyleCommand=function(A){this.Name='CoreStyle';this.StyleName='_FCK_'+A;this.IsActive=false;FCKStyles.AttachStyleStateChange(this.StyleName,this._OnStyleStateChange,this);};FCKCoreStyleCommand.prototype={Execute:function(){FCKUndo.SaveUndoStep();if (this.IsActive) FCKStyles.RemoveStyle(this.StyleName);else FCKStyles.ApplyStyle(this.StyleName);FCK.Focus();FCK.Events.FireEvent('OnSelectionChange');},GetState:function(){if (FCK.EditMode!=0) return -1;return this.IsActive?1:0;},_OnStyleStateChange:function(A,B){this.IsActive=B;}};
+var FCKRemoveFormatCommand=function(){this.Name='RemoveFormat';};FCKRemoveFormatCommand.prototype={Execute:function(){FCKStyles.RemoveAll();FCK.Focus();FCK.Events.FireEvent('OnSelectionChange');},GetState:function(){return FCK.EditorWindow?0:-1;}};
+var FCKCommands=FCK.Commands={};FCKCommands.LoadedCommands={};FCKCommands.RegisterCommand=function(A,B){this.LoadedCommands[A]=B;};FCKCommands.GetCommand=function(A){var B=FCKCommands.LoadedCommands[A];if (B) return B;switch (A){case 'Bold':case 'Italic':case 'Underline':case 'StrikeThrough':case 'Subscript':case 'Superscript':B=new FCKCoreStyleCommand(A);break;case 'RemoveFormat':B=new FCKRemoveFormatCommand();break;case 'DocProps':B=new FCKDialogCommand('DocProps',FCKLang.DocProps,'dialog/fck_docprops.html',400,380,FCKCommands.GetFullPageState);break;case 'Templates':B=new FCKDialogCommand('Templates',FCKLang.DlgTemplatesTitle,'dialog/fck_template.html',380,450);break;case 'Link':B=new FCKDialogCommand('Link',FCKLang.DlgLnkWindowTitle,'dialog/fck_link.html',400,300);break;case 'Unlink':B=new FCKUnlinkCommand();break;case 'Anchor':B=new FCKDialogCommand('Anchor',FCKLang.DlgAnchorTitle,'dialog/fck_anchor.html',370,160);break;case 'AnchorDelete':B=new FCKAnchorDeleteCommand();break;case 'BulletedList':B=new FCKDialogCommand('BulletedList',FCKLang.BulletedListProp,'dialog/fck_listprop.html?UL',370,160);break;case 'NumberedList':B=new FCKDialogCommand('NumberedList',FCKLang.NumberedListProp,'dialog/fck_listprop.html?OL',370,160);break;case 'About':B=new FCKDialogCommand('About',FCKLang.About,'dialog/fck_about.html',420,330,function(){ return 0;});break;case 'Find':B=new FCKDialogCommand('Find',FCKLang.DlgFindAndReplaceTitle,'dialog/fck_replace.html',340,230,null,null,'Find');break;case 'Replace':B=new FCKDialogCommand('Replace',FCKLang.DlgFindAndReplaceTitle,'dialog/fck_replace.html',340,230,null,null,'Replace');break;case 'Image':B=new FCKDialogCommand('Image',FCKLang.DlgImgTitle,'dialog/fck_image.html',450,390);break;case 'Flash':B=new FCKDialogCommand('Flash',FCKLang.DlgFlashTitle,'dialog/fck_flash.html',450,390);break;case 'SpecialChar':B=new FCKDialogCommand('SpecialChar',FCKLang.DlgSpecialCharTitle,'dialog/fck_specialchar.html',400,290);break;case 'Smiley':B=new FCKDialogCommand('Smiley',FCKLang.DlgSmileyTitle,'dialog/fck_smiley.html',FCKConfig.SmileyWindowWidth,FCKConfig.SmileyWindowHeight);break;case 'Table':B=new FCKDialogCommand('Table',FCKLang.DlgTableTitle,'dialog/fck_table.html',480,250);break;case 'TableProp':B=new FCKDialogCommand('Table',FCKLang.DlgTableTitle,'dialog/fck_table.html?Parent',480,250);break;case 'TableCellProp':B=new FCKDialogCommand('TableCell',FCKLang.DlgCellTitle,'dialog/fck_tablecell.html',550,240);break;case 'Style':B=new FCKStyleCommand();break;case 'FontName':B=new FCKFontNameCommand();break;case 'FontSize':B=new FCKFontSizeCommand();break;case 'FontFormat':B=new FCKFormatBlockCommand();break;case 'Source':B=new FCKSourceCommand();break;case 'Preview':B=new FCKPreviewCommand();break;case 'Save':B=new FCKSaveCommand();break;case 'NewPage':B=new FCKNewPageCommand();break;case 'PageBreak':B=new FCKPageBreakCommand();break;case 'Rule':B=new FCKRuleCommand();break;case 'TextColor':B=new FCKTextColorCommand('ForeColor');break;case 'BGColor':B=new FCKTextColorCommand('BackColor');break;case 'Paste':B=new FCKPasteCommand();break;case 'PasteText':B=new FCKPastePlainTextCommand();break;case 'PasteWord':B=new FCKPasteWordCommand();break;case 'JustifyLeft':B=new FCKJustifyCommand('left');break;case 'JustifyCenter':B=new FCKJustifyCommand('center');break;case 'JustifyRight':B=new FCKJustifyCommand('right');break;case 'JustifyFull':B=new FCKJustifyCommand('justify');break;case 'Indent':B=new FCKIndentCommand('indent',FCKConfig.IndentLength);break;case 'Outdent':B=new FCKIndentCommand('outdent',FCKConfig.IndentLength*-1);break;case 'Blockquote':B=new FCKBlockQuoteCommand();break;case 'TableInsertRowAfter':B=new FCKTableCommand('TableInsertRowAfter');break;case 'TableInsertRowBefore':B=new FCKTableCommand('TableInsertRowBefore');break;case 'TableDeleteRows':B=new FCKTableCommand('TableDeleteRows');break;case 'TableInsertColumnAfter':B=new FCKTableCommand('TableInsertColumnAfter');break;case 'TableInsertColumnBefore':B=new FCKTableCommand('TableInsertColumnBefore');break;case 'TableDeleteColumns':B=new FCKTableCommand('TableDeleteColumns');break;case 'TableInsertCellAfter':B=new FCKTableCommand('TableInsertCellAfter');break;case 'TableInsertCellBefore':B=new FCKTableCommand('TableInsertCellBefore');break;case 'TableDeleteCells':B=new FCKTableCommand('TableDeleteCells');break;case 'TableMergeCells':B=new FCKTableCommand('TableMergeCells');break;case 'TableMergeRight':B=new FCKTableCommand('TableMergeRight');break;case 'TableMergeDown':B=new FCKTableCommand('TableMergeDown');break;case 'TableHorizontalSplitCell':B=new FCKTableCommand('TableHorizontalSplitCell');break;case 'TableVerticalSplitCell':B=new FCKTableCommand('TableVerticalSplitCell');break;case 'TableDelete':B=new FCKTableCommand('TableDelete');break;case 'Form':B=new FCKDialogCommand('Form',FCKLang.Form,'dialog/fck_form.html',380,210);break;case 'Checkbox':B=new FCKDialogCommand('Checkbox',FCKLang.Checkbox,'dialog/fck_checkbox.html',380,200);break;case 'Radio':B=new FCKDialogCommand('Radio',FCKLang.RadioButton,'dialog/fck_radiobutton.html',380,200);break;case 'TextField':B=new FCKDialogCommand('TextField',FCKLang.TextField,'dialog/fck_textfield.html',380,210);break;case 'Textarea':B=new FCKDialogCommand('Textarea',FCKLang.Textarea,'dialog/fck_textarea.html',380,210);break;case 'HiddenField':B=new FCKDialogCommand('HiddenField',FCKLang.HiddenField,'dialog/fck_hiddenfield.html',380,190);break;case 'Button':B=new FCKDialogCommand('Button',FCKLang.Button,'dialog/fck_button.html',380,210);break;case 'Select':B=new FCKDialogCommand('Select',FCKLang.SelectionField,'dialog/fck_select.html',400,340);break;case 'ImageButton':B=new FCKDialogCommand('ImageButton',FCKLang.ImageButton,'dialog/fck_image.html?ImageButton',450,390);break;case 'SpellCheck':B=new FCKSpellCheckCommand();break;case 'FitWindow':B=new FCKFitWindow();break;case 'Undo':B=new FCKUndoCommand();break;case 'Redo':B=new FCKRedoCommand();break;case 'Copy':B=new FCKCutCopyCommand(false);break;case 'Cut':B=new FCKCutCopyCommand(true);break;case 'SelectAll':B=new FCKSelectAllCommand();break;case 'InsertOrderedList':B=new FCKListCommand('insertorderedlist','ol');break;case 'InsertUnorderedList':B=new FCKListCommand('insertunorderedlist','ul');break;case 'ShowBlocks':B=new FCKShowBlockCommand('ShowBlocks',FCKConfig.StartupShowBlocks?1:0);break;case 'Undefined':B=new FCKUndefinedCommand();break;default:if (FCKRegexLib.NamedCommands.test(A)) B=new FCKNamedCommand(A);else{alert(FCKLang.UnknownCommand.replace(/%1/g,A));return null;}};FCKCommands.LoadedCommands[A]=B;return B;};FCKCommands.GetFullPageState=function(){return FCKConfig.FullPage?0:-1;};FCKCommands.GetBooleanState=function(A){return A?-1:0;};
+var FCKPanel=function(A){this.IsRTL=(FCKLang.Dir=='rtl');this.IsContextMenu=false;this._LockCounter=0;this._Window=A||window;var B;if (FCKBrowserInfo.IsIE){this._Popup=this._Window.createPopup();var C=this._Window.document;if (FCK_IS_CUSTOM_DOMAIN&&!FCKBrowserInfo.IsIE7){C.domain=FCK_ORIGINAL_DOMAIN;document.domain=FCK_ORIGINAL_DOMAIN;};B=this.Document=this._Popup.document;if (FCK_IS_CUSTOM_DOMAIN){B.domain=FCK_RUNTIME_DOMAIN;C.domain=FCK_RUNTIME_DOMAIN;document.domain=FCK_RUNTIME_DOMAIN;};FCK.IECleanup.AddItem(this,FCKPanel_Cleanup);}else{var D=this._IFrame=this._Window.document.createElement('iframe');FCKTools.ResetStyles(D);D.src='javascript:void(0)';D.allowTransparency=true;D.frameBorder='0';D.scrolling='no';D.style.width=D.style.height='0px';FCKDomTools.SetElementStyles(D,{position:'absolute',zIndex:FCKConfig.FloatingPanelsZIndex});this._Window.document.body.appendChild(D);var E=D.contentWindow;B=this.Document=E.document;var F='';if (FCKBrowserInfo.IsSafari) F='<base href="'+window.document.location+'">';B.open();B.write('<html><head>'+F+'<\/head><body style="margin:0px;padding:0px;"><\/body><\/html>');B.close();if(FCKBrowserInfo.IsAIR) FCKAdobeAIR.Panel_Contructor(B,window.document.location);FCKTools.AddEventListenerEx(E,'focus',FCKPanel_Window_OnFocus,this);FCKTools.AddEventListenerEx(E,'blur',FCKPanel_Window_OnBlur,this);};B.dir=FCKLang.Dir;FCKTools.AddEventListener(B,'contextmenu',FCKTools.CancelEvent);this.MainNode=B.body.appendChild(B.createElement('DIV'));this.MainNode.style.cssFloat=this.IsRTL?'right':'left';};FCKPanel.prototype.AppendStyleSheet=function(A){FCKTools.AppendStyleSheet(this.Document,A);};FCKPanel.prototype.Preload=function(x,y,A){if (this._Popup) this._Popup.show(x,y,0,0,A);};FCKPanel.prototype.Show=function(x,y,A,B,C){var D;var E=this.MainNode;if (this._Popup){this._Popup.show(x,y,0,0,A);FCKDomTools.SetElementStyles(E,{B:B?B+'px':'',C:C?C+'px':''});D=E.offsetWidth;if (this.IsRTL){if (this.IsContextMenu) x=x-D+1;else if (A) x=(x*-1)+A.offsetWidth-D;};this._Popup.show(x,y,D,E.offsetHeight,A);if (this.OnHide){if (this._Timer) CheckPopupOnHide.call(this,true);this._Timer=FCKTools.SetInterval(CheckPopupOnHide,100,this);}}else{if (typeof(FCK.ToolbarSet.CurrentInstance.FocusManager)!='undefined') FCK.ToolbarSet.CurrentInstance.FocusManager.Lock();if (this.ParentPanel){this.ParentPanel.Lock();FCKPanel_Window_OnBlur(null,this.ParentPanel);};if (FCKBrowserInfo.IsGecko&&FCKBrowserInfo.IsMac){this._IFrame.scrolling='';FCKTools.RunFunction(function(){ this._IFrame.scrolling='no';},this);};if (FCK.ToolbarSet.CurrentInstance.GetInstanceObject('FCKPanel')._OpenedPanel&&FCK.ToolbarSet.CurrentInstance.GetInstanceObject('FCKPanel')._OpenedPanel!=this) FCK.ToolbarSet.CurrentInstance.GetInstanceObject('FCKPanel')._OpenedPanel.Hide(false,true);FCKDomTools.SetElementStyles(E,{B:B?B+'px':'',C:C?C+'px':''});D=E.offsetWidth;if (!B)	this._IFrame.width=1;if (!C)	this._IFrame.height=1;D=E.offsetWidth||E.firstChild.offsetWidth;var F=FCKTools.GetDocumentPosition(this._Window,A.nodeType==9?(FCKTools.IsStrictMode(A)?A.documentElement:A.body):A);var G=FCKDomTools.GetPositionedAncestor(this._IFrame.parentNode);if (G){var H=FCKTools.GetDocumentPosition(FCKTools.GetElementWindow(G),G);F.x-=H.x;F.y-=H.y;};if (this.IsRTL&&!this.IsContextMenu) x=(x*-1);x+=F.x;y+=F.y;if (this.IsRTL){if (this.IsContextMenu) x=x-D+1;else if (A) x=x+A.offsetWidth-D;}else{var I=FCKTools.GetViewPaneSize(this._Window);var J=FCKTools.GetScrollPosition(this._Window);var K=I.Height+J.Y;var L=I.Width+J.X;if ((x+D)>L) x-=x+D-L;if ((y+E.offsetHeight)>K) y-=y+E.offsetHeight-K;};FCKDomTools.SetElementStyles(this._IFrame,{left:x+'px',top:y+'px'});this._IFrame.contentWindow.focus();this._IsOpened=true;var M=this;this._resizeTimer=setTimeout(function(){var N=E.offsetWidth||E.firstChild.offsetWidth;var O=E.offsetHeight;M._IFrame.style.width=N+'px';M._IFrame.style.height=O+'px';},0);FCK.ToolbarSet.CurrentInstance.GetInstanceObject('FCKPanel')._OpenedPanel=this;};FCKTools.RunFunction(this.OnShow,this);};FCKPanel.prototype.Hide=function(A,B){if (this._Popup) this._Popup.hide();else{if (!this._IsOpened||this._LockCounter>0) return;if (typeof(FCKFocusManager)!='undefined'&&!B) FCKFocusManager.Unlock();this._IFrame.style.width=this._IFrame.style.height='0px';this._IsOpened=false;if (this._resizeTimer){clearTimeout(this._resizeTimer);this._resizeTimer=null;};if (this.ParentPanel) this.ParentPanel.Unlock();if (!A) FCKTools.RunFunction(this.OnHide,this);}};FCKPanel.prototype.CheckIsOpened=function(){if (this._Popup) return this._Popup.isOpen;else return this._IsOpened;};FCKPanel.prototype.CreateChildPanel=function(){var A=this._Popup?FCKTools.GetDocumentWindow(this.Document):this._Window;var B=new FCKPanel(A);B.ParentPanel=this;return B;};FCKPanel.prototype.Lock=function(){this._LockCounter++;};FCKPanel.prototype.Unlock=function(){if (--this._LockCounter==0&&!this.HasFocus) this.Hide();};function FCKPanel_Window_OnFocus(e,A){A.HasFocus=true;};function FCKPanel_Window_OnBlur(e,A){A.HasFocus=false;if (A._LockCounter==0) FCKTools.RunFunction(A.Hide,A);};function CheckPopupOnHide(A){if (A||!this._Popup.isOpen){window.clearInterval(this._Timer);this._Timer=null;FCKTools.RunFunction(this.OnHide,this);}};function FCKPanel_Cleanup(){this._Popup=null;this._Window=null;this.Document=null;this.MainNode=null;};
+var FCKIcon=function(A){var B=A?typeof(A):'undefined';switch (B){case 'number':this.Path=FCKConfig.SkinPath+'fck_strip.gif';this.Size=16;this.Position=A;break;case 'undefined':this.Path=FCK_SPACER_PATH;break;case 'string':this.Path=A;break;default:this.Path=A[0];this.Size=A[1];this.Position=A[2];}};FCKIcon.prototype.CreateIconElement=function(A){var B,eIconImage;if (this.Position){var C='-'+((this.Position-1)*this.Size)+'px';if (FCKBrowserInfo.IsIE){B=A.createElement('DIV');eIconImage=B.appendChild(A.createElement('IMG'));eIconImage.src=this.Path;eIconImage.style.top=C;}else{B=A.createElement('IMG');B.src=FCK_SPACER_PATH;B.style.backgroundPosition='0px '+C;B.style.backgroundImage='url("'+this.Path+'")';}}else{if (FCKBrowserInfo.IsIE){B=A.createElement('DIV');eIconImage=B.appendChild(A.createElement('IMG'));eIconImage.src=this.Path?this.Path:FCK_SPACER_PATH;}else{B=A.createElement('IMG');B.src=this.Path?this.Path:FCK_SPACER_PATH;}};B.className='TB_Button_Image';return B;};
+var FCKToolbarButtonUI=function(A,B,C,D,E,F){this.Name=A;this.Label=B||A;this.Tooltip=C||this.Label;this.Style=E||0;this.State=F||0;this.Icon=new FCKIcon(D);if (FCK.IECleanup) FCK.IECleanup.AddItem(this,FCKToolbarButtonUI_Cleanup);};FCKToolbarButtonUI.prototype._CreatePaddingElement=function(A){var B=A.createElement('IMG');B.className='TB_Button_Padding';B.src=FCK_SPACER_PATH;return B;};FCKToolbarButtonUI.prototype.Create=function(A){var B=FCKTools.GetElementDocument(A);var C=this.MainElement=B.createElement('DIV');C.title=this.Tooltip;if (FCKBrowserInfo.IsGecko) C.onmousedown=FCKTools.CancelEvent;FCKTools.AddEventListenerEx(C,'mouseover',FCKToolbarButtonUI_OnMouseOver,this);FCKTools.AddEventListenerEx(C,'mouseout',FCKToolbarButtonUI_OnMouseOut,this);FCKTools.AddEventListenerEx(C,'click',FCKToolbarButtonUI_OnClick,this);this.ChangeState(this.State,true);if (this.Style==0&&!this.ShowArrow){C.appendChild(this.Icon.CreateIconElement(B));}else{var D=C.appendChild(B.createElement('TABLE'));D.cellPadding=0;D.cellSpacing=0;var E=D.insertRow(-1);var F=E.insertCell(-1);if (this.Style==0||this.Style==2) F.appendChild(this.Icon.CreateIconElement(B));else F.appendChild(this._CreatePaddingElement(B));if (this.Style==1||this.Style==2){F=E.insertCell(-1);F.className='TB_Button_Text';F.noWrap=true;F.appendChild(B.createTextNode(this.Label));};if (this.ShowArrow){if (this.Style!=0){E.insertCell(-1).appendChild(this._CreatePaddingElement(B));};F=E.insertCell(-1);var G=F.appendChild(B.createElement('IMG'));G.src=FCKConfig.SkinPath+'images/toolbar.buttonarrow.gif';G.width=5;G.height=3;};F=E.insertCell(-1);F.appendChild(this._CreatePaddingElement(B));};A.appendChild(C);};FCKToolbarButtonUI.prototype.ChangeState=function(A,B){if (!B&&this.State==A) return;var e=this.MainElement;if (!e) return;switch (parseInt(A,10)){case 0:e.className='TB_Button_Off';break;case 1:e.className='TB_Button_On';break;case -1:e.className='TB_Button_Disabled';break;};this.State=A;};function FCKToolbarButtonUI_OnMouseOver(A,B){if (B.State==0) this.className='TB_Button_Off_Over';else if (B.State==1) this.className='TB_Button_On_Over';};function FCKToolbarButtonUI_OnMouseOut(A,B){if (B.State==0) this.className='TB_Button_Off';else if (B.State==1) this.className='TB_Button_On';};function FCKToolbarButtonUI_OnClick(A,B){if (B.OnClick&&B.State!=-1) B.OnClick(B);};function FCKToolbarButtonUI_Cleanup(){this.MainElement=null;};
+var FCKToolbarButton=function(A,B,C,D,E,F,G){this.CommandName=A;this.Label=B;this.Tooltip=C;this.Style=D;this.SourceView=E?true:false;this.ContextSensitive=F?true:false;if (G==null) this.IconPath=FCKConfig.SkinPath+'toolbar/'+A.toLowerCase()+'.gif';else if (typeof(G)=='number') this.IconPath=[FCKConfig.SkinPath+'fck_strip.gif',16,G];else this.IconPath=G;};FCKToolbarButton.prototype.Create=function(A){this._UIButton=new FCKToolbarButtonUI(this.CommandName,this.Label,this.Tooltip,this.IconPath,this.Style);this._UIButton.OnClick=this.Click;this._UIButton._ToolbarButton=this;this._UIButton.Create(A);};FCKToolbarButton.prototype.RefreshState=function(){var A=this._UIButton;if (!A) return;var B=FCK.ToolbarSet.CurrentInstance.Commands.GetCommand(this.CommandName).GetState();if (B==A.State) return;A.ChangeState(B);};FCKToolbarButton.prototype.Click=function(){var A=this._ToolbarButton||this;FCK.ToolbarSet.CurrentInstance.Commands.GetCommand(A.CommandName).Execute();};FCKToolbarButton.prototype.Enable=function(){this.RefreshState();};FCKToolbarButton.prototype.Disable=function(){this._UIButton.ChangeState(-1);};
+var FCKSpecialCombo=function(A,B,C,D,E){this.FieldWidth=B||100;this.PanelWidth=C||150;this.PanelMaxHeight=D||150;this.Label='&nbsp;';this.Caption=A;this.Tooltip=A;this.Style=2;this.Enabled=true;this.Items={};this._Panel=new FCKPanel(E||window);this._Panel.AppendStyleSheet(FCKConfig.SkinEditorCSS);this._PanelBox=this._Panel.MainNode.appendChild(this._Panel.Document.createElement('DIV'));this._PanelBox.className='SC_Panel';this._PanelBox.style.width=this.PanelWidth+'px';this._PanelBox.innerHTML='<table cellpadding="0" cellspacing="0" width="100%" style="TABLE-LAYOUT: fixed"><tr><td nowrap></td></tr></table>';this._ItemsHolderEl=this._PanelBox.getElementsByTagName('TD')[0];if (FCK.IECleanup) FCK.IECleanup.AddItem(this,FCKSpecialCombo_Cleanup);};function FCKSpecialCombo_ItemOnMouseOver(){this.className+=' SC_ItemOver';};function FCKSpecialCombo_ItemOnMouseOut(){this.className=this.originalClass;};function FCKSpecialCombo_ItemOnClick(A,B,C){this.className=this.originalClass;B._Panel.Hide();B.SetLabel(this.FCKItemLabel);if (typeof(B.OnSelect)=='function') B.OnSelect(C,this);};FCKSpecialCombo.prototype.ClearItems=function (){if (this.Items) this.Items={};var A=this._ItemsHolderEl;while (A.firstChild) A.removeChild(A.firstChild);};FCKSpecialCombo.prototype.AddItem=function(A,B,C,D){var E=this._ItemsHolderEl.appendChild(this._Panel.Document.createElement('DIV'));E.className=E.originalClass='SC_Item';E.innerHTML=B;E.FCKItemLabel=C||A;E.Selected=false;if (FCKBrowserInfo.IsIE) E.style.width='100%';if (D) E.style.backgroundColor=D;FCKTools.AddEventListenerEx(E,'mouseover',FCKSpecialCombo_ItemOnMouseOver);FCKTools.AddEventListenerEx(E,'mouseout',FCKSpecialCombo_ItemOnMouseOut);FCKTools.AddEventListenerEx(E,'click',FCKSpecialCombo_ItemOnClick,[this,A]);this.Items[A.toString().toLowerCase()]=E;return E;};FCKSpecialCombo.prototype.SelectItem=function(A){if (typeof A=='string') A=this.Items[A.toString().toLowerCase()];if (A){A.className=A.originalClass='SC_ItemSelected';A.Selected=true;}};FCKSpecialCombo.prototype.SelectItemByLabel=function(A,B){for (var C in this.Items){var D=this.Items[C];if (D.FCKItemLabel==A){D.className=D.originalClass='SC_ItemSelected';D.Selected=true;if (B) this.SetLabel(A);}}};FCKSpecialCombo.prototype.DeselectAll=function(A){for (var i in this.Items){if (!this.Items[i]) continue;this.Items[i].className=this.Items[i].originalClass='SC_Item';this.Items[i].Selected=false;};if (A) this.SetLabel('');};FCKSpecialCombo.prototype.SetLabelById=function(A){A=A?A.toString().toLowerCase():'';var B=this.Items[A];this.SetLabel(B?B.FCKItemLabel:'');};FCKSpecialCombo.prototype.SetLabel=function(A){A=(!A||A.length==0)?'&nbsp;':A;if (A==this.Label) return;this.Label=A;var B=this._LabelEl;if (B){B.innerHTML=A;FCKTools.DisableSelection(B);}};FCKSpecialCombo.prototype.SetEnabled=function(A){this.Enabled=A;if (this._OuterTable) this._OuterTable.className=A?'':'SC_FieldDisabled';};FCKSpecialCombo.prototype.Create=function(A){var B=FCKTools.GetElementDocument(A);var C=this._OuterTable=A.appendChild(B.createElement('TABLE'));C.cellPadding=0;C.cellSpacing=0;C.insertRow(-1);var D;var E;switch (this.Style){case 0:D='TB_ButtonType_Icon';E=false;break;case 1:D='TB_ButtonType_Text';E=false;break;case 2:E=true;break;};if (this.Caption&&this.Caption.length>0&&E){var F=C.rows[0].insertCell(-1);F.innerHTML=this.Caption;F.className='SC_FieldCaption';};var G=FCKTools.AppendElement(C.rows[0].insertCell(-1),'div');if (E){G.className='SC_Field';G.style.width=this.FieldWidth+'px';G.innerHTML='<table width="100%" cellpadding="0" cellspacing="0" style="TABLE-LAYOUT: fixed;"><tbody><tr><td class="SC_FieldLabel"><label>&nbsp;</label></td><td class="SC_FieldButton">&nbsp;</td></tr></tbody></table>';this._LabelEl=G.getElementsByTagName('label')[0];this._LabelEl.innerHTML=this.Label;}else{G.className='TB_Button_Off';G.innerHTML='<table title="'+this.Tooltip+'" class="'+D+'" cellspacing="0" cellpadding="0" border="0"><tr><td><img class="TB_Button_Padding" src="'+FCK_SPACER_PATH+'" /></td><td class="TB_Text">'+this.Caption+'</td><td><img class="TB_Button_Padding" src="'+FCK_SPACER_PATH+'" /></td><td class="TB_ButtonArrow"><img src="'+FCKConfig.SkinPath+'images/toolbar.buttonarrow.gif" width="5" height="3"></td><td><img class="TB_Button_Padding" src="'+FCK_SPACER_PATH+'" /></td></tr></table>';};FCKTools.AddEventListenerEx(G,'mouseover',FCKSpecialCombo_OnMouseOver,this);FCKTools.AddEventListenerEx(G,'mouseout',FCKSpecialCombo_OnMouseOut,this);FCKTools.AddEventListenerEx(G,'click',FCKSpecialCombo_OnClick,this);FCKTools.DisableSelection(this._Panel.Document.body);};function FCKSpecialCombo_Cleanup(){this._LabelEl=null;this._OuterTable=null;this._ItemsHolderEl=null;this._PanelBox=null;if (this.Items){for (var A in this.Items) this.Items[A]=null;}};function FCKSpecialCombo_OnMouseOver(A,B){if (B.Enabled){switch (B.Style){case 0:this.className='TB_Button_On_Over';break;case 1:this.className='TB_Button_On_Over';break;case 2:this.className='SC_Field SC_FieldOver';break;}}};function FCKSpecialCombo_OnMouseOut(A,B){switch (B.Style){case 0:this.className='TB_Button_Off';break;case 1:this.className='TB_Button_Off';break;case 2:this.className='SC_Field';break;}};function FCKSpecialCombo_OnClick(e,A){if (A.Enabled){var B=A._Panel;var C=A._PanelBox;var D=A._ItemsHolderEl;var E=A.PanelMaxHeight;if (A.OnBeforeClick) A.OnBeforeClick(A);if (FCKBrowserInfo.IsIE) B.Preload(0,this.offsetHeight,this);if (D.offsetHeight>E) C.style.height=E+'px';else C.style.height='';B.Show(0,this.offsetHeight,this);}};
+var FCKToolbarSpecialCombo=function(){this.SourceView=false;this.ContextSensitive=true;this.FieldWidth=null;this.PanelWidth=null;this.PanelMaxHeight=null;};FCKToolbarSpecialCombo.prototype.DefaultLabel='';function FCKToolbarSpecialCombo_OnSelect(A,B){FCK.ToolbarSet.CurrentInstance.Commands.GetCommand(this.CommandName).Execute(A,B);};FCKToolbarSpecialCombo.prototype.Create=function(A){this._Combo=new FCKSpecialCombo(this.GetLabel(),this.FieldWidth,this.PanelWidth,this.PanelMaxHeight,FCKBrowserInfo.IsIE?window:FCKTools.GetElementWindow(A).parent);this._Combo.Tooltip=this.Tooltip;this._Combo.Style=this.Style;this.CreateItems(this._Combo);this._Combo.Create(A);this._Combo.CommandName=this.CommandName;this._Combo.OnSelect=FCKToolbarSpecialCombo_OnSelect;};function FCKToolbarSpecialCombo_RefreshActiveItems(A,B){A.DeselectAll();A.SelectItem(B);A.SetLabelById(B);};FCKToolbarSpecialCombo.prototype.RefreshState=function(){var A;var B=FCK.ToolbarSet.CurrentInstance.Commands.GetCommand(this.CommandName).GetState();if (B!=-1){A=1;if (this.RefreshActiveItems) this.RefreshActiveItems(this._Combo,B);else{if (this._LastValue!==B){this._LastValue=B;if (!B||B.length==0){this._Combo.DeselectAll();this._Combo.SetLabel(this.DefaultLabel);}else FCKToolbarSpecialCombo_RefreshActiveItems(this._Combo,B);}}}else A=-1;if (A==this.State) return;if (A==-1){this._Combo.DeselectAll();this._Combo.SetLabel('');};this.State=A;this._Combo.SetEnabled(A!=-1);};FCKToolbarSpecialCombo.prototype.Enable=function(){this.RefreshState();};FCKToolbarSpecialCombo.prototype.Disable=function(){this.State=-1;this._Combo.DeselectAll();this._Combo.SetLabel('');this._Combo.SetEnabled(false);};
+var FCKToolbarStyleCombo=function(A,B){if (A===false) return;this.CommandName='Style';this.Label=this.GetLabel();this.Tooltip=A?A:this.Label;this.Style=B?B:2;this.DefaultLabel=FCKConfig.DefaultStyleLabel||'';};FCKToolbarStyleCombo.prototype=new FCKToolbarSpecialCombo;FCKToolbarStyleCombo.prototype.GetLabel=function(){return FCKLang.Style;};FCKToolbarStyleCombo.prototype.GetStyles=function(){var A={};var B=FCK.ToolbarSet.CurrentInstance.Styles.GetStyles();for (var C in B){var D=B[C];if (!D.IsCore) A[C]=D;};return A;};FCKToolbarStyleCombo.prototype.CreateItems=function(A){var B=A._Panel.Document;FCKTools.AppendStyleSheet(B,FCKConfig.ToolbarComboPreviewCSS);FCKTools.AppendStyleString(B,FCKConfig.EditorAreaStyles);B.body.className+=' ForceBaseFont';FCKConfig.ApplyBodyAttributes(B.body);var C=this.GetStyles();for (var D in C){var E=C[D];var F=E.GetType()==2?D:FCKToolbarStyleCombo_BuildPreview(E,E.Label||D);var G=A.AddItem(D,F);G.Style=E;};A.OnBeforeClick=this.StyleCombo_OnBeforeClick;};FCKToolbarStyleCombo.prototype.RefreshActiveItems=function(A){var B=FCK.ToolbarSet.CurrentInstance.Selection.GetBoundaryParentElement(true);if (B){var C=new FCKElementPath(B);var D=C.Elements;for (var e=0;e<D.length;e++){for (var i in A.Items){var E=A.Items[i];var F=E.Style;if (F.CheckElementRemovable(D[e],true)){A.SetLabel(F.Label||F.Name);return;}}}};A.SetLabel(this.DefaultLabel);};FCKToolbarStyleCombo.prototype.StyleCombo_OnBeforeClick=function(A){A.DeselectAll();var B;var C;var D;var E=FCK.ToolbarSet.CurrentInstance.Selection;if (E.GetType()=='Control'){B=E.GetSelectedElement();D=B.nodeName.toLowerCase();}else{B=E.GetBoundaryParentElement(true);C=new FCKElementPath(B);};for (var i in A.Items){var F=A.Items[i];var G=F.Style;if ((D&&G.Element==D)||(!D&&G.GetType()!=2)){F.style.display='';if ((C&&G.CheckActive(C))||(!C&&G.CheckElementRemovable(B,true))) A.SelectItem(G.Name);}else F.style.display='none';}};function FCKToolbarStyleCombo_BuildPreview(A,B){var C=A.GetType();var D=[];if (C==0) D.push('<div class="BaseFont">');var E=A.Element;if (E=='bdo') E='span';D=['<',E];var F=A._StyleDesc.Attributes;if (F){for (var G in F){D.push(' ',G,'="',A.GetFinalAttributeValue(G),'"');}};if (A._GetStyleText().length>0) D.push(' style="',A.GetFinalStyleValue(),'"');D.push('>',B,'</',E,'>');if (C==0) D.push('</div>');return D.join('');};
+var FCKToolbarFontFormatCombo=function(A,B){if (A===false) return;this.CommandName='FontFormat';this.Label=this.GetLabel();this.Tooltip=A?A:this.Label;this.Style=B?B:2;this.NormalLabel='Normal';this.PanelWidth=190;this.DefaultLabel=FCKConfig.DefaultFontFormatLabel||'';};FCKToolbarFontFormatCombo.prototype=new FCKToolbarStyleCombo(false);FCKToolbarFontFormatCombo.prototype.GetLabel=function(){return FCKLang.FontFormat;};FCKToolbarFontFormatCombo.prototype.GetStyles=function(){var A={};var B=FCKLang['FontFormats'].split(';');var C={p:B[0],pre:B[1],address:B[2],h1:B[3],h2:B[4],h3:B[5],h4:B[6],h5:B[7],h6:B[8],div:B[9]||(B[0]+' (DIV)')};var D=FCKConfig.FontFormats.split(';');for (var i=0;i<D.length;i++){var E=D[i];var F=FCKStyles.GetStyle('_FCK_'+E);if (F){F.Label=C[E];A['_FCK_'+E]=F;}else alert("The FCKConfig.CoreStyles['"+E+"'] setting was not found. Please check the fckconfig.js file");};return A;};FCKToolbarFontFormatCombo.prototype.RefreshActiveItems=function(A){var B=FCK.ToolbarSet.CurrentInstance.Selection.GetBoundaryParentElement(true);if (B){var C=new FCKElementPath(B);var D=C.Block;if (D){for (var i in A.Items){var E=A.Items[i];var F=E.Style;if (F.CheckElementRemovable(D)){A.SetLabel(F.Label);return;}}}};A.SetLabel(this.DefaultLabel);};FCKToolbarFontFormatCombo.prototype.StyleCombo_OnBeforeClick=function(A){A.DeselectAll();var B=FCK.ToolbarSet.CurrentInstance.Selection.GetBoundaryParentElement(true);if (B){var C=new FCKElementPath(B);var D=C.Block;for (var i in A.Items){var E=A.Items[i];var F=E.Style;if (F.CheckElementRemovable(D)){A.SelectItem(E);return;}}}};
+var FCKToolbarFontsCombo=function(A,B){this.CommandName='FontName';this.Label=this.GetLabel();this.Tooltip=A?A:this.Label;this.Style=B?B:2;this.DefaultLabel=FCKConfig.DefaultFontLabel||'';};FCKToolbarFontsCombo.prototype=new FCKToolbarFontFormatCombo(false);FCKToolbarFontsCombo.prototype.GetLabel=function(){return FCKLang.Font;};FCKToolbarFontsCombo.prototype.GetStyles=function(){var A=FCKStyles.GetStyle('_FCK_FontFace');if (!A){alert("The FCKConfig.CoreStyles['Size'] setting was not found. Please check the fckconfig.js file");return {};};var B={};var C=FCKConfig.FontNames.split(';');for (var i=0;i<C.length;i++){var D=C[i].split('/');var E=D[0];var F=D[1]||E;var G=FCKTools.CloneObject(A);G.SetVariable('Font',E);G.Label=F;B[F]=G;};return B;};FCKToolbarFontsCombo.prototype.RefreshActiveItems=FCKToolbarStyleCombo.prototype.RefreshActiveItems;FCKToolbarFontsCombo.prototype.StyleCombo_OnBeforeClick=function(A){A.DeselectAll();var B=FCKSelection.GetBoundaryParentElement(true);if (B){var C=new FCKElementPath(B);for (var i in A.Items){var D=A.Items[i];var E=D.Style;if (E.CheckActive(C)){A.SelectItem(D);return;}}}};
+var FCKToolbarFontSizeCombo=function(A,B){this.CommandName='FontSize';this.Label=this.GetLabel();this.Tooltip=A?A:this.Label;this.Style=B?B:2;this.DefaultLabel=FCKConfig.DefaultFontSizeLabel||'';this.FieldWidth=70;};FCKToolbarFontSizeCombo.prototype=new FCKToolbarFontFormatCombo(false);FCKToolbarFontSizeCombo.prototype.GetLabel=function(){return FCKLang.FontSize;};FCKToolbarFontSizeCombo.prototype.GetStyles=function(){var A=FCKStyles.GetStyle('_FCK_Size');if (!A){alert("The FCKConfig.CoreStyles['FontFace'] setting was not found. Please check the fckconfig.js file");return {};};var B={};var C=FCKConfig.FontSizes.split(';');for (var i=0;i<C.length;i++){var D=C[i].split('/');var E=D[0];var F=D[1]||E;var G=FCKTools.CloneObject(A);G.SetVariable('Size',E);G.Label=F;B[F]=G;};return B;};FCKToolbarFontSizeCombo.prototype.RefreshActiveItems=FCKToolbarStyleCombo.prototype.RefreshActiveItems;FCKToolbarFontSizeCombo.prototype.StyleCombo_OnBeforeClick=FCKToolbarFontsCombo.prototype.StyleCombo_OnBeforeClick;
+var FCKToolbarPanelButton=function(A,B,C,D,E){this.CommandName=A;var F;if (E==null) F=FCKConfig.SkinPath+'toolbar/'+A.toLowerCase()+'.gif';else if (typeof(E)=='number') F=[FCKConfig.SkinPath+'fck_strip.gif',16,E];var G=this._UIButton=new FCKToolbarButtonUI(A,B,C,F,D);G._FCKToolbarPanelButton=this;G.ShowArrow=true;G.OnClick=FCKToolbarPanelButton_OnButtonClick;};FCKToolbarPanelButton.prototype.TypeName='FCKToolbarPanelButton';FCKToolbarPanelButton.prototype.Create=function(A){A.className+='Menu';this._UIButton.Create(A);var B=FCK.ToolbarSet.CurrentInstance.Commands.GetCommand(this.CommandName)._Panel;this.RegisterPanel(B);};FCKToolbarPanelButton.prototype.RegisterPanel=function(A){if (A._FCKToolbarPanelButton) return;A._FCKToolbarPanelButton=this;var B=A.Document.body.appendChild(A.Document.createElement('div'));B.style.position='absolute';B.style.top='0px';var C=A._FCKToolbarPanelButtonLineDiv=B.appendChild(A.Document.createElement('IMG'));C.className='TB_ConnectionLine';C.style.position='absolute';C.src=FCK_SPACER_PATH;A.OnHide=FCKToolbarPanelButton_OnPanelHide;};function FCKToolbarPanelButton_OnButtonClick(A){var B=this._FCKToolbarPanelButton;var e=B._UIButton.MainElement;B._UIButton.ChangeState(1);var C=FCK.ToolbarSet.CurrentInstance.Commands.GetCommand(B.CommandName);var D=C._Panel;D._FCKToolbarPanelButtonLineDiv.style.width=(e.offsetWidth-2)+'px';C.Execute(0,e.offsetHeight-1,e);};function FCKToolbarPanelButton_OnPanelHide(){var A=this._FCKToolbarPanelButton;A._UIButton.ChangeState(0);};FCKToolbarPanelButton.prototype.RefreshState=FCKToolbarButton.prototype.RefreshState;FCKToolbarPanelButton.prototype.Enable=FCKToolbarButton.prototype.Enable;FCKToolbarPanelButton.prototype.Disable=FCKToolbarButton.prototype.Disable;
+var FCKToolbarItems={};FCKToolbarItems.LoadedItems={};FCKToolbarItems.RegisterItem=function(A,B){this.LoadedItems[A]=B;};FCKToolbarItems.GetItem=function(A){var B=FCKToolbarItems.LoadedItems[A];if (B) return B;switch (A){case 'Source':B=new FCKToolbarButton('Source',FCKLang.Source,null,2,true,true,1);break;case 'DocProps':B=new FCKToolbarButton('DocProps',FCKLang.DocProps,null,null,null,null,2);break;case 'Save':B=new FCKToolbarButton('Save',FCKLang.Save,null,null,true,null,3);break;case 'NewPage':B=new FCKToolbarButton('NewPage',FCKLang.NewPage,null,null,true,null,4);break;case 'Preview':B=new FCKToolbarButton('Preview',FCKLang.Preview,null,null,true,null,5);break;case 'Templates':B=new FCKToolbarButton('Templates',FCKLang.Templates,null,null,null,null,6);break;case 'About':B=new FCKToolbarButton('About',FCKLang.About,null,null,true,null,47);break;case 'Cut':B=new FCKToolbarButton('Cut',FCKLang.Cut,null,null,false,true,7);break;case 'Copy':B=new FCKToolbarButton('Copy',FCKLang.Copy,null,null,false,true,8);break;case 'Paste':B=new FCKToolbarButton('Paste',FCKLang.Paste,null,null,false,true,9);break;case 'PasteText':B=new FCKToolbarButton('PasteText',FCKLang.PasteText,null,null,false,true,10);break;case 'PasteWord':B=new FCKToolbarButton('PasteWord',FCKLang.PasteWord,null,null,false,true,11);break;case 'Print':B=new FCKToolbarButton('Print',FCKLang.Print,null,null,false,true,12);break;case 'SpellCheck':B=new FCKToolbarButton('SpellCheck',FCKLang.SpellCheck,null,null,null,null,13);break;case 'Undo':B=new FCKToolbarButton('Undo',FCKLang.Undo,null,null,false,true,14);break;case 'Redo':B=new FCKToolbarButton('Redo',FCKLang.Redo,null,null,false,true,15);break;case 'SelectAll':B=new FCKToolbarButton('SelectAll',FCKLang.SelectAll,null,null,true,null,18);break;case 'RemoveFormat':B=new FCKToolbarButton('RemoveFormat',FCKLang.RemoveFormat,null,null,false,true,19);break;case 'FitWindow':B=new FCKToolbarButton('FitWindow',FCKLang.FitWindow,null,null,true,true,66);break;case 'Bold':B=new FCKToolbarButton('Bold',FCKLang.Bold,null,null,false,true,20);break;case 'Italic':B=new FCKToolbarButton('Italic',FCKLang.Italic,null,null,false,true,21);break;case 'Underline':B=new FCKToolbarButton('Underline',FCKLang.Underline,null,null,false,true,22);break;case 'StrikeThrough':B=new FCKToolbarButton('StrikeThrough',FCKLang.StrikeThrough,null,null,false,true,23);break;case 'Subscript':B=new FCKToolbarButton('Subscript',FCKLang.Subscript,null,null,false,true,24);break;case 'Superscript':B=new FCKToolbarButton('Superscript',FCKLang.Superscript,null,null,false,true,25);break;case 'OrderedList':B=new FCKToolbarButton('InsertOrderedList',FCKLang.NumberedListLbl,FCKLang.NumberedList,null,false,true,26);break;case 'UnorderedList':B=new FCKToolbarButton('InsertUnorderedList',FCKLang.BulletedListLbl,FCKLang.BulletedList,null,false,true,27);break;case 'Outdent':B=new FCKToolbarButton('Outdent',FCKLang.DecreaseIndent,null,null,false,true,28);break;case 'Indent':B=new FCKToolbarButton('Indent',FCKLang.IncreaseIndent,null,null,false,true,29);break;case 'Blockquote':B=new FCKToolbarButton('Blockquote',FCKLang.Blockquote,null,null,false,true,73);break;case 'Link':B=new FCKToolbarButton('Link',FCKLang.InsertLinkLbl,FCKLang.InsertLink,null,false,true,34);break;case 'Unlink':B=new FCKToolbarButton('Unlink',FCKLang.RemoveLink,null,null,false,true,35);break;case 'Anchor':B=new FCKToolbarButton('Anchor',FCKLang.Anchor,null,null,null,null,36);break;case 'Image':B=new FCKToolbarButton('Image',FCKLang.InsertImageLbl,FCKLang.InsertImage,null,false,true,37);break;case 'Flash':B=new FCKToolbarButton('Flash',FCKLang.InsertFlashLbl,FCKLang.InsertFlash,null,false,true,38);break;case 'Table':B=new FCKToolbarButton('Table',FCKLang.InsertTableLbl,FCKLang.InsertTable,null,false,true,39);break;case 'SpecialChar':B=new FCKToolbarButton('SpecialChar',FCKLang.InsertSpecialCharLbl,FCKLang.InsertSpecialChar,null,false,true,42);break;case 'Smiley':B=new FCKToolbarButton('Smiley',FCKLang.InsertSmileyLbl,FCKLang.InsertSmiley,null,false,true,41);break;case 'PageBreak':B=new FCKToolbarButton('PageBreak',FCKLang.PageBreakLbl,FCKLang.PageBreak,null,false,true,43);break;case 'Rule':B=new FCKToolbarButton('Rule',FCKLang.InsertLineLbl,FCKLang.InsertLine,null,false,true,40);break;case 'JustifyLeft':B=new FCKToolbarButton('JustifyLeft',FCKLang.LeftJustify,null,null,false,true,30);break;case 'JustifyCenter':B=new FCKToolbarButton('JustifyCenter',FCKLang.CenterJustify,null,null,false,true,31);break;case 'JustifyRight':B=new FCKToolbarButton('JustifyRight',FCKLang.RightJustify,null,null,false,true,32);break;case 'JustifyFull':B=new FCKToolbarButton('JustifyFull',FCKLang.BlockJustify,null,null,false,true,33);break;case 'Style':B=new FCKToolbarStyleCombo();break;case 'FontName':B=new FCKToolbarFontsCombo();break;case 'FontSize':B=new FCKToolbarFontSizeCombo();break;case 'FontFormat':B=new FCKToolbarFontFormatCombo();break;case 'TextColor':B=new FCKToolbarPanelButton('TextColor',FCKLang.TextColor,null,null,45);break;case 'BGColor':B=new FCKToolbarPanelButton('BGColor',FCKLang.BGColor,null,null,46);break;case 'Find':B=new FCKToolbarButton('Find',FCKLang.Find,null,null,null,null,16);break;case 'Replace':B=new FCKToolbarButton('Replace',FCKLang.Replace,null,null,null,null,17);break;case 'Form':B=new FCKToolbarButton('Form',FCKLang.Form,null,null,null,null,48);break;case 'Checkbox':B=new FCKToolbarButton('Checkbox',FCKLang.Checkbox,null,null,null,null,49);break;case 'Radio':B=new FCKToolbarButton('Radio',FCKLang.RadioButton,null,null,null,null,50);break;case 'TextField':B=new FCKToolbarButton('TextField',FCKLang.TextField,null,null,null,null,51);break;case 'Textarea':B=new FCKToolbarButton('Textarea',FCKLang.Textarea,null,null,null,null,52);break;case 'HiddenField':B=new FCKToolbarButton('HiddenField',FCKLang.HiddenField,null,null,null,null,56);break;case 'Button':B=new FCKToolbarButton('Button',FCKLang.Button,null,null,null,null,54);break;case 'Select':B=new FCKToolbarButton('Select',FCKLang.SelectionField,null,null,null,null,53);break;case 'ImageButton':B=new FCKToolbarButton('ImageButton',FCKLang.ImageButton,null,null,null,null,55);break;case 'ShowBlocks':B=new FCKToolbarButton('ShowBlocks',FCKLang.ShowBlocks,null,null,null,true,72);break;default:alert(FCKLang.UnknownToolbarItem.replace(/%1/g,A));return null;};FCKToolbarItems.LoadedItems[A]=B;return B;};
+var FCKToolbar=function(){this.Items=[];};FCKToolbar.prototype.AddItem=function(A){return this.Items[this.Items.length]=A;};FCKToolbar.prototype.AddButton=function(A,B,C,D,E,F){if (typeof(D)=='number') D=[this.DefaultIconsStrip,this.DefaultIconSize,D];var G=new FCKToolbarButtonUI(A,B,C,D,E,F);G._FCKToolbar=this;G.OnClick=FCKToolbar_OnItemClick;return this.AddItem(G);};function FCKToolbar_OnItemClick(A){var B=A._FCKToolbar;if (B.OnItemClick) B.OnItemClick(B,A);};FCKToolbar.prototype.AddSeparator=function(){this.AddItem(new FCKToolbarSeparator());};FCKToolbar.prototype.Create=function(A){var B=FCKTools.GetElementDocument(A);var e=B.createElement('table');e.className='TB_Toolbar';e.style.styleFloat=e.style.cssFloat=(FCKLang.Dir=='ltr'?'left':'right');e.dir=FCKLang.Dir;e.cellPadding=0;e.cellSpacing=0;var C=e.insertRow(-1);var D;if (!this.HideStart){D=C.insertCell(-1);D.appendChild(B.createElement('div')).className='TB_Start';};for (var i=0;i<this.Items.length;i++){this.Items[i].Create(C.insertCell(-1));};if (!this.HideEnd){D=C.insertCell(-1);D.appendChild(B.createElement('div')).className='TB_End';};A.appendChild(e);};var FCKToolbarSeparator=function(){};FCKToolbarSeparator.prototype.Create=function(A){FCKTools.AppendElement(A,'div').className='TB_Separator';};
+var FCKToolbarBreak=function(){};FCKToolbarBreak.prototype.Create=function(A){var B=FCKTools.GetElementDocument(A).createElement('div');B.className='TB_Break';B.style.clear=FCKLang.Dir=='rtl'?'left':'right';A.appendChild(B);};
+function FCKToolbarSet_Create(A){var B;var C=A||FCKConfig.ToolbarLocation;switch (C){case 'In':document.getElementById('xToolbarRow').style.display='';B=new FCKToolbarSet(document);break;case 'None':B=new FCKToolbarSet(document);break;default:FCK.Events.AttachEvent('OnBlur',FCK_OnBlur);FCK.Events.AttachEvent('OnFocus',FCK_OnFocus);var D;var E=C.match(/^Out:(.+)\((\w+)\)$/);if (E){if (FCKBrowserInfo.IsAIR) FCKAdobeAIR.ToolbarSet_GetOutElement(window,E);else D=eval('parent.'+E[1]).document.getElementById(E[2]);}else{E=C.match(/^Out:(\w+)$/);if (E) D=parent.document.getElementById(E[1]);};if (!D){alert('Invalid value for "ToolbarLocation"');return arguments.callee('In');};B=D.__FCKToolbarSet;if (B) break;var F=FCKTools.GetElementDocument(D).createElement('iframe');F.src='javascript:void(0)';F.frameBorder=0;F.width='100%';F.height='10';D.appendChild(F);F.unselectable='on';var G=F.contentWindow.document;var H='';if (FCKBrowserInfo.IsSafari) H='<base href="'+window.document.location+'">';G.open();G.write('<html><head>'+H+'<script type="text/javascript"> var adjust = function() { window.frameElement.height = document.body.scrollHeight ; }; window.onresize = window.onload = function(){var timer = null;var lastHeight = -1;var lastChange = 0;var poller = function(){var currentHeight = document.body.scrollHeight || 0;var currentTime = (new Date()).getTime();if (currentHeight != lastHeight){lastChange = currentTime;adjust();lastHeight = document.body.scrollHeight;}if (lastChange < currentTime - 1000) clearInterval(timer);};timer = setInterval(poller, 100);}</script></head><body style="overflow: hidden">'+document.getElementById('xToolbarSpace').innerHTML+'</body></html>');G.close();if(FCKBrowserInfo.IsAIR) FCKAdobeAIR.ToolbarSet_InitOutFrame(G);FCKTools.AddEventListener(G,'contextmenu',FCKTools.CancelEvent);FCKTools.AppendStyleSheet(G,FCKConfig.SkinEditorCSS);B=D.__FCKToolbarSet=new FCKToolbarSet(G);B._IFrame=F;if (FCK.IECleanup) FCK.IECleanup.AddItem(D,FCKToolbarSet_Target_Cleanup);};B.CurrentInstance=FCK;if (!B.ToolbarItems) B.ToolbarItems=FCKToolbarItems;FCK.AttachToOnSelectionChange(B.RefreshItemsState);return B;};function FCK_OnBlur(A){var B=A.ToolbarSet;if (B.CurrentInstance==A) B.Disable();};function FCK_OnFocus(A){var B=A.ToolbarSet;var C=A||FCK;B.CurrentInstance.FocusManager.RemoveWindow(B._IFrame.contentWindow);B.CurrentInstance=C;C.FocusManager.AddWindow(B._IFrame.contentWindow,true);B.Enable();};function FCKToolbarSet_Cleanup(){this._TargetElement=null;this._IFrame=null;};function FCKToolbarSet_Target_Cleanup(){this.__FCKToolbarSet=null;};var FCKToolbarSet=function(A){this._Document=A;this._TargetElement=A.getElementById('xToolbar');var B=A.getElementById('xExpandHandle');var C=A.getElementById('xCollapseHandle');B.title=FCKLang.ToolbarExpand;FCKTools.AddEventListener(B,'click',FCKToolbarSet_Expand_OnClick);C.title=FCKLang.ToolbarCollapse;FCKTools.AddEventListener(C,'click',FCKToolbarSet_Collapse_OnClick);if (!FCKConfig.ToolbarCanCollapse||FCKConfig.ToolbarStartExpanded) this.Expand();else this.Collapse();C.style.display=FCKConfig.ToolbarCanCollapse?'':'none';if (FCKConfig.ToolbarCanCollapse) C.style.display='';else A.getElementById('xTBLeftBorder').style.display='';this.Toolbars=[];this.IsLoaded=false;if (FCK.IECleanup) FCK.IECleanup.AddItem(this,FCKToolbarSet_Cleanup);};function FCKToolbarSet_Expand_OnClick(){FCK.ToolbarSet.Expand();};function FCKToolbarSet_Collapse_OnClick(){FCK.ToolbarSet.Collapse();};FCKToolbarSet.prototype.Expand=function(){this._ChangeVisibility(false);};FCKToolbarSet.prototype.Collapse=function(){this._ChangeVisibility(true);};FCKToolbarSet.prototype._ChangeVisibility=function(A){this._Document.getElementById('xCollapsed').style.display=A?'':'none';this._Document.getElementById('xExpanded').style.display=A?'none':'';if (FCKBrowserInfo.IsGecko){FCKTools.RunFunction(window.onresize);}};FCKToolbarSet.prototype.Load=function(A){this.Name=A;this.Items=[];this.ItemsWysiwygOnly=[];this.ItemsContextSensitive=[];this._TargetElement.innerHTML='';var B=FCKConfig.ToolbarSets[A];if (!B){alert(FCKLang.UnknownToolbarSet.replace(/%1/g,A));return;};this.Toolbars=[];for (var x=0;x<B.length;x++){var C=B[x];if (!C) continue;var D;if (typeof(C)=='string'){if (C=='/') D=new FCKToolbarBreak();}else{D=new FCKToolbar();for (var j=0;j<C.length;j++){var E=C[j];if (E=='-') D.AddSeparator();else{var F=FCKToolbarItems.GetItem(E);if (F){D.AddItem(F);this.Items.push(F);if (!F.SourceView) this.ItemsWysiwygOnly.push(F);if (F.ContextSensitive) this.ItemsContextSensitive.push(F);}}}};D.Create(this._TargetElement);this.Toolbars[this.Toolbars.length]=D;};FCKTools.DisableSelection(this._Document.getElementById('xCollapseHandle').parentNode);if (FCK.Status!=2) FCK.Events.AttachEvent('OnStatusChange',this.RefreshModeState);else this.RefreshModeState();this.IsLoaded=true;this.IsEnabled=true;FCKTools.RunFunction(this.OnLoad);};FCKToolbarSet.prototype.Enable=function(){if (this.IsEnabled) return;this.IsEnabled=true;var A=this.Items;for (var i=0;i<A.length;i++) A[i].RefreshState();};FCKToolbarSet.prototype.Disable=function(){if (!this.IsEnabled) return;this.IsEnabled=false;var A=this.Items;for (var i=0;i<A.length;i++) A[i].Disable();};FCKToolbarSet.prototype.RefreshModeState=function(A){if (FCK.Status!=2) return;var B=A?A.ToolbarSet:this;var C=B.ItemsWysiwygOnly;if (FCK.EditMode==0){for (var i=0;i<C.length;i++) C[i].Enable();B.RefreshItemsState(A);}else{B.RefreshItemsState(A);for (var j=0;j<C.length;j++) C[j].Disable();}};FCKToolbarSet.prototype.RefreshItemsState=function(A){var B=(A?A.ToolbarSet:this).ItemsContextSensitive;for (var i=0;i<B.length;i++) B[i].RefreshState();};
+var FCKDialog=(function(){var A;var B;var C;var D=window.parent;while (D.parent&&D.parent!=D){try{if (D.parent.document.domain!=document.domain) break;if (D.parent.document.getElementsByTagName('frameset').length>0) break;}catch (e){break;};D=D.parent;};var E=D.document;var F=function(){if (!B) B=FCKConfig.FloatingPanelsZIndex+999;return++B;};var G=function(){if (!C) return;var H=FCKTools.IsStrictMode(E)?E.documentElement:E.body;FCKDomTools.SetElementStyles(C,{'width':Math.max(H.scrollWidth,H.clientWidth,E.scrollWidth||0)-1+'px','height':Math.max(H.scrollHeight,H.clientHeight,E.scrollHeight||0)-1+'px'});};return {OpenDialog:function(dialogName,dialogTitle,dialogPage,width,height,customValue,parentWindow,resizable){if (!A) this.DisplayMainCover();var I={Title:dialogTitle,Page:dialogPage,Editor:window,CustomValue:customValue,TopWindow:D};FCK.ToolbarSet.CurrentInstance.Selection.Save();var J=FCKTools.GetViewPaneSize(D);var K={ 'X':0,'Y':0 };var L=FCKBrowserInfo.IsIE&&(!FCKBrowserInfo.IsIE7||!FCKTools.IsStrictMode(D.document));if (L) K=FCKTools.GetScrollPosition(D);var M=Math.max(K.Y+(J.Height-height-20)/2,0);var N=Math.max(K.X+(J.Width-width-20)/2,0);var O=E.createElement('iframe');FCKTools.ResetStyles(O);O.src=FCKConfig.BasePath+'fckdialog.html';O.frameBorder=0;O.allowTransparency=true;FCKDomTools.SetElementStyles(O,{'position':(L)?'absolute':'fixed','top':M+'px','left':N+'px','width':width+'px','height':height+'px','zIndex':F()});O._DialogArguments=I;E.body.appendChild(O);O._ParentDialog=A;A=O;},OnDialogClose:function(dialogWindow){var O=dialogWindow.frameElement;FCKDomTools.RemoveNode(O);if (O._ParentDialog){A=O._ParentDialog;O._ParentDialog.contentWindow.SetEnabled(true);}else{if (!FCKBrowserInfo.IsIE) FCK.Focus();this.HideMainCover();setTimeout(function(){ A=null;},0);FCK.ToolbarSet.CurrentInstance.Selection.Release();}},DisplayMainCover:function(){C=E.createElement('div');FCKTools.ResetStyles(C);FCKDomTools.SetElementStyles(C,{'position':'absolute','zIndex':F(),'top':'0px','left':'0px','backgroundColor':FCKConfig.BackgroundBlockerColor});FCKDomTools.SetOpacity(C,FCKConfig.BackgroundBlockerOpacity);if (FCKBrowserInfo.IsIE&&!FCKBrowserInfo.IsIE7){var Q=E.createElement('iframe');FCKTools.ResetStyles(Q);Q.hideFocus=true;Q.frameBorder=0;Q.src=FCKTools.GetVoidUrl();FCKDomTools.SetElementStyles(Q,{'width':'100%','height':'100%','position':'absolute','left':'0px','top':'0px','filter':'progid:DXImageTransform.Microsoft.Alpha(opacity=0)'});C.appendChild(Q);};FCKTools.AddEventListener(D,'resize',G);G();E.body.appendChild(C);FCKFocusManager.Lock();var R=FCK.ToolbarSet.CurrentInstance.GetInstanceObject('frameElement');R._fck_originalTabIndex=R.tabIndex;R.tabIndex=-1;},HideMainCover:function(){FCKDomTools.RemoveNode(C);FCKFocusManager.Unlock();var R=FCK.ToolbarSet.CurrentInstance.GetInstanceObject('frameElement');R.tabIndex=R._fck_originalTabIndex;FCKDomTools.ClearElementJSProperty(R,'_fck_originalTabIndex');},GetCover:function(){return C;}};})();
+var FCKMenuItem=function(A,B,C,D,E,F){this.Name=B;this.Label=C||B;this.IsDisabled=E;this.Icon=new FCKIcon(D);this.SubMenu=new FCKMenuBlockPanel();this.SubMenu.Parent=A;this.SubMenu.OnClick=FCKTools.CreateEventListener(FCKMenuItem_SubMenu_OnClick,this);this.CustomData=F;if (FCK.IECleanup) FCK.IECleanup.AddItem(this,FCKMenuItem_Cleanup);};FCKMenuItem.prototype.AddItem=function(A,B,C,D,E){this.HasSubMenu=true;return this.SubMenu.AddItem(A,B,C,D,E);};FCKMenuItem.prototype.AddSeparator=function(){this.SubMenu.AddSeparator();};FCKMenuItem.prototype.Create=function(A){var B=this.HasSubMenu;var C=FCKTools.GetElementDocument(A);var r=this.MainElement=A.insertRow(-1);r.className=this.IsDisabled?'MN_Item_Disabled':'MN_Item';if (!this.IsDisabled){FCKTools.AddEventListenerEx(r,'mouseover',FCKMenuItem_OnMouseOver,[this]);FCKTools.AddEventListenerEx(r,'click',FCKMenuItem_OnClick,[this]);if (!B) FCKTools.AddEventListenerEx(r,'mouseout',FCKMenuItem_OnMouseOut,[this]);};var D=r.insertCell(-1);D.className='MN_Icon';D.appendChild(this.Icon.CreateIconElement(C));D=r.insertCell(-1);D.className='MN_Label';D.noWrap=true;D.appendChild(C.createTextNode(this.Label));D=r.insertCell(-1);if (B){D.className='MN_Arrow';var E=D.appendChild(C.createElement('IMG'));E.src=FCK_IMAGES_PATH+'arrow_'+FCKLang.Dir+'.gif';E.width=4;E.height=7;this.SubMenu.Create();this.SubMenu.Panel.OnHide=FCKTools.CreateEventListener(FCKMenuItem_SubMenu_OnHide,this);}};FCKMenuItem.prototype.Activate=function(){this.MainElement.className='MN_Item_Over';if (this.HasSubMenu){this.SubMenu.Show(this.MainElement.offsetWidth+2,-2,this.MainElement);};FCKTools.RunFunction(this.OnActivate,this);};FCKMenuItem.prototype.Deactivate=function(){this.MainElement.className='MN_Item';if (this.HasSubMenu) this.SubMenu.Hide();};function FCKMenuItem_SubMenu_OnClick(A,B){FCKTools.RunFunction(B.OnClick,B,[A]);};function FCKMenuItem_SubMenu_OnHide(A){A.Deactivate();};function FCKMenuItem_OnClick(A,B){if (B.HasSubMenu) B.Activate();else{B.Deactivate();FCKTools.RunFunction(B.OnClick,B,[B]);}};function FCKMenuItem_OnMouseOver(A,B){B.Activate();};function FCKMenuItem_OnMouseOut(A,B){B.Deactivate();};function FCKMenuItem_Cleanup(){this.MainElement=null;};
+var FCKMenuBlock=function(){this._Items=[];};FCKMenuBlock.prototype.Count=function(){return this._Items.length;};FCKMenuBlock.prototype.AddItem=function(A,B,C,D,E){var F=new FCKMenuItem(this,A,B,C,D,E);F.OnClick=FCKTools.CreateEventListener(FCKMenuBlock_Item_OnClick,this);F.OnActivate=FCKTools.CreateEventListener(FCKMenuBlock_Item_OnActivate,this);this._Items.push(F);return F;};FCKMenuBlock.prototype.AddSeparator=function(){this._Items.push(new FCKMenuSeparator());};FCKMenuBlock.prototype.RemoveAllItems=function(){this._Items=[];var A=this._ItemsTable;if (A){while (A.rows.length>0) A.deleteRow(0);}};FCKMenuBlock.prototype.Create=function(A){if (!this._ItemsTable){if (FCK.IECleanup) FCK.IECleanup.AddItem(this,FCKMenuBlock_Cleanup);this._Window=FCKTools.GetElementWindow(A);var B=FCKTools.GetElementDocument(A);var C=A.appendChild(B.createElement('table'));C.cellPadding=0;C.cellSpacing=0;FCKTools.DisableSelection(C);var D=C.insertRow(-1).insertCell(-1);D.className='MN_Menu';var E=this._ItemsTable=D.appendChild(B.createElement('table'));E.cellPadding=0;E.cellSpacing=0;};for (var i=0;i<this._Items.length;i++) this._Items[i].Create(this._ItemsTable);};function FCKMenuBlock_Item_OnClick(A,B){if (B.Hide) B.Hide();FCKTools.RunFunction(B.OnClick,B,[A]);};function FCKMenuBlock_Item_OnActivate(A){var B=A._ActiveItem;if (B&&B!=this){if (!FCKBrowserInfo.IsIE&&B.HasSubMenu&&!this.HasSubMenu){A._Window.focus();A.Panel.HasFocus=true;};B.Deactivate();};A._ActiveItem=this;};function FCKMenuBlock_Cleanup(){this._Window=null;this._ItemsTable=null;};var FCKMenuSeparator=function(){};FCKMenuSeparator.prototype.Create=function(A){var B=FCKTools.GetElementDocument(A);var r=A.insertRow(-1);var C=r.insertCell(-1);C.className='MN_Separator MN_Icon';C=r.insertCell(-1);C.className='MN_Separator';C.appendChild(B.createElement('DIV')).className='MN_Separator_Line';C=r.insertCell(-1);C.className='MN_Separator';C.appendChild(B.createElement('DIV')).className='MN_Separator_Line';};
+var FCKMenuBlockPanel=function(){FCKMenuBlock.call(this);};FCKMenuBlockPanel.prototype=new FCKMenuBlock();FCKMenuBlockPanel.prototype.Create=function(){var A=this.Panel=(this.Parent&&this.Parent.Panel?this.Parent.Panel.CreateChildPanel():new FCKPanel());A.AppendStyleSheet(FCKConfig.SkinEditorCSS);FCKMenuBlock.prototype.Create.call(this,A.MainNode);};FCKMenuBlockPanel.prototype.Show=function(x,y,A){if (!this.Panel.CheckIsOpened()) this.Panel.Show(x,y,A);};FCKMenuBlockPanel.prototype.Hide=function(){if (this.Panel.CheckIsOpened()) this.Panel.Hide();};
+var FCKContextMenu=function(A,B){this.CtrlDisable=false;var C=this._Panel=new FCKPanel(A);C.AppendStyleSheet(FCKConfig.SkinEditorCSS);C.IsContextMenu=true;if (FCKBrowserInfo.IsGecko) C.Document.addEventListener('draggesture',function(e) {e.preventDefault();return false;},true);var D=this._MenuBlock=new FCKMenuBlock();D.Panel=C;D.OnClick=FCKTools.CreateEventListener(FCKContextMenu_MenuBlock_OnClick,this);this._Redraw=true;};FCKContextMenu.prototype.SetMouseClickWindow=function(A){if (!FCKBrowserInfo.IsIE){this._Document=A.document;if (FCKBrowserInfo.IsOpera&&!('oncontextmenu' in document.createElement('foo'))){this._Document.addEventListener('mousedown',FCKContextMenu_Document_OnMouseDown,false);this._Document.addEventListener('mouseup',FCKContextMenu_Document_OnMouseUp,false);};this._Document.addEventListener('contextmenu',FCKContextMenu_Document_OnContextMenu,false);}};FCKContextMenu.prototype.AddItem=function(A,B,C,D,E){var F=this._MenuBlock.AddItem(A,B,C,D,E);this._Redraw=true;return F;};FCKContextMenu.prototype.AddSeparator=function(){this._MenuBlock.AddSeparator();this._Redraw=true;};FCKContextMenu.prototype.RemoveAllItems=function(){this._MenuBlock.RemoveAllItems();this._Redraw=true;};FCKContextMenu.prototype.AttachToElement=function(A){if (FCKBrowserInfo.IsIE) FCKTools.AddEventListenerEx(A,'contextmenu',FCKContextMenu_AttachedElement_OnContextMenu,this);else A._FCKContextMenu=this;};function FCKContextMenu_Document_OnContextMenu(e){var A=e.target;while (A){if (A._FCKContextMenu){if (A._FCKContextMenu.CtrlDisable&&(e.ctrlKey||e.metaKey)) return true;FCKTools.CancelEvent(e);FCKContextMenu_AttachedElement_OnContextMenu(e,A._FCKContextMenu,A);return false;};A=A.parentNode;};return true;};var FCKContextMenu_OverrideButton;function FCKContextMenu_Document_OnMouseDown(e){if(!e||e.button!=2) return false;var A=e.target;while (A){if (A._FCKContextMenu){if (A._FCKContextMenu.CtrlDisable&&(e.ctrlKey||e.metaKey)) return true;var B=FCKContextMenu_OverrideButton;if(!B){var C=FCKTools.GetElementDocument(e.target);B=FCKContextMenu_OverrideButton=C.createElement('input');B.type='button';var D=C.createElement('p');C.body.appendChild(D);D.appendChild(B);};B.style.cssText='position:absolute;top:'+(e.clientY-2)+'px;left:'+(e.clientX-2)+'px;width:5px;height:5px;opacity:0.01';};A=A.parentNode;};return false;};function FCKContextMenu_Document_OnMouseUp(e){var A=FCKContextMenu_OverrideButton;if (A){var B=A.parentNode;B.parentNode.removeChild(B);FCKContextMenu_OverrideButton=undefined;if(e&&e.button==2){FCKContextMenu_Document_OnContextMenu(e);return false;}};return true;};function FCKContextMenu_AttachedElement_OnContextMenu(A,B,C){if (B.CtrlDisable&&(A.ctrlKey||A.metaKey)) return true;var D=C||this;if (B.OnBeforeOpen) B.OnBeforeOpen.call(B,D);if (B._MenuBlock.Count()==0) return false;if (B._Redraw){B._MenuBlock.Create(B._Panel.MainNode);B._Redraw=false;};FCKTools.DisableSelection(B._Panel.Document.body);var x=0;var y=0;if (FCKBrowserInfo.IsIE){x=A.screenX;y=A.screenY;}else if (FCKBrowserInfo.IsSafari){x=A.clientX;y=A.clientY;}else{x=A.pageX;y=A.pageY;};B._Panel.Show(x,y,A.currentTarget||null);return false;};function FCKContextMenu_MenuBlock_OnClick(A,B){B._Panel.Hide();FCKTools.RunFunction(B.OnItemClick,B,A);};
+FCK.ContextMenu={};FCK.ContextMenu.Listeners=[];FCK.ContextMenu.RegisterListener=function(A){if (A) this.Listeners.push(A);};function FCK_ContextMenu_Init(){var A=FCK.ContextMenu._InnerContextMenu=new FCKContextMenu(FCKBrowserInfo.IsIE?window:window.parent,FCKLang.Dir);A.CtrlDisable=FCKConfig.BrowserContextMenuOnCtrl;A.OnBeforeOpen=FCK_ContextMenu_OnBeforeOpen;A.OnItemClick=FCK_ContextMenu_OnItemClick;var B=FCK.ContextMenu;for (var i=0;i<FCKConfig.ContextMenu.length;i++) B.RegisterListener(FCK_ContextMenu_GetListener(FCKConfig.ContextMenu[i]));};function FCK_ContextMenu_GetListener(A){switch (A){case 'Generic':return {AddItems:function(menu,tag,tagName){menu.AddItem('Cut',FCKLang.Cut,7,FCKCommands.GetCommand('Cut').GetState()==-1);menu.AddItem('Copy',FCKLang.Copy,8,FCKCommands.GetCommand('Copy').GetState()==-1);menu.AddItem('Paste',FCKLang.Paste,9,FCKCommands.GetCommand('Paste').GetState()==-1);}};case 'Table':return {AddItems:function(menu,tag,tagName){var B=(tagName=='TABLE');var C=(!B&&FCKSelection.HasAncestorNode('TABLE'));if (C){menu.AddSeparator();var D=menu.AddItem('Cell',FCKLang.CellCM);D.AddItem('TableInsertCellBefore',FCKLang.InsertCellBefore,69);D.AddItem('TableInsertCellAfter',FCKLang.InsertCellAfter,58);D.AddItem('TableDeleteCells',FCKLang.DeleteCells,59);if (FCKBrowserInfo.IsGecko) D.AddItem('TableMergeCells',FCKLang.MergeCells,60,FCKCommands.GetCommand('TableMergeCells').GetState()==-1);else{D.AddItem('TableMergeRight',FCKLang.MergeRight,60,FCKCommands.GetCommand('TableMergeRight').GetState()==-1);D.AddItem('TableMergeDown',FCKLang.MergeDown,60,FCKCommands.GetCommand('TableMergeDown').GetState()==-1);};D.AddItem('TableHorizontalSplitCell',FCKLang.HorizontalSplitCell,61,FCKCommands.GetCommand('TableHorizontalSplitCell').GetState()==-1);D.AddItem('TableVerticalSplitCell',FCKLang.VerticalSplitCell,61,FCKCommands.GetCommand('TableVerticalSplitCell').GetState()==-1);D.AddSeparator();D.AddItem('TableCellProp',FCKLang.CellProperties,57,FCKCommands.GetCommand('TableCellProp').GetState()==-1);menu.AddSeparator();D=menu.AddItem('Row',FCKLang.RowCM);D.AddItem('TableInsertRowBefore',FCKLang.InsertRowBefore,70);D.AddItem('TableInsertRowAfter',FCKLang.InsertRowAfter,62);D.AddItem('TableDeleteRows',FCKLang.DeleteRows,63);menu.AddSeparator();D=menu.AddItem('Column',FCKLang.ColumnCM);D.AddItem('TableInsertColumnBefore',FCKLang.InsertColumnBefore,71);D.AddItem('TableInsertColumnAfter',FCKLang.InsertColumnAfter,64);D.AddItem('TableDeleteColumns',FCKLang.DeleteColumns,65);};if (B||C){menu.AddSeparator();menu.AddItem('TableDelete',FCKLang.TableDelete);menu.AddItem('TableProp',FCKLang.TableProperties,39);}}};case 'Link':return {AddItems:function(menu,tag,tagName){var E=(tagName=='A'||FCKSelection.HasAncestorNode('A'));if (E||FCK.GetNamedCommandState('Unlink')!=-1){var F=FCKSelection.MoveToAncestorNode('A');var G=(F&&F.name.length>0&&F.href.length==0);if (G) return;menu.AddSeparator();if (E) menu.AddItem('Link',FCKLang.EditLink,34);menu.AddItem('Unlink',FCKLang.RemoveLink,35);}}};case 'Image':return {AddItems:function(menu,tag,tagName){if (tagName=='IMG'&&!tag.getAttribute('_fckfakelement')){menu.AddSeparator();menu.AddItem('Image',FCKLang.ImageProperties,37);}}};case 'Anchor':return {AddItems:function(menu,tag,tagName){var F=FCKSelection.MoveToAncestorNode('A');var G=(F&&F.name.length>0);if (G||(tagName=='IMG'&&tag.getAttribute('_fckanchor'))){menu.AddSeparator();menu.AddItem('Anchor',FCKLang.AnchorProp,36);menu.AddItem('AnchorDelete',FCKLang.AnchorDelete);}}};case 'Flash':return {AddItems:function(menu,tag,tagName){if (tagName=='IMG'&&tag.getAttribute('_fckflash')){menu.AddSeparator();menu.AddItem('Flash',FCKLang.FlashProperties,38);}}};case 'Form':return {AddItems:function(menu,tag,tagName){if (FCKSelection.HasAncestorNode('FORM')){menu.AddSeparator();menu.AddItem('Form',FCKLang.FormProp,48);}}};case 'Checkbox':return {AddItems:function(menu,tag,tagName){if (tagName=='INPUT'&&tag.type=='checkbox'){menu.AddSeparator();menu.AddItem('Checkbox',FCKLang.CheckboxProp,49);}}};case 'Radio':return {AddItems:function(menu,tag,tagName){if (tagName=='INPUT'&&tag.type=='radio'){menu.AddSeparator();menu.AddItem('Radio',FCKLang.RadioButtonProp,50);}}};case 'TextField':return {AddItems:function(menu,tag,tagName){if (tagName=='INPUT'&&(tag.type=='text'||tag.type=='password')){menu.AddSeparator();menu.AddItem('TextField',FCKLang.TextFieldProp,51);}}};case 'HiddenField':return {AddItems:function(menu,tag,tagName){if (tagName=='IMG'&&tag.getAttribute('_fckinputhidden')){menu.AddSeparator();menu.AddItem('HiddenField',FCKLang.HiddenFieldProp,56);}}};case 'ImageButton':return {AddItems:function(menu,tag,tagName){if (tagName=='INPUT'&&tag.type=='image'){menu.AddSeparator();menu.AddItem('ImageButton',FCKLang.ImageButtonProp,55);}}};case 'Button':return {AddItems:function(menu,tag,tagName){if (tagName=='INPUT'&&(tag.type=='button'||tag.type=='submit'||tag.type=='reset')){menu.AddSeparator();menu.AddItem('Button',FCKLang.ButtonProp,54);}}};case 'Select':return {AddItems:function(menu,tag,tagName){if (tagName=='SELECT'){menu.AddSeparator();menu.AddItem('Select',FCKLang.SelectionFieldProp,53);}}};case 'Textarea':return {AddItems:function(menu,tag,tagName){if (tagName=='TEXTAREA'){menu.AddSeparator();menu.AddItem('Textarea',FCKLang.TextareaProp,52);}}};case 'BulletedList':return {AddItems:function(menu,tag,tagName){if (FCKSelection.HasAncestorNode('UL')){menu.AddSeparator();menu.AddItem('BulletedList',FCKLang.BulletedListProp,27);}}};case 'NumberedList':return {AddItems:function(menu,tag,tagName){if (FCKSelection.HasAncestorNode('OL')){menu.AddSeparator();menu.AddItem('NumberedList',FCKLang.NumberedListProp,26);}}};};return null;};function FCK_ContextMenu_OnBeforeOpen(){FCK.Events.FireEvent('OnSelectionChange');var A,sTagName;if ((A=FCKSelection.GetSelectedElement())) sTagName=A.tagName;var B=FCK.ContextMenu._InnerContextMenu;B.RemoveAllItems();var C=FCK.ContextMenu.Listeners;for (var i=0;i<C.length;i++) C[i].AddItems(B,A,sTagName);};function FCK_ContextMenu_OnItemClick(A){FCK.Focus();FCKCommands.GetCommand(A.Name).Execute(A.CustomData);};
+var FCKHtmlIterator=function(A){this._sourceHtml=A;};FCKHtmlIterator.prototype={Next:function(){var A=this._sourceHtml;if (A==null) return null;var B=FCKRegexLib.HtmlTag.exec(A);var C=false;var D="";if (B){if (B.index>0){D=A.substr(0,B.index);this._sourceHtml=A.substr(B.index);}else{C=true;D=B[0];this._sourceHtml=A.substr(B[0].length);}}else{D=A;this._sourceHtml=null;};return { 'isTag':C,'value':D };},Each:function(A){var B;while ((B=this.Next())) A(B.isTag,B.value);}};var FCKHtmlIterator=function(A){this._sourceHtml=A;};FCKHtmlIterator.prototype={Next:function(){var A=this._sourceHtml;if (A==null) return null;var B=FCKRegexLib.HtmlTag.exec(A);var C=false;var D="";if (B){if (B.index>0){D=A.substr(0,B.index);this._sourceHtml=A.substr(B.index);}else{C=true;D=B[0];this._sourceHtml=A.substr(B[0].length);}}else{D=A;this._sourceHtml=null;};return { 'isTag':C,'value':D };},Each:function(A){var B;while ((B=this.Next())) A(B.isTag,B.value);}};
+var FCKPlugin=function(A,B,C){this.Name=A;this.BasePath=C?C:FCKConfig.PluginsPath;this.Path=this.BasePath+A+'/';if (!B||B.length==0) this.AvailableLangs=[];else this.AvailableLangs=B.split(',');};FCKPlugin.prototype.Load=function(){if (this.AvailableLangs.length>0){var A;if (this.AvailableLangs.IndexOf(FCKLanguageManager.ActiveLanguage.Code)>=0) A=FCKLanguageManager.ActiveLanguage.Code;else A=this.AvailableLangs[0];LoadScript(this.Path+'lang/'+A+'.js');};LoadScript(this.Path+'fckplugin.js');};
+var FCKPlugins=FCK.Plugins={};FCKPlugins.ItemsCount=0;FCKPlugins.Items={};FCKPlugins.Load=function(){var A=FCKPlugins.Items;for (var i=0;i<FCKConfig.Plugins.Items.length;i++){var B=FCKConfig.Plugins.Items[i];var C=A[B[0]]=new FCKPlugin(B[0],B[1],B[2]);FCKPlugins.ItemsCount++;};for (var s in A) A[s].Load();FCKPlugins.Load=null;};


Property changes on: announcement/trunk/src/main/webapp/fckeditor/editor/js/fckeditorcode_ie.js
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/webapp/fckeditor/editor/lang/_translationstatus.txt
===================================================================
--- announcement/trunk/src/main/webapp/fckeditor/editor/lang/_translationstatus.txt	                        (rev 0)
+++ announcement/trunk/src/main/webapp/fckeditor/editor/lang/_translationstatus.txt	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,78 @@
+/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2008 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * Translations Status.
+ */
+
+af.js      Found: 396   Missing: 15
+ar.js      Found: 411   Missing: 0
+bg.js      Found: 373   Missing: 38
+bn.js      Found: 380   Missing: 31
+bs.js      Found: 226   Missing: 185
+ca.js      Found: 411   Missing: 0
+cs.js      Found: 411   Missing: 0
+da.js      Found: 381   Missing: 30
+de.js      Found: 411   Missing: 0
+el.js      Found: 396   Missing: 15
+en-au.js   Found: 411   Missing: 0
+en-ca.js   Found: 411   Missing: 0
+en-uk.js   Found: 411   Missing: 0
+eo.js      Found: 346   Missing: 65
+es.js      Found: 411   Missing: 0
+et.js      Found: 411   Missing: 0
+eu.js      Found: 411   Missing: 0
+fa.js      Found: 397   Missing: 14
+fi.js      Found: 411   Missing: 0
+fo.js      Found: 396   Missing: 15
+fr-ca.js   Found: 411   Missing: 0
+fr.js      Found: 411   Missing: 0
+gl.js      Found: 381   Missing: 30
+gu.js      Found: 411   Missing: 0
+he.js      Found: 411   Missing: 0
+hi.js      Found: 411   Missing: 0
+hr.js      Found: 411   Missing: 0
+hu.js      Found: 411   Missing: 0
+it.js      Found: 410   Missing: 1
+ja.js      Found: 411   Missing: 0
+km.js      Found: 370   Missing: 41
+ko.js      Found: 390   Missing: 21
+lt.js      Found: 376   Missing: 35
+lv.js      Found: 381   Missing: 30
+mn.js      Found: 411   Missing: 0
+ms.js      Found: 352   Missing: 59
+nb.js      Found: 395   Missing: 16
+nl.js      Found: 411   Missing: 0
+no.js      Found: 395   Missing: 16
+pl.js      Found: 411   Missing: 0
+pt-br.js   Found: 411   Missing: 0
+pt.js      Found: 381   Missing: 30
+ro.js      Found: 410   Missing: 1
+ru.js      Found: 411   Missing: 0
+sk.js      Found: 396   Missing: 15
+sl.js      Found: 411   Missing: 0
+sr-latn.js Found: 368   Missing: 43
+sr.js      Found: 368   Missing: 43
+sv.js      Found: 396   Missing: 15
+th.js      Found: 393   Missing: 18
+tr.js      Found: 396   Missing: 15
+uk.js      Found: 397   Missing: 14
+vi.js      Found: 396   Missing: 15
+zh-cn.js   Found: 411   Missing: 0
+zh.js      Found: 411   Missing: 0


Property changes on: announcement/trunk/src/main/webapp/fckeditor/editor/lang/_translationstatus.txt
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/webapp/fckeditor/editor/lang/af.js
===================================================================
--- announcement/trunk/src/main/webapp/fckeditor/editor/lang/af.js	                        (rev 0)
+++ announcement/trunk/src/main/webapp/fckeditor/editor/lang/af.js	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,515 @@
+/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2008 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * Afrikaans language file.
+ */
+
+var FCKLang =
+{
+// Language direction : "ltr" (left to right) or "rtl" (right to left).
+Dir					: "ltr",
+
+ToolbarCollapse		: "Vou Gereedskaps balk toe",
+ToolbarExpand		: "Vou Gereedskaps balk oop",
+
+// Toolbar Items and Context Menu
+Save				: "Bewaar",
+NewPage				: "Nuwe Bladsy",
+Preview				: "Voorskou",
+Cut					: "Uitsny ",
+Copy				: "Kopieer",
+Paste				: "Byvoeg",
+PasteText			: "Slegs inhoud byvoeg",
+PasteWord			: "Van Word af byvoeg",
+Print				: "Druk",
+SelectAll			: "Selekteer alles",
+RemoveFormat		: "Formaat verweider",
+InsertLinkLbl		: "Skakel",
+InsertLink			: "Skakel byvoeg/verander",
+RemoveLink			: "Skakel verweider",
+Anchor				: "Plekhouer byvoeg/verander",
+AnchorDelete		: "Remove Anchor",	//MISSING
+InsertImageLbl		: "Beeld",
+InsertImage			: "Beeld byvoeg/verander",
+InsertFlashLbl		: "Flash",
+InsertFlash			: "Flash byvoeg/verander",
+InsertTableLbl		: "Tabel",
+InsertTable			: "Tabel byvoeg/verander",
+InsertLineLbl		: "Lyn",
+InsertLine			: "Horisontale lyn byvoeg",
+InsertSpecialCharLbl: "Spesiaale karakter",
+InsertSpecialChar	: "Spesiaale Karakter byvoeg",
+InsertSmileyLbl		: "Smiley",
+InsertSmiley		: "Smiley byvoeg",
+About				: "Meer oor FCKeditor",
+Bold				: "Vet",
+Italic				: "Skuins",
+Underline			: "Onderstreep",
+StrikeThrough		: "Gestreik",
+Subscript			: "Subscript",
+Superscript			: "Superscript",
+LeftJustify			: "Links rig",
+CenterJustify		: "Rig Middel",
+RightJustify		: "Regs rig",
+BlockJustify		: "Blok paradeer",
+DecreaseIndent		: "Paradeering verkort",
+IncreaseIndent		: "Paradeering verleng",
+Blockquote			: "Blockquote",	//MISSING
+Undo				: "Ont-skep",
+Redo				: "Her-skep",
+NumberedListLbl		: "Genommerde lys",
+NumberedList		: "Genommerde lys byvoeg/verweider",
+BulletedListLbl		: "Gepunkte lys",
+BulletedList		: "Gepunkte lys byvoeg/verweider",
+ShowTableBorders	: "Wys tabel kante",
+ShowDetails			: "Wys informasie",
+Style				: "Styl",
+FontFormat			: "Karakter formaat",
+Font				: "Karakters",
+FontSize			: "Karakter grote",
+TextColor			: "Karakter kleur",
+BGColor				: "Agtergrond kleur",
+Source				: "Source",
+Find				: "Vind",
+Replace				: "Vervang",
+SpellCheck			: "Spelling nagaan",
+UniversalKeyboard	: "Universeele Sleutelbord",
+PageBreakLbl		: "Bladsy breek",
+PageBreak			: "Bladsy breek byvoeg",
+
+Form			: "Form",
+Checkbox		: "HakBox",
+RadioButton		: "PuntBox",
+TextField		: "Byvoegbare karakter strook",
+Textarea		: "Byvoegbare karakter area",
+HiddenField		: "Blinde strook",
+Button			: "Knop",
+SelectionField	: "Opklapbare keuse strook",
+ImageButton		: "Beeld knop",
+
+FitWindow		: "Maksimaliseer venster grote",
+ShowBlocks		: "Show Blocks",	//MISSING
+
+// Context Menu
+EditLink			: "Verander skakel",
+CellCM				: "Cell",
+RowCM				: "Ry",
+ColumnCM			: "Kolom",
+InsertRowAfter		: "Insert Row After",	//MISSING
+InsertRowBefore		: "Insert Row Before",	//MISSING
+DeleteRows			: "Ry verweider",
+InsertColumnAfter	: "Insert Column After",	//MISSING
+InsertColumnBefore	: "Insert Column Before",	//MISSING
+DeleteColumns		: "Kolom verweider",
+InsertCellAfter		: "Insert Cell After",	//MISSING
+InsertCellBefore	: "Insert Cell Before",	//MISSING
+DeleteCells			: "Cell verweider",
+MergeCells			: "Cell verenig",
+MergeRight			: "Merge Right",	//MISSING
+MergeDown			: "Merge Down",	//MISSING
+HorizontalSplitCell	: "Split Cell Horizontally",	//MISSING
+VerticalSplitCell	: "Split Cell Vertically",	//MISSING
+TableDelete			: "Tabel verweider",
+CellProperties		: "Cell eienskappe",
+TableProperties		: "Tabel eienskappe",
+ImageProperties		: "Beeld eienskappe",
+FlashProperties		: "Flash eienskappe",
+
+AnchorProp			: "Plekhouer eienskappe",
+ButtonProp			: "Knop eienskappe",
+CheckboxProp		: "HakBox eienskappe",
+HiddenFieldProp		: "Blinde strook eienskappe",
+RadioButtonProp		: "PuntBox eienskappe",
+ImageButtonProp		: "Beeld knop eienskappe",
+TextFieldProp		: "Karakter strook eienskappe",
+SelectionFieldProp	: "Opklapbare keuse strook eienskappe",
+TextareaProp		: "Karakter area eienskappe",
+FormProp			: "Form eienskappe",
+
+FontFormats			: "Normaal;Geformateerd;Adres;Opskrif 1;Opskrif 2;Opskrif 3;Opskrif 4;Opskrif 5;Opskrif 6;Normaal (DIV)",
+
+// Alerts and Messages
+ProcessingXHTML		: "XHTML word verarbeit. U geduld asseblief...",
+Done				: "Kompleet",
+PasteWordConfirm	: "Die informasie wat U probeer byvoeg is warskynlik van Word. Wil U dit reinig voor die byvoeging?",
+NotCompatiblePaste	: "Die instruksie is beskikbaar vir Internet Explorer weergawe 5.5 of hor. Wil U dir byvoeg sonder reiniging?",
+UnknownToolbarItem	: "Unbekende gereedskaps balk item \"%1\"",
+UnknownCommand		: "Unbekende instruksie naam \"%1\"",
+NotImplemented		: "Instruksie is nie geimplementeer nie.",
+UnknownToolbarSet	: "Gereedskaps balk \"%1\" bestaan nie",
+NoActiveX			: "U browser sekuriteit instellings kan die funksies van die editor behinder. U moet die opsie \"Run ActiveX controls and plug-ins\" aktiveer. U ondervinding mag problematies geskiet of sekere funksionaliteit mag verhinder word.",
+BrowseServerBlocked : "Die vorraad venster word geblok! Verseker asseblief dat U die \"popup blocker\" instelling verander.",
+DialogBlocked		: "Die dialoog venster vir verdere informasie word geblok. De-aktiveer asseblief die \"popup blocker\" instellings wat dit behinder.",
+
+// Dialogs
+DlgBtnOK			: "OK",
+DlgBtnCancel		: "Kanseleer",
+DlgBtnClose			: "Sluit",
+DlgBtnBrowseServer	: "Server deurblaai",
+DlgAdvancedTag		: "Ingewikkeld",
+DlgOpOther			: "<Ander>",
+DlgInfoTab			: "Info",
+DlgAlertUrl			: "Voeg asseblief die URL in",
+
+// General Dialogs Labels
+DlgGenNotSet		: "<geen instelling>",
+DlgGenId			: "Id",
+DlgGenLangDir		: "Taal rigting",
+DlgGenLangDirLtr	: "Links na regs (LTR)",
+DlgGenLangDirRtl	: "Regs na links (RTL)",
+DlgGenLangCode		: "Taal kode",
+DlgGenAccessKey		: "Toegang sleutel",
+DlgGenName			: "Naam",
+DlgGenTabIndex		: "Tab Index",
+DlgGenLongDescr		: "Lang beskreiwing URL",
+DlgGenClass			: "Skakel Tiepe",
+DlgGenTitle			: "Voorbeveelings Titel",
+DlgGenContType		: "Voorbeveelings inhoud soort",
+DlgGenLinkCharset	: "Geskakelde voorbeeld karakterstel",
+DlgGenStyle			: "Styl",
+
+// Image Dialog
+DlgImgTitle			: "Beeld eienskappe",
+DlgImgInfoTab		: "Beeld informasie",
+DlgImgBtnUpload		: "Stuur dit na die Server",
+DlgImgURL			: "URL",
+DlgImgUpload		: "Uplaai",
+DlgImgAlt			: "Alternatiewe beskrywing",
+DlgImgWidth			: "Weidte",
+DlgImgHeight		: "Hoogde",
+DlgImgLockRatio		: "Behou preporsie",
+DlgBtnResetSize		: "Herstel groote",
+DlgImgBorder		: "Kant",
+DlgImgHSpace		: "HSpasie",
+DlgImgVSpace		: "VSpasie",
+DlgImgAlign			: "Paradeer",
+DlgImgAlignLeft		: "Links",
+DlgImgAlignAbsBottom: "Abs Onder",
+DlgImgAlignAbsMiddle: "Abs Middel",
+DlgImgAlignBaseline	: "Baseline",
+DlgImgAlignBottom	: "Onder",
+DlgImgAlignMiddle	: "Middel",
+DlgImgAlignRight	: "Regs",
+DlgImgAlignTextTop	: "Text Bo",
+DlgImgAlignTop		: "Bo",
+DlgImgPreview		: "Voorskou",
+DlgImgAlertUrl		: "Voeg asseblief Beeld URL in.",
+DlgImgLinkTab		: "Skakel",
+
+// Flash Dialog
+DlgFlashTitle		: "Flash eienskappe",
+DlgFlashChkPlay		: "Automaties Speel",
+DlgFlashChkLoop		: "Herhaling",
+DlgFlashChkMenu		: "Laat Flash Menu toe",
+DlgFlashScale		: "Scale",
+DlgFlashScaleAll	: "Wys alles",
+DlgFlashScaleNoBorder	: "Geen kante",
+DlgFlashScaleFit	: "Presiese pas",
+
+// Link Dialog
+DlgLnkWindowTitle	: "Skakel",
+DlgLnkInfoTab		: "Skakel informasie",
+DlgLnkTargetTab		: "Mikpunt",
+
+DlgLnkType			: "Skakel soort",
+DlgLnkTypeURL		: "URL",
+DlgLnkTypeAnchor	: "Skakel na plekhouers in text",
+DlgLnkTypeEMail		: "E-Mail",
+DlgLnkProto			: "Protokol",
+DlgLnkProtoOther	: "<ander>",
+DlgLnkURL			: "URL",
+DlgLnkAnchorSel		: "Kies 'n plekhouer",
+DlgLnkAnchorByName	: "Volgens plekhouer naam",
+DlgLnkAnchorById	: "Volgens element Id",
+DlgLnkNoAnchors		: "(Geen plekhouers beskikbaar in dokument}",
+DlgLnkEMail			: "E-Mail Adres",
+DlgLnkEMailSubject	: "Boodskap Opskrif",
+DlgLnkEMailBody		: "Boodskap Inhoud",
+DlgLnkUpload		: "Oplaai",
+DlgLnkBtnUpload		: "Stuur na Server",
+
+DlgLnkTarget		: "Mikpunt",
+DlgLnkTargetFrame	: "<raam>",
+DlgLnkTargetPopup	: "<popup venster>",
+DlgLnkTargetBlank	: "Nuwe Venster (_blank)",
+DlgLnkTargetParent	: "Vorige Venster (_parent)",
+DlgLnkTargetSelf	: "Selfde Venster (_self)",
+DlgLnkTargetTop		: "Boonste Venster (_top)",
+DlgLnkTargetFrameName	: "Mikpunt Venster Naam",
+DlgLnkPopWinName	: "Popup Venster Naam",
+DlgLnkPopWinFeat	: "Popup Venster Geaartheid",
+DlgLnkPopResize		: "Verstelbare Groote",
+DlgLnkPopLocation	: "Adres Balk",
+DlgLnkPopMenu		: "Menu Balk",
+DlgLnkPopScroll		: "Gleibalkstuk",
+DlgLnkPopStatus		: "Status Balk",
+DlgLnkPopToolbar	: "Gereedskap Balk",
+DlgLnkPopFullScrn	: "Voll Skerm (IE)",
+DlgLnkPopDependent	: "Afhanklik (Netscape)",
+DlgLnkPopWidth		: "Weite",
+DlgLnkPopHeight		: "Hoogde",
+DlgLnkPopLeft		: "Links Posisie",
+DlgLnkPopTop		: "Bo Posisie",
+
+DlnLnkMsgNoUrl		: "Voeg asseblief die URL in",
+DlnLnkMsgNoEMail	: "Voeg asseblief die e-mail adres in",
+DlnLnkMsgNoAnchor	: "Kies asseblief 'n plekhouer",
+DlnLnkMsgInvPopName	: "Die popup naam moet begin met alphabetiese karakters sonder spasies.",
+
+// Color Dialog
+DlgColorTitle		: "Kies Kleur",
+DlgColorBtnClear	: "Maak skoon",
+DlgColorHighlight	: "Highlight",
+DlgColorSelected	: "Geselekteer",
+
+// Smiley Dialog
+DlgSmileyTitle		: "Voeg Smiley by",
+
+// Special Character Dialog
+DlgSpecialCharTitle	: "Kies spesiale karakter",
+
+// Table Dialog
+DlgTableTitle		: "Tabel eienskappe",
+DlgTableRows		: "Reie",
+DlgTableColumns		: "Kolome",
+DlgTableBorder		: "Kant groote",
+DlgTableAlign		: "Parideering",
+DlgTableAlignNotSet	: "<geen instelling>",
+DlgTableAlignLeft	: "Links",
+DlgTableAlignCenter	: "Middel",
+DlgTableAlignRight	: "Regs",
+DlgTableWidth		: "Weite",
+DlgTableWidthPx		: "pixels",
+DlgTableWidthPc		: "percent",
+DlgTableHeight		: "Hoogde",
+DlgTableCellSpace	: "Cell spasieering",
+DlgTableCellPad		: "Cell buffer",
+DlgTableCaption		: "Beskreiwing",
+DlgTableSummary		: "Opsomming",
+
+// Table Cell Dialog
+DlgCellTitle		: "Cell eienskappe",
+DlgCellWidth		: "Weite",
+DlgCellWidthPx		: "pixels",
+DlgCellWidthPc		: "percent",
+DlgCellHeight		: "Hoogde",
+DlgCellWordWrap		: "Woord Wrap",
+DlgCellWordWrapNotSet	: "<geen instelling>",
+DlgCellWordWrapYes	: "Ja",
+DlgCellWordWrapNo	: "Nee",
+DlgCellHorAlign		: "Horisontale rigting",
+DlgCellHorAlignNotSet	: "<geen instelling>",
+DlgCellHorAlignLeft	: "Links",
+DlgCellHorAlignCenter	: "Middel",
+DlgCellHorAlignRight: "Regs",
+DlgCellVerAlign		: "Vertikale rigting",
+DlgCellVerAlignNotSet	: "<geen instelling>",
+DlgCellVerAlignTop	: "Bo",
+DlgCellVerAlignMiddle	: "Middel",
+DlgCellVerAlignBottom	: "Onder",
+DlgCellVerAlignBaseline	: "Baseline",
+DlgCellRowSpan		: "Rei strekking",
+DlgCellCollSpan		: "Kolom strekking",
+DlgCellBackColor	: "Agtergrond Kleur",
+DlgCellBorderColor	: "Kant Kleur",
+DlgCellBtnSelect	: "Keuse...",
+
+// Find and Replace Dialog
+DlgFindAndReplaceTitle	: "Find and Replace",	//MISSING
+
+// Find Dialog
+DlgFindTitle		: "Vind",
+DlgFindFindBtn		: "Vind",
+DlgFindNotFoundMsg	: "Die gespesifiseerde karakters word nie gevind nie.",
+
+// Replace Dialog
+DlgReplaceTitle			: "Vervang",
+DlgReplaceFindLbl		: "Soek wat:",
+DlgReplaceReplaceLbl	: "Vervang met:",
+DlgReplaceCaseChk		: "Vergelyk karakter skryfweise",
+DlgReplaceReplaceBtn	: "Vervang",
+DlgReplaceReplAllBtn	: "Vervang alles",
+DlgReplaceWordChk		: "Vergelyk komplete woord",
+
+// Paste Operations / Dialog
+PasteErrorCut	: "U browser se sekuriteit instelling behinder die uitsny aksie. Gebruik asseblief die sleutel kombenasie(Ctrl+X).",
+PasteErrorCopy	: "U browser se sekuriteit instelling behinder die kopieerings aksie. Gebruik asseblief die sleutel kombenasie(Ctrl+C).",
+
+PasteAsText		: "Voeg slegs karakters by",
+PasteFromWord	: "Byvoeging uit Word",
+
+DlgPasteMsg2	: "Voeg asseblief die inhoud in die gegewe box by met sleutel kombenasie(<STRONG>Ctrl+V</STRONG>) en druk <STRONG>OK</STRONG>.",
+DlgPasteSec		: "Because of your browser security settings, the editor is not able to access your clipboard data directly. You are required to paste it again in this window.",	//MISSING
+DlgPasteIgnoreFont		: "Ignoreer karakter soort defenisies",
+DlgPasteRemoveStyles	: "Verweider Styl defenisies",
+
+// Color Picker
+ColorAutomatic	: "Automaties",
+ColorMoreColors	: "Meer Kleure...",
+
+// Document Properties
+DocProps		: "Dokument Eienskappe",
+
+// Anchor Dialog
+DlgAnchorTitle		: "Plekhouer Eienskappe",
+DlgAnchorName		: "Plekhouer Naam",
+DlgAnchorErrorName	: "Voltooi die plekhouer naam asseblief",
+
+// Speller Pages Dialog
+DlgSpellNotInDic		: "Nie in woordeboek nie",
+DlgSpellChangeTo		: "Verander na",
+DlgSpellBtnIgnore		: "Ignoreer",
+DlgSpellBtnIgnoreAll	: "Ignoreer na-volgende",
+DlgSpellBtnReplace		: "Vervang",
+DlgSpellBtnReplaceAll	: "vervang na-volgende",
+DlgSpellBtnUndo			: "Ont-skep",
+DlgSpellNoSuggestions	: "- Geen voorstel -",
+DlgSpellProgress		: "Spelling word beproef...",
+DlgSpellNoMispell		: "Spellproef kompleet: Geen foute",
+DlgSpellNoChanges		: "Spellproef kompleet: Geen woord veranderings",
+DlgSpellOneChange		: "Spellproef kompleet: Een woord verander",
+DlgSpellManyChanges		: "Spellproef kompleet: %1 woorde verander",
+
+IeSpellDownload			: "Geen Spellproefer geinstaleer nie. Wil U dit aflaai?",
+
+// Button Dialog
+DlgButtonText		: "Karakters (Waarde)",
+DlgButtonType		: "Soort",
+DlgButtonTypeBtn	: "Knop",
+DlgButtonTypeSbm	: "Indien",
+DlgButtonTypeRst	: "Reset",
+
+// Checkbox and Radio Button Dialogs
+DlgCheckboxName		: "Naam",
+DlgCheckboxValue	: "Waarde",
+DlgCheckboxSelected	: "Uitgekies",
+
+// Form Dialog
+DlgFormName		: "Naam",
+DlgFormAction	: "Aksie",
+DlgFormMethod	: "Metode",
+
+// Select Field Dialog
+DlgSelectName		: "Naam",
+DlgSelectValue		: "Waarde",
+DlgSelectSize		: "Grote",
+DlgSelectLines		: "lyne",
+DlgSelectChkMulti	: "Laat meerere keuses toe",
+DlgSelectOpAvail	: "Beskikbare Opsies",
+DlgSelectOpText		: "Karakters",
+DlgSelectOpValue	: "Waarde",
+DlgSelectBtnAdd		: "Byvoeg",
+DlgSelectBtnModify	: "Verander",
+DlgSelectBtnUp		: "Op",
+DlgSelectBtnDown	: "Af",
+DlgSelectBtnSetValue : "Stel as uitgekiesde waarde",
+DlgSelectBtnDelete	: "Verweider",
+
+// Textarea Dialog
+DlgTextareaName	: "Naam",
+DlgTextareaCols	: "Kolom",
+DlgTextareaRows	: "Reie",
+
+// Text Field Dialog
+DlgTextName			: "Naam",
+DlgTextValue		: "Waarde",
+DlgTextCharWidth	: "Karakter weite",
+DlgTextMaxChars		: "Maximale karakters",
+DlgTextType			: "Soort",
+DlgTextTypeText		: "Karakters",
+DlgTextTypePass		: "Wagwoord",
+
+// Hidden Field Dialog
+DlgHiddenName	: "Naam",
+DlgHiddenValue	: "Waarde",
+
+// Bulleted List Dialog
+BulletedListProp	: "Gepunkte lys eienskappe",
+NumberedListProp	: "Genommerde lys eienskappe",
+DlgLstStart			: "Begin",
+DlgLstType			: "Soort",
+DlgLstTypeCircle	: "Sirkel",
+DlgLstTypeDisc		: "Skyf",
+DlgLstTypeSquare	: "Vierkant",
+DlgLstTypeNumbers	: "Nommer (1, 2, 3)",
+DlgLstTypeLCase		: "Klein Letters (a, b, c)",
+DlgLstTypeUCase		: "Hoof Letters (A, B, C)",
+DlgLstTypeSRoman	: "Klein Romeinse nommers (i, ii, iii)",
+DlgLstTypeLRoman	: "Groot Romeinse nommers (I, II, III)",
+
+// Document Properties Dialog
+DlgDocGeneralTab	: "Algemeen",
+DlgDocBackTab		: "Agtergrond",
+DlgDocColorsTab		: "Kleure en Rante",
+DlgDocMetaTab		: "Meta Data",
+
+DlgDocPageTitle		: "Bladsy Opskrif",
+DlgDocLangDir		: "Taal rigting",
+DlgDocLangDirLTR	: "Link na Regs (LTR)",
+DlgDocLangDirRTL	: "Regs na Links (RTL)",
+DlgDocLangCode		: "Taal Kode",
+DlgDocCharSet		: "Karakterstel Kodeering",
+DlgDocCharSetCE		: "Sentraal Europa",
+DlgDocCharSetCT		: "Chinees Traditioneel (Big5)",
+DlgDocCharSetCR		: "Cyrillic",
+DlgDocCharSetGR		: "Grieks",
+DlgDocCharSetJP		: "Japanees",
+DlgDocCharSetKR		: "Koreans",
+DlgDocCharSetTR		: "Turks",
+DlgDocCharSetUN		: "Unicode (UTF-8)",
+DlgDocCharSetWE		: "Western European",
+DlgDocCharSetOther	: "Ander Karakterstel Kodeering",
+
+DlgDocDocType		: "Dokument Opskrif Soort",
+DlgDocDocTypeOther	: "Ander Dokument Opskrif Soort",
+DlgDocIncXHTML		: "Voeg XHTML verklaring by",
+DlgDocBgColor		: "Agtergrond kleur",
+DlgDocBgImage		: "Agtergrond Beeld URL",
+DlgDocBgNoScroll	: "Vasgeklemde Agtergrond",
+DlgDocCText			: "Karakters",
+DlgDocCLink			: "Skakel",
+DlgDocCVisited		: "Besoekte Skakel",
+DlgDocCActive		: "Aktiewe Skakel",
+DlgDocMargins		: "Bladsy Rante",
+DlgDocMaTop			: "Bo",
+DlgDocMaLeft		: "Links",
+DlgDocMaRight		: "Regs",
+DlgDocMaBottom		: "Onder",
+DlgDocMeIndex		: "Dokument Index Sleutelwoorde(comma verdeelt)",
+DlgDocMeDescr		: "Dokument Beskrywing",
+DlgDocMeAuthor		: "Skrywer",
+DlgDocMeCopy		: "Kopiereg",
+DlgDocPreview		: "Voorskou",
+
+// Templates Dialog
+Templates			: "Templates",
+DlgTemplatesTitle	: "Inhoud Templates",
+DlgTemplatesSelMsg	: "Kies die template om te gebruik in die editor<br>(Inhoud word vervang!):",
+DlgTemplatesLoading	: "Templates word gelaai. U geduld asseblief...",
+DlgTemplatesNoTpl	: "(Geen templates gedefinieerd)",
+DlgTemplatesReplace	: "Vervang bestaande inhoud",
+
+// About Dialog
+DlgAboutAboutTab	: "Meer oor",
+DlgAboutBrowserInfoTab	: "Blaai Informasie deur",
+DlgAboutLicenseTab	: "Lesensie",
+DlgAboutVersion		: "weergawe",
+DlgAboutInfo		: "Vir meer informasie gaan na "
+};


Property changes on: announcement/trunk/src/main/webapp/fckeditor/editor/lang/af.js
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/webapp/fckeditor/editor/lang/ar.js
===================================================================
--- announcement/trunk/src/main/webapp/fckeditor/editor/lang/ar.js	                        (rev 0)
+++ announcement/trunk/src/main/webapp/fckeditor/editor/lang/ar.js	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,515 @@
+/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2008 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * Arabic language file.
+ */
+
+var FCKLang =
+{
+// Language direction : "ltr" (left to right) or "rtl" (right to left).
+Dir					: "rtl",
+
+ToolbarCollapse		: "ضم شريط الأدوات",
+ToolbarExpand		: "تمدد شريط الأدوات",
+
+// Toolbar Items and Context Menu
+Save				: "حفظ",
+NewPage				: "صفحة جديدة",
+Preview				: "معاينة الصفحة",
+Cut					: "قص",
+Copy				: "نسخ",
+Paste				: "لصق",
+PasteText			: "لصق كنص بسيط",
+PasteWord			: "لصق من وورد",
+Print				: "طباعة",
+SelectAll			: "تحديد الكل",
+RemoveFormat		: "إزالة التنسيقات",
+InsertLinkLbl		: "رابط",
+InsertLink			: "إدراج/تحرير رابط",
+RemoveLink			: "إزالة رابط",
+Anchor				: "إدراج/تحرير إشارة مرجعية",
+AnchorDelete		: "إزالة إشارة مرجعية",
+InsertImageLbl		: "صورة",
+InsertImage			: "إدراج/تحرير صورة",
+InsertFlashLbl		: "فلاش",
+InsertFlash			: "إدراج/تحرير فيلم فلاش",
+InsertTableLbl		: "جدول",
+InsertTable			: "إدراج/تحرير جدول",
+InsertLineLbl		: "خط فاصل",
+InsertLine			: "إدراج خط فاصل",
+InsertSpecialCharLbl: "رموز",
+InsertSpecialChar	: "إدراج  رموز..ِ",
+InsertSmileyLbl		: "ابتسامات",
+InsertSmiley		: "إدراج ابتسامات",
+About				: "حول FCKeditor",
+Bold				: "غامق",
+Italic				: "مائل",
+Underline			: "تسطير",
+StrikeThrough		: "يتوسطه خط",
+Subscript			: "منخفض",
+Superscript			: "مرتفع",
+LeftJustify			: "محاذاة إلى اليسار",
+CenterJustify		: "توسيط",
+RightJustify		: "محاذاة إلى اليمين",
+BlockJustify		: "ضبط",
+DecreaseIndent		: "إنقاص المسافة البادئة",
+IncreaseIndent		: "زيادة المسافة البادئة",
+Blockquote			: "اقتباس",
+Undo				: "تراجع",
+Redo				: "إعادة",
+NumberedListLbl		: "تعداد رقمي",
+NumberedList		: "إدراج/إلغاء تعداد رقمي",
+BulletedListLbl		: "تعداد نقطي",
+BulletedList		: "إدراج/إلغاء تعداد نقطي",
+ShowTableBorders	: "معاينة حدود الجداول",
+ShowDetails			: "معاينة التفاصيل",
+Style				: "نمط",
+FontFormat			: "تنسيق",
+Font				: "خط",
+FontSize			: "حجم الخط",
+TextColor			: "لون النص",
+BGColor				: "لون الخلفية",
+Source				: "شفرة المصدر",
+Find				: "بحث",
+Replace				: "إستبدال",
+SpellCheck			: "تدقيق إملائي",
+UniversalKeyboard	: "لوحة المفاتيح العالمية",
+PageBreakLbl		: "فصل الصفحة",
+PageBreak			: "إدخال صفحة جديدة",
+
+Form			: "نموذج",
+Checkbox		: "خانة إختيار",
+RadioButton		: "زر خيار",
+TextField		: "مربع نص",
+Textarea		: "ناحية نص",
+HiddenField		: "إدراج حقل خفي",
+Button			: "زر ضغط",
+SelectionField	: "قائمة منسدلة",
+ImageButton		: "زر صورة",
+
+FitWindow		: "تكبير حجم المحرر",
+ShowBlocks		: "مخطط تفصيلي",
+
+// Context Menu
+EditLink			: "تحرير رابط",
+CellCM				: "خلية",
+RowCM				: "صف",
+ColumnCM			: "عمود",
+InsertRowAfter		: "إدراج صف بعد",
+InsertRowBefore		: "إدراج صف قبل",
+DeleteRows			: "حذف صفوف",
+InsertColumnAfter	: "إدراج عمود بعد",
+InsertColumnBefore	: "إدراج عمود قبل",
+DeleteColumns		: "حذف أعمدة",
+InsertCellAfter		: "إدراج خلية بعد",
+InsertCellBefore	: "إدراج خلية قبل",
+DeleteCells			: "حذف خلايا",
+MergeCells			: "دمج خلايا",
+MergeRight			: "دمج لليمين",
+MergeDown			: "دمج للأسفل",
+HorizontalSplitCell	: "تقسيم الخلية أفقياً",
+VerticalSplitCell	: "تقسيم الخلية عمودياً",
+TableDelete			: "حذف الجدول",
+CellProperties		: "خصائص الخلية",
+TableProperties		: "خصائص الجدول",
+ImageProperties		: "خصائص الصورة",
+FlashProperties		: "خصائص فيلم الفلاش",
+
+AnchorProp			: "خصائص الإشارة المرجعية",
+ButtonProp			: "خصائص زر الضغط",
+CheckboxProp		: "خصائص خانة الإختيار",
+HiddenFieldProp		: "خصائص الحقل الخفي",
+RadioButtonProp		: "خصائص زر الخيار",
+ImageButtonProp		: "خصائص زر الصورة",
+TextFieldProp		: "خصائص مربع النص",
+SelectionFieldProp	: "خصائص القائمة المنسدلة",
+TextareaProp		: "خصائص ناحية النص",
+FormProp			: "خصائص النموذج",
+
+FontFormats			: "عادي;منسّق;دوس;العنوان 1;العنوان  2;العنوان  3;العنوان  4;العنوان  5;العنوان  6",
+
+// Alerts and Messages
+ProcessingXHTML		: "إنتظر قليلاً ريثما تتم   معالَجة‏ XHTML. لن يستغرق طويلاً...",
+Done				: "تم",
+PasteWordConfirm	: "يبدو أن النص المراد لصقه منسوخ من برنامج وورد. هل تود تنظيفه قبل الشروع في عملية اللصق؟",
+NotCompatiblePaste	: "هذه الميزة تحتاج لمتصفح من النوعInternet Explorer إصدار 5.5 فما فوق. هل تود اللصق دون تنظيف الكود؟",
+UnknownToolbarItem	: "عنصر شريط أدوات غير معروف \"%1\"",
+UnknownCommand		: "أمر غير معروف \"%1\"",
+NotImplemented		: "لم يتم دعم هذا الأمر",
+UnknownToolbarSet	: "لم أتمكن من العثور على طقم الأدوات \"%1\" ",
+NoActiveX			: "لتأمين متصفحك يجب أن تحدد بعض مميزات المحرر. يتوجب عليك تمكين الخيار \"Run ActiveX controls and plug-ins\". قد تواجة أخطاء وتلاحظ مميزات مفقودة",
+BrowseServerBlocked : "لايمكن فتح مصدر المتصفح. فضلا يجب التأكد بأن جميع موانع النوافذ المنبثقة معطلة",
+DialogBlocked		: "لايمكن فتح نافذة الحوار . فضلا تأكد من أن  مانع النوافذ المنبثة معطل .",
+
+// Dialogs
+DlgBtnOK			: "موافق",
+DlgBtnCancel		: "إلغاء الأمر",
+DlgBtnClose			: "إغلاق",
+DlgBtnBrowseServer	: "تصفح الخادم",
+DlgAdvancedTag		: "متقدم",
+DlgOpOther			: "<أخرى>",
+DlgInfoTab			: "معلومات",
+DlgAlertUrl			: "الرجاء كتابة عنوان الإنترنت",
+
+// General Dialogs Labels
+DlgGenNotSet		: "<بدون تحديد>",
+DlgGenId			: "الرقم",
+DlgGenLangDir		: "إتجاه النص",
+DlgGenLangDirLtr	: "اليسار لليمين (LTR)",
+DlgGenLangDirRtl	: "اليمين لليسار (RTL)",
+DlgGenLangCode		: "رمز اللغة",
+DlgGenAccessKey		: "مفاتيح الإختصار",
+DlgGenName			: "الاسم",
+DlgGenTabIndex		: "الترتيب",
+DlgGenLongDescr		: "عنوان الوصف المفصّل",
+DlgGenClass			: "فئات التنسيق",
+DlgGenTitle			: "تلميح الشاشة",
+DlgGenContType		: "نوع التلميح",
+DlgGenLinkCharset	: "ترميز المادة المطلوبة",
+DlgGenStyle			: "نمط",
+
+// Image Dialog
+DlgImgTitle			: "خصائص الصورة",
+DlgImgInfoTab		: "معلومات الصورة",
+DlgImgBtnUpload		: "أرسلها للخادم",
+DlgImgURL			: "موقع الصورة",
+DlgImgUpload		: "رفع",
+DlgImgAlt			: "الوصف",
+DlgImgWidth			: "العرض",
+DlgImgHeight		: "الإرتفاع",
+DlgImgLockRatio		: "تناسق الحجم",
+DlgBtnResetSize		: "إستعادة الحجم الأصلي",
+DlgImgBorder		: "سمك الحدود",
+DlgImgHSpace		: "تباعد أفقي",
+DlgImgVSpace		: "تباعد عمودي",
+DlgImgAlign			: "محاذاة",
+DlgImgAlignLeft		: "يسار",
+DlgImgAlignAbsBottom: "أسفل النص",
+DlgImgAlignAbsMiddle: "وسط السطر",
+DlgImgAlignBaseline	: "على السطر",
+DlgImgAlignBottom	: "أسفل",
+DlgImgAlignMiddle	: "وسط",
+DlgImgAlignRight	: "يمين",
+DlgImgAlignTextTop	: "أعلى النص",
+DlgImgAlignTop		: "أعلى",
+DlgImgPreview		: "معاينة",
+DlgImgAlertUrl		: "فضلاً أكتب الموقع الذي توجد عليه هذه الصورة.",
+DlgImgLinkTab		: "الرابط",
+
+// Flash Dialog
+DlgFlashTitle		: "خصائص فيلم الفلاش",
+DlgFlashChkPlay		: "تشغيل تلقائي",
+DlgFlashChkLoop		: "تكرار",
+DlgFlashChkMenu		: "تمكين قائمة فيلم الفلاش",
+DlgFlashScale		: "الحجم",
+DlgFlashScaleAll	: "إظهار الكل",
+DlgFlashScaleNoBorder	: "بلا حدود",
+DlgFlashScaleFit	: "ضبط تام",
+
+// Link Dialog
+DlgLnkWindowTitle	: "إرتباط تشعبي",
+DlgLnkInfoTab		: "معلومات الرابط",
+DlgLnkTargetTab		: "الهدف",
+
+DlgLnkType			: "نوع الربط",
+DlgLnkTypeURL		: "العنوان",
+DlgLnkTypeAnchor	: "مكان في هذا المستند",
+DlgLnkTypeEMail		: "بريد إلكتروني",
+DlgLnkProto			: "البروتوكول",
+DlgLnkProtoOther	: "<أخرى>",
+DlgLnkURL			: "الموقع",
+DlgLnkAnchorSel		: "اختر علامة مرجعية",
+DlgLnkAnchorByName	: "حسب اسم العلامة",
+DlgLnkAnchorById	: "حسب تعريف العنصر",
+DlgLnkNoAnchors		: "(لا يوجد علامات مرجعية في هذا المستند)",
+DlgLnkEMail			: "عنوان بريد إلكتروني",
+DlgLnkEMailSubject	: "موضوع الرسالة",
+DlgLnkEMailBody		: "محتوى الرسالة",
+DlgLnkUpload		: "رفع",
+DlgLnkBtnUpload		: "أرسلها للخادم",
+
+DlgLnkTarget		: "الهدف",
+DlgLnkTargetFrame	: "<إطار>",
+DlgLnkTargetPopup	: "<نافذة منبثقة>",
+DlgLnkTargetBlank	: "إطار جديد (_blank)",
+DlgLnkTargetParent	: "الإطار الأصل (_parent)",
+DlgLnkTargetSelf	: "نفس الإطار (_self)",
+DlgLnkTargetTop		: "صفحة كاملة (_top)",
+DlgLnkTargetFrameName	: "اسم الإطار الهدف",
+DlgLnkPopWinName	: "تسمية النافذة المنبثقة",
+DlgLnkPopWinFeat	: "خصائص النافذة المنبثقة",
+DlgLnkPopResize		: "قابلة للتحجيم",
+DlgLnkPopLocation	: "شريط العنوان",
+DlgLnkPopMenu		: "القوائم الرئيسية",
+DlgLnkPopScroll		: "أشرطة التمرير",
+DlgLnkPopStatus		: "شريط الحالة السفلي",
+DlgLnkPopToolbar	: "شريط الأدوات",
+DlgLnkPopFullScrn	: "ملئ الشاشة (IE)",
+DlgLnkPopDependent	: "تابع (Netscape)",
+DlgLnkPopWidth		: "العرض",
+DlgLnkPopHeight		: "الإرتفاع",
+DlgLnkPopLeft		: "التمركز لليسار",
+DlgLnkPopTop		: "التمركز للأعلى",
+
+DlnLnkMsgNoUrl		: "فضلاً أدخل عنوان الموقع الذي يشير إليه الرابط",
+DlnLnkMsgNoEMail	: "فضلاً أدخل عنوان البريد الإلكتروني",
+DlnLnkMsgNoAnchor	: "فضلاً حدد العلامة المرجعية المرغوبة",
+DlnLnkMsgInvPopName	: "اسم النافذة المنبثقة يجب أن يبدأ بحرف أبجدي دون مسافات",
+
+// Color Dialog
+DlgColorTitle		: "اختر لوناً",
+DlgColorBtnClear	: "مسح",
+DlgColorHighlight	: "تحديد",
+DlgColorSelected	: "إختيار",
+
+// Smiley Dialog
+DlgSmileyTitle		: "إدراج إبتسامات ",
+
+// Special Character Dialog
+DlgSpecialCharTitle	: "إدراج رمز",
+
+// Table Dialog
+DlgTableTitle		: "إدراج جدول",
+DlgTableRows		: "صفوف",
+DlgTableColumns		: "أعمدة",
+DlgTableBorder		: "سمك الحدود",
+DlgTableAlign		: "المحاذاة",
+DlgTableAlignNotSet	: "<بدون تحديد>",
+DlgTableAlignLeft	: "يسار",
+DlgTableAlignCenter	: "وسط",
+DlgTableAlignRight	: "يمين",
+DlgTableWidth		: "العرض",
+DlgTableWidthPx		: "بكسل",
+DlgTableWidthPc		: "بالمئة",
+DlgTableHeight		: "الإرتفاع",
+DlgTableCellSpace	: "تباعد الخلايا",
+DlgTableCellPad		: "المسافة البادئة",
+DlgTableCaption		: "الوصف",
+DlgTableSummary		: "الخلاصة",
+
+// Table Cell Dialog
+DlgCellTitle		: "خصائص الخلية",
+DlgCellWidth		: "العرض",
+DlgCellWidthPx		: "بكسل",
+DlgCellWidthPc		: "بالمئة",
+DlgCellHeight		: "الإرتفاع",
+DlgCellWordWrap		: "التفاف النص",
+DlgCellWordWrapNotSet	: "<بدون تحديد>",
+DlgCellWordWrapYes	: "نعم",
+DlgCellWordWrapNo	: "لا",
+DlgCellHorAlign		: "المحاذاة الأفقية",
+DlgCellHorAlignNotSet	: "<بدون تحديد>",
+DlgCellHorAlignLeft	: "يسار",
+DlgCellHorAlignCenter	: "وسط",
+DlgCellHorAlignRight: "يمين",
+DlgCellVerAlign		: "المحاذاة العمودية",
+DlgCellVerAlignNotSet	: "<بدون تحديد>",
+DlgCellVerAlignTop	: "أعلى",
+DlgCellVerAlignMiddle	: "وسط",
+DlgCellVerAlignBottom	: "أسفل",
+DlgCellVerAlignBaseline	: "على السطر",
+DlgCellRowSpan		: "إمتداد الصفوف",
+DlgCellCollSpan		: "إمتداد الأعمدة",
+DlgCellBackColor	: "لون الخلفية",
+DlgCellBorderColor	: "لون الحدود",
+DlgCellBtnSelect	: "حدّد...",
+
+// Find and Replace Dialog
+DlgFindAndReplaceTitle	: "بحث واستبدال",
+
+// Find Dialog
+DlgFindTitle		: "بحث",
+DlgFindFindBtn		: "ابحث",
+DlgFindNotFoundMsg	: "لم يتم العثور على النص المحدد.",
+
+// Replace Dialog
+DlgReplaceTitle			: "إستبدال",
+DlgReplaceFindLbl		: "البحث عن:",
+DlgReplaceReplaceLbl	: "إستبدال بـ:",
+DlgReplaceCaseChk		: "مطابقة حالة الأحرف",
+DlgReplaceReplaceBtn	: "إستبدال",
+DlgReplaceReplAllBtn	: "إستبدال الكل",
+DlgReplaceWordChk		: "الكلمة بالكامل فقط",
+
+// Paste Operations / Dialog
+PasteErrorCut	: "الإعدادات الأمنية للمتصفح الذي تستخدمه تمنع القص التلقائي. فضلاً إستخدم لوحة المفاتيح لفعل ذلك (Ctrl+X).",
+PasteErrorCopy	: "الإعدادات الأمنية للمتصفح الذي تستخدمه تمنع النسخ التلقائي. فضلاً إستخدم لوحة المفاتيح لفعل ذلك (Ctrl+C).",
+
+PasteAsText		: "لصق كنص بسيط",
+PasteFromWord	: "لصق من وورد",
+
+DlgPasteMsg2	: "الصق داخل الصندوق بإستخدام زرّي (<STRONG>Ctrl+V</STRONG>) في لوحة المفاتيح، ثم اضغط زر  <STRONG>موافق</STRONG>.",
+DlgPasteSec		: "نظراً لإعدادات الأمان الخاصة بمتصفحك، لن يتمكن هذا المحرر من الوصول لمحتوى حافظتك، لذا وجب عليك لصق المحتوى مرة أخرى في هذه النافذة.",
+DlgPasteIgnoreFont		: "تجاهل تعريفات أسماء الخطوط",
+DlgPasteRemoveStyles	: "إزالة تعريفات الأنماط",
+
+// Color Picker
+ColorAutomatic	: "تلقائي",
+ColorMoreColors	: "ألوان إضافية...",
+
+// Document Properties
+DocProps		: "خصائص الصفحة",
+
+// Anchor Dialog
+DlgAnchorTitle		: "خصائص إشارة مرجعية",
+DlgAnchorName		: "اسم الإشارة المرجعية",
+DlgAnchorErrorName	: "الرجاء كتابة اسم الإشارة المرجعية",
+
+// Speller Pages Dialog
+DlgSpellNotInDic		: "ليست في القاموس",
+DlgSpellChangeTo		: "التغيير إلى",
+DlgSpellBtnIgnore		: "تجاهل",
+DlgSpellBtnIgnoreAll	: "تجاهل الكل",
+DlgSpellBtnReplace		: "تغيير",
+DlgSpellBtnReplaceAll	: "تغيير الكل",
+DlgSpellBtnUndo			: "تراجع",
+DlgSpellNoSuggestions	: "- لا توجد إقتراحات -",
+DlgSpellProgress		: "جاري التدقيق إملائياً",
+DlgSpellNoMispell		: "تم إكمال التدقيق الإملائي: لم يتم العثور على أي أخطاء إملائية",
+DlgSpellNoChanges		: "تم إكمال التدقيق الإملائي: لم يتم تغيير أي كلمة",
+DlgSpellOneChange		: "تم إكمال التدقيق الإملائي: تم تغيير كلمة واحدة فقط",
+DlgSpellManyChanges		: "تم إكمال التدقيق الإملائي: تم تغيير %1 كلمات\كلمة",
+
+IeSpellDownload			: "المدقق الإملائي (الإنجليزي) غير مثبّت. هل تود تحميله الآن؟",
+
+// Button Dialog
+DlgButtonText		: "القيمة/التسمية",
+DlgButtonType		: "نوع الزر",
+DlgButtonTypeBtn	: "زر",
+DlgButtonTypeSbm	: "إرسال",
+DlgButtonTypeRst	: "إعادة تعيين",
+
+// Checkbox and Radio Button Dialogs
+DlgCheckboxName		: "الاسم",
+DlgCheckboxValue	: "القيمة",
+DlgCheckboxSelected	: "محدد",
+
+// Form Dialog
+DlgFormName		: "الاسم",
+DlgFormAction	: "اسم الملف",
+DlgFormMethod	: "الأسلوب",
+
+// Select Field Dialog
+DlgSelectName		: "الاسم",
+DlgSelectValue		: "القيمة",
+DlgSelectSize		: "الحجم",
+DlgSelectLines		: "الأسطر",
+DlgSelectChkMulti	: "السماح بتحديدات متعددة",
+DlgSelectOpAvail	: "الخيارات المتاحة",
+DlgSelectOpText		: "النص",
+DlgSelectOpValue	: "القيمة",
+DlgSelectBtnAdd		: "إضافة",
+DlgSelectBtnModify	: "تعديل",
+DlgSelectBtnUp		: "تحريك لأعلى",
+DlgSelectBtnDown	: "تحريك لأسفل",
+DlgSelectBtnSetValue : "إجعلها محددة",
+DlgSelectBtnDelete	: "إزالة",
+
+// Textarea Dialog
+DlgTextareaName	: "الاسم",
+DlgTextareaCols	: "الأعمدة",
+DlgTextareaRows	: "الصفوف",
+
+// Text Field Dialog
+DlgTextName			: "الاسم",
+DlgTextValue		: "القيمة",
+DlgTextCharWidth	: "العرض بالأحرف",
+DlgTextMaxChars		: "عدد الحروف الأقصى",
+DlgTextType			: "نوع المحتوى",
+DlgTextTypeText		: "نص",
+DlgTextTypePass		: "كلمة مرور",
+
+// Hidden Field Dialog
+DlgHiddenName	: "الاسم",
+DlgHiddenValue	: "القيمة",
+
+// Bulleted List Dialog
+BulletedListProp	: "خصائص التعداد النقطي",
+NumberedListProp	: "خصائص التعداد الرقمي",
+DlgLstStart			: "البدء عند",
+DlgLstType			: "النوع",
+DlgLstTypeCircle	: "دائرة",
+DlgLstTypeDisc		: "قرص",
+DlgLstTypeSquare	: "مربع",
+DlgLstTypeNumbers	: "أرقام (1، 2، 3)َ",
+DlgLstTypeLCase		: "حروف صغيرة (a, b, c)َ",
+DlgLstTypeUCase		: "حروف كبيرة (A, B, C)َ",
+DlgLstTypeSRoman	: "ترقيم روماني صغير (i, ii, iii)َ",
+DlgLstTypeLRoman	: "ترقيم روماني كبير (I, II, III)َ",
+
+// Document Properties Dialog
+DlgDocGeneralTab	: "عام",
+DlgDocBackTab		: "الخلفية",
+DlgDocColorsTab		: "الألوان والهوامش",
+DlgDocMetaTab		: "المعرّفات الرأسية",
+
+DlgDocPageTitle		: "عنوان الصفحة",
+DlgDocLangDir		: "إتجاه اللغة",
+DlgDocLangDirLTR	: "اليسار لليمين (LTR)",
+DlgDocLangDirRTL	: "اليمين لليسار (RTL)",
+DlgDocLangCode		: "رمز اللغة",
+DlgDocCharSet		: "ترميز الحروف",
+DlgDocCharSetCE		: "أوروبا الوسطى",
+DlgDocCharSetCT		: "الصينية التقليدية (Big5)",
+DlgDocCharSetCR		: "السيريلية",
+DlgDocCharSetGR		: "اليونانية",
+DlgDocCharSetJP		: "اليابانية",
+DlgDocCharSetKR		: "الكورية",
+DlgDocCharSetTR		: "التركية",
+DlgDocCharSetUN		: "Unicode (UTF-8)",
+DlgDocCharSetWE		: "أوروبا الغربية",
+DlgDocCharSetOther	: "ترميز آخر",
+
+DlgDocDocType		: "ترويسة نوع  الصفحة",
+DlgDocDocTypeOther	: "ترويسة نوع  صفحة أخرى",
+DlgDocIncXHTML		: "تضمين   إعلانات‏ لغة XHTMLَ",
+DlgDocBgColor		: "لون الخلفية",
+DlgDocBgImage		: "رابط الصورة الخلفية",
+DlgDocBgNoScroll	: "جعلها علامة مائية",
+DlgDocCText			: "النص",
+DlgDocCLink			: "الروابط",
+DlgDocCVisited		: "المزارة",
+DlgDocCActive		: "النشطة",
+DlgDocMargins		: "هوامش الصفحة",
+DlgDocMaTop			: "علوي",
+DlgDocMaLeft		: "أيسر",
+DlgDocMaRight		: "أيمن",
+DlgDocMaBottom		: "سفلي",
+DlgDocMeIndex		: "الكلمات الأساسية (مفصولة بفواصل)َ",
+DlgDocMeDescr		: "وصف الصفحة",
+DlgDocMeAuthor		: "الكاتب",
+DlgDocMeCopy		: "المالك",
+DlgDocPreview		: "معاينة",
+
+// Templates Dialog
+Templates			: "القوالب",
+DlgTemplatesTitle	: "قوالب المحتوى",
+DlgTemplatesSelMsg	: "اختر القالب الذي تود وضعه في المحرر <br>(سيتم فقدان المحتوى الحالي):",
+DlgTemplatesLoading	: "جاري تحميل قائمة القوالب، الرجاء الإنتظار...",
+DlgTemplatesNoTpl	: "(لم يتم تعريف أي قالب)",
+DlgTemplatesReplace	: "استبدال المحتوى",
+
+// About Dialog
+DlgAboutAboutTab	: "نبذة",
+DlgAboutBrowserInfoTab	: "معلومات متصفحك",
+DlgAboutLicenseTab	: "الترخيص",
+DlgAboutVersion		: "الإصدار",
+DlgAboutInfo		: "لمزيد من المعلومات تفضل بزيارة"
+};


Property changes on: announcement/trunk/src/main/webapp/fckeditor/editor/lang/ar.js
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/webapp/fckeditor/editor/lang/bg.js
===================================================================
--- announcement/trunk/src/main/webapp/fckeditor/editor/lang/bg.js	                        (rev 0)
+++ announcement/trunk/src/main/webapp/fckeditor/editor/lang/bg.js	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,515 @@
+/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2008 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * Bulgarian language file.
+ */
+
+var FCKLang =
+{
+// Language direction : "ltr" (left to right) or "rtl" (right to left).
+Dir					: "ltr",
+
+ToolbarCollapse		: "Скрий панела с инструментите",
+ToolbarExpand		: "Покажи панела с инструментите",
+
+// Toolbar Items and Context Menu
+Save				: "Запази",
+NewPage				: "Нова страница",
+Preview				: "Предварителен изглед",
+Cut					: "Изрежи",
+Copy				: "Запамети",
+Paste				: "Вмъкни",
+PasteText			: "Вмъкни само текст",
+PasteWord			: "Вмъкни от MS Word",
+Print				: "Печат",
+SelectAll			: "Селектирай всичко",
+RemoveFormat		: "Изтрий форматирането",
+InsertLinkLbl		: "Връзка",
+InsertLink			: "Добави/Редактирай връзка",
+RemoveLink			: "Изтрий връзка",
+Anchor				: "Добави/Редактирай котва",
+AnchorDelete		: "Remove Anchor",	//MISSING
+InsertImageLbl		: "Изображение",
+InsertImage			: "Добави/Редактирай изображение",
+InsertFlashLbl		: "Flash",
+InsertFlash			: "Добави/Редактиай Flash обект",
+InsertTableLbl		: "Таблица",
+InsertTable			: "Добави/Редактирай таблица",
+InsertLineLbl		: "Линия",
+InsertLine			: "Вмъкни хоризонтална линия",
+InsertSpecialCharLbl: "Специален символ",
+InsertSpecialChar	: "Вмъкни специален символ",
+InsertSmileyLbl		: "Усмивка",
+InsertSmiley		: "Добави усмивка",
+About				: "За FCKeditor",
+Bold				: "Удебелен",
+Italic				: "Курсив",
+Underline			: "Подчертан",
+StrikeThrough		: "Зачертан",
+Subscript			: "Индекс за база",
+Superscript			: "Индекс за степен",
+LeftJustify			: "Подравняване в ляво",
+CenterJustify		: "Подравнявне в средата",
+RightJustify		: "Подравняване в дясно",
+BlockJustify		: "Двустранно подравняване",
+DecreaseIndent		: "Намали отстъпа",
+IncreaseIndent		: "Увеличи отстъпа",
+Blockquote			: "Blockquote",	//MISSING
+Undo				: "Отмени",
+Redo				: "Повтори",
+NumberedListLbl		: "Нумериран списък",
+NumberedList		: "Добави/Изтрий нумериран списък",
+BulletedListLbl		: "Ненумериран списък",
+BulletedList		: "Добави/Изтрий ненумериран списък",
+ShowTableBorders	: "Покажи рамките на таблицата",
+ShowDetails			: "Покажи подробности",
+Style				: "Стил",
+FontFormat			: "Формат",
+Font				: "Шрифт",
+FontSize			: "Размер",
+TextColor			: "Цвят на текста",
+BGColor				: "Цвят на фона",
+Source				: "Код",
+Find				: "Търси",
+Replace				: "Замести",
+SpellCheck			: "Провери правописа",
+UniversalKeyboard	: "Универсална клавиатура",
+PageBreakLbl		: "Нов ред",
+PageBreak			: "Вмъкни нов ред",
+
+Form			: "Формуляр",
+Checkbox		: "Поле за отметка",
+RadioButton		: "Поле за опция",
+TextField		: "Текстово поле",
+Textarea		: "Текстова област",
+HiddenField		: "Скрито поле",
+Button			: "Бутон",
+SelectionField	: "Падащо меню с опции",
+ImageButton		: "Бутон-изображение",
+
+FitWindow		: "Maximize the editor size",	//MISSING
+ShowBlocks		: "Show Blocks",	//MISSING
+
+// Context Menu
+EditLink			: "Редактирай връзка",
+CellCM				: "Cell",	//MISSING
+RowCM				: "Row",	//MISSING
+ColumnCM			: "Column",	//MISSING
+InsertRowAfter		: "Insert Row After",	//MISSING
+InsertRowBefore		: "Insert Row Before",	//MISSING
+DeleteRows			: "Изтрий редовете",
+InsertColumnAfter	: "Insert Column After",	//MISSING
+InsertColumnBefore	: "Insert Column Before",	//MISSING
+DeleteColumns		: "Изтрий колоните",
+InsertCellAfter		: "Insert Cell After",	//MISSING
+InsertCellBefore	: "Insert Cell Before",	//MISSING
+DeleteCells			: "Изтрий клетките",
+MergeCells			: "Обедини клетките",
+MergeRight			: "Merge Right",	//MISSING
+MergeDown			: "Merge Down",	//MISSING
+HorizontalSplitCell	: "Split Cell Horizontally",	//MISSING
+VerticalSplitCell	: "Split Cell Vertically",	//MISSING
+TableDelete			: "Изтрий таблицата",
+CellProperties		: "Параметри на клетката",
+TableProperties		: "Параметри на таблицата",
+ImageProperties		: "Параметри на изображението",
+FlashProperties		: "Параметри на Flash обекта",
+
+AnchorProp			: "Параметри на котвата",
+ButtonProp			: "Параметри на бутона",
+CheckboxProp		: "Параметри на полето за отметка",
+HiddenFieldProp		: "Параметри на скритото поле",
+RadioButtonProp		: "Параметри на полето за опция",
+ImageButtonProp		: "Параметри на бутона-изображение",
+TextFieldProp		: "Параметри на текстовото-поле",
+SelectionFieldProp	: "Параметри на падащото меню с опции",
+TextareaProp		: "Параметри на текстовата област",
+FormProp			: "Параметри на формуляра",
+
+FontFormats			: "Нормален;Форматиран;Адрес;Заглавие 1;Заглавие 2;Заглавие 3;Заглавие 4;Заглавие 5;Заглавие 6;Параграф (DIV)",
+
+// Alerts and Messages
+ProcessingXHTML		: "Обработка на XHTML. Моля изчакайте...",
+Done				: "Готово",
+PasteWordConfirm	: "Текстът, който искате да вмъкнете е копиран от MS Word. Желаете ли да бъде изчистен преди вмъкването?",
+NotCompatiblePaste	: "Тази операция изисква MS Internet Explorer версия 5.5 или по-висока. Желаете ли да вмъкнете запаметеното без изчистване?",
+UnknownToolbarItem	: "Непознат инструмент \"%1\"",
+UnknownCommand		: "Непозната команда \"%1\"",
+NotImplemented		: "Командата не е имплементирана",
+UnknownToolbarSet	: "Панелът \"%1\" не съществува",
+NoActiveX			: "Your browser's security settings could limit some features of the editor. You must enable the option \"Run ActiveX controls and plug-ins\". You may experience errors and notice missing features.",	//MISSING
+BrowseServerBlocked : "The resources browser could not be opened. Make sure that all popup blockers are disabled.",	//MISSING
+DialogBlocked		: "It was not possible to open the dialog window. Make sure all popup blockers are disabled.",	//MISSING
+
+// Dialogs
+DlgBtnOK			: "ОК",
+DlgBtnCancel		: "Отказ",
+DlgBtnClose			: "Затвори",
+DlgBtnBrowseServer	: "Разгледай сървъра",
+DlgAdvancedTag		: "Подробности...",
+DlgOpOther			: "<Друго>",
+DlgInfoTab			: "Информация",
+DlgAlertUrl			: "Моля, въведете пълния път (URL)",
+
+// General Dialogs Labels
+DlgGenNotSet		: "<не е настроен>",
+DlgGenId			: "Идентификатор",
+DlgGenLangDir		: "посока на речта",
+DlgGenLangDirLtr	: "От ляво на дясно",
+DlgGenLangDirRtl	: "От дясно на ляво",
+DlgGenLangCode		: "Код на езика",
+DlgGenAccessKey		: "Бърз клавиш",
+DlgGenName			: "Име",
+DlgGenTabIndex		: "Ред на достъп",
+DlgGenLongDescr		: "Описание на връзката",
+DlgGenClass			: "Клас от стиловите таблици",
+DlgGenTitle			: "Препоръчително заглавие",
+DlgGenContType		: "Препоръчителен тип на съдържанието",
+DlgGenLinkCharset	: "Тип на свързания ресурс",
+DlgGenStyle			: "Стил",
+
+// Image Dialog
+DlgImgTitle			: "Параметри на изображението",
+DlgImgInfoTab		: "Информация за изображението",
+DlgImgBtnUpload		: "Прати към сървъра",
+DlgImgURL			: "Пълен път (URL)",
+DlgImgUpload		: "Качи",
+DlgImgAlt			: "Алтернативен текст",
+DlgImgWidth			: "Ширина",
+DlgImgHeight		: "Височина",
+DlgImgLockRatio		: "Запази пропорцията",
+DlgBtnResetSize		: "Възстанови размера",
+DlgImgBorder		: "Рамка",
+DlgImgHSpace		: "Хоризонтален отстъп",
+DlgImgVSpace		: "Вертикален отстъп",
+DlgImgAlign			: "Подравняване",
+DlgImgAlignLeft		: "Ляво",
+DlgImgAlignAbsBottom: "Най-долу",
+DlgImgAlignAbsMiddle: "Точно по средата",
+DlgImgAlignBaseline	: "По базовата линия",
+DlgImgAlignBottom	: "Долу",
+DlgImgAlignMiddle	: "По средата",
+DlgImgAlignRight	: "Дясно",
+DlgImgAlignTextTop	: "Върху текста",
+DlgImgAlignTop		: "Отгоре",
+DlgImgPreview		: "Изглед",
+DlgImgAlertUrl		: "Моля, въведете пълния път до изображението",
+DlgImgLinkTab		: "Връзка",
+
+// Flash Dialog
+DlgFlashTitle		: "Параметри на Flash обекта",
+DlgFlashChkPlay		: "Автоматично стартиране",
+DlgFlashChkLoop		: "Ново стартиране след завършването",
+DlgFlashChkMenu		: "Разрешено Flash меню",
+DlgFlashScale		: "Оразмеряване",
+DlgFlashScaleAll	: "Покажи целия обект",
+DlgFlashScaleNoBorder	: "Без рамка",
+DlgFlashScaleFit	: "Според мястото",
+
+// Link Dialog
+DlgLnkWindowTitle	: "Връзка",
+DlgLnkInfoTab		: "Информация за връзката",
+DlgLnkTargetTab		: "Цел",
+
+DlgLnkType			: "Вид на връзката",
+DlgLnkTypeURL		: "Пълен път (URL)",
+DlgLnkTypeAnchor	: "Котва в текущата страница",
+DlgLnkTypeEMail		: "Е-поща",
+DlgLnkProto			: "Протокол",
+DlgLnkProtoOther	: "<друго>",
+DlgLnkURL			: "Пълен път (URL)",
+DlgLnkAnchorSel		: "Изберете котва",
+DlgLnkAnchorByName	: "По име на котвата",
+DlgLnkAnchorById	: "По идентификатор на елемент",
+DlgLnkNoAnchors		: "(Няма котви в текущия документ)",
+DlgLnkEMail			: "Адрес за е-поща",
+DlgLnkEMailSubject	: "Тема на писмото",
+DlgLnkEMailBody		: "Текст на писмото",
+DlgLnkUpload		: "Качи",
+DlgLnkBtnUpload		: "Прати на сървъра",
+
+DlgLnkTarget		: "Цел",
+DlgLnkTargetFrame	: "<рамка>",
+DlgLnkTargetPopup	: "<дъщерен прозорец>",
+DlgLnkTargetBlank	: "Нов прозорец (_blank)",
+DlgLnkTargetParent	: "Родителски прозорец (_parent)",
+DlgLnkTargetSelf	: "Активния прозорец (_self)",
+DlgLnkTargetTop		: "Целия прозорец (_top)",
+DlgLnkTargetFrameName	: "Име на целевия прозорец",
+DlgLnkPopWinName	: "Име на дъщерния прозорец",
+DlgLnkPopWinFeat	: "Параметри на дъщерния прозорец",
+DlgLnkPopResize		: "С променливи размери",
+DlgLnkPopLocation	: "Поле за адрес",
+DlgLnkPopMenu		: "Меню",
+DlgLnkPopScroll		: "Плъзгач",
+DlgLnkPopStatus		: "Поле за статус",
+DlgLnkPopToolbar	: "Панел с бутони",
+DlgLnkPopFullScrn	: "Голям екран (MS IE)",
+DlgLnkPopDependent	: "Зависим (Netscape)",
+DlgLnkPopWidth		: "Ширина",
+DlgLnkPopHeight		: "Височина",
+DlgLnkPopLeft		: "Координати - X",
+DlgLnkPopTop		: "Координати - Y",
+
+DlnLnkMsgNoUrl		: "Моля, напишете пълния път (URL)",
+DlnLnkMsgNoEMail	: "Моля, напишете адреса за е-поща",
+DlnLnkMsgNoAnchor	: "Моля, изберете котва",
+DlnLnkMsgInvPopName	: "The popup name must begin with an alphabetic character and must not contain spaces",	//MISSING
+
+// Color Dialog
+DlgColorTitle		: "Изберете цвят",
+DlgColorBtnClear	: "Изчисти",
+DlgColorHighlight	: "Текущ",
+DlgColorSelected	: "Избран",
+
+// Smiley Dialog
+DlgSmileyTitle		: "Добави усмивка",
+
+// Special Character Dialog
+DlgSpecialCharTitle	: "Изберете специален символ",
+
+// Table Dialog
+DlgTableTitle		: "Параметри на таблицата",
+DlgTableRows		: "Редове",
+DlgTableColumns		: "Колони",
+DlgTableBorder		: "Размер на рамката",
+DlgTableAlign		: "Подравняване",
+DlgTableAlignNotSet	: "<Не е избрано>",
+DlgTableAlignLeft	: "Ляво",
+DlgTableAlignCenter	: "Център",
+DlgTableAlignRight	: "Дясно",
+DlgTableWidth		: "Ширина",
+DlgTableWidthPx		: "пиксели",
+DlgTableWidthPc		: "проценти",
+DlgTableHeight		: "Височина",
+DlgTableCellSpace	: "Разстояние между клетките",
+DlgTableCellPad		: "Отстъп на съдържанието в клетките",
+DlgTableCaption		: "Заглавие",
+DlgTableSummary		: "Резюме",
+
+// Table Cell Dialog
+DlgCellTitle		: "Параметри на клетката",
+DlgCellWidth		: "Ширина",
+DlgCellWidthPx		: "пиксели",
+DlgCellWidthPc		: "проценти",
+DlgCellHeight		: "Височина",
+DlgCellWordWrap		: "пренасяне на нов ред",
+DlgCellWordWrapNotSet	: "<Не е настроено>",
+DlgCellWordWrapYes	: "Да",
+DlgCellWordWrapNo	: "не",
+DlgCellHorAlign		: "Хоризонтално подравняване",
+DlgCellHorAlignNotSet	: "<Не е настроено>",
+DlgCellHorAlignLeft	: "Ляво",
+DlgCellHorAlignCenter	: "Център",
+DlgCellHorAlignRight: "Дясно",
+DlgCellVerAlign		: "Вертикално подравняване",
+DlgCellVerAlignNotSet	: "<Не е настроено>",
+DlgCellVerAlignTop	: "Горе",
+DlgCellVerAlignMiddle	: "По средата",
+DlgCellVerAlignBottom	: "Долу",
+DlgCellVerAlignBaseline	: "По базовата линия",
+DlgCellRowSpan		: "повече от един ред",
+DlgCellCollSpan		: "повече от една колона",
+DlgCellBackColor	: "фонов цвят",
+DlgCellBorderColor	: "цвят на рамката",
+DlgCellBtnSelect	: "Изберете...",
+
+// Find and Replace Dialog
+DlgFindAndReplaceTitle	: "Find and Replace",	//MISSING
+
+// Find Dialog
+DlgFindTitle		: "Търси",
+DlgFindFindBtn		: "Търси",
+DlgFindNotFoundMsg	: "Указания текст не беше намерен.",
+
+// Replace Dialog
+DlgReplaceTitle			: "Замести",
+DlgReplaceFindLbl		: "Търси:",
+DlgReplaceReplaceLbl	: "Замести с:",
+DlgReplaceCaseChk		: "Със същия регистър",
+DlgReplaceReplaceBtn	: "Замести",
+DlgReplaceReplAllBtn	: "Замести всички",
+DlgReplaceWordChk		: "Търси същата дума",
+
+// Paste Operations / Dialog
+PasteErrorCut	: "Настройките за сигурност на вашия бразуър не разрешават на редактора да изпълни изрязването. За целта използвайте клавиатурата (Ctrl+X).",
+PasteErrorCopy	: "Настройките за сигурност на вашия бразуър не разрешават на редактора да изпълни запаметяването. За целта използвайте клавиатурата (Ctrl+C).",
+
+PasteAsText		: "Вмъкни като чист текст",
+PasteFromWord	: "Вмъкни от MS Word",
+
+DlgPasteMsg2	: "Вмъкнете тук съдъжанието с клавиатуарата (<STRONG>Ctrl+V</STRONG>) и натиснете <STRONG>OK</STRONG>.",
+DlgPasteSec		: "Because of your browser security settings, the editor is not able to access your clipboard data directly. You are required to paste it again in this window.",	//MISSING
+DlgPasteIgnoreFont		: "Игнорирай шрифтовите дефиниции",
+DlgPasteRemoveStyles	: "Изтрий стиловите дефиниции",
+
+// Color Picker
+ColorAutomatic	: "По подразбиране",
+ColorMoreColors	: "Други цветове...",
+
+// Document Properties
+DocProps		: "Параметри на документа",
+
+// Anchor Dialog
+DlgAnchorTitle		: "Параметри на котвата",
+DlgAnchorName		: "Име на котвата",
+DlgAnchorErrorName	: "Моля, въведете име на котвата",
+
+// Speller Pages Dialog
+DlgSpellNotInDic		: "Липсва в речника",
+DlgSpellChangeTo		: "Промени на",
+DlgSpellBtnIgnore		: "Игнорирай",
+DlgSpellBtnIgnoreAll	: "Игнорирай всички",
+DlgSpellBtnReplace		: "Замести",
+DlgSpellBtnReplaceAll	: "Замести всички",
+DlgSpellBtnUndo			: "Отмени",
+DlgSpellNoSuggestions	: "- Няма предложения -",
+DlgSpellProgress		: "Извършване на проверката за правопис...",
+DlgSpellNoMispell		: "Проверката за правопис завършена: не са открити правописни грешки",
+DlgSpellNoChanges		: "Проверката за правопис завършена: няма променени думи",
+DlgSpellOneChange		: "Проверката за правопис завършена: една дума е променена",
+DlgSpellManyChanges		: "Проверката за правопис завършена: %1 думи са променени",
+
+IeSpellDownload			: "Инструментът за проверка на правопис не е инсталиран. Желаете ли да го инсталирате ?",
+
+// Button Dialog
+DlgButtonText		: "Текст (Стойност)",
+DlgButtonType		: "Тип",
+DlgButtonTypeBtn	: "Button",	//MISSING
+DlgButtonTypeSbm	: "Submit",	//MISSING
+DlgButtonTypeRst	: "Reset",	//MISSING
+
+// Checkbox and Radio Button Dialogs
+DlgCheckboxName		: "Име",
+DlgCheckboxValue	: "Стойност",
+DlgCheckboxSelected	: "Отметнато",
+
+// Form Dialog
+DlgFormName		: "Име",
+DlgFormAction	: "Действие",
+DlgFormMethod	: "Метод",
+
+// Select Field Dialog
+DlgSelectName		: "Име",
+DlgSelectValue		: "Стойност",
+DlgSelectSize		: "Размер",
+DlgSelectLines		: "линии",
+DlgSelectChkMulti	: "Разрешено множествено селектиране",
+DlgSelectOpAvail	: "Възможни опции",
+DlgSelectOpText		: "Текст",
+DlgSelectOpValue	: "Стойност",
+DlgSelectBtnAdd		: "Добави",
+DlgSelectBtnModify	: "Промени",
+DlgSelectBtnUp		: "Нагоре",
+DlgSelectBtnDown	: "Надолу",
+DlgSelectBtnSetValue : "Настрой като избрана стойност",
+DlgSelectBtnDelete	: "Изтрий",
+
+// Textarea Dialog
+DlgTextareaName	: "Име",
+DlgTextareaCols	: "Колони",
+DlgTextareaRows	: "Редове",
+
+// Text Field Dialog
+DlgTextName			: "Име",
+DlgTextValue		: "Стойност",
+DlgTextCharWidth	: "Ширина на символите",
+DlgTextMaxChars		: "Максимум символи",
+DlgTextType			: "Тип",
+DlgTextTypeText		: "Текст",
+DlgTextTypePass		: "Парола",
+
+// Hidden Field Dialog
+DlgHiddenName	: "Име",
+DlgHiddenValue	: "Стойност",
+
+// Bulleted List Dialog
+BulletedListProp	: "Параметри на ненумерирания списък",
+NumberedListProp	: "Параметри на нумерирания списък",
+DlgLstStart			: "Start",	//MISSING
+DlgLstType			: "Тип",
+DlgLstTypeCircle	: "Окръжност",
+DlgLstTypeDisc		: "Кръг",
+DlgLstTypeSquare	: "Квадрат",
+DlgLstTypeNumbers	: "Числа (1, 2, 3)",
+DlgLstTypeLCase		: "Малки букви (a, b, c)",
+DlgLstTypeUCase		: "Големи букви (A, B, C)",
+DlgLstTypeSRoman	: "Малки римски числа (i, ii, iii)",
+DlgLstTypeLRoman	: "Големи римски числа (I, II, III)",
+
+// Document Properties Dialog
+DlgDocGeneralTab	: "Общи",
+DlgDocBackTab		: "Фон",
+DlgDocColorsTab		: "Цветове и отстъпи",
+DlgDocMetaTab		: "Мета данни",
+
+DlgDocPageTitle		: "Заглавие на страницата",
+DlgDocLangDir		: "Посока на речта",
+DlgDocLangDirLTR	: "От ляво на дясно",
+DlgDocLangDirRTL	: "От дясно на ляво",
+DlgDocLangCode		: "Код на езика",
+DlgDocCharSet		: "Кодиране на символите",
+DlgDocCharSetCE		: "Central European",	//MISSING
+DlgDocCharSetCT		: "Chinese Traditional (Big5)",	//MISSING
+DlgDocCharSetCR		: "Cyrillic",	//MISSING
+DlgDocCharSetGR		: "Greek",	//MISSING
+DlgDocCharSetJP		: "Japanese",	//MISSING
+DlgDocCharSetKR		: "Korean",	//MISSING
+DlgDocCharSetTR		: "Turkish",	//MISSING
+DlgDocCharSetUN		: "Unicode (UTF-8)",	//MISSING
+DlgDocCharSetWE		: "Western European",	//MISSING
+DlgDocCharSetOther	: "Друго кодиране на символите",
+
+DlgDocDocType		: "Тип на документа",
+DlgDocDocTypeOther	: "Друг тип на документа",
+DlgDocIncXHTML		: "Включи XHTML декларация",
+DlgDocBgColor		: "Цвят на фона",
+DlgDocBgImage		: "Пълен път до фоновото изображение",
+DlgDocBgNoScroll	: "Не-повтарящо се фоново изображение",
+DlgDocCText			: "Текст",
+DlgDocCLink			: "Връзка",
+DlgDocCVisited		: "Посетена връзка",
+DlgDocCActive		: "Активна връзка",
+DlgDocMargins		: "Отстъпи на страницата",
+DlgDocMaTop			: "Горе",
+DlgDocMaLeft		: "Ляво",
+DlgDocMaRight		: "Дясно",
+DlgDocMaBottom		: "Долу",
+DlgDocMeIndex		: "Ключови думи за документа (разделени със запетаи)",
+DlgDocMeDescr		: "Описание на документа",
+DlgDocMeAuthor		: "Автор",
+DlgDocMeCopy		: "Авторски права",
+DlgDocPreview		: "Изглед",
+
+// Templates Dialog
+Templates			: "Шаблони",
+DlgTemplatesTitle	: "Шаблони",
+DlgTemplatesSelMsg	: "Изберете шаблон <br>(текущото съдържание на редактора ще бъде загубено):",
+DlgTemplatesLoading	: "Зареждане на списъка с шаблоните. Моля изчакайте...",
+DlgTemplatesNoTpl	: "(Няма дефинирани шаблони)",
+DlgTemplatesReplace	: "Replace actual contents",	//MISSING
+
+// About Dialog
+DlgAboutAboutTab	: "За",
+DlgAboutBrowserInfoTab	: "Информация за браузъра",
+DlgAboutLicenseTab	: "License",	//MISSING
+DlgAboutVersion		: "версия",
+DlgAboutInfo		: "За повече информация посетете"
+};


Property changes on: announcement/trunk/src/main/webapp/fckeditor/editor/lang/bg.js
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/webapp/fckeditor/editor/lang/bn.js
===================================================================
--- announcement/trunk/src/main/webapp/fckeditor/editor/lang/bn.js	                        (rev 0)
+++ announcement/trunk/src/main/webapp/fckeditor/editor/lang/bn.js	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,515 @@
+/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2008 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * Bengali/Bangla language file.
+ */
+
+var FCKLang =
+{
+// Language direction : "ltr" (left to right) or "rtl" (right to left).
+Dir					: "ltr",
+
+ToolbarCollapse		: "টূলবার গুটিয়ে দাও",
+ToolbarExpand		: "টূলবার ছড়িয়ে দাও",
+
+// Toolbar Items and Context Menu
+Save				: "সংরক্ষন কর",
+NewPage				: "নতুন পেজ",
+Preview				: "প্রিভিউ",
+Cut					: "কাট",
+Copy				: "কপি",
+Paste				: "পেস্ট",
+PasteText			: "পেস্ট (সাদা টেক্সট)",
+PasteWord			: "পেস্ট (শব্দ)",
+Print				: "প্রিন্ট",
+SelectAll			: "সব সিলেক্ট কর",
+RemoveFormat		: "ফরমেট সরাও",
+InsertLinkLbl		: "লিংকের যুক্ত করার লেবেল",
+InsertLink			: "লিংক যুক্ত কর",
+RemoveLink			: "লিংক সরাও",
+Anchor				: "নোঙ্গর",
+AnchorDelete		: "Remove Anchor",	//MISSING
+InsertImageLbl		: "ছবির লেবেল যুক্ত কর",
+InsertImage			: "ছবি যুক্ত কর",
+InsertFlashLbl		: "ফ্লাশ লেবেল যুক্ত কর",
+InsertFlash			: "ফ্লাশ যুক্ত কর",
+InsertTableLbl		: "টেবিলের লেবেল যুক্ত কর",
+InsertTable			: "টেবিল যুক্ত কর",
+InsertLineLbl		: "রেখা যুক্ত কর",
+InsertLine			: "রেখা যুক্ত কর",
+InsertSpecialCharLbl: "বিশেষ অক্ষরের লেবেল যুক্ত কর",
+InsertSpecialChar	: "বিশেষ অক্ষর যুক্ত কর",
+InsertSmileyLbl		: "স্মাইলী",
+InsertSmiley		: "স্মাইলী যুক্ত কর",
+About				: "FCKeditor কে বানিয়েছে",
+Bold				: "বোল্ড",
+Italic				: "ইটালিক",
+Underline			: "আন্ডারলাইন",
+StrikeThrough		: "স্ট্রাইক থ্রু",
+Subscript			: "অধোলেখ",
+Superscript			: "অভিলেখ",
+LeftJustify			: "বা দিকে ঘেঁষা",
+CenterJustify		: "মাঝ বরাবর ঘেষা",
+RightJustify		: "ডান দিকে ঘেঁষা",
+BlockJustify		: "ব্লক জাস্টিফাই",
+DecreaseIndent		: "ইনডেন্ট কমাও",
+IncreaseIndent		: "ইনডেন্ট বাড়াও",
+Blockquote			: "Blockquote",	//MISSING
+Undo				: "আনডু",
+Redo				: "রি-ডু",
+NumberedListLbl		: "সাংখ্যিক লিস্টের লেবেল",
+NumberedList		: "সাংখ্যিক লিস্ট",
+BulletedListLbl		: "বুলেট লিস্ট লেবেল",
+BulletedList		: "বুলেটেড লিস্ট",
+ShowTableBorders	: "টেবিল বর্ডার",
+ShowDetails			: "সবটুকু দেখাও",
+Style				: "স্টাইল",
+FontFormat			: "ফন্ট ফরমেট",
+Font				: "ফন্ট",
+FontSize			: "সাইজ",
+TextColor			: "টেক্স্ট রং",
+BGColor				: "বেকগ্রাউন্ড রং",
+Source				: "সোর্স",
+Find				: "খোজো",
+Replace				: "রিপ্লেস",
+SpellCheck			: "বানান চেক",
+UniversalKeyboard	: "সার্বজনীন কিবোর্ড",
+PageBreakLbl		: "পেজ ব্রেক লেবেল",
+PageBreak			: "পেজ ব্রেক",
+
+Form			: "ফর্ম",
+Checkbox		: "চেক বাক্স",
+RadioButton		: "রেডিও বাটন",
+TextField		: "টেক্সট ফীল্ড",
+Textarea		: "টেক্সট এরিয়া",
+HiddenField		: "গুপ্ত ফীল্ড",
+Button			: "বাটন",
+SelectionField	: "বাছাই ফীল্ড",
+ImageButton		: "ছবির বাটন",
+
+FitWindow		: "উইন্ডো ফিট কর",
+ShowBlocks		: "Show Blocks",	//MISSING
+
+// Context Menu
+EditLink			: "লিংক সম্পাদন",
+CellCM				: "সেল",
+RowCM				: "রো",
+ColumnCM			: "কলাম",
+InsertRowAfter		: "Insert Row After",	//MISSING
+InsertRowBefore		: "Insert Row Before",	//MISSING
+DeleteRows			: "রো মুছে দাও",
+InsertColumnAfter	: "Insert Column After",	//MISSING
+InsertColumnBefore	: "Insert Column Before",	//MISSING
+DeleteColumns		: "কলাম মুছে দাও",
+InsertCellAfter		: "Insert Cell After",	//MISSING
+InsertCellBefore	: "Insert Cell Before",	//MISSING
+DeleteCells			: "সেল মুছে দাও",
+MergeCells			: "সেল জোড়া দাও",
+MergeRight			: "Merge Right",	//MISSING
+MergeDown			: "Merge Down",	//MISSING
+HorizontalSplitCell	: "Split Cell Horizontally",	//MISSING
+VerticalSplitCell	: "Split Cell Vertically",	//MISSING
+TableDelete			: "টেবিল ডিলীট কর",
+CellProperties		: "সেলের প্রোপার্টিজ",
+TableProperties		: "টেবিল প্রোপার্টি",
+ImageProperties		: "ছবি প্রোপার্টি",
+FlashProperties		: "ফ্লাশ প্রোপার্টি",
+
+AnchorProp			: "নোঙর প্রোপার্টি",
+ButtonProp			: "বাটন প্রোপার্টি",
+CheckboxProp		: "চেক বক্স প্রোপার্টি",
+HiddenFieldProp		: "গুপ্ত ফীল্ড প্রোপার্টি",
+RadioButtonProp		: "রেডিও বাটন প্রোপার্টি",
+ImageButtonProp		: "ছবি বাটন প্রোপার্টি",
+TextFieldProp		: "টেক্সট ফীল্ড প্রোপার্টি",
+SelectionFieldProp	: "বাছাই ফীল্ড প্রোপার্টি",
+TextareaProp		: "টেক্সট এরিয়া প্রোপার্টি",
+FormProp			: "ফর্ম প্রোপার্টি",
+
+FontFormats			: "সাধারণ;ফর্মেটেড;ঠিকানা;শীর্ষক ১;শীর্ষক ২;শীর্ষক ৩;শীর্ষক ৪;শীর্ষক ৫;শীর্ষক ৬;শীর্ষক (DIV)",
+
+// Alerts and Messages
+ProcessingXHTML		: "XHTML প্রসেস করা হচ্ছে",
+Done				: "শেষ হয়েছে",
+PasteWordConfirm	: "যে টেকস্টটি আপনি পেস্ট করতে চাচ্ছেন মনে হচ্ছে সেটি ওয়ার্ড থেকে কপি করা। আপনি কি পেস্ট করার আগে একে পরিষ্কার করতে চান?",
+NotCompatiblePaste	: "এই কমান্ডটি শুধুমাত্র ইন্টারনেট এক্সপ্লোরার ৫.০ বা তার পরের ভার্সনে পাওয়া সম্ভব। আপনি কি পরিষ্কার না করেই পেস্ট করতে চান?",
+UnknownToolbarItem	: "অজানা টুলবার আইটেম \"%1\"",
+UnknownCommand		: "অজানা কমান্ড \"%1\"",
+NotImplemented		: "কমান্ড ইমপ্লিমেন্ট করা হয়নি",
+UnknownToolbarSet	: "টুলবার সেট \"%1\" এর অস্তিত্ব নেই",
+NoActiveX			: "আপনার ব্রাউজারের সুরক্ষা সেটিংস কারনে এডিটরের কিছু ফিচার পাওয়া নাও যেতে পারে। আপনাকে অবশ্যই \"Run ActiveX controls and plug-ins\" এনাবেল করে নিতে হবে। আপনি ভুলভ্রান্তি কিছু কিছু ফিচারের অনুপস্থিতি উপলব্ধি করতে পারেন।",
+BrowseServerBlocked : "রিসোর্স ব্রাউজার খোলা গেল না। নিশ্চিত করুন যে সব পপআপ ব্লকার বন্ধ করা আছে।",
+DialogBlocked		: "ডায়ালগ ইউন্ডো খোলা গেল না। নিশ্চিত করুন যে সব পপআপ ব্লকার বন্ধ করা আছে।",
+
+// Dialogs
+DlgBtnOK			: "ওকে",
+DlgBtnCancel		: "বাতিল",
+DlgBtnClose			: "বন্ধ কর",
+DlgBtnBrowseServer	: "ব্রাউজ সার্ভার",
+DlgAdvancedTag		: "এডভান্সড",
+DlgOpOther			: "<অন্য>",
+DlgInfoTab			: "তথ্য",
+DlgAlertUrl			: "দয়া করে URL যুক্ত করুন",
+
+// General Dialogs Labels
+DlgGenNotSet		: "<সেট নেই>",
+DlgGenId			: "আইডি",
+DlgGenLangDir		: "ভাষা লেখার দিক",
+DlgGenLangDirLtr	: "বাম থেকে ডান (LTR)",
+DlgGenLangDirRtl	: "ডান থেকে বাম (RTL)",
+DlgGenLangCode		: "ভাষা কোড",
+DlgGenAccessKey		: "এক্সেস কী",
+DlgGenName			: "নাম",
+DlgGenTabIndex		: "ট্যাব ইন্ডেক্স",
+DlgGenLongDescr		: "URL এর লম্বা বর্ণনা",
+DlgGenClass			: "স্টাইল-শীট ক্লাস",
+DlgGenTitle			: "পরামর্শ শীর্ষক",
+DlgGenContType		: "পরামর্শ কন্টেন্টের প্রকার",
+DlgGenLinkCharset	: "লিংক রিসোর্স ক্যারেক্টর সেট",
+DlgGenStyle			: "স্টাইল",
+
+// Image Dialog
+DlgImgTitle			: "ছবির প্রোপার্টি",
+DlgImgInfoTab		: "ছবির তথ্য",
+DlgImgBtnUpload		: "ইহাকে সার্ভারে প্রেরন কর",
+DlgImgURL			: "URL",
+DlgImgUpload		: "আপলোড",
+DlgImgAlt			: "বিকল্প টেক্সট",
+DlgImgWidth			: "প্রস্থ",
+DlgImgHeight		: "দৈর্ঘ্য",
+DlgImgLockRatio		: "অনুপাত লক কর",
+DlgBtnResetSize		: "সাইজ পূর্বাবস্থায় ফিরিয়ে দাও",
+DlgImgBorder		: "বর্ডার",
+DlgImgHSpace		: "হরাইজন্টাল স্পেস",
+DlgImgVSpace		: "ভার্টিকেল স্পেস",
+DlgImgAlign			: "এলাইন",
+DlgImgAlignLeft		: "বামে",
+DlgImgAlignAbsBottom: "Abs নীচে",
+DlgImgAlignAbsMiddle: "Abs উপর",
+DlgImgAlignBaseline	: "মূল রেখা",
+DlgImgAlignBottom	: "নীচে",
+DlgImgAlignMiddle	: "মধ্য",
+DlgImgAlignRight	: "ডানে",
+DlgImgAlignTextTop	: "টেক্সট উপর",
+DlgImgAlignTop		: "উপর",
+DlgImgPreview		: "প্রীভিউ",
+DlgImgAlertUrl		: "অনুগ্রহক করে ছবির URL টাইপ করুন",
+DlgImgLinkTab		: "লিংক",
+
+// Flash Dialog
+DlgFlashTitle		: "ফ্ল্যাশ প্রোপার্টি",
+DlgFlashChkPlay		: "অটো প্লে",
+DlgFlashChkLoop		: "লূপ",
+DlgFlashChkMenu		: "ফ্ল্যাশ মেনু এনাবল কর",
+DlgFlashScale		: "স্কেল",
+DlgFlashScaleAll	: "সব দেখাও",
+DlgFlashScaleNoBorder	: "কোনো বর্ডার নেই",
+DlgFlashScaleFit	: "নিখুঁত ফিট",
+
+// Link Dialog
+DlgLnkWindowTitle	: "লিংক",
+DlgLnkInfoTab		: "লিংক তথ্য",
+DlgLnkTargetTab		: "টার্গেট",
+
+DlgLnkType			: "লিংক প্রকার",
+DlgLnkTypeURL		: "URL",
+DlgLnkTypeAnchor	: "এই পেজে নোঙর কর",
+DlgLnkTypeEMail		: "ইমেইল",
+DlgLnkProto			: "প্রোটোকল",
+DlgLnkProtoOther	: "<অন্য>",
+DlgLnkURL			: "URL",
+DlgLnkAnchorSel		: "নোঙর বাছাই",
+DlgLnkAnchorByName	: "নোঙরের নাম দিয়ে",
+DlgLnkAnchorById	: "নোঙরের আইডি দিয়ে",
+DlgLnkNoAnchors		: "(No anchors available in the document)",	//MISSING
+DlgLnkEMail			: "ইমেইল ঠিকানা",
+DlgLnkEMailSubject	: "মেসেজের বিষয়",
+DlgLnkEMailBody		: "মেসেজের দেহ",
+DlgLnkUpload		: "আপলোড",
+DlgLnkBtnUpload		: "একে সার্ভারে পাঠাও",
+
+DlgLnkTarget		: "টার্গেট",
+DlgLnkTargetFrame	: "<ফ্রেম>",
+DlgLnkTargetPopup	: "<পপআপ উইন্ডো>",
+DlgLnkTargetBlank	: "নতুন উইন্ডো (_blank)",
+DlgLnkTargetParent	: "মূল উইন্ডো (_parent)",
+DlgLnkTargetSelf	: "এই উইন্ডো (_self)",
+DlgLnkTargetTop		: "শীর্ষ উইন্ডো (_top)",
+DlgLnkTargetFrameName	: "টার্গেট ফ্রেমের নাম",
+DlgLnkPopWinName	: "পপআপ উইন্ডোর নাম",
+DlgLnkPopWinFeat	: "পপআপ উইন্ডো ফীচার সমূহ",
+DlgLnkPopResize		: "রিসাইজ করা সম্ভব",
+DlgLnkPopLocation	: "লোকেশন বার",
+DlgLnkPopMenu		: "মেন্যু বার",
+DlgLnkPopScroll		: "স্ক্রল বার",
+DlgLnkPopStatus		: "স্ট্যাটাস বার",
+DlgLnkPopToolbar	: "টুল বার",
+DlgLnkPopFullScrn	: "পূর্ণ পর্দা জুড়ে (IE)",
+DlgLnkPopDependent	: "ডিপেন্ডেন্ট (Netscape)",
+DlgLnkPopWidth		: "প্রস্থ",
+DlgLnkPopHeight		: "দৈর্ঘ্য",
+DlgLnkPopLeft		: "বামের পজিশন",
+DlgLnkPopTop		: "ডানের পজিশন",
+
+DlnLnkMsgNoUrl		: "অনুগ্রহ করে URL লিংক টাইপ করুন",
+DlnLnkMsgNoEMail	: "অনুগ্রহ করে ইমেইল এড্রেস টাইপ করুন",
+DlnLnkMsgNoAnchor	: "অনুগ্রহ করে নোঙর বাছাই করুন",
+DlnLnkMsgInvPopName	: "The popup name must begin with an alphabetic character and must not contain spaces",	//MISSING
+
+// Color Dialog
+DlgColorTitle		: "রং বাছাই কর",
+DlgColorBtnClear	: "পরিষ্কার কর",
+DlgColorHighlight	: "হাইলাইট",
+DlgColorSelected	: "সিলেক্টেড",
+
+// Smiley Dialog
+DlgSmileyTitle		: "স্মাইলী যুক্ত কর",
+
+// Special Character Dialog
+DlgSpecialCharTitle	: "বিশেষ ক্যারেক্টার বাছাই কর",
+
+// Table Dialog
+DlgTableTitle		: "টেবিল প্রোপার্টি",
+DlgTableRows		: "রো",
+DlgTableColumns		: "কলাম",
+DlgTableBorder		: "বর্ডার সাইজ",
+DlgTableAlign		: "এলাইনমেন্ট",
+DlgTableAlignNotSet	: "<সেট নেই>",
+DlgTableAlignLeft	: "বামে",
+DlgTableAlignCenter	: "মাঝখানে",
+DlgTableAlignRight	: "ডানে",
+DlgTableWidth		: "প্রস্থ",
+DlgTableWidthPx		: "পিক্সেল",
+DlgTableWidthPc		: "শতকরা",
+DlgTableHeight		: "দৈর্ঘ্য",
+DlgTableCellSpace	: "সেল স্পেস",
+DlgTableCellPad		: "সেল প্যাডিং",
+DlgTableCaption		: "শীর্ষক",
+DlgTableSummary		: "সারাংশ",
+
+// Table Cell Dialog
+DlgCellTitle		: "সেল প্রোপার্টি",
+DlgCellWidth		: "প্রস্থ",
+DlgCellWidthPx		: "পিক্সেল",
+DlgCellWidthPc		: "শতকরা",
+DlgCellHeight		: "দৈর্ঘ্য",
+DlgCellWordWrap		: "ওয়ার্ড রেপ",
+DlgCellWordWrapNotSet	: "<সেট নেই>",
+DlgCellWordWrapYes	: "হাঁ",
+DlgCellWordWrapNo	: "না",
+DlgCellHorAlign		: "হরাইজন্টাল এলাইনমেন্ট",
+DlgCellHorAlignNotSet	: "<সেট নেই>",
+DlgCellHorAlignLeft	: "বামে",
+DlgCellHorAlignCenter	: "মাঝখানে",
+DlgCellHorAlignRight: "ডানে",
+DlgCellVerAlign		: "ভার্টিক্যাল এলাইনমেন্ট",
+DlgCellVerAlignNotSet	: "<সেট নেই>",
+DlgCellVerAlignTop	: "উপর",
+DlgCellVerAlignMiddle	: "মধ্য",
+DlgCellVerAlignBottom	: "নীচে",
+DlgCellVerAlignBaseline	: "মূলরেখা",
+DlgCellRowSpan		: "রো স্প্যান",
+DlgCellCollSpan		: "কলাম স্প্যান",
+DlgCellBackColor	: "ব্যাকগ্রাউন্ড রং",
+DlgCellBorderColor	: "বর্ডারের রং",
+DlgCellBtnSelect	: "বাছাই কর",
+
+// Find and Replace Dialog
+DlgFindAndReplaceTitle	: "Find and Replace",	//MISSING
+
+// Find Dialog
+DlgFindTitle		: "খোঁজো",
+DlgFindFindBtn		: "খোঁজো",
+DlgFindNotFoundMsg	: "আপনার উল্লেখিত টেকস্ট পাওয়া যায়নি",
+
+// Replace Dialog
+DlgReplaceTitle			: "বদলে দাও",
+DlgReplaceFindLbl		: "যা খুঁজতে হবে:",
+DlgReplaceReplaceLbl	: "যার সাথে বদলাতে হবে:",
+DlgReplaceCaseChk		: "কেস মিলাও",
+DlgReplaceReplaceBtn	: "বদলে দাও",
+DlgReplaceReplAllBtn	: "সব বদলে দাও",
+DlgReplaceWordChk		: "পুরা শব্দ মেলাও",
+
+// Paste Operations / Dialog
+PasteErrorCut	: "আপনার ব্রাউজারের সুরক্ষা সেটিংস এডিটরকে অটোমেটিক কাট করার অনুমতি দেয়নি। দয়া করে এই কাজের জন্য কিবোর্ড ব্যবহার করুন (Ctrl+X)।",
+PasteErrorCopy	: "আপনার ব্রাউজারের সুরক্ষা সেটিংস এডিটরকে অটোমেটিক কপি করার অনুমতি দেয়নি। দয়া করে এই কাজের জন্য কিবোর্ড ব্যবহার করুন (Ctrl+C)।",
+
+PasteAsText		: "সাদা টেক্সট হিসেবে পেস্ট কর",
+PasteFromWord	: "ওয়ার্ড থেকে পেস্ট কর",
+
+DlgPasteMsg2	: "অনুগ্রহ করে নীচের বাক্সে কিবোর্ড ব্যবহার করে (<STRONG>Ctrl+V</STRONG>) পেস্ট করুন এবং <STRONG>OK</STRONG> চাপ দিন",
+DlgPasteSec		: "Because of your browser security settings, the editor is not able to access your clipboard data directly. You are required to paste it again in this window.",	//MISSING
+DlgPasteIgnoreFont		: "ফন্ট ফেস ডেফিনেশন ইগনোর করুন",
+DlgPasteRemoveStyles	: "স্টাইল ডেফিনেশন সরিয়ে দিন",
+
+// Color Picker
+ColorAutomatic	: "অটোমেটিক",
+ColorMoreColors	: "আরও রং...",
+
+// Document Properties
+DocProps		: "ডক্যুমেন্ট প্রোপার্টি",
+
+// Anchor Dialog
+DlgAnchorTitle		: "নোঙরের প্রোপার্টি",
+DlgAnchorName		: "নোঙরের নাম",
+DlgAnchorErrorName	: "নোঙরের নাম টাইপ করুন",
+
+// Speller Pages Dialog
+DlgSpellNotInDic		: "শব্দকোষে নেই",
+DlgSpellChangeTo		: "এতে বদলাও",
+DlgSpellBtnIgnore		: "ইগনোর কর",
+DlgSpellBtnIgnoreAll	: "সব ইগনোর কর",
+DlgSpellBtnReplace		: "বদলে দাও",
+DlgSpellBtnReplaceAll	: "সব বদলে দাও",
+DlgSpellBtnUndo			: "আন্ডু",
+DlgSpellNoSuggestions	: "- কোন সাজেশন নেই -",
+DlgSpellProgress		: "বানান পরীক্ষা চলছে...",
+DlgSpellNoMispell		: "বানান পরীক্ষা শেষ: কোন ভুল বানান পাওয়া যায়নি",
+DlgSpellNoChanges		: "বানান পরীক্ষা শেষ: কোন শব্দ পরিবর্তন করা হয়নি",
+DlgSpellOneChange		: "বানান পরীক্ষা শেষ: একটি মাত্র শব্দ পরিবর্তন করা হয়েছে",
+DlgSpellManyChanges		: "বানান পরীক্ষা শেষ: %1 গুলো শব্দ বদলে গ্যাছে",
+
+IeSpellDownload			: "বানান পরীক্ষক ইনস্টল করা নেই। আপনি কি এখনই এটা ডাউনলোড করতে চান?",
+
+// Button Dialog
+DlgButtonText		: "টেক্সট (ভ্যালু)",
+DlgButtonType		: "প্রকার",
+DlgButtonTypeBtn	: "Button",	//MISSING
+DlgButtonTypeSbm	: "Submit",	//MISSING
+DlgButtonTypeRst	: "Reset",	//MISSING
+
+// Checkbox and Radio Button Dialogs
+DlgCheckboxName		: "নাম",
+DlgCheckboxValue	: "ভ্যালু",
+DlgCheckboxSelected	: "সিলেক্টেড",
+
+// Form Dialog
+DlgFormName		: "নাম",
+DlgFormAction	: "একশ্যন",
+DlgFormMethod	: "পদ্ধতি",
+
+// Select Field Dialog
+DlgSelectName		: "নাম",
+DlgSelectValue		: "ভ্যালু",
+DlgSelectSize		: "সাইজ",
+DlgSelectLines		: "লাইন সমূহ",
+DlgSelectChkMulti	: "একাধিক সিলেকশন এলাউ কর",
+DlgSelectOpAvail	: "অন্যান্য বিকল্প",
+DlgSelectOpText		: "টেক্সট",
+DlgSelectOpValue	: "ভ্যালু",
+DlgSelectBtnAdd		: "যুক্ত",
+DlgSelectBtnModify	: "বদলে দাও",
+DlgSelectBtnUp		: "উপর",
+DlgSelectBtnDown	: "নীচে",
+DlgSelectBtnSetValue : "বাছাই করা ভ্যালু হিসেবে সেট কর",
+DlgSelectBtnDelete	: "ডিলীট",
+
+// Textarea Dialog
+DlgTextareaName	: "নাম",
+DlgTextareaCols	: "কলাম",
+DlgTextareaRows	: "রো",
+
+// Text Field Dialog
+DlgTextName			: "নাম",
+DlgTextValue		: "ভ্যালু",
+DlgTextCharWidth	: "ক্যারেক্টার প্রশস্ততা",
+DlgTextMaxChars		: "সর্বাধিক ক্যারেক্টার",
+DlgTextType			: "টাইপ",
+DlgTextTypeText		: "টেক্সট",
+DlgTextTypePass		: "পাসওয়ার্ড",
+
+// Hidden Field Dialog
+DlgHiddenName	: "নাম",
+DlgHiddenValue	: "ভ্যালু",
+
+// Bulleted List Dialog
+BulletedListProp	: "বুলেটেড সূচী প্রোপার্টি",
+NumberedListProp	: "সাংখ্যিক সূচী প্রোপার্টি",
+DlgLstStart			: "Start",	//MISSING
+DlgLstType			: "প্রকার",
+DlgLstTypeCircle	: "গোল",
+DlgLstTypeDisc		: "ডিস্ক",
+DlgLstTypeSquare	: "চৌকোণা",
+DlgLstTypeNumbers	: "সংখ্যা (1, 2, 3)",
+DlgLstTypeLCase		: "ছোট অক্ষর (a, b, c)",
+DlgLstTypeUCase		: "বড় অক্ষর (A, B, C)",
+DlgLstTypeSRoman	: "ছোট রোমান সংখ্যা (i, ii, iii)",
+DlgLstTypeLRoman	: "বড় রোমান সংখ্যা (I, II, III)",
+
+// Document Properties Dialog
+DlgDocGeneralTab	: "সাধারন",
+DlgDocBackTab		: "ব্যাকগ্রাউন্ড",
+DlgDocColorsTab		: "রং এবং মার্জিন",
+DlgDocMetaTab		: "মেটাডেটা",
+
+DlgDocPageTitle		: "পেজ শীর্ষক",
+DlgDocLangDir		: "ভাষা লিখার দিক",
+DlgDocLangDirLTR	: "বাম থেকে ডানে (LTR)",
+DlgDocLangDirRTL	: "ডান থেকে বামে (RTL)",
+DlgDocLangCode		: "ভাষা কোড",
+DlgDocCharSet		: "ক্যারেক্টার সেট এনকোডিং",
+DlgDocCharSetCE		: "Central European",	//MISSING
+DlgDocCharSetCT		: "Chinese Traditional (Big5)",	//MISSING
+DlgDocCharSetCR		: "Cyrillic",	//MISSING
+DlgDocCharSetGR		: "Greek",	//MISSING
+DlgDocCharSetJP		: "Japanese",	//MISSING
+DlgDocCharSetKR		: "Korean",	//MISSING
+DlgDocCharSetTR		: "Turkish",	//MISSING
+DlgDocCharSetUN		: "Unicode (UTF-8)",	//MISSING
+DlgDocCharSetWE		: "Western European",	//MISSING
+DlgDocCharSetOther	: "অন্য ক্যারেক্টার সেট এনকোডিং",
+
+DlgDocDocType		: "ডক্যুমেন্ট টাইপ হেডিং",
+DlgDocDocTypeOther	: "অন্য ডক্যুমেন্ট টাইপ হেডিং",
+DlgDocIncXHTML		: "XHTML ডেক্লারেশন যুক্ত কর",
+DlgDocBgColor		: "ব্যাকগ্রাউন্ড রং",
+DlgDocBgImage		: "ব্যাকগ্রাউন্ড ছবির URL",
+DlgDocBgNoScroll	: "স্ক্রলহীন ব্যাকগ্রাউন্ড",
+DlgDocCText			: "টেক্সট",
+DlgDocCLink			: "লিংক",
+DlgDocCVisited		: "ভিজিট করা লিংক",
+DlgDocCActive		: "সক্রিয় লিংক",
+DlgDocMargins		: "পেজ মার্জিন",
+DlgDocMaTop			: "উপর",
+DlgDocMaLeft		: "বামে",
+DlgDocMaRight		: "ডানে",
+DlgDocMaBottom		: "নীচে",
+DlgDocMeIndex		: "ডক্যুমেন্ট ইন্ডেক্স কিওয়ার্ড (কমা দ্বারা বিচ্ছিন্ন)",
+DlgDocMeDescr		: "ডক্যূমেন্ট বর্ণনা",
+DlgDocMeAuthor		: "লেখক",
+DlgDocMeCopy		: "কপীরাইট",
+DlgDocPreview		: "প্রীভিউ",
+
+// Templates Dialog
+Templates			: "টেমপ্লেট",
+DlgTemplatesTitle	: "কনটেন্ট টেমপ্লেট",
+DlgTemplatesSelMsg	: "অনুগ্রহ করে এডিটরে ওপেন করার জন্য টেমপ্লেট বাছাই করুন<br>(আসল কনটেন্ট হারিয়ে যাবে):",
+DlgTemplatesLoading	: "টেমপ্লেট লিস্ট হারিয়ে যাবে। অনুগ্রহ করে অপেক্ষা করুন...",
+DlgTemplatesNoTpl	: "(কোন টেমপ্লেট ডিফাইন করা নেই)",
+DlgTemplatesReplace	: "Replace actual contents",	//MISSING
+
+// About Dialog
+DlgAboutAboutTab	: "কে বানিয়েছে",
+DlgAboutBrowserInfoTab	: "ব্রাউজারের ব্যাপারে তথ্য",
+DlgAboutLicenseTab	: "লাইসেন্স",
+DlgAboutVersion		: "ভার্সন",
+DlgAboutInfo		: "আরও তথ্যের জন্য যান"
+};


Property changes on: announcement/trunk/src/main/webapp/fckeditor/editor/lang/bn.js
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/webapp/fckeditor/editor/lang/bs.js
===================================================================
--- announcement/trunk/src/main/webapp/fckeditor/editor/lang/bs.js	                        (rev 0)
+++ announcement/trunk/src/main/webapp/fckeditor/editor/lang/bs.js	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,515 @@
+/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2008 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * Bosnian language file.
+ */
+
+var FCKLang =
+{
+// Language direction : "ltr" (left to right) or "rtl" (right to left).
+Dir					: "ltr",
+
+ToolbarCollapse		: "Skupi trake sa alatima",
+ToolbarExpand		: "Otvori trake sa alatima",
+
+// Toolbar Items and Context Menu
+Save				: "Snimi",
+NewPage				: "Novi dokument",
+Preview				: "Prikaži",
+Cut					: "Izreži",
+Copy				: "Kopiraj",
+Paste				: "Zalijepi",
+PasteText			: "Zalijepi kao obièan tekst",
+PasteWord			: "Zalijepi iz Word-a",
+Print				: "Štampaj",
+SelectAll			: "Selektuj sve",
+RemoveFormat		: "Poništi format",
+InsertLinkLbl		: "Link",
+InsertLink			: "Ubaci/Izmjeni link",
+RemoveLink			: "Izbriši link",
+Anchor				: "Insert/Edit Anchor",	//MISSING
+AnchorDelete		: "Remove Anchor",	//MISSING
+InsertImageLbl		: "Slika",
+InsertImage			: "Ubaci/Izmjeni sliku",
+InsertFlashLbl		: "Flash",	//MISSING
+InsertFlash			: "Insert/Edit Flash",	//MISSING
+InsertTableLbl		: "Tabela",
+InsertTable			: "Ubaci/Izmjeni tabelu",
+InsertLineLbl		: "Linija",
+InsertLine			: "Ubaci horizontalnu liniju",
+InsertSpecialCharLbl: "Specijalni karakter",
+InsertSpecialChar	: "Ubaci specijalni karater",
+InsertSmileyLbl		: "Smješko",
+InsertSmiley		: "Ubaci smješka",
+About				: "O FCKeditor-u",
+Bold				: "Boldiraj",
+Italic				: "Ukosi",
+Underline			: "Podvuci",
+StrikeThrough		: "Precrtaj",
+Subscript			: "Subscript",
+Superscript			: "Superscript",
+LeftJustify			: "Lijevo poravnanje",
+CenterJustify		: "Centralno poravnanje",
+RightJustify		: "Desno poravnanje",
+BlockJustify		: "Puno poravnanje",
+DecreaseIndent		: "Smanji uvod",
+IncreaseIndent		: "Poveæaj uvod",
+Blockquote			: "Blockquote",	//MISSING
+Undo				: "Vrati",
+Redo				: "Ponovi",
+NumberedListLbl		: "Numerisana lista",
+NumberedList		: "Ubaci/Izmjeni numerisanu listu",
+BulletedListLbl		: "Lista",
+BulletedList		: "Ubaci/Izmjeni listu",
+ShowTableBorders	: "Pokaži okvire tabela",
+ShowDetails			: "Pokaži detalje",
+Style				: "Stil",
+FontFormat			: "Format",
+Font				: "Font",
+FontSize			: "Velièina",
+TextColor			: "Boja teksta",
+BGColor				: "Boja pozadine",
+Source				: "HTML kôd",
+Find				: "Naði",
+Replace				: "Zamjeni",
+SpellCheck			: "Check Spelling",	//MISSING
+UniversalKeyboard	: "Universal Keyboard",	//MISSING
+PageBreakLbl		: "Page Break",	//MISSING
+PageBreak			: "Insert Page Break",	//MISSING
+
+Form			: "Form",	//MISSING
+Checkbox		: "Checkbox",	//MISSING
+RadioButton		: "Radio Button",	//MISSING
+TextField		: "Text Field",	//MISSING
+Textarea		: "Textarea",	//MISSING
+HiddenField		: "Hidden Field",	//MISSING
+Button			: "Button",	//MISSING
+SelectionField	: "Selection Field",	//MISSING
+ImageButton		: "Image Button",	//MISSING
+
+FitWindow		: "Maximize the editor size",	//MISSING
+ShowBlocks		: "Show Blocks",	//MISSING
+
+// Context Menu
+EditLink			: "Izmjeni link",
+CellCM				: "Cell",	//MISSING
+RowCM				: "Row",	//MISSING
+ColumnCM			: "Column",	//MISSING
+InsertRowAfter		: "Insert Row After",	//MISSING
+InsertRowBefore		: "Insert Row Before",	//MISSING
+DeleteRows			: "Briši redove",
+InsertColumnAfter	: "Insert Column After",	//MISSING
+InsertColumnBefore	: "Insert Column Before",	//MISSING
+DeleteColumns		: "Briši kolone",
+InsertCellAfter		: "Insert Cell After",	//MISSING
+InsertCellBefore	: "Insert Cell Before",	//MISSING
+DeleteCells			: "Briši æelije",
+MergeCells			: "Spoji æelije",
+MergeRight			: "Merge Right",	//MISSING
+MergeDown			: "Merge Down",	//MISSING
+HorizontalSplitCell	: "Split Cell Horizontally",	//MISSING
+VerticalSplitCell	: "Split Cell Vertically",	//MISSING
+TableDelete			: "Delete Table",	//MISSING
+CellProperties		: "Svojstva æelije",
+TableProperties		: "Svojstva tabele",
+ImageProperties		: "Svojstva slike",
+FlashProperties		: "Flash Properties",	//MISSING
+
+AnchorProp			: "Anchor Properties",	//MISSING
+ButtonProp			: "Button Properties",	//MISSING
+CheckboxProp		: "Checkbox Properties",	//MISSING
+HiddenFieldProp		: "Hidden Field Properties",	//MISSING
+RadioButtonProp		: "Radio Button Properties",	//MISSING
+ImageButtonProp		: "Image Button Properties",	//MISSING
+TextFieldProp		: "Text Field Properties",	//MISSING
+SelectionFieldProp	: "Selection Field Properties",	//MISSING
+TextareaProp		: "Textarea Properties",	//MISSING
+FormProp			: "Form Properties",	//MISSING
+
+FontFormats			: "Normal;Formatted;Address;Heading 1;Heading 2;Heading 3;Heading 4;Heading 5;Heading 6",
+
+// Alerts and Messages
+ProcessingXHTML		: "Procesiram XHTML. Molim saèekajte...",
+Done				: "Gotovo",
+PasteWordConfirm	: "Tekst koji želite zalijepiti èini se da je kopiran iz Worda. Da li želite da se prvo oèisti?",
+NotCompatiblePaste	: "Ova komanda je podržana u Internet Explorer-u verzijama 5.5 ili novijim. Da li želite da izvršite lijepljenje teksta bez èišæenja?",
+UnknownToolbarItem	: "Nepoznata stavka sa trake sa alatima \"%1\"",
+UnknownCommand		: "Nepoznata komanda \"%1\"",
+NotImplemented		: "Komanda nije implementirana",
+UnknownToolbarSet	: "Traka sa alatima \"%1\" ne postoji",
+NoActiveX			: "Your browser's security settings could limit some features of the editor. You must enable the option \"Run ActiveX controls and plug-ins\". You may experience errors and notice missing features.",	//MISSING
+BrowseServerBlocked : "The resources browser could not be opened. Make sure that all popup blockers are disabled.",	//MISSING
+DialogBlocked		: "It was not possible to open the dialog window. Make sure all popup blockers are disabled.",	//MISSING
+
+// Dialogs
+DlgBtnOK			: "OK",
+DlgBtnCancel		: "Odustani",
+DlgBtnClose			: "Zatvori",
+DlgBtnBrowseServer	: "Browse Server",	//MISSING
+DlgAdvancedTag		: "Naprednije",
+DlgOpOther			: "<Other>",	//MISSING
+DlgInfoTab			: "Info",	//MISSING
+DlgAlertUrl			: "Please insert the URL",	//MISSING
+
+// General Dialogs Labels
+DlgGenNotSet		: "<nije podešeno>",
+DlgGenId			: "Id",
+DlgGenLangDir		: "Smjer pisanja",
+DlgGenLangDirLtr	: "S lijeva na desno (LTR)",
+DlgGenLangDirRtl	: "S desna na lijevo (RTL)",
+DlgGenLangCode		: "Jezièni kôd",
+DlgGenAccessKey		: "Pristupna tipka",
+DlgGenName			: "Naziv",
+DlgGenTabIndex		: "Tab indeks",
+DlgGenLongDescr		: "Dugaèki opis URL-a",
+DlgGenClass			: "Klase CSS stilova",
+DlgGenTitle			: "Advisory title",
+DlgGenContType		: "Advisory vrsta sadržaja",
+DlgGenLinkCharset	: "Linked Resource Charset",
+DlgGenStyle			: "Stil",
+
+// Image Dialog
+DlgImgTitle			: "Svojstva slike",
+DlgImgInfoTab		: "Info slike",
+DlgImgBtnUpload		: "Šalji na server",
+DlgImgURL			: "URL",
+DlgImgUpload		: "Šalji",
+DlgImgAlt			: "Tekst na slici",
+DlgImgWidth			: "Širina",
+DlgImgHeight		: "Visina",
+DlgImgLockRatio		: "Zakljuèaj odnos",
+DlgBtnResetSize		: "Resetuj dimenzije",
+DlgImgBorder		: "Okvir",
+DlgImgHSpace		: "HSpace",
+DlgImgVSpace		: "VSpace",
+DlgImgAlign			: "Poravnanje",
+DlgImgAlignLeft		: "Lijevo",
+DlgImgAlignAbsBottom: "Abs dole",
+DlgImgAlignAbsMiddle: "Abs sredina",
+DlgImgAlignBaseline	: "Bazno",
+DlgImgAlignBottom	: "Dno",
+DlgImgAlignMiddle	: "Sredina",
+DlgImgAlignRight	: "Desno",
+DlgImgAlignTextTop	: "Vrh teksta",
+DlgImgAlignTop		: "Vrh",
+DlgImgPreview		: "Prikaz",
+DlgImgAlertUrl		: "Molimo ukucajte URL od slike.",
+DlgImgLinkTab		: "Link",	//MISSING
+
+// Flash Dialog
+DlgFlashTitle		: "Flash Properties",	//MISSING
+DlgFlashChkPlay		: "Auto Play",	//MISSING
+DlgFlashChkLoop		: "Loop",	//MISSING
+DlgFlashChkMenu		: "Enable Flash Menu",	//MISSING
+DlgFlashScale		: "Scale",	//MISSING
+DlgFlashScaleAll	: "Show all",	//MISSING
+DlgFlashScaleNoBorder	: "No Border",	//MISSING
+DlgFlashScaleFit	: "Exact Fit",	//MISSING
+
+// Link Dialog
+DlgLnkWindowTitle	: "Link",
+DlgLnkInfoTab		: "Link info",
+DlgLnkTargetTab		: "Prozor",
+
+DlgLnkType			: "Tip linka",
+DlgLnkTypeURL		: "URL",
+DlgLnkTypeAnchor	: "Sidro na ovoj stranici",
+DlgLnkTypeEMail		: "E-Mail",
+DlgLnkProto			: "Protokol",
+DlgLnkProtoOther	: "<drugi>",
+DlgLnkURL			: "URL",
+DlgLnkAnchorSel		: "Izaberi sidro",
+DlgLnkAnchorByName	: "Po nazivu sidra",
+DlgLnkAnchorById	: "Po Id-u elementa",
+DlgLnkNoAnchors		: "(Nema dostupnih sidra na stranici)",
+DlgLnkEMail			: "E-Mail Adresa",
+DlgLnkEMailSubject	: "Subjekt poruke",
+DlgLnkEMailBody		: "Poruka",
+DlgLnkUpload		: "Šalji",
+DlgLnkBtnUpload		: "Šalji na server",
+
+DlgLnkTarget		: "Prozor",
+DlgLnkTargetFrame	: "<frejm>",
+DlgLnkTargetPopup	: "<popup prozor>",
+DlgLnkTargetBlank	: "Novi prozor (_blank)",
+DlgLnkTargetParent	: "Glavni prozor (_parent)",
+DlgLnkTargetSelf	: "Isti prozor (_self)",
+DlgLnkTargetTop		: "Najgornji prozor (_top)",
+DlgLnkTargetFrameName	: "Target Frame Name",	//MISSING
+DlgLnkPopWinName	: "Naziv popup prozora",
+DlgLnkPopWinFeat	: "Moguænosti popup prozora",
+DlgLnkPopResize		: "Promjenljive velièine",
+DlgLnkPopLocation	: "Traka za lokaciju",
+DlgLnkPopMenu		: "Izborna traka",
+DlgLnkPopScroll		: "Scroll traka",
+DlgLnkPopStatus		: "Statusna traka",
+DlgLnkPopToolbar	: "Traka sa alatima",
+DlgLnkPopFullScrn	: "Cijeli ekran (IE)",
+DlgLnkPopDependent	: "Ovisno (Netscape)",
+DlgLnkPopWidth		: "Širina",
+DlgLnkPopHeight		: "Visina",
+DlgLnkPopLeft		: "Lijeva pozicija",
+DlgLnkPopTop		: "Gornja pozicija",
+
+DlnLnkMsgNoUrl		: "Molimo ukucajte URL link",
+DlnLnkMsgNoEMail	: "Molimo ukucajte e-mail adresu",
+DlnLnkMsgNoAnchor	: "Molimo izaberite sidro",
+DlnLnkMsgInvPopName	: "The popup name must begin with an alphabetic character and must not contain spaces",	//MISSING
+
+// Color Dialog
+DlgColorTitle		: "Izaberi boju",
+DlgColorBtnClear	: "Oèisti",
+DlgColorHighlight	: "Igled",
+DlgColorSelected	: "Selektovana",
+
+// Smiley Dialog
+DlgSmileyTitle		: "Ubaci smješka",
+
+// Special Character Dialog
+DlgSpecialCharTitle	: "Izaberi specijalni karakter",
+
+// Table Dialog
+DlgTableTitle		: "Svojstva tabele",
+DlgTableRows		: "Redova",
+DlgTableColumns		: "Kolona",
+DlgTableBorder		: "Okvir",
+DlgTableAlign		: "Poravnanje",
+DlgTableAlignNotSet	: "<Nije podešeno>",
+DlgTableAlignLeft	: "Lijevo",
+DlgTableAlignCenter	: "Centar",
+DlgTableAlignRight	: "Desno",
+DlgTableWidth		: "Širina",
+DlgTableWidthPx		: "piksela",
+DlgTableWidthPc		: "posto",
+DlgTableHeight		: "Visina",
+DlgTableCellSpace	: "Razmak æelija",
+DlgTableCellPad		: "Uvod æelija",
+DlgTableCaption		: "Naslov",
+DlgTableSummary		: "Summary",	//MISSING
+
+// Table Cell Dialog
+DlgCellTitle		: "Svojstva æelije",
+DlgCellWidth		: "Širina",
+DlgCellWidthPx		: "piksela",
+DlgCellWidthPc		: "posto",
+DlgCellHeight		: "Visina",
+DlgCellWordWrap		: "Vrapuj tekst",
+DlgCellWordWrapNotSet	: "<Nije podešeno>",
+DlgCellWordWrapYes	: "Da",
+DlgCellWordWrapNo	: "Ne",
+DlgCellHorAlign		: "Horizontalno poravnanje",
+DlgCellHorAlignNotSet	: "<Nije podešeno>",
+DlgCellHorAlignLeft	: "Lijevo",
+DlgCellHorAlignCenter	: "Centar",
+DlgCellHorAlignRight: "Desno",
+DlgCellVerAlign		: "Vertikalno poravnanje",
+DlgCellVerAlignNotSet	: "<Nije podešeno>",
+DlgCellVerAlignTop	: "Gore",
+DlgCellVerAlignMiddle	: "Sredina",
+DlgCellVerAlignBottom	: "Dno",
+DlgCellVerAlignBaseline	: "Bazno",
+DlgCellRowSpan		: "Spajanje æelija",
+DlgCellCollSpan		: "Spajanje kolona",
+DlgCellBackColor	: "Boja pozadine",
+DlgCellBorderColor	: "Boja okvira",
+DlgCellBtnSelect	: "Selektuj...",
+
+// Find and Replace Dialog
+DlgFindAndReplaceTitle	: "Find and Replace",	//MISSING
+
+// Find Dialog
+DlgFindTitle		: "Naði",
+DlgFindFindBtn		: "Naði",
+DlgFindNotFoundMsg	: "Traženi tekst nije pronaðen.",
+
+// Replace Dialog
+DlgReplaceTitle			: "Zamjeni",
+DlgReplaceFindLbl		: "Naði šta:",
+DlgReplaceReplaceLbl	: "Zamjeni sa:",
+DlgReplaceCaseChk		: "Uporeðuj velika/mala slova",
+DlgReplaceReplaceBtn	: "Zamjeni",
+DlgReplaceReplAllBtn	: "Zamjeni sve",
+DlgReplaceWordChk		: "Uporeðuj samo cijelu rijeè",
+
+// Paste Operations / Dialog
+PasteErrorCut	: "Sigurnosne postavke vašeg pretraživaèa ne dozvoljavaju operacije automatskog rezanja. Molimo koristite kraticu na tastaturi (Ctrl+X).",
+PasteErrorCopy	: "Sigurnosne postavke Vašeg pretraživaèa ne dozvoljavaju operacije automatskog kopiranja. Molimo koristite kraticu na tastaturi (Ctrl+C).",
+
+PasteAsText		: "Zalijepi kao obièan tekst",
+PasteFromWord	: "Zalijepi iz Word-a",
+
+DlgPasteMsg2	: "Please paste inside the following box using the keyboard (<strong>Ctrl+V</strong>) and hit <strong>OK</strong>.",	//MISSING
+DlgPasteSec		: "Because of your browser security settings, the editor is not able to access your clipboard data directly. You are required to paste it again in this window.",	//MISSING
+DlgPasteIgnoreFont		: "Ignore Font Face definitions",	//MISSING
+DlgPasteRemoveStyles	: "Remove Styles definitions",	//MISSING
+
+// Color Picker
+ColorAutomatic	: "Automatska",
+ColorMoreColors	: "Više boja...",
+
+// Document Properties
+DocProps		: "Document Properties",	//MISSING
+
+// Anchor Dialog
+DlgAnchorTitle		: "Anchor Properties",	//MISSING
+DlgAnchorName		: "Anchor Name",	//MISSING
+DlgAnchorErrorName	: "Please type the anchor name",	//MISSING
+
+// Speller Pages Dialog
+DlgSpellNotInDic		: "Not in dictionary",	//MISSING
+DlgSpellChangeTo		: "Change to",	//MISSING
+DlgSpellBtnIgnore		: "Ignore",	//MISSING
+DlgSpellBtnIgnoreAll	: "Ignore All",	//MISSING
+DlgSpellBtnReplace		: "Replace",	//MISSING
+DlgSpellBtnReplaceAll	: "Replace All",	//MISSING
+DlgSpellBtnUndo			: "Undo",	//MISSING
+DlgSpellNoSuggestions	: "- No suggestions -",	//MISSING
+DlgSpellProgress		: "Spell check in progress...",	//MISSING
+DlgSpellNoMispell		: "Spell check complete: No misspellings found",	//MISSING
+DlgSpellNoChanges		: "Spell check complete: No words changed",	//MISSING
+DlgSpellOneChange		: "Spell check complete: One word changed",	//MISSING
+DlgSpellManyChanges		: "Spell check complete: %1 words changed",	//MISSING
+
+IeSpellDownload			: "Spell checker not installed. Do you want to download it now?",	//MISSING
+
+// Button Dialog
+DlgButtonText		: "Text (Value)",	//MISSING
+DlgButtonType		: "Type",	//MISSING
+DlgButtonTypeBtn	: "Button",	//MISSING
+DlgButtonTypeSbm	: "Submit",	//MISSING
+DlgButtonTypeRst	: "Reset",	//MISSING
+
+// Checkbox and Radio Button Dialogs
+DlgCheckboxName		: "Name",	//MISSING
+DlgCheckboxValue	: "Value",	//MISSING
+DlgCheckboxSelected	: "Selected",	//MISSING
+
+// Form Dialog
+DlgFormName		: "Name",	//MISSING
+DlgFormAction	: "Action",	//MISSING
+DlgFormMethod	: "Method",	//MISSING
+
+// Select Field Dialog
+DlgSelectName		: "Name",	//MISSING
+DlgSelectValue		: "Value",	//MISSING
+DlgSelectSize		: "Size",	//MISSING
+DlgSelectLines		: "lines",	//MISSING
+DlgSelectChkMulti	: "Allow multiple selections",	//MISSING
+DlgSelectOpAvail	: "Available Options",	//MISSING
+DlgSelectOpText		: "Text",	//MISSING
+DlgSelectOpValue	: "Value",	//MISSING
+DlgSelectBtnAdd		: "Add",	//MISSING
+DlgSelectBtnModify	: "Modify",	//MISSING
+DlgSelectBtnUp		: "Up",	//MISSING
+DlgSelectBtnDown	: "Down",	//MISSING
+DlgSelectBtnSetValue : "Set as selected value",	//MISSING
+DlgSelectBtnDelete	: "Delete",	//MISSING
+
+// Textarea Dialog
+DlgTextareaName	: "Name",	//MISSING
+DlgTextareaCols	: "Columns",	//MISSING
+DlgTextareaRows	: "Rows",	//MISSING
+
+// Text Field Dialog
+DlgTextName			: "Name",	//MISSING
+DlgTextValue		: "Value",	//MISSING
+DlgTextCharWidth	: "Character Width",	//MISSING
+DlgTextMaxChars		: "Maximum Characters",	//MISSING
+DlgTextType			: "Type",	//MISSING
+DlgTextTypeText		: "Text",	//MISSING
+DlgTextTypePass		: "Password",	//MISSING
+
+// Hidden Field Dialog
+DlgHiddenName	: "Name",	//MISSING
+DlgHiddenValue	: "Value",	//MISSING
+
+// Bulleted List Dialog
+BulletedListProp	: "Bulleted List Properties",	//MISSING
+NumberedListProp	: "Numbered List Properties",	//MISSING
+DlgLstStart			: "Start",	//MISSING
+DlgLstType			: "Type",	//MISSING
+DlgLstTypeCircle	: "Circle",	//MISSING
+DlgLstTypeDisc		: "Disc",	//MISSING
+DlgLstTypeSquare	: "Square",	//MISSING
+DlgLstTypeNumbers	: "Numbers (1, 2, 3)",	//MISSING
+DlgLstTypeLCase		: "Lowercase Letters (a, b, c)",	//MISSING
+DlgLstTypeUCase		: "Uppercase Letters (A, B, C)",	//MISSING
+DlgLstTypeSRoman	: "Small Roman Numerals (i, ii, iii)",	//MISSING
+DlgLstTypeLRoman	: "Large Roman Numerals (I, II, III)",	//MISSING
+
+// Document Properties Dialog
+DlgDocGeneralTab	: "General",	//MISSING
+DlgDocBackTab		: "Background",	//MISSING
+DlgDocColorsTab		: "Colors and Margins",	//MISSING
+DlgDocMetaTab		: "Meta Data",	//MISSING
+
+DlgDocPageTitle		: "Page Title",	//MISSING
+DlgDocLangDir		: "Language Direction",	//MISSING
+DlgDocLangDirLTR	: "Left to Right (LTR)",	//MISSING
+DlgDocLangDirRTL	: "Right to Left (RTL)",	//MISSING
+DlgDocLangCode		: "Language Code",	//MISSING
+DlgDocCharSet		: "Character Set Encoding",	//MISSING
+DlgDocCharSetCE		: "Central European",	//MISSING
+DlgDocCharSetCT		: "Chinese Traditional (Big5)",	//MISSING
+DlgDocCharSetCR		: "Cyrillic",	//MISSING
+DlgDocCharSetGR		: "Greek",	//MISSING
+DlgDocCharSetJP		: "Japanese",	//MISSING
+DlgDocCharSetKR		: "Korean",	//MISSING
+DlgDocCharSetTR		: "Turkish",	//MISSING
+DlgDocCharSetUN		: "Unicode (UTF-8)",	//MISSING
+DlgDocCharSetWE		: "Western European",	//MISSING
+DlgDocCharSetOther	: "Other Character Set Encoding",	//MISSING
+
+DlgDocDocType		: "Document Type Heading",	//MISSING
+DlgDocDocTypeOther	: "Other Document Type Heading",	//MISSING
+DlgDocIncXHTML		: "Include XHTML Declarations",	//MISSING
+DlgDocBgColor		: "Background Color",	//MISSING
+DlgDocBgImage		: "Background Image URL",	//MISSING
+DlgDocBgNoScroll	: "Nonscrolling Background",	//MISSING
+DlgDocCText			: "Text",	//MISSING
+DlgDocCLink			: "Link",	//MISSING
+DlgDocCVisited		: "Visited Link",	//MISSING
+DlgDocCActive		: "Active Link",	//MISSING
+DlgDocMargins		: "Page Margins",	//MISSING
+DlgDocMaTop			: "Top",	//MISSING
+DlgDocMaLeft		: "Left",	//MISSING
+DlgDocMaRight		: "Right",	//MISSING
+DlgDocMaBottom		: "Bottom",	//MISSING
+DlgDocMeIndex		: "Document Indexing Keywords (comma separated)",	//MISSING
+DlgDocMeDescr		: "Document Description",	//MISSING
+DlgDocMeAuthor		: "Author",	//MISSING
+DlgDocMeCopy		: "Copyright",	//MISSING
+DlgDocPreview		: "Preview",	//MISSING
+
+// Templates Dialog
+Templates			: "Templates",	//MISSING
+DlgTemplatesTitle	: "Content Templates",	//MISSING
+DlgTemplatesSelMsg	: "Please select the template to open in the editor<br />(the actual contents will be lost):",	//MISSING
+DlgTemplatesLoading	: "Loading templates list. Please wait...",	//MISSING
+DlgTemplatesNoTpl	: "(No templates defined)",	//MISSING
+DlgTemplatesReplace	: "Replace actual contents",	//MISSING
+
+// About Dialog
+DlgAboutAboutTab	: "About",	//MISSING
+DlgAboutBrowserInfoTab	: "Browser Info",	//MISSING
+DlgAboutLicenseTab	: "License",	//MISSING
+DlgAboutVersion		: "verzija",
+DlgAboutInfo		: "Za više informacija posjetite"
+};


Property changes on: announcement/trunk/src/main/webapp/fckeditor/editor/lang/bs.js
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/webapp/fckeditor/editor/lang/ca.js
===================================================================
--- announcement/trunk/src/main/webapp/fckeditor/editor/lang/ca.js	                        (rev 0)
+++ announcement/trunk/src/main/webapp/fckeditor/editor/lang/ca.js	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,515 @@
+/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2008 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * Catalan language file.
+ */
+
+var FCKLang =
+{
+// Language direction : "ltr" (left to right) or "rtl" (right to left).
+Dir					: "ltr",
+
+ToolbarCollapse		: "Redueix la barra d'eines",
+ToolbarExpand		: "Amplia la barra d'eines",
+
+// Toolbar Items and Context Menu
+Save				: "Desa",
+NewPage				: "Nova Pàgina",
+Preview				: "Visualització prèvia",
+Cut					: "Retalla",
+Copy				: "Copia",
+Paste				: "Enganxa",
+PasteText			: "Enganxa com a text no formatat",
+PasteWord			: "Enganxa des del Word",
+Print				: "Imprimeix",
+SelectAll			: "Selecciona-ho tot",
+RemoveFormat		: "Elimina Format",
+InsertLinkLbl		: "Enllaç",
+InsertLink			: "Insereix/Edita enllaç",
+RemoveLink			: "Elimina enllaç",
+Anchor				: "Insereix/Edita àncora",
+AnchorDelete		: "Elimina àncora",
+InsertImageLbl		: "Imatge",
+InsertImage			: "Insereix/Edita imatge",
+InsertFlashLbl		: "Flash",
+InsertFlash			: "Insereix/Edita Flash",
+InsertTableLbl		: "Taula",
+InsertTable			: "Insereix/Edita taula",
+InsertLineLbl		: "Línia",
+InsertLine			: "Insereix línia horitzontal",
+InsertSpecialCharLbl: "Caràcter Especial",
+InsertSpecialChar	: "Insereix caràcter especial",
+InsertSmileyLbl		: "Icona",
+InsertSmiley		: "Insereix icona",
+About				: "Quant a l'FCKeditor",
+Bold				: "Negreta",
+Italic				: "Cursiva",
+Underline			: "Subratllat",
+StrikeThrough		: "Barrat",
+Subscript			: "Subíndex",
+Superscript			: "Superíndex",
+LeftJustify			: "Alinia a l'esquerra",
+CenterJustify		: "Centrat",
+RightJustify		: "Alinia a la dreta",
+BlockJustify		: "Justificat",
+DecreaseIndent		: "Redueix el sagnat",
+IncreaseIndent		: "Augmenta el sagnat",
+Blockquote			: "Bloc de cita",
+Undo				: "Desfés",
+Redo				: "Refés",
+NumberedListLbl		: "Llista numerada",
+NumberedList		: "Numeració activada/desactivada",
+BulletedListLbl		: "Llista de pics",
+BulletedList		: "Pics activats/descativats",
+ShowTableBorders	: "Mostra les vores de les taules",
+ShowDetails			: "Mostra detalls",
+Style				: "Estil",
+FontFormat			: "Format",
+Font				: "Tipus de lletra",
+FontSize			: "Mida",
+TextColor			: "Color de Text",
+BGColor				: "Color de Fons",
+Source				: "Codi font",
+Find				: "Cerca",
+Replace				: "Reemplaça",
+SpellCheck			: "Revisa l'ortografia",
+UniversalKeyboard	: "Teclat universal",
+PageBreakLbl		: "Salt de pàgina",
+PageBreak			: "Insereix salt de pàgina",
+
+Form			: "Formulari",
+Checkbox		: "Casella de verificació",
+RadioButton		: "Botó d'opció",
+TextField		: "Camp de text",
+Textarea		: "Àrea de text",
+HiddenField		: "Camp ocult",
+Button			: "Botó",
+SelectionField	: "Camp de selecció",
+ImageButton		: "Botó d'imatge",
+
+FitWindow		: "Maximiza la mida de l'editor",
+ShowBlocks		: "Mostra els blocs",
+
+// Context Menu
+EditLink			: "Edita l'enllaç",
+CellCM				: "Cel·la",
+RowCM				: "Fila",
+ColumnCM			: "Columna",
+InsertRowAfter		: "Insereix fila darrera",
+InsertRowBefore		: "Insereix fila abans de",
+DeleteRows			: "Suprimeix una fila",
+InsertColumnAfter	: "Insereix columna darrera",
+InsertColumnBefore	: "Insereix columna abans de",
+DeleteColumns		: "Suprimeix una columna",
+InsertCellAfter		: "Insereix cel·la darrera",
+InsertCellBefore	: "Insereix cel·la abans de",
+DeleteCells			: "Suprimeix les cel·les",
+MergeCells			: "Fusiona les cel·les",
+MergeRight			: "Fusiona cap a la dreta",
+MergeDown			: "Fusiona cap avall",
+HorizontalSplitCell	: "Divideix la cel·la horitzontalment",
+VerticalSplitCell	: "Divideix la cel·la verticalment",
+TableDelete			: "Suprimeix la taula",
+CellProperties		: "Propietats de la cel·la",
+TableProperties		: "Propietats de la taula",
+ImageProperties		: "Propietats de la imatge",
+FlashProperties		: "Propietats del Flash",
+
+AnchorProp			: "Propietats de l'àncora",
+ButtonProp			: "Propietats del botó",
+CheckboxProp		: "Propietats de la casella de verificació",
+HiddenFieldProp		: "Propietats del camp ocult",
+RadioButtonProp		: "Propietats del botó d'opció",
+ImageButtonProp		: "Propietats del botó d'imatge",
+TextFieldProp		: "Propietats del camp de text",
+SelectionFieldProp	: "Propietats del camp de selecció",
+TextareaProp		: "Propietats de l'àrea de text",
+FormProp			: "Propietats del formulari",
+
+FontFormats			: "Normal;Formatejat;Adreça;Encapçalament 1;Encapçalament 2;Encapçalament 3;Encapçalament 4;Encapçalament 5;Encapçalament 6;Normal (DIV)",
+
+// Alerts and Messages
+ProcessingXHTML		: "Processant XHTML. Si us plau esperi...",
+Done				: "Fet",
+PasteWordConfirm	: "El text que voleu enganxar sembla provenir de Word. Voleu netejar aquest text abans que sigui enganxat?",
+NotCompatiblePaste	: "Aquesta funció és disponible per a Internet Explorer versió 5.5 o superior. Voleu enganxar sense netejar?",
+UnknownToolbarItem	: "Element de la barra d'eines desconegut \"%1\"",
+UnknownCommand		: "Nom de comanda desconegut \"%1\"",
+NotImplemented		: "Mètode no implementat",
+UnknownToolbarSet	: "Conjunt de barra d'eines \"%1\" inexistent",
+NoActiveX			: "Les preferències del navegador poden limitar algunes funcions d'aquest editor. Cal habilitar l'opció \"Executa controls ActiveX i plug-ins\". Poden sorgir errors i poden faltar algunes funcions.",
+BrowseServerBlocked : "El visualitzador de recursos no s'ha pogut obrir. Assegura't de que els bloquejos de finestres emergents estan desactivats.",
+DialogBlocked		: "No ha estat possible obrir una finestra de diàleg. Assegura't de que els bloquejos de finestres emergents estan desactivats.",
+
+// Dialogs
+DlgBtnOK			: "D'acord",
+DlgBtnCancel		: "Cancel·la",
+DlgBtnClose			: "Tanca",
+DlgBtnBrowseServer	: "Veure servidor",
+DlgAdvancedTag		: "Avançat",
+DlgOpOther			: "Altres",
+DlgInfoTab			: "Info",
+DlgAlertUrl			: "Si us plau, afegiu la URL",
+
+// General Dialogs Labels
+DlgGenNotSet		: "<no definit>",
+DlgGenId			: "Id",
+DlgGenLangDir		: "Direcció de l'idioma",
+DlgGenLangDirLtr	: "D'esquerra a dreta (LTR)",
+DlgGenLangDirRtl	: "De dreta a esquerra (RTL)",
+DlgGenLangCode		: "Codi d'idioma",
+DlgGenAccessKey		: "Clau d'accés",
+DlgGenName			: "Nom",
+DlgGenTabIndex		: "Index de Tab",
+DlgGenLongDescr		: "Descripció llarga de la URL",
+DlgGenClass			: "Classes del full d'estil",
+DlgGenTitle			: "Títol consultiu",
+DlgGenContType		: "Tipus de contingut consultiu",
+DlgGenLinkCharset	: "Conjunt de caràcters font enllaçat",
+DlgGenStyle			: "Estil",
+
+// Image Dialog
+DlgImgTitle			: "Propietats de la imatge",
+DlgImgInfoTab		: "Informació de la imatge",
+DlgImgBtnUpload		: "Envia-la al servidor",
+DlgImgURL			: "URL",
+DlgImgUpload		: "Puja",
+DlgImgAlt			: "Text alternatiu",
+DlgImgWidth			: "Amplada",
+DlgImgHeight		: "Alçada",
+DlgImgLockRatio		: "Bloqueja les proporcions",
+DlgBtnResetSize		: "Restaura la mida",
+DlgImgBorder		: "Vora",
+DlgImgHSpace		: "Espaiat horit.",
+DlgImgVSpace		: "Espaiat vert.",
+DlgImgAlign			: "Alineació",
+DlgImgAlignLeft		: "Ajusta a l'esquerra",
+DlgImgAlignAbsBottom: "Abs Bottom",
+DlgImgAlignAbsMiddle: "Abs Middle",
+DlgImgAlignBaseline	: "Baseline",
+DlgImgAlignBottom	: "Bottom",
+DlgImgAlignMiddle	: "Middle",
+DlgImgAlignRight	: "Ajusta a la dreta",
+DlgImgAlignTextTop	: "Text Top",
+DlgImgAlignTop		: "Top",
+DlgImgPreview		: "Vista prèvia",
+DlgImgAlertUrl		: "Si us plau, escriviu la URL de la imatge",
+DlgImgLinkTab		: "Enllaç",
+
+// Flash Dialog
+DlgFlashTitle		: "Propietats del Flash",
+DlgFlashChkPlay		: "Reprodució automàtica",
+DlgFlashChkLoop		: "Bucle",
+DlgFlashChkMenu		: "Habilita menú Flash",
+DlgFlashScale		: "Escala",
+DlgFlashScaleAll	: "Mostra-ho tot",
+DlgFlashScaleNoBorder	: "Sense vores",
+DlgFlashScaleFit	: "Mida exacta",
+
+// Link Dialog
+DlgLnkWindowTitle	: "Enllaç",
+DlgLnkInfoTab		: "Informació de l'enllaç",
+DlgLnkTargetTab		: "Destí",
+
+DlgLnkType			: "Tipus d'enllaç",
+DlgLnkTypeURL		: "URL",
+DlgLnkTypeAnchor	: "Àncora en aquesta pàgina",
+DlgLnkTypeEMail		: "Correu electrònic",
+DlgLnkProto			: "Protocol",
+DlgLnkProtoOther	: "<altra>",
+DlgLnkURL			: "URL",
+DlgLnkAnchorSel		: "Selecciona una àncora",
+DlgLnkAnchorByName	: "Per nom d'àncora",
+DlgLnkAnchorById	: "Per Id d'element",
+DlgLnkNoAnchors		: "(No hi ha àncores disponibles en aquest document)",
+DlgLnkEMail			: "Adreça de correu electrònic",
+DlgLnkEMailSubject	: "Assumpte del missatge",
+DlgLnkEMailBody		: "Cos del missatge",
+DlgLnkUpload		: "Puja",
+DlgLnkBtnUpload		: "Envia al servidor",
+
+DlgLnkTarget		: "Destí",
+DlgLnkTargetFrame	: "<marc>",
+DlgLnkTargetPopup	: "<finestra emergent>",
+DlgLnkTargetBlank	: "Nova finestra (_blank)",
+DlgLnkTargetParent	: "Finestra pare (_parent)",
+DlgLnkTargetSelf	: "Mateixa finestra (_self)",
+DlgLnkTargetTop		: "Finestra Major (_top)",
+DlgLnkTargetFrameName	: "Nom del marc de destí",
+DlgLnkPopWinName	: "Nom finestra popup",
+DlgLnkPopWinFeat	: "Característiques finestra popup",
+DlgLnkPopResize		: "Redimensionable",
+DlgLnkPopLocation	: "Barra d'adreça",
+DlgLnkPopMenu		: "Barra de menú",
+DlgLnkPopScroll		: "Barres d'scroll",
+DlgLnkPopStatus		: "Barra d'estat",
+DlgLnkPopToolbar	: "Barra d'eines",
+DlgLnkPopFullScrn	: "Pantalla completa (IE)",
+DlgLnkPopDependent	: "Depenent (Netscape)",
+DlgLnkPopWidth		: "Amplada",
+DlgLnkPopHeight		: "Alçada",
+DlgLnkPopLeft		: "Posició esquerra",
+DlgLnkPopTop		: "Posició dalt",
+
+DlnLnkMsgNoUrl		: "Si us plau, escrigui l'enllaç URL",
+DlnLnkMsgNoEMail	: "Si us plau, escrigui l'adreça correu electrònic",
+DlnLnkMsgNoAnchor	: "Si us plau, escrigui l'àncora",
+DlnLnkMsgInvPopName	: "El nom de la finestra emergent ha de començar amb una lletra i no pot tenir espais",
+
+// Color Dialog
+DlgColorTitle		: "Selecciona el color",
+DlgColorBtnClear	: "Neteja",
+DlgColorHighlight	: "Realça",
+DlgColorSelected	: "Selecciona",
+
+// Smiley Dialog
+DlgSmileyTitle		: "Insereix una icona",
+
+// Special Character Dialog
+DlgSpecialCharTitle	: "Selecciona el caràcter especial",
+
+// Table Dialog
+DlgTableTitle		: "Propietats de la taula",
+DlgTableRows		: "Files",
+DlgTableColumns		: "Columnes",
+DlgTableBorder		: "Mida vora",
+DlgTableAlign		: "Alineació",
+DlgTableAlignNotSet	: "<No Definit>",
+DlgTableAlignLeft	: "Esquerra",
+DlgTableAlignCenter	: "Centre",
+DlgTableAlignRight	: "Dreta",
+DlgTableWidth		: "Amplada",
+DlgTableWidthPx		: "píxels",
+DlgTableWidthPc		: "percentatge",
+DlgTableHeight		: "Alçada",
+DlgTableCellSpace	: "Espaiat de cel·les",
+DlgTableCellPad		: "Encoixinament de cel·les",
+DlgTableCaption		: "Títol",
+DlgTableSummary		: "Resum",
+
+// Table Cell Dialog
+DlgCellTitle		: "Propietats de la cel·la",
+DlgCellWidth		: "Amplada",
+DlgCellWidthPx		: "píxels",
+DlgCellWidthPc		: "percentatge",
+DlgCellHeight		: "Alçada",
+DlgCellWordWrap		: "Ajust de paraula",
+DlgCellWordWrapNotSet	: "<No Definit>",
+DlgCellWordWrapYes	: "Si",
+DlgCellWordWrapNo	: "No",
+DlgCellHorAlign		: "Alineació horitzontal",
+DlgCellHorAlignNotSet	: "<No Definit>",
+DlgCellHorAlignLeft	: "Esquerra",
+DlgCellHorAlignCenter	: "Centre",
+DlgCellHorAlignRight: "Dreta",
+DlgCellVerAlign		: "Alineació vertical",
+DlgCellVerAlignNotSet	: "<No definit>",
+DlgCellVerAlignTop	: "Top",
+DlgCellVerAlignMiddle	: "Middle",
+DlgCellVerAlignBottom	: "Bottom",
+DlgCellVerAlignBaseline	: "Baseline",
+DlgCellRowSpan		: "Rows Span",
+DlgCellCollSpan		: "Columns Span",
+DlgCellBackColor	: "Color de fons",
+DlgCellBorderColor	: "Color de la vora",
+DlgCellBtnSelect	: "Seleccioneu...",
+
+// Find and Replace Dialog
+DlgFindAndReplaceTitle	: "Cerca i reemplaça",
+
+// Find Dialog
+DlgFindTitle		: "Cerca",
+DlgFindFindBtn		: "Cerca",
+DlgFindNotFoundMsg	: "El text especificat no s'ha trobat.",
+
+// Replace Dialog
+DlgReplaceTitle			: "Reemplaça",
+DlgReplaceFindLbl		: "Cerca:",
+DlgReplaceReplaceLbl	: "Remplaça amb:",
+DlgReplaceCaseChk		: "Distingeix majúscules/minúscules",
+DlgReplaceReplaceBtn	: "Reemplaça",
+DlgReplaceReplAllBtn	: "Reemplaça-ho tot",
+DlgReplaceWordChk		: "Només paraules completes",
+
+// Paste Operations / Dialog
+PasteErrorCut	: "La seguretat del vostre navegador no permet executar automàticament les operacions de retallar. Si us plau, utilitzeu el teclat (Ctrl+X).",
+PasteErrorCopy	: "La seguretat del vostre navegador no permet executar automàticament les operacions de copiar. Si us plau, utilitzeu el teclat (Ctrl+C).",
+
+PasteAsText		: "Enganxa com a text no formatat",
+PasteFromWord	: "Enganxa com a Word",
+
+DlgPasteMsg2	: "Si us plau, enganxeu dins del següent camp utilitzant el teclat (<STRONG>Ctrl+V</STRONG>) i premeu <STRONG>OK</STRONG>.",
+DlgPasteSec		: "A causa de la configuració de seguretat del vostre navegador, l'editor no pot accedir al porta-retalls directament. Enganxeu-ho un altre cop en aquesta finestra.",
+DlgPasteIgnoreFont		: "Ignora definicions de font",
+DlgPasteRemoveStyles	: "Elimina definicions d'estil",
+
+// Color Picker
+ColorAutomatic	: "Automàtic",
+ColorMoreColors	: "Més colors...",
+
+// Document Properties
+DocProps		: "Propietats del document",
+
+// Anchor Dialog
+DlgAnchorTitle		: "Propietats de l'àncora",
+DlgAnchorName		: "Nom de l'àncora",
+DlgAnchorErrorName	: "Si us plau, escriviu el nom de l'ancora",
+
+// Speller Pages Dialog
+DlgSpellNotInDic		: "No és al diccionari",
+DlgSpellChangeTo		: "Reemplaça amb",
+DlgSpellBtnIgnore		: "Ignora",
+DlgSpellBtnIgnoreAll	: "Ignora-les totes",
+DlgSpellBtnReplace		: "Canvia",
+DlgSpellBtnReplaceAll	: "Canvia-les totes",
+DlgSpellBtnUndo			: "Desfés",
+DlgSpellNoSuggestions	: "Cap suggeriment",
+DlgSpellProgress		: "Verificació ortogràfica en curs...",
+DlgSpellNoMispell		: "Verificació ortogràfica acabada: no hi ha cap paraula mal escrita",
+DlgSpellNoChanges		: "Verificació ortogràfica: no s'ha canviat cap paraula",
+DlgSpellOneChange		: "Verificació ortogràfica: s'ha canviat una paraula",
+DlgSpellManyChanges		: "Verificació ortogràfica: s'han canviat %1 paraules",
+
+IeSpellDownload			: "Verificació ortogràfica no instal·lada. Voleu descarregar-ho ara?",
+
+// Button Dialog
+DlgButtonText		: "Text (Valor)",
+DlgButtonType		: "Tipus",
+DlgButtonTypeBtn	: "Botó",
+DlgButtonTypeSbm	: "Transmet formulari",
+DlgButtonTypeRst	: "Reinicia formulari",
+
+// Checkbox and Radio Button Dialogs
+DlgCheckboxName		: "Nom",
+DlgCheckboxValue	: "Valor",
+DlgCheckboxSelected	: "Seleccionat",
+
+// Form Dialog
+DlgFormName		: "Nom",
+DlgFormAction	: "Acció",
+DlgFormMethod	: "Mètode",
+
+// Select Field Dialog
+DlgSelectName		: "Nom",
+DlgSelectValue		: "Valor",
+DlgSelectSize		: "Mida",
+DlgSelectLines		: "Línies",
+DlgSelectChkMulti	: "Permet múltiples seleccions",
+DlgSelectOpAvail	: "Opcions disponibles",
+DlgSelectOpText		: "Text",
+DlgSelectOpValue	: "Valor",
+DlgSelectBtnAdd		: "Afegeix",
+DlgSelectBtnModify	: "Modifica",
+DlgSelectBtnUp		: "Amunt",
+DlgSelectBtnDown	: "Avall",
+DlgSelectBtnSetValue : "Selecciona per defecte",
+DlgSelectBtnDelete	: "Elimina",
+
+// Textarea Dialog
+DlgTextareaName	: "Nom",
+DlgTextareaCols	: "Columnes",
+DlgTextareaRows	: "Files",
+
+// Text Field Dialog
+DlgTextName			: "Nom",
+DlgTextValue		: "Valor",
+DlgTextCharWidth	: "Amplada",
+DlgTextMaxChars		: "Nombre màxim de caràcters",
+DlgTextType			: "Tipus",
+DlgTextTypeText		: "Text",
+DlgTextTypePass		: "Contrasenya",
+
+// Hidden Field Dialog
+DlgHiddenName	: "Nom",
+DlgHiddenValue	: "Valor",
+
+// Bulleted List Dialog
+BulletedListProp	: "Propietats de la llista de pics",
+NumberedListProp	: "Propietats de llista numerada",
+DlgLstStart			: "Inici",
+DlgLstType			: "Tipus",
+DlgLstTypeCircle	: "Cercle",
+DlgLstTypeDisc		: "Disc",
+DlgLstTypeSquare	: "Quadrat",
+DlgLstTypeNumbers	: "Números (1, 2, 3)",
+DlgLstTypeLCase		: "Lletres minúscules (a, b, c)",
+DlgLstTypeUCase		: "Lletres majúscules (A, B, C)",
+DlgLstTypeSRoman	: "Números romans en minúscules (i, ii, iii)",
+DlgLstTypeLRoman	: "Números romans en majúscules (I, II, III)",
+
+// Document Properties Dialog
+DlgDocGeneralTab	: "General",
+DlgDocBackTab		: "Fons",
+DlgDocColorsTab		: "Colors i marges",
+DlgDocMetaTab		: "Metadades",
+
+DlgDocPageTitle		: "Títol de la pàgina",
+DlgDocLangDir		: "Direcció idioma",
+DlgDocLangDirLTR	: "Esquerra a dreta (LTR)",
+DlgDocLangDirRTL	: "Dreta a esquerra (RTL)",
+DlgDocLangCode		: "Codi d'idioma",
+DlgDocCharSet		: "Codificació de conjunt de caràcters",
+DlgDocCharSetCE		: "Centreeuropeu",
+DlgDocCharSetCT		: "Xinès tradicional (Big5)",
+DlgDocCharSetCR		: "Ciríl·lic",
+DlgDocCharSetGR		: "Grec",
+DlgDocCharSetJP		: "Japonès",
+DlgDocCharSetKR		: "Coreà",
+DlgDocCharSetTR		: "Turc",
+DlgDocCharSetUN		: "Unicode (UTF-8)",
+DlgDocCharSetWE		: "Europeu occidental",
+DlgDocCharSetOther	: "Una altra codificació de caràcters",
+
+DlgDocDocType		: "Capçalera de tipus de document",
+DlgDocDocTypeOther	: "Un altra capçalera de tipus de document",
+DlgDocIncXHTML		: "Incloure declaracions XHTML",
+DlgDocBgColor		: "Color de fons",
+DlgDocBgImage		: "URL de la imatge de fons",
+DlgDocBgNoScroll	: "Fons fixe",
+DlgDocCText			: "Text",
+DlgDocCLink			: "Enllaç",
+DlgDocCVisited		: "Enllaç visitat",
+DlgDocCActive		: "Enllaç actiu",
+DlgDocMargins		: "Marges de pàgina",
+DlgDocMaTop			: "Cap",
+DlgDocMaLeft		: "Esquerra",
+DlgDocMaRight		: "Dreta",
+DlgDocMaBottom		: "Peu",
+DlgDocMeIndex		: "Mots clau per a indexació (separats per coma)",
+DlgDocMeDescr		: "Descripció del document",
+DlgDocMeAuthor		: "Autor",
+DlgDocMeCopy		: "Copyright",
+DlgDocPreview		: "Vista prèvia",
+
+// Templates Dialog
+Templates			: "Plantilles",
+DlgTemplatesTitle	: "Contingut plantilles",
+DlgTemplatesSelMsg	: "Si us plau, seleccioneu la plantilla per obrir a l'editor<br>(el contingut actual no serà enregistrat):",
+DlgTemplatesLoading	: "Carregant la llista de plantilles. Si us plau, espereu...",
+DlgTemplatesNoTpl	: "(No hi ha plantilles definides)",
+DlgTemplatesReplace	: "Reemplaça el contingut actual",
+
+// About Dialog
+DlgAboutAboutTab	: "Quant a",
+DlgAboutBrowserInfoTab	: "Informació del navegador",
+DlgAboutLicenseTab	: "Llicència",
+DlgAboutVersion		: "versió",
+DlgAboutInfo		: "Per a més informació aneu a"
+};


Property changes on: announcement/trunk/src/main/webapp/fckeditor/editor/lang/ca.js
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/webapp/fckeditor/editor/lang/cs.js
===================================================================
--- announcement/trunk/src/main/webapp/fckeditor/editor/lang/cs.js	                        (rev 0)
+++ announcement/trunk/src/main/webapp/fckeditor/editor/lang/cs.js	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,515 @@
+/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2008 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * Czech language file.
+ */
+
+var FCKLang =
+{
+// Language direction : "ltr" (left to right) or "rtl" (right to left).
+Dir					: "ltr",
+
+ToolbarCollapse		: "Skrýt panel nástrojů",
+ToolbarExpand		: "Zobrazit panel nástrojů",
+
+// Toolbar Items and Context Menu
+Save				: "Uložit",
+NewPage				: "Nová stránka",
+Preview				: "Náhled",
+Cut					: "Vyjmout",
+Copy				: "Kopírovat",
+Paste				: "Vložit",
+PasteText			: "Vložit jako čistý text",
+PasteWord			: "Vložit z Wordu",
+Print				: "Tisk",
+SelectAll			: "Vybrat vše",
+RemoveFormat		: "Odstranit formátování",
+InsertLinkLbl		: "Odkaz",
+InsertLink			: "Vložit/změnit odkaz",
+RemoveLink			: "Odstranit odkaz",
+Anchor				: "Vložít/změnit záložku",
+AnchorDelete		: "Odstranit kotvu",
+InsertImageLbl		: "Obrázek",
+InsertImage			: "Vložit/změnit obrázek",
+InsertFlashLbl		: "Flash",
+InsertFlash			: "Vložit/Upravit Flash",
+InsertTableLbl		: "Tabulka",
+InsertTable			: "Vložit/změnit tabulku",
+InsertLineLbl		: "Linka",
+InsertLine			: "Vložit vodorovnou linku",
+InsertSpecialCharLbl: "Speciální znaky",
+InsertSpecialChar	: "Vložit speciální znaky",
+InsertSmileyLbl		: "Smajlíky",
+InsertSmiley		: "Vložit smajlík",
+About				: "O aplikaci FCKeditor",
+Bold				: "Tučné",
+Italic				: "Kurzíva",
+Underline			: "Podtržené",
+StrikeThrough		: "Přeškrtnuté",
+Subscript			: "Dolní index",
+Superscript			: "Horní index",
+LeftJustify			: "Zarovnat vlevo",
+CenterJustify		: "Zarovnat na střed",
+RightJustify		: "Zarovnat vpravo",
+BlockJustify		: "Zarovnat do bloku",
+DecreaseIndent		: "Zmenšit odsazení",
+IncreaseIndent		: "Zvětšit odsazení",
+Blockquote			: "Citace",
+Undo				: "Zpět",
+Redo				: "Znovu",
+NumberedListLbl		: "Číslování",
+NumberedList		: "Vložit/odstranit číslovaný seznam",
+BulletedListLbl		: "Odrážky",
+BulletedList		: "Vložit/odstranit odrážky",
+ShowTableBorders	: "Zobrazit okraje tabulek",
+ShowDetails			: "Zobrazit podrobnosti",
+Style				: "Styl",
+FontFormat			: "Formát",
+Font				: "Písmo",
+FontSize			: "Velikost",
+TextColor			: "Barva textu",
+BGColor				: "Barva pozadí",
+Source				: "Zdroj",
+Find				: "Hledat",
+Replace				: "Nahradit",
+SpellCheck			: "Zkontrolovat pravopis",
+UniversalKeyboard	: "Univerzální klávesnice",
+PageBreakLbl		: "Konec stránky",
+PageBreak			: "Vložit konec stránky",
+
+Form			: "Formulář",
+Checkbox		: "Zaškrtávací políčko",
+RadioButton		: "Přepínač",
+TextField		: "Textové pole",
+Textarea		: "Textová oblast",
+HiddenField		: "Skryté pole",
+Button			: "Tlačítko",
+SelectionField	: "Seznam",
+ImageButton		: "Obrázkové tlačítko",
+
+FitWindow		: "Maximalizovat velikost editoru",
+ShowBlocks		: "Ukázat bloky",
+
+// Context Menu
+EditLink			: "Změnit odkaz",
+CellCM				: "Buňka",
+RowCM				: "Řádek",
+ColumnCM			: "Sloupec",
+InsertRowAfter		: "Vložit řádek za",
+InsertRowBefore		: "Vložit řádek před",
+DeleteRows			: "Smazat řádky",
+InsertColumnAfter	: "Vložit sloupec za",
+InsertColumnBefore	: "Vložit sloupec před",
+DeleteColumns		: "Smazat sloupec",
+InsertCellAfter		: "Vložit buňku za",
+InsertCellBefore	: "Vložit buňku před",
+DeleteCells			: "Smazat buňky",
+MergeCells			: "Sloučit buňky",
+MergeRight			: "Sloučit doprava",
+MergeDown			: "Sloučit dolů",
+HorizontalSplitCell	: "Rozdělit buňky vodorovně",
+VerticalSplitCell	: "Rozdělit buňky svisle",
+TableDelete			: "Smazat tabulku",
+CellProperties		: "Vlastnosti buňky",
+TableProperties		: "Vlastnosti tabulky",
+ImageProperties		: "Vlastnosti obrázku",
+FlashProperties		: "Vlastnosti Flashe",
+
+AnchorProp			: "Vlastnosti záložky",
+ButtonProp			: "Vlastnosti tlačítka",
+CheckboxProp		: "Vlastnosti zaškrtávacího políčka",
+HiddenFieldProp		: "Vlastnosti skrytého pole",
+RadioButtonProp		: "Vlastnosti přepínače",
+ImageButtonProp		: "Vlastností obrázkového tlačítka",
+TextFieldProp		: "Vlastnosti textového pole",
+SelectionFieldProp	: "Vlastnosti seznamu",
+TextareaProp		: "Vlastnosti textové oblasti",
+FormProp			: "Vlastnosti formuláře",
+
+FontFormats			: "Normální;Naformátováno;Adresa;Nadpis 1;Nadpis 2;Nadpis 3;Nadpis 4;Nadpis 5;Nadpis 6;Normální (DIV)",
+
+// Alerts and Messages
+ProcessingXHTML		: "Probíhá zpracování XHTML. Prosím čekejte...",
+Done				: "Hotovo",
+PasteWordConfirm	: "Jak je vidět, vkládaný text je kopírován z Wordu. Chcete jej před vložením vyčistit?",
+NotCompatiblePaste	: "Tento příkaz je dostupný pouze v Internet Exploreru verze 5.5 nebo vyšší. Chcete vložit text bez vyčištění?",
+UnknownToolbarItem	: "Neznámá položka panelu nástrojů \"%1\"",
+UnknownCommand		: "Neznámý příkaz \"%1\"",
+NotImplemented		: "Příkaz není implementován",
+UnknownToolbarSet	: "Panel nástrojů \"%1\" neexistuje",
+NoActiveX			: "Nastavení bezpečnosti Vašeho prohlížeče omezuje funkčnost některých jeho možností. Je třeba zapnout volbu \"Spouštět ovládáací prvky ActiveX a moduly plug-in\", jinak nebude možné využívat všechny dosputné schopnosti editoru.",
+BrowseServerBlocked : "Průzkumník zdrojů nelze otevřít. Prověřte, zda nemáte aktivováno blokování popup oken.",
+DialogBlocked		: "Nelze otevřít dialogové okno. Prověřte, zda nemáte aktivováno blokování popup oken.",
+
+// Dialogs
+DlgBtnOK			: "OK",
+DlgBtnCancel		: "Storno",
+DlgBtnClose			: "Zavřít",
+DlgBtnBrowseServer	: "Vybrat na serveru",
+DlgAdvancedTag		: "Rozšířené",
+DlgOpOther			: "<Ostatní>",
+DlgInfoTab			: "Info",
+DlgAlertUrl			: "Prosím vložte URL",
+
+// General Dialogs Labels
+DlgGenNotSet		: "<nenastaveno>",
+DlgGenId			: "Id",
+DlgGenLangDir		: "Orientace jazyka",
+DlgGenLangDirLtr	: "Zleva do prava (LTR)",
+DlgGenLangDirRtl	: "Zprava do leva (RTL)",
+DlgGenLangCode		: "Kód jazyka",
+DlgGenAccessKey		: "Přístupový klíč",
+DlgGenName			: "Jméno",
+DlgGenTabIndex		: "Pořadí prvku",
+DlgGenLongDescr		: "Dlouhý popis URL",
+DlgGenClass			: "Třída stylu",
+DlgGenTitle			: "Pomocný titulek",
+DlgGenContType		: "Pomocný typ obsahu",
+DlgGenLinkCharset	: "Přiřazená znaková sada",
+DlgGenStyle			: "Styl",
+
+// Image Dialog
+DlgImgTitle			: "Vlastnosti obrázku",
+DlgImgInfoTab		: "Informace o obrázku",
+DlgImgBtnUpload		: "Odeslat na server",
+DlgImgURL			: "URL",
+DlgImgUpload		: "Odeslat",
+DlgImgAlt			: "Alternativní text",
+DlgImgWidth			: "Šířka",
+DlgImgHeight		: "Výška",
+DlgImgLockRatio		: "Zámek",
+DlgBtnResetSize		: "Původní velikost",
+DlgImgBorder		: "Okraje",
+DlgImgHSpace		: "H-mezera",
+DlgImgVSpace		: "V-mezera",
+DlgImgAlign			: "Zarovnání",
+DlgImgAlignLeft		: "Vlevo",
+DlgImgAlignAbsBottom: "Zcela dolů",
+DlgImgAlignAbsMiddle: "Doprostřed",
+DlgImgAlignBaseline	: "Na účaří",
+DlgImgAlignBottom	: "Dolů",
+DlgImgAlignMiddle	: "Na střed",
+DlgImgAlignRight	: "Vpravo",
+DlgImgAlignTextTop	: "Na horní okraj textu",
+DlgImgAlignTop		: "Nahoru",
+DlgImgPreview		: "Náhled",
+DlgImgAlertUrl		: "Zadejte prosím URL obrázku",
+DlgImgLinkTab		: "Odkaz",
+
+// Flash Dialog
+DlgFlashTitle		: "Vlastnosti Flashe",
+DlgFlashChkPlay		: "Automatické spuštění",
+DlgFlashChkLoop		: "Opakování",
+DlgFlashChkMenu		: "Nabídka Flash",
+DlgFlashScale		: "Zobrazit",
+DlgFlashScaleAll	: "Zobrazit vše",
+DlgFlashScaleNoBorder	: "Bez okraje",
+DlgFlashScaleFit	: "Přizpůsobit",
+
+// Link Dialog
+DlgLnkWindowTitle	: "Odkaz",
+DlgLnkInfoTab		: "Informace o odkazu",
+DlgLnkTargetTab		: "Cíl",
+
+DlgLnkType			: "Typ odkazu",
+DlgLnkTypeURL		: "URL",
+DlgLnkTypeAnchor	: "Kotva v této stránce",
+DlgLnkTypeEMail		: "E-Mail",
+DlgLnkProto			: "Protokol",
+DlgLnkProtoOther	: "<jiný>",
+DlgLnkURL			: "URL",
+DlgLnkAnchorSel		: "Vybrat kotvu",
+DlgLnkAnchorByName	: "Podle jména kotvy",
+DlgLnkAnchorById	: "Podle Id objektu",
+DlgLnkNoAnchors		: "(Ve stránce není definována žádná kotva!)",
+DlgLnkEMail			: "E-Mailová adresa",
+DlgLnkEMailSubject	: "Předmět zprávy",
+DlgLnkEMailBody		: "Tělo zprávy",
+DlgLnkUpload		: "Odeslat",
+DlgLnkBtnUpload		: "Odeslat na Server",
+
+DlgLnkTarget		: "Cíl",
+DlgLnkTargetFrame	: "<rámec>",
+DlgLnkTargetPopup	: "<vyskakovací okno>",
+DlgLnkTargetBlank	: "Nové okno (_blank)",
+DlgLnkTargetParent	: "Rodičovské okno (_parent)",
+DlgLnkTargetSelf	: "Stejné okno (_self)",
+DlgLnkTargetTop		: "Hlavní okno (_top)",
+DlgLnkTargetFrameName	: "Název cílového rámu",
+DlgLnkPopWinName	: "Název vyskakovacího okna",
+DlgLnkPopWinFeat	: "Vlastnosti vyskakovacího okna",
+DlgLnkPopResize		: "Měnitelná velikost",
+DlgLnkPopLocation	: "Panel umístění",
+DlgLnkPopMenu		: "Panel nabídky",
+DlgLnkPopScroll		: "Posuvníky",
+DlgLnkPopStatus		: "Stavový řádek",
+DlgLnkPopToolbar	: "Panel nástrojů",
+DlgLnkPopFullScrn	: "Celá obrazovka (IE)",
+DlgLnkPopDependent	: "Závislost (Netscape)",
+DlgLnkPopWidth		: "Šířka",
+DlgLnkPopHeight		: "Výška",
+DlgLnkPopLeft		: "Levý okraj",
+DlgLnkPopTop		: "Horní okraj",
+
+DlnLnkMsgNoUrl		: "Zadejte prosím URL odkazu",
+DlnLnkMsgNoEMail	: "Zadejte prosím e-mailovou adresu",
+DlnLnkMsgNoAnchor	: "Vyberte prosím kotvu",
+DlnLnkMsgInvPopName	: "Název vyskakovacího okna musí začínat písmenem a nesmí obsahovat mezery",
+
+// Color Dialog
+DlgColorTitle		: "Výběr barvy",
+DlgColorBtnClear	: "Vymazat",
+DlgColorHighlight	: "Zvýrazněná",
+DlgColorSelected	: "Vybraná",
+
+// Smiley Dialog
+DlgSmileyTitle		: "Vkládání smajlíků",
+
+// Special Character Dialog
+DlgSpecialCharTitle	: "Výběr speciálního znaku",
+
+// Table Dialog
+DlgTableTitle		: "Vlastnosti tabulky",
+DlgTableRows		: "Řádky",
+DlgTableColumns		: "Sloupce",
+DlgTableBorder		: "Ohraničení",
+DlgTableAlign		: "Zarovnání",
+DlgTableAlignNotSet	: "<nenastaveno>",
+DlgTableAlignLeft	: "Vlevo",
+DlgTableAlignCenter	: "Na střed",
+DlgTableAlignRight	: "Vpravo",
+DlgTableWidth		: "Šířka",
+DlgTableWidthPx		: "bodů",
+DlgTableWidthPc		: "procent",
+DlgTableHeight		: "Výška",
+DlgTableCellSpace	: "Vzdálenost buněk",
+DlgTableCellPad		: "Odsazení obsahu",
+DlgTableCaption		: "Popis",
+DlgTableSummary		: "Souhrn",
+
+// Table Cell Dialog
+DlgCellTitle		: "Vlastnosti buňky",
+DlgCellWidth		: "Šířka",
+DlgCellWidthPx		: "bodů",
+DlgCellWidthPc		: "procent",
+DlgCellHeight		: "Výška",
+DlgCellWordWrap		: "Zalamování",
+DlgCellWordWrapNotSet	: "<nenanstaveno>",
+DlgCellWordWrapYes	: "Ano",
+DlgCellWordWrapNo	: "Ne",
+DlgCellHorAlign		: "Vodorovné zarovnání",
+DlgCellHorAlignNotSet	: "<nenastaveno>",
+DlgCellHorAlignLeft	: "Vlevo",
+DlgCellHorAlignCenter	: "Na střed",
+DlgCellHorAlignRight: "Vpravo",
+DlgCellVerAlign		: "Svislé zarovnání",
+DlgCellVerAlignNotSet	: "<nenastaveno>",
+DlgCellVerAlignTop	: "Nahoru",
+DlgCellVerAlignMiddle	: "Doprostřed",
+DlgCellVerAlignBottom	: "Dolů",
+DlgCellVerAlignBaseline	: "Na účaří",
+DlgCellRowSpan		: "Sloučené řádky",
+DlgCellCollSpan		: "Sloučené sloupce",
+DlgCellBackColor	: "Barva pozadí",
+DlgCellBorderColor	: "Barva ohraničení",
+DlgCellBtnSelect	: "Výběr...",
+
+// Find and Replace Dialog
+DlgFindAndReplaceTitle	: "Najít a nahradit",
+
+// Find Dialog
+DlgFindTitle		: "Hledat",
+DlgFindFindBtn		: "Hledat",
+DlgFindNotFoundMsg	: "Hledaný text nebyl nalezen.",
+
+// Replace Dialog
+DlgReplaceTitle			: "Nahradit",
+DlgReplaceFindLbl		: "Co hledat:",
+DlgReplaceReplaceLbl	: "Čím nahradit:",
+DlgReplaceCaseChk		: "Rozlišovat velikost písma",
+DlgReplaceReplaceBtn	: "Nahradit",
+DlgReplaceReplAllBtn	: "Nahradit vše",
+DlgReplaceWordChk		: "Pouze celá slova",
+
+// Paste Operations / Dialog
+PasteErrorCut	: "Bezpečnostní nastavení Vašeho prohlížeče nedovolují editoru spustit funkci pro vyjmutí zvoleného textu do schránky. Prosím vyjměte zvolený text do schránky pomocí klávesnice (Ctrl+X).",
+PasteErrorCopy	: "Bezpečnostní nastavení Vašeho prohlížeče nedovolují editoru spustit funkci pro kopírování zvoleného textu do schránky. Prosím zkopírujte zvolený text do schránky pomocí klávesnice (Ctrl+C).",
+
+PasteAsText		: "Vložit jako čistý text",
+PasteFromWord	: "Vložit text z Wordu",
+
+DlgPasteMsg2	: "Do následujícího pole vložte požadovaný obsah pomocí klávesnice (<STRONG>Ctrl+V</STRONG>) a stiskněte <STRONG>OK</STRONG>.",
+DlgPasteSec		: "Z důvodů nastavení bezpečnosti Vašeho prohlížeče nemůže editor přistupovat přímo do schránky. Obsah schránky prosím vložte znovu do tohoto okna.",
+DlgPasteIgnoreFont		: "Ignorovat písmo",
+DlgPasteRemoveStyles	: "Odstranit styly",
+
+// Color Picker
+ColorAutomatic	: "Automaticky",
+ColorMoreColors	: "Více barev...",
+
+// Document Properties
+DocProps		: "Vlastnosti dokumentu",
+
+// Anchor Dialog
+DlgAnchorTitle		: "Vlastnosti záložky",
+DlgAnchorName		: "Název záložky",
+DlgAnchorErrorName	: "Zadejte prosím název záložky",
+
+// Speller Pages Dialog
+DlgSpellNotInDic		: "Není ve slovníku",
+DlgSpellChangeTo		: "Změnit na",
+DlgSpellBtnIgnore		: "Přeskočit",
+DlgSpellBtnIgnoreAll	: "Přeskakovat vše",
+DlgSpellBtnReplace		: "Zaměnit",
+DlgSpellBtnReplaceAll	: "Zaměňovat vše",
+DlgSpellBtnUndo			: "Zpět",
+DlgSpellNoSuggestions	: "- žádné návrhy -",
+DlgSpellProgress		: "Probíhá kontrola pravopisu...",
+DlgSpellNoMispell		: "Kontrola pravopisu dokončena: Žádné pravopisné chyby nenalezeny",
+DlgSpellNoChanges		: "Kontrola pravopisu dokončena: Beze změn",
+DlgSpellOneChange		: "Kontrola pravopisu dokončena: Jedno slovo změněno",
+DlgSpellManyChanges		: "Kontrola pravopisu dokončena: %1 slov změněno",
+
+IeSpellDownload			: "Kontrola pravopisu není nainstalována. Chcete ji nyní stáhnout?",
+
+// Button Dialog
+DlgButtonText		: "Popisek",
+DlgButtonType		: "Typ",
+DlgButtonTypeBtn	: "Tlačítko",
+DlgButtonTypeSbm	: "Odeslat",
+DlgButtonTypeRst	: "Obnovit",
+
+// Checkbox and Radio Button Dialogs
+DlgCheckboxName		: "Název",
+DlgCheckboxValue	: "Hodnota",
+DlgCheckboxSelected	: "Zaškrtnuto",
+
+// Form Dialog
+DlgFormName		: "Název",
+DlgFormAction	: "Akce",
+DlgFormMethod	: "Metoda",
+
+// Select Field Dialog
+DlgSelectName		: "Název",
+DlgSelectValue		: "Hodnota",
+DlgSelectSize		: "Velikost",
+DlgSelectLines		: "Řádků",
+DlgSelectChkMulti	: "Povolit mnohonásobné výběry",
+DlgSelectOpAvail	: "Dostupná nastavení",
+DlgSelectOpText		: "Text",
+DlgSelectOpValue	: "Hodnota",
+DlgSelectBtnAdd		: "Přidat",
+DlgSelectBtnModify	: "Změnit",
+DlgSelectBtnUp		: "Nahoru",
+DlgSelectBtnDown	: "Dolů",
+DlgSelectBtnSetValue : "Nastavit jako vybranou hodnotu",
+DlgSelectBtnDelete	: "Smazat",
+
+// Textarea Dialog
+DlgTextareaName	: "Název",
+DlgTextareaCols	: "Sloupců",
+DlgTextareaRows	: "Řádků",
+
+// Text Field Dialog
+DlgTextName			: "Název",
+DlgTextValue		: "Hodnota",
+DlgTextCharWidth	: "Šířka ve znacích",
+DlgTextMaxChars		: "Maximální počet znaků",
+DlgTextType			: "Typ",
+DlgTextTypeText		: "Text",
+DlgTextTypePass		: "Heslo",
+
+// Hidden Field Dialog
+DlgHiddenName	: "Název",
+DlgHiddenValue	: "Hodnota",
+
+// Bulleted List Dialog
+BulletedListProp	: "Vlastnosti odrážek",
+NumberedListProp	: "Vlastnosti číslovaného seznamu",
+DlgLstStart			: "Začátek",
+DlgLstType			: "Typ",
+DlgLstTypeCircle	: "Kružnice",
+DlgLstTypeDisc		: "Kruh",
+DlgLstTypeSquare	: "Čtverec",
+DlgLstTypeNumbers	: "Čísla (1, 2, 3)",
+DlgLstTypeLCase		: "Malá písmena (a, b, c)",
+DlgLstTypeUCase		: "Velká písmena (A, B, C)",
+DlgLstTypeSRoman	: "Malé římská číslice (i, ii, iii)",
+DlgLstTypeLRoman	: "Velké římské číslice (I, II, III)",
+
+// Document Properties Dialog
+DlgDocGeneralTab	: "Obecné",
+DlgDocBackTab		: "Pozadí",
+DlgDocColorsTab		: "Barvy a okraje",
+DlgDocMetaTab		: "Metadata",
+
+DlgDocPageTitle		: "Titulek stránky",
+DlgDocLangDir		: "Směr jazyku",
+DlgDocLangDirLTR	: "Zleva do prava ",
+DlgDocLangDirRTL	: "Zprava doleva",
+DlgDocLangCode		: "Kód jazyku",
+DlgDocCharSet		: "Znaková sada",
+DlgDocCharSetCE		: "Středoevropské jazyky",
+DlgDocCharSetCT		: "Tradiční čínština (Big5)",
+DlgDocCharSetCR		: "Cyrilice",
+DlgDocCharSetGR		: "Řečtina",
+DlgDocCharSetJP		: "Japonština",
+DlgDocCharSetKR		: "Korejština",
+DlgDocCharSetTR		: "Turečtina",
+DlgDocCharSetUN		: "Unicode (UTF-8)",
+DlgDocCharSetWE		: "Západoevropské jazyky",
+DlgDocCharSetOther	: "Další znaková sada",
+
+DlgDocDocType		: "Typ dokumentu",
+DlgDocDocTypeOther	: "Jiný typ dokumetu",
+DlgDocIncXHTML		: "Zahrnou deklarace XHTML",
+DlgDocBgColor		: "Barva pozadí",
+DlgDocBgImage		: "URL obrázku na pozadí",
+DlgDocBgNoScroll	: "Nerolovatelné pozadí",
+DlgDocCText			: "Text",
+DlgDocCLink			: "Odkaz",
+DlgDocCVisited		: "Navštívený odkaz",
+DlgDocCActive		: "Vybraný odkaz",
+DlgDocMargins		: "Okraje stránky",
+DlgDocMaTop			: "Horní",
+DlgDocMaLeft		: "Levý",
+DlgDocMaRight		: "Pravý",
+DlgDocMaBottom		: "Dolní",
+DlgDocMeIndex		: "Klíčová slova (oddělená čárkou)",
+DlgDocMeDescr		: "Popis dokumentu",
+DlgDocMeAuthor		: "Autor",
+DlgDocMeCopy		: "Autorská práva",
+DlgDocPreview		: "Náhled",
+
+// Templates Dialog
+Templates			: "Šablony",
+DlgTemplatesTitle	: "Šablony obsahu",
+DlgTemplatesSelMsg	: "Prosím zvolte šablonu pro otevření v editoru<br>(aktuální obsah editoru bude ztracen):",
+DlgTemplatesLoading	: "Nahrávám přeheld šablon. Prosím čekejte...",
+DlgTemplatesNoTpl	: "(Není definována žádná šablona)",
+DlgTemplatesReplace	: "Nahradit aktuální obsah",
+
+// About Dialog
+DlgAboutAboutTab	: "O aplikaci",
+DlgAboutBrowserInfoTab	: "Informace o prohlížeči",
+DlgAboutLicenseTab	: "Licence",
+DlgAboutVersion		: "verze",
+DlgAboutInfo		: "Více informací získáte na"
+};


Property changes on: announcement/trunk/src/main/webapp/fckeditor/editor/lang/cs.js
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/webapp/fckeditor/editor/lang/da.js
===================================================================
--- announcement/trunk/src/main/webapp/fckeditor/editor/lang/da.js	                        (rev 0)
+++ announcement/trunk/src/main/webapp/fckeditor/editor/lang/da.js	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,515 @@
+/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2008 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * Danish language file.
+ */
+
+var FCKLang =
+{
+// Language direction : "ltr" (left to right) or "rtl" (right to left).
+Dir					: "ltr",
+
+ToolbarCollapse		: "Skjul værktøjslinier",
+ToolbarExpand		: "Vis værktøjslinier",
+
+// Toolbar Items and Context Menu
+Save				: "Gem",
+NewPage				: "Ny side",
+Preview				: "Vis eksempel",
+Cut					: "Klip",
+Copy				: "Kopier",
+Paste				: "Indsæt",
+PasteText			: "Indsæt som ikke-formateret tekst",
+PasteWord			: "Indsæt fra Word",
+Print				: "Udskriv",
+SelectAll			: "Vælg alt",
+RemoveFormat		: "Fjern formatering",
+InsertLinkLbl		: "Hyperlink",
+InsertLink			: "Indsæt/rediger hyperlink",
+RemoveLink			: "Fjern hyperlink",
+Anchor				: "Indsæt/rediger bogmærke",
+AnchorDelete		: "Remove Anchor",	//MISSING
+InsertImageLbl		: "Indsæt billede",
+InsertImage			: "Indsæt/rediger billede",
+InsertFlashLbl		: "Flash",
+InsertFlash			: "Indsæt/rediger Flash",
+InsertTableLbl		: "Table",
+InsertTable			: "Indsæt/rediger tabel",
+InsertLineLbl		: "Linie",
+InsertLine			: "Indsæt vandret linie",
+InsertSpecialCharLbl: "Symbol",
+InsertSpecialChar	: "Indsæt symbol",
+InsertSmileyLbl		: "Smiley",
+InsertSmiley		: "Indsæt smiley",
+About				: "Om FCKeditor",
+Bold				: "Fed",
+Italic				: "Kursiv",
+Underline			: "Understreget",
+StrikeThrough		: "Overstreget",
+Subscript			: "Sænket skrift",
+Superscript			: "Hævet skrift",
+LeftJustify			: "Venstrestillet",
+CenterJustify		: "Centreret",
+RightJustify		: "Højrestillet",
+BlockJustify		: "Lige margener",
+DecreaseIndent		: "Formindsk indrykning",
+IncreaseIndent		: "Forøg indrykning",
+Blockquote			: "Blockquote",	//MISSING
+Undo				: "Fortryd",
+Redo				: "Annuller fortryd",
+NumberedListLbl		: "Talopstilling",
+NumberedList		: "Indsæt/fjern talopstilling",
+BulletedListLbl		: "Punktopstilling",
+BulletedList		: "Indsæt/fjern punktopstilling",
+ShowTableBorders	: "Vis tabelkanter",
+ShowDetails			: "Vis detaljer",
+Style				: "Typografi",
+FontFormat			: "Formatering",
+Font				: "Skrifttype",
+FontSize			: "Skriftstørrelse",
+TextColor			: "Tekstfarve",
+BGColor				: "Baggrundsfarve",
+Source				: "Kilde",
+Find				: "Søg",
+Replace				: "Erstat",
+SpellCheck			: "Stavekontrol",
+UniversalKeyboard	: "Universaltastatur",
+PageBreakLbl		: "Sidskift",
+PageBreak			: "Indsæt sideskift",
+
+Form			: "Indsæt formular",
+Checkbox		: "Indsæt afkrydsningsfelt",
+RadioButton		: "Indsæt alternativknap",
+TextField		: "Indsæt tekstfelt",
+Textarea		: "Indsæt tekstboks",
+HiddenField		: "Indsæt skjult felt",
+Button			: "Indsæt knap",
+SelectionField	: "Indsæt liste",
+ImageButton		: "Indsæt billedknap",
+
+FitWindow		: "Maksimer editor vinduet",
+ShowBlocks		: "Show Blocks",	//MISSING
+
+// Context Menu
+EditLink			: "Rediger hyperlink",
+CellCM				: "Celle",
+RowCM				: "Række",
+ColumnCM			: "Kolonne",
+InsertRowAfter		: "Insert Row After",	//MISSING
+InsertRowBefore		: "Insert Row Before",	//MISSING
+DeleteRows			: "Slet række",
+InsertColumnAfter	: "Insert Column After",	//MISSING
+InsertColumnBefore	: "Insert Column Before",	//MISSING
+DeleteColumns		: "Slet kolonne",
+InsertCellAfter		: "Insert Cell After",	//MISSING
+InsertCellBefore	: "Insert Cell Before",	//MISSING
+DeleteCells			: "Slet celle",
+MergeCells			: "Flet celler",
+MergeRight			: "Merge Right",	//MISSING
+MergeDown			: "Merge Down",	//MISSING
+HorizontalSplitCell	: "Split Cell Horizontally",	//MISSING
+VerticalSplitCell	: "Split Cell Vertically",	//MISSING
+TableDelete			: "Slet tabel",
+CellProperties		: "Egenskaber for celle",
+TableProperties		: "Egenskaber for tabel",
+ImageProperties		: "Egenskaber for billede",
+FlashProperties		: "Egenskaber for Flash",
+
+AnchorProp			: "Egenskaber for bogmærke",
+ButtonProp			: "Egenskaber for knap",
+CheckboxProp		: "Egenskaber for afkrydsningsfelt",
+HiddenFieldProp		: "Egenskaber for skjult felt",
+RadioButtonProp		: "Egenskaber for alternativknap",
+ImageButtonProp		: "Egenskaber for billedknap",
+TextFieldProp		: "Egenskaber for tekstfelt",
+SelectionFieldProp	: "Egenskaber for liste",
+TextareaProp		: "Egenskaber for tekstboks",
+FormProp			: "Egenskaber for formular",
+
+FontFormats			: "Normal;Formateret;Adresse;Overskrift 1;Overskrift 2;Overskrift 3;Overskrift 4;Overskrift 5;Overskrift 6;Normal (DIV)",
+
+// Alerts and Messages
+ProcessingXHTML		: "Behandler XHTML...",
+Done				: "Færdig",
+PasteWordConfirm	: "Den tekst du forsøger at indsætte ser ud til at komme fra Word.<br>Vil du rense teksten før den indsættes?",
+NotCompatiblePaste	: "Denne kommando er tilgændelig i Internet Explorer 5.5 eller senere.<br>Vil du indsætte teksten uden at rense den ?",
+UnknownToolbarItem	: "Ukendt værktøjslinjeobjekt \"%1\"!",
+UnknownCommand		: "Ukendt kommandonavn \"%1\"!",
+NotImplemented		: "Kommandoen er ikke implementeret!",
+UnknownToolbarSet	: "Værktøjslinjen \"%1\" eksisterer ikke!",
+NoActiveX			: "Din browsers sikkerhedsindstillinger begrænser nogle af editorens muligheder.<br>Slå \"Kør ActiveX-objekter og plug-ins\" til, ellers vil du opleve fejl og manglende muligheder.",
+BrowseServerBlocked : "Browseren kunne ikke åbne de nødvendige ressourcer!<br>Slå pop-up blokering fra.",
+DialogBlocked		: "Dialogvinduet kunne ikke åbnes!<br>Slå pop-up blokering fra.",
+
+// Dialogs
+DlgBtnOK			: "OK",
+DlgBtnCancel		: "Annuller",
+DlgBtnClose			: "Luk",
+DlgBtnBrowseServer	: "Gennemse...",
+DlgAdvancedTag		: "Avanceret",
+DlgOpOther			: "<Andet>",
+DlgInfoTab			: "Generelt",
+DlgAlertUrl			: "Indtast URL",
+
+// General Dialogs Labels
+DlgGenNotSet		: "<intet valgt>",
+DlgGenId			: "Id",
+DlgGenLangDir		: "Tekstretning",
+DlgGenLangDirLtr	: "Fra venstre mod højre (LTR)",
+DlgGenLangDirRtl	: "Fra højre mod venstre (RTL)",
+DlgGenLangCode		: "Sprogkode",
+DlgGenAccessKey		: "Genvejstast",
+DlgGenName			: "Navn",
+DlgGenTabIndex		: "Tabulator indeks",
+DlgGenLongDescr		: "Udvidet beskrivelse",
+DlgGenClass			: "Typografiark",
+DlgGenTitle			: "Titel",
+DlgGenContType		: "Indholdstype",
+DlgGenLinkCharset	: "Tegnsæt",
+DlgGenStyle			: "Typografi",
+
+// Image Dialog
+DlgImgTitle			: "Egenskaber for billede",
+DlgImgInfoTab		: "Generelt",
+DlgImgBtnUpload		: "Upload",
+DlgImgURL			: "URL",
+DlgImgUpload		: "Upload",
+DlgImgAlt			: "Alternativ tekst",
+DlgImgWidth			: "Bredde",
+DlgImgHeight		: "Højde",
+DlgImgLockRatio		: "Lås størrelsesforhold",
+DlgBtnResetSize		: "Nulstil størrelse",
+DlgImgBorder		: "Ramme",
+DlgImgHSpace		: "HMargen",
+DlgImgVSpace		: "VMargen",
+DlgImgAlign			: "Justering",
+DlgImgAlignLeft		: "Venstre",
+DlgImgAlignAbsBottom: "Absolut nederst",
+DlgImgAlignAbsMiddle: "Absolut centreret",
+DlgImgAlignBaseline	: "Grundlinje",
+DlgImgAlignBottom	: "Nederst",
+DlgImgAlignMiddle	: "Centreret",
+DlgImgAlignRight	: "Højre",
+DlgImgAlignTextTop	: "Toppen af teksten",
+DlgImgAlignTop		: "Øverst",
+DlgImgPreview		: "Vis eksempel",
+DlgImgAlertUrl		: "Indtast stien til billedet",
+DlgImgLinkTab		: "Hyperlink",
+
+// Flash Dialog
+DlgFlashTitle		: "Egenskaber for Flash",
+DlgFlashChkPlay		: "Automatisk afspilning",
+DlgFlashChkLoop		: "Gentagelse",
+DlgFlashChkMenu		: "Vis Flash menu",
+DlgFlashScale		: "Skalér",
+DlgFlashScaleAll	: "Vis alt",
+DlgFlashScaleNoBorder	: "Ingen ramme",
+DlgFlashScaleFit	: "Tilpas størrelse",
+
+// Link Dialog
+DlgLnkWindowTitle	: "Egenskaber for hyperlink",
+DlgLnkInfoTab		: "Generelt",
+DlgLnkTargetTab		: "Mål",
+
+DlgLnkType			: "Hyperlink type",
+DlgLnkTypeURL		: "URL",
+DlgLnkTypeAnchor	: "Bogmærke på denne side",
+DlgLnkTypeEMail		: "E-mail",
+DlgLnkProto			: "Protokol",
+DlgLnkProtoOther	: "<anden>",
+DlgLnkURL			: "URL",
+DlgLnkAnchorSel		: "Vælg et anker",
+DlgLnkAnchorByName	: "Efter anker navn",
+DlgLnkAnchorById	: "Efter element Id",
+DlgLnkNoAnchors		: "(Ingen bogmærker dokumentet)",
+DlgLnkEMail			: "E-mailadresse",
+DlgLnkEMailSubject	: "Emne",
+DlgLnkEMailBody		: "Brødtekst",
+DlgLnkUpload		: "Upload",
+DlgLnkBtnUpload		: "Upload",
+
+DlgLnkTarget		: "Mål",
+DlgLnkTargetFrame	: "<ramme>",
+DlgLnkTargetPopup	: "<popup vindue>",
+DlgLnkTargetBlank	: "Nyt vindue (_blank)",
+DlgLnkTargetParent	: "Overordnet ramme (_parent)",
+DlgLnkTargetSelf	: "Samme vindue (_self)",
+DlgLnkTargetTop		: "Hele vinduet (_top)",
+DlgLnkTargetFrameName	: "Destinationsvinduets navn",
+DlgLnkPopWinName	: "Pop-up vinduets navn",
+DlgLnkPopWinFeat	: "Egenskaber for pop-up",
+DlgLnkPopResize		: "Skalering",
+DlgLnkPopLocation	: "Adresselinje",
+DlgLnkPopMenu		: "Menulinje",
+DlgLnkPopScroll		: "Scrollbars",
+DlgLnkPopStatus		: "Statuslinje",
+DlgLnkPopToolbar	: "Værktøjslinje",
+DlgLnkPopFullScrn	: "Fuld skærm (IE)",
+DlgLnkPopDependent	: "Koblet/dependent (Netscape)",
+DlgLnkPopWidth		: "Bredde",
+DlgLnkPopHeight		: "Højde",
+DlgLnkPopLeft		: "Position fra venstre",
+DlgLnkPopTop		: "Position fra toppen",
+
+DlnLnkMsgNoUrl		: "Indtast hyperlink URL!",
+DlnLnkMsgNoEMail	: "Indtast e-mailaddresse!",
+DlnLnkMsgNoAnchor	: "Vælg bogmærke!",
+DlnLnkMsgInvPopName	: "The popup name must begin with an alphabetic character and must not contain spaces",	//MISSING
+
+// Color Dialog
+DlgColorTitle		: "Vælg farve",
+DlgColorBtnClear	: "Nulstil",
+DlgColorHighlight	: "Markeret",
+DlgColorSelected	: "Valgt",
+
+// Smiley Dialog
+DlgSmileyTitle		: "Vælg smiley",
+
+// Special Character Dialog
+DlgSpecialCharTitle	: "Vælg symbol",
+
+// Table Dialog
+DlgTableTitle		: "Egenskaber for tabel",
+DlgTableRows		: "Rækker",
+DlgTableColumns		: "Kolonner",
+DlgTableBorder		: "Rammebredde",
+DlgTableAlign		: "Justering",
+DlgTableAlignNotSet	: "<intet valgt>",
+DlgTableAlignLeft	: "Venstrestillet",
+DlgTableAlignCenter	: "Centreret",
+DlgTableAlignRight	: "Højrestillet",
+DlgTableWidth		: "Bredde",
+DlgTableWidthPx		: "pixels",
+DlgTableWidthPc		: "procent",
+DlgTableHeight		: "Højde",
+DlgTableCellSpace	: "Celleafstand",
+DlgTableCellPad		: "Cellemargen",
+DlgTableCaption		: "Titel",
+DlgTableSummary		: "Resume",
+
+// Table Cell Dialog
+DlgCellTitle		: "Egenskaber for celle",
+DlgCellWidth		: "Bredde",
+DlgCellWidthPx		: "pixels",
+DlgCellWidthPc		: "procent",
+DlgCellHeight		: "Højde",
+DlgCellWordWrap		: "Orddeling",
+DlgCellWordWrapNotSet	: "<intet valgt>",
+DlgCellWordWrapYes	: "Ja",
+DlgCellWordWrapNo	: "Nej",
+DlgCellHorAlign		: "Vandret justering",
+DlgCellHorAlignNotSet	: "<intet valgt>",
+DlgCellHorAlignLeft	: "Venstrestillet",
+DlgCellHorAlignCenter	: "Centreret",
+DlgCellHorAlignRight: "Højrestillet",
+DlgCellVerAlign		: "Lodret justering",
+DlgCellVerAlignNotSet	: "<intet valgt>",
+DlgCellVerAlignTop	: "Øverst",
+DlgCellVerAlignMiddle	: "Centreret",
+DlgCellVerAlignBottom	: "Nederst",
+DlgCellVerAlignBaseline	: "Grundlinje",
+DlgCellRowSpan		: "Højde i antal rækker",
+DlgCellCollSpan		: "Bredde i antal kolonner",
+DlgCellBackColor	: "Baggrundsfarve",
+DlgCellBorderColor	: "Rammefarve",
+DlgCellBtnSelect	: "Vælg...",
+
+// Find and Replace Dialog
+DlgFindAndReplaceTitle	: "Find and Replace",	//MISSING
+
+// Find Dialog
+DlgFindTitle		: "Find",
+DlgFindFindBtn		: "Find",
+DlgFindNotFoundMsg	: "Søgeteksten blev ikke fundet!",
+
+// Replace Dialog
+DlgReplaceTitle			: "Erstat",
+DlgReplaceFindLbl		: "Søg efter:",
+DlgReplaceReplaceLbl	: "Erstat med:",
+DlgReplaceCaseChk		: "Forskel på store og små bogstaver",
+DlgReplaceReplaceBtn	: "Erstat",
+DlgReplaceReplAllBtn	: "Erstat alle",
+DlgReplaceWordChk		: "Kun hele ord",
+
+// Paste Operations / Dialog
+PasteErrorCut	: "Din browsers sikkerhedsindstillinger tillader ikke editoren at klippe tekst automatisk!<br>Brug i stedet tastaturet til at klippe teksten (Ctrl+X).",
+PasteErrorCopy	: "Din browsers sikkerhedsindstillinger tillader ikke editoren at kopiere tekst automatisk!<br>Brug i stedet tastaturet til at kopiere teksten (Ctrl+C).",
+
+PasteAsText		: "Indsæt som ikke-formateret tekst",
+PasteFromWord	: "Indsæt fra Word",
+
+DlgPasteMsg2	: "Indsæt i feltet herunder (<STRONG>Ctrl+V</STRONG>) og klik <STRONG>OK</STRONG>.",
+DlgPasteSec		: "Because of your browser security settings, the editor is not able to access your clipboard data directly. You are required to paste it again in this window.",	//MISSING
+DlgPasteIgnoreFont		: "Ignorer font definitioner",
+DlgPasteRemoveStyles	: "Ignorer typografi",
+
+// Color Picker
+ColorAutomatic	: "Automatisk",
+ColorMoreColors	: "Flere farver...",
+
+// Document Properties
+DocProps		: "Egenskaber for dokument",
+
+// Anchor Dialog
+DlgAnchorTitle		: "Egenskaber for bogmærke",
+DlgAnchorName		: "Bogmærke navn",
+DlgAnchorErrorName	: "Indtast bogmærke navn!",
+
+// Speller Pages Dialog
+DlgSpellNotInDic		: "Ikke i ordbogen",
+DlgSpellChangeTo		: "Forslag",
+DlgSpellBtnIgnore		: "Ignorer",
+DlgSpellBtnIgnoreAll	: "Ignorer alle",
+DlgSpellBtnReplace		: "Erstat",
+DlgSpellBtnReplaceAll	: "Erstat alle",
+DlgSpellBtnUndo			: "Tilbage",
+DlgSpellNoSuggestions	: "- ingen forslag -",
+DlgSpellProgress		: "Stavekontrolen arbejder...",
+DlgSpellNoMispell		: "Stavekontrol færdig: Ingen fejl fundet",
+DlgSpellNoChanges		: "Stavekontrol færdig: Ingen ord ændret",
+DlgSpellOneChange		: "Stavekontrol færdig: Et ord ændret",
+DlgSpellManyChanges		: "Stavekontrol færdig: %1 ord ændret",
+
+IeSpellDownload			: "Stavekontrol ikke installeret.<br>Vil du hente den nu?",
+
+// Button Dialog
+DlgButtonText		: "Tekst",
+DlgButtonType		: "Type",
+DlgButtonTypeBtn	: "Button",	//MISSING
+DlgButtonTypeSbm	: "Submit",	//MISSING
+DlgButtonTypeRst	: "Reset",	//MISSING
+
+// Checkbox and Radio Button Dialogs
+DlgCheckboxName		: "Navn",
+DlgCheckboxValue	: "Værdi",
+DlgCheckboxSelected	: "Valgt",
+
+// Form Dialog
+DlgFormName		: "Navn",
+DlgFormAction	: "Handling",
+DlgFormMethod	: "Metod",
+
+// Select Field Dialog
+DlgSelectName		: "Navn",
+DlgSelectValue		: "Værdi",
+DlgSelectSize		: "Størrelse",
+DlgSelectLines		: "linier",
+DlgSelectChkMulti	: "Tillad flere valg",
+DlgSelectOpAvail	: "Valgmuligheder",
+DlgSelectOpText		: "Tekst",
+DlgSelectOpValue	: "Værdi",
+DlgSelectBtnAdd		: "Tilføj",
+DlgSelectBtnModify	: "Rediger",
+DlgSelectBtnUp		: "Op",
+DlgSelectBtnDown	: "Ned",
+DlgSelectBtnSetValue : "Sæt som valgt",
+DlgSelectBtnDelete	: "Slet",
+
+// Textarea Dialog
+DlgTextareaName	: "Navn",
+DlgTextareaCols	: "Kolonner",
+DlgTextareaRows	: "Rækker",
+
+// Text Field Dialog
+DlgTextName			: "Navn",
+DlgTextValue		: "Værdi",
+DlgTextCharWidth	: "Bredde (tegn)",
+DlgTextMaxChars		: "Max antal tegn",
+DlgTextType			: "Type",
+DlgTextTypeText		: "Tekst",
+DlgTextTypePass		: "Adgangskode",
+
+// Hidden Field Dialog
+DlgHiddenName	: "Navn",
+DlgHiddenValue	: "Værdi",
+
+// Bulleted List Dialog
+BulletedListProp	: "Egenskaber for punktopstilling",
+NumberedListProp	: "Egenskaber for talopstilling",
+DlgLstStart			: "Start",	//MISSING
+DlgLstType			: "Type",
+DlgLstTypeCircle	: "Cirkel",
+DlgLstTypeDisc		: "Udfyldt cirkel",
+DlgLstTypeSquare	: "Firkant",
+DlgLstTypeNumbers	: "Nummereret (1, 2, 3)",
+DlgLstTypeLCase		: "Små bogstaver (a, b, c)",
+DlgLstTypeUCase		: "Store bogstaver (A, B, C)",
+DlgLstTypeSRoman	: "Små romertal (i, ii, iii)",
+DlgLstTypeLRoman	: "Store romertal (I, II, III)",
+
+// Document Properties Dialog
+DlgDocGeneralTab	: "Generelt",
+DlgDocBackTab		: "Baggrund",
+DlgDocColorsTab		: "Farver og margen",
+DlgDocMetaTab		: "Metadata",
+
+DlgDocPageTitle		: "Sidetitel",
+DlgDocLangDir		: "Sprog",
+DlgDocLangDirLTR	: "Fra venstre mod højre (LTR)",
+DlgDocLangDirRTL	: "Fra højre mod venstre (RTL)",
+DlgDocLangCode		: "Landekode",
+DlgDocCharSet		: "Tegnsæt kode",
+DlgDocCharSetCE		: "Central European",	//MISSING
+DlgDocCharSetCT		: "Chinese Traditional (Big5)",	//MISSING
+DlgDocCharSetCR		: "Cyrillic",	//MISSING
+DlgDocCharSetGR		: "Greek",	//MISSING
+DlgDocCharSetJP		: "Japanese",	//MISSING
+DlgDocCharSetKR		: "Korean",	//MISSING
+DlgDocCharSetTR		: "Turkish",	//MISSING
+DlgDocCharSetUN		: "Unicode (UTF-8)",	//MISSING
+DlgDocCharSetWE		: "Western European",	//MISSING
+DlgDocCharSetOther	: "Anden tegnsæt kode",
+
+DlgDocDocType		: "Dokumenttype kategori",
+DlgDocDocTypeOther	: "Anden dokumenttype kategori",
+DlgDocIncXHTML		: "Inkludere XHTML deklartion",
+DlgDocBgColor		: "Baggrundsfarve",
+DlgDocBgImage		: "Baggrundsbillede URL",
+DlgDocBgNoScroll	: "Fastlåst baggrund",
+DlgDocCText			: "Tekst",
+DlgDocCLink			: "Hyperlink",
+DlgDocCVisited		: "Besøgt hyperlink",
+DlgDocCActive		: "Aktivt hyperlink",
+DlgDocMargins		: "Sidemargen",
+DlgDocMaTop			: "Øverst",
+DlgDocMaLeft		: "Venstre",
+DlgDocMaRight		: "Højre",
+DlgDocMaBottom		: "Nederst",
+DlgDocMeIndex		: "Dokument index nøgleord (kommasepareret)",
+DlgDocMeDescr		: "Dokument beskrivelse",
+DlgDocMeAuthor		: "Forfatter",
+DlgDocMeCopy		: "Copyright",
+DlgDocPreview		: "Vis",
+
+// Templates Dialog
+Templates			: "Skabeloner",
+DlgTemplatesTitle	: "Indholdsskabeloner",
+DlgTemplatesSelMsg	: "Vælg den skabelon, som skal åbnes i editoren.<br>(Nuværende indhold vil blive overskrevet!):",
+DlgTemplatesLoading	: "Henter liste over skabeloner...",
+DlgTemplatesNoTpl	: "(Der er ikke defineret nogen skabelon!)",
+DlgTemplatesReplace	: "Replace actual contents",	//MISSING
+
+// About Dialog
+DlgAboutAboutTab	: "Om",
+DlgAboutBrowserInfoTab	: "Generelt",
+DlgAboutLicenseTab	: "Licens",
+DlgAboutVersion		: "version",
+DlgAboutInfo		: "For yderlig information gå til"
+};


Property changes on: announcement/trunk/src/main/webapp/fckeditor/editor/lang/da.js
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/webapp/fckeditor/editor/lang/de.js
===================================================================
--- announcement/trunk/src/main/webapp/fckeditor/editor/lang/de.js	                        (rev 0)
+++ announcement/trunk/src/main/webapp/fckeditor/editor/lang/de.js	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,515 @@
+/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2008 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * German language file.
+ */
+
+var FCKLang =
+{
+// Language direction : "ltr" (left to right) or "rtl" (right to left).
+Dir					: "ltr",
+
+ToolbarCollapse		: "Symbolleiste einklappen",
+ToolbarExpand		: "Symbolleiste ausklappen",
+
+// Toolbar Items and Context Menu
+Save				: "Speichern",
+NewPage				: "Neue Seite",
+Preview				: "Vorschau",
+Cut					: "Ausschneiden",
+Copy				: "Kopieren",
+Paste				: "Einfügen",
+PasteText			: "aus Textdatei einfügen",
+PasteWord			: "aus MS-Word einfügen",
+Print				: "Drucken",
+SelectAll			: "Alles auswählen",
+RemoveFormat		: "Formatierungen entfernen",
+InsertLinkLbl		: "Link",
+InsertLink			: "Link einfügen/editieren",
+RemoveLink			: "Link entfernen",
+Anchor				: "Anker einfügen/editieren",
+AnchorDelete		: "Anker entfernen",
+InsertImageLbl		: "Bild",
+InsertImage			: "Bild einfügen/editieren",
+InsertFlashLbl		: "Flash",
+InsertFlash			: "Flash einfügen/editieren",
+InsertTableLbl		: "Tabelle",
+InsertTable			: "Tabelle einfügen/editieren",
+InsertLineLbl		: "Linie",
+InsertLine			: "Horizontale Linie einfügen",
+InsertSpecialCharLbl: "Sonderzeichen",
+InsertSpecialChar	: "Sonderzeichen einfügen/editieren",
+InsertSmileyLbl		: "Smiley",
+InsertSmiley		: "Smiley einfügen",
+About				: "Über FCKeditor",
+Bold				: "Fett",
+Italic				: "Kursiv",
+Underline			: "Unterstrichen",
+StrikeThrough		: "Durchgestrichen",
+Subscript			: "Tiefgestellt",
+Superscript			: "Hochgestellt",
+LeftJustify			: "Linksbündig",
+CenterJustify		: "Zentriert",
+RightJustify		: "Rechtsbündig",
+BlockJustify		: "Blocksatz",
+DecreaseIndent		: "Einzug verringern",
+IncreaseIndent		: "Einzug erhöhen",
+Blockquote			: "Zitatblock",
+Undo				: "Rückgängig",
+Redo				: "Wiederherstellen",
+NumberedListLbl		: "Nummerierte Liste",
+NumberedList		: "Nummerierte Liste einfügen/entfernen",
+BulletedListLbl		: "Liste",
+BulletedList		: "Liste einfügen/entfernen",
+ShowTableBorders	: "Zeige Tabellenrahmen",
+ShowDetails			: "Zeige Details",
+Style				: "Stil",
+FontFormat			: "Format",
+Font				: "Schriftart",
+FontSize			: "Größe",
+TextColor			: "Textfarbe",
+BGColor				: "Hintergrundfarbe",
+Source				: "Quellcode",
+Find				: "Suchen",
+Replace				: "Ersetzen",
+SpellCheck			: "Rechtschreibprüfung",
+UniversalKeyboard	: "Universal-Tastatur",
+PageBreakLbl		: "Seitenumbruch",
+PageBreak			: "Seitenumbruch einfügen",
+
+Form			: "Formular",
+Checkbox		: "Checkbox",
+RadioButton		: "Radiobutton",
+TextField		: "Textfeld einzeilig",
+Textarea		: "Textfeld mehrzeilig",
+HiddenField		: "verstecktes Feld",
+Button			: "Klickbutton",
+SelectionField	: "Auswahlfeld",
+ImageButton		: "Bildbutton",
+
+FitWindow		: "Editor maximieren",
+ShowBlocks		: "Blöcke anzeigen",
+
+// Context Menu
+EditLink			: "Link editieren",
+CellCM				: "Zelle",
+RowCM				: "Zeile",
+ColumnCM			: "Spalte",
+InsertRowAfter		: "Zeile unterhalb einfügen",
+InsertRowBefore		: "Zeile oberhalb einfügen",
+DeleteRows			: "Zeile entfernen",
+InsertColumnAfter	: "Spalte rechts danach einfügen",
+InsertColumnBefore	: "Spalte links davor einfügen",
+DeleteColumns		: "Spalte löschen",
+InsertCellAfter		: "Zelle danach einfügen",
+InsertCellBefore	: "Zelle davor einfügen",
+DeleteCells			: "Zelle löschen",
+MergeCells			: "Zellen verbinden",
+MergeRight			: "nach rechts verbinden",
+MergeDown			: "nach unten verbinden",
+HorizontalSplitCell	: "Zelle horizontal teilen",
+VerticalSplitCell	: "Zelle vertikal teilen",
+TableDelete			: "Tabelle löschen",
+CellProperties		: "Zellen-Eigenschaften",
+TableProperties		: "Tabellen-Eigenschaften",
+ImageProperties		: "Bild-Eigenschaften",
+FlashProperties		: "Flash-Eigenschaften",
+
+AnchorProp			: "Anker-Eigenschaften",
+ButtonProp			: "Button-Eigenschaften",
+CheckboxProp		: "Checkbox-Eigenschaften",
+HiddenFieldProp		: "Verstecktes Feld-Eigenschaften",
+RadioButtonProp		: "Optionsfeld-Eigenschaften",
+ImageButtonProp		: "Bildbutton-Eigenschaften",
+TextFieldProp		: "Textfeld (einzeilig) Eigenschaften",
+SelectionFieldProp	: "Auswahlfeld-Eigenschaften",
+TextareaProp		: "Textfeld (mehrzeilig) Eigenschaften",
+FormProp			: "Formular-Eigenschaften",
+
+FontFormats			: "Normal;Formatiert;Addresse;Überschrift 1;Überschrift 2;Überschrift 3;Überschrift 4;Überschrift 5;Überschrift 6;Normal (DIV)",
+
+// Alerts and Messages
+ProcessingXHTML		: "Bearbeite XHTML. Bitte warten...",
+Done				: "Fertig",
+PasteWordConfirm	: "Der Text, den Sie einfügen möchten, scheint aus MS-Word kopiert zu sein. Möchten Sie ihn zuvor bereinigen lassen?",
+NotCompatiblePaste	: "Diese Funktion steht nur im Internet Explorer ab Version 5.5 zur Verfügung. Möchten Sie den Text unbereinigt einfügen?",
+UnknownToolbarItem	: "Unbekanntes Menüleisten-Objekt \"%1\"",
+UnknownCommand		: "Unbekannter Befehl \"%1\"",
+NotImplemented		: "Befehl nicht implementiert",
+UnknownToolbarSet	: "Menüleiste \"%1\" existiert nicht",
+NoActiveX			: "Die Sicherheitseinstellungen Ihres Browsers beschränken evtl. einige Funktionen des Editors. Aktivieren Sie die Option \"ActiveX-Steuerelemente und Plugins ausführen\" in den Sicherheitseinstellungen, um diese Funktionen nutzen zu können",
+BrowseServerBlocked : "Ein Auswahlfenster konnte nicht geöffnet werden. Stellen Sie sicher, das alle Popup-Blocker ausgeschaltet sind.",
+DialogBlocked		: "Das Dialog-Fenster konnte nicht geöffnet werden. Stellen Sie sicher, das alle Popup-Blocker ausgeschaltet sind.",
+
+// Dialogs
+DlgBtnOK			: "OK",
+DlgBtnCancel		: "Abbrechen",
+DlgBtnClose			: "Schließen",
+DlgBtnBrowseServer	: "Server durchsuchen",
+DlgAdvancedTag		: "Erweitert",
+DlgOpOther			: "<andere>",
+DlgInfoTab			: "Info",
+DlgAlertUrl			: "Bitte tragen Sie die URL ein",
+
+// General Dialogs Labels
+DlgGenNotSet		: "<nichts>",
+DlgGenId			: "ID",
+DlgGenLangDir		: "Schreibrichtung",
+DlgGenLangDirLtr	: "Links nach Rechts (LTR)",
+DlgGenLangDirRtl	: "Rechts nach Links (RTL)",
+DlgGenLangCode		: "Sprachenkürzel",
+DlgGenAccessKey		: "Zugriffstaste",
+DlgGenName			: "Name",
+DlgGenTabIndex		: "Tab-Index",
+DlgGenLongDescr		: "Langform URL",
+DlgGenClass			: "Stylesheet Klasse",
+DlgGenTitle			: "Titel Beschreibung",
+DlgGenContType		: "Inhaltstyp",
+DlgGenLinkCharset	: "Ziel-Zeichensatz",
+DlgGenStyle			: "Style",
+
+// Image Dialog
+DlgImgTitle			: "Bild-Eigenschaften",
+DlgImgInfoTab		: "Bild-Info",
+DlgImgBtnUpload		: "Zum Server senden",
+DlgImgURL			: "Bildauswahl",
+DlgImgUpload		: "Upload",
+DlgImgAlt			: "Alternativer Text",
+DlgImgWidth			: "Breite",
+DlgImgHeight		: "Höhe",
+DlgImgLockRatio		: "Größenverhältniss beibehalten",
+DlgBtnResetSize		: "Größe zurücksetzen",
+DlgImgBorder		: "Rahmen",
+DlgImgHSpace		: "H-Abstand",
+DlgImgVSpace		: "V-Abstand",
+DlgImgAlign			: "Ausrichtung",
+DlgImgAlignLeft		: "Links",
+DlgImgAlignAbsBottom: "Abs Unten",
+DlgImgAlignAbsMiddle: "Abs Mitte",
+DlgImgAlignBaseline	: "Baseline",
+DlgImgAlignBottom	: "Unten",
+DlgImgAlignMiddle	: "Mitte",
+DlgImgAlignRight	: "Rechts",
+DlgImgAlignTextTop	: "Text Oben",
+DlgImgAlignTop		: "Oben",
+DlgImgPreview		: "Vorschau",
+DlgImgAlertUrl		: "Bitte geben Sie die Bild-URL an",
+DlgImgLinkTab		: "Link",
+
+// Flash Dialog
+DlgFlashTitle		: "Flash-Eigenschaften",
+DlgFlashChkPlay		: "autom. Abspielen",
+DlgFlashChkLoop		: "Endlosschleife",
+DlgFlashChkMenu		: "Flash-Menü aktivieren",
+DlgFlashScale		: "Skalierung",
+DlgFlashScaleAll	: "Alles anzeigen",
+DlgFlashScaleNoBorder	: "ohne Rand",
+DlgFlashScaleFit	: "Passgenau",
+
+// Link Dialog
+DlgLnkWindowTitle	: "Link",
+DlgLnkInfoTab		: "Link-Info",
+DlgLnkTargetTab		: "Zielseite",
+
+DlgLnkType			: "Link-Typ",
+DlgLnkTypeURL		: "URL",
+DlgLnkTypeAnchor	: "Anker in dieser Seite",
+DlgLnkTypeEMail		: "E-Mail",
+DlgLnkProto			: "Protokoll",
+DlgLnkProtoOther	: "<anderes>",
+DlgLnkURL			: "URL",
+DlgLnkAnchorSel		: "Anker auswählen",
+DlgLnkAnchorByName	: "nach Anker Name",
+DlgLnkAnchorById	: "nach Element Id",
+DlgLnkNoAnchors		: "(keine Anker im Dokument vorhanden)",
+DlgLnkEMail			: "E-Mail Addresse",
+DlgLnkEMailSubject	: "Betreffzeile",
+DlgLnkEMailBody		: "Nachrichtentext",
+DlgLnkUpload		: "Upload",
+DlgLnkBtnUpload		: "Zum Server senden",
+
+DlgLnkTarget		: "Zielseite",
+DlgLnkTargetFrame	: "<Frame>",
+DlgLnkTargetPopup	: "<Pop-up Fenster>",
+DlgLnkTargetBlank	: "Neues Fenster (_blank)",
+DlgLnkTargetParent	: "Oberes Fenster (_parent)",
+DlgLnkTargetSelf	: "Gleiches Fenster (_self)",
+DlgLnkTargetTop		: "Oberstes Fenster (_top)",
+DlgLnkTargetFrameName	: "Ziel-Fenster-Name",
+DlgLnkPopWinName	: "Pop-up Fenster-Name",
+DlgLnkPopWinFeat	: "Pop-up Fenster-Eigenschaften",
+DlgLnkPopResize		: "Vergrößerbar",
+DlgLnkPopLocation	: "Adress-Leiste",
+DlgLnkPopMenu		: "Menü-Leiste",
+DlgLnkPopScroll		: "Rollbalken",
+DlgLnkPopStatus		: "Statusleiste",
+DlgLnkPopToolbar	: "Werkzeugleiste",
+DlgLnkPopFullScrn	: "Vollbild (IE)",
+DlgLnkPopDependent	: "Abhängig (Netscape)",
+DlgLnkPopWidth		: "Breite",
+DlgLnkPopHeight		: "Höhe",
+DlgLnkPopLeft		: "Linke Position",
+DlgLnkPopTop		: "Obere Position",
+
+DlnLnkMsgNoUrl		: "Bitte geben Sie die Link-URL an",
+DlnLnkMsgNoEMail	: "Bitte geben Sie e-Mail Adresse an",
+DlnLnkMsgNoAnchor	: "Bitte wählen Sie einen Anker aus",
+DlnLnkMsgInvPopName	: "Der Name des Popups muss mit einem Buchstaben beginnen und darf keine Leerzeichen enthalten",
+
+// Color Dialog
+DlgColorTitle		: "Farbauswahl",
+DlgColorBtnClear	: "Keine Farbe",
+DlgColorHighlight	: "Vorschau",
+DlgColorSelected	: "Ausgewählt",
+
+// Smiley Dialog
+DlgSmileyTitle		: "Smiley auswählen",
+
+// Special Character Dialog
+DlgSpecialCharTitle	: "Sonderzeichen auswählen",
+
+// Table Dialog
+DlgTableTitle		: "Tabellen-Eigenschaften",
+DlgTableRows		: "Zeile",
+DlgTableColumns		: "Spalte",
+DlgTableBorder		: "Rahmen",
+DlgTableAlign		: "Ausrichtung",
+DlgTableAlignNotSet	: "<keine>",
+DlgTableAlignLeft	: "Links",
+DlgTableAlignCenter	: "Zentriert",
+DlgTableAlignRight	: "Rechts",
+DlgTableWidth		: "Breite",
+DlgTableWidthPx		: "Pixel",
+DlgTableWidthPc		: "%",
+DlgTableHeight		: "Höhe",
+DlgTableCellSpace	: "Zellenabstand außen",
+DlgTableCellPad		: "Zellenabstand innen",
+DlgTableCaption		: "Überschrift",
+DlgTableSummary		: "Inhaltsübersicht",
+
+// Table Cell Dialog
+DlgCellTitle		: "Zellen-Eigenschaften",
+DlgCellWidth		: "Breite",
+DlgCellWidthPx		: "Pixel",
+DlgCellWidthPc		: "%",
+DlgCellHeight		: "Höhe",
+DlgCellWordWrap		: "Umbruch",
+DlgCellWordWrapNotSet	: "<keiner>",
+DlgCellWordWrapYes	: "Ja",
+DlgCellWordWrapNo	: "Nein",
+DlgCellHorAlign		: "Horizontale Ausrichtung",
+DlgCellHorAlignNotSet	: "<keine>",
+DlgCellHorAlignLeft	: "Links",
+DlgCellHorAlignCenter	: "Zentriert",
+DlgCellHorAlignRight: "Rechts",
+DlgCellVerAlign		: "Vertikale Ausrichtung",
+DlgCellVerAlignNotSet	: "<keine>",
+DlgCellVerAlignTop	: "Oben",
+DlgCellVerAlignMiddle	: "Mitte",
+DlgCellVerAlignBottom	: "Unten",
+DlgCellVerAlignBaseline	: "Grundlinie",
+DlgCellRowSpan		: "Zeilen zusammenfassen",
+DlgCellCollSpan		: "Spalten zusammenfassen",
+DlgCellBackColor	: "Hintergrundfarbe",
+DlgCellBorderColor	: "Rahmenfarbe",
+DlgCellBtnSelect	: "Auswahl...",
+
+// Find and Replace Dialog
+DlgFindAndReplaceTitle	: "Suchen und Ersetzen",
+
+// Find Dialog
+DlgFindTitle		: "Finden",
+DlgFindFindBtn		: "Finden",
+DlgFindNotFoundMsg	: "Der gesuchte Text wurde nicht gefunden.",
+
+// Replace Dialog
+DlgReplaceTitle			: "Ersetzen",
+DlgReplaceFindLbl		: "Suche nach:",
+DlgReplaceReplaceLbl	: "Ersetze mit:",
+DlgReplaceCaseChk		: "Groß-Kleinschreibung beachten",
+DlgReplaceReplaceBtn	: "Ersetzen",
+DlgReplaceReplAllBtn	: "Alle Ersetzen",
+DlgReplaceWordChk		: "Nur ganze Worte suchen",
+
+// Paste Operations / Dialog
+PasteErrorCut	: "Die Sicherheitseinstellungen Ihres Browsers lassen es nicht zu, den Text automatisch auszuschneiden. Bitte benutzen Sie die System-Zwischenablage über STRG-X (ausschneiden) und STRG-V (einfügen).",
+PasteErrorCopy	: "Die Sicherheitseinstellungen Ihres Browsers lassen es nicht zu, den Text automatisch kopieren. Bitte benutzen Sie die System-Zwischenablage über STRG-C (kopieren).",
+
+PasteAsText		: "Als Text einfügen",
+PasteFromWord	: "Aus Word einfügen",
+
+DlgPasteMsg2	: "Bitte fügen Sie den Text in der folgenden Box über die Tastatur (mit <STRONG>Strg+V</STRONG>) ein und bestätigen Sie mit <STRONG>OK</STRONG>.",
+DlgPasteSec		: "Aufgrund von Sicherheitsbeschränkungen Ihres Browsers kann der Editor nicht direkt auf die Zwischenablage zugreifen. Bitte fügen Sie den Inhalt erneut in diesem Fenster ein.",
+DlgPasteIgnoreFont		: "Ignoriere Schriftart-Definitionen",
+DlgPasteRemoveStyles	: "Entferne Style-Definitionen",
+
+// Color Picker
+ColorAutomatic	: "Automatisch",
+ColorMoreColors	: "Weitere Farben...",
+
+// Document Properties
+DocProps		: "Dokument-Eigenschaften",
+
+// Anchor Dialog
+DlgAnchorTitle		: "Anker-Eigenschaften",
+DlgAnchorName		: "Anker Name",
+DlgAnchorErrorName	: "Bitte geben Sie den Namen des Ankers ein",
+
+// Speller Pages Dialog
+DlgSpellNotInDic		: "Nicht im Wörterbuch",
+DlgSpellChangeTo		: "Ändern in",
+DlgSpellBtnIgnore		: "Ignorieren",
+DlgSpellBtnIgnoreAll	: "Alle Ignorieren",
+DlgSpellBtnReplace		: "Ersetzen",
+DlgSpellBtnReplaceAll	: "Alle Ersetzen",
+DlgSpellBtnUndo			: "Rückgängig",
+DlgSpellNoSuggestions	: " - keine Vorschläge - ",
+DlgSpellProgress		: "Rechtschreibprüfung läuft...",
+DlgSpellNoMispell		: "Rechtschreibprüfung abgeschlossen - keine Fehler gefunden",
+DlgSpellNoChanges		: "Rechtschreibprüfung abgeschlossen - keine Worte geändert",
+DlgSpellOneChange		: "Rechtschreibprüfung abgeschlossen - ein Wort geändert",
+DlgSpellManyChanges		: "Rechtschreibprüfung abgeschlossen - %1 Wörter geändert",
+
+IeSpellDownload			: "Rechtschreibprüfung nicht installiert. Möchten Sie sie jetzt herunterladen?",
+
+// Button Dialog
+DlgButtonText		: "Text (Wert)",
+DlgButtonType		: "Typ",
+DlgButtonTypeBtn	: "Button",
+DlgButtonTypeSbm	: "Absenden",
+DlgButtonTypeRst	: "Zurücksetzen",
+
+// Checkbox and Radio Button Dialogs
+DlgCheckboxName		: "Name",
+DlgCheckboxValue	: "Wert",
+DlgCheckboxSelected	: "ausgewählt",
+
+// Form Dialog
+DlgFormName		: "Name",
+DlgFormAction	: "Action",
+DlgFormMethod	: "Method",
+
+// Select Field Dialog
+DlgSelectName		: "Name",
+DlgSelectValue		: "Wert",
+DlgSelectSize		: "Größe",
+DlgSelectLines		: "Linien",
+DlgSelectChkMulti	: "Erlaube Mehrfachauswahl",
+DlgSelectOpAvail	: "Mögliche Optionen",
+DlgSelectOpText		: "Text",
+DlgSelectOpValue	: "Wert",
+DlgSelectBtnAdd		: "Hinzufügen",
+DlgSelectBtnModify	: "Ändern",
+DlgSelectBtnUp		: "Hoch",
+DlgSelectBtnDown	: "Runter",
+DlgSelectBtnSetValue : "Setze als Standardwert",
+DlgSelectBtnDelete	: "Entfernen",
+
+// Textarea Dialog
+DlgTextareaName	: "Name",
+DlgTextareaCols	: "Spalten",
+DlgTextareaRows	: "Reihen",
+
+// Text Field Dialog
+DlgTextName			: "Name",
+DlgTextValue		: "Wert",
+DlgTextCharWidth	: "Zeichenbreite",
+DlgTextMaxChars		: "Max. Zeichen",
+DlgTextType			: "Typ",
+DlgTextTypeText		: "Text",
+DlgTextTypePass		: "Passwort",
+
+// Hidden Field Dialog
+DlgHiddenName	: "Name",
+DlgHiddenValue	: "Wert",
+
+// Bulleted List Dialog
+BulletedListProp	: "Listen-Eigenschaften",
+NumberedListProp	: "Nummerierte Listen-Eigenschaften",
+DlgLstStart			: "Start",
+DlgLstType			: "Typ",
+DlgLstTypeCircle	: "Ring",
+DlgLstTypeDisc		: "Kreis",
+DlgLstTypeSquare	: "Quadrat",
+DlgLstTypeNumbers	: "Nummern (1, 2, 3)",
+DlgLstTypeLCase		: "Kleinbuchstaben (a, b, c)",
+DlgLstTypeUCase		: "Großbuchstaben (A, B, C)",
+DlgLstTypeSRoman	: "Kleine römische Zahlen (i, ii, iii)",
+DlgLstTypeLRoman	: "Große römische Zahlen (I, II, III)",
+
+// Document Properties Dialog
+DlgDocGeneralTab	: "Allgemein",
+DlgDocBackTab		: "Hintergrund",
+DlgDocColorsTab		: "Farben und Abstände",
+DlgDocMetaTab		: "Metadaten",
+
+DlgDocPageTitle		: "Seitentitel",
+DlgDocLangDir		: "Schriftrichtung",
+DlgDocLangDirLTR	: "Links nach Rechts",
+DlgDocLangDirRTL	: "Rechts nach Links",
+DlgDocLangCode		: "Sprachkürzel",
+DlgDocCharSet		: "Zeichenkodierung",
+DlgDocCharSetCE		: "Zentraleuropäisch",
+DlgDocCharSetCT		: "traditionell Chinesisch (Big5)",
+DlgDocCharSetCR		: "Kyrillisch",
+DlgDocCharSetGR		: "Griechisch",
+DlgDocCharSetJP		: "Japanisch",
+DlgDocCharSetKR		: "Koreanisch",
+DlgDocCharSetTR		: "Türkisch",
+DlgDocCharSetUN		: "Unicode (UTF-8)",
+DlgDocCharSetWE		: "Westeuropäisch",
+DlgDocCharSetOther	: "Andere Zeichenkodierung",
+
+DlgDocDocType		: "Dokumententyp",
+DlgDocDocTypeOther	: "Anderer Dokumententyp",
+DlgDocIncXHTML		: "Beziehe XHTML Deklarationen ein",
+DlgDocBgColor		: "Hintergrundfarbe",
+DlgDocBgImage		: "Hintergrundbild URL",
+DlgDocBgNoScroll	: "feststehender Hintergrund",
+DlgDocCText			: "Text",
+DlgDocCLink			: "Link",
+DlgDocCVisited		: "Besuchter Link",
+DlgDocCActive		: "Aktiver Link",
+DlgDocMargins		: "Seitenränder",
+DlgDocMaTop			: "Oben",
+DlgDocMaLeft		: "Links",
+DlgDocMaRight		: "Rechts",
+DlgDocMaBottom		: "Unten",
+DlgDocMeIndex		: "Schlüsselwörter (durch Komma getrennt)",
+DlgDocMeDescr		: "Dokument-Beschreibung",
+DlgDocMeAuthor		: "Autor",
+DlgDocMeCopy		: "Copyright",
+DlgDocPreview		: "Vorschau",
+
+// Templates Dialog
+Templates			: "Vorlagen",
+DlgTemplatesTitle	: "Vorlagen",
+DlgTemplatesSelMsg	: "Klicken Sie auf eine Vorlage, um sie im Editor zu öffnen (der aktuelle Inhalt wird dabei gelöscht!):",
+DlgTemplatesLoading	: "Liste der Vorlagen wird geladen. Bitte warten...",
+DlgTemplatesNoTpl	: "(keine Vorlagen definiert)",
+DlgTemplatesReplace	: "Aktuellen Inhalt ersetzen",
+
+// About Dialog
+DlgAboutAboutTab	: "Über",
+DlgAboutBrowserInfoTab	: "Browser-Info",
+DlgAboutLicenseTab	: "Lizenz",
+DlgAboutVersion		: "Version",
+DlgAboutInfo		: "Für weitere Informationen siehe"
+};


Property changes on: announcement/trunk/src/main/webapp/fckeditor/editor/lang/de.js
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/webapp/fckeditor/editor/lang/el.js
===================================================================
--- announcement/trunk/src/main/webapp/fckeditor/editor/lang/el.js	                        (rev 0)
+++ announcement/trunk/src/main/webapp/fckeditor/editor/lang/el.js	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,515 @@
+/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2008 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * Greek language file.
+ */
+
+var FCKLang =
+{
+// Language direction : "ltr" (left to right) or "rtl" (right to left).
+Dir					: "ltr",
+
+ToolbarCollapse		: "Απόκρυψη Μπάρας Εργαλείων",
+ToolbarExpand		: "Εμφάνιση Μπάρας Εργαλείων",
+
+// Toolbar Items and Context Menu
+Save				: "Αποθήκευση",
+NewPage				: "Νέα Σελίδα",
+Preview				: "Προεπισκόπιση",
+Cut					: "Αποκοπή",
+Copy				: "Αντιγραφή",
+Paste				: "Επικόλληση",
+PasteText			: "Επικόλληση (απλό κείμενο)",
+PasteWord			: "Επικόλληση από το Word",
+Print				: "Εκτύπωση",
+SelectAll			: "Επιλογή όλων",
+RemoveFormat		: "Αφαίρεση Μορφοποίησης",
+InsertLinkLbl		: "Σύνδεσμος (Link)",
+InsertLink			: "Εισαγωγή/Μεταβολή Συνδέσμου (Link)",
+RemoveLink			: "Αφαίρεση Συνδέσμου (Link)",
+Anchor				: "Εισαγωγή/επεξεργασία Anchor",
+AnchorDelete		: "Remove Anchor",	//MISSING
+InsertImageLbl		: "Εικόνα",
+InsertImage			: "Εισαγωγή/Μεταβολή Εικόνας",
+InsertFlashLbl		: "Εισαγωγή Flash",
+InsertFlash			: "Εισαγωγή/επεξεργασία Flash",
+InsertTableLbl		: "Πίνακας",
+InsertTable			: "Εισαγωγή/Μεταβολή Πίνακα",
+InsertLineLbl		: "Γραμμή",
+InsertLine			: "Εισαγωγή Οριζόντιας Γραμμής",
+InsertSpecialCharLbl: "Ειδικό Σύμβολο",
+InsertSpecialChar	: "Εισαγωγή Ειδικού Συμβόλου",
+InsertSmileyLbl		: "Smiley",
+InsertSmiley		: "Εισαγωγή Smiley",
+About				: "Περί του FCKeditor",
+Bold				: "Έντονα",
+Italic				: "Πλάγια",
+Underline			: "Υπογράμμιση",
+StrikeThrough		: "Διαγράμμιση",
+Subscript			: "Δείκτης",
+Superscript			: "Εκθέτης",
+LeftJustify			: "Στοίχιση Αριστερά",
+CenterJustify		: "Στοίχιση στο Κέντρο",
+RightJustify		: "Στοίχιση Δεξιά",
+BlockJustify		: "Πλήρης Στοίχιση (Block)",
+DecreaseIndent		: "Μείωση Εσοχής",
+IncreaseIndent		: "Αύξηση Εσοχής",
+Blockquote			: "Blockquote",	//MISSING
+Undo				: "Αναίρεση",
+Redo				: "Επαναφορά",
+NumberedListLbl		: "Λίστα με Αριθμούς",
+NumberedList		: "Εισαγωγή/Διαγραφή Λίστας με Αριθμούς",
+BulletedListLbl		: "Λίστα με Bullets",
+BulletedList		: "Εισαγωγή/Διαγραφή Λίστας με Bullets",
+ShowTableBorders	: "Προβολή Ορίων Πίνακα",
+ShowDetails			: "Προβολή Λεπτομερειών",
+Style				: "Στυλ",
+FontFormat			: "Μορφή Γραμματοσειράς",
+Font				: "Γραμματοσειρά",
+FontSize			: "Μέγεθος",
+TextColor			: "Χρώμα Γραμμάτων",
+BGColor				: "Χρώμα Υποβάθρου",
+Source				: "HTML κώδικας",
+Find				: "Αναζήτηση",
+Replace				: "Αντικατάσταση",
+SpellCheck			: "Ορθογραφικός έλεγχος",
+UniversalKeyboard	: "Διεθνής πληκτρολόγιο",
+PageBreakLbl		: "Τέλος σελίδας",
+PageBreak			: "Εισαγωγή τέλους σελίδας",
+
+Form			: "Φόρμα",
+Checkbox		: "Κουτί επιλογής",
+RadioButton		: "Κουμπί Radio",
+TextField		: "Πεδίο κειμένου",
+Textarea		: "Περιοχή κειμένου",
+HiddenField		: "Κρυφό πεδίο",
+Button			: "Κουμπί",
+SelectionField	: "Πεδίο επιλογής",
+ImageButton		: "Κουμπί εικόνας",
+
+FitWindow		: "Μεγιστοποίηση προγράμματος",
+ShowBlocks		: "Show Blocks",	//MISSING
+
+// Context Menu
+EditLink			: "Μεταβολή Συνδέσμου (Link)",
+CellCM				: "Κελί",
+RowCM				: "Σειρά",
+ColumnCM			: "Στήλη",
+InsertRowAfter		: "Insert Row After",	//MISSING
+InsertRowBefore		: "Insert Row Before",	//MISSING
+DeleteRows			: "Διαγραφή Γραμμών",
+InsertColumnAfter	: "Insert Column After",	//MISSING
+InsertColumnBefore	: "Insert Column Before",	//MISSING
+DeleteColumns		: "Διαγραφή Κολωνών",
+InsertCellAfter		: "Insert Cell After",	//MISSING
+InsertCellBefore	: "Insert Cell Before",	//MISSING
+DeleteCells			: "Διαγραφή Κελιών",
+MergeCells			: "Ενοποίηση Κελιών",
+MergeRight			: "Merge Right",	//MISSING
+MergeDown			: "Merge Down",	//MISSING
+HorizontalSplitCell	: "Split Cell Horizontally",	//MISSING
+VerticalSplitCell	: "Split Cell Vertically",	//MISSING
+TableDelete			: "Διαγραφή πίνακα",
+CellProperties		: "Ιδιότητες Κελιού",
+TableProperties		: "Ιδιότητες Πίνακα",
+ImageProperties		: "Ιδιότητες Εικόνας",
+FlashProperties		: "Ιδιότητες Flash",
+
+AnchorProp			: "Ιδιότητες άγκυρας",
+ButtonProp			: "Ιδιότητες κουμπιού",
+CheckboxProp		: "Ιδιότητες κουμπιού επιλογής",
+HiddenFieldProp		: "Ιδιότητες κρυφού πεδίου",
+RadioButtonProp		: "Ιδιότητες κουμπιού radio",
+ImageButtonProp		: "Ιδιότητες κουμπιού εικόνας",
+TextFieldProp		: "Ιδιότητες πεδίου κειμένου",
+SelectionFieldProp	: "Ιδιότητες πεδίου επιλογής",
+TextareaProp		: "Ιδιότητες περιοχής κειμένου",
+FormProp			: "Ιδιότητες φόρμας",
+
+FontFormats			: "Κανονικό;Μορφοποιημένο;Διεύθυνση;Επικεφαλίδα 1;Επικεφαλίδα 2;Επικεφαλίδα 3;Επικεφαλίδα 4;Επικεφαλίδα 5;Επικεφαλίδα 6",
+
+// Alerts and Messages
+ProcessingXHTML		: "Επεξεργασία XHTML. Παρακαλώ περιμένετε...",
+Done				: "Έτοιμο",
+PasteWordConfirm	: "Το κείμενο που θέλετε να επικολήσετε, φαίνεται πως προέρχεται από το Word. Θέλετε να καθαριστεί πριν επικοληθεί;",
+NotCompatiblePaste	: "Αυτή η επιλογή είναι διαθέσιμη στον Internet Explorer έκδοση 5.5+. Θέλετε να γίνει η επικόλληση χωρίς καθαρισμό;",
+UnknownToolbarItem	: "Άγνωστο αντικείμενο της μπάρας εργαλείων \"%1\"",
+UnknownCommand		: "Άγνωστή εντολή \"%1\"",
+NotImplemented		: "Η εντολή δεν έχει ενεργοποιηθεί",
+UnknownToolbarSet	: "Η μπάρα εργαλείων \"%1\" δεν υπάρχει",
+NoActiveX			: "Οι ρυθμίσεις ασφαλείας του browser σας μπορεί να περιορίσουν κάποιες ρυθμίσεις του προγράμματος. Χρειάζεται να ενεργοποιήσετε την επιλογή \"Run ActiveX controls and plug-ins\". Ίσως παρουσιαστούν λάθη και παρατηρήσετε ελειπείς λειτουργίες.",
+BrowseServerBlocked : "Οι πόροι του browser σας δεν είναι προσπελάσιμοι. Σιγουρευτείτε ότι δεν υπάρχουν ενεργοί popup blockers.",
+DialogBlocked		: "Δεν ήταν δυνατό να ανοίξει το παράθυρο διαλόγου. Σιγουρευτείτε ότι δεν υπάρχουν ενεργοί popup blockers.",
+
+// Dialogs
+DlgBtnOK			: "OK",
+DlgBtnCancel		: "Ακύρωση",
+DlgBtnClose			: "Κλείσιμο",
+DlgBtnBrowseServer	: "Εξερεύνηση διακομιστή",
+DlgAdvancedTag		: "Για προχωρημένους",
+DlgOpOther			: "<Άλλα>",
+DlgInfoTab			: "Πληροφορίες",
+DlgAlertUrl			: "Παρακαλώ εισάγετε URL",
+
+// General Dialogs Labels
+DlgGenNotSet		: "<χωρίς>",
+DlgGenId			: "Id",
+DlgGenLangDir		: "Κατεύθυνση κειμένου",
+DlgGenLangDirLtr	: "Αριστερά προς Δεξιά (LTR)",
+DlgGenLangDirRtl	: "Δεξιά προς Αριστερά (RTL)",
+DlgGenLangCode		: "Κωδικός Γλώσσας",
+DlgGenAccessKey		: "Συντόμευση (Access Key)",
+DlgGenName			: "Όνομα",
+DlgGenTabIndex		: "Tab Index",
+DlgGenLongDescr		: "Αναλυτική περιγραφή URL",
+DlgGenClass			: "Stylesheet Classes",
+DlgGenTitle			: "Συμβουλευτικός τίτλος",
+DlgGenContType		: "Συμβουλευτικός τίτλος περιεχομένου",
+DlgGenLinkCharset	: "Linked Resource Charset",
+DlgGenStyle			: "Στύλ",
+
+// Image Dialog
+DlgImgTitle			: "Ιδιότητες Εικόνας",
+DlgImgInfoTab		: "Πληροφορίες Εικόνας",
+DlgImgBtnUpload		: "Αποστολή στον Διακομιστή",
+DlgImgURL			: "URL",
+DlgImgUpload		: "Αποστολή",
+DlgImgAlt			: "Εναλλακτικό Κείμενο (ALT)",
+DlgImgWidth			: "Πλάτος",
+DlgImgHeight		: "Ύψος",
+DlgImgLockRatio		: "Κλείδωμα Αναλογίας",
+DlgBtnResetSize		: "Επαναφορά Αρχικού Μεγέθους",
+DlgImgBorder		: "Περιθώριο",
+DlgImgHSpace		: "Οριζόντιος Χώρος (HSpace)",
+DlgImgVSpace		: "Κάθετος Χώρος (VSpace)",
+DlgImgAlign			: "Ευθυγράμμιση (Align)",
+DlgImgAlignLeft		: "Αριστερά",
+DlgImgAlignAbsBottom: "Απόλυτα Κάτω (Abs Bottom)",
+DlgImgAlignAbsMiddle: "Απόλυτα στη Μέση (Abs Middle)",
+DlgImgAlignBaseline	: "Γραμμή Βάσης (Baseline)",
+DlgImgAlignBottom	: "Κάτω (Bottom)",
+DlgImgAlignMiddle	: "Μέση (Middle)",
+DlgImgAlignRight	: "Δεξιά (Right)",
+DlgImgAlignTextTop	: "Κορυφή Κειμένου (Text Top)",
+DlgImgAlignTop		: "Πάνω (Top)",
+DlgImgPreview		: "Προεπισκόπιση",
+DlgImgAlertUrl		: "Εισάγετε την τοποθεσία (URL) της εικόνας",
+DlgImgLinkTab		: "Σύνδεσμος",
+
+// Flash Dialog
+DlgFlashTitle		: "Ιδιότητες flash",
+DlgFlashChkPlay		: "Αυτόματη έναρξη",
+DlgFlashChkLoop		: "Επανάληψη",
+DlgFlashChkMenu		: "Ενεργοποίηση Flash Menu",
+DlgFlashScale		: "Κλίμακα",
+DlgFlashScaleAll	: "Εμφάνιση όλων",
+DlgFlashScaleNoBorder	: "Χωρίς όρια",
+DlgFlashScaleFit	: "Ακριβής εφαρμογή",
+
+// Link Dialog
+DlgLnkWindowTitle	: "Σύνδεσμος (Link)",
+DlgLnkInfoTab		: "Link",
+DlgLnkTargetTab		: "Παράθυρο Στόχος (Target)",
+
+DlgLnkType			: "Τύπος συνδέσμου (Link)",
+DlgLnkTypeURL		: "URL",
+DlgLnkTypeAnchor	: "Άγκυρα σε αυτή τη σελίδα",
+DlgLnkTypeEMail		: "E-Mail",
+DlgLnkProto			: "Προτόκολο",
+DlgLnkProtoOther	: "<άλλο>",
+DlgLnkURL			: "URL",
+DlgLnkAnchorSel		: "Επιλέξτε μια άγκυρα",
+DlgLnkAnchorByName	: "Βάσει του Ονόματος (Name) της άγκυρας",
+DlgLnkAnchorById	: "Βάσει του Element Id",
+DlgLnkNoAnchors		: "(Δεν υπάρχουν άγκυρες στο κείμενο)",
+DlgLnkEMail			: "Διεύθυνση Ηλεκτρονικού Ταχυδρομείου",
+DlgLnkEMailSubject	: "Θέμα Μηνύματος",
+DlgLnkEMailBody		: "Κείμενο Μηνύματος",
+DlgLnkUpload		: "Αποστολή",
+DlgLnkBtnUpload		: "Αποστολή στον Διακομιστή",
+
+DlgLnkTarget		: "Παράθυρο Στόχος (Target)",
+DlgLnkTargetFrame	: "<πλαίσιο>",
+DlgLnkTargetPopup	: "<παράθυρο popup>",
+DlgLnkTargetBlank	: "Νέο Παράθυρο (_blank)",
+DlgLnkTargetParent	: "Γονικό Παράθυρο (_parent)",
+DlgLnkTargetSelf	: "Ίδιο Παράθυρο (_self)",
+DlgLnkTargetTop		: "Ανώτατο Παράθυρο (_top)",
+DlgLnkTargetFrameName	: "Όνομα πλαισίου στόχου",
+DlgLnkPopWinName	: "Όνομα Popup Window",
+DlgLnkPopWinFeat	: "Επιλογές Popup Window",
+DlgLnkPopResize		: "Με αλλαγή Μεγέθους",
+DlgLnkPopLocation	: "Μπάρα Τοποθεσίας",
+DlgLnkPopMenu		: "Μπάρα Menu",
+DlgLnkPopScroll		: "Μπάρες Κύλισης",
+DlgLnkPopStatus		: "Μπάρα Status",
+DlgLnkPopToolbar	: "Μπάρα Εργαλείων",
+DlgLnkPopFullScrn	: "Ολόκληρη η Οθόνη (IE)",
+DlgLnkPopDependent	: "Dependent (Netscape)",
+DlgLnkPopWidth		: "Πλάτος",
+DlgLnkPopHeight		: "Ύψος",
+DlgLnkPopLeft		: "Τοποθεσία Αριστερής Άκρης",
+DlgLnkPopTop		: "Τοποθεσία Πάνω Άκρης",
+
+DlnLnkMsgNoUrl		: "Εισάγετε την τοποθεσία (URL) του υπερσυνδέσμου (Link)",
+DlnLnkMsgNoEMail	: "Εισάγετε την διεύθυνση ηλεκτρονικού ταχυδρομείου",
+DlnLnkMsgNoAnchor	: "Επιλέξτε ένα Anchor",
+DlnLnkMsgInvPopName	: "Το όνομα του popup πρέπει να αρχίζει με χαρακτήρα της αλφαβήτου και να μην περιέχει κενά",
+
+// Color Dialog
+DlgColorTitle		: "Επιλογή χρώματος",
+DlgColorBtnClear	: "Καθαρισμός",
+DlgColorHighlight	: "Προεπισκόπιση",
+DlgColorSelected	: "Επιλεγμένο",
+
+// Smiley Dialog
+DlgSmileyTitle		: "Επιλέξτε ένα Smiley",
+
+// Special Character Dialog
+DlgSpecialCharTitle	: "Επιλέξτε ένα Ειδικό Σύμβολο",
+
+// Table Dialog
+DlgTableTitle		: "Ιδιότητες Πίνακα",
+DlgTableRows		: "Γραμμές",
+DlgTableColumns		: "Κολώνες",
+DlgTableBorder		: "Μέγεθος Περιθωρίου",
+DlgTableAlign		: "Στοίχιση",
+DlgTableAlignNotSet	: "<χωρίς>",
+DlgTableAlignLeft	: "Αριστερά",
+DlgTableAlignCenter	: "Κέντρο",
+DlgTableAlignRight	: "Δεξιά",
+DlgTableWidth		: "Πλάτος",
+DlgTableWidthPx		: "pixels",
+DlgTableWidthPc		: "\%",
+DlgTableHeight		: "Ύψος",
+DlgTableCellSpace	: "Απόσταση κελιών",
+DlgTableCellPad		: "Γέμισμα κελιών",
+DlgTableCaption		: "Υπέρτιτλος",
+DlgTableSummary		: "Περίληψη",
+
+// Table Cell Dialog
+DlgCellTitle		: "Ιδιότητες Κελιού",
+DlgCellWidth		: "Πλάτος",
+DlgCellWidthPx		: "pixels",
+DlgCellWidthPc		: "\%",
+DlgCellHeight		: "Ύψος",
+DlgCellWordWrap		: "Με αλλαγή γραμμής",
+DlgCellWordWrapNotSet	: "<χωρίς>",
+DlgCellWordWrapYes	: "Ναι",
+DlgCellWordWrapNo	: "Όχι",
+DlgCellHorAlign		: "Οριζόντια Στοίχιση",
+DlgCellHorAlignNotSet	: "<χωρίς>",
+DlgCellHorAlignLeft	: "Αριστερά",
+DlgCellHorAlignCenter	: "Κέντρο",
+DlgCellHorAlignRight: "Δεξιά",
+DlgCellVerAlign		: "Κάθετη Στοίχιση",
+DlgCellVerAlignNotSet	: "<χωρίς>",
+DlgCellVerAlignTop	: "Πάνω (Top)",
+DlgCellVerAlignMiddle	: "Μέση (Middle)",
+DlgCellVerAlignBottom	: "Κάτω (Bottom)",
+DlgCellVerAlignBaseline	: "Γραμμή Βάσης (Baseline)",
+DlgCellRowSpan		: "Αριθμός Γραμμών (Rows Span)",
+DlgCellCollSpan		: "Αριθμός Κολωνών (Columns Span)",
+DlgCellBackColor	: "Χρώμα Υποβάθρου",
+DlgCellBorderColor	: "Χρώμα Περιθωρίου",
+DlgCellBtnSelect	: "Επιλογή...",
+
+// Find and Replace Dialog
+DlgFindAndReplaceTitle	: "Find and Replace",	//MISSING
+
+// Find Dialog
+DlgFindTitle		: "Αναζήτηση",
+DlgFindFindBtn		: "Αναζήτηση",
+DlgFindNotFoundMsg	: "Το κείμενο δεν βρέθηκε.",
+
+// Replace Dialog
+DlgReplaceTitle			: "Αντικατάσταση",
+DlgReplaceFindLbl		: "Αναζήτηση:",
+DlgReplaceReplaceLbl	: "Αντικατάσταση με:",
+DlgReplaceCaseChk		: "Έλεγχος πεζών/κεφαλαίων",
+DlgReplaceReplaceBtn	: "Αντικατάσταση",
+DlgReplaceReplAllBtn	: "Αντικατάσταση Όλων",
+DlgReplaceWordChk		: "Εύρεση πλήρους λέξης",
+
+// Paste Operations / Dialog
+PasteErrorCut	: "Οι ρυθμίσεις ασφαλείας του φυλλομετρητή σας δεν επιτρέπουν την επιλεγμένη εργασία αποκοπής. Χρησιμοποιείστε το πληκτρολόγιο (Ctrl+X).",
+PasteErrorCopy	: "Οι ρυθμίσεις ασφαλείας του φυλλομετρητή σας δεν επιτρέπουν την επιλεγμένη εργασία αντιγραφής. Χρησιμοποιείστε το πληκτρολόγιο (Ctrl+C).",
+
+PasteAsText		: "Επικόλληση ως Απλό Κείμενο",
+PasteFromWord	: "Επικόλληση από το Word",
+
+DlgPasteMsg2	: "Παρακαλώ επικολήστε στο ακόλουθο κουτί χρησιμοποιόντας το πληκτρολόγιο (<STRONG>Ctrl+V</STRONG>) και πατήστε <STRONG>OK</STRONG>.",
+DlgPasteSec		: "Because of your browser security settings, the editor is not able to access your clipboard data directly. You are required to paste it again in this window.",	//MISSING
+DlgPasteIgnoreFont		: "Αγνόηση προδιαγραφών γραμματοσειράς",
+DlgPasteRemoveStyles	: "Αφαίρεση προδιαγραφών στύλ",
+
+// Color Picker
+ColorAutomatic	: "Αυτόματο",
+ColorMoreColors	: "Περισσότερα χρώματα...",
+
+// Document Properties
+DocProps		: "Ιδιότητες εγγράφου",
+
+// Anchor Dialog
+DlgAnchorTitle		: "Ιδιότητες άγκυρας",
+DlgAnchorName		: "Όνομα άγκυρας",
+DlgAnchorErrorName	: "Παρακαλούμε εισάγετε όνομα άγκυρας",
+
+// Speller Pages Dialog
+DlgSpellNotInDic		: "Δεν υπάρχει στο λεξικό",
+DlgSpellChangeTo		: "Αλλαγή σε",
+DlgSpellBtnIgnore		: "Αγνόηση",
+DlgSpellBtnIgnoreAll	: "Αγνόηση όλων",
+DlgSpellBtnReplace		: "Αντικατάσταση",
+DlgSpellBtnReplaceAll	: "Αντικατάσταση όλων",
+DlgSpellBtnUndo			: "Αναίρεση",
+DlgSpellNoSuggestions	: "- Δεν υπάρχουν προτάσεις -",
+DlgSpellProgress		: "Ορθογραφικός έλεγχος σε εξέλιξη...",
+DlgSpellNoMispell		: "Ο ορθογραφικός έλεγχος ολοκληρώθηκε: Δεν βρέθηκαν λάθη",
+DlgSpellNoChanges		: "Ο ορθογραφικός έλεγχος ολοκληρώθηκε: Δεν άλλαξαν λέξεις",
+DlgSpellOneChange		: "Ο ορθογραφικός έλεγχος ολοκληρώθηκε: Μια λέξη άλλαξε",
+DlgSpellManyChanges		: "Ο ορθογραφικός έλεγχος ολοκληρώθηκε: %1 λέξεις άλλαξαν",
+
+IeSpellDownload			: "Δεν υπάρχει εγκατεστημένος ορθογράφος. Θέλετε να τον κατεβάσετε τώρα;",
+
+// Button Dialog
+DlgButtonText		: "Κείμενο (Τιμή)",
+DlgButtonType		: "Τύπος",
+DlgButtonTypeBtn	: "Κουμπί",
+DlgButtonTypeSbm	: "Καταχώρηση",
+DlgButtonTypeRst	: "Επαναφορά",
+
+// Checkbox and Radio Button Dialogs
+DlgCheckboxName		: "Όνομα",
+DlgCheckboxValue	: "Τιμή",
+DlgCheckboxSelected	: "Επιλεγμένο",
+
+// Form Dialog
+DlgFormName		: "Όνομα",
+DlgFormAction	: "Δράση",
+DlgFormMethod	: "Μάθοδος",
+
+// Select Field Dialog
+DlgSelectName		: "Όνομα",
+DlgSelectValue		: "Τιμή",
+DlgSelectSize		: "Μέγεθος",
+DlgSelectLines		: "γραμμές",
+DlgSelectChkMulti	: "Πολλαπλές επιλογές",
+DlgSelectOpAvail	: "Διαθέσιμες επιλογές",
+DlgSelectOpText		: "Κείμενο",
+DlgSelectOpValue	: "Τιμή",
+DlgSelectBtnAdd		: "Προσθήκη",
+DlgSelectBtnModify	: "Αλλαγή",
+DlgSelectBtnUp		: "Πάνω",
+DlgSelectBtnDown	: "Κάτω",
+DlgSelectBtnSetValue : "Προεπιλεγμένη επιλογή",
+DlgSelectBtnDelete	: "Διαγραφή",
+
+// Textarea Dialog
+DlgTextareaName	: "Όνομα",
+DlgTextareaCols	: "Στήλες",
+DlgTextareaRows	: "Σειρές",
+
+// Text Field Dialog
+DlgTextName			: "Όνομα",
+DlgTextValue		: "Τιμή",
+DlgTextCharWidth	: "Μήκος χαρακτήρων",
+DlgTextMaxChars		: "Μέγιστοι χαρακτήρες",
+DlgTextType			: "Τύπος",
+DlgTextTypeText		: "Κείμενο",
+DlgTextTypePass		: "Κωδικός",
+
+// Hidden Field Dialog
+DlgHiddenName	: "Όνομα",
+DlgHiddenValue	: "Τιμή",
+
+// Bulleted List Dialog
+BulletedListProp	: "Ιδιότητες λίστας Bulleted",
+NumberedListProp	: "Ιδιότητες αριθμημένης λίστας ",
+DlgLstStart			: "Αρχή",
+DlgLstType			: "Τύπος",
+DlgLstTypeCircle	: "Κύκλος",
+DlgLstTypeDisc		: "Δίσκος",
+DlgLstTypeSquare	: "Τετράγωνο",
+DlgLstTypeNumbers	: "Αριθμοί (1, 2, 3)",
+DlgLstTypeLCase		: "Πεζά γράμματα (a, b, c)",
+DlgLstTypeUCase		: "Κεφαλαία γράμματα (A, B, C)",
+DlgLstTypeSRoman	: "Μικρά λατινικά αριθμητικά (i, ii, iii)",
+DlgLstTypeLRoman	: "Μεγάλα λατινικά αριθμητικά (I, II, III)",
+
+// Document Properties Dialog
+DlgDocGeneralTab	: "Γενικά",
+DlgDocBackTab		: "Φόντο",
+DlgDocColorsTab		: "Χρώματα και περιθώρια",
+DlgDocMetaTab		: "Δεδομένα Meta",
+
+DlgDocPageTitle		: "Τίτλος σελίδας",
+DlgDocLangDir		: "Κατεύθυνση γραφής",
+DlgDocLangDirLTR	: "αριστερά προς δεξιά (LTR)",
+DlgDocLangDirRTL	: "δεξιά προς αριστερά (RTL)",
+DlgDocLangCode		: "Κωδικός γλώσσας",
+DlgDocCharSet		: "Κωδικοποίηση χαρακτήρων",
+DlgDocCharSetCE		: "Κεντρικής Ευρώπης",
+DlgDocCharSetCT		: "Παραδοσιακά κινέζικα (Big5)",
+DlgDocCharSetCR		: "Κυριλλική",
+DlgDocCharSetGR		: "Ελληνική",
+DlgDocCharSetJP		: "Ιαπωνική",
+DlgDocCharSetKR		: "Κορεάτικη",
+DlgDocCharSetTR		: "Τουρκική",
+DlgDocCharSetUN		: "Διεθνής (UTF-8)",
+DlgDocCharSetWE		: "Δυτικής Ευρώπης",
+DlgDocCharSetOther	: "Άλλη κωδικοποίηση χαρακτήρων",
+
+DlgDocDocType		: "Επικεφαλίδα τύπου εγγράφου",
+DlgDocDocTypeOther	: "Άλλη επικεφαλίδα τύπου εγγράφου",
+DlgDocIncXHTML		: "Να συμπεριληφθούν οι δηλώσεις XHTML",
+DlgDocBgColor		: "Χρώμα φόντου",
+DlgDocBgImage		: "Διεύθυνση εικόνας φόντου",
+DlgDocBgNoScroll	: "Φόντο χωρίς κύλιση",
+DlgDocCText			: "Κείμενο",
+DlgDocCLink			: "Σύνδεσμος",
+DlgDocCVisited		: "Σύνδεσμος που έχει επισκευθεί",
+DlgDocCActive		: "Ενεργός σύνδεσμος",
+DlgDocMargins		: "Περιθώρια σελίδας",
+DlgDocMaTop			: "Κορυφή",
+DlgDocMaLeft		: "Αριστερά",
+DlgDocMaRight		: "Δεξιά",
+DlgDocMaBottom		: "Κάτω",
+DlgDocMeIndex		: "Λέξεις κλειδιά δείκτες εγγράφου (διαχωρισμός με κόμμα)",
+DlgDocMeDescr		: "Περιγραφή εγγράφου",
+DlgDocMeAuthor		: "Συγγραφέας",
+DlgDocMeCopy		: "Πνευματικά δικαιώματα",
+DlgDocPreview		: "Προεπισκόπηση",
+
+// Templates Dialog
+Templates			: "Πρότυπα",
+DlgTemplatesTitle	: "Πρότυπα περιεχομένου",
+DlgTemplatesSelMsg	: "Παρακαλώ επιλέξτε πρότυπο για εισαγωγή στο πρόγραμμα<br>(τα υπάρχοντα περιεχόμενα θα χαθούν):",
+DlgTemplatesLoading	: "Φόρτωση καταλόγου προτύπων. Παρακαλώ περιμένετε...",
+DlgTemplatesNoTpl	: "(Δεν έχουν καθοριστεί πρότυπα)",
+DlgTemplatesReplace	: "Αντικατάσταση υπάρχοντων περιεχομένων",
+
+// About Dialog
+DlgAboutAboutTab	: "Σχετικά",
+DlgAboutBrowserInfoTab	: "Πληροφορίες Browser",
+DlgAboutLicenseTab	: "Άδεια",
+DlgAboutVersion		: "έκδοση",
+DlgAboutInfo		: "Για περισσότερες πληροφορίες"
+};


Property changes on: announcement/trunk/src/main/webapp/fckeditor/editor/lang/el.js
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/webapp/fckeditor/editor/lang/en-au.js
===================================================================
--- announcement/trunk/src/main/webapp/fckeditor/editor/lang/en-au.js	                        (rev 0)
+++ announcement/trunk/src/main/webapp/fckeditor/editor/lang/en-au.js	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,515 @@
+/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2008 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * English (Australia) language file.
+ */
+
+var FCKLang =
+{
+// Language direction : "ltr" (left to right) or "rtl" (right to left).
+Dir					: "ltr",
+
+ToolbarCollapse		: "Collapse Toolbar",
+ToolbarExpand		: "Expand Toolbar",
+
+// Toolbar Items and Context Menu
+Save				: "Save",
+NewPage				: "New Page",
+Preview				: "Preview",
+Cut					: "Cut",
+Copy				: "Copy",
+Paste				: "Paste",
+PasteText			: "Paste as plain text",
+PasteWord			: "Paste from Word",
+Print				: "Print",
+SelectAll			: "Select All",
+RemoveFormat		: "Remove Format",
+InsertLinkLbl		: "Link",
+InsertLink			: "Insert/Edit Link",
+RemoveLink			: "Remove Link",
+Anchor				: "Insert/Edit Anchor",
+AnchorDelete		: "Remove Anchor",
+InsertImageLbl		: "Image",
+InsertImage			: "Insert/Edit Image",
+InsertFlashLbl		: "Flash",
+InsertFlash			: "Insert/Edit Flash",
+InsertTableLbl		: "Table",
+InsertTable			: "Insert/Edit Table",
+InsertLineLbl		: "Line",
+InsertLine			: "Insert Horizontal Line",
+InsertSpecialCharLbl: "Special Character",
+InsertSpecialChar	: "Insert Special Character",
+InsertSmileyLbl		: "Smiley",
+InsertSmiley		: "Insert Smiley",
+About				: "About FCKeditor",
+Bold				: "Bold",
+Italic				: "Italic",
+Underline			: "Underline",
+StrikeThrough		: "Strike Through",
+Subscript			: "Subscript",
+Superscript			: "Superscript",
+LeftJustify			: "Left Justify",
+CenterJustify		: "Centre Justify",
+RightJustify		: "Right Justify",
+BlockJustify		: "Block Justify",
+DecreaseIndent		: "Decrease Indent",
+IncreaseIndent		: "Increase Indent",
+Blockquote			: "Blockquote",
+Undo				: "Undo",
+Redo				: "Redo",
+NumberedListLbl		: "Numbered List",
+NumberedList		: "Insert/Remove Numbered List",
+BulletedListLbl		: "Bulleted List",
+BulletedList		: "Insert/Remove Bulleted List",
+ShowTableBorders	: "Show Table Borders",
+ShowDetails			: "Show Details",
+Style				: "Style",
+FontFormat			: "Format",
+Font				: "Font",
+FontSize			: "Size",
+TextColor			: "Text Colour",
+BGColor				: "Background Colour",
+Source				: "Source",
+Find				: "Find",
+Replace				: "Replace",
+SpellCheck			: "Check Spelling",
+UniversalKeyboard	: "Universal Keyboard",
+PageBreakLbl		: "Page Break",
+PageBreak			: "Insert Page Break",
+
+Form			: "Form",
+Checkbox		: "Checkbox",
+RadioButton		: "Radio Button",
+TextField		: "Text Field",
+Textarea		: "Textarea",
+HiddenField		: "Hidden Field",
+Button			: "Button",
+SelectionField	: "Selection Field",
+ImageButton		: "Image Button",
+
+FitWindow		: "Maximize the editor size",
+ShowBlocks		: "Show Blocks",
+
+// Context Menu
+EditLink			: "Edit Link",
+CellCM				: "Cell",
+RowCM				: "Row",
+ColumnCM			: "Column",
+InsertRowAfter		: "Insert Row After",
+InsertRowBefore		: "Insert Row Before",
+DeleteRows			: "Delete Rows",
+InsertColumnAfter	: "Insert Column After",
+InsertColumnBefore	: "Insert Column Before",
+DeleteColumns		: "Delete Columns",
+InsertCellAfter		: "Insert Cell After",
+InsertCellBefore	: "Insert Cell Before",
+DeleteCells			: "Delete Cells",
+MergeCells			: "Merge Cells",
+MergeRight			: "Merge Right",
+MergeDown			: "Merge Down",
+HorizontalSplitCell	: "Split Cell Horizontally",
+VerticalSplitCell	: "Split Cell Vertically",
+TableDelete			: "Delete Table",
+CellProperties		: "Cell Properties",
+TableProperties		: "Table Properties",
+ImageProperties		: "Image Properties",
+FlashProperties		: "Flash Properties",
+
+AnchorProp			: "Anchor Properties",
+ButtonProp			: "Button Properties",
+CheckboxProp		: "Checkbox Properties",
+HiddenFieldProp		: "Hidden Field Properties",
+RadioButtonProp		: "Radio Button Properties",
+ImageButtonProp		: "Image Button Properties",
+TextFieldProp		: "Text Field Properties",
+SelectionFieldProp	: "Selection Field Properties",
+TextareaProp		: "Textarea Properties",
+FormProp			: "Form Properties",
+
+FontFormats			: "Normal;Formatted;Address;Heading 1;Heading 2;Heading 3;Heading 4;Heading 5;Heading 6;Normal (DIV)",
+
+// Alerts and Messages
+ProcessingXHTML		: "Processing XHTML. Please wait...",
+Done				: "Done",
+PasteWordConfirm	: "The text you want to paste seems to be copied from Word. Do you want to clean it before pasting?",
+NotCompatiblePaste	: "This command is available for Internet Explorer version 5.5 or more. Do you want to paste without cleaning?",
+UnknownToolbarItem	: "Unknown toolbar item \"%1\"",
+UnknownCommand		: "Unknown command name \"%1\"",
+NotImplemented		: "Command not implemented",
+UnknownToolbarSet	: "Toolbar set \"%1\" doesn't exist",
+NoActiveX			: "Your browser's security settings could limit some features of the editor. You must enable the option \"Run ActiveX controls and plug-ins\". You may experience errors and notice missing features.",
+BrowseServerBlocked : "The resources browser could not be opened. Make sure that all popup blockers are disabled.",
+DialogBlocked		: "It was not possible to open the dialog window. Make sure all popup blockers are disabled.",
+
+// Dialogs
+DlgBtnOK			: "OK",
+DlgBtnCancel		: "Cancel",
+DlgBtnClose			: "Close",
+DlgBtnBrowseServer	: "Browse Server",
+DlgAdvancedTag		: "Advanced",
+DlgOpOther			: "<Other>",
+DlgInfoTab			: "Info",
+DlgAlertUrl			: "Please insert the URL",
+
+// General Dialogs Labels
+DlgGenNotSet		: "<not set>",
+DlgGenId			: "Id",
+DlgGenLangDir		: "Language Direction",
+DlgGenLangDirLtr	: "Left to Right (LTR)",
+DlgGenLangDirRtl	: "Right to Left (RTL)",
+DlgGenLangCode		: "Language Code",
+DlgGenAccessKey		: "Access Key",
+DlgGenName			: "Name",
+DlgGenTabIndex		: "Tab Index",
+DlgGenLongDescr		: "Long Description URL",
+DlgGenClass			: "Stylesheet Classes",
+DlgGenTitle			: "Advisory Title",
+DlgGenContType		: "Advisory Content Type",
+DlgGenLinkCharset	: "Linked Resource Charset",
+DlgGenStyle			: "Style",
+
+// Image Dialog
+DlgImgTitle			: "Image Properties",
+DlgImgInfoTab		: "Image Info",
+DlgImgBtnUpload		: "Send it to the Server",
+DlgImgURL			: "URL",
+DlgImgUpload		: "Upload",
+DlgImgAlt			: "Alternative Text",
+DlgImgWidth			: "Width",
+DlgImgHeight		: "Height",
+DlgImgLockRatio		: "Lock Ratio",
+DlgBtnResetSize		: "Reset Size",
+DlgImgBorder		: "Border",
+DlgImgHSpace		: "HSpace",
+DlgImgVSpace		: "VSpace",
+DlgImgAlign			: "Align",
+DlgImgAlignLeft		: "Left",
+DlgImgAlignAbsBottom: "Abs Bottom",
+DlgImgAlignAbsMiddle: "Abs Middle",
+DlgImgAlignBaseline	: "Baseline",
+DlgImgAlignBottom	: "Bottom",
+DlgImgAlignMiddle	: "Middle",
+DlgImgAlignRight	: "Right",
+DlgImgAlignTextTop	: "Text Top",
+DlgImgAlignTop		: "Top",
+DlgImgPreview		: "Preview",
+DlgImgAlertUrl		: "Please type the image URL",
+DlgImgLinkTab		: "Link",
+
+// Flash Dialog
+DlgFlashTitle		: "Flash Properties",
+DlgFlashChkPlay		: "Auto Play",
+DlgFlashChkLoop		: "Loop",
+DlgFlashChkMenu		: "Enable Flash Menu",
+DlgFlashScale		: "Scale",
+DlgFlashScaleAll	: "Show all",
+DlgFlashScaleNoBorder	: "No Border",
+DlgFlashScaleFit	: "Exact Fit",
+
+// Link Dialog
+DlgLnkWindowTitle	: "Link",
+DlgLnkInfoTab		: "Link Info",
+DlgLnkTargetTab		: "Target",
+
+DlgLnkType			: "Link Type",
+DlgLnkTypeURL		: "URL",
+DlgLnkTypeAnchor	: "Link to anchor in the text",
+DlgLnkTypeEMail		: "E-Mail",
+DlgLnkProto			: "Protocol",
+DlgLnkProtoOther	: "<other>",
+DlgLnkURL			: "URL",
+DlgLnkAnchorSel		: "Select an Anchor",
+DlgLnkAnchorByName	: "By Anchor Name",
+DlgLnkAnchorById	: "By Element Id",
+DlgLnkNoAnchors		: "(No anchors available in the document)",
+DlgLnkEMail			: "E-Mail Address",
+DlgLnkEMailSubject	: "Message Subject",
+DlgLnkEMailBody		: "Message Body",
+DlgLnkUpload		: "Upload",
+DlgLnkBtnUpload		: "Send it to the Server",
+
+DlgLnkTarget		: "Target",
+DlgLnkTargetFrame	: "<frame>",
+DlgLnkTargetPopup	: "<popup window>",
+DlgLnkTargetBlank	: "New Window (_blank)",
+DlgLnkTargetParent	: "Parent Window (_parent)",
+DlgLnkTargetSelf	: "Same Window (_self)",
+DlgLnkTargetTop		: "Topmost Window (_top)",
+DlgLnkTargetFrameName	: "Target Frame Name",
+DlgLnkPopWinName	: "Popup Window Name",
+DlgLnkPopWinFeat	: "Popup Window Features",
+DlgLnkPopResize		: "Resizable",
+DlgLnkPopLocation	: "Location Bar",
+DlgLnkPopMenu		: "Menu Bar",
+DlgLnkPopScroll		: "Scroll Bars",
+DlgLnkPopStatus		: "Status Bar",
+DlgLnkPopToolbar	: "Toolbar",
+DlgLnkPopFullScrn	: "Full Screen (IE)",
+DlgLnkPopDependent	: "Dependent (Netscape)",
+DlgLnkPopWidth		: "Width",
+DlgLnkPopHeight		: "Height",
+DlgLnkPopLeft		: "Left Position",
+DlgLnkPopTop		: "Top Position",
+
+DlnLnkMsgNoUrl		: "Please type the link URL",
+DlnLnkMsgNoEMail	: "Please type the e-mail address",
+DlnLnkMsgNoAnchor	: "Please select an anchor",
+DlnLnkMsgInvPopName	: "The popup name must begin with an alphabetic character and must not contain spaces",
+
+// Color Dialog
+DlgColorTitle		: "Select Colour",
+DlgColorBtnClear	: "Clear",
+DlgColorHighlight	: "Highlight",
+DlgColorSelected	: "Selected",
+
+// Smiley Dialog
+DlgSmileyTitle		: "Insert a Smiley",
+
+// Special Character Dialog
+DlgSpecialCharTitle	: "Select Special Character",
+
+// Table Dialog
+DlgTableTitle		: "Table Properties",
+DlgTableRows		: "Rows",
+DlgTableColumns		: "Columns",
+DlgTableBorder		: "Border size",
+DlgTableAlign		: "Alignment",
+DlgTableAlignNotSet	: "<Not set>",
+DlgTableAlignLeft	: "Left",
+DlgTableAlignCenter	: "Centre",
+DlgTableAlignRight	: "Right",
+DlgTableWidth		: "Width",
+DlgTableWidthPx		: "pixels",
+DlgTableWidthPc		: "percent",
+DlgTableHeight		: "Height",
+DlgTableCellSpace	: "Cell spacing",
+DlgTableCellPad		: "Cell padding",
+DlgTableCaption		: "Caption",
+DlgTableSummary		: "Summary",
+
+// Table Cell Dialog
+DlgCellTitle		: "Cell Properties",
+DlgCellWidth		: "Width",
+DlgCellWidthPx		: "pixels",
+DlgCellWidthPc		: "percent",
+DlgCellHeight		: "Height",
+DlgCellWordWrap		: "Word Wrap",
+DlgCellWordWrapNotSet	: "<Not set>",
+DlgCellWordWrapYes	: "Yes",
+DlgCellWordWrapNo	: "No",
+DlgCellHorAlign		: "Horizontal Alignment",
+DlgCellHorAlignNotSet	: "<Not set>",
+DlgCellHorAlignLeft	: "Left",
+DlgCellHorAlignCenter	: "Centre",
+DlgCellHorAlignRight: "Right",
+DlgCellVerAlign		: "Vertical Alignment",
+DlgCellVerAlignNotSet	: "<Not set>",
+DlgCellVerAlignTop	: "Top",
+DlgCellVerAlignMiddle	: "Middle",
+DlgCellVerAlignBottom	: "Bottom",
+DlgCellVerAlignBaseline	: "Baseline",
+DlgCellRowSpan		: "Rows Span",
+DlgCellCollSpan		: "Columns Span",
+DlgCellBackColor	: "Background Colour",
+DlgCellBorderColor	: "Border Colour",
+DlgCellBtnSelect	: "Select...",
+
+// Find and Replace Dialog
+DlgFindAndReplaceTitle	: "Find and Replace",
+
+// Find Dialog
+DlgFindTitle		: "Find",
+DlgFindFindBtn		: "Find",
+DlgFindNotFoundMsg	: "The specified text was not found.",
+
+// Replace Dialog
+DlgReplaceTitle			: "Replace",
+DlgReplaceFindLbl		: "Find what:",
+DlgReplaceReplaceLbl	: "Replace with:",
+DlgReplaceCaseChk		: "Match case",
+DlgReplaceReplaceBtn	: "Replace",
+DlgReplaceReplAllBtn	: "Replace All",
+DlgReplaceWordChk		: "Match whole word",
+
+// Paste Operations / Dialog
+PasteErrorCut	: "Your browser security settings don't permit the editor to automatically execute cutting operations. Please use the keyboard for that (Ctrl+X).",
+PasteErrorCopy	: "Your browser security settings don't permit the editor to automatically execute copying operations. Please use the keyboard for that (Ctrl+C).",
+
+PasteAsText		: "Paste as Plain Text",
+PasteFromWord	: "Paste from Word",
+
+DlgPasteMsg2	: "Please paste inside the following box using the keyboard (<STRONG>Ctrl+V</STRONG>) and hit <STRONG>OK</STRONG>.",
+DlgPasteSec		: "Because of your browser security settings, the editor is not able to access your clipboard data directly. You are required to paste it again in this window.",
+DlgPasteIgnoreFont		: "Ignore Font Face definitions",
+DlgPasteRemoveStyles	: "Remove Styles definitions",
+
+// Color Picker
+ColorAutomatic	: "Automatic",
+ColorMoreColors	: "More Colours...",
+
+// Document Properties
+DocProps		: "Document Properties",
+
+// Anchor Dialog
+DlgAnchorTitle		: "Anchor Properties",
+DlgAnchorName		: "Anchor Name",
+DlgAnchorErrorName	: "Please type the anchor name",
+
+// Speller Pages Dialog
+DlgSpellNotInDic		: "Not in dictionary",
+DlgSpellChangeTo		: "Change to",
+DlgSpellBtnIgnore		: "Ignore",
+DlgSpellBtnIgnoreAll	: "Ignore All",
+DlgSpellBtnReplace		: "Replace",
+DlgSpellBtnReplaceAll	: "Replace All",
+DlgSpellBtnUndo			: "Undo",
+DlgSpellNoSuggestions	: "- No suggestions -",
+DlgSpellProgress		: "Spell check in progress...",
+DlgSpellNoMispell		: "Spell check complete: No misspellings found",
+DlgSpellNoChanges		: "Spell check complete: No words changed",
+DlgSpellOneChange		: "Spell check complete: One word changed",
+DlgSpellManyChanges		: "Spell check complete: %1 words changed",
+
+IeSpellDownload			: "Spell checker not installed. Do you want to download it now?",
+
+// Button Dialog
+DlgButtonText		: "Text (Value)",
+DlgButtonType		: "Type",
+DlgButtonTypeBtn	: "Button",
+DlgButtonTypeSbm	: "Submit",
+DlgButtonTypeRst	: "Reset",
+
+// Checkbox and Radio Button Dialogs
+DlgCheckboxName		: "Name",
+DlgCheckboxValue	: "Value",
+DlgCheckboxSelected	: "Selected",
+
+// Form Dialog
+DlgFormName		: "Name",
+DlgFormAction	: "Action",
+DlgFormMethod	: "Method",
+
+// Select Field Dialog
+DlgSelectName		: "Name",
+DlgSelectValue		: "Value",
+DlgSelectSize		: "Size",
+DlgSelectLines		: "lines",
+DlgSelectChkMulti	: "Allow multiple selections",
+DlgSelectOpAvail	: "Available Options",
+DlgSelectOpText		: "Text",
+DlgSelectOpValue	: "Value",
+DlgSelectBtnAdd		: "Add",
+DlgSelectBtnModify	: "Modify",
+DlgSelectBtnUp		: "Up",
+DlgSelectBtnDown	: "Down",
+DlgSelectBtnSetValue : "Set as selected value",
+DlgSelectBtnDelete	: "Delete",
+
+// Textarea Dialog
+DlgTextareaName	: "Name",
+DlgTextareaCols	: "Columns",
+DlgTextareaRows	: "Rows",
+
+// Text Field Dialog
+DlgTextName			: "Name",
+DlgTextValue		: "Value",
+DlgTextCharWidth	: "Character Width",
+DlgTextMaxChars		: "Maximum Characters",
+DlgTextType			: "Type",
+DlgTextTypeText		: "Text",
+DlgTextTypePass		: "Password",
+
+// Hidden Field Dialog
+DlgHiddenName	: "Name",
+DlgHiddenValue	: "Value",
+
+// Bulleted List Dialog
+BulletedListProp	: "Bulleted List Properties",
+NumberedListProp	: "Numbered List Properties",
+DlgLstStart			: "Start",
+DlgLstType			: "Type",
+DlgLstTypeCircle	: "Circle",
+DlgLstTypeDisc		: "Disc",
+DlgLstTypeSquare	: "Square",
+DlgLstTypeNumbers	: "Numbers (1, 2, 3)",
+DlgLstTypeLCase		: "Lowercase Letters (a, b, c)",
+DlgLstTypeUCase		: "Uppercase Letters (A, B, C)",
+DlgLstTypeSRoman	: "Small Roman Numerals (i, ii, iii)",
+DlgLstTypeLRoman	: "Large Roman Numerals (I, II, III)",
+
+// Document Properties Dialog
+DlgDocGeneralTab	: "General",
+DlgDocBackTab		: "Background",
+DlgDocColorsTab		: "Colours and Margins",
+DlgDocMetaTab		: "Meta Data",
+
+DlgDocPageTitle		: "Page Title",
+DlgDocLangDir		: "Language Direction",
+DlgDocLangDirLTR	: "Left to Right (LTR)",
+DlgDocLangDirRTL	: "Right to Left (RTL)",
+DlgDocLangCode		: "Language Code",
+DlgDocCharSet		: "Character Set Encoding",
+DlgDocCharSetCE		: "Central European",
+DlgDocCharSetCT		: "Chinese Traditional (Big5)",
+DlgDocCharSetCR		: "Cyrillic",
+DlgDocCharSetGR		: "Greek",
+DlgDocCharSetJP		: "Japanese",
+DlgDocCharSetKR		: "Korean",
+DlgDocCharSetTR		: "Turkish",
+DlgDocCharSetUN		: "Unicode (UTF-8)",
+DlgDocCharSetWE		: "Western European",
+DlgDocCharSetOther	: "Other Character Set Encoding",
+
+DlgDocDocType		: "Document Type Heading",
+DlgDocDocTypeOther	: "Other Document Type Heading",
+DlgDocIncXHTML		: "Include XHTML Declarations",
+DlgDocBgColor		: "Background Colour",
+DlgDocBgImage		: "Background Image URL",
+DlgDocBgNoScroll	: "Nonscrolling Background",
+DlgDocCText			: "Text",
+DlgDocCLink			: "Link",
+DlgDocCVisited		: "Visited Link",
+DlgDocCActive		: "Active Link",
+DlgDocMargins		: "Page Margins",
+DlgDocMaTop			: "Top",
+DlgDocMaLeft		: "Left",
+DlgDocMaRight		: "Right",
+DlgDocMaBottom		: "Bottom",
+DlgDocMeIndex		: "Document Indexing Keywords (comma separated)",
+DlgDocMeDescr		: "Document Description",
+DlgDocMeAuthor		: "Author",
+DlgDocMeCopy		: "Copyright",
+DlgDocPreview		: "Preview",
+
+// Templates Dialog
+Templates			: "Templates",
+DlgTemplatesTitle	: "Content Templates",
+DlgTemplatesSelMsg	: "Please select the template to open in the editor<br>(the actual contents will be lost):",
+DlgTemplatesLoading	: "Loading templates list. Please wait...",
+DlgTemplatesNoTpl	: "(No templates defined)",
+DlgTemplatesReplace	: "Replace actual contents",
+
+// About Dialog
+DlgAboutAboutTab	: "About",
+DlgAboutBrowserInfoTab	: "Browser Info",
+DlgAboutLicenseTab	: "License",
+DlgAboutVersion		: "version",
+DlgAboutInfo		: "For further information go to"
+};


Property changes on: announcement/trunk/src/main/webapp/fckeditor/editor/lang/en-au.js
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/webapp/fckeditor/editor/lang/en-ca.js
===================================================================
--- announcement/trunk/src/main/webapp/fckeditor/editor/lang/en-ca.js	                        (rev 0)
+++ announcement/trunk/src/main/webapp/fckeditor/editor/lang/en-ca.js	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,515 @@
+/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2008 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * English (Canadian) language file.
+ */
+
+var FCKLang =
+{
+// Language direction : "ltr" (left to right) or "rtl" (right to left).
+Dir					: "ltr",
+
+ToolbarCollapse		: "Collapse Toolbar",
+ToolbarExpand		: "Expand Toolbar",
+
+// Toolbar Items and Context Menu
+Save				: "Save",
+NewPage				: "New Page",
+Preview				: "Preview",
+Cut					: "Cut",
+Copy				: "Copy",
+Paste				: "Paste",
+PasteText			: "Paste as plain text",
+PasteWord			: "Paste from Word",
+Print				: "Print",
+SelectAll			: "Select All",
+RemoveFormat		: "Remove Format",
+InsertLinkLbl		: "Link",
+InsertLink			: "Insert/Edit Link",
+RemoveLink			: "Remove Link",
+Anchor				: "Insert/Edit Anchor",
+AnchorDelete		: "Remove Anchor",
+InsertImageLbl		: "Image",
+InsertImage			: "Insert/Edit Image",
+InsertFlashLbl		: "Flash",
+InsertFlash			: "Insert/Edit Flash",
+InsertTableLbl		: "Table",
+InsertTable			: "Insert/Edit Table",
+InsertLineLbl		: "Line",
+InsertLine			: "Insert Horizontal Line",
+InsertSpecialCharLbl: "Special Character",
+InsertSpecialChar	: "Insert Special Character",
+InsertSmileyLbl		: "Smiley",
+InsertSmiley		: "Insert Smiley",
+About				: "About FCKeditor",
+Bold				: "Bold",
+Italic				: "Italic",
+Underline			: "Underline",
+StrikeThrough		: "Strike Through",
+Subscript			: "Subscript",
+Superscript			: "Superscript",
+LeftJustify			: "Left Justify",
+CenterJustify		: "Centre Justify",
+RightJustify		: "Right Justify",
+BlockJustify		: "Block Justify",
+DecreaseIndent		: "Decrease Indent",
+IncreaseIndent		: "Increase Indent",
+Blockquote			: "Blockquote",
+Undo				: "Undo",
+Redo				: "Redo",
+NumberedListLbl		: "Numbered List",
+NumberedList		: "Insert/Remove Numbered List",
+BulletedListLbl		: "Bulleted List",
+BulletedList		: "Insert/Remove Bulleted List",
+ShowTableBorders	: "Show Table Borders",
+ShowDetails			: "Show Details",
+Style				: "Style",
+FontFormat			: "Format",
+Font				: "Font",
+FontSize			: "Size",
+TextColor			: "Text Colour",
+BGColor				: "Background Colour",
+Source				: "Source",
+Find				: "Find",
+Replace				: "Replace",
+SpellCheck			: "Check Spelling",
+UniversalKeyboard	: "Universal Keyboard",
+PageBreakLbl		: "Page Break",
+PageBreak			: "Insert Page Break",
+
+Form			: "Form",
+Checkbox		: "Checkbox",
+RadioButton		: "Radio Button",
+TextField		: "Text Field",
+Textarea		: "Textarea",
+HiddenField		: "Hidden Field",
+Button			: "Button",
+SelectionField	: "Selection Field",
+ImageButton		: "Image Button",
+
+FitWindow		: "Maximize the editor size",
+ShowBlocks		: "Show Blocks",
+
+// Context Menu
+EditLink			: "Edit Link",
+CellCM				: "Cell",
+RowCM				: "Row",
+ColumnCM			: "Column",
+InsertRowAfter		: "Insert Row After",
+InsertRowBefore		: "Insert Row Before",
+DeleteRows			: "Delete Rows",
+InsertColumnAfter	: "Insert Column After",
+InsertColumnBefore	: "Insert Column Before",
+DeleteColumns		: "Delete Columns",
+InsertCellAfter		: "Insert Cell After",
+InsertCellBefore	: "Insert Cell Before",
+DeleteCells			: "Delete Cells",
+MergeCells			: "Merge Cells",
+MergeRight			: "Merge Right",
+MergeDown			: "Merge Down",
+HorizontalSplitCell	: "Split Cell Horizontally",
+VerticalSplitCell	: "Split Cell Vertically",
+TableDelete			: "Delete Table",
+CellProperties		: "Cell Properties",
+TableProperties		: "Table Properties",
+ImageProperties		: "Image Properties",
+FlashProperties		: "Flash Properties",
+
+AnchorProp			: "Anchor Properties",
+ButtonProp			: "Button Properties",
+CheckboxProp		: "Checkbox Properties",
+HiddenFieldProp		: "Hidden Field Properties",
+RadioButtonProp		: "Radio Button Properties",
+ImageButtonProp		: "Image Button Properties",
+TextFieldProp		: "Text Field Properties",
+SelectionFieldProp	: "Selection Field Properties",
+TextareaProp		: "Textarea Properties",
+FormProp			: "Form Properties",
+
+FontFormats			: "Normal;Formatted;Address;Heading 1;Heading 2;Heading 3;Heading 4;Heading 5;Heading 6;Normal (DIV)",
+
+// Alerts and Messages
+ProcessingXHTML		: "Processing XHTML. Please wait...",
+Done				: "Done",
+PasteWordConfirm	: "The text you want to paste seems to be copied from Word. Do you want to clean it before pasting?",
+NotCompatiblePaste	: "This command is available for Internet Explorer version 5.5 or more. Do you want to paste without cleaning?",
+UnknownToolbarItem	: "Unknown toolbar item \"%1\"",
+UnknownCommand		: "Unknown command name \"%1\"",
+NotImplemented		: "Command not implemented",
+UnknownToolbarSet	: "Toolbar set \"%1\" doesn't exist",
+NoActiveX			: "Your browser's security settings could limit some features of the editor. You must enable the option \"Run ActiveX controls and plug-ins\". You may experience errors and notice missing features.",
+BrowseServerBlocked : "The resources browser could not be opened. Make sure that all popup blockers are disabled.",
+DialogBlocked		: "It was not possible to open the dialog window. Make sure all popup blockers are disabled.",
+
+// Dialogs
+DlgBtnOK			: "OK",
+DlgBtnCancel		: "Cancel",
+DlgBtnClose			: "Close",
+DlgBtnBrowseServer	: "Browse Server",
+DlgAdvancedTag		: "Advanced",
+DlgOpOther			: "<Other>",
+DlgInfoTab			: "Info",
+DlgAlertUrl			: "Please insert the URL",
+
+// General Dialogs Labels
+DlgGenNotSet		: "<not set>",
+DlgGenId			: "Id",
+DlgGenLangDir		: "Language Direction",
+DlgGenLangDirLtr	: "Left to Right (LTR)",
+DlgGenLangDirRtl	: "Right to Left (RTL)",
+DlgGenLangCode		: "Language Code",
+DlgGenAccessKey		: "Access Key",
+DlgGenName			: "Name",
+DlgGenTabIndex		: "Tab Index",
+DlgGenLongDescr		: "Long Description URL",
+DlgGenClass			: "Stylesheet Classes",
+DlgGenTitle			: "Advisory Title",
+DlgGenContType		: "Advisory Content Type",
+DlgGenLinkCharset	: "Linked Resource Charset",
+DlgGenStyle			: "Style",
+
+// Image Dialog
+DlgImgTitle			: "Image Properties",
+DlgImgInfoTab		: "Image Info",
+DlgImgBtnUpload		: "Send it to the Server",
+DlgImgURL			: "URL",
+DlgImgUpload		: "Upload",
+DlgImgAlt			: "Alternative Text",
+DlgImgWidth			: "Width",
+DlgImgHeight		: "Height",
+DlgImgLockRatio		: "Lock Ratio",
+DlgBtnResetSize		: "Reset Size",
+DlgImgBorder		: "Border",
+DlgImgHSpace		: "HSpace",
+DlgImgVSpace		: "VSpace",
+DlgImgAlign			: "Align",
+DlgImgAlignLeft		: "Left",
+DlgImgAlignAbsBottom: "Abs Bottom",
+DlgImgAlignAbsMiddle: "Abs Middle",
+DlgImgAlignBaseline	: "Baseline",
+DlgImgAlignBottom	: "Bottom",
+DlgImgAlignMiddle	: "Middle",
+DlgImgAlignRight	: "Right",
+DlgImgAlignTextTop	: "Text Top",
+DlgImgAlignTop		: "Top",
+DlgImgPreview		: "Preview",
+DlgImgAlertUrl		: "Please type the image URL",
+DlgImgLinkTab		: "Link",
+
+// Flash Dialog
+DlgFlashTitle		: "Flash Properties",
+DlgFlashChkPlay		: "Auto Play",
+DlgFlashChkLoop		: "Loop",
+DlgFlashChkMenu		: "Enable Flash Menu",
+DlgFlashScale		: "Scale",
+DlgFlashScaleAll	: "Show all",
+DlgFlashScaleNoBorder	: "No Border",
+DlgFlashScaleFit	: "Exact Fit",
+
+// Link Dialog
+DlgLnkWindowTitle	: "Link",
+DlgLnkInfoTab		: "Link Info",
+DlgLnkTargetTab		: "Target",
+
+DlgLnkType			: "Link Type",
+DlgLnkTypeURL		: "URL",
+DlgLnkTypeAnchor	: "Link to anchor in the text",
+DlgLnkTypeEMail		: "E-Mail",
+DlgLnkProto			: "Protocol",
+DlgLnkProtoOther	: "<other>",
+DlgLnkURL			: "URL",
+DlgLnkAnchorSel		: "Select an Anchor",
+DlgLnkAnchorByName	: "By Anchor Name",
+DlgLnkAnchorById	: "By Element Id",
+DlgLnkNoAnchors		: "(No anchors available in the document)",
+DlgLnkEMail			: "E-Mail Address",
+DlgLnkEMailSubject	: "Message Subject",
+DlgLnkEMailBody		: "Message Body",
+DlgLnkUpload		: "Upload",
+DlgLnkBtnUpload		: "Send it to the Server",
+
+DlgLnkTarget		: "Target",
+DlgLnkTargetFrame	: "<frame>",
+DlgLnkTargetPopup	: "<popup window>",
+DlgLnkTargetBlank	: "New Window (_blank)",
+DlgLnkTargetParent	: "Parent Window (_parent)",
+DlgLnkTargetSelf	: "Same Window (_self)",
+DlgLnkTargetTop		: "Topmost Window (_top)",
+DlgLnkTargetFrameName	: "Target Frame Name",
+DlgLnkPopWinName	: "Popup Window Name",
+DlgLnkPopWinFeat	: "Popup Window Features",
+DlgLnkPopResize		: "Resizable",
+DlgLnkPopLocation	: "Location Bar",
+DlgLnkPopMenu		: "Menu Bar",
+DlgLnkPopScroll		: "Scroll Bars",
+DlgLnkPopStatus		: "Status Bar",
+DlgLnkPopToolbar	: "Toolbar",
+DlgLnkPopFullScrn	: "Full Screen (IE)",
+DlgLnkPopDependent	: "Dependent (Netscape)",
+DlgLnkPopWidth		: "Width",
+DlgLnkPopHeight		: "Height",
+DlgLnkPopLeft		: "Left Position",
+DlgLnkPopTop		: "Top Position",
+
+DlnLnkMsgNoUrl		: "Please type the link URL",
+DlnLnkMsgNoEMail	: "Please type the e-mail address",
+DlnLnkMsgNoAnchor	: "Please select an anchor",
+DlnLnkMsgInvPopName	: "The popup name must begin with an alphabetic character and must not contain spaces",
+
+// Color Dialog
+DlgColorTitle		: "Select Colour",
+DlgColorBtnClear	: "Clear",
+DlgColorHighlight	: "Highlight",
+DlgColorSelected	: "Selected",
+
+// Smiley Dialog
+DlgSmileyTitle		: "Insert a Smiley",
+
+// Special Character Dialog
+DlgSpecialCharTitle	: "Select Special Character",
+
+// Table Dialog
+DlgTableTitle		: "Table Properties",
+DlgTableRows		: "Rows",
+DlgTableColumns		: "Columns",
+DlgTableBorder		: "Border size",
+DlgTableAlign		: "Alignment",
+DlgTableAlignNotSet	: "<Not set>",
+DlgTableAlignLeft	: "Left",
+DlgTableAlignCenter	: "Centre",
+DlgTableAlignRight	: "Right",
+DlgTableWidth		: "Width",
+DlgTableWidthPx		: "pixels",
+DlgTableWidthPc		: "percent",
+DlgTableHeight		: "Height",
+DlgTableCellSpace	: "Cell spacing",
+DlgTableCellPad		: "Cell padding",
+DlgTableCaption		: "Caption",
+DlgTableSummary		: "Summary",
+
+// Table Cell Dialog
+DlgCellTitle		: "Cell Properties",
+DlgCellWidth		: "Width",
+DlgCellWidthPx		: "pixels",
+DlgCellWidthPc		: "percent",
+DlgCellHeight		: "Height",
+DlgCellWordWrap		: "Word Wrap",
+DlgCellWordWrapNotSet	: "<Not set>",
+DlgCellWordWrapYes	: "Yes",
+DlgCellWordWrapNo	: "No",
+DlgCellHorAlign		: "Horizontal Alignment",
+DlgCellHorAlignNotSet	: "<Not set>",
+DlgCellHorAlignLeft	: "Left",
+DlgCellHorAlignCenter	: "Centre",
+DlgCellHorAlignRight: "Right",
+DlgCellVerAlign		: "Vertical Alignment",
+DlgCellVerAlignNotSet	: "<Not set>",
+DlgCellVerAlignTop	: "Top",
+DlgCellVerAlignMiddle	: "Middle",
+DlgCellVerAlignBottom	: "Bottom",
+DlgCellVerAlignBaseline	: "Baseline",
+DlgCellRowSpan		: "Rows Span",
+DlgCellCollSpan		: "Columns Span",
+DlgCellBackColor	: "Background Colour",
+DlgCellBorderColor	: "Border Colour",
+DlgCellBtnSelect	: "Select...",
+
+// Find and Replace Dialog
+DlgFindAndReplaceTitle	: "Find and Replace",
+
+// Find Dialog
+DlgFindTitle		: "Find",
+DlgFindFindBtn		: "Find",
+DlgFindNotFoundMsg	: "The specified text was not found.",
+
+// Replace Dialog
+DlgReplaceTitle			: "Replace",
+DlgReplaceFindLbl		: "Find what:",
+DlgReplaceReplaceLbl	: "Replace with:",
+DlgReplaceCaseChk		: "Match case",
+DlgReplaceReplaceBtn	: "Replace",
+DlgReplaceReplAllBtn	: "Replace All",
+DlgReplaceWordChk		: "Match whole word",
+
+// Paste Operations / Dialog
+PasteErrorCut	: "Your browser security settings don't permit the editor to automatically execute cutting operations. Please use the keyboard for that (Ctrl+X).",
+PasteErrorCopy	: "Your browser security settings don't permit the editor to automatically execute copying operations. Please use the keyboard for that (Ctrl+C).",
+
+PasteAsText		: "Paste as Plain Text",
+PasteFromWord	: "Paste from Word",
+
+DlgPasteMsg2	: "Please paste inside the following box using the keyboard (<STRONG>Ctrl+V</STRONG>) and hit <STRONG>OK</STRONG>.",
+DlgPasteSec		: "Because of your browser security settings, the editor is not able to access your clipboard data directly. You are required to paste it again in this window.",
+DlgPasteIgnoreFont		: "Ignore Font Face definitions",
+DlgPasteRemoveStyles	: "Remove Styles definitions",
+
+// Color Picker
+ColorAutomatic	: "Automatic",
+ColorMoreColors	: "More Colours...",
+
+// Document Properties
+DocProps		: "Document Properties",
+
+// Anchor Dialog
+DlgAnchorTitle		: "Anchor Properties",
+DlgAnchorName		: "Anchor Name",
+DlgAnchorErrorName	: "Please type the anchor name",
+
+// Speller Pages Dialog
+DlgSpellNotInDic		: "Not in dictionary",
+DlgSpellChangeTo		: "Change to",
+DlgSpellBtnIgnore		: "Ignore",
+DlgSpellBtnIgnoreAll	: "Ignore All",
+DlgSpellBtnReplace		: "Replace",
+DlgSpellBtnReplaceAll	: "Replace All",
+DlgSpellBtnUndo			: "Undo",
+DlgSpellNoSuggestions	: "- No suggestions -",
+DlgSpellProgress		: "Spell check in progress...",
+DlgSpellNoMispell		: "Spell check complete: No misspellings found",
+DlgSpellNoChanges		: "Spell check complete: No words changed",
+DlgSpellOneChange		: "Spell check complete: One word changed",
+DlgSpellManyChanges		: "Spell check complete: %1 words changed",
+
+IeSpellDownload			: "Spell checker not installed. Do you want to download it now?",
+
+// Button Dialog
+DlgButtonText		: "Text (Value)",
+DlgButtonType		: "Type",
+DlgButtonTypeBtn	: "Button",
+DlgButtonTypeSbm	: "Submit",
+DlgButtonTypeRst	: "Reset",
+
+// Checkbox and Radio Button Dialogs
+DlgCheckboxName		: "Name",
+DlgCheckboxValue	: "Value",
+DlgCheckboxSelected	: "Selected",
+
+// Form Dialog
+DlgFormName		: "Name",
+DlgFormAction	: "Action",
+DlgFormMethod	: "Method",
+
+// Select Field Dialog
+DlgSelectName		: "Name",
+DlgSelectValue		: "Value",
+DlgSelectSize		: "Size",
+DlgSelectLines		: "lines",
+DlgSelectChkMulti	: "Allow multiple selections",
+DlgSelectOpAvail	: "Available Options",
+DlgSelectOpText		: "Text",
+DlgSelectOpValue	: "Value",
+DlgSelectBtnAdd		: "Add",
+DlgSelectBtnModify	: "Modify",
+DlgSelectBtnUp		: "Up",
+DlgSelectBtnDown	: "Down",
+DlgSelectBtnSetValue : "Set as selected value",
+DlgSelectBtnDelete	: "Delete",
+
+// Textarea Dialog
+DlgTextareaName	: "Name",
+DlgTextareaCols	: "Columns",
+DlgTextareaRows	: "Rows",
+
+// Text Field Dialog
+DlgTextName			: "Name",
+DlgTextValue		: "Value",
+DlgTextCharWidth	: "Character Width",
+DlgTextMaxChars		: "Maximum Characters",
+DlgTextType			: "Type",
+DlgTextTypeText		: "Text",
+DlgTextTypePass		: "Password",
+
+// Hidden Field Dialog
+DlgHiddenName	: "Name",
+DlgHiddenValue	: "Value",
+
+// Bulleted List Dialog
+BulletedListProp	: "Bulleted List Properties",
+NumberedListProp	: "Numbered List Properties",
+DlgLstStart			: "Start",
+DlgLstType			: "Type",
+DlgLstTypeCircle	: "Circle",
+DlgLstTypeDisc		: "Disc",
+DlgLstTypeSquare	: "Square",
+DlgLstTypeNumbers	: "Numbers (1, 2, 3)",
+DlgLstTypeLCase		: "Lowercase Letters (a, b, c)",
+DlgLstTypeUCase		: "Uppercase Letters (A, B, C)",
+DlgLstTypeSRoman	: "Small Roman Numerals (i, ii, iii)",
+DlgLstTypeLRoman	: "Large Roman Numerals (I, II, III)",
+
+// Document Properties Dialog
+DlgDocGeneralTab	: "General",
+DlgDocBackTab		: "Background",
+DlgDocColorsTab		: "Colours and Margins",
+DlgDocMetaTab		: "Meta Data",
+
+DlgDocPageTitle		: "Page Title",
+DlgDocLangDir		: "Language Direction",
+DlgDocLangDirLTR	: "Left to Right (LTR)",
+DlgDocLangDirRTL	: "Right to Left (RTL)",
+DlgDocLangCode		: "Language Code",
+DlgDocCharSet		: "Character Set Encoding",
+DlgDocCharSetCE		: "Central European",
+DlgDocCharSetCT		: "Chinese Traditional (Big5)",
+DlgDocCharSetCR		: "Cyrillic",
+DlgDocCharSetGR		: "Greek",
+DlgDocCharSetJP		: "Japanese",
+DlgDocCharSetKR		: "Korean",
+DlgDocCharSetTR		: "Turkish",
+DlgDocCharSetUN		: "Unicode (UTF-8)",
+DlgDocCharSetWE		: "Western European",
+DlgDocCharSetOther	: "Other Character Set Encoding",
+
+DlgDocDocType		: "Document Type Heading",
+DlgDocDocTypeOther	: "Other Document Type Heading",
+DlgDocIncXHTML		: "Include XHTML Declarations",
+DlgDocBgColor		: "Background Colour",
+DlgDocBgImage		: "Background Image URL",
+DlgDocBgNoScroll	: "Nonscrolling Background",
+DlgDocCText			: "Text",
+DlgDocCLink			: "Link",
+DlgDocCVisited		: "Visited Link",
+DlgDocCActive		: "Active Link",
+DlgDocMargins		: "Page Margins",
+DlgDocMaTop			: "Top",
+DlgDocMaLeft		: "Left",
+DlgDocMaRight		: "Right",
+DlgDocMaBottom		: "Bottom",
+DlgDocMeIndex		: "Document Indexing Keywords (comma separated)",
+DlgDocMeDescr		: "Document Description",
+DlgDocMeAuthor		: "Author",
+DlgDocMeCopy		: "Copyright",
+DlgDocPreview		: "Preview",
+
+// Templates Dialog
+Templates			: "Templates",
+DlgTemplatesTitle	: "Content Templates",
+DlgTemplatesSelMsg	: "Please select the template to open in the editor<br>(the actual contents will be lost):",
+DlgTemplatesLoading	: "Loading templates list. Please wait...",
+DlgTemplatesNoTpl	: "(No templates defined)",
+DlgTemplatesReplace	: "Replace actual contents",
+
+// About Dialog
+DlgAboutAboutTab	: "About",
+DlgAboutBrowserInfoTab	: "Browser Info",
+DlgAboutLicenseTab	: "License",
+DlgAboutVersion		: "version",
+DlgAboutInfo		: "For further information go to"
+};


Property changes on: announcement/trunk/src/main/webapp/fckeditor/editor/lang/en-ca.js
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/webapp/fckeditor/editor/lang/en-uk.js
===================================================================
--- announcement/trunk/src/main/webapp/fckeditor/editor/lang/en-uk.js	                        (rev 0)
+++ announcement/trunk/src/main/webapp/fckeditor/editor/lang/en-uk.js	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,515 @@
+/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2008 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * English (United Kingdom) language file.
+ */
+
+var FCKLang =
+{
+// Language direction : "ltr" (left to right) or "rtl" (right to left).
+Dir					: "ltr",
+
+ToolbarCollapse		: "Collapse Toolbar",
+ToolbarExpand		: "Expand Toolbar",
+
+// Toolbar Items and Context Menu
+Save				: "Save",
+NewPage				: "New Page",
+Preview				: "Preview",
+Cut					: "Cut",
+Copy				: "Copy",
+Paste				: "Paste",
+PasteText			: "Paste as plain text",
+PasteWord			: "Paste from Word",
+Print				: "Print",
+SelectAll			: "Select All",
+RemoveFormat		: "Remove Format",
+InsertLinkLbl		: "Link",
+InsertLink			: "Insert/Edit Link",
+RemoveLink			: "Remove Link",
+Anchor				: "Insert/Edit Anchor",
+AnchorDelete		: "Remove Anchor",
+InsertImageLbl		: "Image",
+InsertImage			: "Insert/Edit Image",
+InsertFlashLbl		: "Flash",
+InsertFlash			: "Insert/Edit Flash",
+InsertTableLbl		: "Table",
+InsertTable			: "Insert/Edit Table",
+InsertLineLbl		: "Line",
+InsertLine			: "Insert Horizontal Line",
+InsertSpecialCharLbl: "Special Character",
+InsertSpecialChar	: "Insert Special Character",
+InsertSmileyLbl		: "Smiley",
+InsertSmiley		: "Insert Smiley",
+About				: "About FCKeditor",
+Bold				: "Bold",
+Italic				: "Italic",
+Underline			: "Underline",
+StrikeThrough		: "Strike Through",
+Subscript			: "Subscript",
+Superscript			: "Superscript",
+LeftJustify			: "Left Justify",
+CenterJustify		: "Centre Justify",
+RightJustify		: "Right Justify",
+BlockJustify		: "Block Justify",
+DecreaseIndent		: "Decrease Indent",
+IncreaseIndent		: "Increase Indent",
+Blockquote			: "Blockquote",
+Undo				: "Undo",
+Redo				: "Redo",
+NumberedListLbl		: "Numbered List",
+NumberedList		: "Insert/Remove Numbered List",
+BulletedListLbl		: "Bulleted List",
+BulletedList		: "Insert/Remove Bulleted List",
+ShowTableBorders	: "Show Table Borders",
+ShowDetails			: "Show Details",
+Style				: "Style",
+FontFormat			: "Format",
+Font				: "Font",
+FontSize			: "Size",
+TextColor			: "Text Colour",
+BGColor				: "Background Colour",
+Source				: "Source",
+Find				: "Find",
+Replace				: "Replace",
+SpellCheck			: "Check Spelling",
+UniversalKeyboard	: "Universal Keyboard",
+PageBreakLbl		: "Page Break",
+PageBreak			: "Insert Page Break",
+
+Form			: "Form",
+Checkbox		: "Checkbox",
+RadioButton		: "Radio Button",
+TextField		: "Text Field",
+Textarea		: "Textarea",
+HiddenField		: "Hidden Field",
+Button			: "Button",
+SelectionField	: "Selection Field",
+ImageButton		: "Image Button",
+
+FitWindow		: "Maximize the editor size",
+ShowBlocks		: "Show Blocks",
+
+// Context Menu
+EditLink			: "Edit Link",
+CellCM				: "Cell",
+RowCM				: "Row",
+ColumnCM			: "Column",
+InsertRowAfter		: "Insert Row After",
+InsertRowBefore		: "Insert Row Before",
+DeleteRows			: "Delete Rows",
+InsertColumnAfter	: "Insert Column After",
+InsertColumnBefore	: "Insert Column Before",
+DeleteColumns		: "Delete Columns",
+InsertCellAfter		: "Insert Cell After",
+InsertCellBefore	: "Insert Cell Before",
+DeleteCells			: "Delete Cells",
+MergeCells			: "Merge Cells",
+MergeRight			: "Merge Right",
+MergeDown			: "Merge Down",
+HorizontalSplitCell	: "Split Cell Horizontally",
+VerticalSplitCell	: "Split Cell Vertically",
+TableDelete			: "Delete Table",
+CellProperties		: "Cell Properties",
+TableProperties		: "Table Properties",
+ImageProperties		: "Image Properties",
+FlashProperties		: "Flash Properties",
+
+AnchorProp			: "Anchor Properties",
+ButtonProp			: "Button Properties",
+CheckboxProp		: "Checkbox Properties",
+HiddenFieldProp		: "Hidden Field Properties",
+RadioButtonProp		: "Radio Button Properties",
+ImageButtonProp		: "Image Button Properties",
+TextFieldProp		: "Text Field Properties",
+SelectionFieldProp	: "Selection Field Properties",
+TextareaProp		: "Textarea Properties",
+FormProp			: "Form Properties",
+
+FontFormats			: "Normal;Formatted;Address;Heading 1;Heading 2;Heading 3;Heading 4;Heading 5;Heading 6;Normal (DIV)",
+
+// Alerts and Messages
+ProcessingXHTML		: "Processing XHTML. Please wait...",
+Done				: "Done",
+PasteWordConfirm	: "The text you want to paste seems to be copied from Word. Do you want to clean it before pasting?",
+NotCompatiblePaste	: "This command is available for Internet Explorer version 5.5 or more. Do you want to paste without cleaning?",
+UnknownToolbarItem	: "Unknown toolbar item \"%1\"",
+UnknownCommand		: "Unknown command name \"%1\"",
+NotImplemented		: "Command not implemented",
+UnknownToolbarSet	: "Toolbar set \"%1\" doesn't exist",
+NoActiveX			: "Your browser's security settings could limit some features of the editor. You must enable the option \"Run ActiveX controls and plug-ins\". You may experience errors and notice missing features.",
+BrowseServerBlocked : "The resources browser could not be opened. Make sure that all popup blockers are disabled.",
+DialogBlocked		: "It was not possible to open the dialog window. Make sure all popup blockers are disabled.",
+
+// Dialogs
+DlgBtnOK			: "OK",
+DlgBtnCancel		: "Cancel",
+DlgBtnClose			: "Close",
+DlgBtnBrowseServer	: "Browse Server",
+DlgAdvancedTag		: "Advanced",
+DlgOpOther			: "<Other>",
+DlgInfoTab			: "Info",
+DlgAlertUrl			: "Please insert the URL",
+
+// General Dialogs Labels
+DlgGenNotSet		: "<not set>",
+DlgGenId			: "Id",
+DlgGenLangDir		: "Language Direction",
+DlgGenLangDirLtr	: "Left to Right (LTR)",
+DlgGenLangDirRtl	: "Right to Left (RTL)",
+DlgGenLangCode		: "Language Code",
+DlgGenAccessKey		: "Access Key",
+DlgGenName			: "Name",
+DlgGenTabIndex		: "Tab Index",
+DlgGenLongDescr		: "Long Description URL",
+DlgGenClass			: "Stylesheet Classes",
+DlgGenTitle			: "Advisory Title",
+DlgGenContType		: "Advisory Content Type",
+DlgGenLinkCharset	: "Linked Resource Charset",
+DlgGenStyle			: "Style",
+
+// Image Dialog
+DlgImgTitle			: "Image Properties",
+DlgImgInfoTab		: "Image Info",
+DlgImgBtnUpload		: "Send it to the Server",
+DlgImgURL			: "URL",
+DlgImgUpload		: "Upload",
+DlgImgAlt			: "Alternative Text",
+DlgImgWidth			: "Width",
+DlgImgHeight		: "Height",
+DlgImgLockRatio		: "Lock Ratio",
+DlgBtnResetSize		: "Reset Size",
+DlgImgBorder		: "Border",
+DlgImgHSpace		: "HSpace",
+DlgImgVSpace		: "VSpace",
+DlgImgAlign			: "Align",
+DlgImgAlignLeft		: "Left",
+DlgImgAlignAbsBottom: "Abs Bottom",
+DlgImgAlignAbsMiddle: "Abs Middle",
+DlgImgAlignBaseline	: "Baseline",
+DlgImgAlignBottom	: "Bottom",
+DlgImgAlignMiddle	: "Middle",
+DlgImgAlignRight	: "Right",
+DlgImgAlignTextTop	: "Text Top",
+DlgImgAlignTop		: "Top",
+DlgImgPreview		: "Preview",
+DlgImgAlertUrl		: "Please type the image URL",
+DlgImgLinkTab		: "Link",
+
+// Flash Dialog
+DlgFlashTitle		: "Flash Properties",
+DlgFlashChkPlay		: "Auto Play",
+DlgFlashChkLoop		: "Loop",
+DlgFlashChkMenu		: "Enable Flash Menu",
+DlgFlashScale		: "Scale",
+DlgFlashScaleAll	: "Show all",
+DlgFlashScaleNoBorder	: "No Border",
+DlgFlashScaleFit	: "Exact Fit",
+
+// Link Dialog
+DlgLnkWindowTitle	: "Link",
+DlgLnkInfoTab		: "Link Info",
+DlgLnkTargetTab		: "Target",
+
+DlgLnkType			: "Link Type",
+DlgLnkTypeURL		: "URL",
+DlgLnkTypeAnchor	: "Link to anchor in the text",
+DlgLnkTypeEMail		: "E-Mail",
+DlgLnkProto			: "Protocol",
+DlgLnkProtoOther	: "<other>",
+DlgLnkURL			: "URL",
+DlgLnkAnchorSel		: "Select an Anchor",
+DlgLnkAnchorByName	: "By Anchor Name",
+DlgLnkAnchorById	: "By Element Id",
+DlgLnkNoAnchors		: "(No anchors available in the document)",
+DlgLnkEMail			: "E-Mail Address",
+DlgLnkEMailSubject	: "Message Subject",
+DlgLnkEMailBody		: "Message Body",
+DlgLnkUpload		: "Upload",
+DlgLnkBtnUpload		: "Send it to the Server",
+
+DlgLnkTarget		: "Target",
+DlgLnkTargetFrame	: "<frame>",
+DlgLnkTargetPopup	: "<popup window>",
+DlgLnkTargetBlank	: "New Window (_blank)",
+DlgLnkTargetParent	: "Parent Window (_parent)",
+DlgLnkTargetSelf	: "Same Window (_self)",
+DlgLnkTargetTop		: "Topmost Window (_top)",
+DlgLnkTargetFrameName	: "Target Frame Name",
+DlgLnkPopWinName	: "Popup Window Name",
+DlgLnkPopWinFeat	: "Popup Window Features",
+DlgLnkPopResize		: "Resizable",
+DlgLnkPopLocation	: "Location Bar",
+DlgLnkPopMenu		: "Menu Bar",
+DlgLnkPopScroll		: "Scroll Bars",
+DlgLnkPopStatus		: "Status Bar",
+DlgLnkPopToolbar	: "Toolbar",
+DlgLnkPopFullScrn	: "Full Screen (IE)",
+DlgLnkPopDependent	: "Dependent (Netscape)",
+DlgLnkPopWidth		: "Width",
+DlgLnkPopHeight		: "Height",
+DlgLnkPopLeft		: "Left Position",
+DlgLnkPopTop		: "Top Position",
+
+DlnLnkMsgNoUrl		: "Please type the link URL",
+DlnLnkMsgNoEMail	: "Please type the e-mail address",
+DlnLnkMsgNoAnchor	: "Please select an anchor",
+DlnLnkMsgInvPopName	: "The popup name must begin with an alphabetic character and must not contain spaces",
+
+// Color Dialog
+DlgColorTitle		: "Select Colour",
+DlgColorBtnClear	: "Clear",
+DlgColorHighlight	: "Highlight",
+DlgColorSelected	: "Selected",
+
+// Smiley Dialog
+DlgSmileyTitle		: "Insert a Smiley",
+
+// Special Character Dialog
+DlgSpecialCharTitle	: "Select Special Character",
+
+// Table Dialog
+DlgTableTitle		: "Table Properties",
+DlgTableRows		: "Rows",
+DlgTableColumns		: "Columns",
+DlgTableBorder		: "Border size",
+DlgTableAlign		: "Alignment",
+DlgTableAlignNotSet	: "<Not set>",
+DlgTableAlignLeft	: "Left",
+DlgTableAlignCenter	: "Centre",
+DlgTableAlignRight	: "Right",
+DlgTableWidth		: "Width",
+DlgTableWidthPx		: "pixels",
+DlgTableWidthPc		: "percent",
+DlgTableHeight		: "Height",
+DlgTableCellSpace	: "Cell spacing",
+DlgTableCellPad		: "Cell padding",
+DlgTableCaption		: "Caption",
+DlgTableSummary		: "Summary",
+
+// Table Cell Dialog
+DlgCellTitle		: "Cell Properties",
+DlgCellWidth		: "Width",
+DlgCellWidthPx		: "pixels",
+DlgCellWidthPc		: "percent",
+DlgCellHeight		: "Height",
+DlgCellWordWrap		: "Word Wrap",
+DlgCellWordWrapNotSet	: "<Not set>",
+DlgCellWordWrapYes	: "Yes",
+DlgCellWordWrapNo	: "No",
+DlgCellHorAlign		: "Horizontal Alignment",
+DlgCellHorAlignNotSet	: "<Not set>",
+DlgCellHorAlignLeft	: "Left",
+DlgCellHorAlignCenter	: "Centre",
+DlgCellHorAlignRight: "Right",
+DlgCellVerAlign		: "Vertical Alignment",
+DlgCellVerAlignNotSet	: "<Not set>",
+DlgCellVerAlignTop	: "Top",
+DlgCellVerAlignMiddle	: "Middle",
+DlgCellVerAlignBottom	: "Bottom",
+DlgCellVerAlignBaseline	: "Baseline",
+DlgCellRowSpan		: "Rows Span",
+DlgCellCollSpan		: "Columns Span",
+DlgCellBackColor	: "Background Colour",
+DlgCellBorderColor	: "Border Colour",
+DlgCellBtnSelect	: "Select...",
+
+// Find and Replace Dialog
+DlgFindAndReplaceTitle	: "Find and Replace",
+
+// Find Dialog
+DlgFindTitle		: "Find",
+DlgFindFindBtn		: "Find",
+DlgFindNotFoundMsg	: "The specified text was not found.",
+
+// Replace Dialog
+DlgReplaceTitle			: "Replace",
+DlgReplaceFindLbl		: "Find what:",
+DlgReplaceReplaceLbl	: "Replace with:",
+DlgReplaceCaseChk		: "Match case",
+DlgReplaceReplaceBtn	: "Replace",
+DlgReplaceReplAllBtn	: "Replace All",
+DlgReplaceWordChk		: "Match whole word",
+
+// Paste Operations / Dialog
+PasteErrorCut	: "Your browser security settings don't permit the editor to automatically execute cutting operations. Please use the keyboard for that (Ctrl+X).",
+PasteErrorCopy	: "Your browser security settings don't permit the editor to automatically execute copying operations. Please use the keyboard for that (Ctrl+C).",
+
+PasteAsText		: "Paste as Plain Text",
+PasteFromWord	: "Paste from Word",
+
+DlgPasteMsg2	: "Please paste inside the following box using the keyboard (<STRONG>Ctrl+V</STRONG>) and hit <STRONG>OK</STRONG>.",
+DlgPasteSec		: "Because of your browser security settings, the editor is not able to access your clipboard data directly. You are required to paste it again in this window.",
+DlgPasteIgnoreFont		: "Ignore Font Face definitions",
+DlgPasteRemoveStyles	: "Remove Styles definitions",
+
+// Color Picker
+ColorAutomatic	: "Automatic",
+ColorMoreColors	: "More Colours...",
+
+// Document Properties
+DocProps		: "Document Properties",
+
+// Anchor Dialog
+DlgAnchorTitle		: "Anchor Properties",
+DlgAnchorName		: "Anchor Name",
+DlgAnchorErrorName	: "Please type the anchor name",
+
+// Speller Pages Dialog
+DlgSpellNotInDic		: "Not in dictionary",
+DlgSpellChangeTo		: "Change to",
+DlgSpellBtnIgnore		: "Ignore",
+DlgSpellBtnIgnoreAll	: "Ignore All",
+DlgSpellBtnReplace		: "Replace",
+DlgSpellBtnReplaceAll	: "Replace All",
+DlgSpellBtnUndo			: "Undo",
+DlgSpellNoSuggestions	: "- No suggestions -",
+DlgSpellProgress		: "Spell check in progress...",
+DlgSpellNoMispell		: "Spell check complete: No misspellings found",
+DlgSpellNoChanges		: "Spell check complete: No words changed",
+DlgSpellOneChange		: "Spell check complete: One word changed",
+DlgSpellManyChanges		: "Spell check complete: %1 words changed",
+
+IeSpellDownload			: "Spell checker not installed. Do you want to download it now?",
+
+// Button Dialog
+DlgButtonText		: "Text (Value)",
+DlgButtonType		: "Type",
+DlgButtonTypeBtn	: "Button",
+DlgButtonTypeSbm	: "Submit",
+DlgButtonTypeRst	: "Reset",
+
+// Checkbox and Radio Button Dialogs
+DlgCheckboxName		: "Name",
+DlgCheckboxValue	: "Value",
+DlgCheckboxSelected	: "Selected",
+
+// Form Dialog
+DlgFormName		: "Name",
+DlgFormAction	: "Action",
+DlgFormMethod	: "Method",
+
+// Select Field Dialog
+DlgSelectName		: "Name",
+DlgSelectValue		: "Value",
+DlgSelectSize		: "Size",
+DlgSelectLines		: "lines",
+DlgSelectChkMulti	: "Allow multiple selections",
+DlgSelectOpAvail	: "Available Options",
+DlgSelectOpText		: "Text",
+DlgSelectOpValue	: "Value",
+DlgSelectBtnAdd		: "Add",
+DlgSelectBtnModify	: "Modify",
+DlgSelectBtnUp		: "Up",
+DlgSelectBtnDown	: "Down",
+DlgSelectBtnSetValue : "Set as selected value",
+DlgSelectBtnDelete	: "Delete",
+
+// Textarea Dialog
+DlgTextareaName	: "Name",
+DlgTextareaCols	: "Columns",
+DlgTextareaRows	: "Rows",
+
+// Text Field Dialog
+DlgTextName			: "Name",
+DlgTextValue		: "Value",
+DlgTextCharWidth	: "Character Width",
+DlgTextMaxChars		: "Maximum Characters",
+DlgTextType			: "Type",
+DlgTextTypeText		: "Text",
+DlgTextTypePass		: "Password",
+
+// Hidden Field Dialog
+DlgHiddenName	: "Name",
+DlgHiddenValue	: "Value",
+
+// Bulleted List Dialog
+BulletedListProp	: "Bulleted List Properties",
+NumberedListProp	: "Numbered List Properties",
+DlgLstStart			: "Start",
+DlgLstType			: "Type",
+DlgLstTypeCircle	: "Circle",
+DlgLstTypeDisc		: "Disc",
+DlgLstTypeSquare	: "Square",
+DlgLstTypeNumbers	: "Numbers (1, 2, 3)",
+DlgLstTypeLCase		: "Lowercase Letters (a, b, c)",
+DlgLstTypeUCase		: "Uppercase Letters (A, B, C)",
+DlgLstTypeSRoman	: "Small Roman Numerals (i, ii, iii)",
+DlgLstTypeLRoman	: "Large Roman Numerals (I, II, III)",
+
+// Document Properties Dialog
+DlgDocGeneralTab	: "General",
+DlgDocBackTab		: "Background",
+DlgDocColorsTab		: "Colours and Margins",
+DlgDocMetaTab		: "Meta Data",
+
+DlgDocPageTitle		: "Page Title",
+DlgDocLangDir		: "Language Direction",
+DlgDocLangDirLTR	: "Left to Right (LTR)",
+DlgDocLangDirRTL	: "Right to Left (RTL)",
+DlgDocLangCode		: "Language Code",
+DlgDocCharSet		: "Character Set Encoding",
+DlgDocCharSetCE		: "Central European",
+DlgDocCharSetCT		: "Chinese Traditional (Big5)",
+DlgDocCharSetCR		: "Cyrillic",
+DlgDocCharSetGR		: "Greek",
+DlgDocCharSetJP		: "Japanese",
+DlgDocCharSetKR		: "Korean",
+DlgDocCharSetTR		: "Turkish",
+DlgDocCharSetUN		: "Unicode (UTF-8)",
+DlgDocCharSetWE		: "Western European",
+DlgDocCharSetOther	: "Other Character Set Encoding",
+
+DlgDocDocType		: "Document Type Heading",
+DlgDocDocTypeOther	: "Other Document Type Heading",
+DlgDocIncXHTML		: "Include XHTML Declarations",
+DlgDocBgColor		: "Background Colour",
+DlgDocBgImage		: "Background Image URL",
+DlgDocBgNoScroll	: "Nonscrolling Background",
+DlgDocCText			: "Text",
+DlgDocCLink			: "Link",
+DlgDocCVisited		: "Visited Link",
+DlgDocCActive		: "Active Link",
+DlgDocMargins		: "Page Margins",
+DlgDocMaTop			: "Top",
+DlgDocMaLeft		: "Left",
+DlgDocMaRight		: "Right",
+DlgDocMaBottom		: "Bottom",
+DlgDocMeIndex		: "Document Indexing Keywords (comma separated)",
+DlgDocMeDescr		: "Document Description",
+DlgDocMeAuthor		: "Author",
+DlgDocMeCopy		: "Copyright",
+DlgDocPreview		: "Preview",
+
+// Templates Dialog
+Templates			: "Templates",
+DlgTemplatesTitle	: "Content Templates",
+DlgTemplatesSelMsg	: "Please select the template to open in the editor<br>(the actual contents will be lost):",
+DlgTemplatesLoading	: "Loading templates list. Please wait...",
+DlgTemplatesNoTpl	: "(No templates defined)",
+DlgTemplatesReplace	: "Replace actual contents",
+
+// About Dialog
+DlgAboutAboutTab	: "About",
+DlgAboutBrowserInfoTab	: "Browser Info",
+DlgAboutLicenseTab	: "License",
+DlgAboutVersion		: "version",
+DlgAboutInfo		: "For further information go to"
+};


Property changes on: announcement/trunk/src/main/webapp/fckeditor/editor/lang/en-uk.js
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/webapp/fckeditor/editor/lang/en.js
===================================================================
--- announcement/trunk/src/main/webapp/fckeditor/editor/lang/en.js	                        (rev 0)
+++ announcement/trunk/src/main/webapp/fckeditor/editor/lang/en.js	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,515 @@
+/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2008 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * English language file.
+ */
+
+var FCKLang =
+{
+// Language direction : "ltr" (left to right) or "rtl" (right to left).
+Dir					: "ltr",
+
+ToolbarCollapse		: "Collapse Toolbar",
+ToolbarExpand		: "Expand Toolbar",
+
+// Toolbar Items and Context Menu
+Save				: "Save",
+NewPage				: "New Page",
+Preview				: "Preview",
+Cut					: "Cut",
+Copy				: "Copy",
+Paste				: "Paste",
+PasteText			: "Paste as plain text",
+PasteWord			: "Paste from Word",
+Print				: "Print",
+SelectAll			: "Select All",
+RemoveFormat		: "Remove Format",
+InsertLinkLbl		: "Link",
+InsertLink			: "Insert/Edit Link",
+RemoveLink			: "Remove Link",
+Anchor				: "Insert/Edit Anchor",
+AnchorDelete		: "Remove Anchor",
+InsertImageLbl		: "Image",
+InsertImage			: "Insert/Edit Image",
+InsertFlashLbl		: "Flash",
+InsertFlash			: "Insert/Edit Flash",
+InsertTableLbl		: "Table",
+InsertTable			: "Insert/Edit Table",
+InsertLineLbl		: "Line",
+InsertLine			: "Insert Horizontal Line",
+InsertSpecialCharLbl: "Special Character",
+InsertSpecialChar	: "Insert Special Character",
+InsertSmileyLbl		: "Smiley",
+InsertSmiley		: "Insert Smiley",
+About				: "About FCKeditor",
+Bold				: "Bold",
+Italic				: "Italic",
+Underline			: "Underline",
+StrikeThrough		: "Strike Through",
+Subscript			: "Subscript",
+Superscript			: "Superscript",
+LeftJustify			: "Left Justify",
+CenterJustify		: "Center Justify",
+RightJustify		: "Right Justify",
+BlockJustify		: "Block Justify",
+DecreaseIndent		: "Decrease Indent",
+IncreaseIndent		: "Increase Indent",
+Blockquote			: "Blockquote",
+Undo				: "Undo",
+Redo				: "Redo",
+NumberedListLbl		: "Numbered List",
+NumberedList		: "Insert/Remove Numbered List",
+BulletedListLbl		: "Bulleted List",
+BulletedList		: "Insert/Remove Bulleted List",
+ShowTableBorders	: "Show Table Borders",
+ShowDetails			: "Show Details",
+Style				: "Style",
+FontFormat			: "Format",
+Font				: "Font",
+FontSize			: "Size",
+TextColor			: "Text Color",
+BGColor				: "Background Color",
+Source				: "Source",
+Find				: "Find",
+Replace				: "Replace",
+SpellCheck			: "Check Spelling",
+UniversalKeyboard	: "Universal Keyboard",
+PageBreakLbl		: "Page Break",
+PageBreak			: "Insert Page Break",
+
+Form			: "Form",
+Checkbox		: "Checkbox",
+RadioButton		: "Radio Button",
+TextField		: "Text Field",
+Textarea		: "Textarea",
+HiddenField		: "Hidden Field",
+Button			: "Button",
+SelectionField	: "Selection Field",
+ImageButton		: "Image Button",
+
+FitWindow		: "Maximize the editor size",
+ShowBlocks		: "Show Blocks",
+
+// Context Menu
+EditLink			: "Edit Link",
+CellCM				: "Cell",
+RowCM				: "Row",
+ColumnCM			: "Column",
+InsertRowAfter		: "Insert Row After",
+InsertRowBefore		: "Insert Row Before",
+DeleteRows			: "Delete Rows",
+InsertColumnAfter	: "Insert Column After",
+InsertColumnBefore	: "Insert Column Before",
+DeleteColumns		: "Delete Columns",
+InsertCellAfter		: "Insert Cell After",
+InsertCellBefore	: "Insert Cell Before",
+DeleteCells			: "Delete Cells",
+MergeCells			: "Merge Cells",
+MergeRight			: "Merge Right",
+MergeDown			: "Merge Down",
+HorizontalSplitCell	: "Split Cell Horizontally",
+VerticalSplitCell	: "Split Cell Vertically",
+TableDelete			: "Delete Table",
+CellProperties		: "Cell Properties",
+TableProperties		: "Table Properties",
+ImageProperties		: "Image Properties",
+FlashProperties		: "Flash Properties",
+
+AnchorProp			: "Anchor Properties",
+ButtonProp			: "Button Properties",
+CheckboxProp		: "Checkbox Properties",
+HiddenFieldProp		: "Hidden Field Properties",
+RadioButtonProp		: "Radio Button Properties",
+ImageButtonProp		: "Image Button Properties",
+TextFieldProp		: "Text Field Properties",
+SelectionFieldProp	: "Selection Field Properties",
+TextareaProp		: "Textarea Properties",
+FormProp			: "Form Properties",
+
+FontFormats			: "Normal;Formatted;Address;Heading 1;Heading 2;Heading 3;Heading 4;Heading 5;Heading 6;Normal (DIV)",
+
+// Alerts and Messages
+ProcessingXHTML		: "Processing XHTML. Please wait...",
+Done				: "Done",
+PasteWordConfirm	: "The text you want to paste seems to be copied from Word. Do you want to clean it before pasting?",
+NotCompatiblePaste	: "This command is available for Internet Explorer version 5.5 or more. Do you want to paste without cleaning?",
+UnknownToolbarItem	: "Unknown toolbar item \"%1\"",
+UnknownCommand		: "Unknown command name \"%1\"",
+NotImplemented		: "Command not implemented",
+UnknownToolbarSet	: "Toolbar set \"%1\" doesn't exist",
+NoActiveX			: "Your browser's security settings could limit some features of the editor. You must enable the option \"Run ActiveX controls and plug-ins\". You may experience errors and notice missing features.",
+BrowseServerBlocked : "The resources browser could not be opened. Make sure that all popup blockers are disabled.",
+DialogBlocked		: "It was not possible to open the dialog window. Make sure all popup blockers are disabled.",
+
+// Dialogs
+DlgBtnOK			: "OK",
+DlgBtnCancel		: "Cancel",
+DlgBtnClose			: "Close",
+DlgBtnBrowseServer	: "Browse Server",
+DlgAdvancedTag		: "Advanced",
+DlgOpOther			: "<Other>",
+DlgInfoTab			: "Info",
+DlgAlertUrl			: "Please insert the URL",
+
+// General Dialogs Labels
+DlgGenNotSet		: "<not set>",
+DlgGenId			: "Id",
+DlgGenLangDir		: "Language Direction",
+DlgGenLangDirLtr	: "Left to Right (LTR)",
+DlgGenLangDirRtl	: "Right to Left (RTL)",
+DlgGenLangCode		: "Language Code",
+DlgGenAccessKey		: "Access Key",
+DlgGenName			: "Name",
+DlgGenTabIndex		: "Tab Index",
+DlgGenLongDescr		: "Long Description URL",
+DlgGenClass			: "Stylesheet Classes",
+DlgGenTitle			: "Advisory Title",
+DlgGenContType		: "Advisory Content Type",
+DlgGenLinkCharset	: "Linked Resource Charset",
+DlgGenStyle			: "Style",
+
+// Image Dialog
+DlgImgTitle			: "Image Properties",
+DlgImgInfoTab		: "Image Info",
+DlgImgBtnUpload		: "Send it to the Server",
+DlgImgURL			: "URL",
+DlgImgUpload		: "Upload",
+DlgImgAlt			: "Alternative Text",
+DlgImgWidth			: "Width",
+DlgImgHeight		: "Height",
+DlgImgLockRatio		: "Lock Ratio",
+DlgBtnResetSize		: "Reset Size",
+DlgImgBorder		: "Border",
+DlgImgHSpace		: "HSpace",
+DlgImgVSpace		: "VSpace",
+DlgImgAlign			: "Align",
+DlgImgAlignLeft		: "Left",
+DlgImgAlignAbsBottom: "Abs Bottom",
+DlgImgAlignAbsMiddle: "Abs Middle",
+DlgImgAlignBaseline	: "Baseline",
+DlgImgAlignBottom	: "Bottom",
+DlgImgAlignMiddle	: "Middle",
+DlgImgAlignRight	: "Right",
+DlgImgAlignTextTop	: "Text Top",
+DlgImgAlignTop		: "Top",
+DlgImgPreview		: "Preview",
+DlgImgAlertUrl		: "Please type the image URL",
+DlgImgLinkTab		: "Link",
+
+// Flash Dialog
+DlgFlashTitle		: "Flash Properties",
+DlgFlashChkPlay		: "Auto Play",
+DlgFlashChkLoop		: "Loop",
+DlgFlashChkMenu		: "Enable Flash Menu",
+DlgFlashScale		: "Scale",
+DlgFlashScaleAll	: "Show all",
+DlgFlashScaleNoBorder	: "No Border",
+DlgFlashScaleFit	: "Exact Fit",
+
+// Link Dialog
+DlgLnkWindowTitle	: "Link",
+DlgLnkInfoTab		: "Link Info",
+DlgLnkTargetTab		: "Target",
+
+DlgLnkType			: "Link Type",
+DlgLnkTypeURL		: "URL",
+DlgLnkTypeAnchor	: "Link to anchor in the text",
+DlgLnkTypeEMail		: "E-Mail",
+DlgLnkProto			: "Protocol",
+DlgLnkProtoOther	: "<other>",
+DlgLnkURL			: "URL",
+DlgLnkAnchorSel		: "Select an Anchor",
+DlgLnkAnchorByName	: "By Anchor Name",
+DlgLnkAnchorById	: "By Element Id",
+DlgLnkNoAnchors		: "(No anchors available in the document)",
+DlgLnkEMail			: "E-Mail Address",
+DlgLnkEMailSubject	: "Message Subject",
+DlgLnkEMailBody		: "Message Body",
+DlgLnkUpload		: "Upload",
+DlgLnkBtnUpload		: "Send it to the Server",
+
+DlgLnkTarget		: "Target",
+DlgLnkTargetFrame	: "<frame>",
+DlgLnkTargetPopup	: "<popup window>",
+DlgLnkTargetBlank	: "New Window (_blank)",
+DlgLnkTargetParent	: "Parent Window (_parent)",
+DlgLnkTargetSelf	: "Same Window (_self)",
+DlgLnkTargetTop		: "Topmost Window (_top)",
+DlgLnkTargetFrameName	: "Target Frame Name",
+DlgLnkPopWinName	: "Popup Window Name",
+DlgLnkPopWinFeat	: "Popup Window Features",
+DlgLnkPopResize		: "Resizable",
+DlgLnkPopLocation	: "Location Bar",
+DlgLnkPopMenu		: "Menu Bar",
+DlgLnkPopScroll		: "Scroll Bars",
+DlgLnkPopStatus		: "Status Bar",
+DlgLnkPopToolbar	: "Toolbar",
+DlgLnkPopFullScrn	: "Full Screen (IE)",
+DlgLnkPopDependent	: "Dependent (Netscape)",
+DlgLnkPopWidth		: "Width",
+DlgLnkPopHeight		: "Height",
+DlgLnkPopLeft		: "Left Position",
+DlgLnkPopTop		: "Top Position",
+
+DlnLnkMsgNoUrl		: "Please type the link URL",
+DlnLnkMsgNoEMail	: "Please type the e-mail address",
+DlnLnkMsgNoAnchor	: "Please select an anchor",
+DlnLnkMsgInvPopName	: "The popup name must begin with an alphabetic character and must not contain spaces",
+
+// Color Dialog
+DlgColorTitle		: "Select Color",
+DlgColorBtnClear	: "Clear",
+DlgColorHighlight	: "Highlight",
+DlgColorSelected	: "Selected",
+
+// Smiley Dialog
+DlgSmileyTitle		: "Insert a Smiley",
+
+// Special Character Dialog
+DlgSpecialCharTitle	: "Select Special Character",
+
+// Table Dialog
+DlgTableTitle		: "Table Properties",
+DlgTableRows		: "Rows",
+DlgTableColumns		: "Columns",
+DlgTableBorder		: "Border size",
+DlgTableAlign		: "Alignment",
+DlgTableAlignNotSet	: "<Not set>",
+DlgTableAlignLeft	: "Left",
+DlgTableAlignCenter	: "Center",
+DlgTableAlignRight	: "Right",
+DlgTableWidth		: "Width",
+DlgTableWidthPx		: "pixels",
+DlgTableWidthPc		: "percent",
+DlgTableHeight		: "Height",
+DlgTableCellSpace	: "Cell spacing",
+DlgTableCellPad		: "Cell padding",
+DlgTableCaption		: "Caption",
+DlgTableSummary		: "Summary",
+
+// Table Cell Dialog
+DlgCellTitle		: "Cell Properties",
+DlgCellWidth		: "Width",
+DlgCellWidthPx		: "pixels",
+DlgCellWidthPc		: "percent",
+DlgCellHeight		: "Height",
+DlgCellWordWrap		: "Word Wrap",
+DlgCellWordWrapNotSet	: "<Not set>",
+DlgCellWordWrapYes	: "Yes",
+DlgCellWordWrapNo	: "No",
+DlgCellHorAlign		: "Horizontal Alignment",
+DlgCellHorAlignNotSet	: "<Not set>",
+DlgCellHorAlignLeft	: "Left",
+DlgCellHorAlignCenter	: "Center",
+DlgCellHorAlignRight: "Right",
+DlgCellVerAlign		: "Vertical Alignment",
+DlgCellVerAlignNotSet	: "<Not set>",
+DlgCellVerAlignTop	: "Top",
+DlgCellVerAlignMiddle	: "Middle",
+DlgCellVerAlignBottom	: "Bottom",
+DlgCellVerAlignBaseline	: "Baseline",
+DlgCellRowSpan		: "Rows Span",
+DlgCellCollSpan		: "Columns Span",
+DlgCellBackColor	: "Background Color",
+DlgCellBorderColor	: "Border Color",
+DlgCellBtnSelect	: "Select...",
+
+// Find and Replace Dialog
+DlgFindAndReplaceTitle	: "Find and Replace",
+
+// Find Dialog
+DlgFindTitle		: "Find",
+DlgFindFindBtn		: "Find",
+DlgFindNotFoundMsg	: "The specified text was not found.",
+
+// Replace Dialog
+DlgReplaceTitle			: "Replace",
+DlgReplaceFindLbl		: "Find what:",
+DlgReplaceReplaceLbl	: "Replace with:",
+DlgReplaceCaseChk		: "Match case",
+DlgReplaceReplaceBtn	: "Replace",
+DlgReplaceReplAllBtn	: "Replace All",
+DlgReplaceWordChk		: "Match whole word",
+
+// Paste Operations / Dialog
+PasteErrorCut	: "Your browser security settings don't permit the editor to automatically execute cutting operations. Please use the keyboard for that (Ctrl+X).",
+PasteErrorCopy	: "Your browser security settings don't permit the editor to automatically execute copying operations. Please use the keyboard for that (Ctrl+C).",
+
+PasteAsText		: "Paste as Plain Text",
+PasteFromWord	: "Paste from Word",
+
+DlgPasteMsg2	: "Please paste inside the following box using the keyboard (<strong>Ctrl+V</strong>) and hit <strong>OK</strong>.",
+DlgPasteSec		: "Because of your browser security settings, the editor is not able to access your clipboard data directly. You are required to paste it again in this window.",
+DlgPasteIgnoreFont		: "Ignore Font Face definitions",
+DlgPasteRemoveStyles	: "Remove Styles definitions",
+
+// Color Picker
+ColorAutomatic	: "Automatic",
+ColorMoreColors	: "More Colors...",
+
+// Document Properties
+DocProps		: "Document Properties",
+
+// Anchor Dialog
+DlgAnchorTitle		: "Anchor Properties",
+DlgAnchorName		: "Anchor Name",
+DlgAnchorErrorName	: "Please type the anchor name",
+
+// Speller Pages Dialog
+DlgSpellNotInDic		: "Not in dictionary",
+DlgSpellChangeTo		: "Change to",
+DlgSpellBtnIgnore		: "Ignore",
+DlgSpellBtnIgnoreAll	: "Ignore All",
+DlgSpellBtnReplace		: "Replace",
+DlgSpellBtnReplaceAll	: "Replace All",
+DlgSpellBtnUndo			: "Undo",
+DlgSpellNoSuggestions	: "- No suggestions -",
+DlgSpellProgress		: "Spell check in progress...",
+DlgSpellNoMispell		: "Spell check complete: No misspellings found",
+DlgSpellNoChanges		: "Spell check complete: No words changed",
+DlgSpellOneChange		: "Spell check complete: One word changed",
+DlgSpellManyChanges		: "Spell check complete: %1 words changed",
+
+IeSpellDownload			: "Spell checker not installed. Do you want to download it now?",
+
+// Button Dialog
+DlgButtonText		: "Text (Value)",
+DlgButtonType		: "Type",
+DlgButtonTypeBtn	: "Button",
+DlgButtonTypeSbm	: "Submit",
+DlgButtonTypeRst	: "Reset",
+
+// Checkbox and Radio Button Dialogs
+DlgCheckboxName		: "Name",
+DlgCheckboxValue	: "Value",
+DlgCheckboxSelected	: "Selected",
+
+// Form Dialog
+DlgFormName		: "Name",
+DlgFormAction	: "Action",
+DlgFormMethod	: "Method",
+
+// Select Field Dialog
+DlgSelectName		: "Name",
+DlgSelectValue		: "Value",
+DlgSelectSize		: "Size",
+DlgSelectLines		: "lines",
+DlgSelectChkMulti	: "Allow multiple selections",
+DlgSelectOpAvail	: "Available Options",
+DlgSelectOpText		: "Text",
+DlgSelectOpValue	: "Value",
+DlgSelectBtnAdd		: "Add",
+DlgSelectBtnModify	: "Modify",
+DlgSelectBtnUp		: "Up",
+DlgSelectBtnDown	: "Down",
+DlgSelectBtnSetValue : "Set as selected value",
+DlgSelectBtnDelete	: "Delete",
+
+// Textarea Dialog
+DlgTextareaName	: "Name",
+DlgTextareaCols	: "Columns",
+DlgTextareaRows	: "Rows",
+
+// Text Field Dialog
+DlgTextName			: "Name",
+DlgTextValue		: "Value",
+DlgTextCharWidth	: "Character Width",
+DlgTextMaxChars		: "Maximum Characters",
+DlgTextType			: "Type",
+DlgTextTypeText		: "Text",
+DlgTextTypePass		: "Password",
+
+// Hidden Field Dialog
+DlgHiddenName	: "Name",
+DlgHiddenValue	: "Value",
+
+// Bulleted List Dialog
+BulletedListProp	: "Bulleted List Properties",
+NumberedListProp	: "Numbered List Properties",
+DlgLstStart			: "Start",
+DlgLstType			: "Type",
+DlgLstTypeCircle	: "Circle",
+DlgLstTypeDisc		: "Disc",
+DlgLstTypeSquare	: "Square",
+DlgLstTypeNumbers	: "Numbers (1, 2, 3)",
+DlgLstTypeLCase		: "Lowercase Letters (a, b, c)",
+DlgLstTypeUCase		: "Uppercase Letters (A, B, C)",
+DlgLstTypeSRoman	: "Small Roman Numerals (i, ii, iii)",
+DlgLstTypeLRoman	: "Large Roman Numerals (I, II, III)",
+
+// Document Properties Dialog
+DlgDocGeneralTab	: "General",
+DlgDocBackTab		: "Background",
+DlgDocColorsTab		: "Colors and Margins",
+DlgDocMetaTab		: "Meta Data",
+
+DlgDocPageTitle		: "Page Title",
+DlgDocLangDir		: "Language Direction",
+DlgDocLangDirLTR	: "Left to Right (LTR)",
+DlgDocLangDirRTL	: "Right to Left (RTL)",
+DlgDocLangCode		: "Language Code",
+DlgDocCharSet		: "Character Set Encoding",
+DlgDocCharSetCE		: "Central European",
+DlgDocCharSetCT		: "Chinese Traditional (Big5)",
+DlgDocCharSetCR		: "Cyrillic",
+DlgDocCharSetGR		: "Greek",
+DlgDocCharSetJP		: "Japanese",
+DlgDocCharSetKR		: "Korean",
+DlgDocCharSetTR		: "Turkish",
+DlgDocCharSetUN		: "Unicode (UTF-8)",
+DlgDocCharSetWE		: "Western European",
+DlgDocCharSetOther	: "Other Character Set Encoding",
+
+DlgDocDocType		: "Document Type Heading",
+DlgDocDocTypeOther	: "Other Document Type Heading",
+DlgDocIncXHTML		: "Include XHTML Declarations",
+DlgDocBgColor		: "Background Color",
+DlgDocBgImage		: "Background Image URL",
+DlgDocBgNoScroll	: "Nonscrolling Background",
+DlgDocCText			: "Text",
+DlgDocCLink			: "Link",
+DlgDocCVisited		: "Visited Link",
+DlgDocCActive		: "Active Link",
+DlgDocMargins		: "Page Margins",
+DlgDocMaTop			: "Top",
+DlgDocMaLeft		: "Left",
+DlgDocMaRight		: "Right",
+DlgDocMaBottom		: "Bottom",
+DlgDocMeIndex		: "Document Indexing Keywords (comma separated)",
+DlgDocMeDescr		: "Document Description",
+DlgDocMeAuthor		: "Author",
+DlgDocMeCopy		: "Copyright",
+DlgDocPreview		: "Preview",
+
+// Templates Dialog
+Templates			: "Templates",
+DlgTemplatesTitle	: "Content Templates",
+DlgTemplatesSelMsg	: "Please select the template to open in the editor<br />(the actual contents will be lost):",
+DlgTemplatesLoading	: "Loading templates list. Please wait...",
+DlgTemplatesNoTpl	: "(No templates defined)",
+DlgTemplatesReplace	: "Replace actual contents",
+
+// About Dialog
+DlgAboutAboutTab	: "About",
+DlgAboutBrowserInfoTab	: "Browser Info",
+DlgAboutLicenseTab	: "License",
+DlgAboutVersion		: "version",
+DlgAboutInfo		: "For further information go to"
+};


Property changes on: announcement/trunk/src/main/webapp/fckeditor/editor/lang/en.js
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/webapp/fckeditor/editor/lang/eo.js
===================================================================
--- announcement/trunk/src/main/webapp/fckeditor/editor/lang/eo.js	                        (rev 0)
+++ announcement/trunk/src/main/webapp/fckeditor/editor/lang/eo.js	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,515 @@
+/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2008 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * Esperanto language file.
+ */
+
+var FCKLang =
+{
+// Language direction : "ltr" (left to right) or "rtl" (right to left).
+Dir					: "ltr",
+
+ToolbarCollapse		: "Kaŝi Ilobreton",
+ToolbarExpand		: "Vidigi Ilojn",
+
+// Toolbar Items and Context Menu
+Save				: "Sekurigi",
+NewPage				: "Nova Paĝo",
+Preview				: "Vidigi Aspekton",
+Cut					: "Eltondi",
+Copy				: "Kopii",
+Paste				: "Interglui",
+PasteText			: "Interglui kiel Tekston",
+PasteWord			: "Interglui el Word",
+Print				: "Presi",
+SelectAll			: "Elekti ĉion",
+RemoveFormat		: "Forigi Formaton",
+InsertLinkLbl		: "Ligilo",
+InsertLink			: "Enmeti/Ŝanĝi Ligilon",
+RemoveLink			: "Forigi Ligilon",
+Anchor				: "Enmeti/Ŝanĝi Ankron",
+AnchorDelete		: "Remove Anchor",	//MISSING
+InsertImageLbl		: "Bildo",
+InsertImage			: "Enmeti/Ŝanĝi Bildon",
+InsertFlashLbl		: "Flash",	//MISSING
+InsertFlash			: "Insert/Edit Flash",	//MISSING
+InsertTableLbl		: "Tabelo",
+InsertTable			: "Enmeti/Ŝanĝi Tabelon",
+InsertLineLbl		: "Horizonta Linio",
+InsertLine			: "Enmeti Horizonta Linio",
+InsertSpecialCharLbl: "Speciala Signo",
+InsertSpecialChar	: "Enmeti Specialan Signon",
+InsertSmileyLbl		: "Mienvinjeto",
+InsertSmiley		: "Enmeti Mienvinjeton",
+About				: "Pri FCKeditor",
+Bold				: "Grasa",
+Italic				: "Kursiva",
+Underline			: "Substreko",
+StrikeThrough		: "Trastreko",
+Subscript			: "Subskribo",
+Superscript			: "Superskribo",
+LeftJustify			: "Maldekstrigi",
+CenterJustify		: "Centrigi",
+RightJustify		: "Dekstrigi",
+BlockJustify		: "Ĝisrandigi Ambaŭflanke",
+DecreaseIndent		: "Malpligrandigi Krommarĝenon",
+IncreaseIndent		: "Pligrandigi Krommarĝenon",
+Blockquote			: "Blockquote",	//MISSING
+Undo				: "Malfari",
+Redo				: "Refari",
+NumberedListLbl		: "Numera Listo",
+NumberedList		: "Enmeti/Forigi Numeran Liston",
+BulletedListLbl		: "Bula Listo",
+BulletedList		: "Enmeti/Forigi Bulan Liston",
+ShowTableBorders	: "Vidigi Borderojn de Tabelo",
+ShowDetails			: "Vidigi Detalojn",
+Style				: "Stilo",
+FontFormat			: "Formato",
+Font				: "Tiparo",
+FontSize			: "Grando",
+TextColor			: "Teksta Koloro",
+BGColor				: "Fona Koloro",
+Source				: "Fonto",
+Find				: "Serĉi",
+Replace				: "Anstataŭigi",
+SpellCheck			: "Literumada Kontrolilo",
+UniversalKeyboard	: "Universala Klavaro",
+PageBreakLbl		: "Page Break",	//MISSING
+PageBreak			: "Insert Page Break",	//MISSING
+
+Form			: "Formularo",
+Checkbox		: "Markobutono",
+RadioButton		: "Radiobutono",
+TextField		: "Teksta kampo",
+Textarea		: "Teksta Areo",
+HiddenField		: "Kaŝita Kampo",
+Button			: "Butono",
+SelectionField	: "Elekta Kampo",
+ImageButton		: "Bildbutono",
+
+FitWindow		: "Maximize the editor size",	//MISSING
+ShowBlocks		: "Show Blocks",	//MISSING
+
+// Context Menu
+EditLink			: "Modifier Ligilon",
+CellCM				: "Cell",	//MISSING
+RowCM				: "Row",	//MISSING
+ColumnCM			: "Column",	//MISSING
+InsertRowAfter		: "Insert Row After",	//MISSING
+InsertRowBefore		: "Insert Row Before",	//MISSING
+DeleteRows			: "Forigi Liniojn",
+InsertColumnAfter	: "Insert Column After",	//MISSING
+InsertColumnBefore	: "Insert Column Before",	//MISSING
+DeleteColumns		: "Forigi Kolumnojn",
+InsertCellAfter		: "Insert Cell After",	//MISSING
+InsertCellBefore	: "Insert Cell Before",	//MISSING
+DeleteCells			: "Forigi Ĉelojn",
+MergeCells			: "Kunfandi Ĉelojn",
+MergeRight			: "Merge Right",	//MISSING
+MergeDown			: "Merge Down",	//MISSING
+HorizontalSplitCell	: "Split Cell Horizontally",	//MISSING
+VerticalSplitCell	: "Split Cell Vertically",	//MISSING
+TableDelete			: "Delete Table",	//MISSING
+CellProperties		: "Atributoj de Ĉelo",
+TableProperties		: "Atributoj de Tabelo",
+ImageProperties		: "Atributoj de Bildo",
+FlashProperties		: "Flash Properties",	//MISSING
+
+AnchorProp			: "Ankraj Atributoj",
+ButtonProp			: "Butonaj Atributoj",
+CheckboxProp		: "Markobutonaj Atributoj",
+HiddenFieldProp		: "Atributoj de Kaŝita Kampo",
+RadioButtonProp		: "Radiobutonaj Atributoj",
+ImageButtonProp		: "Bildbutonaj Atributoj",
+TextFieldProp		: "Atributoj de Teksta Kampo",
+SelectionFieldProp	: "Atributoj de Elekta Kampo",
+TextareaProp		: "Atributoj de Teksta Areo",
+FormProp			: "Formularaj Atributoj",
+
+FontFormats			: "Normala;Formatita;Adreso;Titolo 1;Titolo 2;Titolo 3;Titolo 4;Titolo 5;Titolo 6;Paragrafo (DIV)",
+
+// Alerts and Messages
+ProcessingXHTML		: "Traktado de XHTML. Bonvolu pacienci...",
+Done				: "Finita",
+PasteWordConfirm	: "La algluota teksto ŝajnas esti Word-devena. Ĉu vi volas purigi ĝin antaŭ ol interglui?",
+NotCompatiblePaste	: "Tiu ĉi komando bezonas almenaŭ Internet Explorer 5.5. Ĉu vi volas daŭrigi sen purigado?",
+UnknownToolbarItem	: "Ilobretero nekonata \"%1\"",
+UnknownCommand		: "Komandonomo nekonata \"%1\"",
+NotImplemented		: "Komando ne ankoraŭ realigita",
+UnknownToolbarSet	: "La ilobreto \"%1\" ne ekzistas",
+NoActiveX			: "Your browser's security settings could limit some features of the editor. You must enable the option \"Run ActiveX controls and plug-ins\". You may experience errors and notice missing features.",	//MISSING
+BrowseServerBlocked : "The resources browser could not be opened. Make sure that all popup blockers are disabled.",	//MISSING
+DialogBlocked		: "It was not possible to open the dialog window. Make sure all popup blockers are disabled.",	//MISSING
+
+// Dialogs
+DlgBtnOK			: "Akcepti",
+DlgBtnCancel		: "Rezigni",
+DlgBtnClose			: "Fermi",
+DlgBtnBrowseServer	: "Foliumi en la Servilo",
+DlgAdvancedTag		: "Speciala",
+DlgOpOther			: "<Alia>",
+DlgInfoTab			: "Info",	//MISSING
+DlgAlertUrl			: "Please insert the URL",	//MISSING
+
+// General Dialogs Labels
+DlgGenNotSet		: "<Defaŭlta>",
+DlgGenId			: "Id",
+DlgGenLangDir		: "Skribdirekto",
+DlgGenLangDirLtr	: "De maldekstro dekstren (LTR)",
+DlgGenLangDirRtl	: "De dekstro maldekstren (RTL)",
+DlgGenLangCode		: "Lingva Kodo",
+DlgGenAccessKey		: "Fulmoklavo",
+DlgGenName			: "Nomo",
+DlgGenTabIndex		: "Taba Ordo",
+DlgGenLongDescr		: "URL de Longa Priskribo",
+DlgGenClass			: "Klasoj de Stilfolioj",
+DlgGenTitle			: "Indika Titolo",
+DlgGenContType		: "Indika Enhavotipo",
+DlgGenLinkCharset	: "Signaro de la Ligita Rimedo",
+DlgGenStyle			: "Stilo",
+
+// Image Dialog
+DlgImgTitle			: "Atributoj de Bildo",
+DlgImgInfoTab		: "Informoj pri Bildo",
+DlgImgBtnUpload		: "Sendu al Servilo",
+DlgImgURL			: "URL",
+DlgImgUpload		: "Alŝuti",
+DlgImgAlt			: "Anstataŭiga Teksto",
+DlgImgWidth			: "Larĝo",
+DlgImgHeight		: "Alto",
+DlgImgLockRatio		: "Konservi Proporcion",
+DlgBtnResetSize		: "Origina Grando",
+DlgImgBorder		: "Bordero",
+DlgImgHSpace		: "HSpaco",
+DlgImgVSpace		: "VSpaco",
+DlgImgAlign			: "Ĝisrandigo",
+DlgImgAlignLeft		: "Maldekstre",
+DlgImgAlignAbsBottom: "Abs Malsupre",
+DlgImgAlignAbsMiddle: "Abs Centre",
+DlgImgAlignBaseline	: "Je Malsupro de Teksto",
+DlgImgAlignBottom	: "Malsupre",
+DlgImgAlignMiddle	: "Centre",
+DlgImgAlignRight	: "Dekstre",
+DlgImgAlignTextTop	: "Je Supro de Teksto",
+DlgImgAlignTop		: "Supre",
+DlgImgPreview		: "Vidigi Aspekton",
+DlgImgAlertUrl		: "Bonvolu tajpi la URL de la bildo",
+DlgImgLinkTab		: "Link",	//MISSING
+
+// Flash Dialog
+DlgFlashTitle		: "Flash Properties",	//MISSING
+DlgFlashChkPlay		: "Auto Play",	//MISSING
+DlgFlashChkLoop		: "Loop",	//MISSING
+DlgFlashChkMenu		: "Enable Flash Menu",	//MISSING
+DlgFlashScale		: "Scale",	//MISSING
+DlgFlashScaleAll	: "Show all",	//MISSING
+DlgFlashScaleNoBorder	: "No Border",	//MISSING
+DlgFlashScaleFit	: "Exact Fit",	//MISSING
+
+// Link Dialog
+DlgLnkWindowTitle	: "Ligilo",
+DlgLnkInfoTab		: "Informoj pri la Ligilo",
+DlgLnkTargetTab		: "Celo",
+
+DlgLnkType			: "Tipo de Ligilo",
+DlgLnkTypeURL		: "URL",
+DlgLnkTypeAnchor	: "Ankri en tiu ĉi paĝo",
+DlgLnkTypeEMail		: "Retpoŝto",
+DlgLnkProto			: "Protokolo",
+DlgLnkProtoOther	: "<alia>",
+DlgLnkURL			: "URL",
+DlgLnkAnchorSel		: "Elekti Ankron",
+DlgLnkAnchorByName	: "Per Ankronomo",
+DlgLnkAnchorById	: "Per Elementidentigilo",
+DlgLnkNoAnchors		: "<Ne disponeblas ankroj en la dokumento>",
+DlgLnkEMail			: "Retadreso",
+DlgLnkEMailSubject	: "Temlinio",
+DlgLnkEMailBody		: "Mesaĝa korpo",
+DlgLnkUpload		: "Alŝuti",
+DlgLnkBtnUpload		: "Sendi al Servilo",
+
+DlgLnkTarget		: "Celo",
+DlgLnkTargetFrame	: "<kadro>",
+DlgLnkTargetPopup	: "<ŝprucfenestro>",
+DlgLnkTargetBlank	: "Nova Fenestro (_blank)",
+DlgLnkTargetParent	: "Gepatra Fenestro (_parent)",
+DlgLnkTargetSelf	: "Sama Fenestro (_self)",
+DlgLnkTargetTop		: "Plej Supra Fenestro (_top)",
+DlgLnkTargetFrameName	: "Nomo de Kadro",
+DlgLnkPopWinName	: "Nomo de Ŝprucfenestro",
+DlgLnkPopWinFeat	: "Atributoj de la Ŝprucfenestro",
+DlgLnkPopResize		: "Grando Ŝanĝebla",
+DlgLnkPopLocation	: "Adresobreto",
+DlgLnkPopMenu		: "Menubreto",
+DlgLnkPopScroll		: "Rulumlisteloj",
+DlgLnkPopStatus		: "Statobreto",
+DlgLnkPopToolbar	: "Ilobreto",
+DlgLnkPopFullScrn	: "Tutekrane (IE)",
+DlgLnkPopDependent	: "Dependa (Netscape)",
+DlgLnkPopWidth		: "Larĝo",
+DlgLnkPopHeight		: "Alto",
+DlgLnkPopLeft		: "Pozicio de Maldekstro",
+DlgLnkPopTop		: "Pozicio de Supro",
+
+DlnLnkMsgNoUrl		: "Bonvolu entajpi la URL-on",
+DlnLnkMsgNoEMail	: "Bonvolu entajpi la retadreson",
+DlnLnkMsgNoAnchor	: "Bonvolu elekti ankron",
+DlnLnkMsgInvPopName	: "The popup name must begin with an alphabetic character and must not contain spaces",	//MISSING
+
+// Color Dialog
+DlgColorTitle		: "Elekti",
+DlgColorBtnClear	: "Forigi",
+DlgColorHighlight	: "Emfazi",
+DlgColorSelected	: "Elektita",
+
+// Smiley Dialog
+DlgSmileyTitle		: "Enmeti Mienvinjeton",
+
+// Special Character Dialog
+DlgSpecialCharTitle	: "Enmeti Specialan Signon",
+
+// Table Dialog
+DlgTableTitle		: "Atributoj de Tabelo",
+DlgTableRows		: "Linioj",
+DlgTableColumns		: "Kolumnoj",
+DlgTableBorder		: "Bordero",
+DlgTableAlign		: "Ĝisrandigo",
+DlgTableAlignNotSet	: "<Defaŭlte>",
+DlgTableAlignLeft	: "Maldekstre",
+DlgTableAlignCenter	: "Centre",
+DlgTableAlignRight	: "Dekstre",
+DlgTableWidth		: "Larĝo",
+DlgTableWidthPx		: "Bitbilderoj",
+DlgTableWidthPc		: "elcentoj",
+DlgTableHeight		: "Alto",
+DlgTableCellSpace	: "Interspacigo de Ĉeloj",
+DlgTableCellPad		: "Ĉirkaŭenhava Plenigado",
+DlgTableCaption		: "Titolo",
+DlgTableSummary		: "Summary",	//MISSING
+
+// Table Cell Dialog
+DlgCellTitle		: "Atributoj de Celo",
+DlgCellWidth		: "Larĝo",
+DlgCellWidthPx		: "bitbilderoj",
+DlgCellWidthPc		: "elcentoj",
+DlgCellHeight		: "Alto",
+DlgCellWordWrap		: "Linifaldo",
+DlgCellWordWrapNotSet	: "<Defaŭlte>",
+DlgCellWordWrapYes	: "Jes",
+DlgCellWordWrapNo	: "Ne",
+DlgCellHorAlign		: "Horizonta Ĝisrandigo",
+DlgCellHorAlignNotSet	: "<Defaŭlte>",
+DlgCellHorAlignLeft	: "Maldekstre",
+DlgCellHorAlignCenter	: "Centre",
+DlgCellHorAlignRight: "Dekstre",
+DlgCellVerAlign		: "Vertikala Ĝisrandigo",
+DlgCellVerAlignNotSet	: "<Defaŭlte>",
+DlgCellVerAlignTop	: "Supre",
+DlgCellVerAlignMiddle	: "Centre",
+DlgCellVerAlignBottom	: "Malsupre",
+DlgCellVerAlignBaseline	: "Je Malsupro de Teksto",
+DlgCellRowSpan		: "Linioj Kunfanditaj",
+DlgCellCollSpan		: "Kolumnoj Kunfanditaj",
+DlgCellBackColor	: "Fono",
+DlgCellBorderColor	: "Bordero",
+DlgCellBtnSelect	: "Elekti...",
+
+// Find and Replace Dialog
+DlgFindAndReplaceTitle	: "Find and Replace",	//MISSING
+
+// Find Dialog
+DlgFindTitle		: "Serĉi",
+DlgFindFindBtn		: "Serĉi",
+DlgFindNotFoundMsg	: "La celteksto ne estas trovita.",
+
+// Replace Dialog
+DlgReplaceTitle			: "Anstataŭigi",
+DlgReplaceFindLbl		: "Serĉi:",
+DlgReplaceReplaceLbl	: "Anstataŭigi per:",
+DlgReplaceCaseChk		: "Kongruigi Usklecon",
+DlgReplaceReplaceBtn	: "Anstataŭigi",
+DlgReplaceReplAllBtn	: "Anstataŭigi Ĉiun",
+DlgReplaceWordChk		: "Tuta Vorto",
+
+// Paste Operations / Dialog
+PasteErrorCut	: "La sekurecagordo de via TTT-legilo ne permesas, ke la redaktilo faras eltondajn operaciojn. Bonvolu uzi la klavaron por tio (ctrl-X).",
+PasteErrorCopy	: "La sekurecagordo de via TTT-legilo ne permesas, ke la redaktilo faras kopiajn operaciojn. Bonvolu uzi la klavaron por tio (ctrl-C).",
+
+PasteAsText		: "Interglui kiel Tekston",
+PasteFromWord	: "Interglui el Word",
+
+DlgPasteMsg2	: "Please paste inside the following box using the keyboard (<strong>Ctrl+V</strong>) and hit <strong>OK</strong>.",	//MISSING
+DlgPasteSec		: "Because of your browser security settings, the editor is not able to access your clipboard data directly. You are required to paste it again in this window.",	//MISSING
+DlgPasteIgnoreFont		: "Ignore Font Face definitions",	//MISSING
+DlgPasteRemoveStyles	: "Remove Styles definitions",	//MISSING
+
+// Color Picker
+ColorAutomatic	: "Aŭtomata",
+ColorMoreColors	: "Pli da Koloroj...",
+
+// Document Properties
+DocProps		: "Dokumentaj Atributoj",
+
+// Anchor Dialog
+DlgAnchorTitle		: "Ankraj Atributoj",
+DlgAnchorName		: "Ankra Nomo",
+DlgAnchorErrorName	: "Bv tajpi la ankran nomon",
+
+// Speller Pages Dialog
+DlgSpellNotInDic		: "Ne trovita en la vortaro",
+DlgSpellChangeTo		: "Ŝanĝi al",
+DlgSpellBtnIgnore		: "Malatenti",
+DlgSpellBtnIgnoreAll	: "Malatenti Ĉiun",
+DlgSpellBtnReplace		: "Anstataŭigi",
+DlgSpellBtnReplaceAll	: "Anstataŭigi Ĉiun",
+DlgSpellBtnUndo			: "Malfari",
+DlgSpellNoSuggestions	: "- Neniu propono -",
+DlgSpellProgress		: "Literumkontrolado daŭras...",
+DlgSpellNoMispell		: "Literumkontrolado finita: neniu fuŝo trovita",
+DlgSpellNoChanges		: "Literumkontrolado finita: neniu vorto ŝanĝita",
+DlgSpellOneChange		: "Literumkontrolado finita: unu vorto ŝanĝita",
+DlgSpellManyChanges		: "Literumkontrolado finita: %1 vortoj ŝanĝitaj",
+
+IeSpellDownload			: "Literumada Kontrolilo ne instalita. Ĉu vi volas elŝuti ĝin nun?",
+
+// Button Dialog
+DlgButtonText		: "Teksto (Valoro)",
+DlgButtonType		: "Tipo",
+DlgButtonTypeBtn	: "Button",	//MISSING
+DlgButtonTypeSbm	: "Submit",	//MISSING
+DlgButtonTypeRst	: "Reset",	//MISSING
+
+// Checkbox and Radio Button Dialogs
+DlgCheckboxName		: "Nomo",
+DlgCheckboxValue	: "Valoro",
+DlgCheckboxSelected	: "Elektita",
+
+// Form Dialog
+DlgFormName		: "Nomo",
+DlgFormAction	: "Ago",
+DlgFormMethod	: "Metodo",
+
+// Select Field Dialog
+DlgSelectName		: "Nomo",
+DlgSelectValue		: "Valoro",
+DlgSelectSize		: "Grando",
+DlgSelectLines		: "Linioj",
+DlgSelectChkMulti	: "Permesi Plurajn Elektojn",
+DlgSelectOpAvail	: "Elektoj Disponeblaj",
+DlgSelectOpText		: "Teksto",
+DlgSelectOpValue	: "Valoro",
+DlgSelectBtnAdd		: "Aldoni",
+DlgSelectBtnModify	: "Modifi",
+DlgSelectBtnUp		: "Supren",
+DlgSelectBtnDown	: "Malsupren",
+DlgSelectBtnSetValue : "Agordi kiel Elektitan Valoron",
+DlgSelectBtnDelete	: "Forigi",
+
+// Textarea Dialog
+DlgTextareaName	: "Nomo",
+DlgTextareaCols	: "Kolumnoj",
+DlgTextareaRows	: "Vicoj",
+
+// Text Field Dialog
+DlgTextName			: "Nomo",
+DlgTextValue		: "Valoro",
+DlgTextCharWidth	: "Signolarĝo",
+DlgTextMaxChars		: "Maksimuma Nombro da Signoj",
+DlgTextType			: "Tipo",
+DlgTextTypeText		: "Teksto",
+DlgTextTypePass		: "Pasvorto",
+
+// Hidden Field Dialog
+DlgHiddenName	: "Nomo",
+DlgHiddenValue	: "Valoro",
+
+// Bulleted List Dialog
+BulletedListProp	: "Atributoj de Bula Listo",
+NumberedListProp	: "Atributoj de Numera Listo",
+DlgLstStart			: "Start",	//MISSING
+DlgLstType			: "Tipo",
+DlgLstTypeCircle	: "Cirklo",
+DlgLstTypeDisc		: "Disc",	//MISSING
+DlgLstTypeSquare	: "Kvadrato",
+DlgLstTypeNumbers	: "Ciferoj (1, 2, 3)",
+DlgLstTypeLCase		: "Minusklaj Literoj (a, b, c)",
+DlgLstTypeUCase		: "Majusklaj Literoj (A, B, C)",
+DlgLstTypeSRoman	: "Malgrandaj Romanaj Ciferoj (i, ii, iii)",
+DlgLstTypeLRoman	: "Grandaj Romanaj Ciferoj (I, II, III)",
+
+// Document Properties Dialog
+DlgDocGeneralTab	: "Ĝeneralaĵoj",
+DlgDocBackTab		: "Fono",
+DlgDocColorsTab		: "Koloroj kaj Marĝenoj",
+DlgDocMetaTab		: "Metadatumoj",
+
+DlgDocPageTitle		: "Paĝotitolo",
+DlgDocLangDir		: "Skribdirekto de la Lingvo",
+DlgDocLangDirLTR	: "De maldekstro dekstren (LTR)",
+DlgDocLangDirRTL	: "De dekstro maldekstren (LTR)",
+DlgDocLangCode		: "Lingvokodo",
+DlgDocCharSet		: "Signara Kodo",
+DlgDocCharSetCE		: "Central European",	//MISSING
+DlgDocCharSetCT		: "Chinese Traditional (Big5)",	//MISSING
+DlgDocCharSetCR		: "Cyrillic",	//MISSING
+DlgDocCharSetGR		: "Greek",	//MISSING
+DlgDocCharSetJP		: "Japanese",	//MISSING
+DlgDocCharSetKR		: "Korean",	//MISSING
+DlgDocCharSetTR		: "Turkish",	//MISSING
+DlgDocCharSetUN		: "Unicode (UTF-8)",	//MISSING
+DlgDocCharSetWE		: "Western European",	//MISSING
+DlgDocCharSetOther	: "Alia Signara Kodo",
+
+DlgDocDocType		: "Dokumenta Tipo",
+DlgDocDocTypeOther	: "Alia Dokumenta Tipo",
+DlgDocIncXHTML		: "Inkluzivi XHTML Deklaroj",
+DlgDocBgColor		: "Fona Koloro",
+DlgDocBgImage		: "URL de Fona Bildo",
+DlgDocBgNoScroll	: "Neruluma Fono",
+DlgDocCText			: "Teksto",
+DlgDocCLink			: "Ligilo",
+DlgDocCVisited		: "Vizitita Ligilo",
+DlgDocCActive		: "Aktiva Ligilo",
+DlgDocMargins		: "Paĝaj Marĝenoj",
+DlgDocMaTop			: "Supra",
+DlgDocMaLeft		: "Maldekstra",
+DlgDocMaRight		: "Dekstra",
+DlgDocMaBottom		: "Malsupra",
+DlgDocMeIndex		: "Ŝlosilvortoj de la Dokumento (apartigita de komoj)",
+DlgDocMeDescr		: "Dokumenta Priskribo",
+DlgDocMeAuthor		: "Verkinto",
+DlgDocMeCopy		: "Kopirajto",
+DlgDocPreview		: "Aspekto",
+
+// Templates Dialog
+Templates			: "Templates",	//MISSING
+DlgTemplatesTitle	: "Content Templates",	//MISSING
+DlgTemplatesSelMsg	: "Please select the template to open in the editor<br />(the actual contents will be lost):",	//MISSING
+DlgTemplatesLoading	: "Loading templates list. Please wait...",	//MISSING
+DlgTemplatesNoTpl	: "(No templates defined)",	//MISSING
+DlgTemplatesReplace	: "Replace actual contents",	//MISSING
+
+// About Dialog
+DlgAboutAboutTab	: "Pri",
+DlgAboutBrowserInfoTab	: "Informoj pri TTT-legilo",
+DlgAboutLicenseTab	: "License",	//MISSING
+DlgAboutVersion		: "versio",
+DlgAboutInfo		: "Por pli da informoj, vizitu"
+};


Property changes on: announcement/trunk/src/main/webapp/fckeditor/editor/lang/eo.js
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/webapp/fckeditor/editor/lang/es.js
===================================================================
--- announcement/trunk/src/main/webapp/fckeditor/editor/lang/es.js	                        (rev 0)
+++ announcement/trunk/src/main/webapp/fckeditor/editor/lang/es.js	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,515 @@
+/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2008 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * Spanish language file.
+ */
+
+var FCKLang =
+{
+// Language direction : "ltr" (left to right) or "rtl" (right to left).
+Dir					: "ltr",
+
+ToolbarCollapse		: "Contraer Barra",
+ToolbarExpand		: "Expandir Barra",
+
+// Toolbar Items and Context Menu
+Save				: "Guardar",
+NewPage				: "Nueva Página",
+Preview				: "Vista Previa",
+Cut					: "Cortar",
+Copy				: "Copiar",
+Paste				: "Pegar",
+PasteText			: "Pegar como texto plano",
+PasteWord			: "Pegar desde Word",
+Print				: "Imprimir",
+SelectAll			: "Seleccionar Todo",
+RemoveFormat		: "Eliminar Formato",
+InsertLinkLbl		: "Vínculo",
+InsertLink			: "Insertar/Editar Vínculo",
+RemoveLink			: "Eliminar Vínculo",
+Anchor				: "Referencia",
+AnchorDelete		: "Eliminar Referencia",
+InsertImageLbl		: "Imagen",
+InsertImage			: "Insertar/Editar Imagen",
+InsertFlashLbl		: "Flash",
+InsertFlash			: "Insertar/Editar Flash",
+InsertTableLbl		: "Tabla",
+InsertTable			: "Insertar/Editar Tabla",
+InsertLineLbl		: "Línea",
+InsertLine			: "Insertar Línea Horizontal",
+InsertSpecialCharLbl: "Caracter Especial",
+InsertSpecialChar	: "Insertar Caracter Especial",
+InsertSmileyLbl		: "Emoticons",
+InsertSmiley		: "Insertar Emoticons",
+About				: "Acerca de FCKeditor",
+Bold				: "Negrita",
+Italic				: "Cursiva",
+Underline			: "Subrayado",
+StrikeThrough		: "Tachado",
+Subscript			: "Subíndice",
+Superscript			: "Superíndice",
+LeftJustify			: "Alinear a Izquierda",
+CenterJustify		: "Centrar",
+RightJustify		: "Alinear a Derecha",
+BlockJustify		: "Justificado",
+DecreaseIndent		: "Disminuir Sangría",
+IncreaseIndent		: "Aumentar Sangría",
+Blockquote			: "Cita",
+Undo				: "Deshacer",
+Redo				: "Rehacer",
+NumberedListLbl		: "Numeración",
+NumberedList		: "Insertar/Eliminar Numeración",
+BulletedListLbl		: "Viñetas",
+BulletedList		: "Insertar/Eliminar Viñetas",
+ShowTableBorders	: "Mostrar Bordes de Tablas",
+ShowDetails			: "Mostrar saltos de Párrafo",
+Style				: "Estilo",
+FontFormat			: "Formato",
+Font				: "Fuente",
+FontSize			: "Tamaño",
+TextColor			: "Color de Texto",
+BGColor				: "Color de Fondo",
+Source				: "Fuente HTML",
+Find				: "Buscar",
+Replace				: "Reemplazar",
+SpellCheck			: "Ortografía",
+UniversalKeyboard	: "Teclado Universal",
+PageBreakLbl		: "Salto de Página",
+PageBreak			: "Insertar Salto de Página",
+
+Form			: "Formulario",
+Checkbox		: "Casilla de Verificación",
+RadioButton		: "Botones de Radio",
+TextField		: "Campo de Texto",
+Textarea		: "Area de Texto",
+HiddenField		: "Campo Oculto",
+Button			: "Botón",
+SelectionField	: "Campo de Selección",
+ImageButton		: "Botón Imagen",
+
+FitWindow		: "Maximizar el tamaño del editor",
+ShowBlocks		: "Mostrar bloques",
+
+// Context Menu
+EditLink			: "Editar Vínculo",
+CellCM				: "Celda",
+RowCM				: "Fila",
+ColumnCM			: "Columna",
+InsertRowAfter		: "Insertar fila en la parte inferior",
+InsertRowBefore		: "Insertar fila en la parte superior",
+DeleteRows			: "Eliminar Filas",
+InsertColumnAfter	: "Insertar columna a la derecha",
+InsertColumnBefore	: "Insertar columna a la izquierda",
+DeleteColumns		: "Eliminar Columnas",
+InsertCellAfter		: "Insertar celda a la derecha",
+InsertCellBefore	: "Insertar celda a la izquierda",
+DeleteCells			: "Eliminar Celdas",
+MergeCells			: "Combinar Celdas",
+MergeRight			: "Combinar a la derecha",
+MergeDown			: "Combinar hacia abajo",
+HorizontalSplitCell	: "Dividir la celda horizontalmente",
+VerticalSplitCell	: "Dividir la celda verticalmente",
+TableDelete			: "Eliminar Tabla",
+CellProperties		: "Propiedades de Celda",
+TableProperties		: "Propiedades de Tabla",
+ImageProperties		: "Propiedades de Imagen",
+FlashProperties		: "Propiedades de Flash",
+
+AnchorProp			: "Propiedades de Referencia",
+ButtonProp			: "Propiedades de Botón",
+CheckboxProp		: "Propiedades de Casilla",
+HiddenFieldProp		: "Propiedades de Campo Oculto",
+RadioButtonProp		: "Propiedades de Botón de Radio",
+ImageButtonProp		: "Propiedades de Botón de Imagen",
+TextFieldProp		: "Propiedades de Campo de Texto",
+SelectionFieldProp	: "Propiedades de Campo de Selección",
+TextareaProp		: "Propiedades de Area de Texto",
+FormProp			: "Propiedades de Formulario",
+
+FontFormats			: "Normal;Con formato;Dirección;Encabezado 1;Encabezado 2;Encabezado 3;Encabezado 4;Encabezado 5;Encabezado 6;Normal (DIV)",
+
+// Alerts and Messages
+ProcessingXHTML		: "Procesando XHTML. Por favor, espere...",
+Done				: "Hecho",
+PasteWordConfirm	: "El texto que desea parece provenir de Word. Desea depurarlo antes de pegarlo?",
+NotCompatiblePaste	: "Este comando está disponible sólo para Internet Explorer version 5.5 or superior. Desea pegar sin depurar?",
+UnknownToolbarItem	: "Item de barra desconocido \"%1\"",
+UnknownCommand		: "Nombre de comando desconocido \"%1\"",
+NotImplemented		: "Comando no implementado",
+UnknownToolbarSet	: "Nombre de barra \"%1\" no definido",
+NoActiveX			: "La configuración de las opciones de seguridad de su navegador puede estar limitando algunas características del editor. Por favor active la opción \"Ejecutar controles y complementos de ActiveX \", de lo contrario puede experimentar errores o ausencia de funcionalidades.",
+BrowseServerBlocked : "La ventana de visualización del servidor no pudo ser abierta. Verifique que su navegador no esté bloqueando las ventanas emergentes (pop up).",
+DialogBlocked		: "No se ha podido abrir la ventana de diálogo. Verifique que su navegador no esté bloqueando las ventanas emergentes (pop up).",
+
+// Dialogs
+DlgBtnOK			: "OK",
+DlgBtnCancel		: "Cancelar",
+DlgBtnClose			: "Cerrar",
+DlgBtnBrowseServer	: "Ver Servidor",
+DlgAdvancedTag		: "Avanzado",
+DlgOpOther			: "<Otro>",
+DlgInfoTab			: "Información",
+DlgAlertUrl			: "Inserte el URL",
+
+// General Dialogs Labels
+DlgGenNotSet		: "<No definido>",
+DlgGenId			: "Id",
+DlgGenLangDir		: "Orientación",
+DlgGenLangDirLtr	: "Izquierda a Derecha (LTR)",
+DlgGenLangDirRtl	: "Derecha a Izquierda (RTL)",
+DlgGenLangCode		: "Cód. de idioma",
+DlgGenAccessKey		: "Clave de Acceso",
+DlgGenName			: "Nombre",
+DlgGenTabIndex		: "Indice de tabulación",
+DlgGenLongDescr		: "Descripción larga URL",
+DlgGenClass			: "Clases de hojas de estilo",
+DlgGenTitle			: "Título",
+DlgGenContType		: "Tipo de Contenido",
+DlgGenLinkCharset	: "Fuente de caracteres vinculado",
+DlgGenStyle			: "Estilo",
+
+// Image Dialog
+DlgImgTitle			: "Propiedades de Imagen",
+DlgImgInfoTab		: "Información de Imagen",
+DlgImgBtnUpload		: "Enviar al Servidor",
+DlgImgURL			: "URL",
+DlgImgUpload		: "Cargar",
+DlgImgAlt			: "Texto Alternativo",
+DlgImgWidth			: "Anchura",
+DlgImgHeight		: "Altura",
+DlgImgLockRatio		: "Proporcional",
+DlgBtnResetSize		: "Tamaño Original",
+DlgImgBorder		: "Borde",
+DlgImgHSpace		: "Esp.Horiz",
+DlgImgVSpace		: "Esp.Vert",
+DlgImgAlign			: "Alineación",
+DlgImgAlignLeft		: "Izquierda",
+DlgImgAlignAbsBottom: "Abs inferior",
+DlgImgAlignAbsMiddle: "Abs centro",
+DlgImgAlignBaseline	: "Línea de base",
+DlgImgAlignBottom	: "Pie",
+DlgImgAlignMiddle	: "Centro",
+DlgImgAlignRight	: "Derecha",
+DlgImgAlignTextTop	: "Tope del texto",
+DlgImgAlignTop		: "Tope",
+DlgImgPreview		: "Vista Previa",
+DlgImgAlertUrl		: "Por favor escriba la URL de la imagen",
+DlgImgLinkTab		: "Vínculo",
+
+// Flash Dialog
+DlgFlashTitle		: "Propiedades de Flash",
+DlgFlashChkPlay		: "Autoejecución",
+DlgFlashChkLoop		: "Repetir",
+DlgFlashChkMenu		: "Activar Menú Flash",
+DlgFlashScale		: "Escala",
+DlgFlashScaleAll	: "Mostrar todo",
+DlgFlashScaleNoBorder	: "Sin Borde",
+DlgFlashScaleFit	: "Ajustado",
+
+// Link Dialog
+DlgLnkWindowTitle	: "Vínculo",
+DlgLnkInfoTab		: "Información de Vínculo",
+DlgLnkTargetTab		: "Destino",
+
+DlgLnkType			: "Tipo de vínculo",
+DlgLnkTypeURL		: "URL",
+DlgLnkTypeAnchor	: "Referencia en esta página",
+DlgLnkTypeEMail		: "E-Mail",
+DlgLnkProto			: "Protocolo",
+DlgLnkProtoOther	: "<otro>",
+DlgLnkURL			: "URL",
+DlgLnkAnchorSel		: "Seleccionar una referencia",
+DlgLnkAnchorByName	: "Por Nombre de Referencia",
+DlgLnkAnchorById	: "Por ID de elemento",
+DlgLnkNoAnchors		: "(No hay referencias disponibles en el documento)",
+DlgLnkEMail			: "Dirección de E-Mail",
+DlgLnkEMailSubject	: "Título del Mensaje",
+DlgLnkEMailBody		: "Cuerpo del Mensaje",
+DlgLnkUpload		: "Cargar",
+DlgLnkBtnUpload		: "Enviar al Servidor",
+
+DlgLnkTarget		: "Destino",
+DlgLnkTargetFrame	: "<marco>",
+DlgLnkTargetPopup	: "<ventana emergente>",
+DlgLnkTargetBlank	: "Nueva Ventana(_blank)",
+DlgLnkTargetParent	: "Ventana Padre (_parent)",
+DlgLnkTargetSelf	: "Misma Ventana (_self)",
+DlgLnkTargetTop		: "Ventana primaria (_top)",
+DlgLnkTargetFrameName	: "Nombre del Marco Destino",
+DlgLnkPopWinName	: "Nombre de Ventana Emergente",
+DlgLnkPopWinFeat	: "Características de Ventana Emergente",
+DlgLnkPopResize		: "Ajustable",
+DlgLnkPopLocation	: "Barra de ubicación",
+DlgLnkPopMenu		: "Barra de Menú",
+DlgLnkPopScroll		: "Barras de desplazamiento",
+DlgLnkPopStatus		: "Barra de Estado",
+DlgLnkPopToolbar	: "Barra de Herramientas",
+DlgLnkPopFullScrn	: "Pantalla Completa (IE)",
+DlgLnkPopDependent	: "Dependiente (Netscape)",
+DlgLnkPopWidth		: "Anchura",
+DlgLnkPopHeight		: "Altura",
+DlgLnkPopLeft		: "Posición Izquierda",
+DlgLnkPopTop		: "Posición Derecha",
+
+DlnLnkMsgNoUrl		: "Por favor tipee el vínculo URL",
+DlnLnkMsgNoEMail	: "Por favor tipee la dirección de e-mail",
+DlnLnkMsgNoAnchor	: "Por favor seleccione una referencia",
+DlnLnkMsgInvPopName	: "El nombre debe empezar con un caracter alfanumérico y no debe contener espacios",
+
+// Color Dialog
+DlgColorTitle		: "Seleccionar Color",
+DlgColorBtnClear	: "Ninguno",
+DlgColorHighlight	: "Resaltado",
+DlgColorSelected	: "Seleccionado",
+
+// Smiley Dialog
+DlgSmileyTitle		: "Insertar un Emoticon",
+
+// Special Character Dialog
+DlgSpecialCharTitle	: "Seleccione un caracter especial",
+
+// Table Dialog
+DlgTableTitle		: "Propiedades de Tabla",
+DlgTableRows		: "Filas",
+DlgTableColumns		: "Columnas",
+DlgTableBorder		: "Tamaño de Borde",
+DlgTableAlign		: "Alineación",
+DlgTableAlignNotSet	: "<No establecido>",
+DlgTableAlignLeft	: "Izquierda",
+DlgTableAlignCenter	: "Centrado",
+DlgTableAlignRight	: "Derecha",
+DlgTableWidth		: "Anchura",
+DlgTableWidthPx		: "pixeles",
+DlgTableWidthPc		: "porcentaje",
+DlgTableHeight		: "Altura",
+DlgTableCellSpace	: "Esp. e/celdas",
+DlgTableCellPad		: "Esp. interior",
+DlgTableCaption		: "Título",
+DlgTableSummary		: "Síntesis",
+
+// Table Cell Dialog
+DlgCellTitle		: "Propiedades de Celda",
+DlgCellWidth		: "Anchura",
+DlgCellWidthPx		: "pixeles",
+DlgCellWidthPc		: "porcentaje",
+DlgCellHeight		: "Altura",
+DlgCellWordWrap		: "Cortar Línea",
+DlgCellWordWrapNotSet	: "<No establecido>",
+DlgCellWordWrapYes	: "Si",
+DlgCellWordWrapNo	: "No",
+DlgCellHorAlign		: "Alineación Horizontal",
+DlgCellHorAlignNotSet	: "<No establecido>",
+DlgCellHorAlignLeft	: "Izquierda",
+DlgCellHorAlignCenter	: "Centrado",
+DlgCellHorAlignRight: "Derecha",
+DlgCellVerAlign		: "Alineación Vertical",
+DlgCellVerAlignNotSet	: "<Not establecido>",
+DlgCellVerAlignTop	: "Tope",
+DlgCellVerAlignMiddle	: "Medio",
+DlgCellVerAlignBottom	: "ie",
+DlgCellVerAlignBaseline	: "Línea de Base",
+DlgCellRowSpan		: "Abarcar Filas",
+DlgCellCollSpan		: "Abarcar Columnas",
+DlgCellBackColor	: "Color de Fondo",
+DlgCellBorderColor	: "Color de Borde",
+DlgCellBtnSelect	: "Seleccione...",
+
+// Find and Replace Dialog
+DlgFindAndReplaceTitle	: "Buscar y Reemplazar",
+
+// Find Dialog
+DlgFindTitle		: "Buscar",
+DlgFindFindBtn		: "Buscar",
+DlgFindNotFoundMsg	: "El texto especificado no ha sido encontrado.",
+
+// Replace Dialog
+DlgReplaceTitle			: "Reemplazar",
+DlgReplaceFindLbl		: "Texto a buscar:",
+DlgReplaceReplaceLbl	: "Reemplazar con:",
+DlgReplaceCaseChk		: "Coincidir may/min",
+DlgReplaceReplaceBtn	: "Reemplazar",
+DlgReplaceReplAllBtn	: "Reemplazar Todo",
+DlgReplaceWordChk		: "Coincidir toda la palabra",
+
+// Paste Operations / Dialog
+PasteErrorCut	: "La configuración de seguridad de este navegador no permite la ejecución automática de operaciones de cortado. Por favor use el teclado (Ctrl+X).",
+PasteErrorCopy	: "La configuración de seguridad de este navegador no permite la ejecución automática de operaciones de copiado. Por favor use el teclado (Ctrl+C).",
+
+PasteAsText		: "Pegar como Texto Plano",
+PasteFromWord	: "Pegar desde Word",
+
+DlgPasteMsg2	: "Por favor pegue dentro del cuadro utilizando el teclado (<STRONG>Ctrl+V</STRONG>); luego presione <STRONG>OK</STRONG>.",
+DlgPasteSec		: "Debido a la configuración de seguridad de su navegador, el editor no tiene acceso al portapapeles. Es necesario que lo pegue de nuevo en esta ventana.",
+DlgPasteIgnoreFont		: "Ignorar definiciones de fuentes",
+DlgPasteRemoveStyles	: "Remover definiciones de estilo",
+
+// Color Picker
+ColorAutomatic	: "Automático",
+ColorMoreColors	: "Más Colores...",
+
+// Document Properties
+DocProps		: "Propiedades del Documento",
+
+// Anchor Dialog
+DlgAnchorTitle		: "Propiedades de la Referencia",
+DlgAnchorName		: "Nombre de la Referencia",
+DlgAnchorErrorName	: "Por favor, complete el nombre de la Referencia",
+
+// Speller Pages Dialog
+DlgSpellNotInDic		: "No se encuentra en el Diccionario",
+DlgSpellChangeTo		: "Cambiar a",
+DlgSpellBtnIgnore		: "Ignorar",
+DlgSpellBtnIgnoreAll	: "Ignorar Todo",
+DlgSpellBtnReplace		: "Reemplazar",
+DlgSpellBtnReplaceAll	: "Reemplazar Todo",
+DlgSpellBtnUndo			: "Deshacer",
+DlgSpellNoSuggestions	: "- No hay sugerencias -",
+DlgSpellProgress		: "Control de Ortografía en progreso...",
+DlgSpellNoMispell		: "Control finalizado: no se encontraron errores",
+DlgSpellNoChanges		: "Control finalizado: no se ha cambiado ninguna palabra",
+DlgSpellOneChange		: "Control finalizado: se ha cambiado una palabra",
+DlgSpellManyChanges		: "Control finalizado: se ha cambiado %1 palabras",
+
+IeSpellDownload			: "Módulo de Control de Ortografía no instalado. ¿Desea descargarlo ahora?",
+
+// Button Dialog
+DlgButtonText		: "Texto (Valor)",
+DlgButtonType		: "Tipo",
+DlgButtonTypeBtn	: "Boton",
+DlgButtonTypeSbm	: "Enviar",
+DlgButtonTypeRst	: "Reestablecer",
+
+// Checkbox and Radio Button Dialogs
+DlgCheckboxName		: "Nombre",
+DlgCheckboxValue	: "Valor",
+DlgCheckboxSelected	: "Seleccionado",
+
+// Form Dialog
+DlgFormName		: "Nombre",
+DlgFormAction	: "Acción",
+DlgFormMethod	: "Método",
+
+// Select Field Dialog
+DlgSelectName		: "Nombre",
+DlgSelectValue		: "Valor",
+DlgSelectSize		: "Tamaño",
+DlgSelectLines		: "Lineas",
+DlgSelectChkMulti	: "Permitir múltiple selección",
+DlgSelectOpAvail	: "Opciones disponibles",
+DlgSelectOpText		: "Texto",
+DlgSelectOpValue	: "Valor",
+DlgSelectBtnAdd		: "Agregar",
+DlgSelectBtnModify	: "Modificar",
+DlgSelectBtnUp		: "Subir",
+DlgSelectBtnDown	: "Bajar",
+DlgSelectBtnSetValue : "Establecer como predeterminado",
+DlgSelectBtnDelete	: "Eliminar",
+
+// Textarea Dialog
+DlgTextareaName	: "Nombre",
+DlgTextareaCols	: "Columnas",
+DlgTextareaRows	: "Filas",
+
+// Text Field Dialog
+DlgTextName			: "Nombre",
+DlgTextValue		: "Valor",
+DlgTextCharWidth	: "Caracteres de ancho",
+DlgTextMaxChars		: "Máximo caracteres",
+DlgTextType			: "Tipo",
+DlgTextTypeText		: "Texto",
+DlgTextTypePass		: "Contraseña",
+
+// Hidden Field Dialog
+DlgHiddenName	: "Nombre",
+DlgHiddenValue	: "Valor",
+
+// Bulleted List Dialog
+BulletedListProp	: "Propiedades de Viñetas",
+NumberedListProp	: "Propiedades de Numeraciones",
+DlgLstStart			: "Inicio",
+DlgLstType			: "Tipo",
+DlgLstTypeCircle	: "Círculo",
+DlgLstTypeDisc		: "Disco",
+DlgLstTypeSquare	: "Cuadrado",
+DlgLstTypeNumbers	: "Números (1, 2, 3)",
+DlgLstTypeLCase		: "letras en minúsculas (a, b, c)",
+DlgLstTypeUCase		: "letras en mayúsculas (A, B, C)",
+DlgLstTypeSRoman	: "Números Romanos (i, ii, iii)",
+DlgLstTypeLRoman	: "Números Romanos (I, II, III)",
+
+// Document Properties Dialog
+DlgDocGeneralTab	: "General",
+DlgDocBackTab		: "Fondo",
+DlgDocColorsTab		: "Colores y Márgenes",
+DlgDocMetaTab		: "Meta Información",
+
+DlgDocPageTitle		: "Título de Página",
+DlgDocLangDir		: "Orientación de idioma",
+DlgDocLangDirLTR	: "Izq. a Derecha (LTR)",
+DlgDocLangDirRTL	: "Der. a Izquierda (RTL)",
+DlgDocLangCode		: "Código de Idioma",
+DlgDocCharSet		: "Codif. de Conjunto de Caracteres",
+DlgDocCharSetCE		: "Centro Europeo",
+DlgDocCharSetCT		: "Chino Tradicional (Big5)",
+DlgDocCharSetCR		: "Cirílico",
+DlgDocCharSetGR		: "Griego",
+DlgDocCharSetJP		: "Japonés",
+DlgDocCharSetKR		: "Coreano",
+DlgDocCharSetTR		: "Turco",
+DlgDocCharSetUN		: "Unicode (UTF-8)",
+DlgDocCharSetWE		: "Europeo occidental",
+DlgDocCharSetOther	: "Otra Codificación",
+
+DlgDocDocType		: "Encabezado de Tipo de Documento",
+DlgDocDocTypeOther	: "Otro Encabezado",
+DlgDocIncXHTML		: "Incluir Declaraciones XHTML",
+DlgDocBgColor		: "Color de Fondo",
+DlgDocBgImage		: "URL de Imagen de Fondo",
+DlgDocBgNoScroll	: "Fondo sin rolido",
+DlgDocCText			: "Texto",
+DlgDocCLink			: "Vínculo",
+DlgDocCVisited		: "Vínculo Visitado",
+DlgDocCActive		: "Vínculo Activo",
+DlgDocMargins		: "Márgenes de Página",
+DlgDocMaTop			: "Tope",
+DlgDocMaLeft		: "Izquierda",
+DlgDocMaRight		: "Derecha",
+DlgDocMaBottom		: "Pie",
+DlgDocMeIndex		: "Claves de indexación del Documento (separados por comas)",
+DlgDocMeDescr		: "Descripción del Documento",
+DlgDocMeAuthor		: "Autor",
+DlgDocMeCopy		: "Copyright",
+DlgDocPreview		: "Vista Previa",
+
+// Templates Dialog
+Templates			: "Plantillas",
+DlgTemplatesTitle	: "Contenido de Plantillas",
+DlgTemplatesSelMsg	: "Por favor selecciona la plantilla a abrir en el editor<br>(el contenido actual se perderá):",
+DlgTemplatesLoading	: "Cargando lista de Plantillas. Por favor, aguarde...",
+DlgTemplatesNoTpl	: "(No hay plantillas definidas)",
+DlgTemplatesReplace	: "Reemplazar el contenido actual",
+
+// About Dialog
+DlgAboutAboutTab	: "Acerca de",
+DlgAboutBrowserInfoTab	: "Información de Navegador",
+DlgAboutLicenseTab	: "Licencia",
+DlgAboutVersion		: "versión",
+DlgAboutInfo		: "Para mayor información por favor dirigirse a"
+};


Property changes on: announcement/trunk/src/main/webapp/fckeditor/editor/lang/es.js
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/webapp/fckeditor/editor/lang/et.js
===================================================================
--- announcement/trunk/src/main/webapp/fckeditor/editor/lang/et.js	                        (rev 0)
+++ announcement/trunk/src/main/webapp/fckeditor/editor/lang/et.js	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,515 @@
+/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2008 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * Estonian language file.
+ */
+
+var FCKLang =
+{
+// Language direction : "ltr" (left to right) or "rtl" (right to left).
+Dir					: "ltr",
+
+ToolbarCollapse		: "Voldi tööriistariba",
+ToolbarExpand		: "Laienda tööriistariba",
+
+// Toolbar Items and Context Menu
+Save				: "Salvesta",
+NewPage				: "Uus leht",
+Preview				: "Eelvaade",
+Cut					: "Lõika",
+Copy				: "Kopeeri",
+Paste				: "Kleebi",
+PasteText			: "Kleebi tavalise tekstina",
+PasteWord			: "Kleebi Wordist",
+Print				: "Prindi",
+SelectAll			: "Vali kõik",
+RemoveFormat		: "Eemalda vorming",
+InsertLinkLbl		: "Link",
+InsertLink			: "Sisesta link / Muuda linki",
+RemoveLink			: "Eemalda link",
+Anchor				: "Sisesta ankur / Muuda ankrut",
+AnchorDelete		: "Eemalda ankur",
+InsertImageLbl		: "Pilt",
+InsertImage			: "Sisesta pilt / Muuda pilti",
+InsertFlashLbl		: "Flash",
+InsertFlash			: "Sisesta flash / Muuda flashi",
+InsertTableLbl		: "Tabel",
+InsertTable			: "Sisesta tabel / Muuda tabelit",
+InsertLineLbl		: "Joon",
+InsertLine			: "Sisesta horisontaaljoon",
+InsertSpecialCharLbl: "Erimärgid",
+InsertSpecialChar	: "Sisesta erimärk",
+InsertSmileyLbl		: "Emotikon",
+InsertSmiley		: "Sisesta emotikon",
+About				: "FCKeditor teave",
+Bold				: "Paks",
+Italic				: "Kursiiv",
+Underline			: "Allajoonitud",
+StrikeThrough		: "Läbijoonitud",
+Subscript			: "Allindeks",
+Superscript			: "Ülaindeks",
+LeftJustify			: "Vasakjoondus",
+CenterJustify		: "Keskjoondus",
+RightJustify		: "Paremjoondus",
+BlockJustify		: "Rööpjoondus",
+DecreaseIndent		: "Vähenda taanet",
+IncreaseIndent		: "Suurenda taanet",
+Blockquote			: "Blokktsitaat",
+Undo				: "Võta tagasi",
+Redo				: "Korda toimingut",
+NumberedListLbl		: "Nummerdatud loetelu",
+NumberedList		: "Sisesta/Eemalda nummerdatud loetelu",
+BulletedListLbl		: "Punktiseeritud loetelu",
+BulletedList		: "Sisesta/Eemalda punktiseeritud loetelu",
+ShowTableBorders	: "Näita tabeli jooni",
+ShowDetails			: "Näita üksikasju",
+Style				: "Laad",
+FontFormat			: "Vorming",
+Font				: "Kiri",
+FontSize			: "Suurus",
+TextColor			: "Teksti värv",
+BGColor				: "Tausta värv",
+Source				: "Lähtekood",
+Find				: "Otsi",
+Replace				: "Asenda",
+SpellCheck			: "Kontrolli õigekirja",
+UniversalKeyboard	: "Universaalne klaviatuur",
+PageBreakLbl		: "Lehepiir",
+PageBreak			: "Sisesta lehevahetuskoht",
+
+Form			: "Vorm",
+Checkbox		: "Märkeruut",
+RadioButton		: "Raadionupp",
+TextField		: "Tekstilahter",
+Textarea		: "Tekstiala",
+HiddenField		: "Varjatud lahter",
+Button			: "Nupp",
+SelectionField	: "Valiklahter",
+ImageButton		: "Piltnupp",
+
+FitWindow		: "Maksimeeri redaktori mõõtmed",
+ShowBlocks		: "Näita blokke",
+
+// Context Menu
+EditLink			: "Muuda linki",
+CellCM				: "Lahter",
+RowCM				: "Rida",
+ColumnCM			: "Veerg",
+InsertRowAfter		: "Sisesta rida peale",
+InsertRowBefore		: "Sisesta rida enne",
+DeleteRows			: "Eemalda read",
+InsertColumnAfter	: "Sisesta veerg peale",
+InsertColumnBefore	: "Sisesta veerg enne",
+DeleteColumns		: "Eemalda veerud",
+InsertCellAfter		: "Sisesta lahter peale",
+InsertCellBefore	: "Sisesta lahter enne",
+DeleteCells			: "Eemalda lahtrid",
+MergeCells			: "Ühenda lahtrid",
+MergeRight			: "Ühenda paremale",
+MergeDown			: "Ühenda alla",
+HorizontalSplitCell	: "Poolita lahter horisontaalselt",
+VerticalSplitCell	: "Poolita lahter vertikaalselt",
+TableDelete			: "Kustuta tabel",
+CellProperties		: "Lahtri atribuudid",
+TableProperties		: "Tabeli atribuudid",
+ImageProperties		: "Pildi atribuudid",
+FlashProperties		: "Flash omadused",
+
+AnchorProp			: "Ankru omadused",
+ButtonProp			: "Nupu omadused",
+CheckboxProp		: "Märkeruudu omadused",
+HiddenFieldProp		: "Varjatud lahtri omadused",
+RadioButtonProp		: "Raadionupu omadused",
+ImageButtonProp		: "Piltnupu omadused",
+TextFieldProp		: "Tekstilahtri omadused",
+SelectionFieldProp	: "Valiklahtri omadused",
+TextareaProp		: "Tekstiala omadused",
+FormProp			: "Vormi omadused",
+
+FontFormats			: "Tavaline;Vormindatud;Aadress;Pealkiri 1;Pealkiri 2;Pealkiri 3;Pealkiri 4;Pealkiri 5;Pealkiri 6;Tavaline (DIV)",
+
+// Alerts and Messages
+ProcessingXHTML		: "Töötlen XHTML'i. Palun oota...",
+Done				: "Tehtud",
+PasteWordConfirm	: "Tekst, mida soovid lisada paistab pärinevat Word'ist. Kas soovid seda enne kleepimist puhastada?",
+NotCompatiblePaste	: "See käsk on saadaval ainult Internet Explorer versioon 5.5 või uuema puhul. Kas soovid kleepida ilma puhastamata?",
+UnknownToolbarItem	: "Tundmatu tööriistarea üksus \"%1\"",
+UnknownCommand		: "Tundmatu käsunimi \"%1\"",
+NotImplemented		: "Käsku ei täidetud",
+UnknownToolbarSet	: "Tööriistariba \"%1\" ei eksisteeri",
+NoActiveX			: "Sinu veebisirvija turvalisuse seaded võivad limiteerida mõningaid tekstirdaktori kasutusvõimalusi. Sa peaksid võimaldama valiku \"Run ActiveX controls and plug-ins\" oma veebisirvija seadetes. Muidu võid sa täheldada vigu tekstiredaktori töös ja märgata puuduvaid funktsioone.",
+BrowseServerBlocked : "Ressursside sirvija avamine ebaõnnestus. Võimalda pop-up akende avanemine.",
+DialogBlocked		: "Ei olenud võimalik avada dialoogi akent. Võimalda pop-up akende avanemine.",
+
+// Dialogs
+DlgBtnOK			: "OK",
+DlgBtnCancel		: "Loobu",
+DlgBtnClose			: "Sulge",
+DlgBtnBrowseServer	: "Sirvi serverit",
+DlgAdvancedTag		: "Täpsemalt",
+DlgOpOther			: "<Teine>",
+DlgInfoTab			: "Info",
+DlgAlertUrl			: "Palun sisesta URL",
+
+// General Dialogs Labels
+DlgGenNotSet		: "<määramata>",
+DlgGenId			: "Id",
+DlgGenLangDir		: "Keele suund",
+DlgGenLangDirLtr	: "Vasakult paremale (LTR)",
+DlgGenLangDirRtl	: "Paremalt vasakule (RTL)",
+DlgGenLangCode		: "Keele kood",
+DlgGenAccessKey		: "Juurdepääsu võti",
+DlgGenName			: "Nimi",
+DlgGenTabIndex		: "Tab indeks",
+DlgGenLongDescr		: "Pikk kirjeldus URL",
+DlgGenClass			: "Stiilistiku klassid",
+DlgGenTitle			: "Juhendav tiitel",
+DlgGenContType		: "Juhendava sisu tüüp",
+DlgGenLinkCharset	: "Lingitud ressurssi märgistik",
+DlgGenStyle			: "Laad",
+
+// Image Dialog
+DlgImgTitle			: "Pildi atribuudid",
+DlgImgInfoTab		: "Pildi info",
+DlgImgBtnUpload		: "Saada serverissee",
+DlgImgURL			: "URL",
+DlgImgUpload		: "Lae üles",
+DlgImgAlt			: "Alternatiivne tekst",
+DlgImgWidth			: "Laius",
+DlgImgHeight		: "Kõrgus",
+DlgImgLockRatio		: "Lukusta kuvasuhe",
+DlgBtnResetSize		: "Lähtesta suurus",
+DlgImgBorder		: "Joon",
+DlgImgHSpace		: "H. vaheruum",
+DlgImgVSpace		: "V. vaheruum",
+DlgImgAlign			: "Joondus",
+DlgImgAlignLeft		: "Vasak",
+DlgImgAlignAbsBottom: "Abs alla",
+DlgImgAlignAbsMiddle: "Abs keskele",
+DlgImgAlignBaseline	: "Baasjoonele",
+DlgImgAlignBottom	: "Alla",
+DlgImgAlignMiddle	: "Keskele",
+DlgImgAlignRight	: "Paremale",
+DlgImgAlignTextTop	: "Tekstit üles",
+DlgImgAlignTop		: "Üles",
+DlgImgPreview		: "Eelvaade",
+DlgImgAlertUrl		: "Palun kirjuta pildi URL",
+DlgImgLinkTab		: "Link",
+
+// Flash Dialog
+DlgFlashTitle		: "Flash omadused",
+DlgFlashChkPlay		: "Automaatne start ",
+DlgFlashChkLoop		: "Korduv",
+DlgFlashChkMenu		: "Võimalda flash menüü",
+DlgFlashScale		: "Mastaap",
+DlgFlashScaleAll	: "Näita kõike",
+DlgFlashScaleNoBorder	: "Äärist ei ole",
+DlgFlashScaleFit	: "Täpne sobivus",
+
+// Link Dialog
+DlgLnkWindowTitle	: "Link",
+DlgLnkInfoTab		: "Lingi info",
+DlgLnkTargetTab		: "Sihtkoht",
+
+DlgLnkType			: "Lingi tüüp",
+DlgLnkTypeURL		: "URL",
+DlgLnkTypeAnchor	: "Ankur sellel lehel",
+DlgLnkTypeEMail		: "E-post",
+DlgLnkProto			: "Protokoll",
+DlgLnkProtoOther	: "<muu>",
+DlgLnkURL			: "URL",
+DlgLnkAnchorSel		: "Vali ankur",
+DlgLnkAnchorByName	: "Ankru nime järgi",
+DlgLnkAnchorById	: "Elemendi id järgi",
+DlgLnkNoAnchors		: "(Selles dokumendis ei ole ankruid)",
+DlgLnkEMail			: "E-posti aadress",
+DlgLnkEMailSubject	: "Sõnumi teema",
+DlgLnkEMailBody		: "Sõnumi tekst",
+DlgLnkUpload		: "Lae üles",
+DlgLnkBtnUpload		: "Saada serverisse",
+
+DlgLnkTarget		: "Sihtkoht",
+DlgLnkTargetFrame	: "<raam>",
+DlgLnkTargetPopup	: "<hüpikaken>",
+DlgLnkTargetBlank	: "Uus aken (_blank)",
+DlgLnkTargetParent	: "Esivanem aken (_parent)",
+DlgLnkTargetSelf	: "Sama aken (_self)",
+DlgLnkTargetTop		: "Pealmine aken (_top)",
+DlgLnkTargetFrameName	: "Sihtmärk raami nimi",
+DlgLnkPopWinName	: "Hüpikakna nimi",
+DlgLnkPopWinFeat	: "Hüpikakna omadused",
+DlgLnkPopResize		: "Suurendatav",
+DlgLnkPopLocation	: "Aadressiriba",
+DlgLnkPopMenu		: "Menüüriba",
+DlgLnkPopScroll		: "Kerimisribad",
+DlgLnkPopStatus		: "Olekuriba",
+DlgLnkPopToolbar	: "Tööriistariba",
+DlgLnkPopFullScrn	: "Täisekraan (IE)",
+DlgLnkPopDependent	: "Sõltuv (Netscape)",
+DlgLnkPopWidth		: "Laius",
+DlgLnkPopHeight		: "Kõrgus",
+DlgLnkPopLeft		: "Vasak asukoht",
+DlgLnkPopTop		: "Ülemine asukoht",
+
+DlnLnkMsgNoUrl		: "Palun kirjuta lingi URL",
+DlnLnkMsgNoEMail	: "Palun kirjuta E-Posti aadress",
+DlnLnkMsgNoAnchor	: "Palun vali ankur",
+DlnLnkMsgInvPopName	: "Hüpikakna nimi peab algama alfabeetilise tähega ja ei tohi sisaldada tühikuid",
+
+// Color Dialog
+DlgColorTitle		: "Vali värv",
+DlgColorBtnClear	: "Tühjenda",
+DlgColorHighlight	: "Märgi",
+DlgColorSelected	: "Valitud",
+
+// Smiley Dialog
+DlgSmileyTitle		: "Sisesta emotikon",
+
+// Special Character Dialog
+DlgSpecialCharTitle	: "Vali erimärk",
+
+// Table Dialog
+DlgTableTitle		: "Tabeli atribuudid",
+DlgTableRows		: "Read",
+DlgTableColumns		: "Veerud",
+DlgTableBorder		: "Joone suurus",
+DlgTableAlign		: "Joondus",
+DlgTableAlignNotSet	: "<Määramata>",
+DlgTableAlignLeft	: "Vasak",
+DlgTableAlignCenter	: "Kesk",
+DlgTableAlignRight	: "Parem",
+DlgTableWidth		: "Laius",
+DlgTableWidthPx		: "pikslit",
+DlgTableWidthPc		: "protsenti",
+DlgTableHeight		: "Kõrgus",
+DlgTableCellSpace	: "Lahtri vahe",
+DlgTableCellPad		: "Lahtri täidis",
+DlgTableCaption		: "Tabeli tiitel",
+DlgTableSummary		: "Kokkuvõte",
+
+// Table Cell Dialog
+DlgCellTitle		: "Lahtri atribuudid",
+DlgCellWidth		: "Laius",
+DlgCellWidthPx		: "pikslit",
+DlgCellWidthPc		: "protsenti",
+DlgCellHeight		: "Kõrgus",
+DlgCellWordWrap		: "Sõna ülekanne",
+DlgCellWordWrapNotSet	: "<Määramata>",
+DlgCellWordWrapYes	: "Jah",
+DlgCellWordWrapNo	: "Ei",
+DlgCellHorAlign		: "Horisontaaljoondus",
+DlgCellHorAlignNotSet	: "<Määramata>",
+DlgCellHorAlignLeft	: "Vasak",
+DlgCellHorAlignCenter	: "Kesk",
+DlgCellHorAlignRight: "Parem",
+DlgCellVerAlign		: "Vertikaaljoondus",
+DlgCellVerAlignNotSet	: "<Määramata>",
+DlgCellVerAlignTop	: "Üles",
+DlgCellVerAlignMiddle	: "Keskele",
+DlgCellVerAlignBottom	: "Alla",
+DlgCellVerAlignBaseline	: "Baasjoonele",
+DlgCellRowSpan		: "Reaulatus",
+DlgCellCollSpan		: "Veeruulatus",
+DlgCellBackColor	: "Tausta värv",
+DlgCellBorderColor	: "Joone värv",
+DlgCellBtnSelect	: "Vali...",
+
+// Find and Replace Dialog
+DlgFindAndReplaceTitle	: "Otsi ja asenda",
+
+// Find Dialog
+DlgFindTitle		: "Otsi",
+DlgFindFindBtn		: "Otsi",
+DlgFindNotFoundMsg	: "Valitud teksti ei leitud.",
+
+// Replace Dialog
+DlgReplaceTitle			: "Asenda",
+DlgReplaceFindLbl		: "Leia mida:",
+DlgReplaceReplaceLbl	: "Asenda millega:",
+DlgReplaceCaseChk		: "Erista suur- ja väiketähti",
+DlgReplaceReplaceBtn	: "Asenda",
+DlgReplaceReplAllBtn	: "Asenda kõik",
+DlgReplaceWordChk		: "Otsi terviklike sõnu",
+
+// Paste Operations / Dialog
+PasteErrorCut	: "Sinu veebisirvija turvaseaded ei luba redaktoril automaatselt lõigata. Palun kasutage selleks klaviatuuri klahvikombinatsiooni (Ctrl+X).",
+PasteErrorCopy	: "Sinu veebisirvija turvaseaded ei luba redaktoril automaatselt kopeerida. Palun kasutage selleks klaviatuuri klahvikombinatsiooni (Ctrl+C).",
+
+PasteAsText		: "Kleebi tavalise tekstina",
+PasteFromWord	: "Kleebi Wordist",
+
+DlgPasteMsg2	: "Palun kleebi järgnevasse kasti kasutades klaviatuuri klahvikombinatsiooni (<STRONG>Ctrl+V</STRONG>) ja vajuta seejärel <STRONG>OK</STRONG>.",
+DlgPasteSec		: "Sinu veebisirvija turvaseadete tõttu, ei oma redaktor otsest ligipääsu lõikelaua andmetele. Sa pead kleepima need uuesti siia aknasse.",
+DlgPasteIgnoreFont		: "Ignoreeri kirja definitsioone",
+DlgPasteRemoveStyles	: "Eemalda stiilide definitsioonid",
+
+// Color Picker
+ColorAutomatic	: "Automaatne",
+ColorMoreColors	: "Rohkem värve...",
+
+// Document Properties
+DocProps		: "Dokumendi omadused",
+
+// Anchor Dialog
+DlgAnchorTitle		: "Ankru omadused",
+DlgAnchorName		: "Ankru nimi",
+DlgAnchorErrorName	: "Palun sisest ankru nimi",
+
+// Speller Pages Dialog
+DlgSpellNotInDic		: "Puudub sõnastikust",
+DlgSpellChangeTo		: "Muuda",
+DlgSpellBtnIgnore		: "Ignoreeri",
+DlgSpellBtnIgnoreAll	: "Ignoreeri kõiki",
+DlgSpellBtnReplace		: "Asenda",
+DlgSpellBtnReplaceAll	: "Asenda kõik",
+DlgSpellBtnUndo			: "Võta tagasi",
+DlgSpellNoSuggestions	: "- Soovitused puuduvad -",
+DlgSpellProgress		: "Toimub õigekirja kontroll...",
+DlgSpellNoMispell		: "Õigekirja kontroll sooritatud: õigekirjuvigu ei leitud",
+DlgSpellNoChanges		: "Õigekirja kontroll sooritatud: ühtegi sõna ei muudetud",
+DlgSpellOneChange		: "Õigekirja kontroll sooritatud: üks sõna muudeti",
+DlgSpellManyChanges		: "Õigekirja kontroll sooritatud: %1 sõna muudetud",
+
+IeSpellDownload			: "Õigekirja kontrollija ei ole installeeritud. Soovid sa selle alla laadida?",
+
+// Button Dialog
+DlgButtonText		: "Tekst (väärtus)",
+DlgButtonType		: "Tüüp",
+DlgButtonTypeBtn	: "Nupp",
+DlgButtonTypeSbm	: "Saada",
+DlgButtonTypeRst	: "Lähtesta",
+
+// Checkbox and Radio Button Dialogs
+DlgCheckboxName		: "Nimi",
+DlgCheckboxValue	: "Väärtus",
+DlgCheckboxSelected	: "Valitud",
+
+// Form Dialog
+DlgFormName		: "Nimi",
+DlgFormAction	: "Toiming",
+DlgFormMethod	: "Meetod",
+
+// Select Field Dialog
+DlgSelectName		: "Nimi",
+DlgSelectValue		: "Väärtus",
+DlgSelectSize		: "Suurus",
+DlgSelectLines		: "ridu",
+DlgSelectChkMulti	: "Võimalda mitu valikut",
+DlgSelectOpAvail	: "Võimalikud valikud",
+DlgSelectOpText		: "Tekst",
+DlgSelectOpValue	: "Väärtus",
+DlgSelectBtnAdd		: "Lisa",
+DlgSelectBtnModify	: "Muuda",
+DlgSelectBtnUp		: "Üles",
+DlgSelectBtnDown	: "Alla",
+DlgSelectBtnSetValue : "Sea valitud olekuna",
+DlgSelectBtnDelete	: "Kustuta",
+
+// Textarea Dialog
+DlgTextareaName	: "Nimi",
+DlgTextareaCols	: "Veerge",
+DlgTextareaRows	: "Ridu",
+
+// Text Field Dialog
+DlgTextName			: "Nimi",
+DlgTextValue		: "Väärtus",
+DlgTextCharWidth	: "Laius (tähemärkides)",
+DlgTextMaxChars		: "Maksimaalselt tähemärke",
+DlgTextType			: "Tüüp",
+DlgTextTypeText		: "Tekst",
+DlgTextTypePass		: "Parool",
+
+// Hidden Field Dialog
+DlgHiddenName	: "Nimi",
+DlgHiddenValue	: "Väärtus",
+
+// Bulleted List Dialog
+BulletedListProp	: "Täpitud loetelu omadused",
+NumberedListProp	: "Nummerdatud loetelu omadused",
+DlgLstStart			: "Alusta",
+DlgLstType			: "Tüüp",
+DlgLstTypeCircle	: "Ring",
+DlgLstTypeDisc		: "Ketas",
+DlgLstTypeSquare	: "Ruut",
+DlgLstTypeNumbers	: "Numbrid (1, 2, 3)",
+DlgLstTypeLCase		: "Väiketähed (a, b, c)",
+DlgLstTypeUCase		: "Suurtähed (A, B, C)",
+DlgLstTypeSRoman	: "Väiksed Rooma numbrid (i, ii, iii)",
+DlgLstTypeLRoman	: "Suured Rooma numbrid (I, II, III)",
+
+// Document Properties Dialog
+DlgDocGeneralTab	: "Üldine",
+DlgDocBackTab		: "Taust",
+DlgDocColorsTab		: "Värvid ja veerised",
+DlgDocMetaTab		: "Meta andmed",
+
+DlgDocPageTitle		: "Lehekülje tiitel",
+DlgDocLangDir		: "Kirja suund",
+DlgDocLangDirLTR	: "Vasakult paremale (LTR)",
+DlgDocLangDirRTL	: "Paremalt vasakule (RTL)",
+DlgDocLangCode		: "Keele kood",
+DlgDocCharSet		: "Märgistiku kodeering",
+DlgDocCharSetCE		: "Kesk-Euroopa",
+DlgDocCharSetCT		: "Hiina traditsiooniline (Big5)",
+DlgDocCharSetCR		: "Kirillisa",
+DlgDocCharSetGR		: "Kreeka",
+DlgDocCharSetJP		: "Jaapani",
+DlgDocCharSetKR		: "Korea",
+DlgDocCharSetTR		: "Türgi",
+DlgDocCharSetUN		: "Unicode (UTF-8)",
+DlgDocCharSetWE		: "Lääne-Euroopa",
+DlgDocCharSetOther	: "Ülejäänud märgistike kodeeringud",
+
+DlgDocDocType		: "Dokumendi tüüppäis",
+DlgDocDocTypeOther	: "Teised dokumendi tüüppäised",
+DlgDocIncXHTML		: "Arva kaasa XHTML deklaratsioonid",
+DlgDocBgColor		: "Taustavärv",
+DlgDocBgImage		: "Taustapildi URL",
+DlgDocBgNoScroll	: "Mittekeritav tagataust",
+DlgDocCText			: "Tekst",
+DlgDocCLink			: "Link",
+DlgDocCVisited		: "Külastatud link",
+DlgDocCActive		: "Aktiivne link",
+DlgDocMargins		: "Lehekülje äärised",
+DlgDocMaTop			: "Ülaserv",
+DlgDocMaLeft		: "Vasakserv",
+DlgDocMaRight		: "Paremserv",
+DlgDocMaBottom		: "Alaserv",
+DlgDocMeIndex		: "Dokumendi võtmesõnad (eraldatud komadega)",
+DlgDocMeDescr		: "Dokumendi kirjeldus",
+DlgDocMeAuthor		: "Autor",
+DlgDocMeCopy		: "Autoriõigus",
+DlgDocPreview		: "Eelvaade",
+
+// Templates Dialog
+Templates			: "Šabloon",
+DlgTemplatesTitle	: "Sisu šabloonid",
+DlgTemplatesSelMsg	: "Palun vali šabloon, et avada see redaktoris<br />(praegune sisu läheb kaotsi):",
+DlgTemplatesLoading	: "Laen šabloonide nimekirja. Palun oota...",
+DlgTemplatesNoTpl	: "(Ühtegi šablooni ei ole defineeritud)",
+DlgTemplatesReplace	: "Asenda tegelik sisu",
+
+// About Dialog
+DlgAboutAboutTab	: "Teave",
+DlgAboutBrowserInfoTab	: "Veebisirvija info",
+DlgAboutLicenseTab	: "Litsents",
+DlgAboutVersion		: "versioon",
+DlgAboutInfo		: "Täpsema info saamiseks mine"
+};


Property changes on: announcement/trunk/src/main/webapp/fckeditor/editor/lang/et.js
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/webapp/fckeditor/editor/lang/eu.js
===================================================================
--- announcement/trunk/src/main/webapp/fckeditor/editor/lang/eu.js	                        (rev 0)
+++ announcement/trunk/src/main/webapp/fckeditor/editor/lang/eu.js	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,516 @@
+/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2008 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * Basque language file.
+ * Euskara hizkuntza fitxategia.
+ */
+
+var FCKLang =
+{
+// Language direction : "ltr" (left to right) or "rtl" (right to left).
+Dir					: "ltr",
+
+ToolbarCollapse		: "Estutu Tresna Barra",
+ToolbarExpand		: "Hedatu Tresna Barra",
+
+// Toolbar Items and Context Menu
+Save				: "Gorde",
+NewPage				: "Orrialde Berria",
+Preview				: "Aurrebista",
+Cut					: "Ebaki",
+Copy				: "Kopiatu",
+Paste				: "Itsatsi",
+PasteText			: "Itsatsi testu bezala",
+PasteWord			: "Itsatsi Word-etik",
+Print				: "Inprimatu",
+SelectAll			: "Hautatu dena",
+RemoveFormat		: "Kendu Formatoa",
+InsertLinkLbl		: "Esteka",
+InsertLink			: "Txertatu/Editatu Esteka",
+RemoveLink			: "Kendu Esteka",
+Anchor				: "Aingura",
+AnchorDelete		: "Ezabatu Aingura",
+InsertImageLbl		: "Irudia",
+InsertImage			: "Txertatu/Editatu Irudia",
+InsertFlashLbl		: "Flasha",
+InsertFlash			: "Txertatu/Editatu Flasha",
+InsertTableLbl		: "Taula",
+InsertTable			: "Txertatu/Editatu Taula",
+InsertLineLbl		: "Lerroa",
+InsertLine			: "Txertatu Marra Horizontala",
+InsertSpecialCharLbl: "Karaktere Berezia",
+InsertSpecialChar	: "Txertatu Karaktere Berezia",
+InsertSmileyLbl		: "Aurpegierak",
+InsertSmiley		: "Txertatu Aurpegierak",
+About				: "FCKeditor-ri buruz",
+Bold				: "Lodia",
+Italic				: "Etzana",
+Underline			: "Azpimarratu",
+StrikeThrough		: "Marratua",
+Subscript			: "Azpi-indize",
+Superscript			: "Goi-indize",
+LeftJustify			: "Lerrokatu Ezkerrean",
+CenterJustify		: "Lerrokatu Erdian",
+RightJustify		: "Lerrokatu Eskuman",
+BlockJustify		: "Justifikatu",
+DecreaseIndent		: "Txikitu Koska",
+IncreaseIndent		: "Handitu Koska",
+Blockquote			: "Aipamen blokea",
+Undo				: "Desegin",
+Redo				: "Berregin",
+NumberedListLbl		: "Zenbakidun Zerrenda",
+NumberedList		: "Txertatu/Kendu Zenbakidun zerrenda",
+BulletedListLbl		: "Buletdun Zerrenda",
+BulletedList		: "Txertatu/Kendu Buletdun zerrenda",
+ShowTableBorders	: "Erakutsi Taularen Ertzak",
+ShowDetails			: "Erakutsi Xehetasunak",
+Style				: "Estiloa",
+FontFormat			: "Formatoa",
+Font				: "Letra-tipoa",
+FontSize			: "Tamaina",
+TextColor			: "Testu Kolorea",
+BGColor				: "Atzeko kolorea",
+Source				: "HTML Iturburua",
+Find				: "Bilatu",
+Replace				: "Ordezkatu",
+SpellCheck			: "Ortografia",
+UniversalKeyboard	: "Teklatu Unibertsala",
+PageBreakLbl		: "Orrialde-jauzia",
+PageBreak			: "Txertatu Orrialde-jauzia",
+
+Form			: "Formularioa",
+Checkbox		: "Kontrol-laukia",
+RadioButton		: "Aukera-botoia",
+TextField		: "Testu Eremua",
+Textarea		: "Testu-area",
+HiddenField		: "Ezkutuko Eremua",
+Button			: "Botoia",
+SelectionField	: "Hautespen Eremua",
+ImageButton		: "Irudi Botoia",
+
+FitWindow		: "Maximizatu editorearen tamaina",
+ShowBlocks		: "Blokeak erakutsi",
+
+// Context Menu
+EditLink			: "Aldatu Esteka",
+CellCM				: "Gelaxka",
+RowCM				: "Errenkada",
+ColumnCM			: "Zutabea",
+InsertRowAfter		: "Txertatu Lerroa Ostean",
+InsertRowBefore		: "Txertatu Lerroa Aurretik",
+DeleteRows			: "Ezabatu Errenkadak",
+InsertColumnAfter	: "Txertatu Zutabea Ostean",
+InsertColumnBefore	: "Txertatu Zutabea Aurretik",
+DeleteColumns		: "Ezabatu Zutabeak",
+InsertCellAfter		: "Txertatu Gelaxka Ostean",
+InsertCellBefore	: "Txertatu Gelaxka Aurretik",
+DeleteCells			: "Kendu Gelaxkak",
+MergeCells			: "Batu Gelaxkak",
+MergeRight			: "Elkartu Eskumara",
+MergeDown			: "Elkartu Behera",
+HorizontalSplitCell	: "Banatu Gelaxkak Horizontalki",
+VerticalSplitCell	: "Banatu Gelaxkak Bertikalki",
+TableDelete			: "Ezabatu Taula",
+CellProperties		: "Gelaxkaren Ezaugarriak",
+TableProperties		: "Taularen Ezaugarriak",
+ImageProperties		: "Irudiaren Ezaugarriak",
+FlashProperties		: "Flasharen Ezaugarriak",
+
+AnchorProp			: "Ainguraren Ezaugarriak",
+ButtonProp			: "Botoiaren Ezaugarriak",
+CheckboxProp		: "Kontrol-laukiko Ezaugarriak",
+HiddenFieldProp		: "Ezkutuko Eremuaren Ezaugarriak",
+RadioButtonProp		: "Aukera-botoiaren Ezaugarriak",
+ImageButtonProp		: "Irudi Botoiaren Ezaugarriak",
+TextFieldProp		: "Testu Eremuaren Ezaugarriak",
+SelectionFieldProp	: "Hautespen Eremuaren Ezaugarriak",
+TextareaProp		: "Testu-arearen Ezaugarriak",
+FormProp			: "Formularioaren Ezaugarriak",
+
+FontFormats			: "Arrunta;Formateatua;Helbidea;Izenburua 1;Izenburua 2;Izenburua 3;Izenburua 4;Izenburua 5;Izenburua 6;Paragrafoa (DIV)",
+
+// Alerts and Messages
+ProcessingXHTML		: "XHTML Prozesatzen. Itxaron mesedez...",
+Done				: "Eginda",
+PasteWordConfirm	: "Itsatsi nahi duzun textua Wordetik hartua dela dirudi. Itsatsi baino lehen garbitu nahi duzu?",
+NotCompatiblePaste	: "Komando hau Internet Explorer 5.5 bertsiorako edo ondorengoentzako erabilgarria dago. Garbitu gabe itsatsi nahi duzu?",
+UnknownToolbarItem	: "Ataza barrako elementu ezezaguna \"%1\"",
+UnknownCommand		: "Komando izen ezezaguna \"%1\"",
+NotImplemented		: "Komando ez inplementatua",
+UnknownToolbarSet	: "Ataza barra \"%1\" taldea ez da existitzen",
+NoActiveX			: "Zure nabigatzailearen segustasun hobespenak editore honen zenbait ezaugarri mugatu ditzake. \"ActiveX kontrolak eta plug-inak\" aktibatu beharko zenituzke, bestela erroreak eta ezaugarrietan mugak egon daitezke.",
+BrowseServerBlocked : "Baliabideen arakatzailea ezin da ireki. Ziurtatu popup blokeatzaileak desgaituta dituzula.",
+DialogBlocked		: "Ezin da elkarrizketa-leihoa ireki. Ziurtatu popup blokeatzaileak desgaituta dituzula.",
+
+// Dialogs
+DlgBtnOK			: "Ados",
+DlgBtnCancel		: "Utzi",
+DlgBtnClose			: "Itxi",
+DlgBtnBrowseServer	: "Zerbitzaria arakatu",
+DlgAdvancedTag		: "Aurreratua",
+DlgOpOther			: "<Bestelakoak>",
+DlgInfoTab			: "Informazioa",
+DlgAlertUrl			: "Mesedez URLa idatzi ezazu",
+
+// General Dialogs Labels
+DlgGenNotSet		: "<Ezarri gabe>",
+DlgGenId			: "Id",
+DlgGenLangDir		: "Hizkuntzaren Norabidea",
+DlgGenLangDirLtr	: "Ezkerretik Eskumara(LTR)",
+DlgGenLangDirRtl	: "Eskumatik Ezkerrera (RTL)",
+DlgGenLangCode		: "Hizkuntza Kodea",
+DlgGenAccessKey		: "Sarbide-gakoa",
+DlgGenName			: "Izena",
+DlgGenTabIndex		: "Tabulazio Indizea",
+DlgGenLongDescr		: "URL Deskribapen Luzea",
+DlgGenClass			: "Estilo-orriko Klaseak",
+DlgGenTitle			: "Izenburua",
+DlgGenContType		: "Eduki Mota (Content Type)",
+DlgGenLinkCharset	: "Estekatutako Karaktere Multzoa",
+DlgGenStyle			: "Estiloa",
+
+// Image Dialog
+DlgImgTitle			: "Irudi Ezaugarriak",
+DlgImgInfoTab		: "Irudi informazioa",
+DlgImgBtnUpload		: "Zerbitzarira bidalia",
+DlgImgURL			: "URL",
+DlgImgUpload		: "Gora Kargatu",
+DlgImgAlt			: "Textu Alternatiboa",
+DlgImgWidth			: "Zabalera",
+DlgImgHeight		: "Altuera",
+DlgImgLockRatio		: "Erlazioa Blokeatu",
+DlgBtnResetSize		: "Tamaina Berrezarri",
+DlgImgBorder		: "Ertza",
+DlgImgHSpace		: "HSpace",
+DlgImgVSpace		: "VSpace",
+DlgImgAlign			: "Lerrokatu",
+DlgImgAlignLeft		: "Ezkerrera",
+DlgImgAlignAbsBottom: "Abs Behean",
+DlgImgAlignAbsMiddle: "Abs Erdian",
+DlgImgAlignBaseline	: "Oinan",
+DlgImgAlignBottom	: "Behean",
+DlgImgAlignMiddle	: "Erdian",
+DlgImgAlignRight	: "Eskuman",
+DlgImgAlignTextTop	: "Testua Goian",
+DlgImgAlignTop		: "Goian",
+DlgImgPreview		: "Aurrebista",
+DlgImgAlertUrl		: "Mesedez Irudiaren URLa idatzi",
+DlgImgLinkTab		: "Esteka",
+
+// Flash Dialog
+DlgFlashTitle		: "Flasharen Ezaugarriak",
+DlgFlashChkPlay		: "Automatikoki Erreproduzitu",
+DlgFlashChkLoop		: "Begizta",
+DlgFlashChkMenu		: "Flasharen Menua Gaitu",
+DlgFlashScale		: "Eskalatu",
+DlgFlashScaleAll	: "Dena erakutsi",
+DlgFlashScaleNoBorder	: "Ertzarik gabe",
+DlgFlashScaleFit	: "Doitu",
+
+// Link Dialog
+DlgLnkWindowTitle	: "Esteka",
+DlgLnkInfoTab		: "Estekaren Informazioa",
+DlgLnkTargetTab		: "Helburua",
+
+DlgLnkType			: "Esteka Mota",
+DlgLnkTypeURL		: "URL",
+DlgLnkTypeAnchor	: "Aingura horrialde honentan",
+DlgLnkTypeEMail		: "ePosta",
+DlgLnkProto			: "Protokoloa",
+DlgLnkProtoOther	: "<Beste batzuk>",
+DlgLnkURL			: "URL",
+DlgLnkAnchorSel		: "Aingura bat hautatu",
+DlgLnkAnchorByName	: "Aingura izenagatik",
+DlgLnkAnchorById	: "Elementuaren ID-gatik",
+DlgLnkNoAnchors		: "(Ez daude aingurak eskuragarri dokumentuan)",
+DlgLnkEMail			: "ePosta Helbidea",
+DlgLnkEMailSubject	: "Mezuaren Gaia",
+DlgLnkEMailBody		: "Mezuaren Gorputza",
+DlgLnkUpload		: "Gora kargatu",
+DlgLnkBtnUpload		: "Zerbitzarira bidali",
+
+DlgLnkTarget		: "Target (Helburua)",
+DlgLnkTargetFrame	: "<marko>",
+DlgLnkTargetPopup	: "<popup lehioa>",
+DlgLnkTargetBlank	: "Lehio Berria (_blank)",
+DlgLnkTargetParent	: "Lehio Gurasoa (_parent)",
+DlgLnkTargetSelf	: "Lehio Berdina (_self)",
+DlgLnkTargetTop		: "Goiko Lehioa (_top)",
+DlgLnkTargetFrameName	: "Marko Helburuaren Izena",
+DlgLnkPopWinName	: "Popup Lehioaren Izena",
+DlgLnkPopWinFeat	: "Popup Lehioaren Ezaugarriak",
+DlgLnkPopResize		: "Tamaina Aldakorra",
+DlgLnkPopLocation	: "Kokaleku Barra",
+DlgLnkPopMenu		: "Menu Barra",
+DlgLnkPopScroll		: "Korritze Barrak",
+DlgLnkPopStatus		: "Egoera Barra",
+DlgLnkPopToolbar	: "Tresna Barra",
+DlgLnkPopFullScrn	: "Pantaila Osoa (IE)",
+DlgLnkPopDependent	: "Menpekoa (Netscape)",
+DlgLnkPopWidth		: "Zabalera",
+DlgLnkPopHeight		: "Altuera",
+DlgLnkPopLeft		: "Ezkerreko  Posizioa",
+DlgLnkPopTop		: "Goiko Posizioa",
+
+DlnLnkMsgNoUrl		: "Mesedez URL esteka idatzi",
+DlnLnkMsgNoEMail	: "Mesedez ePosta helbidea idatzi",
+DlnLnkMsgNoAnchor	: "Mesedez aingura bat aukeratu",
+DlnLnkMsgInvPopName	: "Popup lehioaren izenak karaktere alfabetiko batekin hasi behar du eta eta ezin du zuriunerik izan",
+
+// Color Dialog
+DlgColorTitle		: "Kolore Aukeraketa",
+DlgColorBtnClear	: "Garbitu",
+DlgColorHighlight	: "Nabarmendu",
+DlgColorSelected	: "Aukeratuta",
+
+// Smiley Dialog
+DlgSmileyTitle		: "Aurpegiera Sartu",
+
+// Special Character Dialog
+DlgSpecialCharTitle	: "Karaktere Berezia Aukeratu",
+
+// Table Dialog
+DlgTableTitle		: "Taularen Ezaugarriak",
+DlgTableRows		: "Lerroak",
+DlgTableColumns		: "Zutabeak",
+DlgTableBorder		: "Ertzaren Zabalera",
+DlgTableAlign		: "Lerrokatu",
+DlgTableAlignNotSet	: "<Ezarri gabe>",
+DlgTableAlignLeft	: "Ezkerrean",
+DlgTableAlignCenter	: "Erdian",
+DlgTableAlignRight	: "Eskuman",
+DlgTableWidth		: "Zabalera",
+DlgTableWidthPx		: "pixel",
+DlgTableWidthPc		: "ehuneko",
+DlgTableHeight		: "Altuera",
+DlgTableCellSpace	: "Gelaxka arteko tartea",
+DlgTableCellPad		: "Gelaxken betegarria",
+DlgTableCaption		: "Epigrafea",
+DlgTableSummary		: "Laburpena",
+
+// Table Cell Dialog
+DlgCellTitle		: "Gelaxken Ezaugarriak",
+DlgCellWidth		: "Zabalera",
+DlgCellWidthPx		: "pixel",
+DlgCellWidthPc		: "ehuneko",
+DlgCellHeight		: "Altuera",
+DlgCellWordWrap		: "Itzulbira",
+DlgCellWordWrapNotSet	: "<Ezarri gabe>",
+DlgCellWordWrapYes	: "Bai",
+DlgCellWordWrapNo	: "Ez",
+DlgCellHorAlign		: "Horizontal Alignment",
+DlgCellHorAlignNotSet	: "<Ezarri gabe>",
+DlgCellHorAlignLeft	: "Ezkerrean",
+DlgCellHorAlignCenter	: "Erdian",
+DlgCellHorAlignRight: "Eskuman",
+DlgCellVerAlign		: "Lerrokatu Bertikalki",
+DlgCellVerAlignNotSet	: "<Ezarri gabe>",
+DlgCellVerAlignTop	: "Goian",
+DlgCellVerAlignMiddle	: "Erdian",
+DlgCellVerAlignBottom	: "Behean",
+DlgCellVerAlignBaseline	: "Oinan",
+DlgCellRowSpan		: "Lerroak Hedatu",
+DlgCellCollSpan		: "Zutabeak Hedatu",
+DlgCellBackColor	: "Atzeko Kolorea",
+DlgCellBorderColor	: "Ertzako Kolorea",
+DlgCellBtnSelect	: "Aukertau...",
+
+// Find and Replace Dialog
+DlgFindAndReplaceTitle	: "Bilatu eta Ordeztu",
+
+// Find Dialog
+DlgFindTitle		: "Bilaketa",
+DlgFindFindBtn		: "Bilatu",
+DlgFindNotFoundMsg	: "Idatzitako testua ez da topatu.",
+
+// Replace Dialog
+DlgReplaceTitle			: "Ordeztu",
+DlgReplaceFindLbl		: "Zer bilatu:",
+DlgReplaceReplaceLbl	: "Zerekin ordeztu:",
+DlgReplaceCaseChk		: "Maiuskula/minuskula",
+DlgReplaceReplaceBtn	: "Ordeztu",
+DlgReplaceReplAllBtn	: "Ordeztu Guztiak",
+DlgReplaceWordChk		: "Esaldi osoa bilatu",
+
+// Paste Operations / Dialog
+PasteErrorCut	: "Zure web nabigatzailearen segurtasun ezarpenak testuak automatikoki moztea ez dute baimentzen. Mesedez teklatua erabili ezazu (Ctrl+X).",
+PasteErrorCopy	: "Zure web nabigatzailearen segurtasun ezarpenak testuak automatikoki kopiatzea ez dute baimentzen. Mesedez teklatua erabili ezazu (Ctrl+C).",
+
+PasteAsText		: "Testu Arrunta bezala Itsatsi",
+PasteFromWord	: "Word-etik itsatsi",
+
+DlgPasteMsg2	: "Mesedez teklatua erabilita (<STRONG>Ctrl+V</STRONG>) ondorego eremuan testua itsatsi eta <STRONG>OK</STRONG> sakatu.",
+DlgPasteSec		: "Nabigatzailearen segurtasun ezarpenak direla eta, editoreak ezin du arbela zuzenean erabili. Leiho honetan berriro itsatsi behar duzu.",
+DlgPasteIgnoreFont		: "Letra Motaren definizioa ezikusi",
+DlgPasteRemoveStyles	: "Estilo definizioak kendu",
+
+// Color Picker
+ColorAutomatic	: "Automatikoa",
+ColorMoreColors	: "Kolore gehiago...",
+
+// Document Properties
+DocProps		: "Dokumentuaren Ezarpenak",
+
+// Anchor Dialog
+DlgAnchorTitle		: "Ainguraren Ezaugarriak",
+DlgAnchorName		: "Ainguraren Izena",
+DlgAnchorErrorName	: "Idatzi ainguraren izena",
+
+// Speller Pages Dialog
+DlgSpellNotInDic		: "Ez dago hiztegian",
+DlgSpellChangeTo		: "Honekin ordezkatu",
+DlgSpellBtnIgnore		: "Ezikusi",
+DlgSpellBtnIgnoreAll	: "Denak Ezikusi",
+DlgSpellBtnReplace		: "Ordezkatu",
+DlgSpellBtnReplaceAll	: "Denak Ordezkatu",
+DlgSpellBtnUndo			: "Desegin",
+DlgSpellNoSuggestions	: "- Iradokizunik ez -",
+DlgSpellProgress		: "Zuzenketa ortografikoa martxan...",
+DlgSpellNoMispell		: "Zuzenketa ortografikoa bukatuta: Akatsik ez",
+DlgSpellNoChanges		: "Zuzenketa ortografikoa bukatuta: Ez da ezer aldatu",
+DlgSpellOneChange		: "Zuzenketa ortografikoa bukatuta: Hitz bat aldatu da",
+DlgSpellManyChanges		: "Zuzenketa ortografikoa bukatuta: %1 hitz aldatu dira",
+
+IeSpellDownload			: "Zuzentzaile ortografikoa ez dago instalatuta. Deskargatu nahi duzu?",
+
+// Button Dialog
+DlgButtonText		: "Testua (Balorea)",
+DlgButtonType		: "Mota",
+DlgButtonTypeBtn	: "Botoia",
+DlgButtonTypeSbm	: "Bidali",
+DlgButtonTypeRst	: "Garbitu",
+
+// Checkbox and Radio Button Dialogs
+DlgCheckboxName		: "Izena",
+DlgCheckboxValue	: "Balorea",
+DlgCheckboxSelected	: "Hautatuta",
+
+// Form Dialog
+DlgFormName		: "Izena",
+DlgFormAction	: "Ekintza",
+DlgFormMethod	: "Method",
+
+// Select Field Dialog
+DlgSelectName		: "Izena",
+DlgSelectValue		: "Balorea",
+DlgSelectSize		: "Tamaina",
+DlgSelectLines		: "lerro kopurura",
+DlgSelectChkMulti	: "Hautaketa anitzak baimendu",
+DlgSelectOpAvail	: "Aukera Eskuragarriak",
+DlgSelectOpText		: "Testua",
+DlgSelectOpValue	: "Balorea",
+DlgSelectBtnAdd		: "Gehitu",
+DlgSelectBtnModify	: "Aldatu",
+DlgSelectBtnUp		: "Gora",
+DlgSelectBtnDown	: "Behera",
+DlgSelectBtnSetValue : "Aukeratutako balorea ezarri",
+DlgSelectBtnDelete	: "Ezabatu",
+
+// Textarea Dialog
+DlgTextareaName	: "Izena",
+DlgTextareaCols	: "Zutabeak",
+DlgTextareaRows	: "Lerroak",
+
+// Text Field Dialog
+DlgTextName			: "Izena",
+DlgTextValue		: "Balorea",
+DlgTextCharWidth	: "Zabalera",
+DlgTextMaxChars		: "Zenbat karaktere gehienez",
+DlgTextType			: "Mota",
+DlgTextTypeText		: "Testua",
+DlgTextTypePass		: "Pasahitza",
+
+// Hidden Field Dialog
+DlgHiddenName	: "Izena",
+DlgHiddenValue	: "Balorea",
+
+// Bulleted List Dialog
+BulletedListProp	: "Buletdun Zerrendaren Ezarpenak",
+NumberedListProp	: "Zenbakidun Zerrendaren Ezarpenak",
+DlgLstStart			: "Hasiera",
+DlgLstType			: "Mota",
+DlgLstTypeCircle	: "Zirkulua",
+DlgLstTypeDisc		: "Diskoa",
+DlgLstTypeSquare	: "Karratua",
+DlgLstTypeNumbers	: "Zenbakiak (1, 2, 3)",
+DlgLstTypeLCase		: "Letra xeheak (a, b, c)",
+DlgLstTypeUCase		: "Letra larriak (A, B, C)",
+DlgLstTypeSRoman	: "Erromatar zenbaki zeheak (i, ii, iii)",
+DlgLstTypeLRoman	: "Erromatar zenbaki larriak (I, II, III)",
+
+// Document Properties Dialog
+DlgDocGeneralTab	: "Orokorra",
+DlgDocBackTab		: "Atzekaldea",
+DlgDocColorsTab		: "Koloreak eta Marjinak",
+DlgDocMetaTab		: "Meta Informazioa",
+
+DlgDocPageTitle		: "Orriaren Izenburua",
+DlgDocLangDir		: "Hizkuntzaren Norabidea",
+DlgDocLangDirLTR	: "Ezkerretik eskumara (LTR)",
+DlgDocLangDirRTL	: "Eskumatik ezkerrera (RTL)",
+DlgDocLangCode		: "Hizkuntzaren Kodea",
+DlgDocCharSet		: "Karaktere Multzoaren Kodeketa",
+DlgDocCharSetCE		: "Erdialdeko Europakoa",
+DlgDocCharSetCT		: "Txinatar Tradizionala (Big5)",
+DlgDocCharSetCR		: "Zirilikoa",
+DlgDocCharSetGR		: "Grekoa",
+DlgDocCharSetJP		: "Japoniarra",
+DlgDocCharSetKR		: "Korearra",
+DlgDocCharSetTR		: "Turkiarra",
+DlgDocCharSetUN		: "Unicode (UTF-8)",
+DlgDocCharSetWE		: "Mendebaldeko Europakoa",
+DlgDocCharSetOther	: "Beste Karaktere Multzoko Kodeketa",
+
+DlgDocDocType		: "Document Type Goiburua",
+DlgDocDocTypeOther	: "Beste Document Type Goiburua",
+DlgDocIncXHTML		: "XHTML Ezarpenak",
+DlgDocBgColor		: "Atzeko Kolorea",
+DlgDocBgImage		: "Atzeko Irudiaren URL-a",
+DlgDocBgNoScroll	: "Korritze gabeko Atzekaldea",
+DlgDocCText			: "Testua",
+DlgDocCLink			: "Estekak",
+DlgDocCVisited		: "Bisitatutako Estekak",
+DlgDocCActive		: "Esteka Aktiboa",
+DlgDocMargins		: "Orrialdearen marjinak",
+DlgDocMaTop			: "Goian",
+DlgDocMaLeft		: "Ezkerrean",
+DlgDocMaRight		: "Eskuman",
+DlgDocMaBottom		: "Behean",
+DlgDocMeIndex		: "Dokumentuaren Gako-hitzak (komarekin bananduta)",
+DlgDocMeDescr		: "Dokumentuaren Deskribapena",
+DlgDocMeAuthor		: "Egilea",
+DlgDocMeCopy		: "Copyright",
+DlgDocPreview		: "Aurrebista",
+
+// Templates Dialog
+Templates			: "Txantiloiak",
+DlgTemplatesTitle	: "Eduki Txantiloiak",
+DlgTemplatesSelMsg	: "Mesedez txantiloia aukeratu editorean kargatzeko<br>(orain dauden edukiak galduko dira):",
+DlgTemplatesLoading	: "Txantiloiak kargatzen. Itxaron mesedez...",
+DlgTemplatesNoTpl	: "(Ez dago definitutako txantiloirik)",
+DlgTemplatesReplace	: "Ordeztu oraingo edukiak",
+
+// About Dialog
+DlgAboutAboutTab	: "Honi buruz",
+DlgAboutBrowserInfoTab	: "Nabigatzailearen Informazioa",
+DlgAboutLicenseTab	: "Lizentzia",
+DlgAboutVersion		: "bertsioa",
+DlgAboutInfo		: "Informazio gehiago eskuratzeko hona joan"
+};


Property changes on: announcement/trunk/src/main/webapp/fckeditor/editor/lang/eu.js
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/webapp/fckeditor/editor/lang/fa.js
===================================================================
--- announcement/trunk/src/main/webapp/fckeditor/editor/lang/fa.js	                        (rev 0)
+++ announcement/trunk/src/main/webapp/fckeditor/editor/lang/fa.js	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,515 @@
+/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2008 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * Persian language file.
+ */
+
+var FCKLang =
+{
+// Language direction : "ltr" (left to right) or "rtl" (right to left).
+Dir					: "rtl",
+
+ToolbarCollapse		: "برچیدن نوارابزار",
+ToolbarExpand		: "گستردن نوارابزار",
+
+// Toolbar Items and Context Menu
+Save				: "ذخیره",
+NewPage				: "برگهٴ تازه",
+Preview				: "پیش‌نمایش",
+Cut					: "برش",
+Copy				: "کپی",
+Paste				: "چسباندن",
+PasteText			: "چسباندن به عنوان متن ِساده",
+PasteWord			: "چسباندن از Word",
+Print				: "چاپ",
+SelectAll			: "گزینش همه",
+RemoveFormat		: "برداشتن فرمت",
+InsertLinkLbl		: "پیوند",
+InsertLink			: "گنجاندن/ویرایش ِپیوند",
+RemoveLink			: "برداشتن پیوند",
+Anchor				: "گنجاندن/ویرایش ِلنگر",
+AnchorDelete		: "Remove Anchor",	//MISSING
+InsertImageLbl		: "تصویر",
+InsertImage			: "گنجاندن/ویرایش ِتصویر",
+InsertFlashLbl		: "Flash",
+InsertFlash			: "گنجاندن/ویرایش ِFlash",
+InsertTableLbl		: "جدول",
+InsertTable			: "گنجاندن/ویرایش ِجدول",
+InsertLineLbl		: "خط",
+InsertLine			: "گنجاندن خط ِافقی",
+InsertSpecialCharLbl: "نویسهٴ ویژه",
+InsertSpecialChar	: "گنجاندن نویسهٴ ویژه",
+InsertSmileyLbl		: "خندانک",
+InsertSmiley		: "گنجاندن خندانک",
+About				: "دربارهٴ FCKeditor",
+Bold				: "درشت",
+Italic				: "خمیده",
+Underline			: "خط‌زیردار",
+StrikeThrough		: "میان‌خط",
+Subscript			: "زیرنویس",
+Superscript			: "بالانویس",
+LeftJustify			: "چپ‌چین",
+CenterJustify		: "میان‌چین",
+RightJustify		: "راست‌چین",
+BlockJustify		: "بلوک‌چین",
+DecreaseIndent		: "کاهش تورفتگی",
+IncreaseIndent		: "افزایش تورفتگی",
+Blockquote			: "Blockquote",	//MISSING
+Undo				: "واچیدن",
+Redo				: "بازچیدن",
+NumberedListLbl		: "فهرست شماره‌دار",
+NumberedList		: "گنجاندن/برداشتن فهرست شماره‌دار",
+BulletedListLbl		: "فهرست نقطه‌ای",
+BulletedList		: "گنجاندن/برداشتن فهرست نقطه‌ای",
+ShowTableBorders	: "نمایش لبهٴ جدول",
+ShowDetails			: "نمایش جزئیات",
+Style				: "سبک",
+FontFormat			: "فرمت",
+Font				: "قلم",
+FontSize			: "اندازه",
+TextColor			: "رنگ متن",
+BGColor				: "رنگ پس‌زمینه",
+Source				: "منبع",
+Find				: "جستجو",
+Replace				: "جایگزینی",
+SpellCheck			: "بررسی املا",
+UniversalKeyboard	: "صفحه‌کلید جهانی",
+PageBreakLbl		: "شکستگی ِپایان ِبرگه",
+PageBreak			: "گنجاندن شکستگی ِپایان ِبرگه",
+
+Form			: "فرم",
+Checkbox		: "خانهٴ گزینه‌ای",
+RadioButton		: "دکمهٴ رادیویی",
+TextField		: "فیلد متنی",
+Textarea		: "ناحیهٴ متنی",
+HiddenField		: "فیلد پنهان",
+Button			: "دکمه",
+SelectionField	: "فیلد چندگزینه‌ای",
+ImageButton		: "دکمهٴ تصویری",
+
+FitWindow		: "بیشینه‌سازی ِاندازهٴ ویرایشگر",
+ShowBlocks		: "Show Blocks",	//MISSING
+
+// Context Menu
+EditLink			: "ویرایش پیوند",
+CellCM				: "سلول",
+RowCM				: "سطر",
+ColumnCM			: "ستون",
+InsertRowAfter		: "Insert Row After",	//MISSING
+InsertRowBefore		: "Insert Row Before",	//MISSING
+DeleteRows			: "حذف سطرها",
+InsertColumnAfter	: "Insert Column After",	//MISSING
+InsertColumnBefore	: "Insert Column Before",	//MISSING
+DeleteColumns		: "حذف ستونها",
+InsertCellAfter		: "Insert Cell After",	//MISSING
+InsertCellBefore	: "Insert Cell Before",	//MISSING
+DeleteCells			: "حذف سلولها",
+MergeCells			: "ادغام سلولها",
+MergeRight			: "Merge Right",	//MISSING
+MergeDown			: "Merge Down",	//MISSING
+HorizontalSplitCell	: "Split Cell Horizontally",	//MISSING
+VerticalSplitCell	: "Split Cell Vertically",	//MISSING
+TableDelete			: "پاک‌کردن جدول",
+CellProperties		: "ویژگیهای سلول",
+TableProperties		: "ویژگیهای جدول",
+ImageProperties		: "ویژگیهای تصویر",
+FlashProperties		: "ویژگیهای Flash",
+
+AnchorProp			: "ویژگیهای لنگر",
+ButtonProp			: "ویژگیهای دکمه",
+CheckboxProp		: "ویژگیهای خانهٴ گزینه‌ای",
+HiddenFieldProp		: "ویژگیهای فیلد پنهان",
+RadioButtonProp		: "ویژگیهای دکمهٴ رادیویی",
+ImageButtonProp		: "ویژگیهای دکمهٴ تصویری",
+TextFieldProp		: "ویژگیهای فیلد متنی",
+SelectionFieldProp	: "ویژگیهای فیلد چندگزینه‌ای",
+TextareaProp		: "ویژگیهای ناحیهٴ متنی",
+FormProp			: "ویژگیهای فرم",
+
+FontFormats			: "نرمال;فرمت‌شده;آدرس;سرنویس 1;سرنویس 2;سرنویس 3;سرنویس 4;سرنویس 5;سرنویس 6;بند;(DIV)",
+
+// Alerts and Messages
+ProcessingXHTML		: "پردازش XHTML. لطفا صبر کنید...",
+Done				: "انجام شد",
+PasteWordConfirm	: "متنی که می‌خواهید بچسبانید به نظر می‌رسد از Word کپی شده است. آیا می‌خواهید قبل از چسباندن آن را پاک‌سازی کنید؟",
+NotCompatiblePaste	: "این فرمان برای مرورگر Internet Explorer از نگارش 5.5 یا بالاتر در دسترس است. آیا می‌خواهید بدون پاک‌سازی، متن را بچسبانید؟",
+UnknownToolbarItem	: "فقرهٴ نوارابزار ناشناخته \"%1\"",
+UnknownCommand		: "نام دستور ناشناخته \"%1\"",
+NotImplemented		: "دستور پیاده‌سازی‌نشده",
+UnknownToolbarSet	: "مجموعهٴ نوارابزار \"%1\" وجود ندارد",
+NoActiveX			: "تنظیمات امنیتی مرورگر شما ممکن است در بعضی از ویژگیهای مرورگر محدودیت ایجاد کند. شما باید گزینهٴ \"Run ActiveX controls and plug-ins\" را فعال کنید. ممکن است شما با خطاهایی روبرو باشید و متوجه کمبود ویژگیهایی شوید.",
+BrowseServerBlocked : "توانایی بازگشایی مرورگر منابع فراهم نیست. اطمینان حاصل کنید که تمامی برنامه‌های پیشگیری از نمایش popup را از کار بازداشته‌اید.",
+DialogBlocked		: "توانایی بازگشایی پنجرهٴ کوچک ِگفتگو فراهم نیست. اطمینان حاصل کنید که تمامی برنامه‌های پیشگیری از نمایش popup را از کار بازداشته‌اید.",
+
+// Dialogs
+DlgBtnOK			: "پذیرش",
+DlgBtnCancel		: "انصراف",
+DlgBtnClose			: "بستن",
+DlgBtnBrowseServer	: "فهرست‌نمایی سرور",
+DlgAdvancedTag		: "پیشرفته",
+DlgOpOther			: "<غیره>",
+DlgInfoTab			: "اطلاعات",
+DlgAlertUrl			: "لطفاً URL را بنویسید",
+
+// General Dialogs Labels
+DlgGenNotSet		: "<تعین‌نشده>",
+DlgGenId			: "شناسه",
+DlgGenLangDir		: "جهت‌نمای زبان",
+DlgGenLangDirLtr	: "چپ به راست (LTR)",
+DlgGenLangDirRtl	: "راست به چپ (RTL)",
+DlgGenLangCode		: "کد زبان",
+DlgGenAccessKey		: "کلید دستیابی",
+DlgGenName			: "نام",
+DlgGenTabIndex		: "نمایهٴ دسترسی با Tab",
+DlgGenLongDescr		: "URL توصیف طولانی",
+DlgGenClass			: "کلاسهای شیوه‌نامه(Stylesheet)",
+DlgGenTitle			: "عنوان کمکی",
+DlgGenContType		: "نوع محتوای کمکی",
+DlgGenLinkCharset	: "نویسه‌گان منبع ِپیوندشده",
+DlgGenStyle			: "شیوه(style)",
+
+// Image Dialog
+DlgImgTitle			: "ویژگیهای تصویر",
+DlgImgInfoTab		: "اطلاعات تصویر",
+DlgImgBtnUpload		: "به سرور بفرست",
+DlgImgURL			: "URL",
+DlgImgUpload		: "انتقال به سرور",
+DlgImgAlt			: "متن جایگزین",
+DlgImgWidth			: "پهنا",
+DlgImgHeight		: "درازا",
+DlgImgLockRatio		: "قفل‌کردن ِنسبت",
+DlgBtnResetSize		: "بازنشانی اندازه",
+DlgImgBorder		: "لبه",
+DlgImgHSpace		: "فاصلهٴ افقی",
+DlgImgVSpace		: "فاصلهٴ عمودی",
+DlgImgAlign			: "چینش",
+DlgImgAlignLeft		: "چپ",
+DlgImgAlignAbsBottom: "پائین مطلق",
+DlgImgAlignAbsMiddle: "وسط مطلق",
+DlgImgAlignBaseline	: "خط‌پایه",
+DlgImgAlignBottom	: "پائین",
+DlgImgAlignMiddle	: "وسط",
+DlgImgAlignRight	: "راست",
+DlgImgAlignTextTop	: "متن بالا",
+DlgImgAlignTop		: "بالا",
+DlgImgPreview		: "پیش‌نمایش",
+DlgImgAlertUrl		: "لطفا URL تصویر را بنویسید",
+DlgImgLinkTab		: "پیوند",
+
+// Flash Dialog
+DlgFlashTitle		: "ویژگیهای Flash",
+DlgFlashChkPlay		: "آغاز ِخودکار",
+DlgFlashChkLoop		: "اجرای پیاپی",
+DlgFlashChkMenu		: "دردسترس‌بودن منوی Flash",
+DlgFlashScale		: "مقیاس",
+DlgFlashScaleAll	: "نمایش همه",
+DlgFlashScaleNoBorder	: "بدون کران",
+DlgFlashScaleFit	: "جایگیری کامل",
+
+// Link Dialog
+DlgLnkWindowTitle	: "پیوند",
+DlgLnkInfoTab		: "اطلاعات پیوند",
+DlgLnkTargetTab		: "مقصد",
+
+DlgLnkType			: "نوع پیوند",
+DlgLnkTypeURL		: "URL",
+DlgLnkTypeAnchor	: "لنگر در همین صفحه",
+DlgLnkTypeEMail		: "پست الکترونیکی",
+DlgLnkProto			: "پروتکل",
+DlgLnkProtoOther	: "<دیگر>",
+DlgLnkURL			: "URL",
+DlgLnkAnchorSel		: "یک لنگر برگزینید",
+DlgLnkAnchorByName	: "با نام لنگر",
+DlgLnkAnchorById	: "با شناسهٴ المان",
+DlgLnkNoAnchors		: "(در این سند لنگری دردسترس نیست)",
+DlgLnkEMail			: "نشانی پست الکترونیکی",
+DlgLnkEMailSubject	: "موضوع پیام",
+DlgLnkEMailBody		: "متن پیام",
+DlgLnkUpload		: "انتقال به سرور",
+DlgLnkBtnUpload		: "به سرور بفرست",
+
+DlgLnkTarget		: "مقصد",
+DlgLnkTargetFrame	: "<فریم>",
+DlgLnkTargetPopup	: "<پنجرهٴ پاپاپ>",
+DlgLnkTargetBlank	: "پنجرهٴ دیگر (_blank)",
+DlgLnkTargetParent	: "پنجرهٴ والد (_parent)",
+DlgLnkTargetSelf	: "همان پنجره (_self)",
+DlgLnkTargetTop		: "بالاترین پنجره (_top)",
+DlgLnkTargetFrameName	: "نام فریم مقصد",
+DlgLnkPopWinName	: "نام پنجرهٴ پاپاپ",
+DlgLnkPopWinFeat	: "ویژگیهای پنجرهٴ پاپاپ",
+DlgLnkPopResize		: "قابل تغییر اندازه",
+DlgLnkPopLocation	: "نوار موقعیت",
+DlgLnkPopMenu		: "نوار منو",
+DlgLnkPopScroll		: "میله‌های پیمایش",
+DlgLnkPopStatus		: "نوار وضعیت",
+DlgLnkPopToolbar	: "نوارابزار",
+DlgLnkPopFullScrn	: "تمام‌صفحه (IE)",
+DlgLnkPopDependent	: "وابسته (Netscape)",
+DlgLnkPopWidth		: "پهنا",
+DlgLnkPopHeight		: "درازا",
+DlgLnkPopLeft		: "موقعیت ِچپ",
+DlgLnkPopTop		: "موقعیت ِبالا",
+
+DlnLnkMsgNoUrl		: "لطفا URL پیوند را بنویسید",
+DlnLnkMsgNoEMail	: "لطفا نشانی پست الکترونیکی را بنویسید",
+DlnLnkMsgNoAnchor	: "لطفا لنگری را برگزینید",
+DlnLnkMsgInvPopName	: "نام پنجرهٴ پاپاپ باید با یک نویسهٴ الفبایی آغاز گردد و نباید فاصله‌های خالی در آن باشند",
+
+// Color Dialog
+DlgColorTitle		: "گزینش رنگ",
+DlgColorBtnClear	: "پاک‌کردن",
+DlgColorHighlight	: "نمونه",
+DlgColorSelected	: "برگزیده",
+
+// Smiley Dialog
+DlgSmileyTitle		: "گنجاندن خندانک",
+
+// Special Character Dialog
+DlgSpecialCharTitle	: "گزینش نویسهٴ‌ویژه",
+
+// Table Dialog
+DlgTableTitle		: "ویژگیهای جدول",
+DlgTableRows		: "سطرها",
+DlgTableColumns		: "ستونها",
+DlgTableBorder		: "اندازهٴ لبه",
+DlgTableAlign		: "چینش",
+DlgTableAlignNotSet	: "<تعین‌نشده>",
+DlgTableAlignLeft	: "چپ",
+DlgTableAlignCenter	: "وسط",
+DlgTableAlignRight	: "راست",
+DlgTableWidth		: "پهنا",
+DlgTableWidthPx		: "پیکسل",
+DlgTableWidthPc		: "درصد",
+DlgTableHeight		: "درازا",
+DlgTableCellSpace	: "فاصلهٴ میان سلولها",
+DlgTableCellPad		: "فاصلهٴ پرشده در سلول",
+DlgTableCaption		: "عنوان",
+DlgTableSummary		: "خلاصه",
+
+// Table Cell Dialog
+DlgCellTitle		: "ویژگیهای سلول",
+DlgCellWidth		: "پهنا",
+DlgCellWidthPx		: "پیکسل",
+DlgCellWidthPc		: "درصد",
+DlgCellHeight		: "درازا",
+DlgCellWordWrap		: "شکستن واژه‌ها",
+DlgCellWordWrapNotSet	: "<تعین‌نشده>",
+DlgCellWordWrapYes	: "بله",
+DlgCellWordWrapNo	: "خیر",
+DlgCellHorAlign		: "چینش ِافقی",
+DlgCellHorAlignNotSet	: "<تعین‌نشده>",
+DlgCellHorAlignLeft	: "چپ",
+DlgCellHorAlignCenter	: "وسط",
+DlgCellHorAlignRight: "راست",
+DlgCellVerAlign		: "چینش ِعمودی",
+DlgCellVerAlignNotSet	: "<تعین‌نشده>",
+DlgCellVerAlignTop	: "بالا",
+DlgCellVerAlignMiddle	: "میان",
+DlgCellVerAlignBottom	: "پائین",
+DlgCellVerAlignBaseline	: "خط‌پایه",
+DlgCellRowSpan		: "گستردگی سطرها",
+DlgCellCollSpan		: "گستردگی ستونها",
+DlgCellBackColor	: "رنگ پس‌زمینه",
+DlgCellBorderColor	: "رنگ لبه",
+DlgCellBtnSelect	: "برگزینید...",
+
+// Find and Replace Dialog
+DlgFindAndReplaceTitle	: "Find and Replace",	//MISSING
+
+// Find Dialog
+DlgFindTitle		: "یافتن",
+DlgFindFindBtn		: "یافتن",
+DlgFindNotFoundMsg	: "متن موردنظر یافت نشد.",
+
+// Replace Dialog
+DlgReplaceTitle			: "جایگزینی",
+DlgReplaceFindLbl		: "چه‌چیز را می‌یابید:",
+DlgReplaceReplaceLbl	: "جایگزینی با:",
+DlgReplaceCaseChk		: "همسانی در بزرگی و کوچکی نویسه‌ها",
+DlgReplaceReplaceBtn	: "جایگزینی",
+DlgReplaceReplAllBtn	: "جایگزینی همهٴ یافته‌ها",
+DlgReplaceWordChk		: "همسانی با واژهٴ کامل",
+
+// Paste Operations / Dialog
+PasteErrorCut	: "تنظیمات امنیتی مرورگر شما اجازه نمی‌دهد که ویرایشگر به طور خودکار عملکردهای برش را انجام دهد. لطفا با دکمه‌های صفحه‌کلید این کار را انجام دهید (Ctrl+X).",
+PasteErrorCopy	: "تنظیمات امنیتی مرورگر شما اجازه نمی‌دهد که ویرایشگر به طور خودکار عملکردهای کپی‌کردن را انجام دهد. لطفا با دکمه‌های صفحه‌کلید این کار را انجام دهید (Ctrl+C).",
+
+PasteAsText		: "چسباندن به عنوان متن ِساده",
+PasteFromWord	: "چسباندن از Word",
+
+DlgPasteMsg2	: "لطفا متن را با کلیدهای (<STRONG>Ctrl+V</STRONG>) در این جعبهٴ متنی بچسبانید و <STRONG>پذیرش</STRONG> را بزنید.",
+DlgPasteSec		: "به خاطر تنظیمات امنیتی مرورگر شما، ویرایشگر نمی‌تواند دسترسی مستقیم به داده‌های clipboard داشته باشد. شما باید دوباره آنرا در این پنجره بچسبانید.",
+DlgPasteIgnoreFont		: "چشم‌پوشی از تعاریف نوع قلم",
+DlgPasteRemoveStyles	: "چشم‌پوشی از تعاریف سبک (style)",
+
+// Color Picker
+ColorAutomatic	: "خودکار",
+ColorMoreColors	: "رنگهای بیشتر...",
+
+// Document Properties
+DocProps		: "ویژگیهای سند",
+
+// Anchor Dialog
+DlgAnchorTitle		: "ویژگیهای لنگر",
+DlgAnchorName		: "نام لنگر",
+DlgAnchorErrorName	: "لطفا نام لنگر را بنویسید",
+
+// Speller Pages Dialog
+DlgSpellNotInDic		: "در واژه‌نامه یافت نشد",
+DlgSpellChangeTo		: "تغییر به",
+DlgSpellBtnIgnore		: "چشم‌پوشی",
+DlgSpellBtnIgnoreAll	: "چشم‌پوشی همه",
+DlgSpellBtnReplace		: "جایگزینی",
+DlgSpellBtnReplaceAll	: "جایگزینی همه",
+DlgSpellBtnUndo			: "واچینش",
+DlgSpellNoSuggestions	: "- پیشنهادی نیست -",
+DlgSpellProgress		: "بررسی املا در حال انجام...",
+DlgSpellNoMispell		: "بررسی املا انجام شد. هیچ غلط‌املائی یافت نشد",
+DlgSpellNoChanges		: "بررسی املا انجام شد. هیچ واژه‌ای تغییر نیافت",
+DlgSpellOneChange		: "بررسی املا انجام شد. یک واژه تغییر یافت",
+DlgSpellManyChanges		: "بررسی املا انجام شد. %1 واژه تغییر یافت",
+
+IeSpellDownload			: "بررسی‌کنندهٴ املا نصب نشده است. آیا می‌خواهید آن را هم‌اکنون دریافت کنید؟",
+
+// Button Dialog
+DlgButtonText		: "متن (مقدار)",
+DlgButtonType		: "نوع",
+DlgButtonTypeBtn	: "دکمه",
+DlgButtonTypeSbm	: "Submit",
+DlgButtonTypeRst	: "بازنشانی (Reset)",
+
+// Checkbox and Radio Button Dialogs
+DlgCheckboxName		: "نام",
+DlgCheckboxValue	: "مقدار",
+DlgCheckboxSelected	: "برگزیده",
+
+// Form Dialog
+DlgFormName		: "نام",
+DlgFormAction	: "رویداد",
+DlgFormMethod	: "متد",
+
+// Select Field Dialog
+DlgSelectName		: "نام",
+DlgSelectValue		: "مقدار",
+DlgSelectSize		: "اندازه",
+DlgSelectLines		: "خطوط",
+DlgSelectChkMulti	: "گزینش چندگانه فراهم باشد",
+DlgSelectOpAvail	: "گزینه‌های دردسترس",
+DlgSelectOpText		: "متن",
+DlgSelectOpValue	: "مقدار",
+DlgSelectBtnAdd		: "افزودن",
+DlgSelectBtnModify	: "ویرایش",
+DlgSelectBtnUp		: "بالا",
+DlgSelectBtnDown	: "پائین",
+DlgSelectBtnSetValue : "تنظیم به عنوان مقدار ِبرگزیده",
+DlgSelectBtnDelete	: "پاک‌کردن",
+
+// Textarea Dialog
+DlgTextareaName	: "نام",
+DlgTextareaCols	: "ستونها",
+DlgTextareaRows	: "سطرها",
+
+// Text Field Dialog
+DlgTextName			: "نام",
+DlgTextValue		: "مقدار",
+DlgTextCharWidth	: "پهنای نویسه",
+DlgTextMaxChars		: "بیشینهٴ نویسه‌ها",
+DlgTextType			: "نوع",
+DlgTextTypeText		: "متن",
+DlgTextTypePass		: "گذرواژه",
+
+// Hidden Field Dialog
+DlgHiddenName	: "نام",
+DlgHiddenValue	: "مقدار",
+
+// Bulleted List Dialog
+BulletedListProp	: "ویژگیهای فهرست نقطه‌ای",
+NumberedListProp	: "ویژگیهای فهرست شماره‌دار",
+DlgLstStart			: "آغاز",
+DlgLstType			: "نوع",
+DlgLstTypeCircle	: "دایره",
+DlgLstTypeDisc		: "قرص",
+DlgLstTypeSquare	: "چهارگوش",
+DlgLstTypeNumbers	: "شماره‌ها (1، 2، 3)",
+DlgLstTypeLCase		: "نویسه‌های کوچک (a، b، c)",
+DlgLstTypeUCase		: "نویسه‌های بزرگ (A، B، C)",
+DlgLstTypeSRoman	: "شمارگان رومی کوچک (i، ii، iii)",
+DlgLstTypeLRoman	: "شمارگان رومی بزرگ (I، II، III)",
+
+// Document Properties Dialog
+DlgDocGeneralTab	: "عمومی",
+DlgDocBackTab		: "پس‌زمینه",
+DlgDocColorsTab		: "رنگها و حاشیه‌ها",
+DlgDocMetaTab		: "فراداده",
+
+DlgDocPageTitle		: "عنوان صفحه",
+DlgDocLangDir		: "جهت زبان",
+DlgDocLangDirLTR	: "چپ به راست (LTR(",
+DlgDocLangDirRTL	: "راست به چپ (RTL(",
+DlgDocLangCode		: "کد زبان",
+DlgDocCharSet		: "رمزگذاری نویسه‌گان",
+DlgDocCharSetCE		: "اروپای مرکزی",
+DlgDocCharSetCT		: "چینی رسمی (Big5)",
+DlgDocCharSetCR		: "سیریلیک",
+DlgDocCharSetGR		: "یونانی",
+DlgDocCharSetJP		: "ژاپنی",
+DlgDocCharSetKR		: "کره‌ای",
+DlgDocCharSetTR		: "ترکی",
+DlgDocCharSetUN		: "یونیکُد (UTF-8)",
+DlgDocCharSetWE		: "اروپای غربی",
+DlgDocCharSetOther	: "رمزگذاری نویسه‌گان دیگر",
+
+DlgDocDocType		: "عنوان نوع سند",
+DlgDocDocTypeOther	: "عنوان نوع سند دیگر",
+DlgDocIncXHTML		: "شامل تعاریف XHTML",
+DlgDocBgColor		: "رنگ پس‌زمینه",
+DlgDocBgImage		: "URL تصویر پس‌زمینه",
+DlgDocBgNoScroll	: "پس‌زمینهٴ پیمایش‌ناپذیر",
+DlgDocCText			: "متن",
+DlgDocCLink			: "پیوند",
+DlgDocCVisited		: "پیوند مشاهده‌شده",
+DlgDocCActive		: "پیوند فعال",
+DlgDocMargins		: "حاشیه‌های صفحه",
+DlgDocMaTop			: "بالا",
+DlgDocMaLeft		: "چپ",
+DlgDocMaRight		: "راست",
+DlgDocMaBottom		: "پایین",
+DlgDocMeIndex		: "کلیدواژگان نمایه‌گذاری سند (با کاما جدا شوند)",
+DlgDocMeDescr		: "توصیف سند",
+DlgDocMeAuthor		: "نویسنده",
+DlgDocMeCopy		: "کپی‌رایت",
+DlgDocPreview		: "پیش‌نمایش",
+
+// Templates Dialog
+Templates			: "الگوها",
+DlgTemplatesTitle	: "الگوهای محتویات",
+DlgTemplatesSelMsg	: "لطفا الگوی موردنظر را برای بازکردن در ویرایشگر برگزینید<br>(محتویات کنونی از دست خواهند رفت):",
+DlgTemplatesLoading	: "بارگذاری فهرست الگوها. لطفا صبر کنید...",
+DlgTemplatesNoTpl	: "(الگوئی تعریف نشده است)",
+DlgTemplatesReplace	: "محتویات کنونی جایگزین شوند",
+
+// About Dialog
+DlgAboutAboutTab	: "درباره",
+DlgAboutBrowserInfoTab	: "اطلاعات مرورگر",
+DlgAboutLicenseTab	: "گواهینامه",
+DlgAboutVersion		: "نگارش",
+DlgAboutInfo		: "برای آگاهی بیشتر به این نشانی بروید"
+};


Property changes on: announcement/trunk/src/main/webapp/fckeditor/editor/lang/fa.js
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/webapp/fckeditor/editor/lang/fi.js
===================================================================
--- announcement/trunk/src/main/webapp/fckeditor/editor/lang/fi.js	                        (rev 0)
+++ announcement/trunk/src/main/webapp/fckeditor/editor/lang/fi.js	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,515 @@
+/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2008 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * Finnish language file.
+ */
+
+var FCKLang =
+{
+// Language direction : "ltr" (left to right) or "rtl" (right to left).
+Dir					: "ltr",
+
+ToolbarCollapse		: "Piilota työkalurivi",
+ToolbarExpand		: "Näytä työkalurivi",
+
+// Toolbar Items and Context Menu
+Save				: "Tallenna",
+NewPage				: "Tyhjennä",
+Preview				: "Esikatsele",
+Cut					: "Leikkaa",
+Copy				: "Kopioi",
+Paste				: "Liitä",
+PasteText			: "Liitä tekstinä",
+PasteWord			: "Liitä Wordista",
+Print				: "Tulosta",
+SelectAll			: "Valitse kaikki",
+RemoveFormat		: "Poista muotoilu",
+InsertLinkLbl		: "Linkki",
+InsertLink			: "Lisää linkki/muokkaa linkkiä",
+RemoveLink			: "Poista linkki",
+Anchor				: "Lisää ankkuri/muokkaa ankkuria",
+AnchorDelete		: "Poista ankkuri",
+InsertImageLbl		: "Kuva",
+InsertImage			: "Lisää kuva/muokkaa kuvaa",
+InsertFlashLbl		: "Flash",
+InsertFlash			: "Lisää/muokkaa Flashia",
+InsertTableLbl		: "Taulu",
+InsertTable			: "Lisää taulu/muokkaa taulua",
+InsertLineLbl		: "Murtoviiva",
+InsertLine			: "Lisää murtoviiva",
+InsertSpecialCharLbl: "Erikoismerkki",
+InsertSpecialChar	: "Lisää erikoismerkki",
+InsertSmileyLbl		: "Hymiö",
+InsertSmiley		: "Lisää hymiö",
+About				: "FCKeditorista",
+Bold				: "Lihavoitu",
+Italic				: "Kursivoitu",
+Underline			: "Alleviivattu",
+StrikeThrough		: "Yliviivattu",
+Subscript			: "Alaindeksi",
+Superscript			: "Yläindeksi",
+LeftJustify			: "Tasaa vasemmat reunat",
+CenterJustify		: "Keskitä",
+RightJustify		: "Tasaa oikeat reunat",
+BlockJustify		: "Tasaa molemmat reunat",
+DecreaseIndent		: "Pienennä sisennystä",
+IncreaseIndent		: "Suurenna sisennystä",
+Blockquote			: "Lainaus",
+Undo				: "Kumoa",
+Redo				: "Toista",
+NumberedListLbl		: "Numerointi",
+NumberedList		: "Lisää/poista numerointi",
+BulletedListLbl		: "Luottelomerkit",
+BulletedList		: "Lisää/poista luottelomerkit",
+ShowTableBorders	: "Näytä taulun rajat",
+ShowDetails			: "Näytä muotoilu",
+Style				: "Tyyli",
+FontFormat			: "Muotoilu",
+Font				: "Fontti",
+FontSize			: "Koko",
+TextColor			: "Tekstiväri",
+BGColor				: "Taustaväri",
+Source				: "Koodi",
+Find				: "Etsi",
+Replace				: "Korvaa",
+SpellCheck			: "Tarkista oikeinkirjoitus",
+UniversalKeyboard	: "Universaali näppäimistö",
+PageBreakLbl		: "Sivun vaihto",
+PageBreak			: "Lisää sivun vaihto",
+
+Form			: "Lomake",
+Checkbox		: "Valintaruutu",
+RadioButton		: "Radiopainike",
+TextField		: "Tekstikenttä",
+Textarea		: "Tekstilaatikko",
+HiddenField		: "Piilokenttä",
+Button			: "Painike",
+SelectionField	: "Valintakenttä",
+ImageButton		: "Kuvapainike",
+
+FitWindow		: "Suurenna editori koko ikkunaan",
+ShowBlocks		: "Näytä elementit",
+
+// Context Menu
+EditLink			: "Muokkaa linkkiä",
+CellCM				: "Solu",
+RowCM				: "Rivi",
+ColumnCM			: "Sarake",
+InsertRowAfter		: "Lisää rivi alapuolelle",
+InsertRowBefore		: "Lisää rivi yläpuolelle",
+DeleteRows			: "Poista rivit",
+InsertColumnAfter	: "Lisää sarake oikealle",
+InsertColumnBefore	: "Lisää sarake vasemmalle",
+DeleteColumns		: "Poista sarakkeet",
+InsertCellAfter		: "Lisää solu perään",
+InsertCellBefore	: "Lisää solu eteen",
+DeleteCells			: "Poista solut",
+MergeCells			: "Yhdistä solut",
+MergeRight			: "Yhdistä oikealla olevan kanssa",
+MergeDown			: "Yhdistä alla olevan kanssa",
+HorizontalSplitCell	: "Jaa solu vaakasuunnassa",
+VerticalSplitCell	: "Jaa solu pystysuunnassa",
+TableDelete			: "Poista taulu",
+CellProperties		: "Solun ominaisuudet",
+TableProperties		: "Taulun ominaisuudet",
+ImageProperties		: "Kuvan ominaisuudet",
+FlashProperties		: "Flash ominaisuudet",
+
+AnchorProp			: "Ankkurin ominaisuudet",
+ButtonProp			: "Painikkeen ominaisuudet",
+CheckboxProp		: "Valintaruudun ominaisuudet",
+HiddenFieldProp		: "Piilokentän ominaisuudet",
+RadioButtonProp		: "Radiopainikkeen ominaisuudet",
+ImageButtonProp		: "Kuvapainikkeen ominaisuudet",
+TextFieldProp		: "Tekstikentän ominaisuudet",
+SelectionFieldProp	: "Valintakentän ominaisuudet",
+TextareaProp		: "Tekstilaatikon ominaisuudet",
+FormProp			: "Lomakkeen ominaisuudet",
+
+FontFormats			: "Normaali;Muotoiltu;Osoite;Otsikko 1;Otsikko 2;Otsikko 3;Otsikko 4;Otsikko 5;Otsikko 6",
+
+// Alerts and Messages
+ProcessingXHTML		: "Prosessoidaan XHTML:ää. Odota hetki...",
+Done				: "Valmis",
+PasteWordConfirm	: "Teksti, jonka haluat liittää, näyttää olevan kopioitu Wordista. Haluatko puhdistaa sen ennen liittämistä?",
+NotCompatiblePaste	: "Tämä komento toimii vain Internet Explorer 5.5:ssa tai uudemmassa. Haluatko liittää ilman puhdistusta?",
+UnknownToolbarItem	: "Tuntemanton työkalu \"%1\"",
+UnknownCommand		: "Tuntematon komento \"%1\"",
+NotImplemented		: "Komentoa ei ole liitetty sovellukseen",
+UnknownToolbarSet	: "Työkalukokonaisuus \"%1\" ei ole olemassa",
+NoActiveX			: "Selaimesi turvallisuusasetukset voivat rajoittaa joitain editorin ominaisuuksia. Sinun pitää ottaa käyttöön asetuksista \"Suorita ActiveX komponentit ja -plugin-laajennukset\". Saatat kohdata virheitä ja huomata puuttuvia ominaisuuksia.",
+BrowseServerBlocked : "Resurssiselainta ei voitu avata. Varmista, että ponnahdusikkunoiden estäjät eivät ole päällä.",
+DialogBlocked		: "Apuikkunaa ei voitu avaata. Varmista, että ponnahdusikkunoiden estäjät eivät ole päällä.",
+
+// Dialogs
+DlgBtnOK			: "OK",
+DlgBtnCancel		: "Peruuta",
+DlgBtnClose			: "Sulje",
+DlgBtnBrowseServer	: "Selaa palvelinta",
+DlgAdvancedTag		: "Lisäominaisuudet",
+DlgOpOther			: "Muut",
+DlgInfoTab			: "Info",
+DlgAlertUrl			: "Lisää URL",
+
+// General Dialogs Labels
+DlgGenNotSet		: "<ei asetettu>",
+DlgGenId			: "Tunniste",
+DlgGenLangDir		: "Kielen suunta",
+DlgGenLangDirLtr	: "Vasemmalta oikealle (LTR)",
+DlgGenLangDirRtl	: "Oikealta vasemmalle (RTL)",
+DlgGenLangCode		: "Kielikoodi",
+DlgGenAccessKey		: "Pikanäppäin",
+DlgGenName			: "Nimi",
+DlgGenTabIndex		: "Tabulaattori indeksi",
+DlgGenLongDescr		: "Pitkän kuvauksen URL",
+DlgGenClass			: "Tyyliluokat",
+DlgGenTitle			: "Avustava otsikko",
+DlgGenContType		: "Avustava sisällön tyyppi",
+DlgGenLinkCharset	: "Linkitetty kirjaimisto",
+DlgGenStyle			: "Tyyli",
+
+// Image Dialog
+DlgImgTitle			: "Kuvan ominaisuudet",
+DlgImgInfoTab		: "Kuvan tiedot",
+DlgImgBtnUpload		: "Lähetä palvelimelle",
+DlgImgURL			: "Osoite",
+DlgImgUpload		: "Lisää kuva",
+DlgImgAlt			: "Vaihtoehtoinen teksti",
+DlgImgWidth			: "Leveys",
+DlgImgHeight		: "Korkeus",
+DlgImgLockRatio		: "Lukitse suhteet",
+DlgBtnResetSize		: "Alkuperäinen koko",
+DlgImgBorder		: "Raja",
+DlgImgHSpace		: "Vaakatila",
+DlgImgVSpace		: "Pystytila",
+DlgImgAlign			: "Kohdistus",
+DlgImgAlignLeft		: "Vasemmalle",
+DlgImgAlignAbsBottom: "Aivan alas",
+DlgImgAlignAbsMiddle: "Aivan keskelle",
+DlgImgAlignBaseline	: "Alas (teksti)",
+DlgImgAlignBottom	: "Alas",
+DlgImgAlignMiddle	: "Keskelle",
+DlgImgAlignRight	: "Oikealle",
+DlgImgAlignTextTop	: "Ylös (teksti)",
+DlgImgAlignTop		: "Ylös",
+DlgImgPreview		: "Esikatselu",
+DlgImgAlertUrl		: "Kirjoita kuvan osoite (URL)",
+DlgImgLinkTab		: "Linkki",
+
+// Flash Dialog
+DlgFlashTitle		: "Flash ominaisuudet",
+DlgFlashChkPlay		: "Automaattinen käynnistys",
+DlgFlashChkLoop		: "Toisto",
+DlgFlashChkMenu		: "Näytä Flash-valikko",
+DlgFlashScale		: "Levitä",
+DlgFlashScaleAll	: "Näytä kaikki",
+DlgFlashScaleNoBorder	: "Ei rajaa",
+DlgFlashScaleFit	: "Tarkka koko",
+
+// Link Dialog
+DlgLnkWindowTitle	: "Linkki",
+DlgLnkInfoTab		: "Linkin tiedot",
+DlgLnkTargetTab		: "Kohde",
+
+DlgLnkType			: "Linkkityyppi",
+DlgLnkTypeURL		: "Osoite",
+DlgLnkTypeAnchor	: "Ankkuri tässä sivussa",
+DlgLnkTypeEMail		: "Sähköposti",
+DlgLnkProto			: "Protokolla",
+DlgLnkProtoOther	: "<muu>",
+DlgLnkURL			: "Osoite",
+DlgLnkAnchorSel		: "Valitse ankkuri",
+DlgLnkAnchorByName	: "Ankkurin nimen mukaan",
+DlgLnkAnchorById	: "Ankkurin ID:n mukaan",
+DlgLnkNoAnchors		: "(Ei ankkureita tässä dokumentissa)",
+DlgLnkEMail			: "Sähköpostiosoite",
+DlgLnkEMailSubject	: "Aihe",
+DlgLnkEMailBody		: "Viesti",
+DlgLnkUpload		: "Lisää tiedosto",
+DlgLnkBtnUpload		: "Lähetä palvelimelle",
+
+DlgLnkTarget		: "Kohde",
+DlgLnkTargetFrame	: "<kehys>",
+DlgLnkTargetPopup	: "<popup ikkuna>",
+DlgLnkTargetBlank	: "Uusi ikkuna (_blank)",
+DlgLnkTargetParent	: "Emoikkuna (_parent)",
+DlgLnkTargetSelf	: "Sama ikkuna (_self)",
+DlgLnkTargetTop		: "Päällimmäisin ikkuna (_top)",
+DlgLnkTargetFrameName	: "Kohdekehyksen nimi",
+DlgLnkPopWinName	: "Popup ikkunan nimi",
+DlgLnkPopWinFeat	: "Popup ikkunan ominaisuudet",
+DlgLnkPopResize		: "Venytettävä",
+DlgLnkPopLocation	: "Osoiterivi",
+DlgLnkPopMenu		: "Valikkorivi",
+DlgLnkPopScroll		: "Vierityspalkit",
+DlgLnkPopStatus		: "Tilarivi",
+DlgLnkPopToolbar	: "Vakiopainikkeet",
+DlgLnkPopFullScrn	: "Täysi ikkuna (IE)",
+DlgLnkPopDependent	: "Riippuva (Netscape)",
+DlgLnkPopWidth		: "Leveys",
+DlgLnkPopHeight		: "Korkeus",
+DlgLnkPopLeft		: "Vasemmalta (px)",
+DlgLnkPopTop		: "Ylhäältä (px)",
+
+DlnLnkMsgNoUrl		: "Linkille on kirjoitettava URL",
+DlnLnkMsgNoEMail	: "Kirjoita sähköpostiosoite",
+DlnLnkMsgNoAnchor	: "Valitse ankkuri",
+DlnLnkMsgInvPopName	: "Popup-ikkunan nimi pitää alkaa aakkosella ja ei saa sisältää välejä",
+
+// Color Dialog
+DlgColorTitle		: "Valitse väri",
+DlgColorBtnClear	: "Tyhjennä",
+DlgColorHighlight	: "Kohdalla",
+DlgColorSelected	: "Valittu",
+
+// Smiley Dialog
+DlgSmileyTitle		: "Lisää hymiö",
+
+// Special Character Dialog
+DlgSpecialCharTitle	: "Valitse erikoismerkki",
+
+// Table Dialog
+DlgTableTitle		: "Taulun ominaisuudet",
+DlgTableRows		: "Rivit",
+DlgTableColumns		: "Sarakkeet",
+DlgTableBorder		: "Rajan paksuus",
+DlgTableAlign		: "Kohdistus",
+DlgTableAlignNotSet	: "<ei asetettu>",
+DlgTableAlignLeft	: "Vasemmalle",
+DlgTableAlignCenter	: "Keskelle",
+DlgTableAlignRight	: "Oikealle",
+DlgTableWidth		: "Leveys",
+DlgTableWidthPx		: "pikseliä",
+DlgTableWidthPc		: "prosenttia",
+DlgTableHeight		: "Korkeus",
+DlgTableCellSpace	: "Solujen väli",
+DlgTableCellPad		: "Solujen sisennys",
+DlgTableCaption		: "Otsikko",
+DlgTableSummary		: "Yhteenveto",
+
+// Table Cell Dialog
+DlgCellTitle		: "Solun ominaisuudet",
+DlgCellWidth		: "Leveys",
+DlgCellWidthPx		: "pikseliä",
+DlgCellWidthPc		: "prosenttia",
+DlgCellHeight		: "Korkeus",
+DlgCellWordWrap		: "Tekstikierrätys",
+DlgCellWordWrapNotSet	: "<Ei asetettu>",
+DlgCellWordWrapYes	: "Kyllä",
+DlgCellWordWrapNo	: "Ei",
+DlgCellHorAlign		: "Vaakakohdistus",
+DlgCellHorAlignNotSet	: "<Ei asetettu>",
+DlgCellHorAlignLeft	: "Vasemmalle",
+DlgCellHorAlignCenter	: "Keskelle",
+DlgCellHorAlignRight: "Oikealle",
+DlgCellVerAlign		: "Pystykohdistus",
+DlgCellVerAlignNotSet	: "<Ei asetettu>",
+DlgCellVerAlignTop	: "Ylös",
+DlgCellVerAlignMiddle	: "Keskelle",
+DlgCellVerAlignBottom	: "Alas",
+DlgCellVerAlignBaseline	: "Tekstin alas",
+DlgCellRowSpan		: "Rivin jatkuvuus",
+DlgCellCollSpan		: "Sarakkeen jatkuvuus",
+DlgCellBackColor	: "Taustaväri",
+DlgCellBorderColor	: "Rajan väri",
+DlgCellBtnSelect	: "Valitse...",
+
+// Find and Replace Dialog
+DlgFindAndReplaceTitle	: "Etsi ja korvaa",
+
+// Find Dialog
+DlgFindTitle		: "Etsi",
+DlgFindFindBtn		: "Etsi",
+DlgFindNotFoundMsg	: "Etsittyä tekstiä ei löytynyt.",
+
+// Replace Dialog
+DlgReplaceTitle			: "Korvaa",
+DlgReplaceFindLbl		: "Etsi mitä:",
+DlgReplaceReplaceLbl	: "Korvaa tällä:",
+DlgReplaceCaseChk		: "Sama kirjainkoko",
+DlgReplaceReplaceBtn	: "Korvaa",
+DlgReplaceReplAllBtn	: "Korvaa kaikki",
+DlgReplaceWordChk		: "Koko sana",
+
+// Paste Operations / Dialog
+PasteErrorCut	: "Selaimesi turva-asetukset eivät salli editorin toteuttaa leikkaamista. Käytä näppäimistöä leikkaamiseen (Ctrl+X).",
+PasteErrorCopy	: "Selaimesi turva-asetukset eivät salli editorin toteuttaa kopioimista. Käytä näppäimistöä kopioimiseen (Ctrl+C).",
+
+PasteAsText		: "Liitä tekstinä",
+PasteFromWord	: "Liitä Wordista",
+
+DlgPasteMsg2	: "Liitä painamalla (<STRONG>Ctrl+V</STRONG>) ja painamalla <STRONG>OK</STRONG>.",
+DlgPasteSec		: "Selaimesi turva-asetukset eivät salli editorin käyttää leikepöytää suoraan. Sinun pitää suorittaa liittäminen tässä ikkunassa.",
+DlgPasteIgnoreFont		: "Jätä huomioimatta fonttimääritykset",
+DlgPasteRemoveStyles	: "Poista tyylimääritykset",
+
+// Color Picker
+ColorAutomatic	: "Automaattinen",
+ColorMoreColors	: "Lisää värejä...",
+
+// Document Properties
+DocProps		: "Dokumentin ominaisuudet",
+
+// Anchor Dialog
+DlgAnchorTitle		: "Ankkurin ominaisuudet",
+DlgAnchorName		: "Nimi",
+DlgAnchorErrorName	: "Ankkurille on kirjoitettava nimi",
+
+// Speller Pages Dialog
+DlgSpellNotInDic		: "Ei sanakirjassa",
+DlgSpellChangeTo		: "Vaihda",
+DlgSpellBtnIgnore		: "Jätä huomioimatta",
+DlgSpellBtnIgnoreAll	: "Jätä kaikki huomioimatta",
+DlgSpellBtnReplace		: "Korvaa",
+DlgSpellBtnReplaceAll	: "Korvaa kaikki",
+DlgSpellBtnUndo			: "Kumoa",
+DlgSpellNoSuggestions	: "Ei ehdotuksia",
+DlgSpellProgress		: "Tarkistus käynnissä...",
+DlgSpellNoMispell		: "Tarkistus valmis: Ei virheitä",
+DlgSpellNoChanges		: "Tarkistus valmis: Yhtään sanaa ei muutettu",
+DlgSpellOneChange		: "Tarkistus valmis: Yksi sana muutettiin",
+DlgSpellManyChanges		: "Tarkistus valmis: %1 sanaa muutettiin",
+
+IeSpellDownload			: "Oikeinkirjoituksen tarkistusta ei ole asennettu. Haluatko ladata sen nyt?",
+
+// Button Dialog
+DlgButtonText		: "Teksti (arvo)",
+DlgButtonType		: "Tyyppi",
+DlgButtonTypeBtn	: "Painike",
+DlgButtonTypeSbm	: "Lähetä",
+DlgButtonTypeRst	: "Tyhjennä",
+
+// Checkbox and Radio Button Dialogs
+DlgCheckboxName		: "Nimi",
+DlgCheckboxValue	: "Arvo",
+DlgCheckboxSelected	: "Valittu",
+
+// Form Dialog
+DlgFormName		: "Nimi",
+DlgFormAction	: "Toiminto",
+DlgFormMethod	: "Tapa",
+
+// Select Field Dialog
+DlgSelectName		: "Nimi",
+DlgSelectValue		: "Arvo",
+DlgSelectSize		: "Koko",
+DlgSelectLines		: "Rivit",
+DlgSelectChkMulti	: "Salli usea valinta",
+DlgSelectOpAvail	: "Ominaisuudet",
+DlgSelectOpText		: "Teksti",
+DlgSelectOpValue	: "Arvo",
+DlgSelectBtnAdd		: "Lisää",
+DlgSelectBtnModify	: "Muuta",
+DlgSelectBtnUp		: "Ylös",
+DlgSelectBtnDown	: "Alas",
+DlgSelectBtnSetValue : "Aseta valituksi",
+DlgSelectBtnDelete	: "Poista",
+
+// Textarea Dialog
+DlgTextareaName	: "Nimi",
+DlgTextareaCols	: "Sarakkeita",
+DlgTextareaRows	: "Rivejä",
+
+// Text Field Dialog
+DlgTextName			: "Nimi",
+DlgTextValue		: "Arvo",
+DlgTextCharWidth	: "Leveys",
+DlgTextMaxChars		: "Maksimi merkkimäärä",
+DlgTextType			: "Tyyppi",
+DlgTextTypeText		: "Teksti",
+DlgTextTypePass		: "Salasana",
+
+// Hidden Field Dialog
+DlgHiddenName	: "Nimi",
+DlgHiddenValue	: "Arvo",
+
+// Bulleted List Dialog
+BulletedListProp	: "Luettelon ominaisuudet",
+NumberedListProp	: "Numeroinnin ominaisuudet",
+DlgLstStart			: "Alku",
+DlgLstType			: "Tyyppi",
+DlgLstTypeCircle	: "Kehä",
+DlgLstTypeDisc		: "Ympyrä",
+DlgLstTypeSquare	: "Neliö",
+DlgLstTypeNumbers	: "Numerot (1, 2, 3)",
+DlgLstTypeLCase		: "Pienet kirjaimet (a, b, c)",
+DlgLstTypeUCase		: "Isot kirjaimet (A, B, C)",
+DlgLstTypeSRoman	: "Pienet roomalaiset numerot (i, ii, iii)",
+DlgLstTypeLRoman	: "Isot roomalaiset numerot (Ii, II, III)",
+
+// Document Properties Dialog
+DlgDocGeneralTab	: "Yleiset",
+DlgDocBackTab		: "Tausta",
+DlgDocColorsTab		: "Värit ja marginaalit",
+DlgDocMetaTab		: "Meta-tieto",
+
+DlgDocPageTitle		: "Sivun nimi",
+DlgDocLangDir		: "Kielen suunta",
+DlgDocLangDirLTR	: "Vasemmalta oikealle (LTR)",
+DlgDocLangDirRTL	: "Oikealta vasemmalle (RTL)",
+DlgDocLangCode		: "Kielikoodi",
+DlgDocCharSet		: "Merkistökoodaus",
+DlgDocCharSetCE		: "Keskieurooppalainen",
+DlgDocCharSetCT		: "Kiina, perinteinen (Big5)",
+DlgDocCharSetCR		: "Kyrillinen",
+DlgDocCharSetGR		: "Kreikka",
+DlgDocCharSetJP		: "Japani",
+DlgDocCharSetKR		: "Korealainen",
+DlgDocCharSetTR		: "Turkkilainen",
+DlgDocCharSetUN		: "Unicode (UTF-8)",
+DlgDocCharSetWE		: "Länsieurooppalainen",
+DlgDocCharSetOther	: "Muu merkistökoodaus",
+
+DlgDocDocType		: "Dokumentin tyyppi",
+DlgDocDocTypeOther	: "Muu dokumentin tyyppi",
+DlgDocIncXHTML		: "Lisää XHTML julistukset",
+DlgDocBgColor		: "Taustaväri",
+DlgDocBgImage		: "Taustakuva",
+DlgDocBgNoScroll	: "Paikallaanpysyvä tausta",
+DlgDocCText			: "Teksti",
+DlgDocCLink			: "Linkki",
+DlgDocCVisited		: "Vierailtu linkki",
+DlgDocCActive		: "Aktiivinen linkki",
+DlgDocMargins		: "Sivun marginaalit",
+DlgDocMaTop			: "Ylä",
+DlgDocMaLeft		: "Vasen",
+DlgDocMaRight		: "Oikea",
+DlgDocMaBottom		: "Ala",
+DlgDocMeIndex		: "Hakusanat (pilkulla erotettuna)",
+DlgDocMeDescr		: "Kuvaus",
+DlgDocMeAuthor		: "Tekijä",
+DlgDocMeCopy		: "Tekijänoikeudet",
+DlgDocPreview		: "Esikatselu",
+
+// Templates Dialog
+Templates			: "Pohjat",
+DlgTemplatesTitle	: "Sisältöpohjat",
+DlgTemplatesSelMsg	: "Valitse pohja editoriin<br>(aiempi sisältö menetetään):",
+DlgTemplatesLoading	: "Ladataan listaa pohjista. Hetkinen...",
+DlgTemplatesNoTpl	: "(Ei määriteltyjä pohjia)",
+DlgTemplatesReplace	: "Korvaa editorin koko sisältö",
+
+// About Dialog
+DlgAboutAboutTab	: "Editorista",
+DlgAboutBrowserInfoTab	: "Selaimen tiedot",
+DlgAboutLicenseTab	: "Lisenssi",
+DlgAboutVersion		: "versio",
+DlgAboutInfo		: "Lisää tietoa osoitteesta"
+};


Property changes on: announcement/trunk/src/main/webapp/fckeditor/editor/lang/fi.js
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/webapp/fckeditor/editor/lang/fo.js
===================================================================
--- announcement/trunk/src/main/webapp/fckeditor/editor/lang/fo.js	                        (rev 0)
+++ announcement/trunk/src/main/webapp/fckeditor/editor/lang/fo.js	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,515 @@
+/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2008 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * Faroese language file.
+ */
+
+var FCKLang =
+{
+// Language direction : "ltr" (left to right) or "rtl" (right to left).
+Dir					: "ltr",
+
+ToolbarCollapse		: "Fjal amboðsbjálkan",
+ToolbarExpand		: "Vís amboðsbjálkan",
+
+// Toolbar Items and Context Menu
+Save				: "Goym",
+NewPage				: "Nýggj síða",
+Preview				: "Frumsýning",
+Cut					: "Kvett",
+Copy				: "Avrita",
+Paste				: "Innrita",
+PasteText			: "Innrita reinan tekst",
+PasteWord			: "Innrita frá Word",
+Print				: "Prenta",
+SelectAll			: "Markera alt",
+RemoveFormat		: "Strika sniðgeving",
+InsertLinkLbl		: "Tilknýti",
+InsertLink			: "Ger/broyt tilknýti",
+RemoveLink			: "Strika tilknýti",
+Anchor				: "Ger/broyt marknastein",
+AnchorDelete		: "Remove Anchor",	//MISSING
+InsertImageLbl		: "Myndir",
+InsertImage			: "Set inn/broyt mynd",
+InsertFlashLbl		: "Flash",
+InsertFlash			: "Set inn/broyt Flash",
+InsertTableLbl		: "Tabell",
+InsertTable			: "Set inn/broyt tabell",
+InsertLineLbl		: "Linja",
+InsertLine			: "Ger vatnrætta linju",
+InsertSpecialCharLbl: "Sertekn",
+InsertSpecialChar	: "Set inn sertekn",
+InsertSmileyLbl		: "Smiley",
+InsertSmiley		: "Set inn Smiley",
+About				: "Um FCKeditor",
+Bold				: "Feit skrift",
+Italic				: "Skráskrift",
+Underline			: "Undirstrikað",
+StrikeThrough		: "Yvirstrikað",
+Subscript			: "Lækkað skrift",
+Superscript			: "Hækkað skrift",
+LeftJustify			: "Vinstrasett",
+CenterJustify		: "Miðsett",
+RightJustify		: "Høgrasett",
+BlockJustify		: "Javnir tekstkantar",
+DecreaseIndent		: "Minka reglubrotarinntriv",
+IncreaseIndent		: "Økja reglubrotarinntriv",
+Blockquote			: "Blockquote",	//MISSING
+Undo				: "Angra",
+Redo				: "Vend aftur",
+NumberedListLbl		: "Talmerktur listi",
+NumberedList		: "Ger/strika talmerktan lista",
+BulletedListLbl		: "Punktmerktur listi",
+BulletedList		: "Ger/strika punktmerktan lista",
+ShowTableBorders	: "Vís tabellbordar",
+ShowDetails			: "Vís í smálutum",
+Style				: "Typografi",
+FontFormat			: "Skriftsnið",
+Font				: "Skrift",
+FontSize			: "Skriftstødd",
+TextColor			: "Tekstlitur",
+BGColor				: "Bakgrundslitur",
+Source				: "Kelda",
+Find				: "Leita",
+Replace				: "Yvirskriva",
+SpellCheck			: "Kanna stavseting",
+UniversalKeyboard	: "Knappaborð",
+PageBreakLbl		: "Síðuskift",
+PageBreak			: "Ger síðuskift",
+
+Form			: "Formur",
+Checkbox		: "Flugubein",
+RadioButton		: "Radioknøttur",
+TextField		: "Tekstteigur",
+Textarea		: "Tekstumráði",
+HiddenField		: "Fjaldur teigur",
+Button			: "Knøttur",
+SelectionField	: "Valskrá",
+ImageButton		: "Myndaknøttur",
+
+FitWindow		: "Set tekstviðgera til fulla stødd",
+ShowBlocks		: "Show Blocks",	//MISSING
+
+// Context Menu
+EditLink			: "Broyt tilknýti",
+CellCM				: "Meski",
+RowCM				: "Rað",
+ColumnCM			: "Kolonna",
+InsertRowAfter		: "Insert Row After",	//MISSING
+InsertRowBefore		: "Insert Row Before",	//MISSING
+DeleteRows			: "Strika røðir",
+InsertColumnAfter	: "Insert Column After",	//MISSING
+InsertColumnBefore	: "Insert Column Before",	//MISSING
+DeleteColumns		: "Strika kolonnur",
+InsertCellAfter		: "Insert Cell After",	//MISSING
+InsertCellBefore	: "Insert Cell Before",	//MISSING
+DeleteCells			: "Strika meskar",
+MergeCells			: "Flætta meskar",
+MergeRight			: "Merge Right",	//MISSING
+MergeDown			: "Merge Down",	//MISSING
+HorizontalSplitCell	: "Split Cell Horizontally",	//MISSING
+VerticalSplitCell	: "Split Cell Vertically",	//MISSING
+TableDelete			: "Strika tabell",
+CellProperties		: "Meskueginleikar",
+TableProperties		: "Tabelleginleikar",
+ImageProperties		: "Myndaeginleikar",
+FlashProperties		: "Flash eginleikar",
+
+AnchorProp			: "Eginleikar fyri marknastein",
+ButtonProp			: "Eginleikar fyri knøtt",
+CheckboxProp		: "Eginleikar fyri flugubein",
+HiddenFieldProp		: "Eginleikar fyri fjaldan teig",
+RadioButtonProp		: "Eginleikar fyri radioknøtt",
+ImageButtonProp		: "Eginleikar fyri myndaknøtt",
+TextFieldProp		: "Eginleikar fyri tekstteig",
+SelectionFieldProp	: "Eginleikar fyri valskrá",
+TextareaProp		: "Eginleikar fyri tekstumráði",
+FormProp			: "Eginleikar fyri Form",
+
+FontFormats			: "Vanligt;Sniðgivið;Adressa;Yvirskrift 1;Yvirskrift 2;Yvirskrift 3;Yvirskrift 4;Yvirskrift 5;Yvirskrift 6",
+
+// Alerts and Messages
+ProcessingXHTML		: "XHTML verður viðgjørt. Bíða við...",
+Done				: "Liðugt",
+PasteWordConfirm	: "Teksturin, royndur verður at seta inn, tykist at stava frá Word. Vilt tú reinsa tekstin, áðrenn hann verður settur inn?",
+NotCompatiblePaste	: "Hetta er bert tøkt í Internet Explorer 5.5 og nýggjari. Vilt tú seta tekstin inn kortini - óreinsaðan?",
+UnknownToolbarItem	: "Ókendur lutur í amboðsbjálkanum \"%1\"",
+UnknownCommand		: "Ókend kommando \"%1\"",
+NotImplemented		: "Hetta er ikki tøkt í hesi útgávuni",
+UnknownToolbarSet	: "Amboðsbjálkin \"%1\" finst ikki",
+NoActiveX			: "Trygdaruppsetingin í alnótskaganum kann sum er avmarka onkrar hentleikar í tekstviðgeranum. Tú mást loyva møguleikanum \"Run/Kør ActiveX controls and plug-ins\". Tú kanst uppliva feilir og ávaringar um tvørrandi hentleikar.",
+BrowseServerBlocked : "Ambætarakagin kundi ikki opnast. Tryggja tær, at allar pop-up forðingar eru óvirknar.",
+DialogBlocked		: "Tað eyðnaðist ikki at opna samskiftisrútin. Tryggja tær, at allar pop-up forðingar eru óvirknar.",
+
+// Dialogs
+DlgBtnOK			: "Góðkent",
+DlgBtnCancel		: "Avlýst",
+DlgBtnClose			: "Lat aftur",
+DlgBtnBrowseServer	: "Ambætarakagi",
+DlgAdvancedTag		: "Fjølbroytt",
+DlgOpOther			: "<Annað>",
+DlgInfoTab			: "Upplýsingar",
+DlgAlertUrl			: "Vinarliga veit ein URL",
+
+// General Dialogs Labels
+DlgGenNotSet		: "<ikki sett>",
+DlgGenId			: "Id",
+DlgGenLangDir		: "Tekstkós",
+DlgGenLangDirLtr	: "Frá vinstru til høgru (LTR)",
+DlgGenLangDirRtl	: "Frá høgru til vinstru (RTL)",
+DlgGenLangCode		: "Málkoda",
+DlgGenAccessKey		: "Snarvegisknappur",
+DlgGenName			: "Navn",
+DlgGenTabIndex		: "Inntriv indeks",
+DlgGenLongDescr		: "Víðkað URL frágreiðing",
+DlgGenClass			: "Typografi klassar",
+DlgGenTitle			: "Vegleiðandi heiti",
+DlgGenContType		: "Vegleiðandi innihaldsslag",
+DlgGenLinkCharset	: "Atknýtt teknsett",
+DlgGenStyle			: "Typografi",
+
+// Image Dialog
+DlgImgTitle			: "Myndaeginleikar",
+DlgImgInfoTab		: "Myndaupplýsingar",
+DlgImgBtnUpload		: "Send til ambætaran",
+DlgImgURL			: "URL",
+DlgImgUpload		: "Send",
+DlgImgAlt			: "Alternativur tekstur",
+DlgImgWidth			: "Breidd",
+DlgImgHeight		: "Hædd",
+DlgImgLockRatio		: "Læs lutfallið",
+DlgBtnResetSize		: "Upprunastødd",
+DlgImgBorder		: "Bordi",
+DlgImgHSpace		: "Høgri breddi",
+DlgImgVSpace		: "Vinstri breddi",
+DlgImgAlign			: "Justering",
+DlgImgAlignLeft		: "Vinstra",
+DlgImgAlignAbsBottom: "Abs botnur",
+DlgImgAlignAbsMiddle: "Abs miðja",
+DlgImgAlignBaseline	: "Basislinja",
+DlgImgAlignBottom	: "Botnur",
+DlgImgAlignMiddle	: "Miðja",
+DlgImgAlignRight	: "Høgra",
+DlgImgAlignTextTop	: "Tekst toppur",
+DlgImgAlignTop		: "Ovast",
+DlgImgPreview		: "Frumsýning",
+DlgImgAlertUrl		: "Rita slóðina til myndina",
+DlgImgLinkTab		: "Tilknýti",
+
+// Flash Dialog
+DlgFlashTitle		: "Flash eginleikar",
+DlgFlashChkPlay		: "Avspælingin byrjar sjálv",
+DlgFlashChkLoop		: "Endurspæl",
+DlgFlashChkMenu		: "Ger Flash skrá virkna",
+DlgFlashScale		: "Skalering",
+DlgFlashScaleAll	: "Vís alt",
+DlgFlashScaleNoBorder	: "Eingin bordi",
+DlgFlashScaleFit	: "Neyv skalering",
+
+// Link Dialog
+DlgLnkWindowTitle	: "Tilknýti",
+DlgLnkInfoTab		: "Tilknýtis upplýsingar",
+DlgLnkTargetTab		: "Mál",
+
+DlgLnkType			: "Tilknýtisslag",
+DlgLnkTypeURL		: "URL",
+DlgLnkTypeAnchor	: "Tilknýti til marknastein í tekstinum",
+DlgLnkTypeEMail		: "Teldupostur",
+DlgLnkProto			: "Protokoll",
+DlgLnkProtoOther	: "<Annað>",
+DlgLnkURL			: "URL",
+DlgLnkAnchorSel		: "Vel ein marknastein",
+DlgLnkAnchorByName	: "Eftir navni á marknasteini",
+DlgLnkAnchorById	: "Eftir element Id",
+DlgLnkNoAnchors		: "(Eingir marknasteinar eru í hesum dokumentið)",
+DlgLnkEMail			: "Teldupost-adressa",
+DlgLnkEMailSubject	: "Evni",
+DlgLnkEMailBody		: "Breyðtekstur",
+DlgLnkUpload		: "Send til ambætaran",
+DlgLnkBtnUpload		: "Send til ambætaran",
+
+DlgLnkTarget		: "Mál",
+DlgLnkTargetFrame	: "<ramma>",
+DlgLnkTargetPopup	: "<popup vindeyga>",
+DlgLnkTargetBlank	: "Nýtt vindeyga (_blank)",
+DlgLnkTargetParent	: "Upphavliga vindeygað (_parent)",
+DlgLnkTargetSelf	: "Sama vindeygað (_self)",
+DlgLnkTargetTop		: "Alt vindeygað (_top)",
+DlgLnkTargetFrameName	: "Vís navn vindeygans",
+DlgLnkPopWinName	: "Popup vindeygans navn",
+DlgLnkPopWinFeat	: "Popup vindeygans víðkaðu eginleikar",
+DlgLnkPopResize		: "Kann broyta stødd",
+DlgLnkPopLocation	: "Adressulinja",
+DlgLnkPopMenu		: "Skrábjálki",
+DlgLnkPopScroll		: "Rullibjálki",
+DlgLnkPopStatus		: "Støðufrágreiðingarbjálki",
+DlgLnkPopToolbar	: "Amboðsbjálki",
+DlgLnkPopFullScrn	: "Fullur skermur (IE)",
+DlgLnkPopDependent	: "Bundið (Netscape)",
+DlgLnkPopWidth		: "Breidd",
+DlgLnkPopHeight		: "Hædd",
+DlgLnkPopLeft		: "Frástøða frá vinstru",
+DlgLnkPopTop		: "Frástøða frá íerva",
+
+DlnLnkMsgNoUrl		: "Vinarliga skriva tilknýti (URL)",
+DlnLnkMsgNoEMail	: "Vinarliga skriva teldupost-adressu",
+DlnLnkMsgNoAnchor	: "Vinarliga vel marknastein",
+DlnLnkMsgInvPopName	: "Popup navnið má byrja við bókstavi og má ikki hava millumrúm",
+
+// Color Dialog
+DlgColorTitle		: "Vel lit",
+DlgColorBtnClear	: "Strika alt",
+DlgColorHighlight	: "Framhevja",
+DlgColorSelected	: "Valt",
+
+// Smiley Dialog
+DlgSmileyTitle		: "Vel Smiley",
+
+// Special Character Dialog
+DlgSpecialCharTitle	: "Vel sertekn",
+
+// Table Dialog
+DlgTableTitle		: "Eginleikar fyri tabell",
+DlgTableRows		: "Røðir",
+DlgTableColumns		: "Kolonnur",
+DlgTableBorder		: "Bordabreidd",
+DlgTableAlign		: "Justering",
+DlgTableAlignNotSet	: "<Einki valt>",
+DlgTableAlignLeft	: "Vinstrasett",
+DlgTableAlignCenter	: "Miðsett",
+DlgTableAlignRight	: "Høgrasett",
+DlgTableWidth		: "Breidd",
+DlgTableWidthPx		: "pixels",
+DlgTableWidthPc		: "prosent",
+DlgTableHeight		: "Hædd",
+DlgTableCellSpace	: "Fjarstøða millum meskar",
+DlgTableCellPad		: "Meskubreddi",
+DlgTableCaption		: "Tabellfrágreiðing",
+DlgTableSummary		: "Samandráttur",
+
+// Table Cell Dialog
+DlgCellTitle		: "Mesku eginleikar",
+DlgCellWidth		: "Breidd",
+DlgCellWidthPx		: "pixels",
+DlgCellWidthPc		: "prosent",
+DlgCellHeight		: "Hædd",
+DlgCellWordWrap		: "Orðkloyving",
+DlgCellWordWrapNotSet	: "<Einki valt>",
+DlgCellWordWrapYes	: "Ja",
+DlgCellWordWrapNo	: "Nei",
+DlgCellHorAlign		: "Vatnrøtt justering",
+DlgCellHorAlignNotSet	: "<Einki valt>",
+DlgCellHorAlignLeft	: "Vinstrasett",
+DlgCellHorAlignCenter	: "Miðsett",
+DlgCellHorAlignRight: "Høgrasett",
+DlgCellVerAlign		: "Lodrøtt justering",
+DlgCellVerAlignNotSet	: "<Ikki sett>",
+DlgCellVerAlignTop	: "Ovast",
+DlgCellVerAlignMiddle	: "Miðjan",
+DlgCellVerAlignBottom	: "Niðast",
+DlgCellVerAlignBaseline	: "Basislinja",
+DlgCellRowSpan		: "Røðir, meskin fevnir um",
+DlgCellCollSpan		: "Kolonnur, meskin fevnir um",
+DlgCellBackColor	: "Bakgrundslitur",
+DlgCellBorderColor	: "Litur á borda",
+DlgCellBtnSelect	: "Vel...",
+
+// Find and Replace Dialog
+DlgFindAndReplaceTitle	: "Find and Replace",	//MISSING
+
+// Find Dialog
+DlgFindTitle		: "Finn",
+DlgFindFindBtn		: "Finn",
+DlgFindNotFoundMsg	: "Leititeksturin varð ikki funnin",
+
+// Replace Dialog
+DlgReplaceTitle			: "Yvirskriva",
+DlgReplaceFindLbl		: "Finn:",
+DlgReplaceReplaceLbl	: "Yvirskriva við:",
+DlgReplaceCaseChk		: "Munur á stórum og smáðum bókstavum",
+DlgReplaceReplaceBtn	: "Yvirskriva",
+DlgReplaceReplAllBtn	: "Yvirskriva alt",
+DlgReplaceWordChk		: "Bert heil orð",
+
+// Paste Operations / Dialog
+PasteErrorCut	: "Trygdaruppseting alnótskagans forðar tekstviðgeranum í at kvetta tekstin. vinarliga nýt knappaborðið til at kvetta tekstin (CTRL+X).",
+PasteErrorCopy	: "Trygdaruppseting alnótskagans forðar tekstviðgeranum í at avrita tekstin. Vinarliga nýt knappaborðið til at avrita tekstin (CTRL+C).",
+
+PasteAsText		: "Innrita som reinan tekst",
+PasteFromWord	: "Innrita fra Word",
+
+DlgPasteMsg2	: "Vinarliga koyr tekstin í hendan rútin við knappaborðinum (<strong>CTRL+V</strong>) og klikk á <strong>Góðtak</strong>.",
+DlgPasteSec		: "Because of your browser security settings, the editor is not able to access your clipboard data directly. You are required to paste it again in this window.",	//MISSING
+DlgPasteIgnoreFont		: "Forfjóna Font definitiónirnar",
+DlgPasteRemoveStyles	: "Strika Styles definitiónir",
+
+// Color Picker
+ColorAutomatic	: "Av sær sjálvum",
+ColorMoreColors	: "Fleiri litir...",
+
+// Document Properties
+DocProps		: "Eginleikar fyri dokument",
+
+// Anchor Dialog
+DlgAnchorTitle		: "Eginleikar fyri marknastein",
+DlgAnchorName		: "Heiti marknasteinsins",
+DlgAnchorErrorName	: "Vinarliga rita marknasteinsins heiti",
+
+// Speller Pages Dialog
+DlgSpellNotInDic		: "Finst ikki í orðabókini",
+DlgSpellChangeTo		: "Broyt til",
+DlgSpellBtnIgnore		: "Forfjóna",
+DlgSpellBtnIgnoreAll	: "Forfjóna alt",
+DlgSpellBtnReplace		: "Yvirskriva",
+DlgSpellBtnReplaceAll	: "Yvirskriva alt",
+DlgSpellBtnUndo			: "Angra",
+DlgSpellNoSuggestions	: "- Einki uppskot -",
+DlgSpellProgress		: "Rættstavarin arbeiðir...",
+DlgSpellNoMispell		: "Rættstavarain liðugur: Eingin feilur funnin",
+DlgSpellNoChanges		: "Rættstavarain liðugur: Einki orð varð broytt",
+DlgSpellOneChange		: "Rættstavarain liðugur: Eitt orð er broytt",
+DlgSpellManyChanges		: "Rættstavarain liðugur: %1 orð broytt",
+
+IeSpellDownload			: "Rættstavarin er ikki tøkur í tekstviðgeranum. Vilt tú heinta hann nú?",
+
+// Button Dialog
+DlgButtonText		: "Tekstur",
+DlgButtonType		: "Slag",
+DlgButtonTypeBtn	: "Knøttur",
+DlgButtonTypeSbm	: "Send",
+DlgButtonTypeRst	: "Nullstilla",
+
+// Checkbox and Radio Button Dialogs
+DlgCheckboxName		: "Navn",
+DlgCheckboxValue	: "Virði",
+DlgCheckboxSelected	: "Valt",
+
+// Form Dialog
+DlgFormName		: "Navn",
+DlgFormAction	: "Hending",
+DlgFormMethod	: "Háttur",
+
+// Select Field Dialog
+DlgSelectName		: "Navn",
+DlgSelectValue		: "Virði",
+DlgSelectSize		: "Stødd",
+DlgSelectLines		: "Linjur",
+DlgSelectChkMulti	: "Loyv fleiri valmøguleikum samstundis",
+DlgSelectOpAvail	: "Tøkir møguleikar",
+DlgSelectOpText		: "Tekstur",
+DlgSelectOpValue	: "Virði",
+DlgSelectBtnAdd		: "Legg afturat",
+DlgSelectBtnModify	: "Broyt",
+DlgSelectBtnUp		: "Upp",
+DlgSelectBtnDown	: "Niður",
+DlgSelectBtnSetValue : "Set sum valt virði",
+DlgSelectBtnDelete	: "Strika",
+
+// Textarea Dialog
+DlgTextareaName	: "Navn",
+DlgTextareaCols	: "kolonnur",
+DlgTextareaRows	: "røðir",
+
+// Text Field Dialog
+DlgTextName			: "Navn",
+DlgTextValue		: "Virði",
+DlgTextCharWidth	: "Breidd (sjónlig tekn)",
+DlgTextMaxChars		: "Mest loyvdu tekn",
+DlgTextType			: "Slag",
+DlgTextTypeText		: "Tekstur",
+DlgTextTypePass		: "Loyniorð",
+
+// Hidden Field Dialog
+DlgHiddenName	: "Navn",
+DlgHiddenValue	: "Virði",
+
+// Bulleted List Dialog
+BulletedListProp	: "Eginleikar fyri punktmerktan lista",
+NumberedListProp	: "Eginleikar fyri talmerktan lista",
+DlgLstStart			: "Byrjan",
+DlgLstType			: "Slag",
+DlgLstTypeCircle	: "Sirkul",
+DlgLstTypeDisc		: "Fyltur sirkul",
+DlgLstTypeSquare	: "Fjórhyrningur",
+DlgLstTypeNumbers	: "Talmerkt (1, 2, 3)",
+DlgLstTypeLCase		: "Smáir bókstavir (a, b, c)",
+DlgLstTypeUCase		: "Stórir bókstavir (A, B, C)",
+DlgLstTypeSRoman	: "Smá rómaratøl (i, ii, iii)",
+DlgLstTypeLRoman	: "Stór rómaratøl (I, II, III)",
+
+// Document Properties Dialog
+DlgDocGeneralTab	: "Generelt",
+DlgDocBackTab		: "Bakgrund",
+DlgDocColorsTab		: "Litir og breddar",
+DlgDocMetaTab		: "META-upplýsingar",
+
+DlgDocPageTitle		: "Síðuheiti",
+DlgDocLangDir		: "Tekstkós",
+DlgDocLangDirLTR	: "Frá vinstru móti høgru (LTR)",
+DlgDocLangDirRTL	: "Frá høgru móti vinstru (RTL)",
+DlgDocLangCode		: "Málkoda",
+DlgDocCharSet		: "Teknsett koda",
+DlgDocCharSetCE		: "Miðeuropa",
+DlgDocCharSetCT		: "Kinesiskt traditionelt (Big5)",
+DlgDocCharSetCR		: "Cyrilliskt",
+DlgDocCharSetGR		: "Grikst",
+DlgDocCharSetJP		: "Japanskt",
+DlgDocCharSetKR		: "Koreanskt",
+DlgDocCharSetTR		: "Turkiskt",
+DlgDocCharSetUN		: "UNICODE (UTF-8)",
+DlgDocCharSetWE		: "Vestureuropa",
+DlgDocCharSetOther	: "Onnur teknsett koda",
+
+DlgDocDocType		: "Dokumentslag yvirskrift",
+DlgDocDocTypeOther	: "Annað dokumentslag yvirskrift",
+DlgDocIncXHTML		: "Viðfest XHTML deklaratiónir",
+DlgDocBgColor		: "Bakgrundslitur",
+DlgDocBgImage		: "Leið til bakgrundsmynd (URL)",
+DlgDocBgNoScroll	: "Læst bakgrund (rullar ikki)",
+DlgDocCText			: "Tekstur",
+DlgDocCLink			: "Tilknýti",
+DlgDocCVisited		: "Vitjaði tilknýti",
+DlgDocCActive		: "Virkin tilknýti",
+DlgDocMargins		: "Síðubreddar",
+DlgDocMaTop			: "Ovast",
+DlgDocMaLeft		: "Vinstra",
+DlgDocMaRight		: "Høgra",
+DlgDocMaBottom		: "Niðast",
+DlgDocMeIndex		: "Dokument index lyklaorð (sundurbýtt við komma)",
+DlgDocMeDescr		: "Dokumentlýsing",
+DlgDocMeAuthor		: "Høvundur",
+DlgDocMeCopy		: "Upphavsrættindi",
+DlgDocPreview		: "Frumsýning",
+
+// Templates Dialog
+Templates			: "Skabelónir",
+DlgTemplatesTitle	: "Innihaldsskabelónir",
+DlgTemplatesSelMsg	: "Vinarliga vel ta skabelón, ið skal opnast í tekstviðgeranum<br>(Hetta yvirskrivar núverandi innihald):",
+DlgTemplatesLoading	: "Heinti yvirlit yvir skabelónir. Vinarliga bíða við...",
+DlgTemplatesNoTpl	: "(Ongar skabelónir tøkar)",
+DlgTemplatesReplace	: "Yvirskriva núverandi innihald",
+
+// About Dialog
+DlgAboutAboutTab	: "Um",
+DlgAboutBrowserInfoTab	: "Upplýsingar um alnótskagan",
+DlgAboutLicenseTab	: "License",
+DlgAboutVersion		: "version",
+DlgAboutInfo		: "Fyri fleiri upplýsingar, far til"
+};


Property changes on: announcement/trunk/src/main/webapp/fckeditor/editor/lang/fo.js
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/webapp/fckeditor/editor/lang/fr-ca.js
===================================================================
--- announcement/trunk/src/main/webapp/fckeditor/editor/lang/fr-ca.js	                        (rev 0)
+++ announcement/trunk/src/main/webapp/fckeditor/editor/lang/fr-ca.js	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,515 @@
+/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2008 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * Canadian French language file.
+ */
+
+var FCKLang =
+{
+// Language direction : "ltr" (left to right) or "rtl" (right to left).
+Dir					: "ltr",
+
+ToolbarCollapse		: "Masquer Outils",
+ToolbarExpand		: "Afficher Outils",
+
+// Toolbar Items and Context Menu
+Save				: "Sauvegarder",
+NewPage				: "Nouvelle page",
+Preview				: "Previsualiser",
+Cut					: "Couper",
+Copy				: "Copier",
+Paste				: "Coller",
+PasteText			: "Coller en tant que texte",
+PasteWord			: "Coller en tant que Word (formaté)",
+Print				: "Imprimer",
+SelectAll			: "Tout sélectionner",
+RemoveFormat		: "Supprimer le formatage",
+InsertLinkLbl		: "Lien",
+InsertLink			: "Insérer/modifier le lien",
+RemoveLink			: "Supprimer le lien",
+Anchor				: "Insérer/modifier l'ancre",
+AnchorDelete		: "Supprimer l'ancre",
+InsertImageLbl		: "Image",
+InsertImage			: "Insérer/modifier l'image",
+InsertFlashLbl		: "Animation Flash",
+InsertFlash			: "Insérer/modifier l'animation Flash",
+InsertTableLbl		: "Tableau",
+InsertTable			: "Insérer/modifier le tableau",
+InsertLineLbl		: "Séparateur",
+InsertLine			: "Insérer un séparateur",
+InsertSpecialCharLbl: "Caractères spéciaux",
+InsertSpecialChar	: "Insérer un caractère spécial",
+InsertSmileyLbl		: "Emoticon",
+InsertSmiley		: "Insérer un Emoticon",
+About				: "A propos de FCKeditor",
+Bold				: "Gras",
+Italic				: "Italique",
+Underline			: "Souligné",
+StrikeThrough		: "Barrer",
+Subscript			: "Indice",
+Superscript			: "Exposant",
+LeftJustify			: "Aligner à gauche",
+CenterJustify		: "Centrer",
+RightJustify		: "Aligner à Droite",
+BlockJustify		: "Texte justifié",
+DecreaseIndent		: "Diminuer le retrait",
+IncreaseIndent		: "Augmenter le retrait",
+Blockquote			: "Citation",
+Undo				: "Annuler",
+Redo				: "Refaire",
+NumberedListLbl		: "Liste numérotée",
+NumberedList		: "Insérer/supprimer la liste numérotée",
+BulletedListLbl		: "Liste à puces",
+BulletedList		: "Insérer/supprimer la liste à puces",
+ShowTableBorders	: "Afficher les bordures du tableau",
+ShowDetails			: "Afficher les caractères invisibles",
+Style				: "Style",
+FontFormat			: "Format",
+Font				: "Police",
+FontSize			: "Taille",
+TextColor			: "Couleur de caractère",
+BGColor				: "Couleur de fond",
+Source				: "Source",
+Find				: "Chercher",
+Replace				: "Remplacer",
+SpellCheck			: "Orthographe",
+UniversalKeyboard	: "Clavier universel",
+PageBreakLbl		: "Saut de page",
+PageBreak			: "Insérer un saut de page",
+
+Form			: "Formulaire",
+Checkbox		: "Case à cocher",
+RadioButton		: "Bouton radio",
+TextField		: "Champ texte",
+Textarea		: "Zone de texte",
+HiddenField		: "Champ caché",
+Button			: "Bouton",
+SelectionField	: "Champ de sélection",
+ImageButton		: "Bouton image",
+
+FitWindow		: "Edition pleine page",
+ShowBlocks		: "Afficher les blocs",
+
+// Context Menu
+EditLink			: "Modifier le lien",
+CellCM				: "Cellule",
+RowCM				: "Ligne",
+ColumnCM			: "Colonne",
+InsertRowAfter		: "Insérer une ligne après",
+InsertRowBefore		: "Insérer une ligne avant",
+DeleteRows			: "Supprimer des lignes",
+InsertColumnAfter	: "Insérer une colonne après",
+InsertColumnBefore	: "Insérer une colonne avant",
+DeleteColumns		: "Supprimer des colonnes",
+InsertCellAfter		: "Insérer une cellule après",
+InsertCellBefore	: "Insérer une cellule avant",
+DeleteCells			: "Supprimer des cellules",
+MergeCells			: "Fusionner les cellules",
+MergeRight			: "Fusionner à droite",
+MergeDown			: "Fusionner en bas",
+HorizontalSplitCell	: "Scinder la cellule horizontalement",
+VerticalSplitCell	: "Scinder la cellule verticalement",
+TableDelete			: "Supprimer le tableau",
+CellProperties		: "Propriétés de cellule",
+TableProperties		: "Propriétés du tableau",
+ImageProperties		: "Propriétés de l'image",
+FlashProperties		: "Propriétés de l'animation Flash",
+
+AnchorProp			: "Propriétés de l'ancre",
+ButtonProp			: "Propriétés du bouton",
+CheckboxProp		: "Propriétés de la case à cocher",
+HiddenFieldProp		: "Propriétés du champ caché",
+RadioButtonProp		: "Propriétés du bouton radio",
+ImageButtonProp		: "Propriétés du bouton image",
+TextFieldProp		: "Propriétés du champ texte",
+SelectionFieldProp	: "Propriétés de la liste/du menu",
+TextareaProp		: "Propriétés de la zone de texte",
+FormProp			: "Propriétés du formulaire",
+
+FontFormats			: "Normal;Formaté;Adresse;En-tête 1;En-tête 2;En-tête 3;En-tête 4;En-tête 5;En-tête 6;Normal (DIV)",
+
+// Alerts and Messages
+ProcessingXHTML		: "Calcul XHTML. Veuillez patienter...",
+Done				: "Terminé",
+PasteWordConfirm	: "Le texte à coller semble provenir de Word. Désirez-vous le nettoyer avant de coller?",
+NotCompatiblePaste	: "Cette commande nécessite Internet Explorer version 5.5 et plus. Souhaitez-vous coller sans nettoyage?",
+UnknownToolbarItem	: "Élément de barre d'outil inconnu \"%1\"",
+UnknownCommand		: "Nom de commande inconnu \"%1\"",
+NotImplemented		: "Commande indisponible",
+UnknownToolbarSet	: "La barre d'outils \"%1\" n'existe pas",
+NoActiveX			: "Les paramètres de sécurité de votre navigateur peuvent limiter quelques fonctionnalités de l'éditeur. Veuillez activer l'option \"Exécuter les contrôles ActiveX et les plug-ins\". Il se peut que vous rencontriez des erreurs et remarquiez quelques limitations.",
+BrowseServerBlocked : "Le navigateur n'a pas pu être ouvert. Assurez-vous que les bloqueurs de popups soient désactivés.",
+DialogBlocked		: "La fenêtre de dialogue n'a pas pu s'ouvrir. Assurez-vous que les bloqueurs de popups soient désactivés.",
+
+// Dialogs
+DlgBtnOK			: "OK",
+DlgBtnCancel		: "Annuler",
+DlgBtnClose			: "Fermer",
+DlgBtnBrowseServer	: "Parcourir le serveur",
+DlgAdvancedTag		: "Avancée",
+DlgOpOther			: "<autre>",
+DlgInfoTab			: "Info",
+DlgAlertUrl			: "Veuillez saisir l'URL",
+
+// General Dialogs Labels
+DlgGenNotSet		: "<Par défaut>",
+DlgGenId			: "Id",
+DlgGenLangDir		: "Sens d'écriture",
+DlgGenLangDirLtr	: "De gauche à droite (LTR)",
+DlgGenLangDirRtl	: "De droite à gauche (RTL)",
+DlgGenLangCode		: "Code langue",
+DlgGenAccessKey		: "Équivalent clavier",
+DlgGenName			: "Nom",
+DlgGenTabIndex		: "Ordre de tabulation",
+DlgGenLongDescr		: "URL de description longue",
+DlgGenClass			: "Classes de feuilles de style",
+DlgGenTitle			: "Titre",
+DlgGenContType		: "Type de contenu",
+DlgGenLinkCharset	: "Encodage de caractère",
+DlgGenStyle			: "Style",
+
+// Image Dialog
+DlgImgTitle			: "Propriétés de l'image",
+DlgImgInfoTab		: "Informations sur l'image",
+DlgImgBtnUpload		: "Envoyer sur le serveur",
+DlgImgURL			: "URL",
+DlgImgUpload		: "Télécharger",
+DlgImgAlt			: "Texte de remplacement",
+DlgImgWidth			: "Largeur",
+DlgImgHeight		: "Hauteur",
+DlgImgLockRatio		: "Garder les proportions",
+DlgBtnResetSize		: "Taille originale",
+DlgImgBorder		: "Bordure",
+DlgImgHSpace		: "Espacement horizontal",
+DlgImgVSpace		: "Espacement vertical",
+DlgImgAlign			: "Alignement",
+DlgImgAlignLeft		: "Gauche",
+DlgImgAlignAbsBottom: "Abs Bas",
+DlgImgAlignAbsMiddle: "Abs Milieu",
+DlgImgAlignBaseline	: "Bas du texte",
+DlgImgAlignBottom	: "Bas",
+DlgImgAlignMiddle	: "Milieu",
+DlgImgAlignRight	: "Droite",
+DlgImgAlignTextTop	: "Haut du texte",
+DlgImgAlignTop		: "Haut",
+DlgImgPreview		: "Prévisualisation",
+DlgImgAlertUrl		: "Veuillez saisir l'URL de l'image",
+DlgImgLinkTab		: "Lien",
+
+// Flash Dialog
+DlgFlashTitle		: "Propriétés de l'animation Flash",
+DlgFlashChkPlay		: "Lecture automatique",
+DlgFlashChkLoop		: "Boucle",
+DlgFlashChkMenu		: "Activer le menu Flash",
+DlgFlashScale		: "Affichage",
+DlgFlashScaleAll	: "Par défaut (tout montrer)",
+DlgFlashScaleNoBorder	: "Sans bordure",
+DlgFlashScaleFit	: "Ajuster aux dimensions",
+
+// Link Dialog
+DlgLnkWindowTitle	: "Propriétés du lien",
+DlgLnkInfoTab		: "Informations sur le lien",
+DlgLnkTargetTab		: "Destination",
+
+DlgLnkType			: "Type de lien",
+DlgLnkTypeURL		: "URL",
+DlgLnkTypeAnchor	: "Ancre dans cette page",
+DlgLnkTypeEMail		: "E-Mail",
+DlgLnkProto			: "Protocole",
+DlgLnkProtoOther	: "<autre>",
+DlgLnkURL			: "URL",
+DlgLnkAnchorSel		: "Sélectionner une ancre",
+DlgLnkAnchorByName	: "Par nom",
+DlgLnkAnchorById	: "Par id",
+DlgLnkNoAnchors		: "(Pas d'ancre disponible dans le document)",
+DlgLnkEMail			: "Adresse E-Mail",
+DlgLnkEMailSubject	: "Sujet du message",
+DlgLnkEMailBody		: "Corps du message",
+DlgLnkUpload		: "Télécharger",
+DlgLnkBtnUpload		: "Envoyer sur le serveur",
+
+DlgLnkTarget		: "Destination",
+DlgLnkTargetFrame	: "<Cadre>",
+DlgLnkTargetPopup	: "<fenêtre popup>",
+DlgLnkTargetBlank	: "Nouvelle fenêtre (_blank)",
+DlgLnkTargetParent	: "Fenêtre mère (_parent)",
+DlgLnkTargetSelf	: "Même fenêtre (_self)",
+DlgLnkTargetTop		: "Fenêtre supérieure (_top)",
+DlgLnkTargetFrameName	: "Nom du cadre de destination",
+DlgLnkPopWinName	: "Nom de la fenêtre popup",
+DlgLnkPopWinFeat	: "Caractéristiques de la fenêtre popup",
+DlgLnkPopResize		: "Taille modifiable",
+DlgLnkPopLocation	: "Barre d'adresses",
+DlgLnkPopMenu		: "Barre de menu",
+DlgLnkPopScroll		: "Barres de défilement",
+DlgLnkPopStatus		: "Barre d'état",
+DlgLnkPopToolbar	: "Barre d'outils",
+DlgLnkPopFullScrn	: "Plein écran (IE)",
+DlgLnkPopDependent	: "Dépendante (Netscape)",
+DlgLnkPopWidth		: "Largeur",
+DlgLnkPopHeight		: "Hauteur",
+DlgLnkPopLeft		: "Position à partir de la gauche",
+DlgLnkPopTop		: "Position à partir du haut",
+
+DlnLnkMsgNoUrl		: "Veuillez saisir l'URL",
+DlnLnkMsgNoEMail	: "Veuillez saisir l'adresse e-mail",
+DlnLnkMsgNoAnchor	: "Veuillez sélectionner une ancre",
+DlnLnkMsgInvPopName	: "Le nom de la fenêtre popup doit commencer par une lettre et ne doit pas contenir d'espace",
+
+// Color Dialog
+DlgColorTitle		: "Sélectionner",
+DlgColorBtnClear	: "Effacer",
+DlgColorHighlight	: "Prévisualisation",
+DlgColorSelected	: "Sélectionné",
+
+// Smiley Dialog
+DlgSmileyTitle		: "Insérer un Emoticon",
+
+// Special Character Dialog
+DlgSpecialCharTitle	: "Insérer un caractère spécial",
+
+// Table Dialog
+DlgTableTitle		: "Propriétés du tableau",
+DlgTableRows		: "Lignes",
+DlgTableColumns		: "Colonnes",
+DlgTableBorder		: "Taille de la bordure",
+DlgTableAlign		: "Alignement",
+DlgTableAlignNotSet	: "<Par défaut>",
+DlgTableAlignLeft	: "Gauche",
+DlgTableAlignCenter	: "Centré",
+DlgTableAlignRight	: "Droite",
+DlgTableWidth		: "Largeur",
+DlgTableWidthPx		: "pixels",
+DlgTableWidthPc		: "pourcentage",
+DlgTableHeight		: "Hauteur",
+DlgTableCellSpace	: "Espacement",
+DlgTableCellPad		: "Contour",
+DlgTableCaption		: "Titre",
+DlgTableSummary		: "Résumé",
+
+// Table Cell Dialog
+DlgCellTitle		: "Propriétés de la cellule",
+DlgCellWidth		: "Largeur",
+DlgCellWidthPx		: "pixels",
+DlgCellWidthPc		: "pourcentage",
+DlgCellHeight		: "Hauteur",
+DlgCellWordWrap		: "Retour à la ligne",
+DlgCellWordWrapNotSet	: "<Par défaut>",
+DlgCellWordWrapYes	: "Oui",
+DlgCellWordWrapNo	: "Non",
+DlgCellHorAlign		: "Alignement horizontal",
+DlgCellHorAlignNotSet	: "<Par défaut>",
+DlgCellHorAlignLeft	: "Gauche",
+DlgCellHorAlignCenter	: "Centré",
+DlgCellHorAlignRight: "Droite",
+DlgCellVerAlign		: "Alignement vertical",
+DlgCellVerAlignNotSet	: "<Par défaut>",
+DlgCellVerAlignTop	: "Haut",
+DlgCellVerAlignMiddle	: "Milieu",
+DlgCellVerAlignBottom	: "Bas",
+DlgCellVerAlignBaseline	: "Bas du texte",
+DlgCellRowSpan		: "Lignes fusionnées",
+DlgCellCollSpan		: "Colonnes fusionnées",
+DlgCellBackColor	: "Couleur de fond",
+DlgCellBorderColor	: "Couleur de bordure",
+DlgCellBtnSelect	: "Sélectionner...",
+
+// Find and Replace Dialog
+DlgFindAndReplaceTitle	: "Chercher et Remplacer",
+
+// Find Dialog
+DlgFindTitle		: "Chercher",
+DlgFindFindBtn		: "Chercher",
+DlgFindNotFoundMsg	: "Le texte indiqué est introuvable.",
+
+// Replace Dialog
+DlgReplaceTitle			: "Remplacer",
+DlgReplaceFindLbl		: "Rechercher:",
+DlgReplaceReplaceLbl	: "Remplacer par:",
+DlgReplaceCaseChk		: "Respecter la casse",
+DlgReplaceReplaceBtn	: "Remplacer",
+DlgReplaceReplAllBtn	: "Tout remplacer",
+DlgReplaceWordChk		: "Mot entier",
+
+// Paste Operations / Dialog
+PasteErrorCut	: "Les paramètres de sécurité de votre navigateur empêchent l'éditeur de couper automatiquement vos données. Veuillez utiliser les équivalents claviers (Ctrl+X).",
+PasteErrorCopy	: "Les paramètres de sécurité de votre navigateur empêchent l'éditeur de copier automatiquement vos données. Veuillez utiliser les équivalents claviers (Ctrl+C).",
+
+PasteAsText		: "Coller comme texte",
+PasteFromWord	: "Coller à partir de Word",
+
+DlgPasteMsg2	: "Veuillez coller dans la zone ci-dessous en utilisant le clavier (<STRONG>Ctrl+V</STRONG>) et appuyer sur <STRONG>OK</STRONG>.",
+DlgPasteSec		: "A cause des paramètres de sécurité de votre navigateur, l'éditeur ne peut accéder au presse-papier directement. Vous devez coller à nouveau le contenu dans cette fenêtre.",
+DlgPasteIgnoreFont		: "Ignorer les polices de caractères",
+DlgPasteRemoveStyles	: "Supprimer les styles",
+
+// Color Picker
+ColorAutomatic	: "Automatique",
+ColorMoreColors	: "Plus de couleurs...",
+
+// Document Properties
+DocProps		: "Propriétés du document",
+
+// Anchor Dialog
+DlgAnchorTitle		: "Propriétés de l'ancre",
+DlgAnchorName		: "Nom de l'ancre",
+DlgAnchorErrorName	: "Veuillez saisir le nom de l'ancre",
+
+// Speller Pages Dialog
+DlgSpellNotInDic		: "Pas dans le dictionnaire",
+DlgSpellChangeTo		: "Changer en",
+DlgSpellBtnIgnore		: "Ignorer",
+DlgSpellBtnIgnoreAll	: "Ignorer tout",
+DlgSpellBtnReplace		: "Remplacer",
+DlgSpellBtnReplaceAll	: "Remplacer tout",
+DlgSpellBtnUndo			: "Annuler",
+DlgSpellNoSuggestions	: "- Pas de suggestion -",
+DlgSpellProgress		: "Vérification d'orthographe en cours...",
+DlgSpellNoMispell		: "Vérification d'orthographe terminée: pas d'erreur trouvée",
+DlgSpellNoChanges		: "Vérification d'orthographe terminée: Pas de modifications",
+DlgSpellOneChange		: "Vérification d'orthographe terminée: Un mot modifié",
+DlgSpellManyChanges		: "Vérification d'orthographe terminée: %1 mots modifiés",
+
+IeSpellDownload			: "Le Correcteur d'orthographe n'est pas installé. Souhaitez-vous le télécharger maintenant?",
+
+// Button Dialog
+DlgButtonText		: "Texte (Valeur)",
+DlgButtonType		: "Type",
+DlgButtonTypeBtn	: "Bouton",
+DlgButtonTypeSbm	: "Soumettre",
+DlgButtonTypeRst	: "Réinitialiser",
+
+// Checkbox and Radio Button Dialogs
+DlgCheckboxName		: "Nom",
+DlgCheckboxValue	: "Valeur",
+DlgCheckboxSelected	: "Sélectionné",
+
+// Form Dialog
+DlgFormName		: "Nom",
+DlgFormAction	: "Action",
+DlgFormMethod	: "Méthode",
+
+// Select Field Dialog
+DlgSelectName		: "Nom",
+DlgSelectValue		: "Valeur",
+DlgSelectSize		: "Taille",
+DlgSelectLines		: "lignes",
+DlgSelectChkMulti	: "Sélection multiple",
+DlgSelectOpAvail	: "Options disponibles",
+DlgSelectOpText		: "Texte",
+DlgSelectOpValue	: "Valeur",
+DlgSelectBtnAdd		: "Ajouter",
+DlgSelectBtnModify	: "Modifier",
+DlgSelectBtnUp		: "Monter",
+DlgSelectBtnDown	: "Descendre",
+DlgSelectBtnSetValue : "Valeur sélectionnée",
+DlgSelectBtnDelete	: "Supprimer",
+
+// Textarea Dialog
+DlgTextareaName	: "Nom",
+DlgTextareaCols	: "Colonnes",
+DlgTextareaRows	: "Lignes",
+
+// Text Field Dialog
+DlgTextName			: "Nom",
+DlgTextValue		: "Valeur",
+DlgTextCharWidth	: "Largeur en caractères",
+DlgTextMaxChars		: "Nombre maximum de caractères",
+DlgTextType			: "Type",
+DlgTextTypeText		: "Texte",
+DlgTextTypePass		: "Mot de passe",
+
+// Hidden Field Dialog
+DlgHiddenName	: "Nom",
+DlgHiddenValue	: "Valeur",
+
+// Bulleted List Dialog
+BulletedListProp	: "Propriétés de liste à puces",
+NumberedListProp	: "Propriétés de liste numérotée",
+DlgLstStart			: "Début",
+DlgLstType			: "Type",
+DlgLstTypeCircle	: "Cercle",
+DlgLstTypeDisc		: "Disque",
+DlgLstTypeSquare	: "Carré",
+DlgLstTypeNumbers	: "Nombres (1, 2, 3)",
+DlgLstTypeLCase		: "Lettres minuscules (a, b, c)",
+DlgLstTypeUCase		: "Lettres majuscules (A, B, C)",
+DlgLstTypeSRoman	: "Chiffres romains minuscules (i, ii, iii)",
+DlgLstTypeLRoman	: "Chiffres romains majuscules (I, II, III)",
+
+// Document Properties Dialog
+DlgDocGeneralTab	: "Général",
+DlgDocBackTab		: "Fond",
+DlgDocColorsTab		: "Couleurs et Marges",
+DlgDocMetaTab		: "Méta-Données",
+
+DlgDocPageTitle		: "Titre de la page",
+DlgDocLangDir		: "Sens d'écriture",
+DlgDocLangDirLTR	: "De la gauche vers la droite (LTR)",
+DlgDocLangDirRTL	: "De la droite vers la gauche (RTL)",
+DlgDocLangCode		: "Code langue",
+DlgDocCharSet		: "Encodage de caractère",
+DlgDocCharSetCE		: "Europe Centrale",
+DlgDocCharSetCT		: "Chinois Traditionnel (Big5)",
+DlgDocCharSetCR		: "Cyrillique",
+DlgDocCharSetGR		: "Grecque",
+DlgDocCharSetJP		: "Japonais",
+DlgDocCharSetKR		: "Coréen",
+DlgDocCharSetTR		: "Turcque",
+DlgDocCharSetUN		: "Unicode (UTF-8)",
+DlgDocCharSetWE		: "Occidental",
+DlgDocCharSetOther	: "Autre encodage de caractère",
+
+DlgDocDocType		: "Type de document",
+DlgDocDocTypeOther	: "Autre type de document",
+DlgDocIncXHTML		: "Inclure les déclarations XHTML",
+DlgDocBgColor		: "Couleur de fond",
+DlgDocBgImage		: "Image de fond",
+DlgDocBgNoScroll	: "Image fixe sans défilement",
+DlgDocCText			: "Texte",
+DlgDocCLink			: "Lien",
+DlgDocCVisited		: "Lien visité",
+DlgDocCActive		: "Lien activé",
+DlgDocMargins		: "Marges",
+DlgDocMaTop			: "Haut",
+DlgDocMaLeft		: "Gauche",
+DlgDocMaRight		: "Droite",
+DlgDocMaBottom		: "Bas",
+DlgDocMeIndex		: "Mots-clés (séparés par des virgules)",
+DlgDocMeDescr		: "Description",
+DlgDocMeAuthor		: "Auteur",
+DlgDocMeCopy		: "Copyright",
+DlgDocPreview		: "Prévisualisation",
+
+// Templates Dialog
+Templates			: "Modèles",
+DlgTemplatesTitle	: "Modèles de contenu",
+DlgTemplatesSelMsg	: "Sélectionner le modèle à ouvrir dans l'éditeur<br>(le contenu actuel sera remplacé):",
+DlgTemplatesLoading	: "Chargement de la liste des modèles. Veuillez patienter...",
+DlgTemplatesNoTpl	: "(Aucun modèle disponible)",
+DlgTemplatesReplace	: "Remplacer tout le contenu actuel",
+
+// About Dialog
+DlgAboutAboutTab	: "Á propos de",
+DlgAboutBrowserInfoTab	: "Navigateur",
+DlgAboutLicenseTab	: "License",
+DlgAboutVersion		: "Version",
+DlgAboutInfo		: "Pour plus d'informations, visiter"
+};


Property changes on: announcement/trunk/src/main/webapp/fckeditor/editor/lang/fr-ca.js
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/webapp/fckeditor/editor/lang/fr.js
===================================================================
--- announcement/trunk/src/main/webapp/fckeditor/editor/lang/fr.js	                        (rev 0)
+++ announcement/trunk/src/main/webapp/fckeditor/editor/lang/fr.js	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,515 @@
+/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2008 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * French language file.
+ */
+
+var FCKLang =
+{
+// Language direction : "ltr" (left to right) or "rtl" (right to left).
+Dir					: "ltr",
+
+ToolbarCollapse		: "Masquer Outils",
+ToolbarExpand		: "Afficher Outils",
+
+// Toolbar Items and Context Menu
+Save				: "Enregistrer",
+NewPage				: "Nouvelle page",
+Preview				: "Prévisualisation",
+Cut					: "Couper",
+Copy				: "Copier",
+Paste				: "Coller",
+PasteText			: "Coller comme texte",
+PasteWord			: "Coller de Word",
+Print				: "Imprimer",
+SelectAll			: "Tout sélectionner",
+RemoveFormat		: "Supprimer le format",
+InsertLinkLbl		: "Lien",
+InsertLink			: "Insérer/modifier le lien",
+RemoveLink			: "Supprimer le lien",
+Anchor				: "Insérer/modifier l'ancre",
+AnchorDelete		: "Supprimer l'ancre",
+InsertImageLbl		: "Image",
+InsertImage			: "Insérer/modifier l'image",
+InsertFlashLbl		: "Animation Flash",
+InsertFlash			: "Insérer/modifier l'animation Flash",
+InsertTableLbl		: "Tableau",
+InsertTable			: "Insérer/modifier le tableau",
+InsertLineLbl		: "Séparateur",
+InsertLine			: "Insérer un séparateur",
+InsertSpecialCharLbl: "Caractères spéciaux",
+InsertSpecialChar	: "Insérer un caractère spécial",
+InsertSmileyLbl		: "Smiley",
+InsertSmiley		: "Insérer un Smiley",
+About				: "A propos de FCKeditor",
+Bold				: "Gras",
+Italic				: "Italique",
+Underline			: "Souligné",
+StrikeThrough		: "Barré",
+Subscript			: "Indice",
+Superscript			: "Exposant",
+LeftJustify			: "Aligné à gauche",
+CenterJustify		: "Centré",
+RightJustify		: "Aligné à Droite",
+BlockJustify		: "Texte justifié",
+DecreaseIndent		: "Diminuer le retrait",
+IncreaseIndent		: "Augmenter le retrait",
+Blockquote			: "Citation",
+Undo				: "Annuler",
+Redo				: "Refaire",
+NumberedListLbl		: "Liste numérotée",
+NumberedList		: "Insérer/supprimer la liste numérotée",
+BulletedListLbl		: "Liste à puces",
+BulletedList		: "Insérer/supprimer la liste à puces",
+ShowTableBorders	: "Afficher les bordures du tableau",
+ShowDetails			: "Afficher les caractères invisibles",
+Style				: "Style",
+FontFormat			: "Format",
+Font				: "Police",
+FontSize			: "Taille",
+TextColor			: "Couleur de caractère",
+BGColor				: "Couleur de fond",
+Source				: "Source",
+Find				: "Chercher",
+Replace				: "Remplacer",
+SpellCheck			: "Orthographe",
+UniversalKeyboard	: "Clavier universel",
+PageBreakLbl		: "Saut de page",
+PageBreak			: "Insérer un saut de page",
+
+Form			: "Formulaire",
+Checkbox		: "Case à cocher",
+RadioButton		: "Bouton radio",
+TextField		: "Champ texte",
+Textarea		: "Zone de texte",
+HiddenField		: "Champ caché",
+Button			: "Bouton",
+SelectionField	: "Liste/menu",
+ImageButton		: "Bouton image",
+
+FitWindow		: "Edition pleine page",
+ShowBlocks		: "Afficher les blocs",
+
+// Context Menu
+EditLink			: "Modifier le lien",
+CellCM				: "Cellule",
+RowCM				: "Ligne",
+ColumnCM			: "Colonne",
+InsertRowAfter		: "Insérer une ligne après",
+InsertRowBefore		: "Insérer une ligne avant",
+DeleteRows			: "Supprimer des lignes",
+InsertColumnAfter	: "Insérer une colonne après",
+InsertColumnBefore	: "Insérer une colonne avant",
+DeleteColumns		: "Supprimer des colonnes",
+InsertCellAfter		: "Insérer une cellule après",
+InsertCellBefore	: "Insérer une cellule avant",
+DeleteCells			: "Supprimer des cellules",
+MergeCells			: "Fusionner les cellules",
+MergeRight			: "Fusionner à droite",
+MergeDown			: "Fusionner en bas",
+HorizontalSplitCell	: "Scinder la cellule horizontalement",
+VerticalSplitCell	: "Scinder la cellule verticalement",
+TableDelete			: "Supprimer le tableau",
+CellProperties		: "Propriétés de cellule",
+TableProperties		: "Propriétés du tableau",
+ImageProperties		: "Propriétés de l'image",
+FlashProperties		: "Propriétés de l'animation Flash",
+
+AnchorProp			: "Propriétés de l'ancre",
+ButtonProp			: "Propriétés du bouton",
+CheckboxProp		: "Propriétés de la case à cocher",
+HiddenFieldProp		: "Propriétés du champ caché",
+RadioButtonProp		: "Propriétés du bouton radio",
+ImageButtonProp		: "Propriétés du bouton image",
+TextFieldProp		: "Propriétés du champ texte",
+SelectionFieldProp	: "Propriétés de la liste/du menu",
+TextareaProp		: "Propriétés de la zone de texte",
+FormProp			: "Propriétés du formulaire",
+
+FontFormats			: "Normal;Formaté;Adresse;En-tête 1;En-tête 2;En-tête 3;En-tête 4;En-tête 5;En-tête 6;Normal (DIV)",
+
+// Alerts and Messages
+ProcessingXHTML		: "Calcul XHTML. Veuillez patienter...",
+Done				: "Terminé",
+PasteWordConfirm	: "Le texte à coller semble provenir de Word. Désirez-vous le nettoyer avant de coller?",
+NotCompatiblePaste	: "Cette commande nécessite Internet Explorer version 5.5 minimum. Souhaitez-vous coller sans nettoyage?",
+UnknownToolbarItem	: "Elément de barre d'outil inconnu \"%1\"",
+UnknownCommand		: "Nom de commande inconnu \"%1\"",
+NotImplemented		: "Commande non encore écrite",
+UnknownToolbarSet	: "La barre d'outils \"%1\" n'existe pas",
+NoActiveX			: "Les paramètres de sécurité de votre navigateur peuvent limiter quelques fonctionnalités de l'éditeur. Veuillez activer l'option \"Exécuter les contrôles ActiveX et les plug-ins\". Il se peut que vous rencontriez des erreurs et remarquiez quelques limitations.",
+BrowseServerBlocked : "Le navigateur n'a pas pu être ouvert. Assurez-vous que les bloqueurs de popups soient désactivés.",
+DialogBlocked		: "La fenêtre de dialogue n'a pas pu s'ouvrir. Assurez-vous que les bloqueurs de popups soient désactivés.",
+
+// Dialogs
+DlgBtnOK			: "OK",
+DlgBtnCancel		: "Annuler",
+DlgBtnClose			: "Fermer",
+DlgBtnBrowseServer	: "Parcourir le serveur",
+DlgAdvancedTag		: "Avancé",
+DlgOpOther			: "<Autre>",
+DlgInfoTab			: "Info",
+DlgAlertUrl			: "Veuillez saisir l'URL",
+
+// General Dialogs Labels
+DlgGenNotSet		: "<Par défaut>",
+DlgGenId			: "Id",
+DlgGenLangDir		: "Sens d'écriture",
+DlgGenLangDirLtr	: "De gauche à droite (LTR)",
+DlgGenLangDirRtl	: "De droite à gauche (RTL)",
+DlgGenLangCode		: "Code langue",
+DlgGenAccessKey		: "Equivalent clavier",
+DlgGenName			: "Nom",
+DlgGenTabIndex		: "Ordre de tabulation",
+DlgGenLongDescr		: "URL de description longue",
+DlgGenClass			: "Classes de feuilles de style",
+DlgGenTitle			: "Titre",
+DlgGenContType		: "Type de contenu",
+DlgGenLinkCharset	: "Encodage de caractère",
+DlgGenStyle			: "Style",
+
+// Image Dialog
+DlgImgTitle			: "Propriétés de l'image",
+DlgImgInfoTab		: "Informations sur l'image",
+DlgImgBtnUpload		: "Envoyer sur le serveur",
+DlgImgURL			: "URL",
+DlgImgUpload		: "Télécharger",
+DlgImgAlt			: "Texte de remplacement",
+DlgImgWidth			: "Largeur",
+DlgImgHeight		: "Hauteur",
+DlgImgLockRatio		: "Garder les proportions",
+DlgBtnResetSize		: "Taille originale",
+DlgImgBorder		: "Bordure",
+DlgImgHSpace		: "Espacement horizontal",
+DlgImgVSpace		: "Espacement vertical",
+DlgImgAlign			: "Alignement",
+DlgImgAlignLeft		: "Gauche",
+DlgImgAlignAbsBottom: "Abs Bas",
+DlgImgAlignAbsMiddle: "Abs Milieu",
+DlgImgAlignBaseline	: "Bas du texte",
+DlgImgAlignBottom	: "Bas",
+DlgImgAlignMiddle	: "Milieu",
+DlgImgAlignRight	: "Droite",
+DlgImgAlignTextTop	: "Haut du texte",
+DlgImgAlignTop		: "Haut",
+DlgImgPreview		: "Prévisualisation",
+DlgImgAlertUrl		: "Veuillez saisir l'URL de l'image",
+DlgImgLinkTab		: "Lien",
+
+// Flash Dialog
+DlgFlashTitle		: "Propriétés de l'animation Flash",
+DlgFlashChkPlay		: "Lecture automatique",
+DlgFlashChkLoop		: "Boucle",
+DlgFlashChkMenu		: "Activer le menu Flash",
+DlgFlashScale		: "Affichage",
+DlgFlashScaleAll	: "Par défaut (tout montrer)",
+DlgFlashScaleNoBorder	: "Sans bordure",
+DlgFlashScaleFit	: "Ajuster aux dimensions",
+
+// Link Dialog
+DlgLnkWindowTitle	: "Propriétés du lien",
+DlgLnkInfoTab		: "Informations sur le lien",
+DlgLnkTargetTab		: "Destination",
+
+DlgLnkType			: "Type de lien",
+DlgLnkTypeURL		: "URL",
+DlgLnkTypeAnchor	: "Ancre dans cette page",
+DlgLnkTypeEMail		: "E-Mail",
+DlgLnkProto			: "Protocole",
+DlgLnkProtoOther	: "<autre>",
+DlgLnkURL			: "URL",
+DlgLnkAnchorSel		: "Sélectionner une ancre",
+DlgLnkAnchorByName	: "Par nom",
+DlgLnkAnchorById	: "Par id",
+DlgLnkNoAnchors		: "(Pas d'ancre disponible dans le document)",
+DlgLnkEMail			: "Adresse E-Mail",
+DlgLnkEMailSubject	: "Sujet du message",
+DlgLnkEMailBody		: "Corps du message",
+DlgLnkUpload		: "Télécharger",
+DlgLnkBtnUpload		: "Envoyer sur le serveur",
+
+DlgLnkTarget		: "Destination",
+DlgLnkTargetFrame	: "<Cadre>",
+DlgLnkTargetPopup	: "<fenêtre popup>",
+DlgLnkTargetBlank	: "Nouvelle fenêtre (_blank)",
+DlgLnkTargetParent	: "Fenêtre mère (_parent)",
+DlgLnkTargetSelf	: "Même fenêtre (_self)",
+DlgLnkTargetTop		: "Fenêtre supérieure (_top)",
+DlgLnkTargetFrameName	: "Nom du cadre de destination",
+DlgLnkPopWinName	: "Nom de la fenêtre popup",
+DlgLnkPopWinFeat	: "Caractéristiques de la fenêtre popup",
+DlgLnkPopResize		: "Taille modifiable",
+DlgLnkPopLocation	: "Barre d'adresses",
+DlgLnkPopMenu		: "Barre de menu",
+DlgLnkPopScroll		: "Barres de défilement",
+DlgLnkPopStatus		: "Barre d'état",
+DlgLnkPopToolbar	: "Barre d'outils",
+DlgLnkPopFullScrn	: "Plein écran (IE)",
+DlgLnkPopDependent	: "Dépendante (Netscape)",
+DlgLnkPopWidth		: "Largeur",
+DlgLnkPopHeight		: "Hauteur",
+DlgLnkPopLeft		: "Position à partir de la gauche",
+DlgLnkPopTop		: "Position à partir du haut",
+
+DlnLnkMsgNoUrl		: "Veuillez saisir l'URL",
+DlnLnkMsgNoEMail	: "Veuillez saisir l'adresse e-mail",
+DlnLnkMsgNoAnchor	: "Veuillez sélectionner une ancre",
+DlnLnkMsgInvPopName	: "Le nom de la fenêtre popup doit commencer par une lettre et ne doit pas contenir d'espace",
+
+// Color Dialog
+DlgColorTitle		: "Sélectionner",
+DlgColorBtnClear	: "Effacer",
+DlgColorHighlight	: "Prévisualisation",
+DlgColorSelected	: "Sélectionné",
+
+// Smiley Dialog
+DlgSmileyTitle		: "Insérer un Smiley",
+
+// Special Character Dialog
+DlgSpecialCharTitle	: "Insérer un caractère spécial",
+
+// Table Dialog
+DlgTableTitle		: "Propriétés du tableau",
+DlgTableRows		: "Lignes",
+DlgTableColumns		: "Colonnes",
+DlgTableBorder		: "Bordure",
+DlgTableAlign		: "Alignement",
+DlgTableAlignNotSet	: "<Par défaut>",
+DlgTableAlignLeft	: "Gauche",
+DlgTableAlignCenter	: "Centré",
+DlgTableAlignRight	: "Droite",
+DlgTableWidth		: "Largeur",
+DlgTableWidthPx		: "pixels",
+DlgTableWidthPc		: "pourcentage",
+DlgTableHeight		: "Hauteur",
+DlgTableCellSpace	: "Espacement",
+DlgTableCellPad		: "Contour",
+DlgTableCaption		: "Titre",
+DlgTableSummary		: "Résumé",
+
+// Table Cell Dialog
+DlgCellTitle		: "Propriétés de la cellule",
+DlgCellWidth		: "Largeur",
+DlgCellWidthPx		: "pixels",
+DlgCellWidthPc		: "pourcentage",
+DlgCellHeight		: "Hauteur",
+DlgCellWordWrap		: "Retour à la ligne",
+DlgCellWordWrapNotSet	: "<Par défaut>",
+DlgCellWordWrapYes	: "Oui",
+DlgCellWordWrapNo	: "Non",
+DlgCellHorAlign		: "Alignement horizontal",
+DlgCellHorAlignNotSet	: "<Par défaut>",
+DlgCellHorAlignLeft	: "Gauche",
+DlgCellHorAlignCenter	: "Centré",
+DlgCellHorAlignRight: "Droite",
+DlgCellVerAlign		: "Alignement vertical",
+DlgCellVerAlignNotSet	: "<Par défaut>",
+DlgCellVerAlignTop	: "Haut",
+DlgCellVerAlignMiddle	: "Milieu",
+DlgCellVerAlignBottom	: "Bas",
+DlgCellVerAlignBaseline	: "Bas du texte",
+DlgCellRowSpan		: "Lignes fusionnées",
+DlgCellCollSpan		: "Colonnes fusionnées",
+DlgCellBackColor	: "Fond",
+DlgCellBorderColor	: "Bordure",
+DlgCellBtnSelect	: "Choisir...",
+
+// Find and Replace Dialog
+DlgFindAndReplaceTitle	: "Chercher et Remplacer",
+
+// Find Dialog
+DlgFindTitle		: "Chercher",
+DlgFindFindBtn		: "Chercher",
+DlgFindNotFoundMsg	: "Le texte indiqué est introuvable.",
+
+// Replace Dialog
+DlgReplaceTitle			: "Remplacer",
+DlgReplaceFindLbl		: "Rechercher:",
+DlgReplaceReplaceLbl	: "Remplacer par:",
+DlgReplaceCaseChk		: "Respecter la casse",
+DlgReplaceReplaceBtn	: "Remplacer",
+DlgReplaceReplAllBtn	: "Tout remplacer",
+DlgReplaceWordChk		: "Mot entier",
+
+// Paste Operations / Dialog
+PasteErrorCut	: "Les paramètres de sécurité de votre navigateur empêchent l'éditeur de couper automatiquement vos données. Veuillez utiliser les équivalents claviers (Ctrl+X).",
+PasteErrorCopy	: "Les paramètres de sécurité de votre navigateur empêchent l'éditeur de copier automatiquement vos données. Veuillez utiliser les équivalents claviers (Ctrl+C).",
+
+PasteAsText		: "Coller comme texte",
+PasteFromWord	: "Coller à partir de Word",
+
+DlgPasteMsg2	: "Veuillez coller dans la zone ci-dessous en utilisant le clavier (<STRONG>Ctrl+V</STRONG>) et cliquez sur <STRONG>OK</STRONG>.",
+DlgPasteSec		: "A cause des paramètres de sécurité de votre navigateur, l'éditeur ne peut accéder au presse-papier directement. Vous devez coller à nouveau le contenu dans cette fenêtre.",
+DlgPasteIgnoreFont		: "Ignorer les polices de caractères",
+DlgPasteRemoveStyles	: "Supprimer les styles",
+
+// Color Picker
+ColorAutomatic	: "Automatique",
+ColorMoreColors	: "Plus de couleurs...",
+
+// Document Properties
+DocProps		: "Propriétés du document",
+
+// Anchor Dialog
+DlgAnchorTitle		: "Propriétés de l'ancre",
+DlgAnchorName		: "Nom de l'ancre",
+DlgAnchorErrorName	: "Veuillez saisir le nom de l'ancre",
+
+// Speller Pages Dialog
+DlgSpellNotInDic		: "Pas dans le dictionnaire",
+DlgSpellChangeTo		: "Changer en",
+DlgSpellBtnIgnore		: "Ignorer",
+DlgSpellBtnIgnoreAll	: "Ignorer tout",
+DlgSpellBtnReplace		: "Remplacer",
+DlgSpellBtnReplaceAll	: "Remplacer tout",
+DlgSpellBtnUndo			: "Annuler",
+DlgSpellNoSuggestions	: "- Aucune suggestion -",
+DlgSpellProgress		: "Vérification d'orthographe en cours...",
+DlgSpellNoMispell		: "Vérification d'orthographe terminée: Aucune erreur trouvée",
+DlgSpellNoChanges		: "Vérification d'orthographe terminée: Pas de modifications",
+DlgSpellOneChange		: "Vérification d'orthographe terminée: Un mot modifié",
+DlgSpellManyChanges		: "Vérification d'orthographe terminée: %1 mots modifiés",
+
+IeSpellDownload			: "Le Correcteur n'est pas installé. Souhaitez-vous le télécharger maintenant?",
+
+// Button Dialog
+DlgButtonText		: "Texte (valeur)",
+DlgButtonType		: "Type",
+DlgButtonTypeBtn	: "Bouton",
+DlgButtonTypeSbm	: "Envoyer",
+DlgButtonTypeRst	: "Réinitialiser",
+
+// Checkbox and Radio Button Dialogs
+DlgCheckboxName		: "Nom",
+DlgCheckboxValue	: "Valeur",
+DlgCheckboxSelected	: "Sélectionné",
+
+// Form Dialog
+DlgFormName		: "Nom",
+DlgFormAction	: "Action",
+DlgFormMethod	: "Méthode",
+
+// Select Field Dialog
+DlgSelectName		: "Nom",
+DlgSelectValue		: "Valeur",
+DlgSelectSize		: "Taille",
+DlgSelectLines		: "lignes",
+DlgSelectChkMulti	: "Sélection multiple",
+DlgSelectOpAvail	: "Options disponibles",
+DlgSelectOpText		: "Texte",
+DlgSelectOpValue	: "Valeur",
+DlgSelectBtnAdd		: "Ajouter",
+DlgSelectBtnModify	: "Modifier",
+DlgSelectBtnUp		: "Monter",
+DlgSelectBtnDown	: "Descendre",
+DlgSelectBtnSetValue : "Valeur sélectionnée",
+DlgSelectBtnDelete	: "Supprimer",
+
+// Textarea Dialog
+DlgTextareaName	: "Nom",
+DlgTextareaCols	: "Colonnes",
+DlgTextareaRows	: "Lignes",
+
+// Text Field Dialog
+DlgTextName			: "Nom",
+DlgTextValue		: "Valeur",
+DlgTextCharWidth	: "Largeur en caractères",
+DlgTextMaxChars		: "Nombre maximum de caractères",
+DlgTextType			: "Type",
+DlgTextTypeText		: "Texte",
+DlgTextTypePass		: "Mot de passe",
+
+// Hidden Field Dialog
+DlgHiddenName	: "Nom",
+DlgHiddenValue	: "Valeur",
+
+// Bulleted List Dialog
+BulletedListProp	: "Propriétés de liste à puces",
+NumberedListProp	: "Propriétés de liste numérotée",
+DlgLstStart			: "Début",
+DlgLstType			: "Type",
+DlgLstTypeCircle	: "Cercle",
+DlgLstTypeDisc		: "Disque",
+DlgLstTypeSquare	: "Carré",
+DlgLstTypeNumbers	: "Nombres (1, 2, 3)",
+DlgLstTypeLCase		: "Lettres minuscules (a, b, c)",
+DlgLstTypeUCase		: "Lettres majuscules (A, B, C)",
+DlgLstTypeSRoman	: "Chiffres romains minuscules (i, ii, iii)",
+DlgLstTypeLRoman	: "Chiffres romains majuscules (I, II, III)",
+
+// Document Properties Dialog
+DlgDocGeneralTab	: "Général",
+DlgDocBackTab		: "Fond",
+DlgDocColorsTab		: "Couleurs et marges",
+DlgDocMetaTab		: "Métadonnées",
+
+DlgDocPageTitle		: "Titre de la page",
+DlgDocLangDir		: "Sens d'écriture",
+DlgDocLangDirLTR	: "De la gauche vers la droite (LTR)",
+DlgDocLangDirRTL	: "De la droite vers la gauche (RTL)",
+DlgDocLangCode		: "Code langue",
+DlgDocCharSet		: "Encodage de caractère",
+DlgDocCharSetCE		: "Europe Centrale",
+DlgDocCharSetCT		: "Chinois Traditionnel (Big5)",
+DlgDocCharSetCR		: "Cyrillique",
+DlgDocCharSetGR		: "Grec",
+DlgDocCharSetJP		: "Japonais",
+DlgDocCharSetKR		: "Coréen",
+DlgDocCharSetTR		: "Turc",
+DlgDocCharSetUN		: "Unicode (UTF-8)",
+DlgDocCharSetWE		: "Occidental",
+DlgDocCharSetOther	: "Autre encodage de caractère",
+
+DlgDocDocType		: "Type de document",
+DlgDocDocTypeOther	: "Autre type de document",
+DlgDocIncXHTML		: "Inclure les déclarations XHTML",
+DlgDocBgColor		: "Couleur de fond",
+DlgDocBgImage		: "Image de fond",
+DlgDocBgNoScroll	: "Image fixe sans défilement",
+DlgDocCText			: "Texte",
+DlgDocCLink			: "Lien",
+DlgDocCVisited		: "Lien visité",
+DlgDocCActive		: "Lien activé",
+DlgDocMargins		: "Marges",
+DlgDocMaTop			: "Haut",
+DlgDocMaLeft		: "Gauche",
+DlgDocMaRight		: "Droite",
+DlgDocMaBottom		: "Bas",
+DlgDocMeIndex		: "Mots-clés (séparés par des virgules)",
+DlgDocMeDescr		: "Description",
+DlgDocMeAuthor		: "Auteur",
+DlgDocMeCopy		: "Copyright",
+DlgDocPreview		: "Prévisualisation",
+
+// Templates Dialog
+Templates			: "Modèles",
+DlgTemplatesTitle	: "Modèles de contenu",
+DlgTemplatesSelMsg	: "Veuillez sélectionner le modèle à ouvrir dans l'éditeur<br>(le contenu actuel sera remplacé):",
+DlgTemplatesLoading	: "Chargement de la liste des modèles. Veuillez patienter...",
+DlgTemplatesNoTpl	: "(Aucun modèle disponible)",
+DlgTemplatesReplace	: "Remplacer tout le contenu",
+
+// About Dialog
+DlgAboutAboutTab	: "A propos de",
+DlgAboutBrowserInfoTab	: "Navigateur",
+DlgAboutLicenseTab	: "Licence",
+DlgAboutVersion		: "Version",
+DlgAboutInfo		: "Pour plus d'informations, aller à"
+};


Property changes on: announcement/trunk/src/main/webapp/fckeditor/editor/lang/fr.js
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/webapp/fckeditor/editor/lang/gl.js
===================================================================
--- announcement/trunk/src/main/webapp/fckeditor/editor/lang/gl.js	                        (rev 0)
+++ announcement/trunk/src/main/webapp/fckeditor/editor/lang/gl.js	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,515 @@
+/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2008 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * Galician language file.
+ */
+
+var FCKLang =
+{
+// Language direction : "ltr" (left to right) or "rtl" (right to left).
+Dir					: "ltr",
+
+ToolbarCollapse		: "Ocultar Ferramentas",
+ToolbarExpand		: "Mostrar Ferramentas",
+
+// Toolbar Items and Context Menu
+Save				: "Gardar",
+NewPage				: "Nova Páxina",
+Preview				: "Vista Previa",
+Cut					: "Cortar",
+Copy				: "Copiar",
+Paste				: "Pegar",
+PasteText			: "Pegar como texto plano",
+PasteWord			: "Pegar dende Word",
+Print				: "Imprimir",
+SelectAll			: "Seleccionar todo",
+RemoveFormat		: "Eliminar Formato",
+InsertLinkLbl		: "Ligazón",
+InsertLink			: "Inserir/Editar Ligazón",
+RemoveLink			: "Eliminar Ligazón",
+Anchor				: "Inserir/Editar Referencia",
+AnchorDelete		: "Remove Anchor",	//MISSING
+InsertImageLbl		: "Imaxe",
+InsertImage			: "Inserir/Editar Imaxe",
+InsertFlashLbl		: "Flash",
+InsertFlash			: "Inserir/Editar Flash",
+InsertTableLbl		: "Tabla",
+InsertTable			: "Inserir/Editar Tabla",
+InsertLineLbl		: "Liña",
+InsertLine			: "Inserir Liña Horizontal",
+InsertSpecialCharLbl: "Carácter Special",
+InsertSpecialChar	: "Inserir Carácter Especial",
+InsertSmileyLbl		: "Smiley",
+InsertSmiley		: "Inserir Smiley",
+About				: "Acerca de FCKeditor",
+Bold				: "Negrita",
+Italic				: "Cursiva",
+Underline			: "Sub-raiado",
+StrikeThrough		: "Tachado",
+Subscript			: "Subíndice",
+Superscript			: "Superíndice",
+LeftJustify			: "Aliñar á Esquerda",
+CenterJustify		: "Centrado",
+RightJustify		: "Aliñar á Dereita",
+BlockJustify		: "Xustificado",
+DecreaseIndent		: "Disminuir Sangría",
+IncreaseIndent		: "Aumentar Sangría",
+Blockquote			: "Blockquote",	//MISSING
+Undo				: "Desfacer",
+Redo				: "Refacer",
+NumberedListLbl		: "Lista Numerada",
+NumberedList		: "Inserir/Eliminar Lista Numerada",
+BulletedListLbl		: "Marcas",
+BulletedList		: "Inserir/Eliminar Marcas",
+ShowTableBorders	: "Mostrar Bordes das Táboas",
+ShowDetails			: "Mostrar Marcas Parágrafo",
+Style				: "Estilo",
+FontFormat			: "Formato",
+Font				: "Tipo",
+FontSize			: "Tamaño",
+TextColor			: "Cor do Texto",
+BGColor				: "Cor do Fondo",
+Source				: "Código Fonte",
+Find				: "Procurar",
+Replace				: "Substituir",
+SpellCheck			: "Corrección Ortográfica",
+UniversalKeyboard	: "Teclado Universal",
+PageBreakLbl		: "Salto de Páxina",
+PageBreak			: "Inserir Salto de Páxina",
+
+Form			: "Formulario",
+Checkbox		: "Cadro de Verificación",
+RadioButton		: "Botón de Radio",
+TextField		: "Campo de Texto",
+Textarea		: "Área de Texto",
+HiddenField		: "Campo Oculto",
+Button			: "Botón",
+SelectionField	: "Campo de Selección",
+ImageButton		: "Botón de Imaxe",
+
+FitWindow		: "Maximizar o tamaño do editor",
+ShowBlocks		: "Show Blocks",	//MISSING
+
+// Context Menu
+EditLink			: "Editar Ligazón",
+CellCM				: "Cela",
+RowCM				: "Fila",
+ColumnCM			: "Columna",
+InsertRowAfter		: "Insert Row After",	//MISSING
+InsertRowBefore		: "Insert Row Before",	//MISSING
+DeleteRows			: "Borrar Filas",
+InsertColumnAfter	: "Insert Column After",	//MISSING
+InsertColumnBefore	: "Insert Column Before",	//MISSING
+DeleteColumns		: "Borrar Columnas",
+InsertCellAfter		: "Insert Cell After",	//MISSING
+InsertCellBefore	: "Insert Cell Before",	//MISSING
+DeleteCells			: "Borrar Cela",
+MergeCells			: "Unir Celas",
+MergeRight			: "Merge Right",	//MISSING
+MergeDown			: "Merge Down",	//MISSING
+HorizontalSplitCell	: "Split Cell Horizontally",	//MISSING
+VerticalSplitCell	: "Split Cell Vertically",	//MISSING
+TableDelete			: "Borrar Táboa",
+CellProperties		: "Propriedades da Cela",
+TableProperties		: "Propriedades da Táboa",
+ImageProperties		: "Propriedades Imaxe",
+FlashProperties		: "Propriedades Flash",
+
+AnchorProp			: "Propriedades da Referencia",
+ButtonProp			: "Propriedades do Botón",
+CheckboxProp		: "Propriedades do Cadro de Verificación",
+HiddenFieldProp		: "Propriedades do Campo Oculto",
+RadioButtonProp		: "Propriedades do Botón de Radio",
+ImageButtonProp		: "Propriedades do Botón de Imaxe",
+TextFieldProp		: "Propriedades do Campo de Texto",
+SelectionFieldProp	: "Propriedades do Campo de Selección",
+TextareaProp		: "Propriedades da Área de Texto",
+FormProp			: "Propriedades do Formulario",
+
+FontFormats			: "Normal;Formateado;Enderezo;Enacabezado 1;Encabezado 2;Encabezado 3;Encabezado 4;Encabezado 5;Encabezado 6;Paragraph (DIV)",
+
+// Alerts and Messages
+ProcessingXHTML		: "Procesando XHTML. Por facor, agarde...",
+Done				: "Feiro",
+PasteWordConfirm	: "Parece que o texto que quere pegar está copiado do Word.¿Quere limpar o formato antes de pegalo?",
+NotCompatiblePaste	: "Este comando está disponible para Internet Explorer versión 5.5 ou superior. ¿Quere pegalo sen limpar o formato?",
+UnknownToolbarItem	: "Ítem de ferramentas descoñecido \"%1\"",
+UnknownCommand		: "Nome de comando descoñecido \"%1\"",
+NotImplemented		: "Comando non implementado",
+UnknownToolbarSet	: "O conxunto de ferramentas \"%1\" non existe",
+NoActiveX			: "As opcións de seguridade do seu navegador poderían limitar algunha das características de editor. Debe activar a opción \"Executar controis ActiveX e plug-ins\". Pode notar que faltan características e experimentar erros",
+BrowseServerBlocked : "Non se poido abrir o navegador de recursos. Asegúrese de que están desactivados os bloqueadores de xanelas emerxentes",
+DialogBlocked		: "Non foi posible abrir a xanela de diálogo. Asegúrese de que están desactivados os bloqueadores de xanelas emerxentes",
+
+// Dialogs
+DlgBtnOK			: "OK",
+DlgBtnCancel		: "Cancelar",
+DlgBtnClose			: "Pechar",
+DlgBtnBrowseServer	: "Navegar no Servidor",
+DlgAdvancedTag		: "Advanzado",
+DlgOpOther			: "<Outro>",
+DlgInfoTab			: "Info",
+DlgAlertUrl			: "Por favor, insira a URL",
+
+// General Dialogs Labels
+DlgGenNotSet		: "<non definido>",
+DlgGenId			: "Id",
+DlgGenLangDir		: "Orientación do Idioma",
+DlgGenLangDirLtr	: "Esquerda a Dereita (LTR)",
+DlgGenLangDirRtl	: "Dereita a Esquerda (RTL)",
+DlgGenLangCode		: "Código do Idioma",
+DlgGenAccessKey		: "Chave de Acceso",
+DlgGenName			: "Nome",
+DlgGenTabIndex		: "Índice de Tabulación",
+DlgGenLongDescr		: "Descrición Completa da URL",
+DlgGenClass			: "Clases da Folla de Estilos",
+DlgGenTitle			: "Título",
+DlgGenContType		: "Tipo de Contido",
+DlgGenLinkCharset	: "Fonte de Caracteres Vinculado",
+DlgGenStyle			: "Estilo",
+
+// Image Dialog
+DlgImgTitle			: "Propriedades da Imaxe",
+DlgImgInfoTab		: "Información da Imaxe",
+DlgImgBtnUpload		: "Enviar ó Servidor",
+DlgImgURL			: "URL",
+DlgImgUpload		: "Carregar",
+DlgImgAlt			: "Texto Alternativo",
+DlgImgWidth			: "Largura",
+DlgImgHeight		: "Altura",
+DlgImgLockRatio		: "Proporcional",
+DlgBtnResetSize		: "Tamaño Orixinal",
+DlgImgBorder		: "Límite",
+DlgImgHSpace		: "Esp. Horiz.",
+DlgImgVSpace		: "Esp. Vert.",
+DlgImgAlign			: "Aliñamento",
+DlgImgAlignLeft		: "Esquerda",
+DlgImgAlignAbsBottom: "Abs Inferior",
+DlgImgAlignAbsMiddle: "Abs Centro",
+DlgImgAlignBaseline	: "Liña Base",
+DlgImgAlignBottom	: "Pé",
+DlgImgAlignMiddle	: "Centro",
+DlgImgAlignRight	: "Dereita",
+DlgImgAlignTextTop	: "Tope do Texto",
+DlgImgAlignTop		: "Tope",
+DlgImgPreview		: "Vista Previa",
+DlgImgAlertUrl		: "Por favor, escriba a URL da imaxe",
+DlgImgLinkTab		: "Ligazón",
+
+// Flash Dialog
+DlgFlashTitle		: "Propriedades Flash",
+DlgFlashChkPlay		: "Auto Execución",
+DlgFlashChkLoop		: "Bucle",
+DlgFlashChkMenu		: "Activar Menú Flash",
+DlgFlashScale		: "Escalar",
+DlgFlashScaleAll	: "Amosar Todo",
+DlgFlashScaleNoBorder	: "Sen Borde",
+DlgFlashScaleFit	: "Encaixar axustando",
+
+// Link Dialog
+DlgLnkWindowTitle	: "Ligazón",
+DlgLnkInfoTab		: "Información da Ligazón",
+DlgLnkTargetTab		: "Referencia a esta páxina",
+
+DlgLnkType			: "Tipo de Ligazón",
+DlgLnkTypeURL		: "URL",
+DlgLnkTypeAnchor	: "Referencia nesta páxina",
+DlgLnkTypeEMail		: "E-Mail",
+DlgLnkProto			: "Protocolo",
+DlgLnkProtoOther	: "<outro>",
+DlgLnkURL			: "URL",
+DlgLnkAnchorSel		: "Seleccionar unha Referencia",
+DlgLnkAnchorByName	: "Por Nome de Referencia",
+DlgLnkAnchorById	: "Por Element Id",
+DlgLnkNoAnchors		: "(Non hai referencias disponibles no documento)",
+DlgLnkEMail			: "Enderezo de E-Mail",
+DlgLnkEMailSubject	: "Asunto do Mensaxe",
+DlgLnkEMailBody		: "Corpo do Mensaxe",
+DlgLnkUpload		: "Carregar",
+DlgLnkBtnUpload		: "Enviar ó servidor",
+
+DlgLnkTarget		: "Destino",
+DlgLnkTargetFrame	: "<frame>",
+DlgLnkTargetPopup	: "<Xanela Emerxente>",
+DlgLnkTargetBlank	: "Nova Xanela (_blank)",
+DlgLnkTargetParent	: "Xanela Pai (_parent)",
+DlgLnkTargetSelf	: "Mesma Xanela (_self)",
+DlgLnkTargetTop		: "Xanela Primaria (_top)",
+DlgLnkTargetFrameName	: "Nome do Marco Destino",
+DlgLnkPopWinName	: "Nome da Xanela Emerxente",
+DlgLnkPopWinFeat	: "Características da Xanela Emerxente",
+DlgLnkPopResize		: "Axustable",
+DlgLnkPopLocation	: "Barra de Localización",
+DlgLnkPopMenu		: "Barra de Menú",
+DlgLnkPopScroll		: "Barras de Desplazamento",
+DlgLnkPopStatus		: "Barra de Estado",
+DlgLnkPopToolbar	: "Barra de Ferramentas",
+DlgLnkPopFullScrn	: "A Toda Pantalla (IE)",
+DlgLnkPopDependent	: "Dependente (Netscape)",
+DlgLnkPopWidth		: "Largura",
+DlgLnkPopHeight		: "Altura",
+DlgLnkPopLeft		: "Posición Esquerda",
+DlgLnkPopTop		: "Posición dende Arriba",
+
+DlnLnkMsgNoUrl		: "Por favor, escriba a ligazón URL",
+DlnLnkMsgNoEMail	: "Por favor, escriba o enderezo de e-mail",
+DlnLnkMsgNoAnchor	: "Por favor, seleccione un destino",
+DlnLnkMsgInvPopName	: "The popup name must begin with an alphabetic character and must not contain spaces",	//MISSING
+
+// Color Dialog
+DlgColorTitle		: "Seleccionar Color",
+DlgColorBtnClear	: "Nengunha",
+DlgColorHighlight	: "Destacado",
+DlgColorSelected	: "Seleccionado",
+
+// Smiley Dialog
+DlgSmileyTitle		: "Inserte un Smiley",
+
+// Special Character Dialog
+DlgSpecialCharTitle	: "Seleccione Caracter Especial",
+
+// Table Dialog
+DlgTableTitle		: "Propiedades da Táboa",
+DlgTableRows		: "Filas",
+DlgTableColumns		: "Columnas",
+DlgTableBorder		: "Tamaño do Borde",
+DlgTableAlign		: "Aliñamento",
+DlgTableAlignNotSet	: "<Non Definido>",
+DlgTableAlignLeft	: "Esquerda",
+DlgTableAlignCenter	: "Centro",
+DlgTableAlignRight	: "Ereita",
+DlgTableWidth		: "Largura",
+DlgTableWidthPx		: "pixels",
+DlgTableWidthPc		: "percent",
+DlgTableHeight		: "Altura",
+DlgTableCellSpace	: "Marxe entre Celas",
+DlgTableCellPad		: "Marxe interior",
+DlgTableCaption		: "Título",
+DlgTableSummary		: "Sumario",
+
+// Table Cell Dialog
+DlgCellTitle		: "Propriedades da Cela",
+DlgCellWidth		: "Largura",
+DlgCellWidthPx		: "pixels",
+DlgCellWidthPc		: "percent",
+DlgCellHeight		: "Altura",
+DlgCellWordWrap		: "Axustar Liñas",
+DlgCellWordWrapNotSet	: "<Non Definido>",
+DlgCellWordWrapYes	: "Si",
+DlgCellWordWrapNo	: "Non",
+DlgCellHorAlign		: "Aliñamento Horizontal",
+DlgCellHorAlignNotSet	: "<Non definido>",
+DlgCellHorAlignLeft	: "Esquerda",
+DlgCellHorAlignCenter	: "Centro",
+DlgCellHorAlignRight: "Dereita",
+DlgCellVerAlign		: "Aliñamento Vertical",
+DlgCellVerAlignNotSet	: "<Non definido>",
+DlgCellVerAlignTop	: "Arriba",
+DlgCellVerAlignMiddle	: "Medio",
+DlgCellVerAlignBottom	: "Abaixo",
+DlgCellVerAlignBaseline	: "Liña de Base",
+DlgCellRowSpan		: "Ocupar Filas",
+DlgCellCollSpan		: "Ocupar Columnas",
+DlgCellBackColor	: "Color de Fondo",
+DlgCellBorderColor	: "Color de Borde",
+DlgCellBtnSelect	: "Seleccionar...",
+
+// Find and Replace Dialog
+DlgFindAndReplaceTitle	: "Find and Replace",	//MISSING
+
+// Find Dialog
+DlgFindTitle		: "Procurar",
+DlgFindFindBtn		: "Procurar",
+DlgFindNotFoundMsg	: "Non te atopou o texto indicado.",
+
+// Replace Dialog
+DlgReplaceTitle			: "Substituir",
+DlgReplaceFindLbl		: "Texto a procurar:",
+DlgReplaceReplaceLbl	: "Substituir con:",
+DlgReplaceCaseChk		: "Coincidir Mai./min.",
+DlgReplaceReplaceBtn	: "Substituir",
+DlgReplaceReplAllBtn	: "Substitiur Todo",
+DlgReplaceWordChk		: "Coincidir con toda a palabra",
+
+// Paste Operations / Dialog
+PasteErrorCut	: "Os axustes de seguridade do seu navegador non permiten que o editor realice automáticamente as tarefas de corte. Por favor, use o teclado para iso (Ctrl+X).",
+PasteErrorCopy	: "Os axustes de seguridade do seu navegador non permiten que o editor realice automáticamente as tarefas de copia. Por favor, use o teclado para iso (Ctrl+C).",
+
+PasteAsText		: "Pegar como texto plano",
+PasteFromWord	: "Pegar dende Word",
+
+DlgPasteMsg2	: "Por favor, pegue dentro do seguinte cadro usando o teclado (<STRONG>Ctrl+V</STRONG>) e pulse <STRONG>OK</STRONG>.",
+DlgPasteSec		: "Because of your browser security settings, the editor is not able to access your clipboard data directly. You are required to paste it again in this window.",	//MISSING
+DlgPasteIgnoreFont		: "Ignorar as definicións de Tipografía",
+DlgPasteRemoveStyles	: "Eliminar as definicións de Estilos",
+
+// Color Picker
+ColorAutomatic	: "Automático",
+ColorMoreColors	: "Máis Cores...",
+
+// Document Properties
+DocProps		: "Propriedades do Documento",
+
+// Anchor Dialog
+DlgAnchorTitle		: "Propriedades da Referencia",
+DlgAnchorName		: "Nome da Referencia",
+DlgAnchorErrorName	: "Por favor, escriba o nome da referencia",
+
+// Speller Pages Dialog
+DlgSpellNotInDic		: "Non está no diccionario",
+DlgSpellChangeTo		: "Cambiar a",
+DlgSpellBtnIgnore		: "Ignorar",
+DlgSpellBtnIgnoreAll	: "Ignorar Todas",
+DlgSpellBtnReplace		: "Substituir",
+DlgSpellBtnReplaceAll	: "Substituir Todas",
+DlgSpellBtnUndo			: "Desfacer",
+DlgSpellNoSuggestions	: "- Sen candidatos -",
+DlgSpellProgress		: "Corrección ortográfica en progreso...",
+DlgSpellNoMispell		: "Corrección ortográfica rematada: Non se atoparon erros",
+DlgSpellNoChanges		: "Corrección ortográfica rematada: Non se substituiu nengunha verba",
+DlgSpellOneChange		: "Corrección ortográfica rematada: Unha verba substituida",
+DlgSpellManyChanges		: "Corrección ortográfica rematada: %1 verbas substituidas",
+
+IeSpellDownload			: "O corrector ortográfico non está instalado. ¿Quere descargalo agora?",
+
+// Button Dialog
+DlgButtonText		: "Texto (Valor)",
+DlgButtonType		: "Tipo",
+DlgButtonTypeBtn	: "Button",	//MISSING
+DlgButtonTypeSbm	: "Submit",	//MISSING
+DlgButtonTypeRst	: "Reset",	//MISSING
+
+// Checkbox and Radio Button Dialogs
+DlgCheckboxName		: "Nome",
+DlgCheckboxValue	: "Valor",
+DlgCheckboxSelected	: "Seleccionado",
+
+// Form Dialog
+DlgFormName		: "Nome",
+DlgFormAction	: "Acción",
+DlgFormMethod	: "Método",
+
+// Select Field Dialog
+DlgSelectName		: "Nome",
+DlgSelectValue		: "Valor",
+DlgSelectSize		: "Tamaño",
+DlgSelectLines		: "liñas",
+DlgSelectChkMulti	: "Permitir múltiples seleccións",
+DlgSelectOpAvail	: "Opcións Disponibles",
+DlgSelectOpText		: "Texto",
+DlgSelectOpValue	: "Valor",
+DlgSelectBtnAdd		: "Engadir",
+DlgSelectBtnModify	: "Modificar",
+DlgSelectBtnUp		: "Subir",
+DlgSelectBtnDown	: "Baixar",
+DlgSelectBtnSetValue : "Definir como valor por defecto",
+DlgSelectBtnDelete	: "Borrar",
+
+// Textarea Dialog
+DlgTextareaName	: "Nome",
+DlgTextareaCols	: "Columnas",
+DlgTextareaRows	: "Filas",
+
+// Text Field Dialog
+DlgTextName			: "Nome",
+DlgTextValue		: "Valor",
+DlgTextCharWidth	: "Tamaño do Caracter",
+DlgTextMaxChars		: "Máximo de Caracteres",
+DlgTextType			: "Tipo",
+DlgTextTypeText		: "Texto",
+DlgTextTypePass		: "Chave",
+
+// Hidden Field Dialog
+DlgHiddenName	: "Nome",
+DlgHiddenValue	: "Valor",
+
+// Bulleted List Dialog
+BulletedListProp	: "Propriedades das Marcas",
+NumberedListProp	: "Propriedades da Lista de Numeración",
+DlgLstStart			: "Start",	//MISSING
+DlgLstType			: "Tipo",
+DlgLstTypeCircle	: "Círculo",
+DlgLstTypeDisc		: "Disco",
+DlgLstTypeSquare	: "Cuadrado",
+DlgLstTypeNumbers	: "Números (1, 2, 3)",
+DlgLstTypeLCase		: "Letras Minúsculas (a, b, c)",
+DlgLstTypeUCase		: "Letras Maiúsculas (A, B, C)",
+DlgLstTypeSRoman	: "Números Romanos en minúscula (i, ii, iii)",
+DlgLstTypeLRoman	: "Números Romanos en Maiúscula (I, II, III)",
+
+// Document Properties Dialog
+DlgDocGeneralTab	: "Xeral",
+DlgDocBackTab		: "Fondo",
+DlgDocColorsTab		: "Cores e Marxes",
+DlgDocMetaTab		: "Meta Data",
+
+DlgDocPageTitle		: "Título da Páxina",
+DlgDocLangDir		: "Orientación do Idioma",
+DlgDocLangDirLTR	: "Esquerda a Dereita (LTR)",
+DlgDocLangDirRTL	: "Dereita a Esquerda (RTL)",
+DlgDocLangCode		: "Código de Idioma",
+DlgDocCharSet		: "Codificación do Xogo de Caracteres",
+DlgDocCharSetCE		: "Central European",	//MISSING
+DlgDocCharSetCT		: "Chinese Traditional (Big5)",	//MISSING
+DlgDocCharSetCR		: "Cyrillic",	//MISSING
+DlgDocCharSetGR		: "Greek",	//MISSING
+DlgDocCharSetJP		: "Japanese",	//MISSING
+DlgDocCharSetKR		: "Korean",	//MISSING
+DlgDocCharSetTR		: "Turkish",	//MISSING
+DlgDocCharSetUN		: "Unicode (UTF-8)",	//MISSING
+DlgDocCharSetWE		: "Western European",	//MISSING
+DlgDocCharSetOther	: "Outra Codificación do Xogo de Caracteres",
+
+DlgDocDocType		: "Encabezado do Tipo de Documento",
+DlgDocDocTypeOther	: "Outro Encabezado do Tipo de Documento",
+DlgDocIncXHTML		: "Incluir Declaracións XHTML",
+DlgDocBgColor		: "Cor de Fondo",
+DlgDocBgImage		: "URL da Imaxe de Fondo",
+DlgDocBgNoScroll	: "Fondo Fixo",
+DlgDocCText			: "Texto",
+DlgDocCLink			: "Ligazóns",
+DlgDocCVisited		: "Ligazón Visitada",
+DlgDocCActive		: "Ligazón Activa",
+DlgDocMargins		: "Marxes da Páxina",
+DlgDocMaTop			: "Arriba",
+DlgDocMaLeft		: "Esquerda",
+DlgDocMaRight		: "Dereita",
+DlgDocMaBottom		: "Abaixo",
+DlgDocMeIndex		: "Palabras Chave de Indexación do Documento (separadas por comas)",
+DlgDocMeDescr		: "Descripción do Documento",
+DlgDocMeAuthor		: "Autor",
+DlgDocMeCopy		: "Copyright",
+DlgDocPreview		: "Vista Previa",
+
+// Templates Dialog
+Templates			: "Plantillas",
+DlgTemplatesTitle	: "Plantillas de Contido",
+DlgTemplatesSelMsg	: "Por favor, seleccione a plantilla a abrir no editor<br>(o contido actual perderase):",
+DlgTemplatesLoading	: "Cargando listado de plantillas. Por favor, espere...",
+DlgTemplatesNoTpl	: "(Non hai plantillas definidas)",
+DlgTemplatesReplace	: "Replace actual contents",	//MISSING
+
+// About Dialog
+DlgAboutAboutTab	: "Acerca de",
+DlgAboutBrowserInfoTab	: "Información do Navegador",
+DlgAboutLicenseTab	: "Licencia",
+DlgAboutVersion		: "versión",
+DlgAboutInfo		: "Para máis información visitar:"
+};


Property changes on: announcement/trunk/src/main/webapp/fckeditor/editor/lang/gl.js
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/webapp/fckeditor/editor/lang/gu.js
===================================================================
--- announcement/trunk/src/main/webapp/fckeditor/editor/lang/gu.js	                        (rev 0)
+++ announcement/trunk/src/main/webapp/fckeditor/editor/lang/gu.js	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,515 @@
+/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2008 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * Gujarati language file.
+ */
+
+var FCKLang =
+{
+// Language direction : "ltr" (left to right) or "rtl" (right to left).
+Dir					: "ltr",
+
+ToolbarCollapse		: "ટૂલબાર નાનું કરવું",
+ToolbarExpand		: "ટૂલબાર મોટું કરવું",
+
+// Toolbar Items and Context Menu
+Save				: "સેવ",
+NewPage				: "નવુ પાનું",
+Preview				: "પૂર્વદર્શન",
+Cut					: "કાપવું",
+Copy				: "નકલ",
+Paste				: "પેસ્ટ",
+PasteText			: "પેસ્ટ (સાદી ટેક્સ્ટ)",
+PasteWord			: "પેસ્ટ (વડૅ ટેક્સ્ટ)",
+Print				: "પ્રિન્ટ",
+SelectAll			: "બઘું પસંદ કરવું",
+RemoveFormat		: "ફૉર્મટ કાઢવું",
+InsertLinkLbl		: "સંબંધન, લિંક",
+InsertLink			: "લિંક ઇન્સર્ટ/દાખલ કરવી",
+RemoveLink			: "લિંક કાઢવી",
+Anchor				: "ઍંકર ઇન્સર્ટ/દાખલ કરવી",
+AnchorDelete		: "ઍંકર કાઢવી",
+InsertImageLbl		: "ચિત્ર",
+InsertImage			: "ચિત્ર ઇન્સર્ટ/દાખલ કરવું",
+InsertFlashLbl		: "ફ્લૅશ",
+InsertFlash			: "ફ્લૅશ ઇન્સર્ટ/દાખલ કરવું",
+InsertTableLbl		: "ટેબલ, કોઠો",
+InsertTable			: "ટેબલ, કોઠો ઇન્સર્ટ/દાખલ કરવું",
+InsertLineLbl		: "રેખા",
+InsertLine			: "સમસ્તરીય રેખા ઇન્સર્ટ/દાખલ કરવી",
+InsertSpecialCharLbl: "વિશિષ્ટ અક્ષર",
+InsertSpecialChar	: "વિશિષ્ટ અક્ષર ઇન્સર્ટ/દાખલ કરવું",
+InsertSmileyLbl		: "સ્માઇલી",
+InsertSmiley		: "સ્માઇલી ઇન્સર્ટ/દાખલ કરવી",
+About				: "FCKeditorના વિષે",
+Bold				: "બોલ્ડ/સ્પષ્ટ",
+Italic				: "ઇટેલિક, ત્રાંસા",
+Underline			: "અન્ડર્લાઇન, નીચે લીટી",
+StrikeThrough		: "છેકી નાખવું",
+Subscript			: "એક ચિહ્નની નીચે કરેલું બીજું ચિહ્ન",
+Superscript			: "એક ચિહ્ન ઉપર કરેલું બીજું ચિહ્ન.",
+LeftJustify			: "ડાબી બાજુએ/બાજુ તરફ",
+CenterJustify		: "સંકેંદ્રણ/સેંટરિંગ",
+RightJustify		: "જમણી બાજુએ/બાજુ તરફ",
+BlockJustify		: "બ્લૉક, અંતરાય જસ્ટિફાઇ",
+DecreaseIndent		: "ઇન્ડેન્ટ લીટીના આરંભમાં જગ્યા ઘટાડવી",
+IncreaseIndent		: "ઇન્ડેન્ટ, લીટીના આરંભમાં જગ્યા વધારવી",
+Blockquote			: "બ્લૉક-કોટ, અવતરણચિહ્નો",
+Undo				: "રદ કરવું; પહેલાં હતી એવી સ્થિતિ પાછી લાવવી",
+Redo				: "રિડૂ; પછી હતી એવી સ્થિતિ પાછી લાવવી",
+NumberedListLbl		: "સંખ્યાંકન સૂચિ",
+NumberedList		: "સંખ્યાંકન સૂચિ ઇન્સર્ટ/દાખલ કરવી",
+BulletedListLbl		: "બુલેટ સૂચિ",
+BulletedList		: "બુલેટ સૂચિ ઇન્સર્ટ/દાખલ કરવી",
+ShowTableBorders	: "ટેબલ, કોઠાની બાજુ(બોર્ડર) બતાવવી",
+ShowDetails			: "વિસ્તૃત વિગતવાર બતાવવું",
+Style				: "શૈલી/રીત",
+FontFormat			: "ફૉન્ટ ફૉર્મટ, રચનાની શૈલી",
+Font				: "ફૉન્ટ",
+FontSize			: "ફૉન્ટ સાઇઝ/કદ",
+TextColor			: "શબ્દનો રંગ",
+BGColor				: "બૅકગ્રાઉન્ડ રંગ,",
+Source				: "મૂળ કે પ્રાથમિક દસ્તાવેજ",
+Find				: "શોધવું",
+Replace				: "રિપ્લેસ/બદલવું",
+SpellCheck			: "જોડણી (સ્પેલિંગ) તપાસવી",
+UniversalKeyboard	: "યૂનિવર્સલ/વિશ્વવ્યાપક કીબૉર્ડ",
+PageBreakLbl		: "પેજબ્રેક/પાનાને અલગ કરવું",
+PageBreak			: "ઇન્સર્ટ પેજબ્રેક/પાનાને અલગ કરવું/દાખલ કરવું",
+
+Form			: "ફૉર્મ/પત્રક",
+Checkbox		: "ચેક બોક્સ",
+RadioButton		: "રેડિઓ બટન",
+TextField		: "ટેક્સ્ટ ફીલ્ડ, શબ્દ ક્ષેત્ર",
+Textarea		: "ટેક્સ્ટ એરિઆ, શબ્દ વિસ્તાર",
+HiddenField		: "ગુપ્ત ક્ષેત્ર",
+Button			: "બટન",
+SelectionField	: "પસંદગી ક્ષેત્ર",
+ImageButton		: "ચિત્ર બટન",
+
+FitWindow		: "એડિટરની સાઇઝ અધિકતમ કરવી",
+ShowBlocks		: "બ્લૉક બતાવવું",
+
+// Context Menu
+EditLink			: " લિંક એડિટ/માં ફેરફાર કરવો",
+CellCM				: "કોષના ખાના",
+RowCM				: "પંક્તિના ખાના",
+ColumnCM			: "કૉલમ/ઊભી કટાર",
+InsertRowAfter		: "પછી પંક્તિ ઉમેરવી",
+InsertRowBefore		: "પહેલાં પંક્તિ ઉમેરવી",
+DeleteRows			: "પંક્તિઓ ડિલીટ/કાઢી નાખવી",
+InsertColumnAfter	: "પછી કૉલમ/ઊભી કટાર ઉમેરવી",
+InsertColumnBefore	: "પહેલાં કૉલમ/ઊભી કટાર ઉમેરવી",
+DeleteColumns		: "કૉલમ/ઊભી કટાર ડિલીટ/કાઢી નાખવી",
+InsertCellAfter		: "પછી કોષ ઉમેરવો",
+InsertCellBefore	: "પહેલાં કોષ ઉમેરવો",
+DeleteCells			: "કોષ ડિલીટ/કાઢી નાખવો",
+MergeCells			: "કોષ ભેગા કરવા",
+MergeRight			: "જમણી બાજુ ભેગા કરવા",
+MergeDown			: "નીચે ભેગા કરવા",
+HorizontalSplitCell	: "કોષને સમસ્તરીય વિભાજન કરવું",
+VerticalSplitCell	: "કોષને સીધું ને ઊભું વિભાજન કરવું",
+TableDelete			: "કોઠો ડિલીટ/કાઢી નાખવું",
+CellProperties		: "કોષના ગુણ",
+TableProperties		: "કોઠાના  ગુણ",
+ImageProperties		: "ચિત્રના ગુણ",
+FlashProperties		: "ફ્લૅશના ગુણ",
+
+AnchorProp			: "ઍંકરના ગુણ",
+ButtonProp			: "બટનના ગુણ",
+CheckboxProp		: "ચેક બોક્સ ગુણ",
+HiddenFieldProp		: "ગુપ્ત ક્ષેત્રના ગુણ",
+RadioButtonProp		: "રેડિઓ બટનના ગુણ",
+ImageButtonProp		: "ચિત્ર બટનના ગુણ",
+TextFieldProp		: "ટેક્સ્ટ ફીલ્ડ, શબ્દ ક્ષેત્રના ગુણ",
+SelectionFieldProp	: "પસંદગી ક્ષેત્રના ગુણ",
+TextareaProp		: "ટેક્સ્ટ એઅરિઆ, શબ્દ વિસ્તારના ગુણ",
+FormProp			: "ફૉર્મ/પત્રકના ગુણ",
+
+FontFormats			: "સામાન્ય;ફૉર્મટેડ;સરનામું;શીર્ષક 1;શીર્ષક 2;શીર્ષક 3;શીર્ષક 4;શીર્ષક 5;શીર્ષક 6;શીર્ષક (DIV)",
+
+// Alerts and Messages
+ProcessingXHTML		: "XHTML પ્રક્રિયા ચાલુ છે. મહેરબાની કરીને રાહ જોવો...",
+Done				: "પતી ગયું",
+PasteWordConfirm	: "તમે જે ટેક્સ્ટ પેસ્ટ કરવા માંગો છો, તે વડૅમાંથી કોપી કરેલુ લાગે છે. પેસ્ટ કરતા પહેલાં ટેક્સ્ટ સાફ કરવી છે?",
+NotCompatiblePaste	: "આ કમાન્ડ ઈનટરનેટ એક્સપ્લોરર(Internet Explorer) 5.5 અથવા એના પછીના વર્ઝન માટેજ છે. ટેક્સ્ટને સાફ કયૅા પહેલાં પેસ્ટ કરવી છે?",
+UnknownToolbarItem	: "અજાણી ટૂલબાર આઇટમ \"%1\"",
+UnknownCommand		: "અજાણયો કમાન્ડ \"%1\"",
+NotImplemented		: "કમાન્ડ ઇમ્પ્લિમન્ટ નથી કરોયો",
+UnknownToolbarSet	: "ટૂલબાર સેટ \"%1\" ઉપલબ્ધ નથી",
+NoActiveX			: "તમારા બ્રાઉઝરની સુરક્ષા સેટિંગસ એડિટરના અમુક ફીચરને પરવાનગી આપતી નથી. કૃપયા \"Run ActiveX controls and plug-ins\" વિકલ્પને ઇનેબલ/સમર્થ કરો. તમારા બ્રાઉઝરમાં એરર ઇન્વિઝિબલ ફીચરનો અનુભવ થઈ શકે છે. કૃપયા પૉપ-અપ બ્લૉકર ડિસેબલ કરો.",
+BrowseServerBlocked : "રિસૉર્સ બ્રાઉઝર ખોલી ન સકાયું.",
+DialogBlocked		: "ડાયલૉગ વિન્ડો ખોલી ન સકાયું. કૃપયા પૉપ-અપ બ્લૉકર ડિસેબલ કરો.",
+
+// Dialogs
+DlgBtnOK			: "ઠીક છે",
+DlgBtnCancel		: "રદ કરવું",
+DlgBtnClose			: "બંધ કરવું",
+DlgBtnBrowseServer	: "સર્વર બ્રાઉઝ કરો",
+DlgAdvancedTag		: "અડ્વાન્સડ",
+DlgOpOther			: "<અન્ય>",
+DlgInfoTab			: "સૂચના",
+DlgAlertUrl			: "URL ઇન્સર્ટ કરો",
+
+// General Dialogs Labels
+DlgGenNotSet		: "<સેટ નથી>",
+DlgGenId			: "Id",
+DlgGenLangDir		: "ભાષા લેખવાની પદ્ધતિ",
+DlgGenLangDirLtr	: "ડાબે થી જમણે (LTR)",
+DlgGenLangDirRtl	: "જમણે થી ડાબે (RTL)",
+DlgGenLangCode		: "ભાષા કોડ",
+DlgGenAccessKey		: "ઍક્સેસ કી",
+DlgGenName			: "નામ",
+DlgGenTabIndex		: "ટૅબ ઇન્ડેક્સ",
+DlgGenLongDescr		: "વધારે માહિતી માટે URL",
+DlgGenClass			: "સ્ટાઇલ-શીટ ક્લાસ",
+DlgGenTitle			: "મુખ્ય મથાળું",
+DlgGenContType		: "મુખ્ય કન્ટેન્ટ પ્રકાર",
+DlgGenLinkCharset	: "લિંક રિસૉર્સ કૅરિક્ટર સેટ",
+DlgGenStyle			: "સ્ટાઇલ",
+
+// Image Dialog
+DlgImgTitle			: "ચિત્રના ગુણ",
+DlgImgInfoTab		: "ચિત્ર ની જાણકારી",
+DlgImgBtnUpload		: "આ સર્વરને મોકલવું",
+DlgImgURL			: "URL",
+DlgImgUpload		: "અપલોડ",
+DlgImgAlt			: "ઑલ્ટર્નટ ટેક્સ્ટ",
+DlgImgWidth			: "પહોળાઈ",
+DlgImgHeight		: "ઊંચાઈ",
+DlgImgLockRatio		: "લૉક ગુણોત્તર",
+DlgBtnResetSize		: "રીસેટ સાઇઝ",
+DlgImgBorder		: "બોર્ડર",
+DlgImgHSpace		: "સમસ્તરીય જગ્યા",
+DlgImgVSpace		: "લંબરૂપ જગ્યા",
+DlgImgAlign			: "લાઇનદોરીમાં ગોઠવવું",
+DlgImgAlignLeft		: "ડાબી બાજુ ગોઠવવું",
+DlgImgAlignAbsBottom: "Abs નીચે",
+DlgImgAlignAbsMiddle: "Abs ઉપર",
+DlgImgAlignBaseline	: "આધાર લીટી",
+DlgImgAlignBottom	: "નીચે",
+DlgImgAlignMiddle	: "વચ્ચે",
+DlgImgAlignRight	: "જમણી",
+DlgImgAlignTextTop	: "ટેક્સ્ટ ઉપર",
+DlgImgAlignTop		: "ઉપર",
+DlgImgPreview		: "પૂર્વદર્શન",
+DlgImgAlertUrl		: "ચિત્રની URL ટાઇપ કરો",
+DlgImgLinkTab		: "લિંક",
+
+// Flash Dialog
+DlgFlashTitle		: "ફ્લૅશ ગુણ",
+DlgFlashChkPlay		: "ઑટો/સ્વયં પ્લે",
+DlgFlashChkLoop		: "લૂપ",
+DlgFlashChkMenu		: "ફ્લૅશ મેન્યૂ નો પ્રયોગ કરો",
+DlgFlashScale		: "સ્કેલ",
+DlgFlashScaleAll	: "સ્કેલ ઓલ/બધુ બતાવો",
+DlgFlashScaleNoBorder	: "સ્કેલ બોર્ડર વગર",
+DlgFlashScaleFit	: "સ્કેલ એકદમ ફીટ",
+
+// Link Dialog
+DlgLnkWindowTitle	: "લિંક",
+DlgLnkInfoTab		: "લિંક ઇન્ફૉ ટૅબ",
+DlgLnkTargetTab		: "ટાર્ગેટ/લક્ષ્ય ટૅબ",
+
+DlgLnkType			: "લિંક પ્રકાર",
+DlgLnkTypeURL		: "URL",
+DlgLnkTypeAnchor	: "આ પેજનો ઍંકર",
+DlgLnkTypeEMail		: "ઈ-મેલ",
+DlgLnkProto			: "પ્રોટોકૉલ",
+DlgLnkProtoOther	: "<અન્ય>",
+DlgLnkURL			: "URL",
+DlgLnkAnchorSel		: "ઍંકર પસંદ કરો",
+DlgLnkAnchorByName	: "ઍંકર નામથી પસંદ કરો",
+DlgLnkAnchorById	: "ઍંકર એલિમન્ટ Id થી પસંદ કરો",
+DlgLnkNoAnchors		: "(ડૉક્યુમન્ટમાં ઍંકરની સંખ્યા)",
+DlgLnkEMail			: "ઈ-મેલ સરનામું",
+DlgLnkEMailSubject	: "ઈ-મેલ વિષય",
+DlgLnkEMailBody		: "સંદેશ",
+DlgLnkUpload		: "અપલોડ",
+DlgLnkBtnUpload		: "આ સર્વરને મોકલવું",
+
+DlgLnkTarget		: "ટાર્ગેટ/લક્ષ્ય",
+DlgLnkTargetFrame	: "<ફ્રેમ>",
+DlgLnkTargetPopup	: "<પૉપ-અપ વિન્ડો>",
+DlgLnkTargetBlank	: "નવી  વિન્ડો (_blank)",
+DlgLnkTargetParent	: "મૂળ વિન્ડો (_parent)",
+DlgLnkTargetSelf	: "આજ વિન્ડો (_self)",
+DlgLnkTargetTop		: "ઉપરની વિન્ડો (_top)",
+DlgLnkTargetFrameName	: "ટાર્ગેટ ફ્રેમ નું નામ",
+DlgLnkPopWinName	: "પૉપ-અપ વિન્ડો નું નામ",
+DlgLnkPopWinFeat	: "પૉપ-અપ વિન્ડો ફીચરસૅ",
+DlgLnkPopResize		: "સાઇઝ બદલી સકાય છે",
+DlgLnkPopLocation	: "લોકેશન બાર",
+DlgLnkPopMenu		: "મેન્યૂ બાર",
+DlgLnkPopScroll		: "સ્ક્રોલ બાર",
+DlgLnkPopStatus		: "સ્ટૅટસ બાર",
+DlgLnkPopToolbar	: "ટૂલ બાર",
+DlgLnkPopFullScrn	: "ફુલ સ્ક્રીન (IE)",
+DlgLnkPopDependent	: "ડિપેન્ડન્ટ (Netscape)",
+DlgLnkPopWidth		: "પહોળાઈ",
+DlgLnkPopHeight		: "ઊંચાઈ",
+DlgLnkPopLeft		: "ડાબી બાજુ",
+DlgLnkPopTop		: "જમણી બાજુ",
+
+DlnLnkMsgNoUrl		: "લિંક  URL ટાઇપ કરો",
+DlnLnkMsgNoEMail	: "ઈ-મેલ સરનામું ટાઇપ કરો",
+DlnLnkMsgNoAnchor	: "ઍંકર પસંદ કરો",
+DlnLnkMsgInvPopName	: "પૉપ-અપ વિન્ડો નું નામ ઍલ્ફબેટથી શરૂ કરવો અને તેમાં સ્પેઇસ ન હોવી જોઈએ",
+
+// Color Dialog
+DlgColorTitle		: "રંગ  પસંદ કરો",
+DlgColorBtnClear	: "સાફ કરો",
+DlgColorHighlight	: "હાઈલાઇટ",
+DlgColorSelected	: "સિલેક્ટેડ/પસંદ કરવું",
+
+// Smiley Dialog
+DlgSmileyTitle		: "સ્માઇલી  પસંદ કરો",
+
+// Special Character Dialog
+DlgSpecialCharTitle	: "સ્પેશિઅલ વિશિષ્ટ અક્ષર પસંદ કરો",
+
+// Table Dialog
+DlgTableTitle		: "ટેબલ, કોઠાનું મથાળું",
+DlgTableRows		: "પંક્તિના ખાના",
+DlgTableColumns		: "કૉલમ/ઊભી કટાર",
+DlgTableBorder		: "કોઠાની બાજુ(બોર્ડર) સાઇઝ",
+DlgTableAlign		: "અલાઇનમન્ટ/ગોઠવાયેલું ",
+DlgTableAlignNotSet	: "<સેટ નથી>",
+DlgTableAlignLeft	: "ડાબી બાજુ",
+DlgTableAlignCenter	: "મધ્ય સેન્ટર",
+DlgTableAlignRight	: "જમણી બાજુ",
+DlgTableWidth		: "પહોળાઈ",
+DlgTableWidthPx		: "પિકસલ",
+DlgTableWidthPc		: "પ્રતિશત",
+DlgTableHeight		: "ઊંચાઈ",
+DlgTableCellSpace	: "સેલ અંતર",
+DlgTableCellPad		: "સેલ પૅડિંગ",
+DlgTableCaption		: "મથાળું/કૅપ્શન ",
+DlgTableSummary		: "ટૂંકો એહેવાલ",
+
+// Table Cell Dialog
+DlgCellTitle		: "પંક્તિના ખાનાના ગુણ",
+DlgCellWidth		: "પહોળાઈ",
+DlgCellWidthPx		: "પિકસલ",
+DlgCellWidthPc		: "પ્રતિશત",
+DlgCellHeight		: "ઊંચાઈ",
+DlgCellWordWrap		: "વર્ડ રૅપ",
+DlgCellWordWrapNotSet	: "<સેટ નથી>",
+DlgCellWordWrapYes	: "હા",
+DlgCellWordWrapNo	: "ના",
+DlgCellHorAlign		: "સમસ્તરીય ગોઠવવું",
+DlgCellHorAlignNotSet	: "<સેટ નથી>",
+DlgCellHorAlignLeft	: "ડાબી બાજુ",
+DlgCellHorAlignCenter	: "મધ્ય સેન્ટર",
+DlgCellHorAlignRight: "જમણી બાજુ",
+DlgCellVerAlign		: "લંબરૂપ ગોઠવવું",
+DlgCellVerAlignNotSet	: "<સેટ નથી>",
+DlgCellVerAlignTop	: "ઉપર",
+DlgCellVerAlignMiddle	: "મધ્ય સેન્ટર",
+DlgCellVerAlignBottom	: "નીચે",
+DlgCellVerAlignBaseline	: "મૂળ રેખા",
+DlgCellRowSpan		: "પંક્તિ સ્પાન",
+DlgCellCollSpan		: "કૉલમ/ઊભી કટાર સ્પાન",
+DlgCellBackColor	: "બૅકગ્રાઉન્ડ રંગ",
+DlgCellBorderColor	: "બોર્ડરનો રંગ",
+DlgCellBtnSelect	: "પસંદ કરો...",
+
+// Find and Replace Dialog
+DlgFindAndReplaceTitle	: "શોધવું અને બદલવું",
+
+// Find Dialog
+DlgFindTitle		: "શોધવું",
+DlgFindFindBtn		: "શોધવું",
+DlgFindNotFoundMsg	: "તમે શોધેલી ટેક્સ્ટ નથી મળી",
+
+// Replace Dialog
+DlgReplaceTitle			: "બદલવું",
+DlgReplaceFindLbl		: "આ શોધો",
+DlgReplaceReplaceLbl	: "આનાથી બદલો",
+DlgReplaceCaseChk		: "કેસ સરખા રાખો",
+DlgReplaceReplaceBtn	: "બદલવું",
+DlgReplaceReplAllBtn	: "બઘા બદલી ",
+DlgReplaceWordChk		: "બઘા શબ્દ સરખા રાખો",
+
+// Paste Operations / Dialog
+PasteErrorCut	: "તમારા બ્રાઉઝર ની સુરક્ષિત સેટિંગસ કટ કરવાની પરવાનગી નથી આપતી. (Ctrl+X) નો ઉપયોગ કરો.",
+PasteErrorCopy	: "તમારા બ્રાઉઝર ની સુરક્ષિત સેટિંગસ કોપી કરવાની પરવાનગી નથી આપતી.  (Ctrl+C) का प्रयोग करें।",
+
+PasteAsText		: "પેસ્ટ (ટેક્સ્ટ)",
+PasteFromWord	: "પેસ્ટ (વર્ડ થી)",
+
+DlgPasteMsg2	: "Ctrl+V નો પ્રયોગ કરી પેસ્ટ કરો",
+DlgPasteSec		: "તમારા બ્રાઉઝર ની સુરક્ષિત સેટિંગસના કારણે,એડિટર તમારા કિલ્પબોર્ડ ડેટા ને કોપી નથી કરી શકતો. તમારે આ વિન્ડોમાં ફરીથી પેસ્ટ કરવું પડશે.",
+DlgPasteIgnoreFont		: "ફૉન્ટફેસ વ્યાખ્યાની અવગણના",
+DlgPasteRemoveStyles	: "સ્ટાઇલ વ્યાખ્યા કાઢી નાખવી",
+
+// Color Picker
+ColorAutomatic	: "સ્વચાલિત",
+ColorMoreColors	: "ઔર રંગ...",
+
+// Document Properties
+DocProps		: "ડૉક્યુમન્ટ ગુણ/પ્રૉપર્ટિઝ",
+
+// Anchor Dialog
+DlgAnchorTitle		: "ઍંકર ગુણ/પ્રૉપર્ટિઝ",
+DlgAnchorName		: "ઍંકરનું નામ",
+DlgAnchorErrorName	: "ઍંકરનું નામ ટાઈપ કરો",
+
+// Speller Pages Dialog
+DlgSpellNotInDic		: "શબ્દકોશમાં નથી",
+DlgSpellChangeTo		: "આનાથી બદલવું",
+DlgSpellBtnIgnore		: "ઇગ્નોર/અવગણના કરવી",
+DlgSpellBtnIgnoreAll	: "બધાની ઇગ્નોર/અવગણના કરવી",
+DlgSpellBtnReplace		: "બદલવું",
+DlgSpellBtnReplaceAll	: "બધા બદલી કરો",
+DlgSpellBtnUndo			: "અન્ડૂ",
+DlgSpellNoSuggestions	: "- કઇ સજેશન નથી -",
+DlgSpellProgress		: "શબ્દની જોડણી/સ્પેલ ચેક ચાલુ છે...",
+DlgSpellNoMispell		: "શબ્દની જોડણી/સ્પેલ ચેક પૂર્ણ: ખોટી જોડણી મળી નથી",
+DlgSpellNoChanges		: "શબ્દની જોડણી/સ્પેલ ચેક પૂર્ણ: એકપણ શબ્દ બદલયો નથી",
+DlgSpellOneChange		: "શબ્દની જોડણી/સ્પેલ ચેક પૂર્ણ: એક શબ્દ બદલયો છે",
+DlgSpellManyChanges		: "શબ્દની જોડણી/સ્પેલ ચેક પૂર્ણ: %1 શબ્દ બદલયા છે",
+
+IeSpellDownload			: "સ્પેલ-ચેકર ઇન્સ્ટોલ નથી. શું તમે ડાઉનલોડ કરવા માંગો છો?",
+
+// Button Dialog
+DlgButtonText		: "ટેક્સ્ટ (વૅલ્યૂ)",
+DlgButtonType		: "પ્રકાર",
+DlgButtonTypeBtn	: "બટન",
+DlgButtonTypeSbm	: "સબ્મિટ",
+DlgButtonTypeRst	: "રિસેટ",
+
+// Checkbox and Radio Button Dialogs
+DlgCheckboxName		: "નામ",
+DlgCheckboxValue	: "વૅલ્યૂ",
+DlgCheckboxSelected	: "સિલેક્ટેડ",
+
+// Form Dialog
+DlgFormName		: "નામ",
+DlgFormAction	: "ક્રિયા",
+DlgFormMethod	: "પદ્ધતિ",
+
+// Select Field Dialog
+DlgSelectName		: "નામ",
+DlgSelectValue		: "વૅલ્યૂ",
+DlgSelectSize		: "સાઇઝ",
+DlgSelectLines		: "લીટીઓ",
+DlgSelectChkMulti	: "એકથી વધારે પસંદ કરી શકો",
+DlgSelectOpAvail	: "ઉપલબ્ધ વિકલ્પ",
+DlgSelectOpText		: "ટેક્સ્ટ",
+DlgSelectOpValue	: "વૅલ્યૂ",
+DlgSelectBtnAdd		: "ઉમેરવું",
+DlgSelectBtnModify	: "બદલવું",
+DlgSelectBtnUp		: "ઉપર",
+DlgSelectBtnDown	: "નીચે",
+DlgSelectBtnSetValue : "પસંદ કરલી વૅલ્યૂ સેટ કરો",
+DlgSelectBtnDelete	: "રદ કરવું",
+
+// Textarea Dialog
+DlgTextareaName	: "નામ",
+DlgTextareaCols	: "કૉલમ/ઊભી કટાર",
+DlgTextareaRows	: "પંક્તિઓ",
+
+// Text Field Dialog
+DlgTextName			: "નામ",
+DlgTextValue		: "વૅલ્યૂ",
+DlgTextCharWidth	: "કેરેક્ટરની પહોળાઈ",
+DlgTextMaxChars		: "અધિકતમ કેરેક્ટર",
+DlgTextType			: "ટાઇપ",
+DlgTextTypeText		: "ટેક્સ્ટ",
+DlgTextTypePass		: "પાસવર્ડ",
+
+// Hidden Field Dialog
+DlgHiddenName	: "નામ",
+DlgHiddenValue	: "વૅલ્યૂ",
+
+// Bulleted List Dialog
+BulletedListProp	: "બુલેટ સૂચિ ગુણ",
+NumberedListProp	: "સંખ્યાંક્તિ સૂચિ ગુણ",
+DlgLstStart			: "શરૂઆતથી",
+DlgLstType			: "પ્રકાર",
+DlgLstTypeCircle	: "વર્તુળ",
+DlgLstTypeDisc		: "ડિસ્ક",
+DlgLstTypeSquare	: "ચોરસ",
+DlgLstTypeNumbers	: "સંખ્યા (1, 2, 3)",
+DlgLstTypeLCase		: "નાના અક્ષર (a, b, c)",
+DlgLstTypeUCase		: "મોટા અક્ષર (A, B, C)",
+DlgLstTypeSRoman	: "નાના રોમન આંક (i, ii, iii)",
+DlgLstTypeLRoman	: "મોટા રોમન આંક (I, II, III)",
+
+// Document Properties Dialog
+DlgDocGeneralTab	: "સાધારણ",
+DlgDocBackTab		: "બૅકગ્રાઉન્ડ",
+DlgDocColorsTab		: "રંગ અને માર્જિન/કિનાર",
+DlgDocMetaTab		: "મેટાડૅટા",
+
+DlgDocPageTitle		: "પેજ મથાળું/ટાઇટલ",
+DlgDocLangDir		: "ભાષા લેખવાની પદ્ધતિ",
+DlgDocLangDirLTR	: "ડાબે થી જમણે (LTR)",
+DlgDocLangDirRTL	: "જમણે થી ડાબે (RTL)",
+DlgDocLangCode		: "ભાષા કોડ",
+DlgDocCharSet		: "કેરેક્ટર સેટ એન્કોડિંગ",
+DlgDocCharSetCE		: "મધ્ય યુરોપિઅન (Central European)",
+DlgDocCharSetCT		: "ચાઇનીઝ (Chinese Traditional Big5)",
+DlgDocCharSetCR		: "સિરીલિક (Cyrillic)",
+DlgDocCharSetGR		: "ગ્રીક (Greek)",
+DlgDocCharSetJP		: "જાપાનિઝ (Japanese)",
+DlgDocCharSetKR		: "કોરીયન (Korean)",
+DlgDocCharSetTR		: "ટર્કિ (Turkish)",
+DlgDocCharSetUN		: "યૂનિકોડ (UTF-8)",
+DlgDocCharSetWE		: "પશ્ચિમ યુરોપિઅન (Western European)",
+DlgDocCharSetOther	: "અન્ય કેરેક્ટર સેટ એન્કોડિંગ",
+
+DlgDocDocType		: "ડૉક્યુમન્ટ પ્રકાર શીર્ષક",
+DlgDocDocTypeOther	: "અન્ય ડૉક્યુમન્ટ પ્રકાર શીર્ષક",
+DlgDocIncXHTML		: "XHTML સૂચના સમાવિષ્ટ કરવી",
+DlgDocBgColor		: "બૅકગ્રાઉન્ડ રંગ",
+DlgDocBgImage		: "બૅકગ્રાઉન્ડ ચિત્ર URL",
+DlgDocBgNoScroll	: "સ્ક્રોલ ન થાય તેવું બૅકગ્રાઉન્ડ",
+DlgDocCText			: "ટેક્સ્ટ",
+DlgDocCLink			: "લિંક",
+DlgDocCVisited		: "વિઝિટેડ લિંક",
+DlgDocCActive		: "સક્રિય લિંક",
+DlgDocMargins		: "પેજ માર્જિન",
+DlgDocMaTop			: "ઉપર",
+DlgDocMaLeft		: "ડાબી",
+DlgDocMaRight		: "જમણી",
+DlgDocMaBottom		: "નીચે",
+DlgDocMeIndex		: "ડૉક્યુમન્ટ ઇન્ડેક્સ સંકેતશબ્દ (અલ્પવિરામ (,) થી અલગ કરો)",
+DlgDocMeDescr		: "ડૉક્યુમન્ટ વર્ણન",
+DlgDocMeAuthor		: "લેખક",
+DlgDocMeCopy		: "કૉપિરાઇટ",
+DlgDocPreview		: "પૂર્વદર્શન",
+
+// Templates Dialog
+Templates			: "ટેમ્પ્લેટ",
+DlgTemplatesTitle	: "કન્ટેન્ટ ટેમ્પ્લેટ",
+DlgTemplatesSelMsg	: "એડિટરમાં ઓપન કરવા ટેમ્પ્લેટ પસંદ કરો (વર્તમાન કન્ટેન્ટ સેવ નહીં થાય):",
+DlgTemplatesLoading	: "ટેમ્પ્લેટ સૂચિ લોડ થાય છે. રાહ જુઓ...",
+DlgTemplatesNoTpl	: "(કોઈ ટેમ્પ્લેટ ડિફાઇન નથી)",
+DlgTemplatesReplace	: "મૂળ શબ્દને બદલો",
+
+// About Dialog
+DlgAboutAboutTab	: "FCKEditor ના વિષે",
+DlgAboutBrowserInfoTab	: "બ્રાઉઝર ના વિષે",
+DlgAboutLicenseTab	: "લાઇસન્સ",
+DlgAboutVersion		: "વર્ઝન",
+DlgAboutInfo		: "વધારે માહિતી માટે:"
+};


Property changes on: announcement/trunk/src/main/webapp/fckeditor/editor/lang/gu.js
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/webapp/fckeditor/editor/lang/he.js
===================================================================
--- announcement/trunk/src/main/webapp/fckeditor/editor/lang/he.js	                        (rev 0)
+++ announcement/trunk/src/main/webapp/fckeditor/editor/lang/he.js	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,515 @@
+/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2008 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * Hebrew language file.
+ */
+
+var FCKLang =
+{
+// Language direction : "ltr" (left to right) or "rtl" (right to left).
+Dir					: "rtl",
+
+ToolbarCollapse		: "כיווץ סרגל הכלים",
+ToolbarExpand		: "פתיחת סרגל הכלים",
+
+// Toolbar Items and Context Menu
+Save				: "שמירה",
+NewPage				: "דף חדש",
+Preview				: "תצוגה מקדימה",
+Cut					: "גזירה",
+Copy				: "העתקה",
+Paste				: "הדבקה",
+PasteText			: "הדבקה כטקסט פשוט",
+PasteWord			: "הדבקה מ-וורד",
+Print				: "הדפסה",
+SelectAll			: "בחירת הכל",
+RemoveFormat		: "הסרת העיצוב",
+InsertLinkLbl		: "קישור",
+InsertLink			: "הוספת/עריכת קישור",
+RemoveLink			: "הסרת הקישור",
+Anchor				: "הוספת/עריכת נקודת עיגון",
+AnchorDelete		: "הסר נקודת עיגון",
+InsertImageLbl		: "תמונה",
+InsertImage			: "הוספת/עריכת תמונה",
+InsertFlashLbl		: "פלאש",
+InsertFlash			: "הוסף/ערוך פלאש",
+InsertTableLbl		: "טבלה",
+InsertTable			: "הוספת/עריכת טבלה",
+InsertLineLbl		: "קו",
+InsertLine			: "הוספת קו אופקי",
+InsertSpecialCharLbl: "תו מיוחד",
+InsertSpecialChar	: "הוספת תו מיוחד",
+InsertSmileyLbl		: "סמיילי",
+InsertSmiley		: "הוספת סמיילי",
+About				: "אודות FCKeditor",
+Bold				: "מודגש",
+Italic				: "נטוי",
+Underline			: "קו תחתון",
+StrikeThrough		: "כתיב מחוק",
+Subscript			: "כתיב תחתון",
+Superscript			: "כתיב עליון",
+LeftJustify			: "יישור לשמאל",
+CenterJustify		: "מרכוז",
+RightJustify		: "יישור לימין",
+BlockJustify		: "יישור לשוליים",
+DecreaseIndent		: "הקטנת אינדנטציה",
+IncreaseIndent		: "הגדלת אינדנטציה",
+Blockquote			: "בלוק ציטוט",
+Undo				: "ביטול צעד אחרון",
+Redo				: "חזרה על צעד אחרון",
+NumberedListLbl		: "רשימה ממוספרת",
+NumberedList		: "הוספת/הסרת רשימה ממוספרת",
+BulletedListLbl		: "רשימת נקודות",
+BulletedList		: "הוספת/הסרת רשימת נקודות",
+ShowTableBorders	: "הצגת מסגרת הטבלה",
+ShowDetails			: "הצגת פרטים",
+Style				: "סגנון",
+FontFormat			: "עיצוב",
+Font				: "גופן",
+FontSize			: "גודל",
+TextColor			: "צבע טקסט",
+BGColor				: "צבע רקע",
+Source				: "מקור",
+Find				: "חיפוש",
+Replace				: "החלפה",
+SpellCheck			: "בדיקת איות",
+UniversalKeyboard	: "מקלדת אוניברסלית",
+PageBreakLbl		: "שבירת דף",
+PageBreak			: "הוסף שבירת דף",
+
+Form			: "טופס",
+Checkbox		: "תיבת סימון",
+RadioButton		: "לחצן אפשרויות",
+TextField		: "שדה טקסט",
+Textarea		: "איזור טקסט",
+HiddenField		: "שדה חבוי",
+Button			: "כפתור",
+SelectionField	: "שדה בחירה",
+ImageButton		: "כפתור תמונה",
+
+FitWindow		: "הגדל את גודל העורך",
+ShowBlocks		: "הצג בלוקים",
+
+// Context Menu
+EditLink			: "עריכת קישור",
+CellCM				: "תא",
+RowCM				: "שורה",
+ColumnCM			: "עמודה",
+InsertRowAfter		: "הוסף שורה אחרי",
+InsertRowBefore		: "הוסף שורה לפני",
+DeleteRows			: "מחיקת שורות",
+InsertColumnAfter	: "הוסף עמודה אחרי",
+InsertColumnBefore	: "הוסף עמודה לפני",
+DeleteColumns		: "מחיקת עמודות",
+InsertCellAfter		: "הוסף תא אחרי",
+InsertCellBefore	: "הוסף תא אחרי",
+DeleteCells			: "מחיקת תאים",
+MergeCells			: "מיזוג תאים",
+MergeRight			: "מזג ימינה",
+MergeDown			: "מזג למטה",
+HorizontalSplitCell	: "פצל תא אופקית",
+VerticalSplitCell	: "פצל תא אנכית",
+TableDelete			: "מחק טבלה",
+CellProperties		: "תכונות התא",
+TableProperties		: "תכונות הטבלה",
+ImageProperties		: "תכונות התמונה",
+FlashProperties		: "מאפייני פלאש",
+
+AnchorProp			: "מאפייני נקודת עיגון",
+ButtonProp			: "מאפייני כפתור",
+CheckboxProp		: "מאפייני תיבת סימון",
+HiddenFieldProp		: "מאפיני שדה חבוי",
+RadioButtonProp		: "מאפייני לחצן אפשרויות",
+ImageButtonProp		: "מאפיני כפתור תמונה",
+TextFieldProp		: "מאפייני שדה טקסט",
+SelectionFieldProp	: "מאפייני שדה בחירה",
+TextareaProp		: "מאפיני איזור טקסט",
+FormProp			: "מאפיני טופס",
+
+FontFormats			: "נורמלי;קוד;כתובת;כותרת;כותרת 2;כותרת 3;כותרת 4;כותרת 5;כותרת 6",
+
+// Alerts and Messages
+ProcessingXHTML		: "מעבד XHTML, נא להמתין...",
+Done				: "המשימה הושלמה",
+PasteWordConfirm	: "נראה הטקסט שבכוונתך להדביק מקורו בקובץ וורד. האם ברצונך לנקות אותו טרם ההדבקה?",
+NotCompatiblePaste	: "פעולה זו זמינה לדפדפן אינטרנט אקספלורר מגירסא 5.5 ומעלה. האם להמשיך בהדבקה ללא הניקוי?",
+UnknownToolbarItem	: "פריט לא ידוע בסרגל הכלים \"%1\"",
+UnknownCommand		: "שם פעולה לא ידוע \"%1\"",
+NotImplemented		: "הפקודה לא מיושמת",
+UnknownToolbarSet	: "ערכת סרגל הכלים \"%1\" לא קיימת",
+NoActiveX			: "הגדרות אבטחה של הדפדפן עלולות לגביל את אפשרויות העריכה.יש לאפשר את האופציה \"הרץ פקדים פעילים ותוספות\". תוכל לחוות טעויות וחיווים של אפשרויות שחסרים.",
+BrowseServerBlocked : "לא ניתן לגשת לדפדפן משאבים.אנא וודא שחוסם חלונות הקופצים לא פעיל.",
+DialogBlocked		: "לא היה ניתן לפתוח חלון דיאלוג. אנא וודא שחוסם חלונות קופצים לא פעיל.",
+
+// Dialogs
+DlgBtnOK			: "אישור",
+DlgBtnCancel		: "ביטול",
+DlgBtnClose			: "סגירה",
+DlgBtnBrowseServer	: "סייר השרת",
+DlgAdvancedTag		: "אפשרויות מתקדמות",
+DlgOpOther			: "<אחר>",
+DlgInfoTab			: "מידע",
+DlgAlertUrl			: "אנה הזן URL",
+
+// General Dialogs Labels
+DlgGenNotSet		: "<לא נקבע>",
+DlgGenId			: "זיהוי (Id)",
+DlgGenLangDir		: "כיוון שפה",
+DlgGenLangDirLtr	: "שמאל לימין (LTR)",
+DlgGenLangDirRtl	: "ימין לשמאל (RTL)",
+DlgGenLangCode		: "קוד שפה",
+DlgGenAccessKey		: "מקש גישה",
+DlgGenName			: "שם",
+DlgGenTabIndex		: "מספר טאב",
+DlgGenLongDescr		: "קישור לתיאור מפורט",
+DlgGenClass			: "גיליונות עיצוב קבוצות",
+DlgGenTitle			: "כותרת מוצעת",
+DlgGenContType		: "Content Type מוצע",
+DlgGenLinkCharset	: "קידוד המשאב המקושר",
+DlgGenStyle			: "סגנון",
+
+// Image Dialog
+DlgImgTitle			: "תכונות התמונה",
+DlgImgInfoTab		: "מידע על התמונה",
+DlgImgBtnUpload		: "שליחה לשרת",
+DlgImgURL			: "כתובת (URL)",
+DlgImgUpload		: "העלאה",
+DlgImgAlt			: "טקסט חלופי",
+DlgImgWidth			: "רוחב",
+DlgImgHeight		: "גובה",
+DlgImgLockRatio		: "נעילת היחס",
+DlgBtnResetSize		: "איפוס הגודל",
+DlgImgBorder		: "מסגרת",
+DlgImgHSpace		: "מרווח אופקי",
+DlgImgVSpace		: "מרווח אנכי",
+DlgImgAlign			: "יישור",
+DlgImgAlignLeft		: "לשמאל",
+DlgImgAlignAbsBottom: "לתחתית האבסולוטית",
+DlgImgAlignAbsMiddle: "מרכוז אבסולוטי",
+DlgImgAlignBaseline	: "לקו התחתית",
+DlgImgAlignBottom	: "לתחתית",
+DlgImgAlignMiddle	: "לאמצע",
+DlgImgAlignRight	: "לימין",
+DlgImgAlignTextTop	: "לראש הטקסט",
+DlgImgAlignTop		: "למעלה",
+DlgImgPreview		: "תצוגה מקדימה",
+DlgImgAlertUrl		: "נא להקליד את כתובת התמונה",
+DlgImgLinkTab		: "קישור",
+
+// Flash Dialog
+DlgFlashTitle		: "מאפיני פלאש",
+DlgFlashChkPlay		: "נגן אוטומטי",
+DlgFlashChkLoop		: "לולאה",
+DlgFlashChkMenu		: "אפשר תפריט פלאש",
+DlgFlashScale		: "גודל",
+DlgFlashScaleAll	: "הצג הכל",
+DlgFlashScaleNoBorder	: "ללא גבולות",
+DlgFlashScaleFit	: "התאמה מושלמת",
+
+// Link Dialog
+DlgLnkWindowTitle	: "קישור",
+DlgLnkInfoTab		: "מידע על הקישור",
+DlgLnkTargetTab		: "מטרה",
+
+DlgLnkType			: "סוג קישור",
+DlgLnkTypeURL		: "כתובת (URL)",
+DlgLnkTypeAnchor	: "עוגן בעמוד זה",
+DlgLnkTypeEMail		: "דוא''ל",
+DlgLnkProto			: "פרוטוקול",
+DlgLnkProtoOther	: "<אחר>",
+DlgLnkURL			: "כתובת (URL)",
+DlgLnkAnchorSel		: "בחירת עוגן",
+DlgLnkAnchorByName	: "עפ''י שם העוגן",
+DlgLnkAnchorById	: "עפ''י זיהוי (Id) הרכיב",
+DlgLnkNoAnchors		: "(אין עוגנים זמינים בדף)",
+DlgLnkEMail			: "כתובת הדוא''ל",
+DlgLnkEMailSubject	: "נושא ההודעה",
+DlgLnkEMailBody		: "גוף ההודעה",
+DlgLnkUpload		: "העלאה",
+DlgLnkBtnUpload		: "שליחה לשרת",
+
+DlgLnkTarget		: "מטרה",
+DlgLnkTargetFrame	: "<מסגרת>",
+DlgLnkTargetPopup	: "<חלון קופץ>",
+DlgLnkTargetBlank	: "חלון חדש (_blank)",
+DlgLnkTargetParent	: "חלון האב (_parent)",
+DlgLnkTargetSelf	: "באותו החלון (_self)",
+DlgLnkTargetTop		: "חלון ראשי (_top)",
+DlgLnkTargetFrameName	: "שם מסגרת היעד",
+DlgLnkPopWinName	: "שם החלון הקופץ",
+DlgLnkPopWinFeat	: "תכונות החלון הקופץ",
+DlgLnkPopResize		: "בעל גודל ניתן לשינוי",
+DlgLnkPopLocation	: "סרגל כתובת",
+DlgLnkPopMenu		: "סרגל תפריט",
+DlgLnkPopScroll		: "ניתן לגלילה",
+DlgLnkPopStatus		: "סרגל חיווי",
+DlgLnkPopToolbar	: "סרגל הכלים",
+DlgLnkPopFullScrn	: "מסך מלא (IE)",
+DlgLnkPopDependent	: "תלוי (Netscape)",
+DlgLnkPopWidth		: "רוחב",
+DlgLnkPopHeight		: "גובה",
+DlgLnkPopLeft		: "מיקום צד שמאל",
+DlgLnkPopTop		: "מיקום צד עליון",
+
+DlnLnkMsgNoUrl		: "נא להקליד את כתובת הקישור (URL)",
+DlnLnkMsgNoEMail	: "נא להקליד את כתובת הדוא''ל",
+DlnLnkMsgNoAnchor	: "נא לבחור עוגן במסמך",
+DlnLnkMsgInvPopName	: "שם החלון הקופץ חייב להתחיל באותיות ואסור לכלול רווחים",
+
+// Color Dialog
+DlgColorTitle		: "בחירת צבע",
+DlgColorBtnClear	: "איפוס",
+DlgColorHighlight	: "נוכחי",
+DlgColorSelected	: "נבחר",
+
+// Smiley Dialog
+DlgSmileyTitle		: "הוספת סמיילי",
+
+// Special Character Dialog
+DlgSpecialCharTitle	: "בחירת תו מיוחד",
+
+// Table Dialog
+DlgTableTitle		: "תכונות טבלה",
+DlgTableRows		: "שורות",
+DlgTableColumns		: "עמודות",
+DlgTableBorder		: "גודל מסגרת",
+DlgTableAlign		: "יישור",
+DlgTableAlignNotSet	: "<לא נקבע>",
+DlgTableAlignLeft	: "שמאל",
+DlgTableAlignCenter	: "מרכז",
+DlgTableAlignRight	: "ימין",
+DlgTableWidth		: "רוחב",
+DlgTableWidthPx		: "פיקסלים",
+DlgTableWidthPc		: "אחוז",
+DlgTableHeight		: "גובה",
+DlgTableCellSpace	: "מרווח תא",
+DlgTableCellPad		: "ריפוד תא",
+DlgTableCaption		: "כיתוב",
+DlgTableSummary		: "סיכום",
+
+// Table Cell Dialog
+DlgCellTitle		: "תכונות תא",
+DlgCellWidth		: "רוחב",
+DlgCellWidthPx		: "פיקסלים",
+DlgCellWidthPc		: "אחוז",
+DlgCellHeight		: "גובה",
+DlgCellWordWrap		: "גלילת שורות",
+DlgCellWordWrapNotSet	: "<לא נקבע>",
+DlgCellWordWrapYes	: "כן",
+DlgCellWordWrapNo	: "לא",
+DlgCellHorAlign		: "יישור אופקי",
+DlgCellHorAlignNotSet	: "<לא נקבע>",
+DlgCellHorAlignLeft	: "שמאל",
+DlgCellHorAlignCenter	: "מרכז",
+DlgCellHorAlignRight: "ימין",
+DlgCellVerAlign		: "יישור אנכי",
+DlgCellVerAlignNotSet	: "<לא נקבע>",
+DlgCellVerAlignTop	: "למעלה",
+DlgCellVerAlignMiddle	: "לאמצע",
+DlgCellVerAlignBottom	: "לתחתית",
+DlgCellVerAlignBaseline	: "קו תחתית",
+DlgCellRowSpan		: "טווח שורות",
+DlgCellCollSpan		: "טווח עמודות",
+DlgCellBackColor	: "צבע רקע",
+DlgCellBorderColor	: "צבע מסגרת",
+DlgCellBtnSelect	: "בחירה...",
+
+// Find and Replace Dialog
+DlgFindAndReplaceTitle	: "חפש והחלף",
+
+// Find Dialog
+DlgFindTitle		: "חיפוש",
+DlgFindFindBtn		: "חיפוש",
+DlgFindNotFoundMsg	: "הטקסט המבוקש לא נמצא.",
+
+// Replace Dialog
+DlgReplaceTitle			: "החלפה",
+DlgReplaceFindLbl		: "חיפוש מחרוזת:",
+DlgReplaceReplaceLbl	: "החלפה במחרוזת:",
+DlgReplaceCaseChk		: "התאמת סוג אותיות (Case)",
+DlgReplaceReplaceBtn	: "החלפה",
+DlgReplaceReplAllBtn	: "החלפה בכל העמוד",
+DlgReplaceWordChk		: "התאמה למילה המלאה",
+
+// Paste Operations / Dialog
+PasteErrorCut	: "הגדרות האבטחה בדפדפן שלך לא מאפשרות לעורך לבצע פעולות גזירה  אוטומטיות. יש להשתמש במקלדת לשם כך (Ctrl+X).",
+PasteErrorCopy	: "הגדרות האבטחה בדפדפן שלך לא מאפשרות לעורך לבצע פעולות העתקה אוטומטיות. יש להשתמש במקלדת לשם כך (Ctrl+C).",
+
+PasteAsText		: "הדבקה כטקסט פשוט",
+PasteFromWord	: "הדבקה מ-וורד",
+
+DlgPasteMsg2	: "אנא הדבק בתוך הקופסה באמצעות  (<STRONG>Ctrl+V</STRONG>) ולחץ על  <STRONG>אישור</STRONG>.",
+DlgPasteSec		: "עקב הגדרות אבטחה בדפדפן, לא ניתן לגשת אל לוח הגזירים (clipboard) בצורה ישירה.אנא בצע הדבק שוב בחלון זה.",
+DlgPasteIgnoreFont		: "התעלם מהגדרות סוג פונט",
+DlgPasteRemoveStyles	: "הסר הגדרות סגנון",
+
+// Color Picker
+ColorAutomatic	: "אוטומטי",
+ColorMoreColors	: "צבעים נוספים...",
+
+// Document Properties
+DocProps		: "מאפיני מסמך",
+
+// Anchor Dialog
+DlgAnchorTitle		: "מאפיני נקודת עיגון",
+DlgAnchorName		: "שם לנקודת עיגון",
+DlgAnchorErrorName	: "אנא הזן שם לנקודת עיגון",
+
+// Speller Pages Dialog
+DlgSpellNotInDic		: "לא נמצא במילון",
+DlgSpellChangeTo		: "שנה ל",
+DlgSpellBtnIgnore		: "התעלם",
+DlgSpellBtnIgnoreAll	: "התעלם מהכל",
+DlgSpellBtnReplace		: "החלף",
+DlgSpellBtnReplaceAll	: "החלף הכל",
+DlgSpellBtnUndo			: "החזר",
+DlgSpellNoSuggestions	: "- אין הצעות -",
+DlgSpellProgress		: "בדיקות איות בתהליך ....",
+DlgSpellNoMispell		: "בדיקות איות הסתיימה: לא נמצאו שגיעות כתיב",
+DlgSpellNoChanges		: "בדיקות איות הסתיימה: לא שונתה אף מילה",
+DlgSpellOneChange		: "בדיקות איות הסתיימה: שונתה מילה אחת",
+DlgSpellManyChanges		: "בדיקות איות הסתיימה: %1 מילים שונו",
+
+IeSpellDownload			: "בודק האיות לא מותקן, האם אתה מעוניין להוריד?",
+
+// Button Dialog
+DlgButtonText		: "טקסט (ערך)",
+DlgButtonType		: "סוג",
+DlgButtonTypeBtn	: "כפתור",
+DlgButtonTypeSbm	: "שלח",
+DlgButtonTypeRst	: "אפס",
+
+// Checkbox and Radio Button Dialogs
+DlgCheckboxName		: "שם",
+DlgCheckboxValue	: "ערך",
+DlgCheckboxSelected	: "בחור",
+
+// Form Dialog
+DlgFormName		: "שם",
+DlgFormAction	: "שלח אל",
+DlgFormMethod	: "סוג שליחה",
+
+// Select Field Dialog
+DlgSelectName		: "שם",
+DlgSelectValue		: "ערך",
+DlgSelectSize		: "גודל",
+DlgSelectLines		: "שורות",
+DlgSelectChkMulti	: "אפשר בחירות מרובות",
+DlgSelectOpAvail	: "אפשרויות זמינות",
+DlgSelectOpText		: "טקסט",
+DlgSelectOpValue	: "ערך",
+DlgSelectBtnAdd		: "הוסף",
+DlgSelectBtnModify	: "שנה",
+DlgSelectBtnUp		: "למעלה",
+DlgSelectBtnDown	: "למטה",
+DlgSelectBtnSetValue : "קבע כברירת מחדל",
+DlgSelectBtnDelete	: "מחק",
+
+// Textarea Dialog
+DlgTextareaName	: "שם",
+DlgTextareaCols	: "עמודות",
+DlgTextareaRows	: "שורות",
+
+// Text Field Dialog
+DlgTextName			: "שם",
+DlgTextValue		: "ערך",
+DlgTextCharWidth	: "רוחב באותיות",
+DlgTextMaxChars		: "מקסימות אותיות",
+DlgTextType			: "סוג",
+DlgTextTypeText		: "טקסט",
+DlgTextTypePass		: "סיסמה",
+
+// Hidden Field Dialog
+DlgHiddenName	: "שם",
+DlgHiddenValue	: "ערך",
+
+// Bulleted List Dialog
+BulletedListProp	: "מאפייני רשימה",
+NumberedListProp	: "מאפייני רשימה ממוספרת",
+DlgLstStart			: "התחלה",
+DlgLstType			: "סוג",
+DlgLstTypeCircle	: "עיגול",
+DlgLstTypeDisc		: "דיסק",
+DlgLstTypeSquare	: "מרובע",
+DlgLstTypeNumbers	: "מספרים (1, 2, 3)",
+DlgLstTypeLCase		: "אותיות קטנות (a, b, c)",
+DlgLstTypeUCase		: "אותיות גדולות (A, B, C)",
+DlgLstTypeSRoman	: "ספרות רומאיות קטנות (i, ii, iii)",
+DlgLstTypeLRoman	: "ספרות רומאיות גדולות (I, II, III)",
+
+// Document Properties Dialog
+DlgDocGeneralTab	: "כללי",
+DlgDocBackTab		: "רקע",
+DlgDocColorsTab		: "צבעים וגבולות",
+DlgDocMetaTab		: "נתוני META",
+
+DlgDocPageTitle		: "כותרת דף",
+DlgDocLangDir		: "כיוון שפה",
+DlgDocLangDirLTR	: "שמאל לימין (LTR)",
+DlgDocLangDirRTL	: "ימין לשמאל (RTL)",
+DlgDocLangCode		: "קוד שפה",
+DlgDocCharSet		: "קידוד אותיות",
+DlgDocCharSetCE		: "מרכז אירופה",
+DlgDocCharSetCT		: "סיני מסורתי (Big5)",
+DlgDocCharSetCR		: "קירילי",
+DlgDocCharSetGR		: "יוונית",
+DlgDocCharSetJP		: "יפנית",
+DlgDocCharSetKR		: "קוראנית",
+DlgDocCharSetTR		: "טורקית",
+DlgDocCharSetUN		: "יוני קוד (UTF-8)",
+DlgDocCharSetWE		: "מערב אירופה",
+DlgDocCharSetOther	: "קידוד אותיות אחר",
+
+DlgDocDocType		: "הגדרות סוג מסמך",
+DlgDocDocTypeOther	: "הגדרות סוג מסמך אחרות",
+DlgDocIncXHTML		: "כלול הגדרות XHTML",
+DlgDocBgColor		: "צבע רקע",
+DlgDocBgImage		: "URL לתמונת רקע",
+DlgDocBgNoScroll	: "רגע ללא גלילה",
+DlgDocCText			: "טקסט",
+DlgDocCLink			: "קישור",
+DlgDocCVisited		: "קישור שבוקר",
+DlgDocCActive		: " קישור פעיל",
+DlgDocMargins		: "גבולות דף",
+DlgDocMaTop			: "למעלה",
+DlgDocMaLeft		: "שמאלה",
+DlgDocMaRight		: "ימינה",
+DlgDocMaBottom		: "למטה",
+DlgDocMeIndex		: "מפתח עניינים של המסמך )מופרד בפסיק(",
+DlgDocMeDescr		: "תאור מסמך",
+DlgDocMeAuthor		: "מחבר",
+DlgDocMeCopy		: "זכויות יוצרים",
+DlgDocPreview		: "תצוגה מקדימה",
+
+// Templates Dialog
+Templates			: "תבניות",
+DlgTemplatesTitle	: "תביות תוכן",
+DlgTemplatesSelMsg	: "אנא בחר תבנית לפתיחה בעורך <BR>התוכן המקורי ימחק:",
+DlgTemplatesLoading	: "מעלה רשימת תבניות אנא המתן",
+DlgTemplatesNoTpl	: "(לא הוגדרו תבניות)",
+DlgTemplatesReplace	: "החלפת תוכן ממשי",
+
+// About Dialog
+DlgAboutAboutTab	: "אודות",
+DlgAboutBrowserInfoTab	: "גירסת דפדפן",
+DlgAboutLicenseTab	: "רשיון",
+DlgAboutVersion		: "גירסא",
+DlgAboutInfo		: "מידע נוסף ניתן למצוא כאן:"
+};


Property changes on: announcement/trunk/src/main/webapp/fckeditor/editor/lang/he.js
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/webapp/fckeditor/editor/lang/hi.js
===================================================================
--- announcement/trunk/src/main/webapp/fckeditor/editor/lang/hi.js	                        (rev 0)
+++ announcement/trunk/src/main/webapp/fckeditor/editor/lang/hi.js	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,515 @@
+/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2008 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * Hindi language file.
+ */
+
+var FCKLang =
+{
+// Language direction : "ltr" (left to right) or "rtl" (right to left).
+Dir					: "ltr",
+
+ToolbarCollapse		: "टूलबार सिमटायें",
+ToolbarExpand		: "टूलबार का विस्तार करें",
+
+// Toolbar Items and Context Menu
+Save				: "सेव",
+NewPage				: "नया पेज",
+Preview				: "प्रीव्यू",
+Cut					: "कट",
+Copy				: "कॉपी",
+Paste				: "पेस्ट",
+PasteText			: "पेस्ट (सादा टॅक्स्ट)",
+PasteWord			: "पेस्ट (वर्ड से)",
+Print				: "प्रिन्ट",
+SelectAll			: "सब सॅलॅक्ट करें",
+RemoveFormat		: "फ़ॉर्मैट हटायें",
+InsertLinkLbl		: "लिंक",
+InsertLink			: "लिंक इन्सर्ट/संपादन",
+RemoveLink			: "लिंक हटायें",
+Anchor				: "ऐंकर इन्सर्ट/संपादन",
+AnchorDelete		: "ऐंकर हटायें",
+InsertImageLbl		: "तस्वीर",
+InsertImage			: "तस्वीर इन्सर्ट/संपादन",
+InsertFlashLbl		: "फ़्लैश",
+InsertFlash			: "फ़्लैश इन्सर्ट/संपादन",
+InsertTableLbl		: "टेबल",
+InsertTable			: "टेबल इन्सर्ट/संपादन",
+InsertLineLbl		: "रेखा",
+InsertLine			: "हॉरिज़ॉन्टल रेखा इन्सर्ट करें",
+InsertSpecialCharLbl: "विशेष करॅक्टर",
+InsertSpecialChar	: "विशेष करॅक्टर इन्सर्ट करें",
+InsertSmileyLbl		: "स्माइली",
+InsertSmiley		: "स्माइली इन्सर्ट करें",
+About				: "FCKeditor के बारे में",
+Bold				: "बोल्ड",
+Italic				: "इटैलिक",
+Underline			: "रेखांकण",
+StrikeThrough		: "स्ट्राइक थ्रू",
+Subscript			: "अधोलेख",
+Superscript			: "अभिलेख",
+LeftJustify			: "बायीं तरफ",
+CenterJustify		: "बीच में",
+RightJustify		: "दायीं तरफ",
+BlockJustify		: "ब्लॉक जस्टीफ़ाई",
+DecreaseIndent		: "इन्डॅन्ट कम करें",
+IncreaseIndent		: "इन्डॅन्ट बढ़ायें",
+Blockquote			: "ब्लॉक-कोट",
+Undo				: "अन्डू",
+Redo				: "रीडू",
+NumberedListLbl		: "अंकीय सूची",
+NumberedList		: "अंकीय सूची इन्सर्ट/संपादन",
+BulletedListLbl		: "बुलॅट सूची",
+BulletedList		: "बुलॅट सूची इन्सर्ट/संपादन",
+ShowTableBorders	: "टेबल बॉर्डरयें दिखायें",
+ShowDetails			: "ज्यादा   दिखायें",
+Style				: "स्टाइल",
+FontFormat			: "फ़ॉर्मैट",
+Font				: "फ़ॉन्ट",
+FontSize			: "साइज़",
+TextColor			: "टेक्स्ट रंग",
+BGColor				: "बैक्ग्राउन्ड रंग",
+Source				: "सोर्स",
+Find				: "खोजें",
+Replace				: "रीप्लेस",
+SpellCheck			: "वर्तनी (स्पेलिंग) जाँच",
+UniversalKeyboard	: "यूनीवर्सल कीबोर्ड",
+PageBreakLbl		: "पेज ब्रेक",
+PageBreak			: "पेज ब्रेक इन्सर्ट् करें",
+
+Form			: "फ़ॉर्म",
+Checkbox		: "चॅक बॉक्स",
+RadioButton		: "रेडिओ बटन",
+TextField		: "टेक्स्ट फ़ील्ड",
+Textarea		: "टेक्स्ट एरिया",
+HiddenField		: "गुप्त फ़ील्ड",
+Button			: "बटन",
+SelectionField	: "चुनाव फ़ील्ड",
+ImageButton		: "तस्वीर बटन",
+
+FitWindow		: "एडिटर साइज़ को चरम सीमा तक बढ़ायें",
+ShowBlocks		: "ब्लॉक दिखायें",
+
+// Context Menu
+EditLink			: "लिंक संपादन",
+CellCM				: "खाना",
+RowCM				: "पंक्ति",
+ColumnCM			: "कालम",
+InsertRowAfter		: "बाद में पंक्ति डालें",
+InsertRowBefore		: "पहले पंक्ति डालें",
+DeleteRows			: "पंक्तियाँ डिलीट करें",
+InsertColumnAfter	: "बाद में कालम डालें",
+InsertColumnBefore	: "पहले कालम डालें",
+DeleteColumns		: "कालम डिलीट करें",
+InsertCellAfter		: "बाद में सैल डालें",
+InsertCellBefore	: "पहले सैल डालें",
+DeleteCells			: "सैल डिलीट करें",
+MergeCells			: "सैल मिलायें",
+MergeRight			: "बाँया विलय",
+MergeDown			: "नीचे विलय करें",
+HorizontalSplitCell	: "सैल को क्षैतिज स्थिति में विभाजित करें",
+VerticalSplitCell	: "सैल को लम्बाकार में विभाजित करें",
+TableDelete			: "टेबल डिलीट करें",
+CellProperties		: "सैल प्रॉपर्टीज़",
+TableProperties		: "टेबल प्रॉपर्टीज़",
+ImageProperties		: "तस्वीर प्रॉपर्टीज़",
+FlashProperties		: "फ़्लैश प्रॉपर्टीज़",
+
+AnchorProp			: "ऐंकर प्रॉपर्टीज़",
+ButtonProp			: "बटन प्रॉपर्टीज़",
+CheckboxProp		: "चॅक बॉक्स प्रॉपर्टीज़",
+HiddenFieldProp		: "गुप्त फ़ील्ड प्रॉपर्टीज़",
+RadioButtonProp		: "रेडिओ बटन प्रॉपर्टीज़",
+ImageButtonProp		: "तस्वीर बटन प्रॉपर्टीज़",
+TextFieldProp		: "टेक्स्ट फ़ील्ड प्रॉपर्टीज़",
+SelectionFieldProp	: "चुनाव फ़ील्ड प्रॉपर्टीज़",
+TextareaProp		: "टेक्स्त एरिया प्रॉपर्टीज़",
+FormProp			: "फ़ॉर्म प्रॉपर्टीज़",
+
+FontFormats			: "साधारण;फ़ॉर्मैटॅड;पता;शीर्षक 1;शीर्षक 2;शीर्षक 3;शीर्षक 4;शीर्षक 5;शीर्षक 6;शीर्षक (DIV)",
+
+// Alerts and Messages
+ProcessingXHTML		: "XHTML प्रोसॅस हो रहा है। ज़रा ठहरें...",
+Done				: "पूरा हुआ",
+PasteWordConfirm	: "आप जो टेक्स्ट पेस्ट करना चाहते हैं, वह वर्ड से कॉपी किया हुआ लग रहा है। क्या पेस्ट करने से पहले आप इसे साफ़ करना चाहेंगे?",
+NotCompatiblePaste	: "यह कमांड इन्टरनॅट एक्स्प्लोरर(Internet Explorer) 5.5 या उसके बाद के वर्ज़न के लिए ही उपलब्ध है। क्या आप बिना साफ़ किए पेस्ट करना चाहेंगे?",
+UnknownToolbarItem	: "अनजान टूलबार आइटम \"%1\"",
+UnknownCommand		: "अनजान कमान्ड \"%1\"",
+NotImplemented		: "कमान्ड इम्प्लीमॅन्ट नहीं किया गया है",
+UnknownToolbarSet	: "टूलबार सॅट \"%1\" उपलब्ध नहीं है",
+NoActiveX			: "आपके ब्राउज़र् की सुरक्शा सेटिंग्स् एडिटर की कुछ् फ़ीचरों को सीमित कर् सकती हैं। क्रिपया \"Run ActiveX controls and plug-ins\" विकल्प को एनेबल करें. आपको एरर्स् और गायब फ़ीचर्स् का अनुभव हो सकता है।",
+BrowseServerBlocked : "रिसोर्सेज़ ब्राउज़र् नहीं खोला जा सका। क्रिपया सभी पॉप्-अप् ब्लॉकर्स् को डिसेबल करें।",
+DialogBlocked		: "डायलग विन्डो नहीं खोला जा सका। क्रिपया सभी पॉप्-अप् ब्लॉकर्स् को डिसेबल करें।",
+
+// Dialogs
+DlgBtnOK			: "ठीक है",
+DlgBtnCancel		: "रद्द करें",
+DlgBtnClose			: "बन्द करें",
+DlgBtnBrowseServer	: "सर्वर ब्राउज़ करें",
+DlgAdvancedTag		: "ऍड्वान्स्ड",
+DlgOpOther			: "<अन्य>",
+DlgInfoTab			: "सूचना",
+DlgAlertUrl			: "URL इन्सर्ट करें",
+
+// General Dialogs Labels
+DlgGenNotSet		: "<सॅट नहीं>",
+DlgGenId			: "Id",
+DlgGenLangDir		: "भाषा लिखने की दिशा",
+DlgGenLangDirLtr	: "बायें से दायें (LTR)",
+DlgGenLangDirRtl	: "दायें से बायें (RTL)",
+DlgGenLangCode		: "भाषा कोड",
+DlgGenAccessKey		: "ऍक्सॅस की",
+DlgGenName			: "नाम",
+DlgGenTabIndex		: "टैब इन्डॅक्स",
+DlgGenLongDescr		: "अधिक विवरण के लिए URL",
+DlgGenClass			: "स्टाइल-शीट क्लास",
+DlgGenTitle			: "परामर्श शीर्शक",
+DlgGenContType		: "परामर्श कन्टॅन्ट प्रकार",
+DlgGenLinkCharset	: "लिंक रिसोर्स करॅक्टर सॅट",
+DlgGenStyle			: "स्टाइल",
+
+// Image Dialog
+DlgImgTitle			: "तस्वीर प्रॉपर्टीज़",
+DlgImgInfoTab		: "तस्वीर की जानकारी",
+DlgImgBtnUpload		: "इसे सर्वर को भेजें",
+DlgImgURL			: "URL",
+DlgImgUpload		: "अपलोड",
+DlgImgAlt			: "वैकल्पिक टेक्स्ट",
+DlgImgWidth			: "चौड़ाई",
+DlgImgHeight		: "ऊँचाई",
+DlgImgLockRatio		: "लॉक अनुपात",
+DlgBtnResetSize		: "रीसॅट साइज़",
+DlgImgBorder		: "बॉर्डर",
+DlgImgHSpace		: "हॉरिज़ॉन्टल स्पेस",
+DlgImgVSpace		: "वर्टिकल स्पेस",
+DlgImgAlign			: "ऍलाइन",
+DlgImgAlignLeft		: "दायें",
+DlgImgAlignAbsBottom: "Abs नीचे",
+DlgImgAlignAbsMiddle: "Abs ऊपर",
+DlgImgAlignBaseline	: "मूल रेखा",
+DlgImgAlignBottom	: "नीचे",
+DlgImgAlignMiddle	: "मध्य",
+DlgImgAlignRight	: "दायें",
+DlgImgAlignTextTop	: "टेक्स्ट ऊपर",
+DlgImgAlignTop		: "ऊपर",
+DlgImgPreview		: "प्रीव्यू",
+DlgImgAlertUrl		: "तस्वीर का URL टाइप करें ",
+DlgImgLinkTab		: "लिंक",
+
+// Flash Dialog
+DlgFlashTitle		: "फ़्लैश प्रॉपर्टीज़",
+DlgFlashChkPlay		: "ऑटो प्ले",
+DlgFlashChkLoop		: "लूप",
+DlgFlashChkMenu		: "फ़्लैश मॅन्यू का प्रयोग करें",
+DlgFlashScale		: "स्केल",
+DlgFlashScaleAll	: "सभी दिखायें",
+DlgFlashScaleNoBorder	: "कोई बॉर्डर नहीं",
+DlgFlashScaleFit	: "बिल्कुल फ़िट",
+
+// Link Dialog
+DlgLnkWindowTitle	: "लिंक",
+DlgLnkInfoTab		: "लिंक  ",
+DlgLnkTargetTab		: "टार्गेट",
+
+DlgLnkType			: "लिंक प्रकार",
+DlgLnkTypeURL		: "URL",
+DlgLnkTypeAnchor	: "इस पेज का ऐंकर",
+DlgLnkTypeEMail		: "ई-मेल",
+DlgLnkProto			: "प्रोटोकॉल",
+DlgLnkProtoOther	: "<अन्य>",
+DlgLnkURL			: "URL",
+DlgLnkAnchorSel		: "ऐंकर चुनें",
+DlgLnkAnchorByName	: "ऐंकर नाम से",
+DlgLnkAnchorById	: "ऍलीमॅन्ट Id से",
+DlgLnkNoAnchors		: "(डॉक्यूमॅन्ट में ऐंकर्स की संख्या)",
+DlgLnkEMail			: "ई-मेल पता",
+DlgLnkEMailSubject	: "संदेश विषय",
+DlgLnkEMailBody		: "संदेश",
+DlgLnkUpload		: "अपलोड",
+DlgLnkBtnUpload		: "इसे सर्वर को भेजें",
+
+DlgLnkTarget		: "टार्गेट",
+DlgLnkTargetFrame	: "<फ़्रेम>",
+DlgLnkTargetPopup	: "<पॉप-अप विन्डो>",
+DlgLnkTargetBlank	: "नया विन्डो (_blank)",
+DlgLnkTargetParent	: "मूल विन्डो (_parent)",
+DlgLnkTargetSelf	: "इसी विन्डो (_self)",
+DlgLnkTargetTop		: "शीर्ष विन्डो (_top)",
+DlgLnkTargetFrameName	: "टार्गेट फ़्रेम का नाम",
+DlgLnkPopWinName	: "पॉप-अप विन्डो का नाम",
+DlgLnkPopWinFeat	: "पॉप-अप विन्डो फ़ीचर्स",
+DlgLnkPopResize		: "साइज़ बदला जा सकता है",
+DlgLnkPopLocation	: "लोकेशन बार",
+DlgLnkPopMenu		: "मॅन्यू बार",
+DlgLnkPopScroll		: "स्क्रॉल बार",
+DlgLnkPopStatus		: "स्टेटस बार",
+DlgLnkPopToolbar	: "टूल बार",
+DlgLnkPopFullScrn	: "फ़ुल स्क्रीन (IE)",
+DlgLnkPopDependent	: "डिपेन्डॅन्ट (Netscape)",
+DlgLnkPopWidth		: "चौड़ाई",
+DlgLnkPopHeight		: "ऊँचाई",
+DlgLnkPopLeft		: "बायीं तरफ",
+DlgLnkPopTop		: "दायीं तरफ",
+
+DlnLnkMsgNoUrl		: "लिंक URL टाइप करें",
+DlnLnkMsgNoEMail	: "ई-मेल पता टाइप करें",
+DlnLnkMsgNoAnchor	: "ऐंकर चुनें",
+DlnLnkMsgInvPopName	: "पॉप-अप का नाम अल्फाबेट से शुरू होना चाहिये और उसमें स्पेस नहीं होने चाहिए",
+
+// Color Dialog
+DlgColorTitle		: "रंग चुनें",
+DlgColorBtnClear	: "साफ़ करें",
+DlgColorHighlight	: "हाइलाइट",
+DlgColorSelected	: "सॅलॅक्टॅड",
+
+// Smiley Dialog
+DlgSmileyTitle		: "स्माइली इन्सर्ट करें",
+
+// Special Character Dialog
+DlgSpecialCharTitle	: "विशेष करॅक्टर चुनें",
+
+// Table Dialog
+DlgTableTitle		: "टेबल प्रॉपर्टीज़",
+DlgTableRows		: "पंक्तियाँ",
+DlgTableColumns		: "कालम",
+DlgTableBorder		: "बॉर्डर साइज़",
+DlgTableAlign		: "ऍलाइन्मॅन्ट",
+DlgTableAlignNotSet	: "<सॅट नहीं>",
+DlgTableAlignLeft	: "दायें",
+DlgTableAlignCenter	: "बीच में",
+DlgTableAlignRight	: "बायें",
+DlgTableWidth		: "चौड़ाई",
+DlgTableWidthPx		: "पिक्सैल",
+DlgTableWidthPc		: "प्रतिशत",
+DlgTableHeight		: "ऊँचाई",
+DlgTableCellSpace	: "सैल अंतर",
+DlgTableCellPad		: "सैल पैडिंग",
+DlgTableCaption		: "शीर्षक",
+DlgTableSummary		: "सारांश",
+
+// Table Cell Dialog
+DlgCellTitle		: "सैल प्रॉपर्टीज़",
+DlgCellWidth		: "चौड़ाई",
+DlgCellWidthPx		: "पिक्सैल",
+DlgCellWidthPc		: "प्रतिशत",
+DlgCellHeight		: "ऊँचाई",
+DlgCellWordWrap		: "वर्ड रैप",
+DlgCellWordWrapNotSet	: "<सॅट नहीं>",
+DlgCellWordWrapYes	: "हाँ",
+DlgCellWordWrapNo	: "नहीं",
+DlgCellHorAlign		: "हॉरिज़ॉन्टल ऍलाइन्मॅन्ट",
+DlgCellHorAlignNotSet	: "<सॅट नहीं>",
+DlgCellHorAlignLeft	: "दायें",
+DlgCellHorAlignCenter	: "बीच में",
+DlgCellHorAlignRight: "बायें",
+DlgCellVerAlign		: "वर्टिकल ऍलाइन्मॅन्ट",
+DlgCellVerAlignNotSet	: "<सॅट नहीं>",
+DlgCellVerAlignTop	: "ऊपर",
+DlgCellVerAlignMiddle	: "मध्य",
+DlgCellVerAlignBottom	: "नीचे",
+DlgCellVerAlignBaseline	: "मूलरेखा",
+DlgCellRowSpan		: "पंक्ति स्पैन",
+DlgCellCollSpan		: "कालम स्पैन",
+DlgCellBackColor	: "बैक्ग्राउन्ड रंग",
+DlgCellBorderColor	: "बॉर्डर का रंग",
+DlgCellBtnSelect	: "चुनें...",
+
+// Find and Replace Dialog
+DlgFindAndReplaceTitle	: "खोजें और बदलें",
+
+// Find Dialog
+DlgFindTitle		: "खोजें",
+DlgFindFindBtn		: "खोजें",
+DlgFindNotFoundMsg	: "आपके द्वारा दिया गया टेक्स्ट नहीं मिला",
+
+// Replace Dialog
+DlgReplaceTitle			: "रिप्लेस",
+DlgReplaceFindLbl		: "यह खोजें:",
+DlgReplaceReplaceLbl	: "इससे रिप्लेस करें:",
+DlgReplaceCaseChk		: "केस मिलायें",
+DlgReplaceReplaceBtn	: "रिप्लेस",
+DlgReplaceReplAllBtn	: "सभी रिप्लेस करें",
+DlgReplaceWordChk		: "पूरा शब्द मिलायें",
+
+// Paste Operations / Dialog
+PasteErrorCut	: "आपके ब्राउज़र की सुरक्षा सॅटिन्ग्स ने कट करने की अनुमति नहीं प्रदान की है। (Ctrl+X) का प्रयोग करें।",
+PasteErrorCopy	: "आपके ब्राआउज़र की सुरक्षा सॅटिन्ग्स ने कॉपी करने की अनुमति नहीं प्रदान की है। (Ctrl+C) का प्रयोग करें।",
+
+PasteAsText		: "पेस्ट (सादा टॅक्स्ट)",
+PasteFromWord	: "पेस्ट (वर्ड से)",
+
+DlgPasteMsg2	: "Ctrl+V का प्रयोग करके पेस्ट करें और ठीक है करें.",
+DlgPasteSec		: "आपके ब्राउज़र की सुरक्षा आपके ब्राउज़र की सुरKश सैटिंग के कारण, एडिटर आपके क्लिपबोर्ड डेटा को नहीं पा सकता है. आपको उसे इस विन्डो में दोबारा पेस्ट करना होगा.",
+DlgPasteIgnoreFont		: "फ़ॉन्ट परिभाषा निकालें",
+DlgPasteRemoveStyles	: "स्टाइल परिभाषा निकालें",
+
+// Color Picker
+ColorAutomatic	: "स्वचालित",
+ColorMoreColors	: "और रंग...",
+
+// Document Properties
+DocProps		: "डॉक्यूमॅन्ट प्रॉपर्टीज़",
+
+// Anchor Dialog
+DlgAnchorTitle		: "ऐंकर प्रॉपर्टीज़",
+DlgAnchorName		: "ऐंकर का नाम",
+DlgAnchorErrorName	: "ऐंकर का नाम टाइप करें",
+
+// Speller Pages Dialog
+DlgSpellNotInDic		: "शब्दकोश में नहीं",
+DlgSpellChangeTo		: "इसमें बदलें",
+DlgSpellBtnIgnore		: "इग्नोर",
+DlgSpellBtnIgnoreAll	: "सभी इग्नोर करें",
+DlgSpellBtnReplace		: "रिप्लेस",
+DlgSpellBtnReplaceAll	: "सभी रिप्लेस करें",
+DlgSpellBtnUndo			: "अन्डू",
+DlgSpellNoSuggestions	: "- कोई सुझाव नहीं -",
+DlgSpellProgress		: "वर्तनी की जाँच (स्पॅल-चॅक) जारी है...",
+DlgSpellNoMispell		: "वर्तनी की जाँच : कोई गलत वर्तनी (स्पॅलिंग) नहीं पाई गई",
+DlgSpellNoChanges		: "वर्तनी की जाँच :कोई शब्द नहीं बदला गया",
+DlgSpellOneChange		: "वर्तनी की जाँच : एक शब्द बदला गया",
+DlgSpellManyChanges		: "वर्तनी की जाँच : %1 शब्द बदले गये",
+
+IeSpellDownload			: "स्पॅल-चॅकर इन्स्टाल नहीं किया गया है। क्या आप इसे डा‌उनलोड करना चाहेंगे?",
+
+// Button Dialog
+DlgButtonText		: "टेक्स्ट (वैल्यू)",
+DlgButtonType		: "प्रकार",
+DlgButtonTypeBtn	: "बटन",
+DlgButtonTypeSbm	: "सब्मिट",
+DlgButtonTypeRst	: "रिसेट",
+
+// Checkbox and Radio Button Dialogs
+DlgCheckboxName		: "नाम",
+DlgCheckboxValue	: "वैल्यू",
+DlgCheckboxSelected	: "सॅलॅक्टॅड",
+
+// Form Dialog
+DlgFormName		: "नाम",
+DlgFormAction	: "क्रिया",
+DlgFormMethod	: "तरीका",
+
+// Select Field Dialog
+DlgSelectName		: "नाम",
+DlgSelectValue		: "वैल्यू",
+DlgSelectSize		: "साइज़",
+DlgSelectLines		: "पंक्तियाँ",
+DlgSelectChkMulti	: "एक से ज्यादा विकल्प चुनने दें",
+DlgSelectOpAvail	: "उपलब्ध विकल्प",
+DlgSelectOpText		: "टेक्स्ट",
+DlgSelectOpValue	: "वैल्यू",
+DlgSelectBtnAdd		: "जोड़ें",
+DlgSelectBtnModify	: "बदलें",
+DlgSelectBtnUp		: "ऊपर",
+DlgSelectBtnDown	: "नीचे",
+DlgSelectBtnSetValue : "चुनी गई वैल्यू सॅट करें",
+DlgSelectBtnDelete	: "डिलीट",
+
+// Textarea Dialog
+DlgTextareaName	: "नाम",
+DlgTextareaCols	: "कालम",
+DlgTextareaRows	: "पंक्तियां",
+
+// Text Field Dialog
+DlgTextName			: "नाम",
+DlgTextValue		: "वैल्यू",
+DlgTextCharWidth	: "करॅक्टर की चौढ़ाई",
+DlgTextMaxChars		: "अधिकतम करॅक्टर",
+DlgTextType			: "टाइप",
+DlgTextTypeText		: "टेक्स्ट",
+DlgTextTypePass		: "पास्वर्ड",
+
+// Hidden Field Dialog
+DlgHiddenName	: "नाम",
+DlgHiddenValue	: "वैल्यू",
+
+// Bulleted List Dialog
+BulletedListProp	: "बुलॅट सूची प्रॉपर्टीज़",
+NumberedListProp	: "अंकीय सूची प्रॉपर्टीज़",
+DlgLstStart			: "प्रारम्भ",
+DlgLstType			: "प्रकार",
+DlgLstTypeCircle	: "गोल",
+DlgLstTypeDisc		: "डिस्क",
+DlgLstTypeSquare	: "चौकॊण",
+DlgLstTypeNumbers	: "अंक (1, 2, 3)",
+DlgLstTypeLCase		: "छोटे अक्षर (a, b, c)",
+DlgLstTypeUCase		: "बड़े अक्षर (A, B, C)",
+DlgLstTypeSRoman	: "छोटे रोमन अंक (i, ii, iii)",
+DlgLstTypeLRoman	: "बड़े रोमन अंक (I, II, III)",
+
+// Document Properties Dialog
+DlgDocGeneralTab	: "आम",
+DlgDocBackTab		: "बैक्ग्राउन्ड",
+DlgDocColorsTab		: "रंग और मार्जिन",
+DlgDocMetaTab		: "मॅटाडेटा",
+
+DlgDocPageTitle		: "पेज शीर्षक",
+DlgDocLangDir		: "भाषा लिखने की दिशा",
+DlgDocLangDirLTR	: "बायें से दायें (LTR)",
+DlgDocLangDirRTL	: "दायें से बायें (RTL)",
+DlgDocLangCode		: "भाषा कोड",
+DlgDocCharSet		: "करेक्टर सॅट ऍन्कोडिंग",
+DlgDocCharSetCE		: "मध्य यूरोपीय (Central European)",
+DlgDocCharSetCT		: "चीनी (Chinese Traditional Big5)",
+DlgDocCharSetCR		: "सिरीलिक (Cyrillic)",
+DlgDocCharSetGR		: "यवन (Greek)",
+DlgDocCharSetJP		: "जापानी (Japanese)",
+DlgDocCharSetKR		: "कोरीयन (Korean)",
+DlgDocCharSetTR		: "तुर्की (Turkish)",
+DlgDocCharSetUN		: "यूनीकोड (UTF-8)",
+DlgDocCharSetWE		: "पश्चिम यूरोपीय (Western European)",
+DlgDocCharSetOther	: "अन्य करेक्टर सॅट ऍन्कोडिंग",
+
+DlgDocDocType		: "डॉक्यूमॅन्ट प्रकार शीर्षक",
+DlgDocDocTypeOther	: "अन्य डॉक्यूमॅन्ट प्रकार शीर्षक",
+DlgDocIncXHTML		: "XHTML सूचना सम्मिलित करें",
+DlgDocBgColor		: "बैक्ग्राउन्ड रंग",
+DlgDocBgImage		: "बैक्ग्राउन्ड तस्वीर URL",
+DlgDocBgNoScroll	: "स्क्रॉल न करने वाला बैक्ग्राउन्ड",
+DlgDocCText			: "टेक्स्ट",
+DlgDocCLink			: "लिंक",
+DlgDocCVisited		: "विज़िट किया गया लिंक",
+DlgDocCActive		: "सक्रिय लिंक",
+DlgDocMargins		: "पेज मार्जिन",
+DlgDocMaTop			: "ऊपर",
+DlgDocMaLeft		: "बायें",
+DlgDocMaRight		: "दायें",
+DlgDocMaBottom		: "नीचे",
+DlgDocMeIndex		: "डॉक्युमॅन्ट इन्डेक्स संकेतशब्द (अल्पविराम से अलग करें)",
+DlgDocMeDescr		: "डॉक्यूमॅन्ट करॅक्टरन",
+DlgDocMeAuthor		: "लेखक",
+DlgDocMeCopy		: "कॉपीराइट",
+DlgDocPreview		: "प्रीव्यू",
+
+// Templates Dialog
+Templates			: "टॅम्प्लेट",
+DlgTemplatesTitle	: "कन्टेन्ट टॅम्प्लेट",
+DlgTemplatesSelMsg	: "ऍडिटर में ओपन करने हेतु टॅम्प्लेट चुनें(वर्तमान कन्टॅन्ट सेव नहीं होंगे):",
+DlgTemplatesLoading	: "टॅम्प्लेट सूची लोड की जा रही है। ज़रा ठहरें...",
+DlgTemplatesNoTpl	: "(कोई टॅम्प्लेट डिफ़ाइन नहीं किया गया है)",
+DlgTemplatesReplace	: "मूल शब्दों को बदलें",
+
+// About Dialog
+DlgAboutAboutTab	: "FCKEditor के बारे में",
+DlgAboutBrowserInfoTab	: "ब्राउज़र के बारे में",
+DlgAboutLicenseTab	: "लाइसैन्स",
+DlgAboutVersion		: "वर्ज़न",
+DlgAboutInfo		: "अधिक जानकारी के लिये यहाँ जायें:"
+};


Property changes on: announcement/trunk/src/main/webapp/fckeditor/editor/lang/hi.js
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/webapp/fckeditor/editor/lang/hr.js
===================================================================
--- announcement/trunk/src/main/webapp/fckeditor/editor/lang/hr.js	                        (rev 0)
+++ announcement/trunk/src/main/webapp/fckeditor/editor/lang/hr.js	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,515 @@
+/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2008 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * Croatian language file.
+ */
+
+var FCKLang =
+{
+// Language direction : "ltr" (left to right) or "rtl" (right to left).
+Dir					: "ltr",
+
+ToolbarCollapse		: "Smanji trake s alatima",
+ToolbarExpand		: "Proširi trake s alatima",
+
+// Toolbar Items and Context Menu
+Save				: "Snimi",
+NewPage				: "Nova stranica",
+Preview				: "Pregledaj",
+Cut					: "Izreži",
+Copy				: "Kopiraj",
+Paste				: "Zalijepi",
+PasteText			: "Zalijepi kao čisti tekst",
+PasteWord			: "Zalijepi iz Worda",
+Print				: "Ispiši",
+SelectAll			: "Odaberi sve",
+RemoveFormat		: "Ukloni formatiranje",
+InsertLinkLbl		: "Link",
+InsertLink			: "Ubaci/promijeni link",
+RemoveLink			: "Ukloni link",
+Anchor				: "Ubaci/promijeni sidro",
+AnchorDelete		: "Ukloni sidro",
+InsertImageLbl		: "Slika",
+InsertImage			: "Ubaci/promijeni sliku",
+InsertFlashLbl		: "Flash",
+InsertFlash			: "Ubaci/promijeni Flash",
+InsertTableLbl		: "Tablica",
+InsertTable			: "Ubaci/promijeni tablicu",
+InsertLineLbl		: "Linija",
+InsertLine			: "Ubaci vodoravnu liniju",
+InsertSpecialCharLbl: "Posebni karakteri",
+InsertSpecialChar	: "Ubaci posebne znakove",
+InsertSmileyLbl		: "Smješko",
+InsertSmiley		: "Ubaci smješka",
+About				: "O FCKeditoru",
+Bold				: "Podebljaj",
+Italic				: "Ukosi",
+Underline			: "Potcrtano",
+StrikeThrough		: "Precrtano",
+Subscript			: "Subscript",
+Superscript			: "Superscript",
+LeftJustify			: "Lijevo poravnanje",
+CenterJustify		: "Središnje poravnanje",
+RightJustify		: "Desno poravnanje",
+BlockJustify		: "Blok poravnanje",
+DecreaseIndent		: "Pomakni ulijevo",
+IncreaseIndent		: "Pomakni udesno",
+Blockquote			: "Blockquote",
+Undo				: "Poništi",
+Redo				: "Ponovi",
+NumberedListLbl		: "Brojčana lista",
+NumberedList		: "Ubaci/ukloni brojčanu listu",
+BulletedListLbl		: "Obična lista",
+BulletedList		: "Ubaci/ukloni običnu listu",
+ShowTableBorders	: "Prikaži okvir tablice",
+ShowDetails			: "Prikaži detalje",
+Style				: "Stil",
+FontFormat			: "Format",
+Font				: "Font",
+FontSize			: "Veličina",
+TextColor			: "Boja teksta",
+BGColor				: "Boja pozadine",
+Source				: "Kôd",
+Find				: "Pronađi",
+Replace				: "Zamijeni",
+SpellCheck			: "Provjeri pravopis",
+UniversalKeyboard	: "Univerzalna tipkovnica",
+PageBreakLbl		: "Prijelom stranice",
+PageBreak			: "Ubaci prijelom stranice",
+
+Form			: "Form",
+Checkbox		: "Checkbox",
+RadioButton		: "Radio Button",
+TextField		: "Text Field",
+Textarea		: "Textarea",
+HiddenField		: "Hidden Field",
+Button			: "Button",
+SelectionField	: "Selection Field",
+ImageButton		: "Image Button",
+
+FitWindow		: "Povećaj veličinu editora",
+ShowBlocks		: "Prikaži blokove",
+
+// Context Menu
+EditLink			: "Promijeni link",
+CellCM				: "Ćelija",
+RowCM				: "Red",
+ColumnCM			: "Kolona",
+InsertRowAfter		: "Ubaci red poslije",
+InsertRowBefore		: "Ubaci red prije",
+DeleteRows			: "Izbriši redove",
+InsertColumnAfter	: "Ubaci kolonu poslije",
+InsertColumnBefore	: "Ubaci kolonu prije",
+DeleteColumns		: "Izbriši kolone",
+InsertCellAfter		: "Ubaci ćeliju poslije",
+InsertCellBefore	: "Ubaci ćeliju prije",
+DeleteCells			: "Izbriši ćelije",
+MergeCells			: "Spoji ćelije",
+MergeRight			: "Spoji desno",
+MergeDown			: "Spoji dolje",
+HorizontalSplitCell	: "Podijeli ćeliju vodoravno",
+VerticalSplitCell	: "Podijeli ćeliju okomito",
+TableDelete			: "Izbriši tablicu",
+CellProperties		: "Svojstva ćelije",
+TableProperties		: "Svojstva tablice",
+ImageProperties		: "Svojstva slike",
+FlashProperties		: "Flash svojstva",
+
+AnchorProp			: "Svojstva sidra",
+ButtonProp			: "Image Button svojstva",
+CheckboxProp		: "Checkbox svojstva",
+HiddenFieldProp		: "Hidden Field svojstva",
+RadioButtonProp		: "Radio Button svojstva",
+ImageButtonProp		: "Image Button svojstva",
+TextFieldProp		: "Text Field svojstva",
+SelectionFieldProp	: "Selection svojstva",
+TextareaProp		: "Textarea svojstva",
+FormProp			: "Form svojstva",
+
+FontFormats			: "Normal;Formatted;Address;Heading 1;Heading 2;Heading 3;Heading 4;Heading 5;Heading 6;Normal (DIV)",
+
+// Alerts and Messages
+ProcessingXHTML		: "Obrađujem XHTML. Molimo pričekajte...",
+Done				: "Završio",
+PasteWordConfirm	: "Tekst koji želite zalijepiti čini se da je kopiran iz Worda. Želite li prije očistiti tekst?",
+NotCompatiblePaste	: "Ova naredba je dostupna samo u Internet Exploreru 5.5 ili novijem. Želite li nastaviti bez čišćenja?",
+UnknownToolbarItem	: "Nepoznati član trake s alatima \"%1\"",
+UnknownCommand		: "Nepoznata naredba \"%1\"",
+NotImplemented		: "Naredba nije implementirana",
+UnknownToolbarSet	: "Traka s alatima \"%1\" ne postoji",
+NoActiveX			: "Vaše postavke pretraživača mogle bi ograničiti neke od mogućnosti editora. Morate uključiti opciju \"Run ActiveX controls and plug-ins\" u postavkama. Ukoliko to ne učinite, moguće su razliite greške tijekom rada.",
+BrowseServerBlocked : "Pretraivač nije moguće otvoriti. Provjerite da li je uključeno blokiranje pop-up prozora.",
+DialogBlocked		: "Nije moguće otvoriti novi prozor. Provjerite da li je uključeno blokiranje pop-up prozora.",
+
+// Dialogs
+DlgBtnOK			: "OK",
+DlgBtnCancel		: "Poništi",
+DlgBtnClose			: "Zatvori",
+DlgBtnBrowseServer	: "Pretraži server",
+DlgAdvancedTag		: "Napredno",
+DlgOpOther			: "<Drugo>",
+DlgInfoTab			: "Info",
+DlgAlertUrl			: "Molimo unesite URL",
+
+// General Dialogs Labels
+DlgGenNotSet		: "<nije postavljeno>",
+DlgGenId			: "Id",
+DlgGenLangDir		: "Smjer jezika",
+DlgGenLangDirLtr	: "S lijeva na desno (LTR)",
+DlgGenLangDirRtl	: "S desna na lijevo (RTL)",
+DlgGenLangCode		: "Kôd jezika",
+DlgGenAccessKey		: "Pristupna tipka",
+DlgGenName			: "Naziv",
+DlgGenTabIndex		: "Tab Indeks",
+DlgGenLongDescr		: "Dugački opis URL",
+DlgGenClass			: "Stylesheet klase",
+DlgGenTitle			: "Advisory naslov",
+DlgGenContType		: "Advisory vrsta sadržaja",
+DlgGenLinkCharset	: "Kodna stranica povezanih resursa",
+DlgGenStyle			: "Stil",
+
+// Image Dialog
+DlgImgTitle			: "Svojstva slika",
+DlgImgInfoTab		: "Info slike",
+DlgImgBtnUpload		: "Pošalji na server",
+DlgImgURL			: "URL",
+DlgImgUpload		: "Pošalji",
+DlgImgAlt			: "Alternativni tekst",
+DlgImgWidth			: "Širina",
+DlgImgHeight		: "Visina",
+DlgImgLockRatio		: "Zaključaj odnos",
+DlgBtnResetSize		: "Obriši veličinu",
+DlgImgBorder		: "Okvir",
+DlgImgHSpace		: "HSpace",
+DlgImgVSpace		: "VSpace",
+DlgImgAlign			: "Poravnaj",
+DlgImgAlignLeft		: "Lijevo",
+DlgImgAlignAbsBottom: "Abs dolje",
+DlgImgAlignAbsMiddle: "Abs sredina",
+DlgImgAlignBaseline	: "Bazno",
+DlgImgAlignBottom	: "Dolje",
+DlgImgAlignMiddle	: "Sredina",
+DlgImgAlignRight	: "Desno",
+DlgImgAlignTextTop	: "Vrh teksta",
+DlgImgAlignTop		: "Vrh",
+DlgImgPreview		: "Pregledaj",
+DlgImgAlertUrl		: "Unesite URL slike",
+DlgImgLinkTab		: "Link",
+
+// Flash Dialog
+DlgFlashTitle		: "Flash svojstva",
+DlgFlashChkPlay		: "Auto Play",
+DlgFlashChkLoop		: "Ponavljaj",
+DlgFlashChkMenu		: "Omogući Flash izbornik",
+DlgFlashScale		: "Omjer",
+DlgFlashScaleAll	: "Prikaži sve",
+DlgFlashScaleNoBorder	: "Bez okvira",
+DlgFlashScaleFit	: "Točna veličina",
+
+// Link Dialog
+DlgLnkWindowTitle	: "Link",
+DlgLnkInfoTab		: "Link Info",
+DlgLnkTargetTab		: "Meta",
+
+DlgLnkType			: "Link vrsta",
+DlgLnkTypeURL		: "URL",
+DlgLnkTypeAnchor	: "Sidro na ovoj stranici",
+DlgLnkTypeEMail		: "E-Mail",
+DlgLnkProto			: "Protokol",
+DlgLnkProtoOther	: "<drugo>",
+DlgLnkURL			: "URL",
+DlgLnkAnchorSel		: "Odaberi sidro",
+DlgLnkAnchorByName	: "Po nazivu sidra",
+DlgLnkAnchorById	: "Po Id elementa",
+DlgLnkNoAnchors		: "(Nema dostupnih sidra)",
+DlgLnkEMail			: "E-Mail adresa",
+DlgLnkEMailSubject	: "Naslov",
+DlgLnkEMailBody		: "Sadržaj poruke",
+DlgLnkUpload		: "Pošalji",
+DlgLnkBtnUpload		: "Pošalji na server",
+
+DlgLnkTarget		: "Meta",
+DlgLnkTargetFrame	: "<okvir>",
+DlgLnkTargetPopup	: "<popup prozor>",
+DlgLnkTargetBlank	: "Novi prozor (_blank)",
+DlgLnkTargetParent	: "Roditeljski prozor (_parent)",
+DlgLnkTargetSelf	: "Isti prozor (_self)",
+DlgLnkTargetTop		: "Vršni prozor (_top)",
+DlgLnkTargetFrameName	: "Ime ciljnog okvira",
+DlgLnkPopWinName	: "Naziv popup prozora",
+DlgLnkPopWinFeat	: "Mogućnosti popup prozora",
+DlgLnkPopResize		: "Promjenljive veličine",
+DlgLnkPopLocation	: "Traka za lokaciju",
+DlgLnkPopMenu		: "Izborna traka",
+DlgLnkPopScroll		: "Scroll traka",
+DlgLnkPopStatus		: "Statusna traka",
+DlgLnkPopToolbar	: "Traka s alatima",
+DlgLnkPopFullScrn	: "Cijeli ekran (IE)",
+DlgLnkPopDependent	: "Ovisno (Netscape)",
+DlgLnkPopWidth		: "Širina",
+DlgLnkPopHeight		: "Visina",
+DlgLnkPopLeft		: "Lijeva pozicija",
+DlgLnkPopTop		: "Gornja pozicija",
+
+DlnLnkMsgNoUrl		: "Molimo upišite URL link",
+DlnLnkMsgNoEMail	: "Molimo upišite e-mail adresu",
+DlnLnkMsgNoAnchor	: "Molimo odaberite sidro",
+DlnLnkMsgInvPopName	: "Ime popup prozora mora početi sa slovom i ne smije sadržavati razmake",
+
+// Color Dialog
+DlgColorTitle		: "Odaberite boju",
+DlgColorBtnClear	: "Obriši",
+DlgColorHighlight	: "Osvijetli",
+DlgColorSelected	: "Odaberi",
+
+// Smiley Dialog
+DlgSmileyTitle		: "Ubaci smješka",
+
+// Special Character Dialog
+DlgSpecialCharTitle	: "Odaberite posebni karakter",
+
+// Table Dialog
+DlgTableTitle		: "Svojstva tablice",
+DlgTableRows		: "Redova",
+DlgTableColumns		: "Kolona",
+DlgTableBorder		: "Veličina okvira",
+DlgTableAlign		: "Poravnanje",
+DlgTableAlignNotSet	: "<nije postavljeno>",
+DlgTableAlignLeft	: "Lijevo",
+DlgTableAlignCenter	: "Središnje",
+DlgTableAlignRight	: "Desno",
+DlgTableWidth		: "Širina",
+DlgTableWidthPx		: "piksela",
+DlgTableWidthPc		: "postotaka",
+DlgTableHeight		: "Visina",
+DlgTableCellSpace	: "Prostornost ćelija",
+DlgTableCellPad		: "Razmak ćelija",
+DlgTableCaption		: "Naslov",
+DlgTableSummary		: "Sažetak",
+
+// Table Cell Dialog
+DlgCellTitle		: "Svojstva ćelije",
+DlgCellWidth		: "Širina",
+DlgCellWidthPx		: "piksela",
+DlgCellWidthPc		: "postotaka",
+DlgCellHeight		: "Visina",
+DlgCellWordWrap		: "Word Wrap",
+DlgCellWordWrapNotSet	: "<nije postavljeno>",
+DlgCellWordWrapYes	: "Da",
+DlgCellWordWrapNo	: "Ne",
+DlgCellHorAlign		: "Vodoravno poravnanje",
+DlgCellHorAlignNotSet	: "<nije postavljeno>",
+DlgCellHorAlignLeft	: "Lijevo",
+DlgCellHorAlignCenter	: "Središnje",
+DlgCellHorAlignRight: "Desno",
+DlgCellVerAlign		: "Okomito poravnanje",
+DlgCellVerAlignNotSet	: "<nije postavljeno>",
+DlgCellVerAlignTop	: "Gornje",
+DlgCellVerAlignMiddle	: "Srednišnje",
+DlgCellVerAlignBottom	: "Donje",
+DlgCellVerAlignBaseline	: "Bazno",
+DlgCellRowSpan		: "Spajanje redova",
+DlgCellCollSpan		: "Spajanje kolona",
+DlgCellBackColor	: "Boja pozadine",
+DlgCellBorderColor	: "Boja okvira",
+DlgCellBtnSelect	: "Odaberi...",
+
+// Find and Replace Dialog
+DlgFindAndReplaceTitle	: "Pronađi i zamijeni",
+
+// Find Dialog
+DlgFindTitle		: "Pronađi",
+DlgFindFindBtn		: "Pronađi",
+DlgFindNotFoundMsg	: "Traženi tekst nije pronađen.",
+
+// Replace Dialog
+DlgReplaceTitle			: "Zamijeni",
+DlgReplaceFindLbl		: "Pronađi:",
+DlgReplaceReplaceLbl	: "Zamijeni s:",
+DlgReplaceCaseChk		: "Usporedi mala/velika slova",
+DlgReplaceReplaceBtn	: "Zamijeni",
+DlgReplaceReplAllBtn	: "Zamijeni sve",
+DlgReplaceWordChk		: "Usporedi cijele riječi",
+
+// Paste Operations / Dialog
+PasteErrorCut	: "Sigurnosne postavke Vašeg pretraživača ne dozvoljavaju operacije automatskog izrezivanja. Molimo koristite kraticu na tipkovnici (Ctrl+X).",
+PasteErrorCopy	: "Sigurnosne postavke Vašeg pretraživača ne dozvoljavaju operacije automatskog kopiranja. Molimo koristite kraticu na tipkovnici (Ctrl+C).",
+
+PasteAsText		: "Zalijepi kao čisti tekst",
+PasteFromWord	: "Zalijepi iz Worda",
+
+DlgPasteMsg2	: "Molimo zaljepite unutar doljnjeg okvira koristeći tipkovnicu (<STRONG>Ctrl+V</STRONG>) i kliknite <STRONG>OK</STRONG>.",
+DlgPasteSec		: "Zbog sigurnosnih postavki Vašeg pretraživača, editor nema direktan pristup Vašem međuspremniku. Potrebno je ponovno zalijepiti tekst u ovaj prozor.",
+DlgPasteIgnoreFont		: "Zanemari definiciju vrste fonta",
+DlgPasteRemoveStyles	: "Ukloni definicije stilova",
+
+// Color Picker
+ColorAutomatic	: "Automatski",
+ColorMoreColors	: "Više boja...",
+
+// Document Properties
+DocProps		: "Svojstva dokumenta",
+
+// Anchor Dialog
+DlgAnchorTitle		: "Svojstva sidra",
+DlgAnchorName		: "Ime sidra",
+DlgAnchorErrorName	: "Molimo unesite ime sidra",
+
+// Speller Pages Dialog
+DlgSpellNotInDic		: "Nije u rječniku",
+DlgSpellChangeTo		: "Promijeni u",
+DlgSpellBtnIgnore		: "Zanemari",
+DlgSpellBtnIgnoreAll	: "Zanemari sve",
+DlgSpellBtnReplace		: "Zamijeni",
+DlgSpellBtnReplaceAll	: "Zamijeni sve",
+DlgSpellBtnUndo			: "Vrati",
+DlgSpellNoSuggestions	: "-Nema preporuke-",
+DlgSpellProgress		: "Provjera u tijeku...",
+DlgSpellNoMispell		: "Provjera završena: Nema grešaka",
+DlgSpellNoChanges		: "Provjera završena: Nije napravljena promjena",
+DlgSpellOneChange		: "Provjera završena: Jedna riječ promjenjena",
+DlgSpellManyChanges		: "Provjera završena: Promijenjeno %1 riječi",
+
+IeSpellDownload			: "Provjera pravopisa nije instalirana. Želite li skinuti provjeru pravopisa?",
+
+// Button Dialog
+DlgButtonText		: "Tekst (vrijednost)",
+DlgButtonType		: "Vrsta",
+DlgButtonTypeBtn	: "Gumb",
+DlgButtonTypeSbm	: "Pošalji",
+DlgButtonTypeRst	: "Poništi",
+
+// Checkbox and Radio Button Dialogs
+DlgCheckboxName		: "Ime",
+DlgCheckboxValue	: "Vrijednost",
+DlgCheckboxSelected	: "Odabrano",
+
+// Form Dialog
+DlgFormName		: "Ime",
+DlgFormAction	: "Akcija",
+DlgFormMethod	: "Metoda",
+
+// Select Field Dialog
+DlgSelectName		: "Ime",
+DlgSelectValue		: "Vrijednost",
+DlgSelectSize		: "Veličina",
+DlgSelectLines		: "linija",
+DlgSelectChkMulti	: "Dozvoli višestruki odabir",
+DlgSelectOpAvail	: "Dostupne opcije",
+DlgSelectOpText		: "Tekst",
+DlgSelectOpValue	: "Vrijednost",
+DlgSelectBtnAdd		: "Dodaj",
+DlgSelectBtnModify	: "Promijeni",
+DlgSelectBtnUp		: "Gore",
+DlgSelectBtnDown	: "Dolje",
+DlgSelectBtnSetValue : "Postavi kao odabranu vrijednost",
+DlgSelectBtnDelete	: "Obriši",
+
+// Textarea Dialog
+DlgTextareaName	: "Ime",
+DlgTextareaCols	: "Kolona",
+DlgTextareaRows	: "Redova",
+
+// Text Field Dialog
+DlgTextName			: "Ime",
+DlgTextValue		: "Vrijednost",
+DlgTextCharWidth	: "Širina",
+DlgTextMaxChars		: "Najviše karaktera",
+DlgTextType			: "Vrsta",
+DlgTextTypeText		: "Tekst",
+DlgTextTypePass		: "Šifra",
+
+// Hidden Field Dialog
+DlgHiddenName	: "Ime",
+DlgHiddenValue	: "Vrijednost",
+
+// Bulleted List Dialog
+BulletedListProp	: "Svojstva liste",
+NumberedListProp	: "Svojstva brojčane liste",
+DlgLstStart			: "Početak",
+DlgLstType			: "Vrsta",
+DlgLstTypeCircle	: "Krug",
+DlgLstTypeDisc		: "Disk",
+DlgLstTypeSquare	: "Kvadrat",
+DlgLstTypeNumbers	: "Brojevi (1, 2, 3)",
+DlgLstTypeLCase		: "Mala slova (a, b, c)",
+DlgLstTypeUCase		: "Velika slova (A, B, C)",
+DlgLstTypeSRoman	: "Male rimske brojke (i, ii, iii)",
+DlgLstTypeLRoman	: "Velike rimske brojke (I, II, III)",
+
+// Document Properties Dialog
+DlgDocGeneralTab	: "Općenito",
+DlgDocBackTab		: "Pozadina",
+DlgDocColorsTab		: "Boje i margine",
+DlgDocMetaTab		: "Meta Data",
+
+DlgDocPageTitle		: "Naslov stranice",
+DlgDocLangDir		: "Smjer jezika",
+DlgDocLangDirLTR	: "S lijeva na desno",
+DlgDocLangDirRTL	: "S desna na lijevo",
+DlgDocLangCode		: "Kôd jezika",
+DlgDocCharSet		: "Enkodiranje znakova",
+DlgDocCharSetCE		: "Središnja Europa",
+DlgDocCharSetCT		: "Tradicionalna kineska (Big5)",
+DlgDocCharSetCR		: "Ćirilica",
+DlgDocCharSetGR		: "Grčka",
+DlgDocCharSetJP		: "Japanska",
+DlgDocCharSetKR		: "Koreanska",
+DlgDocCharSetTR		: "Turska",
+DlgDocCharSetUN		: "Unicode (UTF-8)",
+DlgDocCharSetWE		: "Zapadna Europa",
+DlgDocCharSetOther	: "Ostalo enkodiranje znakova",
+
+DlgDocDocType		: "Zaglavlje vrste dokumenta",
+DlgDocDocTypeOther	: "Ostalo zaglavlje vrste dokumenta",
+DlgDocIncXHTML		: "Ubaci XHTML deklaracije",
+DlgDocBgColor		: "Boja pozadine",
+DlgDocBgImage		: "URL slike pozadine",
+DlgDocBgNoScroll	: "Pozadine se ne pomiče",
+DlgDocCText			: "Tekst",
+DlgDocCLink			: "Link",
+DlgDocCVisited		: "Posjećeni link",
+DlgDocCActive		: "Aktivni link",
+DlgDocMargins		: "Margine stranice",
+DlgDocMaTop			: "Vrh",
+DlgDocMaLeft		: "Lijevo",
+DlgDocMaRight		: "Desno",
+DlgDocMaBottom		: "Dolje",
+DlgDocMeIndex		: "Ključne riječi dokumenta (odvojene zarezom)",
+DlgDocMeDescr		: "Opis dokumenta",
+DlgDocMeAuthor		: "Autor",
+DlgDocMeCopy		: "Autorska prava",
+DlgDocPreview		: "Pregledaj",
+
+// Templates Dialog
+Templates			: "Predlošci",
+DlgTemplatesTitle	: "Predlošci sadržaja",
+DlgTemplatesSelMsg	: "Molimo odaberite predložak koji želite otvoriti<br>(stvarni sadržaj će biti izgubljen):",
+DlgTemplatesLoading	: "Učitavam listu predložaka. Molimo pričekajte...",
+DlgTemplatesNoTpl	: "(Nema definiranih predložaka)",
+DlgTemplatesReplace	: "Zamijeni trenutne sadržaje",
+
+// About Dialog
+DlgAboutAboutTab	: "O FCKEditoru",
+DlgAboutBrowserInfoTab	: "Podaci o pretraživaču",
+DlgAboutLicenseTab	: "Licenca",
+DlgAboutVersion		: "inačica",
+DlgAboutInfo		: "Za više informacija posjetite"
+};


Property changes on: announcement/trunk/src/main/webapp/fckeditor/editor/lang/hr.js
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/webapp/fckeditor/editor/lang/hu.js
===================================================================
--- announcement/trunk/src/main/webapp/fckeditor/editor/lang/hu.js	                        (rev 0)
+++ announcement/trunk/src/main/webapp/fckeditor/editor/lang/hu.js	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,515 @@
+/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2008 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * Hungarian language file.
+ */
+
+var FCKLang =
+{
+// Language direction : "ltr" (left to right) or "rtl" (right to left).
+Dir					: "ltr",
+
+ToolbarCollapse		: "Eszköztár elrejtése",
+ToolbarExpand		: "Eszköztár megjelenítése",
+
+// Toolbar Items and Context Menu
+Save				: "Mentés",
+NewPage				: "Új oldal",
+Preview				: "Előnézet",
+Cut					: "Kivágás",
+Copy				: "Másolás",
+Paste				: "Beillesztés",
+PasteText			: "Beillesztés formázás nélkül",
+PasteWord			: "Beillesztés Word-ből",
+Print				: "Nyomtatás",
+SelectAll			: "Mindent kijelöl",
+RemoveFormat		: "Formázás eltávolítása",
+InsertLinkLbl		: "Hivatkozás",
+InsertLink			: "Hivatkozás beillesztése/módosítása",
+RemoveLink			: "Hivatkozás törlése",
+Anchor				: "Horgony beillesztése/szerkesztése",
+AnchorDelete		: "Horgony eltávolítása",
+InsertImageLbl		: "Kép",
+InsertImage			: "Kép beillesztése/módosítása",
+InsertFlashLbl		: "Flash",
+InsertFlash			: "Flash beillesztése, módosítása",
+InsertTableLbl		: "Táblázat",
+InsertTable			: "Táblázat beillesztése/módosítása",
+InsertLineLbl		: "Vonal",
+InsertLine			: "Elválasztóvonal beillesztése",
+InsertSpecialCharLbl: "Speciális karakter",
+InsertSpecialChar	: "Speciális karakter beillesztése",
+InsertSmileyLbl		: "Hangulatjelek",
+InsertSmiley		: "Hangulatjelek beillesztése",
+About				: "FCKeditor névjegy",
+Bold				: "Félkövér",
+Italic				: "Dőlt",
+Underline			: "Aláhúzott",
+StrikeThrough		: "Áthúzott",
+Subscript			: "Alsó index",
+Superscript			: "Felső index",
+LeftJustify			: "Balra",
+CenterJustify		: "Középre",
+RightJustify		: "Jobbra",
+BlockJustify		: "Sorkizárt",
+DecreaseIndent		: "Behúzás csökkentése",
+IncreaseIndent		: "Behúzás növelése",
+Blockquote			: "Idézet blokk",
+Undo				: "Visszavonás",
+Redo				: "Ismétlés",
+NumberedListLbl		: "Számozás",
+NumberedList		: "Számozás beillesztése/törlése",
+BulletedListLbl		: "Felsorolás",
+BulletedList		: "Felsorolás beillesztése/törlése",
+ShowTableBorders	: "Táblázat szegély mutatása",
+ShowDetails			: "Részletek mutatása",
+Style				: "Stílus",
+FontFormat			: "Formátum",
+Font				: "Betűtípus",
+FontSize			: "Méret",
+TextColor			: "Betűszín",
+BGColor				: "Háttérszín",
+Source				: "Forráskód",
+Find				: "Keresés",
+Replace				: "Csere",
+SpellCheck			: "Helyesírás-ellenőrzés",
+UniversalKeyboard	: "Univerzális billentyűzet",
+PageBreakLbl		: "Oldaltörés",
+PageBreak			: "Oldaltörés beillesztése",
+
+Form			: "Űrlap",
+Checkbox		: "Jelölőnégyzet",
+RadioButton		: "Választógomb",
+TextField		: "Szövegmező",
+Textarea		: "Szövegterület",
+HiddenField		: "Rejtettmező",
+Button			: "Gomb",
+SelectionField	: "Legördülő lista",
+ImageButton		: "Képgomb",
+
+FitWindow		: "Maximalizálás",
+ShowBlocks		: "Blokkok megjelenítése",
+
+// Context Menu
+EditLink			: "Hivatkozás módosítása",
+CellCM				: "Cella",
+RowCM				: "Sor",
+ColumnCM			: "Oszlop",
+InsertRowAfter		: "Sor beillesztése az aktuális sor mögé",
+InsertRowBefore		: "Sor beillesztése az aktuális sor elé",
+DeleteRows			: "Sorok törlése",
+InsertColumnAfter	: "Oszlop beillesztése az aktuális oszlop mögé",
+InsertColumnBefore	: "Oszlop beillesztése az aktuális oszlop elé",
+DeleteColumns		: "Oszlopok törlése",
+InsertCellAfter		: "Cella beillesztése az aktuális cella mögé",
+InsertCellBefore	: "Cella beillesztése az aktuális cella elé",
+DeleteCells			: "Cellák törlése",
+MergeCells			: "Cellák egyesítése",
+MergeRight			: "Cellák egyesítése jobbra",
+MergeDown			: "Cellák egyesítése lefelé",
+HorizontalSplitCell	: "Cellák szétválasztása vízszintesen",
+VerticalSplitCell	: "Cellák szétválasztása függőlegesen",
+TableDelete			: "Táblázat törlése",
+CellProperties		: "Cella tulajdonságai",
+TableProperties		: "Táblázat tulajdonságai",
+ImageProperties		: "Kép tulajdonságai",
+FlashProperties		: "Flash tulajdonságai",
+
+AnchorProp			: "Horgony tulajdonságai",
+ButtonProp			: "Gomb tulajdonságai",
+CheckboxProp		: "Jelölőnégyzet tulajdonságai",
+HiddenFieldProp		: "Rejtett mező tulajdonságai",
+RadioButtonProp		: "Választógomb tulajdonságai",
+ImageButtonProp		: "Képgomb tulajdonságai",
+TextFieldProp		: "Szövegmező tulajdonságai",
+SelectionFieldProp	: "Legördülő lista tulajdonságai",
+TextareaProp		: "Szövegterület tulajdonságai",
+FormProp			: "Űrlap tulajdonságai",
+
+FontFormats			: "Normál;Formázott;Címsor;Fejléc 1;Fejléc 2;Fejléc 3;Fejléc 4;Fejléc 5;Fejléc 6;Bekezdés (DIV)",
+
+// Alerts and Messages
+ProcessingXHTML		: "XHTML feldolgozása. Kérem várjon...",
+Done				: "Kész",
+PasteWordConfirm	: "A beilleszteni kívánt szöveg Word-ből van másolva. El kívánja távolítani a formázást a beillesztés előtt?",
+NotCompatiblePaste	: "Ez a parancs csak Internet Explorer 5.5 verziótól használható. Megpróbálja beilleszteni a szöveget az eredeti formázással?",
+UnknownToolbarItem	: "Ismeretlen eszköztár elem \"%1\"",
+UnknownCommand		: "Ismeretlen parancs \"%1\"",
+NotImplemented		: "A parancs nem hajtható végre",
+UnknownToolbarSet	: "Az eszközkészlet \"%1\" nem létezik",
+NoActiveX			: "A böngésző biztonsági beállításai korlátozzák a szerkesztő lehetőségeit. Engedélyezni kell ezt az opciót: \"Run ActiveX controls and plug-ins\". Ettől függetlenül előfordulhatnak hibaüzenetek ill. bizonyos funkciók hiányozhatnak.",
+BrowseServerBlocked : "Nem lehet megnyitni a fájlböngészőt. Bizonyosodjon meg róla, hogy a felbukkanó ablakok engedélyezve vannak.",
+DialogBlocked		: "Nem lehet megnyitni a párbeszédablakot. Bizonyosodjon meg róla, hogy a felbukkanó ablakok engedélyezve vannak.",
+
+// Dialogs
+DlgBtnOK			: "Rendben",
+DlgBtnCancel		: "Mégsem",
+DlgBtnClose			: "Bezárás",
+DlgBtnBrowseServer	: "Böngészés a szerveren",
+DlgAdvancedTag		: "További opciók",
+DlgOpOther			: "Egyéb",
+DlgInfoTab			: "Alaptulajdonságok",
+DlgAlertUrl			: "Illessze be a webcímet",
+
+// General Dialogs Labels
+DlgGenNotSet		: "<nincs beállítva>",
+DlgGenId			: "Azonosító",
+DlgGenLangDir		: "Írás iránya",
+DlgGenLangDirLtr	: "Balról jobbra",
+DlgGenLangDirRtl	: "Jobbról balra",
+DlgGenLangCode		: "Nyelv kódja",
+DlgGenAccessKey		: "Billentyűkombináció",
+DlgGenName			: "Név",
+DlgGenTabIndex		: "Tabulátor index",
+DlgGenLongDescr		: "Részletes leírás webcíme",
+DlgGenClass			: "Stíluskészlet",
+DlgGenTitle			: "Súgócimke",
+DlgGenContType		: "Súgó tartalomtípusa",
+DlgGenLinkCharset	: "Hivatkozott tartalom kódlapja",
+DlgGenStyle			: "Stílus",
+
+// Image Dialog
+DlgImgTitle			: "Kép tulajdonságai",
+DlgImgInfoTab		: "Alaptulajdonságok",
+DlgImgBtnUpload		: "Küldés a szerverre",
+DlgImgURL			: "Hivatkozás",
+DlgImgUpload		: "Feltöltés",
+DlgImgAlt			: "Buborék szöveg",
+DlgImgWidth			: "Szélesség",
+DlgImgHeight		: "Magasság",
+DlgImgLockRatio		: "Arány megtartása",
+DlgBtnResetSize		: "Eredeti méret",
+DlgImgBorder		: "Keret",
+DlgImgHSpace		: "Vízsz. táv",
+DlgImgVSpace		: "Függ. táv",
+DlgImgAlign			: "Igazítás",
+DlgImgAlignLeft		: "Bal",
+DlgImgAlignAbsBottom: "Legaljára",
+DlgImgAlignAbsMiddle: "Közepére",
+DlgImgAlignBaseline	: "Alapvonalhoz",
+DlgImgAlignBottom	: "Aljára",
+DlgImgAlignMiddle	: "Középre",
+DlgImgAlignRight	: "Jobbra",
+DlgImgAlignTextTop	: "Szöveg tetejére",
+DlgImgAlignTop		: "Tetejére",
+DlgImgPreview		: "Előnézet",
+DlgImgAlertUrl		: "Töltse ki a kép webcímét",
+DlgImgLinkTab		: "Hivatkozás",
+
+// Flash Dialog
+DlgFlashTitle		: "Flash tulajdonságai",
+DlgFlashChkPlay		: "Automata lejátszás",
+DlgFlashChkLoop		: "Folyamatosan",
+DlgFlashChkMenu		: "Flash menü engedélyezése",
+DlgFlashScale		: "Méretezés",
+DlgFlashScaleAll	: "Mindent mutat",
+DlgFlashScaleNoBorder	: "Keret nélkül",
+DlgFlashScaleFit	: "Teljes kitöltés",
+
+// Link Dialog
+DlgLnkWindowTitle	: "Hivatkozás tulajdonságai",
+DlgLnkInfoTab		: "Alaptulajdonságok",
+DlgLnkTargetTab		: "Megjelenítés",
+
+DlgLnkType			: "Hivatkozás típusa",
+DlgLnkTypeURL		: "Webcím",
+DlgLnkTypeAnchor	: "Horgony az oldalon",
+DlgLnkTypeEMail		: "E-Mail",
+DlgLnkProto			: "Protokoll",
+DlgLnkProtoOther	: "<más>",
+DlgLnkURL			: "Webcím",
+DlgLnkAnchorSel		: "Horgony választása",
+DlgLnkAnchorByName	: "Horgony név szerint",
+DlgLnkAnchorById	: "Azonosító szerint",
+DlgLnkNoAnchors		: "(Nincs horgony a dokumentumban)",
+DlgLnkEMail			: "E-Mail cím",
+DlgLnkEMailSubject	: "Üzenet tárgya",
+DlgLnkEMailBody		: "Üzenet",
+DlgLnkUpload		: "Feltöltés",
+DlgLnkBtnUpload		: "Küldés a szerverre",
+
+DlgLnkTarget		: "Tartalom megjelenítése",
+DlgLnkTargetFrame	: "<keretben>",
+DlgLnkTargetPopup	: "<felugró ablakban>",
+DlgLnkTargetBlank	: "Új ablakban (_blank)",
+DlgLnkTargetParent	: "Szülő ablakban (_parent)",
+DlgLnkTargetSelf	: "Azonos ablakban (_self)",
+DlgLnkTargetTop		: "Legfelső ablakban (_top)",
+DlgLnkTargetFrameName	: "Keret neve",
+DlgLnkPopWinName	: "Felugró ablak neve",
+DlgLnkPopWinFeat	: "Felugró ablak jellemzői",
+DlgLnkPopResize		: "Méretezhető",
+DlgLnkPopLocation	: "Címsor",
+DlgLnkPopMenu		: "Menü sor",
+DlgLnkPopScroll		: "Gördítősáv",
+DlgLnkPopStatus		: "Állapotsor",
+DlgLnkPopToolbar	: "Eszköztár",
+DlgLnkPopFullScrn	: "Teljes képernyő (csak IE)",
+DlgLnkPopDependent	: "Szülőhöz kapcsolt (csak Netscape)",
+DlgLnkPopWidth		: "Szélesség",
+DlgLnkPopHeight		: "Magasság",
+DlgLnkPopLeft		: "Bal pozíció",
+DlgLnkPopTop		: "Felső pozíció",
+
+DlnLnkMsgNoUrl		: "Adja meg a hivatkozás webcímét",
+DlnLnkMsgNoEMail	: "Adja meg az E-Mail címet",
+DlnLnkMsgNoAnchor	: "Válasszon egy horgonyt",
+DlnLnkMsgInvPopName	: "A felbukkanó ablak neve alfanumerikus karakterrel kezdôdjön, valamint ne tartalmazzon szóközt",
+
+// Color Dialog
+DlgColorTitle		: "Színválasztás",
+DlgColorBtnClear	: "Törlés",
+DlgColorHighlight	: "Előnézet",
+DlgColorSelected	: "Kiválasztott",
+
+// Smiley Dialog
+DlgSmileyTitle		: "Hangulatjel beszúrása",
+
+// Special Character Dialog
+DlgSpecialCharTitle	: "Speciális karakter választása",
+
+// Table Dialog
+DlgTableTitle		: "Táblázat tulajdonságai",
+DlgTableRows		: "Sorok",
+DlgTableColumns		: "Oszlopok",
+DlgTableBorder		: "Szegélyméret",
+DlgTableAlign		: "Igazítás",
+DlgTableAlignNotSet	: "<Nincs beállítva>",
+DlgTableAlignLeft	: "Balra",
+DlgTableAlignCenter	: "Középre",
+DlgTableAlignRight	: "Jobbra",
+DlgTableWidth		: "Szélesség",
+DlgTableWidthPx		: "képpont",
+DlgTableWidthPc		: "százalék",
+DlgTableHeight		: "Magasság",
+DlgTableCellSpace	: "Cella térköz",
+DlgTableCellPad		: "Cella belső margó",
+DlgTableCaption		: "Felirat",
+DlgTableSummary		: "Leírás",
+
+// Table Cell Dialog
+DlgCellTitle		: "Cella tulajdonságai",
+DlgCellWidth		: "Szélesség",
+DlgCellWidthPx		: "képpont",
+DlgCellWidthPc		: "százalék",
+DlgCellHeight		: "Magasság",
+DlgCellWordWrap		: "Sortörés",
+DlgCellWordWrapNotSet	: "<Nincs beállítva>",
+DlgCellWordWrapYes	: "Igen",
+DlgCellWordWrapNo	: "Nem",
+DlgCellHorAlign		: "Vízsz. igazítás",
+DlgCellHorAlignNotSet	: "<Nincs beállítva>",
+DlgCellHorAlignLeft	: "Balra",
+DlgCellHorAlignCenter	: "Középre",
+DlgCellHorAlignRight: "Jobbra",
+DlgCellVerAlign		: "Függ. igazítás",
+DlgCellVerAlignNotSet	: "<Nincs beállítva>",
+DlgCellVerAlignTop	: "Tetejére",
+DlgCellVerAlignMiddle	: "Középre",
+DlgCellVerAlignBottom	: "Aljára",
+DlgCellVerAlignBaseline	: "Egyvonalba",
+DlgCellRowSpan		: "Sorok egyesítése",
+DlgCellCollSpan		: "Oszlopok egyesítése",
+DlgCellBackColor	: "Háttérszín",
+DlgCellBorderColor	: "Szegélyszín",
+DlgCellBtnSelect	: "Kiválasztás...",
+
+// Find and Replace Dialog
+DlgFindAndReplaceTitle	: "Keresés és csere",
+
+// Find Dialog
+DlgFindTitle		: "Keresés",
+DlgFindFindBtn		: "Keresés",
+DlgFindNotFoundMsg	: "A keresett szöveg nem található.",
+
+// Replace Dialog
+DlgReplaceTitle			: "Csere",
+DlgReplaceFindLbl		: "Keresett szöveg:",
+DlgReplaceReplaceLbl	: "Csere erre:",
+DlgReplaceCaseChk		: "kis- és nagybetű megkülönböztetése",
+DlgReplaceReplaceBtn	: "Csere",
+DlgReplaceReplAllBtn	: "Az összes cseréje",
+DlgReplaceWordChk		: "csak ha ez a teljes szó",
+
+// Paste Operations / Dialog
+PasteErrorCut	: "A böngésző biztonsági beállításai nem engedélyezik a szerkesztőnek, hogy végrehajtsa a kivágás műveletet. Használja az alábbi billentyűkombinációt (Ctrl+X).",
+PasteErrorCopy	: "A böngésző biztonsági beállításai nem engedélyezik a szerkesztőnek, hogy végrehajtsa a másolás műveletet. Használja az alábbi billentyűkombinációt (Ctrl+X).",
+
+PasteAsText		: "Beillesztés formázatlan szövegként",
+PasteFromWord	: "Beillesztés Word-ből",
+
+DlgPasteMsg2	: "Másolja be az alábbi mezőbe a <STRONG>Ctrl+V</STRONG> billentyűk lenyomásával, majd nyomjon <STRONG>Rendben</STRONG>-t.",
+DlgPasteSec		: "A böngésző biztonsági beállításai miatt a szerkesztő nem képes hozzáférni a vágólap adataihoz. Illeszd be újra ebben az ablakban.",
+DlgPasteIgnoreFont		: "Betű formázások megszüntetése",
+DlgPasteRemoveStyles	: "Stílusok eltávolítása",
+
+// Color Picker
+ColorAutomatic	: "Automatikus",
+ColorMoreColors	: "További színek...",
+
+// Document Properties
+DocProps		: "Dokumentum tulajdonságai",
+
+// Anchor Dialog
+DlgAnchorTitle		: "Horgony tulajdonságai",
+DlgAnchorName		: "Horgony neve",
+DlgAnchorErrorName	: "Kérem adja meg a horgony nevét",
+
+// Speller Pages Dialog
+DlgSpellNotInDic		: "Nincs a szótárban",
+DlgSpellChangeTo		: "Módosítás",
+DlgSpellBtnIgnore		: "Kihagyja",
+DlgSpellBtnIgnoreAll	: "Mindet kihagyja",
+DlgSpellBtnReplace		: "Csere",
+DlgSpellBtnReplaceAll	: "Összes cseréje",
+DlgSpellBtnUndo			: "Visszavonás",
+DlgSpellNoSuggestions	: "Nincs javaslat",
+DlgSpellProgress		: "Helyesírás-ellenőrzés folyamatban...",
+DlgSpellNoMispell		: "Helyesírás-ellenőrzés kész: Nem találtam hibát",
+DlgSpellNoChanges		: "Helyesírás-ellenőrzés kész: Nincs változtatott szó",
+DlgSpellOneChange		: "Helyesírás-ellenőrzés kész: Egy szó cserélve",
+DlgSpellManyChanges		: "Helyesírás-ellenőrzés kész: %1 szó cserélve",
+
+IeSpellDownload			: "A helyesírás-ellenőrző nincs telepítve. Szeretné letölteni most?",
+
+// Button Dialog
+DlgButtonText		: "Szöveg (Érték)",
+DlgButtonType		: "Típus",
+DlgButtonTypeBtn	: "Gomb",
+DlgButtonTypeSbm	: "Küldés",
+DlgButtonTypeRst	: "Alaphelyzet",
+
+// Checkbox and Radio Button Dialogs
+DlgCheckboxName		: "Név",
+DlgCheckboxValue	: "Érték",
+DlgCheckboxSelected	: "Kiválasztott",
+
+// Form Dialog
+DlgFormName		: "Név",
+DlgFormAction	: "Adatfeldolgozást végző hivatkozás",
+DlgFormMethod	: "Adatküldés módja",
+
+// Select Field Dialog
+DlgSelectName		: "Név",
+DlgSelectValue		: "Érték",
+DlgSelectSize		: "Méret",
+DlgSelectLines		: "sor",
+DlgSelectChkMulti	: "több sor is kiválasztható",
+DlgSelectOpAvail	: "Elérhető opciók",
+DlgSelectOpText		: "Szöveg",
+DlgSelectOpValue	: "Érték",
+DlgSelectBtnAdd		: "Hozzáad",
+DlgSelectBtnModify	: "Módosít",
+DlgSelectBtnUp		: "Fel",
+DlgSelectBtnDown	: "Le",
+DlgSelectBtnSetValue : "Legyen az alapértelmezett érték",
+DlgSelectBtnDelete	: "Töröl",
+
+// Textarea Dialog
+DlgTextareaName	: "Név",
+DlgTextareaCols	: "Karakterek száma egy sorban",
+DlgTextareaRows	: "Sorok száma",
+
+// Text Field Dialog
+DlgTextName			: "Név",
+DlgTextValue		: "Érték",
+DlgTextCharWidth	: "Megjelenített karakterek száma",
+DlgTextMaxChars		: "Maximális karakterszám",
+DlgTextType			: "Típus",
+DlgTextTypeText		: "Szöveg",
+DlgTextTypePass		: "Jelszó",
+
+// Hidden Field Dialog
+DlgHiddenName	: "Név",
+DlgHiddenValue	: "Érték",
+
+// Bulleted List Dialog
+BulletedListProp	: "Felsorolás tulajdonságai",
+NumberedListProp	: "Számozás tulajdonságai",
+DlgLstStart			: "Start",
+DlgLstType			: "Formátum",
+DlgLstTypeCircle	: "Kör",
+DlgLstTypeDisc		: "Lemez",
+DlgLstTypeSquare	: "Négyzet",
+DlgLstTypeNumbers	: "Számok (1, 2, 3)",
+DlgLstTypeLCase		: "Kisbetűk (a, b, c)",
+DlgLstTypeUCase		: "Nagybetűk (A, B, C)",
+DlgLstTypeSRoman	: "Kis római számok (i, ii, iii)",
+DlgLstTypeLRoman	: "Nagy római számok (I, II, III)",
+
+// Document Properties Dialog
+DlgDocGeneralTab	: "Általános",
+DlgDocBackTab		: "Háttér",
+DlgDocColorsTab		: "Színek és margók",
+DlgDocMetaTab		: "Meta adatok",
+
+DlgDocPageTitle		: "Oldalcím",
+DlgDocLangDir		: "Írás iránya",
+DlgDocLangDirLTR	: "Balról jobbra",
+DlgDocLangDirRTL	: "Jobbról balra",
+DlgDocLangCode		: "Nyelv kód",
+DlgDocCharSet		: "Karakterkódolás",
+DlgDocCharSetCE		: "Közép-Európai",
+DlgDocCharSetCT		: "Kínai Tradicionális (Big5)",
+DlgDocCharSetCR		: "Cyrill",
+DlgDocCharSetGR		: "Görög",
+DlgDocCharSetJP		: "Japán",
+DlgDocCharSetKR		: "Koreai",
+DlgDocCharSetTR		: "Török",
+DlgDocCharSetUN		: "Unicode (UTF-8)",
+DlgDocCharSetWE		: "Nyugat-Európai",
+DlgDocCharSetOther	: "Más karakterkódolás",
+
+DlgDocDocType		: "Dokumentum típus fejléc",
+DlgDocDocTypeOther	: "Más dokumentum típus fejléc",
+DlgDocIncXHTML		: "XHTML deklarációk beillesztése",
+DlgDocBgColor		: "Háttérszín",
+DlgDocBgImage		: "Háttérkép cím",
+DlgDocBgNoScroll	: "Nem gördíthető háttér",
+DlgDocCText			: "Szöveg",
+DlgDocCLink			: "Cím",
+DlgDocCVisited		: "Látogatott cím",
+DlgDocCActive		: "Aktív cím",
+DlgDocMargins		: "Oldal margók",
+DlgDocMaTop			: "Felső",
+DlgDocMaLeft		: "Bal",
+DlgDocMaRight		: "Jobb",
+DlgDocMaBottom		: "Alsó",
+DlgDocMeIndex		: "Dokumentum keresőszavak (vesszővel elválasztva)",
+DlgDocMeDescr		: "Dokumentum leírás",
+DlgDocMeAuthor		: "Szerző",
+DlgDocMeCopy		: "Szerzői jog",
+DlgDocPreview		: "Előnézet",
+
+// Templates Dialog
+Templates			: "Sablonok",
+DlgTemplatesTitle	: "Elérhető sablonok",
+DlgTemplatesSelMsg	: "Válassza ki melyik sablon nyíljon meg a szerkesztőben<br>(a jelenlegi tartalom elveszik):",
+DlgTemplatesLoading	: "Sablon lista betöltése. Kis türelmet...",
+DlgTemplatesNoTpl	: "(Nincs sablon megadva)",
+DlgTemplatesReplace	: "Kicseréli a jelenlegi tartalmat",
+
+// About Dialog
+DlgAboutAboutTab	: "Névjegy",
+DlgAboutBrowserInfoTab	: "Böngésző információ",
+DlgAboutLicenseTab	: "Licensz",
+DlgAboutVersion		: "verzió",
+DlgAboutInfo		: "További információkért látogasson el ide:"
+};


Property changes on: announcement/trunk/src/main/webapp/fckeditor/editor/lang/hu.js
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/webapp/fckeditor/editor/lang/it.js
===================================================================
--- announcement/trunk/src/main/webapp/fckeditor/editor/lang/it.js	                        (rev 0)
+++ announcement/trunk/src/main/webapp/fckeditor/editor/lang/it.js	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,515 @@
+/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2008 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * Italian language file.
+ */
+
+var FCKLang =
+{
+// Language direction : "ltr" (left to right) or "rtl" (right to left).
+Dir					: "ltr",
+
+ToolbarCollapse		: "Nascondi la barra degli strumenti",
+ToolbarExpand		: "Mostra la barra degli strumenti",
+
+// Toolbar Items and Context Menu
+Save				: "Salva",
+NewPage				: "Nuova pagina vuota",
+Preview				: "Anteprima",
+Cut					: "Taglia",
+Copy				: "Copia",
+Paste				: "Incolla",
+PasteText			: "Incolla come testo semplice",
+PasteWord			: "Incolla da Word",
+Print				: "Stampa",
+SelectAll			: "Seleziona tutto",
+RemoveFormat		: "Elimina formattazione",
+InsertLinkLbl		: "Collegamento",
+InsertLink			: "Inserisci/Modifica collegamento",
+RemoveLink			: "Elimina collegamento",
+Anchor				: "Inserisci/Modifica Ancora",
+AnchorDelete		: "Rimuovi Ancora",
+InsertImageLbl		: "Immagine",
+InsertImage			: "Inserisci/Modifica immagine",
+InsertFlashLbl		: "Oggetto Flash",
+InsertFlash			: "Inserisci/Modifica Oggetto Flash",
+InsertTableLbl		: "Tabella",
+InsertTable			: "Inserisci/Modifica tabella",
+InsertLineLbl		: "Riga orizzontale",
+InsertLine			: "Inserisci riga orizzontale",
+InsertSpecialCharLbl: "Caratteri speciali",
+InsertSpecialChar	: "Inserisci carattere speciale",
+InsertSmileyLbl		: "Emoticon",
+InsertSmiley		: "Inserisci emoticon",
+About				: "Informazioni su FCKeditor",
+Bold				: "Grassetto",
+Italic				: "Corsivo",
+Underline			: "Sottolineato",
+StrikeThrough		: "Barrato",
+Subscript			: "Pedice",
+Superscript			: "Apice",
+LeftJustify			: "Allinea a sinistra",
+CenterJustify		: "Centra",
+RightJustify		: "Allinea a destra",
+BlockJustify		: "Giustifica",
+DecreaseIndent		: "Riduci rientro",
+IncreaseIndent		: "Aumenta rientro",
+Blockquote			: "Blockquote",	//MISSING
+Undo				: "Annulla",
+Redo				: "Ripristina",
+NumberedListLbl		: "Elenco numerato",
+NumberedList		: "Inserisci/Modifica elenco numerato",
+BulletedListLbl		: "Elenco puntato",
+BulletedList		: "Inserisci/Modifica elenco puntato",
+ShowTableBorders	: "Mostra bordi tabelle",
+ShowDetails			: "Mostra dettagli",
+Style				: "Stile",
+FontFormat			: "Formato",
+Font				: "Font",
+FontSize			: "Dimensione",
+TextColor			: "Colore testo",
+BGColor				: "Colore sfondo",
+Source				: "Codice Sorgente",
+Find				: "Trova",
+Replace				: "Sostituisci",
+SpellCheck			: "Correttore ortografico",
+UniversalKeyboard	: "Tastiera universale",
+PageBreakLbl		: "Interruzione di pagina",
+PageBreak			: "Inserisci interruzione di pagina",
+
+Form			: "Modulo",
+Checkbox		: "Checkbox",
+RadioButton		: "Radio Button",
+TextField		: "Campo di testo",
+Textarea		: "Area di testo",
+HiddenField		: "Campo nascosto",
+Button			: "Bottone",
+SelectionField	: "Menu di selezione",
+ImageButton		: "Bottone immagine",
+
+FitWindow		: "Massimizza l'area dell'editor",
+ShowBlocks		: "Visualizza Blocchi",
+
+// Context Menu
+EditLink			: "Modifica collegamento",
+CellCM				: "Cella",
+RowCM				: "Riga",
+ColumnCM			: "Colonna",
+InsertRowAfter		: "Inserisci Riga Dopo",
+InsertRowBefore		: "Inserisci Riga Prima",
+DeleteRows			: "Elimina righe",
+InsertColumnAfter	: "Inserisci Colonna Dopo",
+InsertColumnBefore	: "Inserisci Colonna Prima",
+DeleteColumns		: "Elimina colonne",
+InsertCellAfter		: "Inserisci Cella Dopo",
+InsertCellBefore	: "Inserisci Cella Prima",
+DeleteCells			: "Elimina celle",
+MergeCells			: "Unisce celle",
+MergeRight			: "Unisci a Destra",
+MergeDown			: "Unisci in Basso",
+HorizontalSplitCell	: "Dividi Cella Orizzontalmente",
+VerticalSplitCell	: "Dividi Cella Verticalmente",
+TableDelete			: "Cancella Tabella",
+CellProperties		: "Proprietà cella",
+TableProperties		: "Proprietà tabella",
+ImageProperties		: "Proprietà immagine",
+FlashProperties		: "Proprietà Oggetto Flash",
+
+AnchorProp			: "Proprietà ancora",
+ButtonProp			: "Proprietà bottone",
+CheckboxProp		: "Proprietà checkbox",
+HiddenFieldProp		: "Proprietà campo nascosto",
+RadioButtonProp		: "Proprietà radio button",
+ImageButtonProp		: "Proprietà bottone immagine",
+TextFieldProp		: "Proprietà campo di testo",
+SelectionFieldProp	: "Proprietà menu di selezione",
+TextareaProp		: "Proprietà area di testo",
+FormProp			: "Proprietà modulo",
+
+FontFormats			: "Normale;Formattato;Indirizzo;Titolo 1;Titolo 2;Titolo 3;Titolo 4;Titolo 5;Titolo 6;Paragrafo (DIV)",
+
+// Alerts and Messages
+ProcessingXHTML		: "Elaborazione XHTML in corso. Attendere prego...",
+Done				: "Completato",
+PasteWordConfirm	: "Il testo da incollare sembra provenire da Word. Desideri pulirlo prima di incollare?",
+NotCompatiblePaste	: "Questa funzione è disponibile solo per Internet Explorer 5.5 o superiore. Desideri incollare il testo senza pulirlo?",
+UnknownToolbarItem	: "Elemento della barra strumenti sconosciuto \"%1\"",
+UnknownCommand		: "Comando sconosciuto \"%1\"",
+NotImplemented		: "Comando non implementato",
+UnknownToolbarSet	: "La barra di strumenti \"%1\" non esiste",
+NoActiveX			: "Le impostazioni di sicurezza del tuo browser potrebbero limitare alcune funzionalità dell'editor. Devi abilitare l'opzione \"Esegui controlli e plug-in ActiveX\". Potresti avere errori e notare funzionalità mancanti.",
+BrowseServerBlocked : "Non è possibile aprire la finestra di espolorazione risorse. Verifica che tutti i blocca popup siano bloccati.",
+DialogBlocked		: "Non è possibile aprire la finestra di dialogo. Verifica che tutti i blocca popup siano bloccati.",
+
+// Dialogs
+DlgBtnOK			: "OK",
+DlgBtnCancel		: "Annulla",
+DlgBtnClose			: "Chiudi",
+DlgBtnBrowseServer	: "Cerca sul server",
+DlgAdvancedTag		: "Avanzate",
+DlgOpOther			: "<Altro>",
+DlgInfoTab			: "Info",
+DlgAlertUrl			: "Devi inserire l'URL",
+
+// General Dialogs Labels
+DlgGenNotSet		: "<non impostato>",
+DlgGenId			: "Id",
+DlgGenLangDir		: "Direzione scrittura",
+DlgGenLangDirLtr	: "Da Sinistra a Destra (LTR)",
+DlgGenLangDirRtl	: "Da Destra a Sinistra (RTL)",
+DlgGenLangCode		: "Codice Lingua",
+DlgGenAccessKey		: "Scorciatoia<br />da tastiera",
+DlgGenName			: "Nome",
+DlgGenTabIndex		: "Ordine di tabulazione",
+DlgGenLongDescr		: "URL descrizione estesa",
+DlgGenClass			: "Nome classe CSS",
+DlgGenTitle			: "Titolo",
+DlgGenContType		: "Tipo della risorsa collegata",
+DlgGenLinkCharset	: "Set di caretteri della risorsa collegata",
+DlgGenStyle			: "Stile",
+
+// Image Dialog
+DlgImgTitle			: "Proprietà immagine",
+DlgImgInfoTab		: "Informazioni immagine",
+DlgImgBtnUpload		: "Invia al server",
+DlgImgURL			: "URL",
+DlgImgUpload		: "Carica",
+DlgImgAlt			: "Testo alternativo",
+DlgImgWidth			: "Larghezza",
+DlgImgHeight		: "Altezza",
+DlgImgLockRatio		: "Blocca rapporto",
+DlgBtnResetSize		: "Reimposta dimensione",
+DlgImgBorder		: "Bordo",
+DlgImgHSpace		: "HSpace",
+DlgImgVSpace		: "VSpace",
+DlgImgAlign			: "Allineamento",
+DlgImgAlignLeft		: "Sinistra",
+DlgImgAlignAbsBottom: "In basso assoluto",
+DlgImgAlignAbsMiddle: "Centrato assoluto",
+DlgImgAlignBaseline	: "Linea base",
+DlgImgAlignBottom	: "In Basso",
+DlgImgAlignMiddle	: "Centrato",
+DlgImgAlignRight	: "Destra",
+DlgImgAlignTextTop	: "In alto al testo",
+DlgImgAlignTop		: "In Alto",
+DlgImgPreview		: "Anteprima",
+DlgImgAlertUrl		: "Devi inserire l'URL per l'immagine",
+DlgImgLinkTab		: "Collegamento",
+
+// Flash Dialog
+DlgFlashTitle		: "Proprietà Oggetto Flash",
+DlgFlashChkPlay		: "Avvio Automatico",
+DlgFlashChkLoop		: "Cicla",
+DlgFlashChkMenu		: "Abilita Menu di Flash",
+DlgFlashScale		: "Ridimensiona",
+DlgFlashScaleAll	: "Mostra Tutto",
+DlgFlashScaleNoBorder	: "Senza Bordo",
+DlgFlashScaleFit	: "Dimensione Esatta",
+
+// Link Dialog
+DlgLnkWindowTitle	: "Collegamento",
+DlgLnkInfoTab		: "Informazioni collegamento",
+DlgLnkTargetTab		: "Destinazione",
+
+DlgLnkType			: "Tipo di Collegamento",
+DlgLnkTypeURL		: "URL",
+DlgLnkTypeAnchor	: "Ancora nella pagina",
+DlgLnkTypeEMail		: "E-Mail",
+DlgLnkProto			: "Protocollo",
+DlgLnkProtoOther	: "<altro>",
+DlgLnkURL			: "URL",
+DlgLnkAnchorSel		: "Scegli Ancora",
+DlgLnkAnchorByName	: "Per Nome",
+DlgLnkAnchorById	: "Per id elemento",
+DlgLnkNoAnchors		: "(Nessuna ancora disponibile nel documento)",
+DlgLnkEMail			: "Indirizzo E-Mail",
+DlgLnkEMailSubject	: "Oggetto del messaggio",
+DlgLnkEMailBody		: "Corpo del messaggio",
+DlgLnkUpload		: "Carica",
+DlgLnkBtnUpload		: "Invia al Server",
+
+DlgLnkTarget		: "Destinazione",
+DlgLnkTargetFrame	: "<riquadro>",
+DlgLnkTargetPopup	: "<finestra popup>",
+DlgLnkTargetBlank	: "Nuova finestra (_blank)",
+DlgLnkTargetParent	: "Finestra padre (_parent)",
+DlgLnkTargetSelf	: "Stessa finestra (_self)",
+DlgLnkTargetTop		: "Finestra superiore (_top)",
+DlgLnkTargetFrameName	: "Nome del riquadro di destinazione",
+DlgLnkPopWinName	: "Nome finestra popup",
+DlgLnkPopWinFeat	: "Caratteristiche finestra popup",
+DlgLnkPopResize		: "Ridimensionabile",
+DlgLnkPopLocation	: "Barra degli indirizzi",
+DlgLnkPopMenu		: "Barra del menu",
+DlgLnkPopScroll		: "Barre di scorrimento",
+DlgLnkPopStatus		: "Barra di stato",
+DlgLnkPopToolbar	: "Barra degli strumenti",
+DlgLnkPopFullScrn	: "A tutto schermo (IE)",
+DlgLnkPopDependent	: "Dipendente (Netscape)",
+DlgLnkPopWidth		: "Larghezza",
+DlgLnkPopHeight		: "Altezza",
+DlgLnkPopLeft		: "Posizione da sinistra",
+DlgLnkPopTop		: "Posizione dall'alto",
+
+DlnLnkMsgNoUrl		: "Devi inserire l'URL del collegamento",
+DlnLnkMsgNoEMail	: "Devi inserire un'indirizzo e-mail",
+DlnLnkMsgNoAnchor	: "Devi selezionare un'ancora",
+DlnLnkMsgInvPopName	: "Il nome del popup deve iniziare con una lettera, e non può contenere spazi",
+
+// Color Dialog
+DlgColorTitle		: "Seleziona colore",
+DlgColorBtnClear	: "Vuota",
+DlgColorHighlight	: "Evidenziato",
+DlgColorSelected	: "Selezionato",
+
+// Smiley Dialog
+DlgSmileyTitle		: "Inserisci emoticon",
+
+// Special Character Dialog
+DlgSpecialCharTitle	: "Seleziona carattere speciale",
+
+// Table Dialog
+DlgTableTitle		: "Proprietà tabella",
+DlgTableRows		: "Righe",
+DlgTableColumns		: "Colonne",
+DlgTableBorder		: "Dimensione bordo",
+DlgTableAlign		: "Allineamento",
+DlgTableAlignNotSet	: "<non impostato>",
+DlgTableAlignLeft	: "Sinistra",
+DlgTableAlignCenter	: "Centrato",
+DlgTableAlignRight	: "Destra",
+DlgTableWidth		: "Larghezza",
+DlgTableWidthPx		: "pixel",
+DlgTableWidthPc		: "percento",
+DlgTableHeight		: "Altezza",
+DlgTableCellSpace	: "Spaziatura celle",
+DlgTableCellPad		: "Padding celle",
+DlgTableCaption		: "Intestazione",
+DlgTableSummary		: "Indice",
+
+// Table Cell Dialog
+DlgCellTitle		: "Proprietà cella",
+DlgCellWidth		: "Larghezza",
+DlgCellWidthPx		: "pixel",
+DlgCellWidthPc		: "percento",
+DlgCellHeight		: "Altezza",
+DlgCellWordWrap		: "A capo automatico",
+DlgCellWordWrapNotSet	: "<non impostato>",
+DlgCellWordWrapYes	: "Si",
+DlgCellWordWrapNo	: "No",
+DlgCellHorAlign		: "Allineamento orizzontale",
+DlgCellHorAlignNotSet	: "<non impostato>",
+DlgCellHorAlignLeft	: "Sinistra",
+DlgCellHorAlignCenter	: "Centrato",
+DlgCellHorAlignRight: "Destra",
+DlgCellVerAlign		: "Allineamento verticale",
+DlgCellVerAlignNotSet	: "<non impostato>",
+DlgCellVerAlignTop	: "In Alto",
+DlgCellVerAlignMiddle	: "Centrato",
+DlgCellVerAlignBottom	: "In Basso",
+DlgCellVerAlignBaseline	: "Linea base",
+DlgCellRowSpan		: "Righe occupate",
+DlgCellCollSpan		: "Colonne occupate",
+DlgCellBackColor	: "Colore sfondo",
+DlgCellBorderColor	: "Colore bordo",
+DlgCellBtnSelect	: "Scegli...",
+
+// Find and Replace Dialog
+DlgFindAndReplaceTitle	: "Cerca e Sostituisci",
+
+// Find Dialog
+DlgFindTitle		: "Trova",
+DlgFindFindBtn		: "Trova",
+DlgFindNotFoundMsg	: "L'elemento cercato non è stato trovato.",
+
+// Replace Dialog
+DlgReplaceTitle			: "Sostituisci",
+DlgReplaceFindLbl		: "Trova:",
+DlgReplaceReplaceLbl	: "Sostituisci con:",
+DlgReplaceCaseChk		: "Maiuscole/minuscole",
+DlgReplaceReplaceBtn	: "Sostituisci",
+DlgReplaceReplAllBtn	: "Sostituisci tutto",
+DlgReplaceWordChk		: "Solo parole intere",
+
+// Paste Operations / Dialog
+PasteErrorCut	: "Le impostazioni di sicurezza del browser non permettono di tagliare automaticamente il testo. Usa la tastiera (Ctrl+X).",
+PasteErrorCopy	: "Le impostazioni di sicurezza del browser non permettono di copiare automaticamente il testo. Usa la tastiera (Ctrl+C).",
+
+PasteAsText		: "Incolla come testo semplice",
+PasteFromWord	: "Incolla da Word",
+
+DlgPasteMsg2	: "Incolla il testo all'interno dell'area sottostante usando la scorciatoia di tastiere (<STRONG>Ctrl+V</STRONG>) e premi <STRONG>OK</STRONG>.",
+DlgPasteSec		: "A causa delle impostazioni di sicurezza del browser,l'editor non è in grado di accedere direttamente agli appunti. E' pertanto necessario incollarli di nuovo in questa finestra.",
+DlgPasteIgnoreFont		: "Ignora le definizioni di Font",
+DlgPasteRemoveStyles	: "Rimuovi le definizioni di Stile",
+
+// Color Picker
+ColorAutomatic	: "Automatico",
+ColorMoreColors	: "Altri colori...",
+
+// Document Properties
+DocProps		: "Proprietà del Documento",
+
+// Anchor Dialog
+DlgAnchorTitle		: "Proprietà ancora",
+DlgAnchorName		: "Nome ancora",
+DlgAnchorErrorName	: "Inserici il nome dell'ancora",
+
+// Speller Pages Dialog
+DlgSpellNotInDic		: "Non nel dizionario",
+DlgSpellChangeTo		: "Cambia in",
+DlgSpellBtnIgnore		: "Ignora",
+DlgSpellBtnIgnoreAll	: "Ignora tutto",
+DlgSpellBtnReplace		: "Cambia",
+DlgSpellBtnReplaceAll	: "Cambia tutto",
+DlgSpellBtnUndo			: "Annulla",
+DlgSpellNoSuggestions	: "- Nessun suggerimento -",
+DlgSpellProgress		: "Controllo ortografico in corso",
+DlgSpellNoMispell		: "Controllo ortografico completato: nessun errore trovato",
+DlgSpellNoChanges		: "Controllo ortografico completato: nessuna parola cambiata",
+DlgSpellOneChange		: "Controllo ortografico completato: 1 parola cambiata",
+DlgSpellManyChanges		: "Controllo ortografico completato: %1 parole cambiate",
+
+IeSpellDownload			: "Contollo ortografico non installato. Lo vuoi scaricare ora?",
+
+// Button Dialog
+DlgButtonText		: "Testo (Value)",
+DlgButtonType		: "Tipo",
+DlgButtonTypeBtn	: "Bottone",
+DlgButtonTypeSbm	: "Invio",
+DlgButtonTypeRst	: "Annulla",
+
+// Checkbox and Radio Button Dialogs
+DlgCheckboxName		: "Nome",
+DlgCheckboxValue	: "Valore",
+DlgCheckboxSelected	: "Selezionato",
+
+// Form Dialog
+DlgFormName		: "Nome",
+DlgFormAction	: "Azione",
+DlgFormMethod	: "Metodo",
+
+// Select Field Dialog
+DlgSelectName		: "Nome",
+DlgSelectValue		: "Valore",
+DlgSelectSize		: "Dimensione",
+DlgSelectLines		: "righe",
+DlgSelectChkMulti	: "Permetti selezione multipla",
+DlgSelectOpAvail	: "Opzioni disponibili",
+DlgSelectOpText		: "Testo",
+DlgSelectOpValue	: "Valore",
+DlgSelectBtnAdd		: "Aggiungi",
+DlgSelectBtnModify	: "Modifica",
+DlgSelectBtnUp		: "Su",
+DlgSelectBtnDown	: "Gi",
+DlgSelectBtnSetValue : "Imposta come predefinito",
+DlgSelectBtnDelete	: "Rimuovi",
+
+// Textarea Dialog
+DlgTextareaName	: "Nome",
+DlgTextareaCols	: "Colonne",
+DlgTextareaRows	: "Righe",
+
+// Text Field Dialog
+DlgTextName			: "Nome",
+DlgTextValue		: "Valore",
+DlgTextCharWidth	: "Larghezza",
+DlgTextMaxChars		: "Numero massimo di caratteri",
+DlgTextType			: "Tipo",
+DlgTextTypeText		: "Testo",
+DlgTextTypePass		: "Password",
+
+// Hidden Field Dialog
+DlgHiddenName	: "Nome",
+DlgHiddenValue	: "Valore",
+
+// Bulleted List Dialog
+BulletedListProp	: "Proprietà lista puntata",
+NumberedListProp	: "Proprietà lista numerata",
+DlgLstStart			: "Inizio",
+DlgLstType			: "Tipo",
+DlgLstTypeCircle	: "Tondo",
+DlgLstTypeDisc		: "Disco",
+DlgLstTypeSquare	: "Quadrato",
+DlgLstTypeNumbers	: "Numeri (1, 2, 3)",
+DlgLstTypeLCase		: "Caratteri minuscoli (a, b, c)",
+DlgLstTypeUCase		: "Caratteri maiuscoli (A, B, C)",
+DlgLstTypeSRoman	: "Numeri Romani minuscoli (i, ii, iii)",
+DlgLstTypeLRoman	: "Numeri Romani maiuscoli (I, II, III)",
+
+// Document Properties Dialog
+DlgDocGeneralTab	: "Genarale",
+DlgDocBackTab		: "Sfondo",
+DlgDocColorsTab		: "Colori e margini",
+DlgDocMetaTab		: "Meta Data",
+
+DlgDocPageTitle		: "Titolo pagina",
+DlgDocLangDir		: "Direzione scrittura",
+DlgDocLangDirLTR	: "Da Sinistra a Destra (LTR)",
+DlgDocLangDirRTL	: "Da Destra a Sinistra (RTL)",
+DlgDocLangCode		: "Codice Lingua",
+DlgDocCharSet		: "Set di caretteri",
+DlgDocCharSetCE		: "Europa Centrale",
+DlgDocCharSetCT		: "Cinese Tradizionale (Big5)",
+DlgDocCharSetCR		: "Cirillico",
+DlgDocCharSetGR		: "Greco",
+DlgDocCharSetJP		: "Giapponese",
+DlgDocCharSetKR		: "Coreano",
+DlgDocCharSetTR		: "Turco",
+DlgDocCharSetUN		: "Unicode (UTF-8)",
+DlgDocCharSetWE		: "Europa Occidentale",
+DlgDocCharSetOther	: "Altro set di caretteri",
+
+DlgDocDocType		: "Intestazione DocType",
+DlgDocDocTypeOther	: "Altra intestazione DocType",
+DlgDocIncXHTML		: "Includi dichiarazione XHTML",
+DlgDocBgColor		: "Colore di sfondo",
+DlgDocBgImage		: "Immagine di sfondo",
+DlgDocBgNoScroll	: "Sfondo fissato",
+DlgDocCText			: "Testo",
+DlgDocCLink			: "Collegamento",
+DlgDocCVisited		: "Collegamento visitato",
+DlgDocCActive		: "Collegamento attivo",
+DlgDocMargins		: "Margini",
+DlgDocMaTop			: "In Alto",
+DlgDocMaLeft		: "A Sinistra",
+DlgDocMaRight		: "A Destra",
+DlgDocMaBottom		: "In Basso",
+DlgDocMeIndex		: "Chiavi di indicizzazione documento (separate da virgola)",
+DlgDocMeDescr		: "Descrizione documento",
+DlgDocMeAuthor		: "Autore",
+DlgDocMeCopy		: "Copyright",
+DlgDocPreview		: "Anteprima",
+
+// Templates Dialog
+Templates			: "Modelli",
+DlgTemplatesTitle	: "Contenuto dei modelli",
+DlgTemplatesSelMsg	: "Seleziona il modello da aprire nell'editor<br />(il contenuto attuale verrà eliminato):",
+DlgTemplatesLoading	: "Caricamento modelli in corso. Attendere prego...",
+DlgTemplatesNoTpl	: "(Nessun modello definito)",
+DlgTemplatesReplace	: "Cancella il contenuto corrente",
+
+// About Dialog
+DlgAboutAboutTab	: "Informazioni",
+DlgAboutBrowserInfoTab	: "Informazioni Browser",
+DlgAboutLicenseTab	: "Licenza",
+DlgAboutVersion		: "versione",
+DlgAboutInfo		: "Per maggiori informazioni visitare"
+};


Property changes on: announcement/trunk/src/main/webapp/fckeditor/editor/lang/it.js
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/webapp/fckeditor/editor/lang/ja.js
===================================================================
--- announcement/trunk/src/main/webapp/fckeditor/editor/lang/ja.js	                        (rev 0)
+++ announcement/trunk/src/main/webapp/fckeditor/editor/lang/ja.js	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,515 @@
+/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2008 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * Japanese language file.
+ */
+
+var FCKLang =
+{
+// Language direction : "ltr" (left to right) or "rtl" (right to left).
+Dir					: "ltr",
+
+ToolbarCollapse		: "ツールバーを隠す",
+ToolbarExpand		: "ツールバーを表示",
+
+// Toolbar Items and Context Menu
+Save				: "保存",
+NewPage				: "新しいページ",
+Preview				: "プレビュー",
+Cut					: "切り取り",
+Copy				: "コピー",
+Paste				: "貼り付け",
+PasteText			: "プレーンテキスト貼り付け",
+PasteWord			: "ワード文章から貼り付け",
+Print				: "印刷",
+SelectAll			: "すべて選択",
+RemoveFormat		: "フォーマット削除",
+InsertLinkLbl		: "リンク",
+InsertLink			: "リンク挿入/編集",
+RemoveLink			: "リンク削除",
+Anchor				: "アンカー挿入/編集",
+AnchorDelete		: "アンカー削除",
+InsertImageLbl		: "イメージ",
+InsertImage			: "イメージ挿入/編集",
+InsertFlashLbl		: "Flash",
+InsertFlash			: "Flash挿入/編集",
+InsertTableLbl		: "テーブル",
+InsertTable			: "テーブル挿入/編集",
+InsertLineLbl		: "ライン",
+InsertLine			: "横罫線",
+InsertSpecialCharLbl: "特殊文字",
+InsertSpecialChar	: "特殊文字挿入",
+InsertSmileyLbl		: "絵文字",
+InsertSmiley		: "絵文字挿入",
+About				: "FCKeditorヘルプ",
+Bold				: "太字",
+Italic				: "斜体",
+Underline			: "下線",
+StrikeThrough		: "打ち消し線",
+Subscript			: "添え字",
+Superscript			: "上付き文字",
+LeftJustify			: "左揃え",
+CenterJustify		: "中央揃え",
+RightJustify		: "右揃え",
+BlockJustify		: "両端揃え",
+DecreaseIndent		: "インデント解除",
+IncreaseIndent		: "インデント",
+Blockquote			: "ブロック引用",
+Undo				: "元に戻す",
+Redo				: "やり直し",
+NumberedListLbl		: "段落番号",
+NumberedList		: "段落番号の追加/削除",
+BulletedListLbl		: "箇条書き",
+BulletedList		: "箇条書きの追加/削除",
+ShowTableBorders	: "テーブルボーダー表示",
+ShowDetails			: "詳細表示",
+Style				: "スタイル",
+FontFormat			: "フォーマット",
+Font				: "フォント",
+FontSize			: "サイズ",
+TextColor			: "テキスト色",
+BGColor				: "背景色",
+Source				: "ソース",
+Find				: "検索",
+Replace				: "置き換え",
+SpellCheck			: "スペルチェック",
+UniversalKeyboard	: "ユニバーサル・キーボード",
+PageBreakLbl		: "改ページ",
+PageBreak			: "改ページ挿入",
+
+Form			: "フォーム",
+Checkbox		: "チェックボックス",
+RadioButton		: "ラジオボタン",
+TextField		: "1行テキスト",
+Textarea		: "テキストエリア",
+HiddenField		: "不可視フィールド",
+Button			: "ボタン",
+SelectionField	: "選択フィールド",
+ImageButton		: "画像ボタン",
+
+FitWindow		: "エディタサイズを最大にします",
+ShowBlocks		: "ブロック表示",
+
+// Context Menu
+EditLink			: "リンク編集",
+CellCM				: "セル",
+RowCM				: "行",
+ColumnCM			: "カラム",
+InsertRowAfter		: "列の後に挿入",
+InsertRowBefore		: "列の前に挿入",
+DeleteRows			: "行削除",
+InsertColumnAfter	: "カラムの後に挿入",
+InsertColumnBefore	: "カラムの前に挿入",
+DeleteColumns		: "列削除",
+InsertCellAfter		: "セルの後に挿入",
+InsertCellBefore	: "セルの前に挿入",
+DeleteCells			: "セル削除",
+MergeCells			: "セル結合",
+MergeRight			: "右に結合",
+MergeDown			: "下に結合",
+HorizontalSplitCell	: "セルを水平方向分割",
+VerticalSplitCell	: "セルを垂直方向に分割",
+TableDelete			: "テーブル削除",
+CellProperties		: "セル プロパティ",
+TableProperties		: "テーブル プロパティ",
+ImageProperties		: "イメージ プロパティ",
+FlashProperties		: "Flash プロパティ",
+
+AnchorProp			: "アンカー プロパティ",
+ButtonProp			: "ボタン プロパティ",
+CheckboxProp		: "チェックボックス プロパティ",
+HiddenFieldProp		: "不可視フィールド プロパティ",
+RadioButtonProp		: "ラジオボタン プロパティ",
+ImageButtonProp		: "画像ボタン プロパティ",
+TextFieldProp		: "1行テキスト プロパティ",
+SelectionFieldProp	: "選択フィールド プロパティ",
+TextareaProp		: "テキストエリア プロパティ",
+FormProp			: "フォーム プロパティ",
+
+FontFormats			: "標準;書式付き;アドレス;見出し 1;見出し 2;見出し 3;見出し 4;見出し 5;見出し 6;標準 (DIV)",
+
+// Alerts and Messages
+ProcessingXHTML		: "XHTML処理中. しばらくお待ちください...",
+Done				: "完了",
+PasteWordConfirm	: "貼り付けを行うテキストは、ワード文章からコピーされようとしています。貼り付ける前にクリーニングを行いますか?",
+NotCompatiblePaste	: "このコマンドはインターネット・エクスプローラーバージョン5.5以上で利用可能です。クリーニングしないで貼り付けを行いますか?",
+UnknownToolbarItem	: "未知のツールバー項目 \"%1\"",
+UnknownCommand		: "未知のコマンド名 \"%1\"",
+NotImplemented		: "コマンドはインプリメントされませんでした。",
+UnknownToolbarSet	: "ツールバー設定 \"%1\" 存在しません。",
+NoActiveX			: "エラー、警告メッセージなどが発生した場合、ブラウザーのセキュリティ設定によりエディタのいくつかの機能が制限されている可能性があります。セキュリティ設定のオプションで\"ActiveXコントロールとプラグインの実行\"を有効にするにしてください。",
+BrowseServerBlocked : "サーバーブラウザーを開くことができませんでした。ポップアップ・ブロック機能が無効になっているか確認してください。",
+DialogBlocked		: "ダイアログウィンドウを開くことができませんでした。ポップアップ・ブロック機能が無効になっているか確認してください。",
+
+// Dialogs
+DlgBtnOK			: "OK",
+DlgBtnCancel		: "キャンセル",
+DlgBtnClose			: "閉じる",
+DlgBtnBrowseServer	: "サーバーブラウザー",
+DlgAdvancedTag		: "高度な設定",
+DlgOpOther			: "<その他>",
+DlgInfoTab			: "情報",
+DlgAlertUrl			: "URLを挿入してください",
+
+// General Dialogs Labels
+DlgGenNotSet		: "<なし>",
+DlgGenId			: "Id",
+DlgGenLangDir		: "文字表記の方向",
+DlgGenLangDirLtr	: "左から右 (LTR)",
+DlgGenLangDirRtl	: "右から左 (RTL)",
+DlgGenLangCode		: "言語コード",
+DlgGenAccessKey		: "アクセスキー",
+DlgGenName			: "Name属性",
+DlgGenTabIndex		: "タブインデックス",
+DlgGenLongDescr		: "longdesc属性(長文説明)",
+DlgGenClass			: "スタイルシートクラス",
+DlgGenTitle			: "Title属性",
+DlgGenContType		: "Content Type属性",
+DlgGenLinkCharset	: "リンクcharset属性",
+DlgGenStyle			: "スタイルシート",
+
+// Image Dialog
+DlgImgTitle			: "イメージ プロパティ",
+DlgImgInfoTab		: "イメージ 情報",
+DlgImgBtnUpload		: "サーバーに送信",
+DlgImgURL			: "URL",
+DlgImgUpload		: "アップロード",
+DlgImgAlt			: "代替テキスト",
+DlgImgWidth			: "幅",
+DlgImgHeight		: "高さ",
+DlgImgLockRatio		: "ロック比率",
+DlgBtnResetSize		: "サイズリセット",
+DlgImgBorder		: "ボーダー",
+DlgImgHSpace		: "横間隔",
+DlgImgVSpace		: "縦間隔",
+DlgImgAlign			: "行揃え",
+DlgImgAlignLeft		: "左",
+DlgImgAlignAbsBottom: "下部(絶対的)",
+DlgImgAlignAbsMiddle: "中央(絶対的)",
+DlgImgAlignBaseline	: "ベースライン",
+DlgImgAlignBottom	: "下",
+DlgImgAlignMiddle	: "中央",
+DlgImgAlignRight	: "右",
+DlgImgAlignTextTop	: "テキスト上部",
+DlgImgAlignTop		: "上",
+DlgImgPreview		: "プレビュー",
+DlgImgAlertUrl		: "イメージのURLを入力してください。",
+DlgImgLinkTab		: "リンク",
+
+// Flash Dialog
+DlgFlashTitle		: "Flash プロパティ",
+DlgFlashChkPlay		: "再生",
+DlgFlashChkLoop		: "ループ再生",
+DlgFlashChkMenu		: "Flashメニュー可能",
+DlgFlashScale		: "拡大縮小設定",
+DlgFlashScaleAll	: "すべて表示",
+DlgFlashScaleNoBorder	: "外が見えない様に拡大",
+DlgFlashScaleFit	: "上下左右にフィット",
+
+// Link Dialog
+DlgLnkWindowTitle	: "ハイパーリンク",
+DlgLnkInfoTab		: "ハイパーリンク 情報",
+DlgLnkTargetTab		: "ターゲット",
+
+DlgLnkType			: "リンクタイプ",
+DlgLnkTypeURL		: "URL",
+DlgLnkTypeAnchor	: "このページのアンカー",
+DlgLnkTypeEMail		: "E-Mail",
+DlgLnkProto			: "プロトコル",
+DlgLnkProtoOther	: "<その他>",
+DlgLnkURL			: "URL",
+DlgLnkAnchorSel		: "アンカーを選択",
+DlgLnkAnchorByName	: "アンカー名",
+DlgLnkAnchorById	: "エレメントID",
+DlgLnkNoAnchors		: "(ドキュメントにおいて利用可能なアンカーはありません。)",
+DlgLnkEMail			: "E-Mail アドレス",
+DlgLnkEMailSubject	: "件名",
+DlgLnkEMailBody		: "本文",
+DlgLnkUpload		: "アップロード",
+DlgLnkBtnUpload		: "サーバーに送信",
+
+DlgLnkTarget		: "ターゲット",
+DlgLnkTargetFrame	: "<フレーム>",
+DlgLnkTargetPopup	: "<ポップアップウィンドウ>",
+DlgLnkTargetBlank	: "新しいウィンドウ (_blank)",
+DlgLnkTargetParent	: "親ウィンドウ (_parent)",
+DlgLnkTargetSelf	: "同じウィンドウ (_self)",
+DlgLnkTargetTop		: "最上位ウィンドウ (_top)",
+DlgLnkTargetFrameName	: "目的のフレーム名",
+DlgLnkPopWinName	: "ポップアップウィンドウ名",
+DlgLnkPopWinFeat	: "ポップアップウィンドウ特徴",
+DlgLnkPopResize		: "リサイズ可能",
+DlgLnkPopLocation	: "ロケーションバー",
+DlgLnkPopMenu		: "メニューバー",
+DlgLnkPopScroll		: "スクロールバー",
+DlgLnkPopStatus		: "ステータスバー",
+DlgLnkPopToolbar	: "ツールバー",
+DlgLnkPopFullScrn	: "全画面モード(IE)",
+DlgLnkPopDependent	: "開いたウィンドウに連動して閉じる (Netscape)",
+DlgLnkPopWidth		: "幅",
+DlgLnkPopHeight		: "高さ",
+DlgLnkPopLeft		: "左端からの座標で指定",
+DlgLnkPopTop		: "上端からの座標で指定",
+
+DlnLnkMsgNoUrl		: "リンクURLを入力してください。",
+DlnLnkMsgNoEMail	: "メールアドレスを入力してください。",
+DlnLnkMsgNoAnchor	: "アンカーを選択してください。",
+DlnLnkMsgInvPopName	: "ポップ・アップ名は英字で始まる文字で指定してくだい。ポップ・アップ名にスペースは含めません",
+
+// Color Dialog
+DlgColorTitle		: "色選択",
+DlgColorBtnClear	: "クリア",
+DlgColorHighlight	: "ハイライト",
+DlgColorSelected	: "選択色",
+
+// Smiley Dialog
+DlgSmileyTitle		: "顔文字挿入",
+
+// Special Character Dialog
+DlgSpecialCharTitle	: "特殊文字選択",
+
+// Table Dialog
+DlgTableTitle		: "テーブル プロパティ",
+DlgTableRows		: "行",
+DlgTableColumns		: "列",
+DlgTableBorder		: "ボーダーサイズ",
+DlgTableAlign		: "キャプションの整列",
+DlgTableAlignNotSet	: "<なし>",
+DlgTableAlignLeft	: "左",
+DlgTableAlignCenter	: "中央",
+DlgTableAlignRight	: "右",
+DlgTableWidth		: "テーブル幅",
+DlgTableWidthPx		: "ピクセル",
+DlgTableWidthPc		: "パーセント",
+DlgTableHeight		: "テーブル高さ",
+DlgTableCellSpace	: "セル内余白",
+DlgTableCellPad		: "セル内間隔",
+DlgTableCaption		: "キャプション",
+DlgTableSummary		: "テーブル目的/構造",
+
+// Table Cell Dialog
+DlgCellTitle		: "セル プロパティ",
+DlgCellWidth		: "幅",
+DlgCellWidthPx		: "ピクセル",
+DlgCellWidthPc		: "パーセント",
+DlgCellHeight		: "高さ",
+DlgCellWordWrap		: "折り返し",
+DlgCellWordWrapNotSet	: "<なし>",
+DlgCellWordWrapYes	: "Yes",
+DlgCellWordWrapNo	: "No",
+DlgCellHorAlign		: "セル横の整列",
+DlgCellHorAlignNotSet	: "<なし>",
+DlgCellHorAlignLeft	: "左",
+DlgCellHorAlignCenter	: "中央",
+DlgCellHorAlignRight: "右",
+DlgCellVerAlign		: "セル縦の整列",
+DlgCellVerAlignNotSet	: "<なし>",
+DlgCellVerAlignTop	: "上",
+DlgCellVerAlignMiddle	: "中央",
+DlgCellVerAlignBottom	: "下",
+DlgCellVerAlignBaseline	: "ベースライン",
+DlgCellRowSpan		: "縦幅(行数)",
+DlgCellCollSpan		: "横幅(列数)",
+DlgCellBackColor	: "背景色",
+DlgCellBorderColor	: "ボーダーカラー",
+DlgCellBtnSelect	: "選択...",
+
+// Find and Replace Dialog
+DlgFindAndReplaceTitle	: "検索して置換",
+
+// Find Dialog
+DlgFindTitle		: "検索",
+DlgFindFindBtn		: "検索",
+DlgFindNotFoundMsg	: "指定された文字列は見つかりませんでした。",
+
+// Replace Dialog
+DlgReplaceTitle			: "置き換え",
+DlgReplaceFindLbl		: "検索する文字列:",
+DlgReplaceReplaceLbl	: "置換えする文字列:",
+DlgReplaceCaseChk		: "部分一致",
+DlgReplaceReplaceBtn	: "置換え",
+DlgReplaceReplAllBtn	: "すべて置換え",
+DlgReplaceWordChk		: "単語単位で一致",
+
+// Paste Operations / Dialog
+PasteErrorCut	: "ブラウザーのセキュリティ設定によりエディタの切り取り操作が自動で実行することができません。実行するには手動でキーボードの(Ctrl+X)を使用してください。",
+PasteErrorCopy	: "ブラウザーのセキュリティ設定によりエディタのコピー操作が自動で実行することができません。実行するには手動でキーボードの(Ctrl+C)を使用してください。",
+
+PasteAsText		: "プレーンテキスト貼り付け",
+PasteFromWord	: "ワード文章から貼り付け",
+
+DlgPasteMsg2	: "キーボード(<STRONG>Ctrl+V</STRONG>)を使用して、次の入力エリア内で貼って、<STRONG>OK</STRONG>を押してください。",
+DlgPasteSec		: "ブラウザのセキュリティ設定により、エディタはクリップボード・データに直接アクセスすることができません。このウィンドウは貼り付け操作を行う度に表示されます。",
+DlgPasteIgnoreFont		: "FontタグのFace属性を無視します。",
+DlgPasteRemoveStyles	: "スタイル定義を削除します。",
+
+// Color Picker
+ColorAutomatic	: "自動",
+ColorMoreColors	: "その他の色...",
+
+// Document Properties
+DocProps		: "文書 プロパティ",
+
+// Anchor Dialog
+DlgAnchorTitle		: "アンカー プロパティ",
+DlgAnchorName		: "アンカー名",
+DlgAnchorErrorName	: "アンカー名を必ず入力してください。",
+
+// Speller Pages Dialog
+DlgSpellNotInDic		: "辞書にありません",
+DlgSpellChangeTo		: "変更",
+DlgSpellBtnIgnore		: "無視",
+DlgSpellBtnIgnoreAll	: "すべて無視",
+DlgSpellBtnReplace		: "置換",
+DlgSpellBtnReplaceAll	: "すべて置換",
+DlgSpellBtnUndo			: "やり直し",
+DlgSpellNoSuggestions	: "- 該当なし -",
+DlgSpellProgress		: "スペルチェック処理中...",
+DlgSpellNoMispell		: "スペルチェック完了: スペルの誤りはありませんでした",
+DlgSpellNoChanges		: "スペルチェック完了: 語句は変更されませんでした",
+DlgSpellOneChange		: "スペルチェック完了: 1語句変更されました",
+DlgSpellManyChanges		: "スペルチェック完了: %1 語句変更されました",
+
+IeSpellDownload			: "スペルチェッカーがインストールされていません。今すぐダウンロードしますか?",
+
+// Button Dialog
+DlgButtonText		: "テキスト (値)",
+DlgButtonType		: "タイプ",
+DlgButtonTypeBtn	: "ボタン",
+DlgButtonTypeSbm	: "送信",
+DlgButtonTypeRst	: "リセット",
+
+// Checkbox and Radio Button Dialogs
+DlgCheckboxName		: "名前",
+DlgCheckboxValue	: "値",
+DlgCheckboxSelected	: "選択済み",
+
+// Form Dialog
+DlgFormName		: "フォーム名",
+DlgFormAction	: "アクション",
+DlgFormMethod	: "メソッド",
+
+// Select Field Dialog
+DlgSelectName		: "名前",
+DlgSelectValue		: "値",
+DlgSelectSize		: "サイズ",
+DlgSelectLines		: "行",
+DlgSelectChkMulti	: "複数項目選択を許可",
+DlgSelectOpAvail	: "利用可能なオプション",
+DlgSelectOpText		: "選択項目名",
+DlgSelectOpValue	: "選択項目値",
+DlgSelectBtnAdd		: "追加",
+DlgSelectBtnModify	: "編集",
+DlgSelectBtnUp		: "上へ",
+DlgSelectBtnDown	: "下へ",
+DlgSelectBtnSetValue : "選択した値を設定",
+DlgSelectBtnDelete	: "削除",
+
+// Textarea Dialog
+DlgTextareaName	: "名前",
+DlgTextareaCols	: "列",
+DlgTextareaRows	: "行",
+
+// Text Field Dialog
+DlgTextName			: "名前",
+DlgTextValue		: "値",
+DlgTextCharWidth	: "サイズ",
+DlgTextMaxChars		: "最大長",
+DlgTextType			: "タイプ",
+DlgTextTypeText		: "テキスト",
+DlgTextTypePass		: "パスワード入力",
+
+// Hidden Field Dialog
+DlgHiddenName	: "名前",
+DlgHiddenValue	: "値",
+
+// Bulleted List Dialog
+BulletedListProp	: "箇条書き プロパティ",
+NumberedListProp	: "段落番号 プロパティ",
+DlgLstStart			: "開始文字",
+DlgLstType			: "タイプ",
+DlgLstTypeCircle	: "白丸",
+DlgLstTypeDisc		: "黒丸",
+DlgLstTypeSquare	: "四角",
+DlgLstTypeNumbers	: "アラビア数字 (1, 2, 3)",
+DlgLstTypeLCase		: "英字小文字 (a, b, c)",
+DlgLstTypeUCase		: "英字大文字 (A, B, C)",
+DlgLstTypeSRoman	: "ローマ数字小文字 (i, ii, iii)",
+DlgLstTypeLRoman	: "ローマ数字大文字 (I, II, III)",
+
+// Document Properties Dialog
+DlgDocGeneralTab	: "全般",
+DlgDocBackTab		: "背景",
+DlgDocColorsTab		: "色とマージン",
+DlgDocMetaTab		: "メタデータ",
+
+DlgDocPageTitle		: "ページタイトル",
+DlgDocLangDir		: "言語文字表記の方向",
+DlgDocLangDirLTR	: "左から右に表記(LTR)",
+DlgDocLangDirRTL	: "右から左に表記(RTL)",
+DlgDocLangCode		: "言語コード",
+DlgDocCharSet		: "文字セット符号化",
+DlgDocCharSetCE		: "Central European",
+DlgDocCharSetCT		: "Chinese Traditional (Big5)",
+DlgDocCharSetCR		: "Cyrillic",
+DlgDocCharSetGR		: "Greek",
+DlgDocCharSetJP		: "Japanese",
+DlgDocCharSetKR		: "Korean",
+DlgDocCharSetTR		: "Turkish",
+DlgDocCharSetUN		: "Unicode (UTF-8)",
+DlgDocCharSetWE		: "Western European",
+DlgDocCharSetOther	: "他の文字セット符号化",
+
+DlgDocDocType		: "文書タイプヘッダー",
+DlgDocDocTypeOther	: "その他文書タイプヘッダー",
+DlgDocIncXHTML		: "XHTML宣言をインクルード",
+DlgDocBgColor		: "背景色",
+DlgDocBgImage		: "背景画像 URL",
+DlgDocBgNoScroll	: "スクロールしない背景",
+DlgDocCText			: "テキスト",
+DlgDocCLink			: "リンク",
+DlgDocCVisited		: "アクセス済みリンク",
+DlgDocCActive		: "アクセス中リンク",
+DlgDocMargins		: "ページ・マージン",
+DlgDocMaTop			: "上部",
+DlgDocMaLeft		: "左",
+DlgDocMaRight		: "右",
+DlgDocMaBottom		: "下部",
+DlgDocMeIndex		: "文書のキーワード(カンマ区切り)",
+DlgDocMeDescr		: "文書の概要",
+DlgDocMeAuthor		: "文書の作者",
+DlgDocMeCopy		: "文書の著作権",
+DlgDocPreview		: "プレビュー",
+
+// Templates Dialog
+Templates			: "テンプレート(雛形)",
+DlgTemplatesTitle	: "テンプレート内容",
+DlgTemplatesSelMsg	: "エディターで使用するテンプレートを選択してください。<br>(現在のエディタの内容は失われます):",
+DlgTemplatesLoading	: "テンプレート一覧読み込み中. しばらくお待ちください...",
+DlgTemplatesNoTpl	: "(テンプレートが定義されていません)",
+DlgTemplatesReplace	: "現在のエディタの内容と置換えをします",
+
+// About Dialog
+DlgAboutAboutTab	: "バージョン情報",
+DlgAboutBrowserInfoTab	: "ブラウザ情報",
+DlgAboutLicenseTab	: "ライセンス",
+DlgAboutVersion		: "バージョン",
+DlgAboutInfo		: "より詳しい情報はこちらで"
+};


Property changes on: announcement/trunk/src/main/webapp/fckeditor/editor/lang/ja.js
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/webapp/fckeditor/editor/lang/km.js
===================================================================
--- announcement/trunk/src/main/webapp/fckeditor/editor/lang/km.js	                        (rev 0)
+++ announcement/trunk/src/main/webapp/fckeditor/editor/lang/km.js	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,515 @@
+/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2008 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * Khmer language file.
+ */
+
+var FCKLang =
+{
+// Language direction : "ltr" (left to right) or "rtl" (right to left).
+Dir					: "ltr",
+
+ToolbarCollapse		: "បង្រួមរបាឧបរកណ៍",
+ToolbarExpand		: "ពង្រីករបាឧបរណ៍",
+
+// Toolbar Items and Context Menu
+Save				: "រក្សាទុក",
+NewPage				: "ទំព័រថ្មី",
+Preview				: "មើលសាកល្បង",
+Cut					: "កាត់យក",
+Copy				: "ចំលងយក",
+Paste				: "ចំលងដាក់",
+PasteText			: "ចំលងដាក់ជាអត្ថបទធម្មតា",
+PasteWord			: "ចំលងដាក់ពី Word",
+Print				: "បោះពុម្ភ",
+SelectAll			: "ជ្រើសរើសទាំងអស់",
+RemoveFormat		: "លប់ចោល ការរចនា",
+InsertLinkLbl		: "ឈ្នាប់",
+InsertLink			: "បន្ថែម/កែប្រែ ឈ្នាប់",
+RemoveLink			: "លប់ឈ្នាប់",
+Anchor				: "បន្ថែម/កែប្រែ យុថ្កា",
+AnchorDelete		: "Remove Anchor",	//MISSING
+InsertImageLbl		: "រូបភាព",
+InsertImage			: "បន្ថែម/កែប្រែ រូបភាព",
+InsertFlashLbl		: "Flash",
+InsertFlash			: "បន្ថែម/កែប្រែ Flash",
+InsertTableLbl		: "តារាង",
+InsertTable			: "បន្ថែម/កែប្រែ តារាង",
+InsertLineLbl		: "បន្ទាត់",
+InsertLine			: "បន្ថែមបន្ទាត់ផ្តេក",
+InsertSpecialCharLbl: "អក្សរពិសេស",
+InsertSpecialChar	: "បន្ថែមអក្សរពិសេស",
+InsertSmileyLbl		: "រូបភាព",
+InsertSmiley		: "បន្ថែម រូបភាព",
+About				: "អំពី FCKeditor",
+Bold				: "អក្សរដិតធំ",
+Italic				: "អក្សរផ្តេក",
+Underline			: "ដិតបន្ទាត់ពីក្រោមអក្សរ",
+StrikeThrough		: "ដិតបន្ទាត់ពាក់កណ្តាលអក្សរ",
+Subscript			: "អក្សរតូចក្រោម",
+Superscript			: "អក្សរតូចលើ",
+LeftJustify			: "តំរឹមឆ្វេង",
+CenterJustify		: "តំរឹមកណ្តាល",
+RightJustify		: "តំរឹមស្តាំ",
+BlockJustify		: "តំរឹមសងខាង",
+DecreaseIndent		: "បន្ថយការចូលបន្ទាត់",
+IncreaseIndent		: "បន្ថែមការចូលបន្ទាត់",
+Blockquote			: "Blockquote",	//MISSING
+Undo				: "សារឡើងវិញ",
+Redo				: "ធ្វើឡើងវិញ",
+NumberedListLbl		: "បញ្ជីជាអក្សរ",
+NumberedList		: "បន្ថែម/លប់ បញ្ជីជាអក្សរ",
+BulletedListLbl		: "បញ្ជីជារង្វង់មូល",
+BulletedList		: "បន្ថែម/លប់ បញ្ជីជារង្វង់មូល",
+ShowTableBorders	: "បង្ហាញស៊ុមតារាង",
+ShowDetails			: "បង្ហាញពិស្តារ",
+Style				: "ម៉ូត",
+FontFormat			: "រចនា",
+Font				: "ហ្វុង",
+FontSize			: "ទំហំ",
+TextColor			: "ពណ៌អក្សរ",
+BGColor				: "ពណ៌ផ្ទៃខាងក្រោយ",
+Source				: "កូត",
+Find				: "ស្វែងរក",
+Replace				: "ជំនួស",
+SpellCheck			: "ពិនិត្យអក្ខរាវិរុទ្ធ",
+UniversalKeyboard	: "ក្តារពុម្ភអក្សរសកល",
+PageBreakLbl		: "ការផ្តាច់ទំព័រ",
+PageBreak			: "បន្ថែម ការផ្តាច់ទំព័រ",
+
+Form			: "បែបបទ",
+Checkbox		: "ប្រអប់ជ្រើសរើស",
+RadioButton		: "ប៉ូតុនរង្វង់មូល",
+TextField		: "ជួរសរសេរអត្ថបទ",
+Textarea		: "តំបន់សរសេរអត្ថបទ",
+HiddenField		: "ជួរលាក់",
+Button			: "ប៉ូតុន",
+SelectionField	: "ជួរជ្រើសរើស",
+ImageButton		: "ប៉ូតុនរូបភាព",
+
+FitWindow		: "Maximize the editor size",	//MISSING
+ShowBlocks		: "Show Blocks",	//MISSING
+
+// Context Menu
+EditLink			: "កែប្រែឈ្នាប់",
+CellCM				: "Cell",	//MISSING
+RowCM				: "Row",	//MISSING
+ColumnCM			: "Column",	//MISSING
+InsertRowAfter		: "Insert Row After",	//MISSING
+InsertRowBefore		: "Insert Row Before",	//MISSING
+DeleteRows			: "លប់ជួរផ្តេក",
+InsertColumnAfter	: "Insert Column After",	//MISSING
+InsertColumnBefore	: "Insert Column Before",	//MISSING
+DeleteColumns		: "លប់ជួរឈរ",
+InsertCellAfter		: "Insert Cell After",	//MISSING
+InsertCellBefore	: "Insert Cell Before",	//MISSING
+DeleteCells			: "លប់សែល",
+MergeCells			: "បញ្ជូលសែល",
+MergeRight			: "Merge Right",	//MISSING
+MergeDown			: "Merge Down",	//MISSING
+HorizontalSplitCell	: "Split Cell Horizontally",	//MISSING
+VerticalSplitCell	: "Split Cell Vertically",	//MISSING
+TableDelete			: "លប់តារាង",
+CellProperties		: "ការកំណត់សែល",
+TableProperties		: "ការកំណត់តារាង",
+ImageProperties		: "ការកំណត់រូបភាព",
+FlashProperties		: "ការកំណត់ Flash",
+
+AnchorProp			: "ការកំណត់យុថ្កា",
+ButtonProp			: "ការកំណត់ ប៉ូតុន",
+CheckboxProp		: "ការកំណត់ប្រអប់ជ្រើសរើស",
+HiddenFieldProp		: "ការកំណត់ជួរលាក់",
+RadioButtonProp		: "ការកំណត់ប៉ូតុនរង្វង់",
+ImageButtonProp		: "ការកំណត់ប៉ូតុនរូបភាព",
+TextFieldProp		: "ការកំណត់ជួរអត្ថបទ",
+SelectionFieldProp	: "ការកំណត់ជួរជ្រើសរើស",
+TextareaProp		: "ការកំណត់កន្លែងសរសេរអត្ថបទ",
+FormProp			: "ការកំណត់បែបបទ",
+
+FontFormats			: "Normal;Formatted;Address;Heading 1;Heading 2;Heading 3;Heading 4;Heading 5;Heading 6;Normal (DIV)",
+
+// Alerts and Messages
+ProcessingXHTML		: "កំពុងដំណើរការ XHTML ។ សូមរងចាំ...",
+Done				: "ចប់រួចរាល់",
+PasteWordConfirm	: "អត្ថបទដែលលោកអ្នកបំរុងចំលងដាក់ ហាក់បីដូចជាត្រូវចំលងមកពីកម្មវិធី​Word​។ តើលោកអ្នកចង់សំអាតមុនចំលងអត្ថបទដាក់ទេ?",
+NotCompatiblePaste	: "ពាក្យបញ្ជានេះប្រើបានតែជាមួយ Internet Explorer កំរិត 5.5 រឺ លើសនេះ ។ តើលោកអ្នកចង់ចំលងដាក់ដោយមិនចាំបាច់សំអាតទេ?",
+UnknownToolbarItem	: "វត្ថុលើរបាឧបរកណ៍ មិនស្គាល់ \"%1\"",
+UnknownCommand		: "ឈ្មោះពាក្យបញ្ជា មិនស្គាល់ \"%1\"",
+NotImplemented		: "ពាក្យបញ្ជា មិនបានអនុវត្ត",
+UnknownToolbarSet	: "របាឧបរកណ៍ \"%1\" ពុំមាន ។",
+NoActiveX			: "ការកំណត់សុវត្ថភាពរបស់កម្មវិធីរុករករបស់លោកអ្នក នេះ​អាចធ្វើអោយលោកអ្នកមិនអាចប្រើមុខងារខ្លះរបស់កម្មវិធីតាក់តែងអត្ថបទនេះ ។ លោកអ្នកត្រូវកំណត់អោយ \"ActiveX និង​កម្មវិធីជំនួយក្នុង (plug-ins)\" អោយដំណើរការ ។ លោកអ្នកអាចជួបប្រទះនឹង បញ្ហា ព្រមជាមួយនឹងការបាត់បង់មុខងារណាមួយរបស់កម្មវិធីតាក់តែងអត្ថបទនេះ ។",
+BrowseServerBlocked : "The resources browser could not be opened. Make sure that all popup blockers are disabled.",	//MISSING
+DialogBlocked		: "វីនដូវមិនអាចបើកបានទេ ។ សូមពិនិត្យចំពោះកម្មវិធីបិទ វីនដូវលោត (popup) ថាតើវាដំណើរការរឺទេ ។",
+
+// Dialogs
+DlgBtnOK			: "យល់ព្រម",
+DlgBtnCancel		: "មិនយល់ព្រម",
+DlgBtnClose			: "បិទ",
+DlgBtnBrowseServer	: "មើល",
+DlgAdvancedTag		: "កំរិតខ្ពស់",
+DlgOpOther			: "<ផ្សេងទៅត>",
+DlgInfoTab			: "ពត៌មាន",
+DlgAlertUrl			: "សូមសរសេរ URL",
+
+// General Dialogs Labels
+DlgGenNotSet		: "<មិនមែន>",
+DlgGenId			: "Id",
+DlgGenLangDir		: "ទិសដៅភាសា",
+DlgGenLangDirLtr	: "ពីឆ្វេងទៅស្តាំ(LTR)",
+DlgGenLangDirRtl	: "ពីស្តាំទៅឆ្វេង(RTL)",
+DlgGenLangCode		: "លេខកូតភាសា",
+DlgGenAccessKey		: "ឃី សំរាប់ចូល",
+DlgGenName			: "ឈ្មោះ",
+DlgGenTabIndex		: "លេខ Tab",
+DlgGenLongDescr		: "អធិប្បាយ URL វែង",
+DlgGenClass			: "Stylesheet Classes",
+DlgGenTitle			: "ចំណងជើង ប្រឹក្សា",
+DlgGenContType		: "ប្រភេទអត្ថបទ ប្រឹក្សា",
+DlgGenLinkCharset	: "លេខកូតអក្សររបស់ឈ្នាប់",
+DlgGenStyle			: "ម៉ូត",
+
+// Image Dialog
+DlgImgTitle			: "ការកំណត់រូបភាព",
+DlgImgInfoTab		: "ពត៌មានអំពីរូបភាព",
+DlgImgBtnUpload		: "បញ្ជូនទៅកាន់ម៉ាស៊ីនផ្តល់សេវា",
+DlgImgURL			: "URL",
+DlgImgUpload		: "ទាញយក",
+DlgImgAlt			: "អត្ថបទជំនួស",
+DlgImgWidth			: "ទទឹង",
+DlgImgHeight		: "កំពស់",
+DlgImgLockRatio		: "អត្រាឡុក",
+DlgBtnResetSize		: "កំណត់ទំហំឡើងវិញ",
+DlgImgBorder		: "ស៊ុម",
+DlgImgHSpace		: "គំលាតទទឹង",
+DlgImgVSpace		: "គំលាតបណ្តោយ",
+DlgImgAlign			: "កំណត់ទីតាំង",
+DlgImgAlignLeft		: "ខាងឆ្វង",
+DlgImgAlignAbsBottom: "Abs Bottom",	//MISSING
+DlgImgAlignAbsMiddle: "Abs Middle",	//MISSING
+DlgImgAlignBaseline	: "បន្ទាត់ជាមូលដ្ឋាន",
+DlgImgAlignBottom	: "ខាងក្រោម",
+DlgImgAlignMiddle	: "កណ្តាល",
+DlgImgAlignRight	: "ខាងស្តាំ",
+DlgImgAlignTextTop	: "លើអត្ថបទ",
+DlgImgAlignTop		: "ខាងលើ",
+DlgImgPreview		: "មើលសាកល្បង",
+DlgImgAlertUrl		: "សូមសរសេរងាស័យដ្ឋានរបស់រូបភាព",
+DlgImgLinkTab		: "ឈ្នាប់",
+
+// Flash Dialog
+DlgFlashTitle		: "ការកំណត់ Flash",
+DlgFlashChkPlay		: "លេងដោយស្វ័យប្រវត្ត",
+DlgFlashChkLoop		: "ចំនួនដង",
+DlgFlashChkMenu		: "បង្ហាញ មឺនុយរបស់ Flash",
+DlgFlashScale		: "ទំហំ",
+DlgFlashScaleAll	: "បង្ហាញទាំងអស់",
+DlgFlashScaleNoBorder	: "មិនបង្ហាញស៊ុម",
+DlgFlashScaleFit	: "ត្រូវល្មម",
+
+// Link Dialog
+DlgLnkWindowTitle	: "ឈ្នាប់",
+DlgLnkInfoTab		: "ពត៌មានអំពីឈ្នាប់",
+DlgLnkTargetTab		: "គោលដៅ",
+
+DlgLnkType			: "ប្រភេទឈ្នាប់",
+DlgLnkTypeURL		: "URL",
+DlgLnkTypeAnchor	: "យុថ្កានៅក្នុងទំព័រនេះ",
+DlgLnkTypeEMail		: "អ៊ីមែល",
+DlgLnkProto			: "ប្រូតូកូល",
+DlgLnkProtoOther	: "<ផ្សេងទៀត>",
+DlgLnkURL			: "URL",
+DlgLnkAnchorSel		: "ជ្រើសរើសយុថ្កា",
+DlgLnkAnchorByName	: "តាមឈ្មោះរបស់យុថ្កា",
+DlgLnkAnchorById	: "តាម Id",
+DlgLnkNoAnchors		: "(No anchors available in the document)",	//MISSING
+DlgLnkEMail			: "អ៊ីមែល",
+DlgLnkEMailSubject	: "ចំណងជើងអត្ថបទ",
+DlgLnkEMailBody		: "អត្ថបទ",
+DlgLnkUpload		: "ទាញយក",
+DlgLnkBtnUpload		: "ទាញយក",
+
+DlgLnkTarget		: "គោលដៅ",
+DlgLnkTargetFrame	: "<ហ្វ្រេម>",
+DlgLnkTargetPopup	: "<វីនដូវ លោត>",
+DlgLnkTargetBlank	: "វីនដូវថ្មី (_blank)",
+DlgLnkTargetParent	: "វីនដូវមេ (_parent)",
+DlgLnkTargetSelf	: "វីនដូវដដែល (_self)",
+DlgLnkTargetTop		: "វីនដូវនៅលើគេ(_top)",
+DlgLnkTargetFrameName	: "ឈ្មោះហ្រ្វេមដែលជាគោលដៅ",
+DlgLnkPopWinName	: "ឈ្មោះវីនដូវលោត",
+DlgLnkPopWinFeat	: "លក្ខណះរបស់វីនដូលលោត",
+DlgLnkPopResize		: "ទំហំអាចផ្លាស់ប្តូរ",
+DlgLnkPopLocation	: "របា ទីតាំង",
+DlgLnkPopMenu		: "របា មឺនុយ",
+DlgLnkPopScroll		: "របា ទាញ",
+DlgLnkPopStatus		: "របា ពត៌មាន",
+DlgLnkPopToolbar	: "របា ឩបករណ៍",
+DlgLnkPopFullScrn	: "អេក្រុងពេញ(IE)",
+DlgLnkPopDependent	: "អាស្រ័យលើ (Netscape)",
+DlgLnkPopWidth		: "ទទឹង",
+DlgLnkPopHeight		: "កំពស់",
+DlgLnkPopLeft		: "ទីតាំងខាងឆ្វេង",
+DlgLnkPopTop		: "ទីតាំងខាងលើ",
+
+DlnLnkMsgNoUrl		: "សូមសរសេរ អាស័យដ្ឋាន URL",
+DlnLnkMsgNoEMail	: "សូមសរសេរ អាស័យដ្ឋាន អ៊ីមែល",
+DlnLnkMsgNoAnchor	: "សូមជ្រើសរើស យុថ្កា",
+DlnLnkMsgInvPopName	: "The popup name must begin with an alphabetic character and must not contain spaces",	//MISSING
+
+// Color Dialog
+DlgColorTitle		: "ជ្រើសរើស ពណ៌",
+DlgColorBtnClear	: "លប់",
+DlgColorHighlight	: "ផាត់ពណ៌",
+DlgColorSelected	: "បានជ្រើសរើស",
+
+// Smiley Dialog
+DlgSmileyTitle		: "បញ្ជូលរូបភាព",
+
+// Special Character Dialog
+DlgSpecialCharTitle	: "តូអក្សរពិសេស",
+
+// Table Dialog
+DlgTableTitle		: "ការកំណត់ តារាង",
+DlgTableRows		: "ជួរផ្តេក",
+DlgTableColumns		: "ជួរឈរ",
+DlgTableBorder		: "ទំហំស៊ុម",
+DlgTableAlign		: "ការកំណត់ទីតាំង",
+DlgTableAlignNotSet	: "<មិនកំណត់>",
+DlgTableAlignLeft	: "ខាងឆ្វេង",
+DlgTableAlignCenter	: "កណ្តាល",
+DlgTableAlignRight	: "ខាងស្តាំ",
+DlgTableWidth		: "ទទឹង",
+DlgTableWidthPx		: "ភីកសែល",
+DlgTableWidthPc		: "ភាគរយ",
+DlgTableHeight		: "កំពស់",
+DlgTableCellSpace	: "គំលាតសែល",
+DlgTableCellPad		: "គែមសែល",
+DlgTableCaption		: "ចំណងជើង",
+DlgTableSummary		: "សេចក្តីសង្ខេប",
+
+// Table Cell Dialog
+DlgCellTitle		: "ការកំណត់ សែល",
+DlgCellWidth		: "ទទឹង",
+DlgCellWidthPx		: "ភីកសែល",
+DlgCellWidthPc		: "ភាគរយ",
+DlgCellHeight		: "កំពស់",
+DlgCellWordWrap		: "បង្ហាញអត្ថបទទាំងអស់",
+DlgCellWordWrapNotSet	: "<មិនកំណត់>",
+DlgCellWordWrapYes	: "បាទ(ចា)",
+DlgCellWordWrapNo	: "ទេ",
+DlgCellHorAlign		: "តំរឹមផ្តេក",
+DlgCellHorAlignNotSet	: "<មិនកំណត់>",
+DlgCellHorAlignLeft	: "ខាងឆ្វេង",
+DlgCellHorAlignCenter	: "កណ្តាល",
+DlgCellHorAlignRight: "Right",	//MISSING
+DlgCellVerAlign		: "តំរឹមឈរ",
+DlgCellVerAlignNotSet	: "<មិនកណត់>",
+DlgCellVerAlignTop	: "ខាងលើ",
+DlgCellVerAlignMiddle	: "កណ្តាល",
+DlgCellVerAlignBottom	: "ខាងក្រោម",
+DlgCellVerAlignBaseline	: "បន្ទាត់ជាមូលដ្ឋាន",
+DlgCellRowSpan		: "បញ្ជូលជួរផ្តេក",
+DlgCellCollSpan		: "បញ្ជូលជួរឈរ",
+DlgCellBackColor	: "ពណ៌ផ្នែកខាងក្រោម",
+DlgCellBorderColor	: "ពណ៌ស៊ុម",
+DlgCellBtnSelect	: "ជ្រើសរើស...",
+
+// Find and Replace Dialog
+DlgFindAndReplaceTitle	: "Find and Replace",	//MISSING
+
+// Find Dialog
+DlgFindTitle		: "ស្វែងរក",
+DlgFindFindBtn		: "ស្វែងរក",
+DlgFindNotFoundMsg	: "ពាក្យនេះ រកមិនឃើញទេ ។",
+
+// Replace Dialog
+DlgReplaceTitle			: "ជំនួស",
+DlgReplaceFindLbl		: "ស្វែងរកអ្វី:",
+DlgReplaceReplaceLbl	: "ជំនួសជាមួយ:",
+DlgReplaceCaseChk		: "ករណ៉ត្រូវរក",
+DlgReplaceReplaceBtn	: "ជំនួស",
+DlgReplaceReplAllBtn	: "ជំនួសទាំងអស់",
+DlgReplaceWordChk		: "ត្រូវពាក្យទាំងអស់",
+
+// Paste Operations / Dialog
+PasteErrorCut	: "ការកំណត់សុវត្ថភាពរបស់កម្មវិធីរុករករបស់លោកអ្នក នេះ​មិនអាចធ្វើកម្មវិធីតាក់តែងអត្ថបទ កាត់អត្ថបទយកដោយស្វ័យប្រវត្តបានឡើយ ។ សូមប្រើប្រាស់បន្សំ ឃីដូចនេះ  (Ctrl+X) ។",
+PasteErrorCopy	: "ការកំណត់សុវត្ថភាពរបស់កម្មវិធីរុករករបស់លោកអ្នក នេះ​មិនអាចធ្វើកម្មវិធីតាក់តែងអត្ថបទ ចំលងអត្ថបទយកដោយស្វ័យប្រវត្តបានឡើយ ។ សូមប្រើប្រាស់បន្សំ ឃីដូចនេះ (Ctrl+C)។",
+
+PasteAsText		: "ចំលងដាក់អត្ថបទធម្មតា",
+PasteFromWord	: "ចំលងពាក្យពីកម្មវិធី Word",
+
+DlgPasteMsg2	: "សូមចំលងអត្ថបទទៅដាក់ក្នុងប្រអប់ដូចខាងក្រោមដោយប្រើប្រាស់ ឃី ​(<STRONG>Ctrl+V</STRONG>) ហើយចុច <STRONG>OK</STRONG> ។",
+DlgPasteSec		: "Because of your browser security settings, the editor is not able to access your clipboard data directly. You are required to paste it again in this window.",	//MISSING
+DlgPasteIgnoreFont		: "មិនគិតអំពីប្រភេទពុម្ភអក្សរ",
+DlgPasteRemoveStyles	: "លប់ម៉ូត",
+
+// Color Picker
+ColorAutomatic	: "ស្វ័យប្រវត្ត",
+ColorMoreColors	: "ពណ៌ផ្សេងទៀត..",
+
+// Document Properties
+DocProps		: "ការកំណត់ ឯកសារ",
+
+// Anchor Dialog
+DlgAnchorTitle		: "ការកំណត់ចំណងជើងយុទ្ធថ្កា",
+DlgAnchorName		: "ឈ្មោះយុទ្ធថ្កា",
+DlgAnchorErrorName	: "សូមសរសេរ ឈ្មោះយុទ្ធថ្កា",
+
+// Speller Pages Dialog
+DlgSpellNotInDic		: "គ្មានក្នុងវចនានុក្រម",
+DlgSpellChangeTo		: "ផ្លាស់ប្តូរទៅ",
+DlgSpellBtnIgnore		: "មិនផ្លាស់ប្តូរ",
+DlgSpellBtnIgnoreAll	: "មិនផ្លាស់ប្តូរ ទាំងអស់",
+DlgSpellBtnReplace		: "ជំនួស",
+DlgSpellBtnReplaceAll	: "ជំនួសទាំងអស់",
+DlgSpellBtnUndo			: "សារឡើងវិញ",
+DlgSpellNoSuggestions	: "- គ្មានសំណើរ -",
+DlgSpellProgress		: "កំពុងពិនិត្យអក្ខរាវិរុទ្ធ...",
+DlgSpellNoMispell		: "ការពិនិត្យអក្ខរាវិរុទ្ធបានចប់: គ្មានកំហុស",
+DlgSpellNoChanges		: "ការពិនិត្យអក្ខរាវិរុទ្ធបានចប់: ពុំមានផ្លាស់ប្តូរ",
+DlgSpellOneChange		: "ការពិនិត្យអក្ខរាវិរុទ្ធបានចប់: ពាក្យមួយត្រូចបានផ្លាស់ប្តូរ",
+DlgSpellManyChanges		: "ការពិនិត្យអក្ខរាវិរុទ្ធបានចប់: %1 ពាក្យបានផ្លាស់ប្តូរ",
+
+IeSpellDownload			: "ពុំមានកម្មវិធីពិនិត្យអក្ខរាវិរុទ្ធ ។ តើចង់ទាញយកពីណា?",
+
+// Button Dialog
+DlgButtonText		: "អត្ថបទ(តំលៃ)",
+DlgButtonType		: "ប្រភេទ",
+DlgButtonTypeBtn	: "Button",	//MISSING
+DlgButtonTypeSbm	: "Submit",	//MISSING
+DlgButtonTypeRst	: "Reset",	//MISSING
+
+// Checkbox and Radio Button Dialogs
+DlgCheckboxName		: "ឈ្មោះ",
+DlgCheckboxValue	: "តំលៃ",
+DlgCheckboxSelected	: "បានជ្រើសរើស",
+
+// Form Dialog
+DlgFormName		: "ឈ្មោះ",
+DlgFormAction	: "សកម្មភាព",
+DlgFormMethod	: "វិធី",
+
+// Select Field Dialog
+DlgSelectName		: "ឈ្មោះ",
+DlgSelectValue		: "តំលៃ",
+DlgSelectSize		: "ទំហំ",
+DlgSelectLines		: "បន្ទាត់",
+DlgSelectChkMulti	: "អនុញ្ញាតអោយជ្រើសរើសច្រើន",
+DlgSelectOpAvail	: "ការកំណត់ជ្រើសរើស ដែលអាចកំណត់បាន",
+DlgSelectOpText		: "ពាក្យ",
+DlgSelectOpValue	: "តំលៃ",
+DlgSelectBtnAdd		: "បន្ថែម",
+DlgSelectBtnModify	: "ផ្លាស់ប្តូរ",
+DlgSelectBtnUp		: "លើ",
+DlgSelectBtnDown	: "ក្រោម",
+DlgSelectBtnSetValue : "Set as selected value",	//MISSING
+DlgSelectBtnDelete	: "លប់",
+
+// Textarea Dialog
+DlgTextareaName	: "ឈ្មោះ",
+DlgTextareaCols	: "ជូរឈរ",
+DlgTextareaRows	: "ជូរផ្តេក",
+
+// Text Field Dialog
+DlgTextName			: "ឈ្មោះ",
+DlgTextValue		: "តំលៃ",
+DlgTextCharWidth	: "ទទឹង អក្សរ",
+DlgTextMaxChars		: "អក្សរអតិបរិមា",
+DlgTextType			: "ប្រភេទ",
+DlgTextTypeText		: "ពាក្យ",
+DlgTextTypePass		: "ពាក្យសំងាត់",
+
+// Hidden Field Dialog
+DlgHiddenName	: "ឈ្មោះ",
+DlgHiddenValue	: "តំលៃ",
+
+// Bulleted List Dialog
+BulletedListProp	: "កំណត់បញ្ជីរង្វង់",
+NumberedListProp	: "កំណត់បញ្េជីលេខ",
+DlgLstStart			: "Start",	//MISSING
+DlgLstType			: "ប្រភេទ",
+DlgLstTypeCircle	: "រង្វង់",
+DlgLstTypeDisc		: "Disc",
+DlgLstTypeSquare	: "ការេ",
+DlgLstTypeNumbers	: "លេខ(1, 2, 3)",
+DlgLstTypeLCase		: "អក្សរតូច(a, b, c)",
+DlgLstTypeUCase		: "អក្សរធំ(A, B, C)",
+DlgLstTypeSRoman	: "អក្សរឡាតាំងតូច(i, ii, iii)",
+DlgLstTypeLRoman	: "អក្សរឡាតាំងធំ(I, II, III)",
+
+// Document Properties Dialog
+DlgDocGeneralTab	: "ទូទៅ",
+DlgDocBackTab		: "ផ្នែកខាងក្រោយ",
+DlgDocColorsTab		: "ទំព័រ​និង ស៊ុម",
+DlgDocMetaTab		: "ទិន្នន័យមេ",
+
+DlgDocPageTitle		: "ចំណងជើងទំព័រ",
+DlgDocLangDir		: "ទិសដៅសរសេរភាសា",
+DlgDocLangDirLTR	: "ពីឆ្វេងទៅស្ដាំ(LTR)",
+DlgDocLangDirRTL	: "ពីស្ដាំទៅឆ្វេង(RTL)",
+DlgDocLangCode		: "លេខកូតភាសា",
+DlgDocCharSet		: "កំណត់លេខកូតភាសា",
+DlgDocCharSetCE		: "Central European",	//MISSING
+DlgDocCharSetCT		: "Chinese Traditional (Big5)",	//MISSING
+DlgDocCharSetCR		: "Cyrillic",	//MISSING
+DlgDocCharSetGR		: "Greek",	//MISSING
+DlgDocCharSetJP		: "Japanese",	//MISSING
+DlgDocCharSetKR		: "Korean",	//MISSING
+DlgDocCharSetTR		: "Turkish",	//MISSING
+DlgDocCharSetUN		: "Unicode (UTF-8)",	//MISSING
+DlgDocCharSetWE		: "Western European",	//MISSING
+DlgDocCharSetOther	: "កំណត់លេខកូតភាសាផ្សេងទៀត",
+
+DlgDocDocType		: "ប្រភេទក្បាលទំព័រ",
+DlgDocDocTypeOther	: "ប្រភេទក្បាលទំព័រផ្សេងទៀត",
+DlgDocIncXHTML		: "បញ្ជូល XHTML",
+DlgDocBgColor		: "ពណ៌ខាងក្រោម",
+DlgDocBgImage		: "URL របស់រូបភាពខាងក្រោម",
+DlgDocBgNoScroll	: "ទំព័រក្រោមមិនប្តូរ",
+DlgDocCText			: "អត្តបទ",
+DlgDocCLink			: "ឈ្នាប់",
+DlgDocCVisited		: "ឈ្នាប់មើលហើយ",
+DlgDocCActive		: "ឈ្នាប់កំពុងមើល",
+DlgDocMargins		: "ស៊ុមទំព័រ",
+DlgDocMaTop			: "លើ",
+DlgDocMaLeft		: "ឆ្វេង",
+DlgDocMaRight		: "ស្ដាំ",
+DlgDocMaBottom		: "ក្រោម",
+DlgDocMeIndex		: "ពាក្យនៅក្នុងឯកសារ (ផ្តាច់ពីគ្នាដោយក្បៀស)",
+DlgDocMeDescr		: "សេចក្តីអត្ថាធិប្បាយអំពីឯកសារ",
+DlgDocMeAuthor		: "អ្នកនិពន្ធ",
+DlgDocMeCopy		: "រក្សាសិទ្ធិ៏",
+DlgDocPreview		: "មើលសាកល្បង",
+
+// Templates Dialog
+Templates			: "ឯកសារគំរូ",
+DlgTemplatesTitle	: "ឯកសារគំរូ របស់អត្ថន័យ",
+DlgTemplatesSelMsg	: "សូមជ្រើសរើសឯកសារគំរូ ដើម្បីបើកនៅក្នុងកម្មវិធីតាក់តែងអត្ថបទ<br>(អត្ថបទនឹងបាត់បង់):",
+DlgTemplatesLoading	: "កំពុងអានបញ្ជីឯកសារគំរូ ។ សូមរងចាំ...",
+DlgTemplatesNoTpl	: "(ពុំមានឯកសារគំរូត្រូវបានកំណត់)",
+DlgTemplatesReplace	: "Replace actual contents",	//MISSING
+
+// About Dialog
+DlgAboutAboutTab	: "អំពី",
+DlgAboutBrowserInfoTab	: "ព៌តមានកម្មវិធីរុករក",
+DlgAboutLicenseTab	: "License",	//MISSING
+DlgAboutVersion		: "ជំនាន់",
+DlgAboutInfo		: "សំរាប់ព៌តមានផ្សេងទៀត សូមទាក់ទង"
+};


Property changes on: announcement/trunk/src/main/webapp/fckeditor/editor/lang/km.js
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/webapp/fckeditor/editor/lang/ko.js
===================================================================
--- announcement/trunk/src/main/webapp/fckeditor/editor/lang/ko.js	                        (rev 0)
+++ announcement/trunk/src/main/webapp/fckeditor/editor/lang/ko.js	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,515 @@
+/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2008 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * Korean language file.
+ */
+
+var FCKLang =
+{
+// Language direction : "ltr" (left to right) or "rtl" (right to left).
+Dir					: "ltr",
+
+ToolbarCollapse		: "툴바 감추기",
+ToolbarExpand		: "툴바 보이기",
+
+// Toolbar Items and Context Menu
+Save				: "저장하기",
+NewPage				: "새 문서",
+Preview				: "미리보기",
+Cut					: "잘라내기",
+Copy				: "복사하기",
+Paste				: "붙여넣기",
+PasteText			: "텍스트로 붙여넣기",
+PasteWord			: "MS Word 형식에서 붙여넣기",
+Print				: "인쇄하기",
+SelectAll			: "전체선택",
+RemoveFormat		: "포맷 지우기",
+InsertLinkLbl		: "링크",
+InsertLink			: "링크 삽입/변경",
+RemoveLink			: "링크 삭제",
+Anchor				: "책갈피 삽입/변경",
+AnchorDelete		: "Remove Anchor",	//MISSING
+InsertImageLbl		: "이미지",
+InsertImage			: "이미지 삽입/변경",
+InsertFlashLbl		: "플래쉬",
+InsertFlash			: "플래쉬 삽입/변경",
+InsertTableLbl		: "표",
+InsertTable			: "표 삽입/변경",
+InsertLineLbl		: "수평선",
+InsertLine			: "수평선 삽입",
+InsertSpecialCharLbl: "특수문자 삽입",
+InsertSpecialChar	: "특수문자 삽입",
+InsertSmileyLbl		: "아이콘",
+InsertSmiley		: "아이콘 삽입",
+About				: "FCKeditor에 대하여",
+Bold				: "진하게",
+Italic				: "이텔릭",
+Underline			: "밑줄",
+StrikeThrough		: "취소선",
+Subscript			: "아래 첨자",
+Superscript			: "위 첨자",
+LeftJustify			: "왼쪽 정렬",
+CenterJustify		: "가운데 정렬",
+RightJustify		: "오른쪽 정렬",
+BlockJustify		: "양쪽 맞춤",
+DecreaseIndent		: "내어쓰기",
+IncreaseIndent		: "들여쓰기",
+Blockquote			: "Blockquote",	//MISSING
+Undo				: "취소",
+Redo				: "재실행",
+NumberedListLbl		: "순서있는 목록",
+NumberedList		: "순서있는 목록",
+BulletedListLbl		: "순서없는 목록",
+BulletedList		: "순서없는 목록",
+ShowTableBorders	: "표 테두리 보기",
+ShowDetails			: "문서기호 보기",
+Style				: "스타일",
+FontFormat			: "포맷",
+Font				: "폰트",
+FontSize			: "글자 크기",
+TextColor			: "글자 색상",
+BGColor				: "배경 색상",
+Source				: "소스",
+Find				: "찾기",
+Replace				: "바꾸기",
+SpellCheck			: "철자검사",
+UniversalKeyboard	: "다국어 입력기",
+PageBreakLbl		: "Page Break",	//MISSING
+PageBreak			: "Insert Page Break",	//MISSING
+
+Form			: "폼",
+Checkbox		: "체크박스",
+RadioButton		: "라디오버튼",
+TextField		: "입력필드",
+Textarea		: "입력영역",
+HiddenField		: "숨김필드",
+Button			: "버튼",
+SelectionField	: "펼침목록",
+ImageButton		: "이미지버튼",
+
+FitWindow		: "에디터 최대화",
+ShowBlocks		: "Show Blocks",	//MISSING
+
+// Context Menu
+EditLink			: "링크 수정",
+CellCM				: "셀/칸(Cell)",
+RowCM				: "행(Row)",
+ColumnCM			: "열(Column)",
+InsertRowAfter		: "뒤에 행 삽입",
+InsertRowBefore		: "앞에 행 삽입",
+DeleteRows			: "가로줄 삭제",
+InsertColumnAfter	: "뒤에 열 삽입",
+InsertColumnBefore	: "앞에 열 삽입",
+DeleteColumns		: "세로줄 삭제",
+InsertCellAfter		: "뒤에 셀/칸 삽입",
+InsertCellBefore	: "앞에 셀/칸 삽입",
+DeleteCells			: "셀 삭제",
+MergeCells			: "셀 합치기",
+MergeRight			: "오른쪽 뭉치기",
+MergeDown			: "왼쪽 뭉치기",
+HorizontalSplitCell	: "수평 나누기",
+VerticalSplitCell	: "수직 나누기",
+TableDelete			: "표 삭제",
+CellProperties		: "셀 속성",
+TableProperties		: "표 속성",
+ImageProperties		: "이미지 속성",
+FlashProperties		: "플래쉬 속성",
+
+AnchorProp			: "책갈피 속성",
+ButtonProp			: "버튼 속성",
+CheckboxProp		: "체크박스 속성",
+HiddenFieldProp		: "숨김필드 속성",
+RadioButtonProp		: "라디오버튼 속성",
+ImageButtonProp		: "이미지버튼 속성",
+TextFieldProp		: "입력필드 속성",
+SelectionFieldProp	: "펼침목록 속성",
+TextareaProp		: "입력영역 속성",
+FormProp			: "폼 속성",
+
+FontFormats			: "Normal;Formatted;Address;Heading 1;Heading 2;Heading 3;Heading 4;Heading 5;Heading 6",
+
+// Alerts and Messages
+ProcessingXHTML		: "XHTML 처리중. 잠시만 기다려주십시요.",
+Done				: "완료",
+PasteWordConfirm	: "붙여넣기 할 텍스트는 MS Word에서 복사한 것입니다. 붙여넣기 전에 MS Word 포멧을 삭제하시겠습니까?",
+NotCompatiblePaste	: "이 명령은 인터넷익스플로러 5.5 버전 이상에서만 작동합니다. 포멧을 삭제하지 않고 붙여넣기 하시겠습니까?",
+UnknownToolbarItem	: "알수없는 툴바입니다. : \"%1\"",
+UnknownCommand		: "알수없는 기능입니다. : \"%1\"",
+NotImplemented		: "기능이 실행되지 않았습니다.",
+UnknownToolbarSet	: "툴바 설정이 없습니다. : \"%1\"",
+NoActiveX			: "브러우저의 보안 설정으로 인해 몇몇 기능의 작동에 장애가 있을 수 있습니다. \"액티브-액스 기능과 플러그 인\" 옵션을 허용하여 주시지 않으면 오류가 발생할 수 있습니다.",
+BrowseServerBlocked : "브러우저 요소가 열리지 않습니다. 팝업차단 설정이 꺼져있는지 확인하여 주십시오.",
+DialogBlocked		: "윈도우 대화창을 열 수 없습니다. 팝업차단 설정이 꺼져있는지 확인하여 주십시오.",
+
+// Dialogs
+DlgBtnOK			: "예",
+DlgBtnCancel		: "아니오",
+DlgBtnClose			: "닫기",
+DlgBtnBrowseServer	: "서버 보기",
+DlgAdvancedTag		: "자세히",
+DlgOpOther			: "<기타>",
+DlgInfoTab			: "정보",
+DlgAlertUrl			: "URL을 입력하십시요",
+
+// General Dialogs Labels
+DlgGenNotSet		: "<설정되지 않음>",
+DlgGenId			: "ID",
+DlgGenLangDir		: "쓰기 방향",
+DlgGenLangDirLtr	: "왼쪽에서 오른쪽 (LTR)",
+DlgGenLangDirRtl	: "오른쪽에서 왼쪽 (RTL)",
+DlgGenLangCode		: "언어 코드",
+DlgGenAccessKey		: "엑세스 키",
+DlgGenName			: "Name",
+DlgGenTabIndex		: "탭 순서",
+DlgGenLongDescr		: "URL 설명",
+DlgGenClass			: "Stylesheet Classes",
+DlgGenTitle			: "Advisory Title",
+DlgGenContType		: "Advisory Content Type",
+DlgGenLinkCharset	: "Linked Resource Charset",
+DlgGenStyle			: "Style",
+
+// Image Dialog
+DlgImgTitle			: "이미지 설정",
+DlgImgInfoTab		: "이미지 정보",
+DlgImgBtnUpload		: "서버로 전송",
+DlgImgURL			: "URL",
+DlgImgUpload		: "업로드",
+DlgImgAlt			: "이미지 설명",
+DlgImgWidth			: "너비",
+DlgImgHeight		: "높이",
+DlgImgLockRatio		: "비율 유지",
+DlgBtnResetSize		: "원래 크기로",
+DlgImgBorder		: "테두리",
+DlgImgHSpace		: "수평여백",
+DlgImgVSpace		: "수직여백",
+DlgImgAlign			: "정렬",
+DlgImgAlignLeft		: "왼쪽",
+DlgImgAlignAbsBottom: "줄아래(Abs Bottom)",
+DlgImgAlignAbsMiddle: "줄중간(Abs Middle)",
+DlgImgAlignBaseline	: "기준선",
+DlgImgAlignBottom	: "아래",
+DlgImgAlignMiddle	: "중간",
+DlgImgAlignRight	: "오른쪽",
+DlgImgAlignTextTop	: "글자상단",
+DlgImgAlignTop		: "위",
+DlgImgPreview		: "미리보기",
+DlgImgAlertUrl		: "이미지 URL을 입력하십시요",
+DlgImgLinkTab		: "링크",
+
+// Flash Dialog
+DlgFlashTitle		: "플래쉬 등록정보",
+DlgFlashChkPlay		: "자동재생",
+DlgFlashChkLoop		: "반복",
+DlgFlashChkMenu		: "플래쉬메뉴 가능",
+DlgFlashScale		: "영역",
+DlgFlashScaleAll	: "모두보기",
+DlgFlashScaleNoBorder	: "경계선없음",
+DlgFlashScaleFit	: "영역자동조절",
+
+// Link Dialog
+DlgLnkWindowTitle	: "링크",
+DlgLnkInfoTab		: "링크 정보",
+DlgLnkTargetTab		: "타겟",
+
+DlgLnkType			: "링크 종류",
+DlgLnkTypeURL		: "URL",
+DlgLnkTypeAnchor	: "책갈피",
+DlgLnkTypeEMail		: "이메일",
+DlgLnkProto			: "프로토콜",
+DlgLnkProtoOther	: "<기타>",
+DlgLnkURL			: "URL",
+DlgLnkAnchorSel		: "책갈피 선택",
+DlgLnkAnchorByName	: "책갈피 이름",
+DlgLnkAnchorById	: "책갈피 ID",
+DlgLnkNoAnchors		: "(문서에 책갈피가 없습니다.)",
+DlgLnkEMail			: "이메일 주소",
+DlgLnkEMailSubject	: "제목",
+DlgLnkEMailBody		: "내용",
+DlgLnkUpload		: "업로드",
+DlgLnkBtnUpload		: "서버로 전송",
+
+DlgLnkTarget		: "타겟",
+DlgLnkTargetFrame	: "<프레임>",
+DlgLnkTargetPopup	: "<팝업창>",
+DlgLnkTargetBlank	: "새 창 (_blank)",
+DlgLnkTargetParent	: "부모 창 (_parent)",
+DlgLnkTargetSelf	: "현재 창 (_self)",
+DlgLnkTargetTop		: "최 상위 창 (_top)",
+DlgLnkTargetFrameName	: "타겟 프레임 이름",
+DlgLnkPopWinName	: "팝업창 이름",
+DlgLnkPopWinFeat	: "팝업창 설정",
+DlgLnkPopResize		: "크기조정",
+DlgLnkPopLocation	: "주소표시줄",
+DlgLnkPopMenu		: "메뉴바",
+DlgLnkPopScroll		: "스크롤바",
+DlgLnkPopStatus		: "상태바",
+DlgLnkPopToolbar	: "툴바",
+DlgLnkPopFullScrn	: "전체화면 (IE)",
+DlgLnkPopDependent	: "Dependent (Netscape)",
+DlgLnkPopWidth		: "너비",
+DlgLnkPopHeight		: "높이",
+DlgLnkPopLeft		: "왼쪽 위치",
+DlgLnkPopTop		: "윗쪽 위치",
+
+DlnLnkMsgNoUrl		: "링크 URL을 입력하십시요.",
+DlnLnkMsgNoEMail	: "이메일주소를 입력하십시요.",
+DlnLnkMsgNoAnchor	: "책갈피명을 입력하십시요.",
+DlnLnkMsgInvPopName	: "팝업창의 타이틀은 공백을 허용하지 않습니다.",
+
+// Color Dialog
+DlgColorTitle		: "색상 선택",
+DlgColorBtnClear	: "지우기",
+DlgColorHighlight	: "현재",
+DlgColorSelected	: "선택됨",
+
+// Smiley Dialog
+DlgSmileyTitle		: "아이콘 삽입",
+
+// Special Character Dialog
+DlgSpecialCharTitle	: "특수문자 선택",
+
+// Table Dialog
+DlgTableTitle		: "표 설정",
+DlgTableRows		: "가로줄",
+DlgTableColumns		: "세로줄",
+DlgTableBorder		: "테두리 크기",
+DlgTableAlign		: "정렬",
+DlgTableAlignNotSet	: "<설정되지 않음>",
+DlgTableAlignLeft	: "왼쪽",
+DlgTableAlignCenter	: "가운데",
+DlgTableAlignRight	: "오른쪽",
+DlgTableWidth		: "너비",
+DlgTableWidthPx		: "픽셀",
+DlgTableWidthPc		: "퍼센트",
+DlgTableHeight		: "높이",
+DlgTableCellSpace	: "셀 간격",
+DlgTableCellPad		: "셀 여백",
+DlgTableCaption		: "캡션",
+DlgTableSummary		: "Summary",	//MISSING
+
+// Table Cell Dialog
+DlgCellTitle		: "셀 설정",
+DlgCellWidth		: "너비",
+DlgCellWidthPx		: "픽셀",
+DlgCellWidthPc		: "퍼센트",
+DlgCellHeight		: "높이",
+DlgCellWordWrap		: "워드랩",
+DlgCellWordWrapNotSet	: "<설정되지 않음>",
+DlgCellWordWrapYes	: "예",
+DlgCellWordWrapNo	: "아니오",
+DlgCellHorAlign		: "수평 정렬",
+DlgCellHorAlignNotSet	: "<설정되지 않음>",
+DlgCellHorAlignLeft	: "왼쪽",
+DlgCellHorAlignCenter	: "가운데",
+DlgCellHorAlignRight: "오른쪽",
+DlgCellVerAlign		: "수직 정렬",
+DlgCellVerAlignNotSet	: "<설정되지 않음>",
+DlgCellVerAlignTop	: "위",
+DlgCellVerAlignMiddle	: "중간",
+DlgCellVerAlignBottom	: "아래",
+DlgCellVerAlignBaseline	: "기준선",
+DlgCellRowSpan		: "세로 합치기",
+DlgCellCollSpan		: "가로 합치기",
+DlgCellBackColor	: "배경 색상",
+DlgCellBorderColor	: "테두리 색상",
+DlgCellBtnSelect	: "선택",
+
+// Find and Replace Dialog
+DlgFindAndReplaceTitle	: "찾기 & 바꾸기",
+
+// Find Dialog
+DlgFindTitle		: "찾기",
+DlgFindFindBtn		: "찾기",
+DlgFindNotFoundMsg	: "문자열을 찾을 수 없습니다.",
+
+// Replace Dialog
+DlgReplaceTitle			: "바꾸기",
+DlgReplaceFindLbl		: "찾을 문자열:",
+DlgReplaceReplaceLbl	: "바꿀 문자열:",
+DlgReplaceCaseChk		: "대소문자 구분",
+DlgReplaceReplaceBtn	: "바꾸기",
+DlgReplaceReplAllBtn	: "모두 바꾸기",
+DlgReplaceWordChk		: "온전한 단어",
+
+// Paste Operations / Dialog
+PasteErrorCut	: "브라우저의 보안설정때문에 잘라내기 기능을 실행할 수 없습니다. 키보드 명령을 사용하십시요. (Ctrl+X).",
+PasteErrorCopy	: "브라우저의 보안설정때문에 복사하기 기능을 실행할 수 없습니다. 키보드 명령을 사용하십시요.  (Ctrl+C).",
+
+PasteAsText		: "텍스트로 붙여넣기",
+PasteFromWord	: "MS Word 형식에서 붙여넣기",
+
+DlgPasteMsg2	: "키보드의 (<STRONG>Ctrl+V</STRONG>) 를 이용해서 상자안에 붙여넣고 <STRONG>OK</STRONG> 를 누르세요.",
+DlgPasteSec		: "브러우저 보안 설정으로 인해, 클립보드의 자료를 직접 접근할 수 없습니다. 이 창에 다시 붙여넣기 하십시오.",
+DlgPasteIgnoreFont		: "폰트 설정 무시",
+DlgPasteRemoveStyles	: "스타일 정의 제거",
+
+// Color Picker
+ColorAutomatic	: "기본색상",
+ColorMoreColors	: "색상선택...",
+
+// Document Properties
+DocProps		: "문서 속성",
+
+// Anchor Dialog
+DlgAnchorTitle		: "책갈피 속성",
+DlgAnchorName		: "책갈피 이름",
+DlgAnchorErrorName	: "책갈피 이름을 입력하십시요.",
+
+// Speller Pages Dialog
+DlgSpellNotInDic		: "사전에 없는 단어",
+DlgSpellChangeTo		: "변경할 단어",
+DlgSpellBtnIgnore		: "건너뜀",
+DlgSpellBtnIgnoreAll	: "모두 건너뜀",
+DlgSpellBtnReplace		: "변경",
+DlgSpellBtnReplaceAll	: "모두 변경",
+DlgSpellBtnUndo			: "취소",
+DlgSpellNoSuggestions	: "- 추천단어 없음 -",
+DlgSpellProgress		: "철자검사를 진행중입니다...",
+DlgSpellNoMispell		: "철자검사 완료: 잘못된 철자가 없습니다.",
+DlgSpellNoChanges		: "철자검사 완료: 변경된 단어가 없습니다.",
+DlgSpellOneChange		: "철자검사 완료: 단어가 변경되었습니다.",
+DlgSpellManyChanges		: "철자검사 완료: %1 단어가 변경되었습니다.",
+
+IeSpellDownload			: "철자 검사기가 철치되지 않았습니다. 지금 다운로드하시겠습니까?",
+
+// Button Dialog
+DlgButtonText		: "버튼글자(값)",
+DlgButtonType		: "버튼종류",
+DlgButtonTypeBtn	: "Button",	//MISSING
+DlgButtonTypeSbm	: "Submit",	//MISSING
+DlgButtonTypeRst	: "Reset",	//MISSING
+
+// Checkbox and Radio Button Dialogs
+DlgCheckboxName		: "이름",
+DlgCheckboxValue	: "값",
+DlgCheckboxSelected	: "선택됨",
+
+// Form Dialog
+DlgFormName		: "폼이름",
+DlgFormAction	: "실행경로(Action)",
+DlgFormMethod	: "방법(Method)",
+
+// Select Field Dialog
+DlgSelectName		: "이름",
+DlgSelectValue		: "값",
+DlgSelectSize		: "세로크기",
+DlgSelectLines		: "줄",
+DlgSelectChkMulti	: "여러항목 선택 허용",
+DlgSelectOpAvail	: "선택옵션",
+DlgSelectOpText		: "이름",
+DlgSelectOpValue	: "값",
+DlgSelectBtnAdd		: "추가",
+DlgSelectBtnModify	: "변경",
+DlgSelectBtnUp		: "위로",
+DlgSelectBtnDown	: "아래로",
+DlgSelectBtnSetValue : "선택된것으로 설정",
+DlgSelectBtnDelete	: "삭제",
+
+// Textarea Dialog
+DlgTextareaName	: "이름",
+DlgTextareaCols	: "칸수",
+DlgTextareaRows	: "줄수",
+
+// Text Field Dialog
+DlgTextName			: "이름",
+DlgTextValue		: "값",
+DlgTextCharWidth	: "글자 너비",
+DlgTextMaxChars		: "최대 글자수",
+DlgTextType			: "종류",
+DlgTextTypeText		: "문자열",
+DlgTextTypePass		: "비밀번호",
+
+// Hidden Field Dialog
+DlgHiddenName	: "이름",
+DlgHiddenValue	: "값",
+
+// Bulleted List Dialog
+BulletedListProp	: "순서없는 목록 속성",
+NumberedListProp	: "순서있는 목록 속성",
+DlgLstStart			: "Start",	//MISSING
+DlgLstType			: "종류",
+DlgLstTypeCircle	: "원(Circle)",
+DlgLstTypeDisc		: "Disc",	//MISSING
+DlgLstTypeSquare	: "네모점(Square)",
+DlgLstTypeNumbers	: "번호 (1, 2, 3)",
+DlgLstTypeLCase		: "소문자 (a, b, c)",
+DlgLstTypeUCase		: "대문자 (A, B, C)",
+DlgLstTypeSRoman	: "로마자 수문자 (i, ii, iii)",
+DlgLstTypeLRoman	: "로마자 대문자 (I, II, III)",
+
+// Document Properties Dialog
+DlgDocGeneralTab	: "일반",
+DlgDocBackTab		: "배경",
+DlgDocColorsTab		: "색상 및 여백",
+DlgDocMetaTab		: "메타데이터",
+
+DlgDocPageTitle		: "페이지명",
+DlgDocLangDir		: "문자 쓰기방향",
+DlgDocLangDirLTR	: "왼쪽에서 오른쪽 (LTR)",
+DlgDocLangDirRTL	: "오른쪽에서 왼쪽 (RTL)",
+DlgDocLangCode		: "언어코드",
+DlgDocCharSet		: "캐릭터셋 인코딩",
+DlgDocCharSetCE		: "Central European",	//MISSING
+DlgDocCharSetCT		: "Chinese Traditional (Big5)",	//MISSING
+DlgDocCharSetCR		: "Cyrillic",	//MISSING
+DlgDocCharSetGR		: "Greek",	//MISSING
+DlgDocCharSetJP		: "Japanese",	//MISSING
+DlgDocCharSetKR		: "Korean",	//MISSING
+DlgDocCharSetTR		: "Turkish",	//MISSING
+DlgDocCharSetUN		: "Unicode (UTF-8)",	//MISSING
+DlgDocCharSetWE		: "Western European",	//MISSING
+DlgDocCharSetOther	: "다른 캐릭터셋 인코딩",
+
+DlgDocDocType		: "문서 헤드",
+DlgDocDocTypeOther	: "다른 문서헤드",
+DlgDocIncXHTML		: "XHTML 문서정의 포함",
+DlgDocBgColor		: "배경색상",
+DlgDocBgImage		: "배경이미지 URL",
+DlgDocBgNoScroll	: "스크롤되지않는 배경",
+DlgDocCText			: "텍스트",
+DlgDocCLink			: "링크",
+DlgDocCVisited		: "방문한 링크(Visited)",
+DlgDocCActive		: "활성화된 링크(Active)",
+DlgDocMargins		: "페이지 여백",
+DlgDocMaTop			: "위",
+DlgDocMaLeft		: "왼쪽",
+DlgDocMaRight		: "오른쪽",
+DlgDocMaBottom		: "아래",
+DlgDocMeIndex		: "문서 키워드 (콤마로 구분)",
+DlgDocMeDescr		: "문서 설명",
+DlgDocMeAuthor		: "작성자",
+DlgDocMeCopy		: "저작권",
+DlgDocPreview		: "미리보기",
+
+// Templates Dialog
+Templates			: "템플릿",
+DlgTemplatesTitle	: "내용 템플릿",
+DlgTemplatesSelMsg	: "에디터에서 사용할 템플릿을 선택하십시요.<br>(지금까지 작성된 내용은 사라집니다.):",
+DlgTemplatesLoading	: "템플릿 목록을 불러오는중입니다. 잠시만 기다려주십시요.",
+DlgTemplatesNoTpl	: "(템플릿이 없습니다.)",
+DlgTemplatesReplace	: "현재 내용 바꾸기",
+
+// About Dialog
+DlgAboutAboutTab	: "About",
+DlgAboutBrowserInfoTab	: "브라우저 정보",
+DlgAboutLicenseTab	: "License",	//MISSING
+DlgAboutVersion		: "버전",
+DlgAboutInfo		: "더 많은 정보를 보시려면 다음 사이트로 가십시오."
+};


Property changes on: announcement/trunk/src/main/webapp/fckeditor/editor/lang/ko.js
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/webapp/fckeditor/editor/lang/lt.js
===================================================================
--- announcement/trunk/src/main/webapp/fckeditor/editor/lang/lt.js	                        (rev 0)
+++ announcement/trunk/src/main/webapp/fckeditor/editor/lang/lt.js	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,515 @@
+/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2008 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * Lithuanian language file.
+ */
+
+var FCKLang =
+{
+// Language direction : "ltr" (left to right) or "rtl" (right to left).
+Dir					: "ltr",
+
+ToolbarCollapse		: "Sutraukti mygtukų juostą",
+ToolbarExpand		: "Išplėsti mygtukų juostą",
+
+// Toolbar Items and Context Menu
+Save				: "Išsaugoti",
+NewPage				: "Naujas puslapis",
+Preview				: "Peržiūra",
+Cut					: "Iškirpti",
+Copy				: "Kopijuoti",
+Paste				: "Įdėti",
+PasteText			: "Įdėti kaip gryną tekstą",
+PasteWord			: "Įdėti iš Word",
+Print				: "Spausdinti",
+SelectAll			: "Pažymėti viską",
+RemoveFormat		: "Panaikinti formatą",
+InsertLinkLbl		: "Nuoroda",
+InsertLink			: "Įterpti/taisyti nuorodą",
+RemoveLink			: "Panaikinti nuorodą",
+Anchor				: "Įterpti/modifikuoti žymę",
+AnchorDelete		: "Remove Anchor",	//MISSING
+InsertImageLbl		: "Vaizdas",
+InsertImage			: "Įterpti/taisyti vaizdą",
+InsertFlashLbl		: "Flash",
+InsertFlash			: "Įterpti/taisyti Flash",
+InsertTableLbl		: "Lentelė",
+InsertTable			: "Įterpti/taisyti lentelę",
+InsertLineLbl		: "Linija",
+InsertLine			: "Įterpti horizontalią liniją",
+InsertSpecialCharLbl: "Spec. simbolis",
+InsertSpecialChar	: "Įterpti specialų simbolį",
+InsertSmileyLbl		: "Veideliai",
+InsertSmiley		: "Įterpti veidelį",
+About				: "Apie FCKeditor",
+Bold				: "Pusjuodis",
+Italic				: "Kursyvas",
+Underline			: "Pabrauktas",
+StrikeThrough		: "Perbrauktas",
+Subscript			: "Apatinis indeksas",
+Superscript			: "Viršutinis indeksas",
+LeftJustify			: "Lygiuoti kairę",
+CenterJustify		: "Centruoti",
+RightJustify		: "Lygiuoti dešinę",
+BlockJustify		: "Lygiuoti abi puses",
+DecreaseIndent		: "Sumažinti įtrauką",
+IncreaseIndent		: "Padidinti įtrauką",
+Blockquote			: "Blockquote",	//MISSING
+Undo				: "Atšaukti",
+Redo				: "Atstatyti",
+NumberedListLbl		: "Numeruotas sąrašas",
+NumberedList		: "Įterpti/Panaikinti numeruotą sąrašą",
+BulletedListLbl		: "Suženklintas sąrašas",
+BulletedList		: "Įterpti/Panaikinti suženklintą sąrašą",
+ShowTableBorders	: "Rodyti lentelės rėmus",
+ShowDetails			: "Rodyti detales",
+Style				: "Stilius",
+FontFormat			: "Šrifto formatas",
+Font				: "Šriftas",
+FontSize			: "Šrifto dydis",
+TextColor			: "Teksto spalva",
+BGColor				: "Fono spalva",
+Source				: "Šaltinis",
+Find				: "Rasti",
+Replace				: "Pakeisti",
+SpellCheck			: "Rašybos tikrinimas",
+UniversalKeyboard	: "Universali klaviatūra",
+PageBreakLbl		: "Puslapių skirtukas",
+PageBreak			: "Įterpti puslapių skirtuką",
+
+Form			: "Forma",
+Checkbox		: "Žymimasis langelis",
+RadioButton		: "Žymimoji akutė",
+TextField		: "Teksto laukas",
+Textarea		: "Teksto sritis",
+HiddenField		: "Nerodomas laukas",
+Button			: "Mygtukas",
+SelectionField	: "Atrankos laukas",
+ImageButton		: "Vaizdinis mygtukas",
+
+FitWindow		: "Maximize the editor size",	//MISSING
+ShowBlocks		: "Show Blocks",	//MISSING
+
+// Context Menu
+EditLink			: "Taisyti nuorodą",
+CellCM				: "Cell",	//MISSING
+RowCM				: "Row",	//MISSING
+ColumnCM			: "Column",	//MISSING
+InsertRowAfter		: "Insert Row After",	//MISSING
+InsertRowBefore		: "Insert Row Before",	//MISSING
+DeleteRows			: "Šalinti eilutes",
+InsertColumnAfter	: "Insert Column After",	//MISSING
+InsertColumnBefore	: "Insert Column Before",	//MISSING
+DeleteColumns		: "Šalinti stulpelius",
+InsertCellAfter		: "Insert Cell After",	//MISSING
+InsertCellBefore	: "Insert Cell Before",	//MISSING
+DeleteCells			: "Šalinti langelius",
+MergeCells			: "Sujungti langelius",
+MergeRight			: "Merge Right",	//MISSING
+MergeDown			: "Merge Down",	//MISSING
+HorizontalSplitCell	: "Split Cell Horizontally",	//MISSING
+VerticalSplitCell	: "Split Cell Vertically",	//MISSING
+TableDelete			: "Šalinti lentelę",
+CellProperties		: "Langelio savybės",
+TableProperties		: "Lentelės savybės",
+ImageProperties		: "Vaizdo savybės",
+FlashProperties		: "Flash savybės",
+
+AnchorProp			: "Žymės savybės",
+ButtonProp			: "Mygtuko savybės",
+CheckboxProp		: "Žymimojo langelio savybės",
+HiddenFieldProp		: "Nerodomo lauko savybės",
+RadioButtonProp		: "Žymimosios akutės savybės",
+ImageButtonProp		: "Vaizdinio mygtuko savybės",
+TextFieldProp		: "Teksto lauko savybės",
+SelectionFieldProp	: "Atrankos lauko savybės",
+TextareaProp		: "Teksto srities savybės",
+FormProp			: "Formos savybės",
+
+FontFormats			: "Normalus;Formuotas;Kreipinio;Antraštinis 1;Antraštinis 2;Antraštinis 3;Antraštinis 4;Antraštinis 5;Antraštinis 6",
+
+// Alerts and Messages
+ProcessingXHTML		: "Apdorojamas XHTML. Prašome palaukti...",
+Done				: "Baigta",
+PasteWordConfirm	: "Įdedamas tekstas yra panašus į kopiją iš Word. Ar Jūs norite prieš įdėjimą išvalyti jį?",
+NotCompatiblePaste	: "Ši komanda yra prieinama tik per Internet Explorer 5.5 ar aukštesnę versiją. Ar Jūs norite įterpti be valymo?",
+UnknownToolbarItem	: "Nežinomas mygtukų juosta elementas \"%1\"",
+UnknownCommand		: "Nežinomas komandos vardas \"%1\"",
+NotImplemented		: "Komanda nėra įgyvendinta",
+UnknownToolbarSet	: "Mygtukų juostos rinkinys \"%1\" neegzistuoja",
+NoActiveX			: "Jūsų naršyklės saugumo nuostatos gali riboti kai kurias redaktoriaus savybes. Jūs turite aktyvuoti opciją \"Run ActiveX controls and plug-ins\". Kitu atveju Jums bus pranešama apie klaidas ir trūkstamas savybes.",
+BrowseServerBlocked : "Neįmanoma atidaryti naujo naršyklės lango. Įsitikinkite, kad iškylančių langų blokavimo programos neveiksnios.",
+DialogBlocked		: "Neįmanoma atidaryti dialogo lango. Įsitikinkite, kad iškylančių langų blokavimo programos neveiksnios.",
+
+// Dialogs
+DlgBtnOK			: "OK",
+DlgBtnCancel		: "Nutraukti",
+DlgBtnClose			: "Uždaryti",
+DlgBtnBrowseServer	: "Naršyti po serverį",
+DlgAdvancedTag		: "Papildomas",
+DlgOpOther			: "<Kita>",
+DlgInfoTab			: "Informacija",
+DlgAlertUrl			: "Prašome įrašyti URL",
+
+// General Dialogs Labels
+DlgGenNotSet		: "<nėra nustatyta>",
+DlgGenId			: "Id",
+DlgGenLangDir		: "Teksto kryptis",
+DlgGenLangDirLtr	: "Iš kairės į dešinę (LTR)",
+DlgGenLangDirRtl	: "Iš dešinės į kairę (RTL)",
+DlgGenLangCode		: "Kalbos kodas",
+DlgGenAccessKey		: "Prieigos raktas",
+DlgGenName			: "Vardas",
+DlgGenTabIndex		: "Tabuliavimo indeksas",
+DlgGenLongDescr		: "Ilgas aprašymas URL",
+DlgGenClass			: "Stilių lentelės klasės",
+DlgGenTitle			: "Konsultacinė antraštė",
+DlgGenContType		: "Konsultacinio turinio tipas",
+DlgGenLinkCharset	: "Susietų išteklių simbolių lentelė",
+DlgGenStyle			: "Stilius",
+
+// Image Dialog
+DlgImgTitle			: "Vaizdo savybės",
+DlgImgInfoTab		: "Vaizdo informacija",
+DlgImgBtnUpload		: "Siųsti į serverį",
+DlgImgURL			: "URL",
+DlgImgUpload		: "Nusiųsti",
+DlgImgAlt			: "Alternatyvus Tekstas",
+DlgImgWidth			: "Plotis",
+DlgImgHeight		: "Aukštis",
+DlgImgLockRatio		: "Išlaikyti proporciją",
+DlgBtnResetSize		: "Atstatyti dydį",
+DlgImgBorder		: "Rėmelis",
+DlgImgHSpace		: "Hor.Erdvė",
+DlgImgVSpace		: "Vert.Erdvė",
+DlgImgAlign			: "Lygiuoti",
+DlgImgAlignLeft		: "Kairę",
+DlgImgAlignAbsBottom: "Absoliučią apačią",
+DlgImgAlignAbsMiddle: "Absoliutų vidurį",
+DlgImgAlignBaseline	: "Apatinę liniją",
+DlgImgAlignBottom	: "Apačią",
+DlgImgAlignMiddle	: "Vidurį",
+DlgImgAlignRight	: "Dešinę",
+DlgImgAlignTextTop	: "Teksto viršūnę",
+DlgImgAlignTop		: "Viršūnę",
+DlgImgPreview		: "Peržiūra",
+DlgImgAlertUrl		: "Prašome įvesti vaizdo URL",
+DlgImgLinkTab		: "Nuoroda",
+
+// Flash Dialog
+DlgFlashTitle		: "Flash savybės",
+DlgFlashChkPlay		: "Automatinis paleidimas",
+DlgFlashChkLoop		: "Ciklas",
+DlgFlashChkMenu		: "Leisti Flash meniu",
+DlgFlashScale		: "Mastelis",
+DlgFlashScaleAll	: "Rodyti visą",
+DlgFlashScaleNoBorder	: "Be rėmelio",
+DlgFlashScaleFit	: "Tikslus atitikimas",
+
+// Link Dialog
+DlgLnkWindowTitle	: "Nuoroda",
+DlgLnkInfoTab		: "Nuorodos informacija",
+DlgLnkTargetTab		: "Paskirtis",
+
+DlgLnkType			: "Nuorodos tipas",
+DlgLnkTypeURL		: "URL",
+DlgLnkTypeAnchor	: "Žymė šiame puslapyje",
+DlgLnkTypeEMail		: "El.paštas",
+DlgLnkProto			: "Protokolas",
+DlgLnkProtoOther	: "<kitas>",
+DlgLnkURL			: "URL",
+DlgLnkAnchorSel		: "Pasirinkite žymę",
+DlgLnkAnchorByName	: "Pagal žymės vardą",
+DlgLnkAnchorById	: "Pagal žymės Id",
+DlgLnkNoAnchors		: "(Šiame dokumente žymių nėra)",
+DlgLnkEMail			: "El.pašto adresas",
+DlgLnkEMailSubject	: "Žinutės tema",
+DlgLnkEMailBody		: "Žinutės turinys",
+DlgLnkUpload		: "Siųsti",
+DlgLnkBtnUpload		: "Siųsti į serverį",
+
+DlgLnkTarget		: "Paskirties vieta",
+DlgLnkTargetFrame	: "<kadras>",
+DlgLnkTargetPopup	: "<išskleidžiamas langas>",
+DlgLnkTargetBlank	: "Naujas langas (_blank)",
+DlgLnkTargetParent	: "Pirminis langas (_parent)",
+DlgLnkTargetSelf	: "Tas pats langas (_self)",
+DlgLnkTargetTop		: "Svarbiausias langas (_top)",
+DlgLnkTargetFrameName	: "Paskirties kadro vardas",
+DlgLnkPopWinName	: "Paskirties lango vardas",
+DlgLnkPopWinFeat	: "Išskleidžiamo lango savybės",
+DlgLnkPopResize		: "Keičiamas dydis",
+DlgLnkPopLocation	: "Adreso juosta",
+DlgLnkPopMenu		: "Meniu juosta",
+DlgLnkPopScroll		: "Slinkties juostos",
+DlgLnkPopStatus		: "Būsenos juosta",
+DlgLnkPopToolbar	: "Mygtukų juosta",
+DlgLnkPopFullScrn	: "Visas ekranas (IE)",
+DlgLnkPopDependent	: "Priklausomas (Netscape)",
+DlgLnkPopWidth		: "Plotis",
+DlgLnkPopHeight		: "Aukštis",
+DlgLnkPopLeft		: "Kairė pozicija",
+DlgLnkPopTop		: "Viršutinė pozicija",
+
+DlnLnkMsgNoUrl		: "Prašome įvesti nuorodos URL",
+DlnLnkMsgNoEMail	: "Prašome įvesti el.pašto adresą",
+DlnLnkMsgNoAnchor	: "Prašome pasirinkti žymę",
+DlnLnkMsgInvPopName	: "The popup name must begin with an alphabetic character and must not contain spaces",	//MISSING
+
+// Color Dialog
+DlgColorTitle		: "Pasirinkite spalvą",
+DlgColorBtnClear	: "Trinti",
+DlgColorHighlight	: "Paryškinta",
+DlgColorSelected	: "Pažymėta",
+
+// Smiley Dialog
+DlgSmileyTitle		: "Įterpti veidelį",
+
+// Special Character Dialog
+DlgSpecialCharTitle	: "Pasirinkite specialų simbolį",
+
+// Table Dialog
+DlgTableTitle		: "Lentelės savybės",
+DlgTableRows		: "Eilutės",
+DlgTableColumns		: "Stulpeliai",
+DlgTableBorder		: "Rėmelio dydis",
+DlgTableAlign		: "Lygiuoti",
+DlgTableAlignNotSet	: "<Nenustatyta>",
+DlgTableAlignLeft	: "Kairę",
+DlgTableAlignCenter	: "Centrą",
+DlgTableAlignRight	: "Dešinę",
+DlgTableWidth		: "Plotis",
+DlgTableWidthPx		: "taškais",
+DlgTableWidthPc		: "procentais",
+DlgTableHeight		: "Aukštis",
+DlgTableCellSpace	: "Tarpas tarp langelių",
+DlgTableCellPad		: "Trapas nuo langelio rėmo iki teksto",
+DlgTableCaption		: "Antraštė",
+DlgTableSummary		: "Santrauka",
+
+// Table Cell Dialog
+DlgCellTitle		: "Langelio savybės",
+DlgCellWidth		: "Plotis",
+DlgCellWidthPx		: "taškais",
+DlgCellWidthPc		: "procentais",
+DlgCellHeight		: "Aukštis",
+DlgCellWordWrap		: "Teksto laužymas",
+DlgCellWordWrapNotSet	: "<Nenustatyta>",
+DlgCellWordWrapYes	: "Taip",
+DlgCellWordWrapNo	: "Ne",
+DlgCellHorAlign		: "Horizontaliai lygiuoti",
+DlgCellHorAlignNotSet	: "<Nenustatyta>",
+DlgCellHorAlignLeft	: "Kairę",
+DlgCellHorAlignCenter	: "Centrą",
+DlgCellHorAlignRight: "Dešinę",
+DlgCellVerAlign		: "Vertikaliai lygiuoti",
+DlgCellVerAlignNotSet	: "<Nenustatyta>",
+DlgCellVerAlignTop	: "Viršų",
+DlgCellVerAlignMiddle	: "Vidurį",
+DlgCellVerAlignBottom	: "Apačią",
+DlgCellVerAlignBaseline	: "Apatinę liniją",
+DlgCellRowSpan		: "Eilučių apjungimas",
+DlgCellCollSpan		: "Stulpelių apjungimas",
+DlgCellBackColor	: "Fono spalva",
+DlgCellBorderColor	: "Rėmelio spalva",
+DlgCellBtnSelect	: "Pažymėti...",
+
+// Find and Replace Dialog
+DlgFindAndReplaceTitle	: "Find and Replace",	//MISSING
+
+// Find Dialog
+DlgFindTitle		: "Paieška",
+DlgFindFindBtn		: "Surasti",
+DlgFindNotFoundMsg	: "Nurodytas tekstas nerastas.",
+
+// Replace Dialog
+DlgReplaceTitle			: "Pakeisti",
+DlgReplaceFindLbl		: "Surasti tekstą:",
+DlgReplaceReplaceLbl	: "Pakeisti tekstu:",
+DlgReplaceCaseChk		: "Skirti didžiąsias ir mažąsias raides",
+DlgReplaceReplaceBtn	: "Pakeisti",
+DlgReplaceReplAllBtn	: "Pakeisti viską",
+DlgReplaceWordChk		: "Atitikti pilną žodį",
+
+// Paste Operations / Dialog
+PasteErrorCut	: "Jūsų naršyklės saugumo nustatymai neleidžia redaktoriui automatiškai įvykdyti iškirpimo operacijų. Tam prašome naudoti klaviatūrą (Ctrl+X).",
+PasteErrorCopy	: "Jūsų naršyklės saugumo nustatymai neleidžia redaktoriui automatiškai įvykdyti kopijavimo operacijų. Tam prašome naudoti klaviatūrą (Ctrl+C).",
+
+PasteAsText		: "Įdėti kaip gryną tekstą",
+PasteFromWord	: "Įdėti iš Word",
+
+DlgPasteMsg2	: "Žemiau esančiame įvedimo lauke įdėkite tekstą, naudodami klaviatūrą (<STRONG>Ctrl+V</STRONG>) ir spūstelkite mygtuką <STRONG>OK</STRONG>.",
+DlgPasteSec		: "Because of your browser security settings, the editor is not able to access your clipboard data directly. You are required to paste it again in this window.",	//MISSING
+DlgPasteIgnoreFont		: "Ignoruoti šriftų nustatymus",
+DlgPasteRemoveStyles	: "Pašalinti stilių nustatymus",
+
+// Color Picker
+ColorAutomatic	: "Automatinis",
+ColorMoreColors	: "Daugiau spalvų...",
+
+// Document Properties
+DocProps		: "Dokumento savybės",
+
+// Anchor Dialog
+DlgAnchorTitle		: "Žymės savybės",
+DlgAnchorName		: "Žymės vardas",
+DlgAnchorErrorName	: "Prašome įvesti žymės vardą",
+
+// Speller Pages Dialog
+DlgSpellNotInDic		: "Žodyne nerastas",
+DlgSpellChangeTo		: "Pakeisti į",
+DlgSpellBtnIgnore		: "Ignoruoti",
+DlgSpellBtnIgnoreAll	: "Ignoruoti visus",
+DlgSpellBtnReplace		: "Pakeisti",
+DlgSpellBtnReplaceAll	: "Pakeisti visus",
+DlgSpellBtnUndo			: "Atšaukti",
+DlgSpellNoSuggestions	: "- Nėra pasiūlymų -",
+DlgSpellProgress		: "Vyksta rašybos tikrinimas...",
+DlgSpellNoMispell		: "Rašybos tikrinimas baigtas: Nerasta rašybos klaidų",
+DlgSpellNoChanges		: "Rašybos tikrinimas baigtas: Nėra pakeistų žodžių",
+DlgSpellOneChange		: "Rašybos tikrinimas baigtas: Vienas žodis pakeistas",
+DlgSpellManyChanges		: "Rašybos tikrinimas baigtas: Pakeista %1 žodžių",
+
+IeSpellDownload			: "Rašybos tikrinimas neinstaliuotas. Ar Jūs norite jį dabar atsisiųsti?",
+
+// Button Dialog
+DlgButtonText		: "Tekstas (Reikšmė)",
+DlgButtonType		: "Tipas",
+DlgButtonTypeBtn	: "Button",	//MISSING
+DlgButtonTypeSbm	: "Submit",	//MISSING
+DlgButtonTypeRst	: "Reset",	//MISSING
+
+// Checkbox and Radio Button Dialogs
+DlgCheckboxName		: "Vardas",
+DlgCheckboxValue	: "Reikšmė",
+DlgCheckboxSelected	: "Pažymėtas",
+
+// Form Dialog
+DlgFormName		: "Vardas",
+DlgFormAction	: "Veiksmas",
+DlgFormMethod	: "Metodas",
+
+// Select Field Dialog
+DlgSelectName		: "Vardas",
+DlgSelectValue		: "Reikšmė",
+DlgSelectSize		: "Dydis",
+DlgSelectLines		: "eilučių",
+DlgSelectChkMulti	: "Leisti daugeriopą atranką",
+DlgSelectOpAvail	: "Galimos parinktys",
+DlgSelectOpText		: "Tekstas",
+DlgSelectOpValue	: "Reikšmė",
+DlgSelectBtnAdd		: "Įtraukti",
+DlgSelectBtnModify	: "Modifikuoti",
+DlgSelectBtnUp		: "Aukštyn",
+DlgSelectBtnDown	: "Žemyn",
+DlgSelectBtnSetValue : "Laikyti pažymėta reikšme",
+DlgSelectBtnDelete	: "Trinti",
+
+// Textarea Dialog
+DlgTextareaName	: "Vardas",
+DlgTextareaCols	: "Ilgis",
+DlgTextareaRows	: "Plotis",
+
+// Text Field Dialog
+DlgTextName			: "Vardas",
+DlgTextValue		: "Reikšmė",
+DlgTextCharWidth	: "Ilgis simboliais",
+DlgTextMaxChars		: "Maksimalus simbolių skaičius",
+DlgTextType			: "Tipas",
+DlgTextTypeText		: "Tekstas",
+DlgTextTypePass		: "Slaptažodis",
+
+// Hidden Field Dialog
+DlgHiddenName	: "Vardas",
+DlgHiddenValue	: "Reikšmė",
+
+// Bulleted List Dialog
+BulletedListProp	: "Suženklinto sąrašo savybės",
+NumberedListProp	: "Numeruoto sąrašo savybės",
+DlgLstStart			: "Start",	//MISSING
+DlgLstType			: "Tipas",
+DlgLstTypeCircle	: "Apskritimas",
+DlgLstTypeDisc		: "Diskas",
+DlgLstTypeSquare	: "Kvadratas",
+DlgLstTypeNumbers	: "Skaičiai (1, 2, 3)",
+DlgLstTypeLCase		: "Mažosios raidės (a, b, c)",
+DlgLstTypeUCase		: "Didžiosios raidės (A, B, C)",
+DlgLstTypeSRoman	: "Romėnų mažieji skaičiai (i, ii, iii)",
+DlgLstTypeLRoman	: "Romėnų didieji skaičiai (I, II, III)",
+
+// Document Properties Dialog
+DlgDocGeneralTab	: "Bendros savybės",
+DlgDocBackTab		: "Fonas",
+DlgDocColorsTab		: "Spalvos ir kraštinės",
+DlgDocMetaTab		: "Meta duomenys",
+
+DlgDocPageTitle		: "Puslapio antraštė",
+DlgDocLangDir		: "Kalbos kryptis",
+DlgDocLangDirLTR	: "Iš kairės į dešinę (LTR)",
+DlgDocLangDirRTL	: "Iš dešinės į kairę (RTL)",
+DlgDocLangCode		: "Kalbos kodas",
+DlgDocCharSet		: "Simbolių kodavimo lentelė",
+DlgDocCharSetCE		: "Central European",	//MISSING
+DlgDocCharSetCT		: "Chinese Traditional (Big5)",	//MISSING
+DlgDocCharSetCR		: "Cyrillic",	//MISSING
+DlgDocCharSetGR		: "Greek",	//MISSING
+DlgDocCharSetJP		: "Japanese",	//MISSING
+DlgDocCharSetKR		: "Korean",	//MISSING
+DlgDocCharSetTR		: "Turkish",	//MISSING
+DlgDocCharSetUN		: "Unicode (UTF-8)",	//MISSING
+DlgDocCharSetWE		: "Western European",	//MISSING
+DlgDocCharSetOther	: "Kita simbolių kodavimo lentelė",
+
+DlgDocDocType		: "Dokumento tipo antraštė",
+DlgDocDocTypeOther	: "Kita dokumento tipo antraštė",
+DlgDocIncXHTML		: "Įtraukti XHTML deklaracijas",
+DlgDocBgColor		: "Fono spalva",
+DlgDocBgImage		: "Fono paveikslėlio nuoroda (URL)",
+DlgDocBgNoScroll	: "Neslenkantis fonas",
+DlgDocCText			: "Tekstas",
+DlgDocCLink			: "Nuoroda",
+DlgDocCVisited		: "Aplankyta nuoroda",
+DlgDocCActive		: "Aktyvi nuoroda",
+DlgDocMargins		: "Puslapio kraštinės",
+DlgDocMaTop			: "Viršuje",
+DlgDocMaLeft		: "Kairėje",
+DlgDocMaRight		: "Dešinėje",
+DlgDocMaBottom		: "Apačioje",
+DlgDocMeIndex		: "Dokumento indeksavimo raktiniai žodžiai (atskirti kableliais)",
+DlgDocMeDescr		: "Dokumento apibūdinimas",
+DlgDocMeAuthor		: "Autorius",
+DlgDocMeCopy		: "Autorinės teisės",
+DlgDocPreview		: "Peržiūra",
+
+// Templates Dialog
+Templates			: "Šablonai",
+DlgTemplatesTitle	: "Turinio šablonai",
+DlgTemplatesSelMsg	: "Pasirinkite norimą šabloną<br>(<b>Dėmesio!</b> esamas turinys bus prarastas):",
+DlgTemplatesLoading	: "Įkeliamas šablonų sąrašas. Prašome palaukti...",
+DlgTemplatesNoTpl	: "(Šablonų sąrašas tuščias)",
+DlgTemplatesReplace	: "Replace actual contents",	//MISSING
+
+// About Dialog
+DlgAboutAboutTab	: "Apie",
+DlgAboutBrowserInfoTab	: "Naršyklės informacija",
+DlgAboutLicenseTab	: "License",	//MISSING
+DlgAboutVersion		: "versija",
+DlgAboutInfo		: "Papildomą informaciją galima gauti"
+};


Property changes on: announcement/trunk/src/main/webapp/fckeditor/editor/lang/lt.js
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/webapp/fckeditor/editor/lang/lv.js
===================================================================
--- announcement/trunk/src/main/webapp/fckeditor/editor/lang/lv.js	                        (rev 0)
+++ announcement/trunk/src/main/webapp/fckeditor/editor/lang/lv.js	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,515 @@
+/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2008 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * Latvian language file.
+ */
+
+var FCKLang =
+{
+// Language direction : "ltr" (left to right) or "rtl" (right to left).
+Dir					: "ltr",
+
+ToolbarCollapse		: "Samazināt rīku joslu",
+ToolbarExpand		: "Paplašināt rīku joslu",
+
+// Toolbar Items and Context Menu
+Save				: "Saglabāt",
+NewPage				: "Jauna lapa",
+Preview				: "Pārskatīt",
+Cut					: "Izgriezt",
+Copy				: "Kopēt",
+Paste				: "Ievietot",
+PasteText			: "Ievietot kā vienkāršu tekstu",
+PasteWord			: "Ievietot no Worda",
+Print				: "Drukāt",
+SelectAll			: "Iezīmēt visu",
+RemoveFormat		: "Noņemt stilus",
+InsertLinkLbl		: "Hipersaite",
+InsertLink			: "Ievietot/Labot hipersaiti",
+RemoveLink			: "Noņemt hipersaiti",
+Anchor				: "Ievietot/Labot iezīmi",
+AnchorDelete		: "Remove Anchor",	//MISSING
+InsertImageLbl		: "Attēls",
+InsertImage			: "Ievietot/Labot Attēlu",
+InsertFlashLbl		: "Flash",
+InsertFlash			: "Ievietot/Labot Flash",
+InsertTableLbl		: "Tabula",
+InsertTable			: "Ievietot/Labot Tabulu",
+InsertLineLbl		: "Atdalītājsvītra",
+InsertLine			: "Ievietot horizontālu Atdalītājsvītru",
+InsertSpecialCharLbl: "Īpašs simbols",
+InsertSpecialChar	: "Ievietot speciālo simbolu",
+InsertSmileyLbl		: "Smaidiņi",
+InsertSmiley		: "Ievietot smaidiņu",
+About				: "Īsumā par FCKeditor",
+Bold				: "Treknu šriftu",
+Italic				: "Slīprakstā",
+Underline			: "Apakšsvītra",
+StrikeThrough		: "Pārsvītrots",
+Subscript			: "Zemrakstā",
+Superscript			: "Augšrakstā",
+LeftJustify			: "Izlīdzināt pa kreisi",
+CenterJustify		: "Izlīdzināt pret centru",
+RightJustify		: "Izlīdzināt pa labi",
+BlockJustify		: "Izlīdzināt malas",
+DecreaseIndent		: "Samazināt atkāpi",
+IncreaseIndent		: "Palielināt atkāpi",
+Blockquote			: "Blockquote",	//MISSING
+Undo				: "Atcelt",
+Redo				: "Atkārtot",
+NumberedListLbl		: "Numurēts saraksts",
+NumberedList		: "Ievietot/Noņemt numerēto sarakstu",
+BulletedListLbl		: "Izcelts saraksts",
+BulletedList		: "Ievietot/Noņemt izceltu sarakstu",
+ShowTableBorders	: "Parādīt tabulas robežas",
+ShowDetails			: "Parādīt sīkāku informāciju",
+Style				: "Stils",
+FontFormat			: "Formāts",
+Font				: "Šrifts",
+FontSize			: "Izmērs",
+TextColor			: "Teksta krāsa",
+BGColor				: "Fona krāsa",
+Source				: "HTML kods",
+Find				: "Meklēt",
+Replace				: "Nomainīt",
+SpellCheck			: "Pareizrakstības pārbaude",
+UniversalKeyboard	: "Universāla klaviatūra",
+PageBreakLbl		: "Lapas pārtraukums",
+PageBreak			: "Ievietot lapas pārtraukumu",
+
+Form			: "Forma",
+Checkbox		: "Atzīmēšanas kastīte",
+RadioButton		: "Izvēles poga",
+TextField		: "Teksta rinda",
+Textarea		: "Teksta laukums",
+HiddenField		: "Paslēpta teksta rinda",
+Button			: "Poga",
+SelectionField	: "Iezīmēšanas lauks",
+ImageButton		: "Attēlpoga",
+
+FitWindow		: "Maksimizēt redaktora izmēru",
+ShowBlocks		: "Show Blocks",	//MISSING
+
+// Context Menu
+EditLink			: "Labot hipersaiti",
+CellCM				: "Šūna",
+RowCM				: "Rinda",
+ColumnCM			: "Kolonna",
+InsertRowAfter		: "Insert Row After",	//MISSING
+InsertRowBefore		: "Insert Row Before",	//MISSING
+DeleteRows			: "Dzēst rindas",
+InsertColumnAfter	: "Insert Column After",	//MISSING
+InsertColumnBefore	: "Insert Column Before",	//MISSING
+DeleteColumns		: "Dzēst kolonnas",
+InsertCellAfter		: "Insert Cell After",	//MISSING
+InsertCellBefore	: "Insert Cell Before",	//MISSING
+DeleteCells			: "Dzēst rūtiņas",
+MergeCells			: "Apvienot rūtiņas",
+MergeRight			: "Merge Right",	//MISSING
+MergeDown			: "Merge Down",	//MISSING
+HorizontalSplitCell	: "Split Cell Horizontally",	//MISSING
+VerticalSplitCell	: "Split Cell Vertically",	//MISSING
+TableDelete			: "Dzēst tabulu",
+CellProperties		: "Rūtiņas īpašības",
+TableProperties		: "Tabulas īpašības",
+ImageProperties		: "Attēla īpašības",
+FlashProperties		: "Flash īpašības",
+
+AnchorProp			: "Iezīmes īpašības",
+ButtonProp			: "Pogas īpašības",
+CheckboxProp		: "Atzīmēšanas kastītes īpašības",
+HiddenFieldProp		: "Paslēptās teksta rindas īpašības",
+RadioButtonProp		: "Izvēles poga īpašības",
+ImageButtonProp		: "Attēlpogas īpašības",
+TextFieldProp		: "Teksta rindas  īpašības",
+SelectionFieldProp	: "Iezīmēšanas lauka īpašības",
+TextareaProp		: "Teksta laukuma īpašības",
+FormProp			: "Formas īpašības",
+
+FontFormats			: "Normāls teksts;Formatēts teksts;Adrese;Virsraksts 1;Virsraksts 2;Virsraksts 3;Virsraksts 4;Virsraksts 5;Virsraksts 6;Rindkopa (DIV)",
+
+// Alerts and Messages
+ProcessingXHTML		: "Tiek apstrādāts XHTML. Lūdzu uzgaidiet...",
+Done				: "Darīts",
+PasteWordConfirm	: "Teksta fragments, kas tiek ievietots, izskatās, ka būtu sagatavots Word'ā. Vai vēlaties to apstrādāt pirms ievietošanas?",
+NotCompatiblePaste	: "Šī darbība ir pieejama Internet Explorer'ī, kas jaunāks par 5.5 versiju. Vai vēlaties ievietot bez apstrādes?",
+UnknownToolbarItem	: "Nezināms rīku joslas objekts \"%1\"",
+UnknownCommand		: "Nezināmas darbības nosaukums \"%1\"",
+NotImplemented		: "Darbība netika paveikta",
+UnknownToolbarSet	: "Rīku joslas komplekts \"%1\" neeksistē",
+NoActiveX			: "Interneta pārlūkprogrammas drošības uzstādījumi varētu ietekmēt dažas no redaktora īpašībām. Jābūt aktivizētai sadaļai \"Run ActiveX controls and plug-ins\". Savādāk ir iespējamas kļūdas darbībā un kļūdu paziņojumu parādīšanās.",
+BrowseServerBlocked : "Resursu pārlūks nevar tikt atvērts. Pārliecinieties, ka uznirstošo logu bloķētāji ir atslēgti.",
+DialogBlocked		: "Nav iespējams atvērt dialoglogu. Pārliecinieties, ka uznirstošo logu bloķētāji ir atslēgti.",
+
+// Dialogs
+DlgBtnOK			: "Darīts!",
+DlgBtnCancel		: "Atcelt",
+DlgBtnClose			: "Aizvērt",
+DlgBtnBrowseServer	: "Skatīt servera saturu",
+DlgAdvancedTag		: "Izvērstais",
+DlgOpOther			: "<Cits>",
+DlgInfoTab			: "Informācija",
+DlgAlertUrl			: "Lūdzu, ievietojiet hipersaiti",
+
+// General Dialogs Labels
+DlgGenNotSet		: "<nav iestatīts>",
+DlgGenId			: "Id",
+DlgGenLangDir		: "Valodas lasīšanas virziens",
+DlgGenLangDirLtr	: "No kreisās uz labo (LTR)",
+DlgGenLangDirRtl	: "No labās uz kreiso (RTL)",
+DlgGenLangCode		: "Valodas kods",
+DlgGenAccessKey		: "Pieejas kods",
+DlgGenName			: "Nosaukums",
+DlgGenTabIndex		: "Ciļņu indekss",
+DlgGenLongDescr		: "Gara apraksta Hipersaite",
+DlgGenClass			: "Stilu saraksta klases",
+DlgGenTitle			: "Konsultatīvs virsraksts",
+DlgGenContType		: "Konsultatīvs satura tips",
+DlgGenLinkCharset	: "Pievienotā resursa kodu tabula",
+DlgGenStyle			: "Stils",
+
+// Image Dialog
+DlgImgTitle			: "Attēla īpašības",
+DlgImgInfoTab		: "Informācija par attēlu",
+DlgImgBtnUpload		: "Nosūtīt serverim",
+DlgImgURL			: "URL",
+DlgImgUpload		: "Augšupielādēt",
+DlgImgAlt			: "Alternatīvais teksts",
+DlgImgWidth			: "Platums",
+DlgImgHeight		: "Augstums",
+DlgImgLockRatio		: "Nemainīga Augstuma/Platuma attiecība",
+DlgBtnResetSize		: "Atjaunot sākotnējo izmēru",
+DlgImgBorder		: "Rāmis",
+DlgImgHSpace		: "Horizontālā telpa",
+DlgImgVSpace		: "Vertikālā telpa",
+DlgImgAlign			: "Nolīdzināt",
+DlgImgAlignLeft		: "Pa kreisi",
+DlgImgAlignAbsBottom: "Absolūti apakšā",
+DlgImgAlignAbsMiddle: "Absolūti vertikāli centrēts",
+DlgImgAlignBaseline	: "Pamatrindā",
+DlgImgAlignBottom	: "Apakšā",
+DlgImgAlignMiddle	: "Vertikāli centrēts",
+DlgImgAlignRight	: "Pa labi",
+DlgImgAlignTextTop	: "Teksta augšā",
+DlgImgAlignTop		: "Augšā",
+DlgImgPreview		: "Pārskats",
+DlgImgAlertUrl		: "Lūdzu norādīt attēla hipersaiti",
+DlgImgLinkTab		: "Hipersaite",
+
+// Flash Dialog
+DlgFlashTitle		: "Flash īpašības",
+DlgFlashChkPlay		: "Automātiska atskaņošana",
+DlgFlashChkLoop		: "Nepārtraukti",
+DlgFlashChkMenu		: "Atļaut Flash izvēlni",
+DlgFlashScale		: "Mainīt izmēru",
+DlgFlashScaleAll	: "Rādīt visu",
+DlgFlashScaleNoBorder	: "Bez rāmja",
+DlgFlashScaleFit	: "Precīzs izmērs",
+
+// Link Dialog
+DlgLnkWindowTitle	: "Hipersaite",
+DlgLnkInfoTab		: "Hipersaites informācija",
+DlgLnkTargetTab		: "Mērķis",
+
+DlgLnkType			: "Hipersaites tips",
+DlgLnkTypeURL		: "URL",
+DlgLnkTypeAnchor	: "Iezīme šajā lapā",
+DlgLnkTypeEMail		: "E-pasts",
+DlgLnkProto			: "Protokols",
+DlgLnkProtoOther	: "<cits>",
+DlgLnkURL			: "URL",
+DlgLnkAnchorSel		: "Izvēlēties iezīmi",
+DlgLnkAnchorByName	: "Pēc iezīmes nosaukuma",
+DlgLnkAnchorById	: "Pēc elementa ID",
+DlgLnkNoAnchors		: "(Šajā dokumentā nav iezīmju)",
+DlgLnkEMail			: "E-pasta adrese",
+DlgLnkEMailSubject	: "Ziņas tēma",
+DlgLnkEMailBody		: "Ziņas saturs",
+DlgLnkUpload		: "Augšupielādēt",
+DlgLnkBtnUpload		: "Nosūtīt serverim",
+
+DlgLnkTarget		: "Mērķis",
+DlgLnkTargetFrame	: "<ietvars>",
+DlgLnkTargetPopup	: "<uznirstošā logā>",
+DlgLnkTargetBlank	: "Jaunā logā (_blank)",
+DlgLnkTargetParent	: "Esošajā logā (_parent)",
+DlgLnkTargetSelf	: "Tajā pašā logā (_self)",
+DlgLnkTargetTop		: "Visredzamākajā logā (_top)",
+DlgLnkTargetFrameName	: "Mērķa ietvara nosaukums",
+DlgLnkPopWinName	: "Uznirstošā loga nosaukums",
+DlgLnkPopWinFeat	: "Uznirstošā loga nosaukums īpašības",
+DlgLnkPopResize		: "Ar maināmu izmēru",
+DlgLnkPopLocation	: "Atrašanās vietas josla",
+DlgLnkPopMenu		: "Izvēlnes josla",
+DlgLnkPopScroll		: "Ritjoslas",
+DlgLnkPopStatus		: "Statusa josla",
+DlgLnkPopToolbar	: "Rīku josla",
+DlgLnkPopFullScrn	: "Pilnā ekrānā (IE)",
+DlgLnkPopDependent	: "Atkarīgs (Netscape)",
+DlgLnkPopWidth		: "Platums",
+DlgLnkPopHeight		: "Augstums",
+DlgLnkPopLeft		: "Kreisā koordināte",
+DlgLnkPopTop		: "Augšējā koordināte",
+
+DlnLnkMsgNoUrl		: "Lūdzu norādi hipersaiti",
+DlnLnkMsgNoEMail	: "Lūdzu norādi e-pasta adresi",
+DlnLnkMsgNoAnchor	: "Lūdzu norādi iezīmi",
+DlnLnkMsgInvPopName	: "The popup name must begin with an alphabetic character and must not contain spaces",	//MISSING
+
+// Color Dialog
+DlgColorTitle		: "Izvēlies krāsu",
+DlgColorBtnClear	: "Dzēst",
+DlgColorHighlight	: "Izcelt",
+DlgColorSelected	: "Iezīmētais",
+
+// Smiley Dialog
+DlgSmileyTitle		: "Ievietot smaidiņu",
+
+// Special Character Dialog
+DlgSpecialCharTitle	: "Ievietot īpašu simbolu",
+
+// Table Dialog
+DlgTableTitle		: "Tabulas īpašības",
+DlgTableRows		: "Rindas",
+DlgTableColumns		: "Kolonnas",
+DlgTableBorder		: "Rāmja izmērs",
+DlgTableAlign		: "Novietojums",
+DlgTableAlignNotSet	: "<nav norādīts>",
+DlgTableAlignLeft	: "Pa kreisi",
+DlgTableAlignCenter	: "Centrēti",
+DlgTableAlignRight	: "Pa labi",
+DlgTableWidth		: "Platums",
+DlgTableWidthPx		: "pikseļos",
+DlgTableWidthPc		: "procentuāli",
+DlgTableHeight		: "Augstums",
+DlgTableCellSpace	: "Rūtiņu atstatums",
+DlgTableCellPad		: "Rūtiņu nobīde",
+DlgTableCaption		: "Leģenda",
+DlgTableSummary		: "Anotācija",
+
+// Table Cell Dialog
+DlgCellTitle		: "Rūtiņas īpašības",
+DlgCellWidth		: "Platums",
+DlgCellWidthPx		: "pikseļi",
+DlgCellWidthPc		: "procentos",
+DlgCellHeight		: "Augstums",
+DlgCellWordWrap		: "Teksta pārnese",
+DlgCellWordWrapNotSet	: "<nav norādīta>",
+DlgCellWordWrapYes	: "Jā",
+DlgCellWordWrapNo	: "Nē",
+DlgCellHorAlign		: "Horizontāla novietojums",
+DlgCellHorAlignNotSet	: "<Nav norādīts>",
+DlgCellHorAlignLeft	: "Pa kreisi",
+DlgCellHorAlignCenter	: "Centrēti",
+DlgCellHorAlignRight: "Pa labi",
+DlgCellVerAlign		: "Vertikālais novietojums",
+DlgCellVerAlignNotSet	: "<nav norādīts>",
+DlgCellVerAlignTop	: "Augša",
+DlgCellVerAlignMiddle	: "Vidus",
+DlgCellVerAlignBottom	: "Apakša",
+DlgCellVerAlignBaseline	: "Pamatrindā",
+DlgCellRowSpan		: "Rindu pārnese",
+DlgCellCollSpan		: "Kolonnu pārnese",
+DlgCellBackColor	: "Fona krāsa",
+DlgCellBorderColor	: "Rāmja krāsa",
+DlgCellBtnSelect	: "Iezīmē...",
+
+// Find and Replace Dialog
+DlgFindAndReplaceTitle	: "Find and Replace",	//MISSING
+
+// Find Dialog
+DlgFindTitle		: "Meklētājs",
+DlgFindFindBtn		: "Meklēt",
+DlgFindNotFoundMsg	: "Norādītā frāze netika atrasta.",
+
+// Replace Dialog
+DlgReplaceTitle			: "Aizvietošana",
+DlgReplaceFindLbl		: "Meklēt:",
+DlgReplaceReplaceLbl	: "Nomainīt uz:",
+DlgReplaceCaseChk		: "Reģistrjūtīgs",
+DlgReplaceReplaceBtn	: "Aizvietot",
+DlgReplaceReplAllBtn	: "Aizvietot visu",
+DlgReplaceWordChk		: "Jāsakrīt pilnībā",
+
+// Paste Operations / Dialog
+PasteErrorCut	: "Jūsu pārlūkprogrammas drošības iestatījumi nepieļauj editoram automātiski veikt izgriešanas darbību.  Lūdzu, izmantojiet (Ctrl+X, lai veiktu šo darbību.",
+PasteErrorCopy	: "Jūsu pārlūkprogrammas drošības iestatījumi nepieļauj editoram automātiski veikt kopēšanas darbību.  Lūdzu, izmantojiet (Ctrl+C), lai veiktu šo darbību.",
+
+PasteAsText		: "Ievietot kā vienkāršu tekstu",
+PasteFromWord	: "Ievietot no Worda",
+
+DlgPasteMsg2	: "Lūdzu, ievietojiet tekstu šajā laukumā, izmantojot klaviatūru (<STRONG>Ctrl+V</STRONG>) un apstipriniet ar <STRONG>Darīts!</STRONG>.",
+DlgPasteSec		: "Because of your browser security settings, the editor is not able to access your clipboard data directly. You are required to paste it again in this window.",	//MISSING
+DlgPasteIgnoreFont		: "Ignorēt iepriekš norādītos fontus",
+DlgPasteRemoveStyles	: "Noņemt norādītos stilus",
+
+// Color Picker
+ColorAutomatic	: "Automātiska",
+ColorMoreColors	: "Plašāka palete...",
+
+// Document Properties
+DocProps		: "Dokumenta īpašības",
+
+// Anchor Dialog
+DlgAnchorTitle		: "Iezīmes īpašības",
+DlgAnchorName		: "Iezīmes nosaukums",
+DlgAnchorErrorName	: "Lūdzu norādiet iezīmes nosaukumu",
+
+// Speller Pages Dialog
+DlgSpellNotInDic		: "Netika atrasts vārdnīcā",
+DlgSpellChangeTo		: "Nomainīt uz",
+DlgSpellBtnIgnore		: "Ignorēt",
+DlgSpellBtnIgnoreAll	: "Ignorēt visu",
+DlgSpellBtnReplace		: "Aizvietot",
+DlgSpellBtnReplaceAll	: "Aizvietot visu",
+DlgSpellBtnUndo			: "Atcelt",
+DlgSpellNoSuggestions	: "- Nav ieteikumu -",
+DlgSpellProgress		: "Notiek pareizrakstības pārbaude...",
+DlgSpellNoMispell		: "Pareizrakstības pārbaude pabeigta: kļūdas netika atrastas",
+DlgSpellNoChanges		: "Pareizrakstības pārbaude pabeigta: nekas netika labots",
+DlgSpellOneChange		: "Pareizrakstības pārbaude pabeigta: 1 vārds izmainīts",
+DlgSpellManyChanges		: "Pareizrakstības pārbaude pabeigta: %1 vārdi tika mainīti",
+
+IeSpellDownload			: "Pareizrakstības pārbaudītājs nav pievienots. Vai vēlaties to lejupielādēt tagad?",
+
+// Button Dialog
+DlgButtonText		: "Teksts (vērtība)",
+DlgButtonType		: "Tips",
+DlgButtonTypeBtn	: "Button",	//MISSING
+DlgButtonTypeSbm	: "Submit",	//MISSING
+DlgButtonTypeRst	: "Reset",	//MISSING
+
+// Checkbox and Radio Button Dialogs
+DlgCheckboxName		: "Nosaukums",
+DlgCheckboxValue	: "Vērtība",
+DlgCheckboxSelected	: "Iezīmēts",
+
+// Form Dialog
+DlgFormName		: "Nosaukums",
+DlgFormAction	: "Darbība",
+DlgFormMethod	: "Metode",
+
+// Select Field Dialog
+DlgSelectName		: "Nosaukums",
+DlgSelectValue		: "Vērtība",
+DlgSelectSize		: "Izmērs",
+DlgSelectLines		: "rindas",
+DlgSelectChkMulti	: "Atļaut vairākus iezīmējumus",
+DlgSelectOpAvail	: "Pieejamās iespējas",
+DlgSelectOpText		: "Teksts",
+DlgSelectOpValue	: "Vērtība",
+DlgSelectBtnAdd		: "Pievienot",
+DlgSelectBtnModify	: "Veikt izmaiņas",
+DlgSelectBtnUp		: "Augšup",
+DlgSelectBtnDown	: "Lejup",
+DlgSelectBtnSetValue : "Noteikt kā iezīmēto vērtību",
+DlgSelectBtnDelete	: "Dzēst",
+
+// Textarea Dialog
+DlgTextareaName	: "Nosaukums",
+DlgTextareaCols	: "Kolonnas",
+DlgTextareaRows	: "Rindas",
+
+// Text Field Dialog
+DlgTextName			: "Nosaukums",
+DlgTextValue		: "Vērtība",
+DlgTextCharWidth	: "Simbolu platums",
+DlgTextMaxChars		: "Simbolu maksimālais daudzums",
+DlgTextType			: "Tips",
+DlgTextTypeText		: "Teksts",
+DlgTextTypePass		: "Parole",
+
+// Hidden Field Dialog
+DlgHiddenName	: "Nosaukums",
+DlgHiddenValue	: "Vērtība",
+
+// Bulleted List Dialog
+BulletedListProp	: "Aizzīmju saraksta īpašības",
+NumberedListProp	: "Numerētā saraksta īpašības",
+DlgLstStart			: "Start",	//MISSING
+DlgLstType			: "Tips",
+DlgLstTypeCircle	: "Aplis",
+DlgLstTypeDisc		: "Disks",
+DlgLstTypeSquare	: "Kvadrāts",
+DlgLstTypeNumbers	: "Skaitļi (1, 2, 3)",
+DlgLstTypeLCase		: "Maziem burtiem (a, b, c)",
+DlgLstTypeUCase		: "Lieliem burtiem (A, B, C)",
+DlgLstTypeSRoman	: "Maziem romiešu cipariem (i, ii, iii)",
+DlgLstTypeLRoman	: "Lieliem romiešu cipariem (I, II, III)",
+
+// Document Properties Dialog
+DlgDocGeneralTab	: "Vispārīga informācija",
+DlgDocBackTab		: "Fons",
+DlgDocColorsTab		: "Krāsas un robežu nobīdes",
+DlgDocMetaTab		: "META dati",
+
+DlgDocPageTitle		: "Dokumenta virsraksts <Title>",
+DlgDocLangDir		: "Valodas lasīšanas virziens",
+DlgDocLangDirLTR	: "No kreisās uz labo (LTR)",
+DlgDocLangDirRTL	: "No labās uz kreiso (RTL)",
+DlgDocLangCode		: "Valodas kods",
+DlgDocCharSet		: "Simbolu kodējums",
+DlgDocCharSetCE		: "Central European",	//MISSING
+DlgDocCharSetCT		: "Chinese Traditional (Big5)",	//MISSING
+DlgDocCharSetCR		: "Cyrillic",	//MISSING
+DlgDocCharSetGR		: "Greek",	//MISSING
+DlgDocCharSetJP		: "Japanese",	//MISSING
+DlgDocCharSetKR		: "Korean",	//MISSING
+DlgDocCharSetTR		: "Turkish",	//MISSING
+DlgDocCharSetUN		: "Unicode (UTF-8)",	//MISSING
+DlgDocCharSetWE		: "Western European",	//MISSING
+DlgDocCharSetOther	: "Cits simbolu kodējums",
+
+DlgDocDocType		: "Dokumenta tips",
+DlgDocDocTypeOther	: "Cits dokumenta tips",
+DlgDocIncXHTML		: "Ietvert XHTML deklarācijas",
+DlgDocBgColor		: "Fona krāsa",
+DlgDocBgImage		: "Fona attēla hipersaite",
+DlgDocBgNoScroll	: "Fona attēls ir fiksēts",
+DlgDocCText			: "Teksts",
+DlgDocCLink			: "Hipersaite",
+DlgDocCVisited		: "Apmeklēta hipersaite",
+DlgDocCActive		: "Aktīva hipersaite",
+DlgDocMargins		: "Lapas robežas",
+DlgDocMaTop			: "Augšā",
+DlgDocMaLeft		: "Pa kreisi",
+DlgDocMaRight		: "Pa labi",
+DlgDocMaBottom		: "Apakšā",
+DlgDocMeIndex		: "Dokumentu aprakstoši atslēgvārdi (atdalīti ar komatu)",
+DlgDocMeDescr		: "Dokumenta apraksts",
+DlgDocMeAuthor		: "Autors",
+DlgDocMeCopy		: "Autortiesības",
+DlgDocPreview		: "Priekšskats",
+
+// Templates Dialog
+Templates			: "Sagataves",
+DlgTemplatesTitle	: "Satura sagataves",
+DlgTemplatesSelMsg	: "Lūdzu, norādiet sagatavi, ko atvērt editorā<br>(patreizējie dati tiks zaudēti):",
+DlgTemplatesLoading	: "Notiek sagatavju saraksta ielāde. Lūdzu, uzgaidiet...",
+DlgTemplatesNoTpl	: "(Nav norādītas sagataves)",
+DlgTemplatesReplace	: "Replace actual contents",	//MISSING
+
+// About Dialog
+DlgAboutAboutTab	: "Par",
+DlgAboutBrowserInfoTab	: "Informācija par pārlūkprogrammu",
+DlgAboutLicenseTab	: "Licence",
+DlgAboutVersion		: "versija",
+DlgAboutInfo		: "Papildus informācija ir pieejama"
+};


Property changes on: announcement/trunk/src/main/webapp/fckeditor/editor/lang/lv.js
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/webapp/fckeditor/editor/lang/mn.js
===================================================================
--- announcement/trunk/src/main/webapp/fckeditor/editor/lang/mn.js	                        (rev 0)
+++ announcement/trunk/src/main/webapp/fckeditor/editor/lang/mn.js	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,515 @@
+/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2008 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * Mongolian language file.
+ */
+
+var FCKLang =
+{
+// Language direction : "ltr" (left to right) or "rtl" (right to left).
+Dir					: "ltr",
+
+ToolbarCollapse		: "Багажны хэсэг эвдэх",
+ToolbarExpand		: "Багажны хэсэг өргөтгөх",
+
+// Toolbar Items and Context Menu
+Save				: "Хадгалах",
+NewPage				: "Шинэ хуудас",
+Preview				: "Уридчлан харах",
+Cut					: "Хайчлах",
+Copy				: "Хуулах",
+Paste				: "Буулгах",
+PasteText			: "plain text-ээс буулгах",
+PasteWord			: "Word-оос буулгах",
+Print				: "Хэвлэх",
+SelectAll			: "Бүгдийг нь сонгох",
+RemoveFormat		: "Формат авч хаях",
+InsertLinkLbl		: "Линк",
+InsertLink			: "Линк Оруулах/Засварлах",
+RemoveLink			: "Линк авч хаях",
+Anchor				: "Холбоос Оруулах/Засварлах",
+AnchorDelete		: "Холбоос Авах",
+InsertImageLbl		: "Зураг",
+InsertImage			: "Зураг Оруулах/Засварлах",
+InsertFlashLbl		: "Флаш",
+InsertFlash			: "Флаш Оруулах/Засварлах",
+InsertTableLbl		: "Хүснэгт",
+InsertTable			: "Хүснэгт Оруулах/Засварлах",
+InsertLineLbl		: "Зураас",
+InsertLine			: "Хөндлөн зураас оруулах",
+InsertSpecialCharLbl: "Онцгой тэмдэгт",
+InsertSpecialChar	: "Онцгой тэмдэгт оруулах",
+InsertSmileyLbl		: "Тодорхойлолт",
+InsertSmiley		: "Тодорхойлолт оруулах",
+About				: "FCKeditor-н тухай",
+Bold				: "Тод бүдүүн",
+Italic				: "Налуу",
+Underline			: "Доогуур нь зураастай болгох",
+StrikeThrough		: "Дундуур нь зураастай болгох",
+Subscript			: "Суурь болгох",
+Superscript			: "Зэрэг болгох",
+LeftJustify			: "Зүүн талд байрлуулах",
+CenterJustify		: "Төвд байрлуулах",
+RightJustify		: "Баруун талд байрлуулах",
+BlockJustify		: "Блок хэлбэрээр байрлуулах",
+DecreaseIndent		: "Догол мөр нэмэх",
+IncreaseIndent		: "Догол мөр хасах",
+Blockquote			: "Хайрцаглах",
+Undo				: "Хүчингүй болгох",
+Redo				: "Өмнөх үйлдлээ сэргээх",
+NumberedListLbl		: "Дугаарлагдсан жагсаалт",
+NumberedList		: "Дугаарлагдсан жагсаалт Оруулах/Авах",
+BulletedListLbl		: "Цэгтэй жагсаалт",
+BulletedList		: "Цэгтэй жагсаалт Оруулах/Авах",
+ShowTableBorders	: "Хүснэгтийн хүрээг үзүүлэх",
+ShowDetails			: "Деталчлан үзүүлэх",
+Style				: "Загвар",
+FontFormat			: "Формат",
+Font				: "Фонт",
+FontSize			: "Хэмжээ",
+TextColor			: "Фонтны өнгө",
+BGColor				: "Фонны өнгө",
+Source				: "Код",
+Find				: "Хайх",
+Replace				: "Солих",
+SpellCheck			: "Үгийн дүрэх шалгах",
+UniversalKeyboard	: "Униварсал гар",
+PageBreakLbl		: "Хуудас тусгаарлах",
+PageBreak			: "Хуудас тусгаарлагч оруулах",
+
+Form			: "Форм",
+Checkbox		: "Чекбокс",
+RadioButton		: "Радио товч",
+TextField		: "Техт талбар",
+Textarea		: "Техт орчин",
+HiddenField		: "Нууц талбар",
+Button			: "Товч",
+SelectionField	: "Сонгогч талбар",
+ImageButton		: "Зурагтай товч",
+
+FitWindow		: "editor-н хэмжээг томруулах",
+ShowBlocks		: "Block-уудыг үзүүлэх",
+
+// Context Menu
+EditLink			: "Холбоос засварлах",
+CellCM				: "Нүх/зай",
+RowCM				: "Мөр",
+ColumnCM			: "Багана",
+InsertRowAfter		: "Мөр дараа нь оруулах",
+InsertRowBefore		: "Мөр өмнө нь оруулах",
+DeleteRows			: "Мөр устгах",
+InsertColumnAfter	: "Багана дараа нь оруулах",
+InsertColumnBefore	: "Багана өмнө нь оруулах",
+DeleteColumns		: "Багана устгах",
+InsertCellAfter		: "Нүх/зай дараа нь оруулах",
+InsertCellBefore	: "Нүх/зай өмнө нь оруулах",
+DeleteCells			: "Нүх устгах",
+MergeCells			: "Нүх нэгтэх",
+MergeRight			: "Баруун тийш нэгтгэх",
+MergeDown			: "Доош нэгтгэх",
+HorizontalSplitCell	: "Нүх/зайг босоогоор нь тусгаарлах",
+VerticalSplitCell	: "Нүх/зайг хөндлөнгөөр нь тусгаарлах",
+TableDelete			: "Хүснэгт устгах",
+CellProperties		: "Нүх/зай зайн шинж чанар",
+TableProperties		: "Хүснэгт",
+ImageProperties		: "Зураг",
+FlashProperties		: "Флаш шинж чанар",
+
+AnchorProp			: "Холбоос шинж чанар",
+ButtonProp			: "Товчны шинж чанар",
+CheckboxProp		: "Чекбоксны шинж чанар",
+HiddenFieldProp		: "Нууц талбарын шинж чанар",
+RadioButtonProp		: "Радио товчны шинж чанар",
+ImageButtonProp		: "Зурган товчны шинж чанар",
+TextFieldProp		: "Текст талбарын шинж чанар",
+SelectionFieldProp	: "Согогч талбарын шинж чанар",
+TextareaProp		: "Текст орчны шинж чанар",
+FormProp			: "Форм шинж чанар",
+
+FontFormats			: "Хэвийн;Formatted;Хаяг;Heading 1;Heading 2;Heading 3;Heading 4;Heading 5;Heading 6;Paragraph (DIV)",
+
+// Alerts and Messages
+ProcessingXHTML		: "XHTML үйл явц явагдаж байна. Хүлээнэ үү...",
+Done				: "Хийх",
+PasteWordConfirm	: "Word-оос хуулсан текстээ санаж байгааг нь буулгахыг та хүсч байна уу. Та текст-ээ буулгахын өмнө цэвэрлэх үү?",
+NotCompatiblePaste	: "Энэ комманд Internet Explorer-ын 5.5 буюу түүнээс дээш хувилбарт идвэхшинэ. Та цэвэрлэхгүйгээр буулгахыг хүсч байна?",
+UnknownToolbarItem	: "Багажны хэсгийн \"%1\" item мэдэгдэхгүй байна",
+UnknownCommand		: "\"%1\" комманд нэр мэдагдэхгүй байна",
+NotImplemented		: "Зөвшөөрөгдөхгүй комманд",
+UnknownToolbarSet	: "Багажны хэсэгт \"%1\" оноох, үүсээгүй байна",
+NoActiveX			: "Таны үзүүлэгч/browser-н хамгаалалтын тохиргоо editor-н зарим боломжийг хязгаарлаж байна. Та \"Run ActiveX controls ба plug-ins\" сонголыг идвэхитэй болго.",
+BrowseServerBlocked : "Нөөц үзүүгч нээж чадсангүй. Бүх popup blocker-г disabled болгоно уу.",
+DialogBlocked		: "Харилцах цонхонд энийг нээхэд боломжгүй ээ. Бүх popup blocker-г disabled болгоно уу.",
+
+// Dialogs
+DlgBtnOK			: "OK",
+DlgBtnCancel		: "Болих",
+DlgBtnClose			: "Хаах",
+DlgBtnBrowseServer	: "Сервер харуулах",
+DlgAdvancedTag		: "Нэмэлт",
+DlgOpOther			: "<Бусад>",
+DlgInfoTab			: "Мэдээлэл",
+DlgAlertUrl			: "URL оруулна уу",
+
+// General Dialogs Labels
+DlgGenNotSet		: "<Оноохгүй>",
+DlgGenId			: "Id",
+DlgGenLangDir		: "Хэлний чиглэл",
+DlgGenLangDirLtr	: "Зүүнээс баруун (LTR)",
+DlgGenLangDirRtl	: "Баруунаас зүүн (RTL)",
+DlgGenLangCode		: "Хэлний код",
+DlgGenAccessKey		: "Холбох түлхүүр",
+DlgGenName			: "Нэр",
+DlgGenTabIndex		: "Tab индекс",
+DlgGenLongDescr		: "URL-ын тайлбар",
+DlgGenClass			: "Stylesheet классууд",
+DlgGenTitle			: "Зөвлөлдөх гарчиг",
+DlgGenContType		: "Зөвлөлдөх төрлийн агуулга",
+DlgGenLinkCharset	: "Тэмдэгт оноох нөөцөд холбогдсон",
+DlgGenStyle			: "Загвар",
+
+// Image Dialog
+DlgImgTitle			: "Зураг",
+DlgImgInfoTab		: "Зурагны мэдээлэл",
+DlgImgBtnUpload		: "Үүнийг сервэррүү илгээ",
+DlgImgURL			: "URL",
+DlgImgUpload		: "Хуулах",
+DlgImgAlt			: "Тайлбар текст",
+DlgImgWidth			: "Өргөн",
+DlgImgHeight		: "Өндөр",
+DlgImgLockRatio		: "Радио түгжих",
+DlgBtnResetSize		: "хэмжээ дахин оноох",
+DlgImgBorder		: "Хүрээ",
+DlgImgHSpace		: "Хөндлөн зай",
+DlgImgVSpace		: "Босоо зай",
+DlgImgAlign			: "Эгнээ",
+DlgImgAlignLeft		: "Зүүн",
+DlgImgAlignAbsBottom: "Abs доод талд",
+DlgImgAlignAbsMiddle: "Abs Дунд талд",
+DlgImgAlignBaseline	: "Baseline",
+DlgImgAlignBottom	: "Доод талд",
+DlgImgAlignMiddle	: "Дунд талд",
+DlgImgAlignRight	: "Баруун",
+DlgImgAlignTextTop	: "Текст дээр",
+DlgImgAlignTop		: "Дээд талд",
+DlgImgPreview		: "Уридчлан харах",
+DlgImgAlertUrl		: "Зурагны URL-ын төрлийн сонгоно уу",
+DlgImgLinkTab		: "Линк",
+
+// Flash Dialog
+DlgFlashTitle		: "Флаш  шинж чанар",
+DlgFlashChkPlay		: "Автоматаар тоглох",
+DlgFlashChkLoop		: "Давтах",
+DlgFlashChkMenu		: "Флаш цэс идвэхжүүлэх",
+DlgFlashScale		: "Өргөгтгөх",
+DlgFlashScaleAll	: "Бүгдийг харуулах",
+DlgFlashScaleNoBorder	: "Хүрээгүй",
+DlgFlashScaleFit	: "Яг тааруулах",
+
+// Link Dialog
+DlgLnkWindowTitle	: "Линк",
+DlgLnkInfoTab		: "Линкийн мэдээлэл",
+DlgLnkTargetTab		: "Байрлал",
+
+DlgLnkType			: "Линкийн төрөл",
+DlgLnkTypeURL		: "URL",
+DlgLnkTypeAnchor	: "Энэ хуудасандах холбоос",
+DlgLnkTypeEMail		: "E-Mail",
+DlgLnkProto			: "Протокол",
+DlgLnkProtoOther	: "<бусад>",
+DlgLnkURL			: "URL",
+DlgLnkAnchorSel		: "Холбоос сонгох",
+DlgLnkAnchorByName	: "Холбоосын нэрээр",
+DlgLnkAnchorById	: "Элемэнт Id-гаар",
+DlgLnkNoAnchors		: "(Баримт бичиг холбоосгүй байна)",
+DlgLnkEMail			: "E-Mail Хаяг",
+DlgLnkEMailSubject	: "Message гарчиг",
+DlgLnkEMailBody		: "Message-ийн агуулга",
+DlgLnkUpload		: "Хуулах",
+DlgLnkBtnUpload		: "Үүнийг серверрүү илгээ",
+
+DlgLnkTarget		: "Байрлал",
+DlgLnkTargetFrame	: "<Агуулах хүрээ>",
+DlgLnkTargetPopup	: "<popup цонх>",
+DlgLnkTargetBlank	: "Шинэ цонх (_blank)",
+DlgLnkTargetParent	: "Эцэг цонх (_parent)",
+DlgLnkTargetSelf	: "Төстэй цонх (_self)",
+DlgLnkTargetTop		: "Хамгийн түрүүн байх цонх (_top)",
+DlgLnkTargetFrameName	: "Очих фремын нэр",
+DlgLnkPopWinName	: "Popup цонхны нэр",
+DlgLnkPopWinFeat	: "Popup цонхны онцлог",
+DlgLnkPopResize		: "Хэмжээ өөрчлөх",
+DlgLnkPopLocation	: "Location хэсэг",
+DlgLnkPopMenu		: "Meню хэсэг",
+DlgLnkPopScroll		: "Скрол хэсэгүүд",
+DlgLnkPopStatus		: "Статус хэсэг",
+DlgLnkPopToolbar	: "Багажны хэсэг",
+DlgLnkPopFullScrn	: "Цонх дүүргэх (IE)",
+DlgLnkPopDependent	: "Хамаатай (Netscape)",
+DlgLnkPopWidth		: "Өргөн",
+DlgLnkPopHeight		: "Өндөр",
+DlgLnkPopLeft		: "Зүүн байрлал",
+DlgLnkPopTop		: "Дээд байрлал",
+
+DlnLnkMsgNoUrl		: "Линк URL-ээ төрөлжүүлнэ үү",
+DlnLnkMsgNoEMail	: "Е-mail хаягаа төрөлжүүлнэ үү",
+DlnLnkMsgNoAnchor	: "Холбоосоо сонгоно уу",
+DlnLnkMsgInvPopName	: "popup нэр нь үсгэн тэмдэгтээр эхэлсэн байх ба хоосон зай агуулаагүй байх ёстой.",
+
+// Color Dialog
+DlgColorTitle		: "Өнгө сонгох",
+DlgColorBtnClear	: "Цэвэрлэх",
+DlgColorHighlight	: "Өнгө",
+DlgColorSelected	: "Сонгогдсон",
+
+// Smiley Dialog
+DlgSmileyTitle		: "Тодорхойлолт оруулах",
+
+// Special Character Dialog
+DlgSpecialCharTitle	: "Онцгой тэмдэгт сонгох",
+
+// Table Dialog
+DlgTableTitle		: "Хүснэгт",
+DlgTableRows		: "Мөр",
+DlgTableColumns		: "Багана",
+DlgTableBorder		: "Хүрээний хэмжээ",
+DlgTableAlign		: "Эгнээ",
+DlgTableAlignNotSet	: "<Оноохгүй>",
+DlgTableAlignLeft	: "Зүүн талд",
+DlgTableAlignCenter	: "Төвд",
+DlgTableAlignRight	: "Баруун талд",
+DlgTableWidth		: "Өргөн",
+DlgTableWidthPx		: "цэг",
+DlgTableWidthPc		: "хувь",
+DlgTableHeight		: "Өндөр",
+DlgTableCellSpace	: "Нүх хоорондын зай (spacing)",
+DlgTableCellPad		: "Нүх доторлох(padding)",
+DlgTableCaption		: "Тайлбар",
+DlgTableSummary		: "Тайлбар",
+
+// Table Cell Dialog
+DlgCellTitle		: "Хоосон зайн шинж чанар",
+DlgCellWidth		: "Өргөн",
+DlgCellWidthPx		: "цэг",
+DlgCellWidthPc		: "хувь",
+DlgCellHeight		: "Өндөр",
+DlgCellWordWrap		: "Үг таслах",
+DlgCellWordWrapNotSet	: "<Оноохгүй>",
+DlgCellWordWrapYes	: "Тийм",
+DlgCellWordWrapNo	: "Үгүй",
+DlgCellHorAlign		: "Босоо эгнээ",
+DlgCellHorAlignNotSet	: "<Оноохгүй>",
+DlgCellHorAlignLeft	: "Зүүн",
+DlgCellHorAlignCenter	: "Төв",
+DlgCellHorAlignRight: "Баруун",
+DlgCellVerAlign		: "Хөндлөн эгнээ",
+DlgCellVerAlignNotSet	: "<Оноохгүй>",
+DlgCellVerAlignTop	: "Дээд тал",
+DlgCellVerAlignMiddle	: "Дунд",
+DlgCellVerAlignBottom	: "Доод тал",
+DlgCellVerAlignBaseline	: "Baseline",
+DlgCellRowSpan		: "Нийт мөр (span)",
+DlgCellCollSpan		: "Нийт багана (span)",
+DlgCellBackColor	: "Фонны өнгө",
+DlgCellBorderColor	: "Хүрээний өнгө",
+DlgCellBtnSelect	: "Сонго...",
+
+// Find and Replace Dialog
+DlgFindAndReplaceTitle	: "Хай мөн Дарж бич",
+
+// Find Dialog
+DlgFindTitle		: "Хайх",
+DlgFindFindBtn		: "Хайх",
+DlgFindNotFoundMsg	: "Хайсан текст олсонгүй.",
+
+// Replace Dialog
+DlgReplaceTitle			: "Солих",
+DlgReplaceFindLbl		: "Хайх үг/үсэг:",
+DlgReplaceReplaceLbl	: "Солих үг:",
+DlgReplaceCaseChk		: "Тэнцэх төлөв",
+DlgReplaceReplaceBtn	: "Солих",
+DlgReplaceReplAllBtn	: "Бүгдийг нь Солих",
+DlgReplaceWordChk		: "Тэнцэх бүтэн үг",
+
+// Paste Operations / Dialog
+PasteErrorCut	: "Таны browser-ын хамгаалалтын тохиргоо editor-д автоматаар хайчлах үйлдэлийг зөвшөөрөхгүй байна. (Ctrl+X) товчны хослолыг ашиглана уу.",
+PasteErrorCopy	: "Таны browser-ын хамгаалалтын тохиргоо editor-д автоматаар хуулах үйлдэлийг зөвшөөрөхгүй байна. (Ctrl+C) товчны хослолыг ашиглана уу.",
+
+PasteAsText		: "Plain Text-ээс буулгах",
+PasteFromWord	: "Word-оос буулгах",
+
+DlgPasteMsg2	: "(<strong>Ctrl+V</strong>) товчийг ашиглан paste хийнэ үү. Мөн <strong>OK</strong> дар.",
+DlgPasteSec		: "Таны үзүүлэгч/browser/-н хамгаалалтын тохиргооноос болоод editor clipboard өгөгдөлрүү шууд хандах боломжгүй. Энэ цонход дахин paste хийхийг оролд.",
+DlgPasteIgnoreFont		: "Тодорхойлогдсон Font Face зөвшөөрнө",
+DlgPasteRemoveStyles	: "Тодорхойлогдсон загварыг авах",
+
+// Color Picker
+ColorAutomatic	: "Автоматаар",
+ColorMoreColors	: "Нэмэлт өнгөнүүд...",
+
+// Document Properties
+DocProps		: "Баримт бичиг шинж чанар",
+
+// Anchor Dialog
+DlgAnchorTitle		: "Холбоос шинж чанар",
+DlgAnchorName		: "Холбоос нэр",
+DlgAnchorErrorName	: "Холбоос төрөл оруулна уу",
+
+// Speller Pages Dialog
+DlgSpellNotInDic		: "Толь бичиггүй",
+DlgSpellChangeTo		: "Өөрчлөх",
+DlgSpellBtnIgnore		: "Зөвшөөрөх",
+DlgSpellBtnIgnoreAll	: "Бүгдийг зөвшөөрөх",
+DlgSpellBtnReplace		: "Дарж бичих",
+DlgSpellBtnReplaceAll	: "Бүгдийг Дарж бичих",
+DlgSpellBtnUndo			: "Буцаах",
+DlgSpellNoSuggestions	: "- Тайлбаргүй -",
+DlgSpellProgress		: "Дүрэм шалгаж байгаа үйл явц...",
+DlgSpellNoMispell		: "Дүрэм шалгаад дууссан: Алдаа олдсонгүй",
+DlgSpellNoChanges		: "Дүрэм шалгаад дууссан: үг өөрчлөгдөөгүй",
+DlgSpellOneChange		: "Дүрэм шалгаад дууссан: 1 үг өөрчлөгдсөн",
+DlgSpellManyChanges		: "Дүрэм шалгаад дууссан: %1 үг өөрчлөгдсөн",
+
+IeSpellDownload			: "Дүрэм шалгагч суугаагүй байна. Татаж авахыг хүсч байна уу?",
+
+// Button Dialog
+DlgButtonText		: "Тэкст (Утга)",
+DlgButtonType		: "Төрөл",
+DlgButtonTypeBtn	: "Товч",
+DlgButtonTypeSbm	: "Submit",
+DlgButtonTypeRst	: "Болих",
+
+// Checkbox and Radio Button Dialogs
+DlgCheckboxName		: "Нэр",
+DlgCheckboxValue	: "Утга",
+DlgCheckboxSelected	: "Сонгогдсон",
+
+// Form Dialog
+DlgFormName		: "Нэр",
+DlgFormAction	: "Үйлдэл",
+DlgFormMethod	: "Арга",
+
+// Select Field Dialog
+DlgSelectName		: "Нэр",
+DlgSelectValue		: "Утга",
+DlgSelectSize		: "Хэмжээ",
+DlgSelectLines		: "Мөр",
+DlgSelectChkMulti	: "Олон сонголт зөвшөөрөх",
+DlgSelectOpAvail	: "Идвэхтэй сонголт",
+DlgSelectOpText		: "Тэкст",
+DlgSelectOpValue	: "Утга",
+DlgSelectBtnAdd		: "Нэмэх",
+DlgSelectBtnModify	: "Өөрчлөх",
+DlgSelectBtnUp		: "Дээш",
+DlgSelectBtnDown	: "Доош",
+DlgSelectBtnSetValue : "Сонгогдсан утга оноох",
+DlgSelectBtnDelete	: "Устгах",
+
+// Textarea Dialog
+DlgTextareaName	: "Нэр",
+DlgTextareaCols	: "Багана",
+DlgTextareaRows	: "Мөр",
+
+// Text Field Dialog
+DlgTextName			: "Нэр",
+DlgTextValue		: "Утга",
+DlgTextCharWidth	: "Тэмдэгтын өргөн",
+DlgTextMaxChars		: "Хамгийн их тэмдэгт",
+DlgTextType			: "Төрөл",
+DlgTextTypeText		: "Текст",
+DlgTextTypePass		: "Нууц үг",
+
+// Hidden Field Dialog
+DlgHiddenName	: "Нэр",
+DlgHiddenValue	: "Утга",
+
+// Bulleted List Dialog
+BulletedListProp	: "Bulleted жагсаалын шинж чанар",
+NumberedListProp	: "Дугаарласан жагсаалын шинж чанар",
+DlgLstStart			: "Эхлэх",
+DlgLstType			: "Төрөл",
+DlgLstTypeCircle	: "Тойрог",
+DlgLstTypeDisc		: "Тайлбар",
+DlgLstTypeSquare	: "Square",
+DlgLstTypeNumbers	: "Тоо (1, 2, 3)",
+DlgLstTypeLCase		: "Жижиг үсэг (a, b, c)",
+DlgLstTypeUCase		: "Том үсэг (A, B, C)",
+DlgLstTypeSRoman	: "Жижиг Ром тоо (i, ii, iii)",
+DlgLstTypeLRoman	: "Том Ром тоо (I, II, III)",
+
+// Document Properties Dialog
+DlgDocGeneralTab	: "Ерөнхий",
+DlgDocBackTab		: "Фоно",
+DlgDocColorsTab		: "Захын зай ба Өнгө",
+DlgDocMetaTab		: "Meta өгөгдөл",
+
+DlgDocPageTitle		: "Хуудасны гарчиг",
+DlgDocLangDir		: "Хэлний чиглэл",
+DlgDocLangDirLTR	: "Зүүнээс баруунруу (LTR)",
+DlgDocLangDirRTL	: "Баруунаас зүүнрүү (RTL)",
+DlgDocLangCode		: "Хэлний код",
+DlgDocCharSet		: "Encoding тэмдэгт",
+DlgDocCharSetCE		: "Төв европ",
+DlgDocCharSetCT		: "Хятадын уламжлалт (Big5)",
+DlgDocCharSetCR		: "Крил",
+DlgDocCharSetGR		: "Гред",
+DlgDocCharSetJP		: "Япон",
+DlgDocCharSetKR		: "Солонгос",
+DlgDocCharSetTR		: "Tурк",
+DlgDocCharSetUN		: "Юникод (UTF-8)",
+DlgDocCharSetWE		: "Баруун европ",
+DlgDocCharSetOther	: "Encoding-д өөр тэмдэгт оноох",
+
+DlgDocDocType		: "Баримт бичгийн төрөл Heading",
+DlgDocDocTypeOther	: "Бусад баримт бичгийн төрөл Heading",
+DlgDocIncXHTML		: "XHTML агуулж зарлах",
+DlgDocBgColor		: "Фоно өнгө",
+DlgDocBgImage		: "Фоно зурагны URL",
+DlgDocBgNoScroll	: "Гүйдэггүй фоно",
+DlgDocCText			: "Текст",
+DlgDocCLink			: "Линк",
+DlgDocCVisited		: "Зочилсон линк",
+DlgDocCActive		: "Идвэхитэй линк",
+DlgDocMargins		: "Хуудасны захын зай",
+DlgDocMaTop			: "Дээд тал",
+DlgDocMaLeft		: "Зүүн тал",
+DlgDocMaRight		: "Баруун тал",
+DlgDocMaBottom		: "Доод тал",
+DlgDocMeIndex		: "Баримт бичгийн индекс түлхүүр үг (таслалаар тусгаарлагдана)",
+DlgDocMeDescr		: "Баримт бичгийн тайлбар",
+DlgDocMeAuthor		: "Зохиогч",
+DlgDocMeCopy		: "Зохиогчийн эрх",
+DlgDocPreview		: "Харах",
+
+// Templates Dialog
+Templates			: "Загварууд",
+DlgTemplatesTitle	: "Загварын агуулга",
+DlgTemplatesSelMsg	: "Загварыг нээж editor-рүү сонгож оруулна уу<br />(Одоогийн агууллагыг устаж магадгүй):",
+DlgTemplatesLoading	: "Загваруудыг ачааллаж байна. Түр хүлээнэ үү...",
+DlgTemplatesNoTpl	: "(Загвар тодорхойлогдоогүй байна)",
+DlgTemplatesReplace	: "Одоогийн агууллагыг дарж бичих",
+
+// About Dialog
+DlgAboutAboutTab	: "Тухай",
+DlgAboutBrowserInfoTab	: "Мэдээлэл үзүүлэгч",
+DlgAboutLicenseTab	: "Лиценз",
+DlgAboutVersion		: "Хувилбар",
+DlgAboutInfo		: "Мэдээллээр туслах"
+};


Property changes on: announcement/trunk/src/main/webapp/fckeditor/editor/lang/mn.js
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/webapp/fckeditor/editor/lang/ms.js
===================================================================
--- announcement/trunk/src/main/webapp/fckeditor/editor/lang/ms.js	                        (rev 0)
+++ announcement/trunk/src/main/webapp/fckeditor/editor/lang/ms.js	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,515 @@
+/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2008 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * Malay language file.
+ */
+
+var FCKLang =
+{
+// Language direction : "ltr" (left to right) or "rtl" (right to left).
+Dir					: "ltr",
+
+ToolbarCollapse		: "Collapse Toolbar",
+ToolbarExpand		: "Expand Toolbar",
+
+// Toolbar Items and Context Menu
+Save				: "Simpan",
+NewPage				: "Helaian Baru",
+Preview				: "Prebiu",
+Cut					: "Potong",
+Copy				: "Salin",
+Paste				: "Tampal",
+PasteText			: "Tampal sebagai Text Biasa",
+PasteWord			: "Tampal dari Word",
+Print				: "Cetak",
+SelectAll			: "Pilih Semua",
+RemoveFormat		: "Buang Format",
+InsertLinkLbl		: "Sambungan",
+InsertLink			: "Masukkan/Sunting Sambungan",
+RemoveLink			: "Buang Sambungan",
+Anchor				: "Masukkan/Sunting Pautan",
+AnchorDelete		: "Remove Anchor",	//MISSING
+InsertImageLbl		: "Gambar",
+InsertImage			: "Masukkan/Sunting Gambar",
+InsertFlashLbl		: "Flash",	//MISSING
+InsertFlash			: "Insert/Edit Flash",	//MISSING
+InsertTableLbl		: "Jadual",
+InsertTable			: "Masukkan/Sunting Jadual",
+InsertLineLbl		: "Garisan",
+InsertLine			: "Masukkan Garisan Membujur",
+InsertSpecialCharLbl: "Huruf Istimewa",
+InsertSpecialChar	: "Masukkan Huruf Istimewa",
+InsertSmileyLbl		: "Smiley",
+InsertSmiley		: "Masukkan Smiley",
+About				: "Tentang FCKeditor",
+Bold				: "Bold",
+Italic				: "Italic",
+Underline			: "Underline",
+StrikeThrough		: "Strike Through",
+Subscript			: "Subscript",
+Superscript			: "Superscript",
+LeftJustify			: "Jajaran Kiri",
+CenterJustify		: "Jajaran Tengah",
+RightJustify		: "Jajaran Kanan",
+BlockJustify		: "Jajaran Blok",
+DecreaseIndent		: "Kurangkan Inden",
+IncreaseIndent		: "Tambahkan Inden",
+Blockquote			: "Blockquote",	//MISSING
+Undo				: "Batalkan",
+Redo				: "Ulangkan",
+NumberedListLbl		: "Senarai bernombor",
+NumberedList		: "Masukkan/Sunting Senarai bernombor",
+BulletedListLbl		: "Senarai tidak bernombor",
+BulletedList		: "Masukkan/Sunting Senarai tidak bernombor",
+ShowTableBorders	: "Tunjukkan Border Jadual",
+ShowDetails			: "Tunjukkan Butiran",
+Style				: "Stail",
+FontFormat			: "Format",
+Font				: "Font",
+FontSize			: "Saiz",
+TextColor			: "Warna Text",
+BGColor				: "Warna Latarbelakang",
+Source				: "Sumber",
+Find				: "Cari",
+Replace				: "Ganti",
+SpellCheck			: "Semak Ejaan",
+UniversalKeyboard	: "Papan Kekunci Universal",
+PageBreakLbl		: "Page Break",	//MISSING
+PageBreak			: "Insert Page Break",	//MISSING
+
+Form			: "Borang",
+Checkbox		: "Checkbox",
+RadioButton		: "Butang Radio",
+TextField		: "Text Field",
+Textarea		: "Textarea",
+HiddenField		: "Field Tersembunyi",
+Button			: "Butang",
+SelectionField	: "Field Pilihan",
+ImageButton		: "Butang Bergambar",
+
+FitWindow		: "Maximize the editor size",	//MISSING
+ShowBlocks		: "Show Blocks",	//MISSING
+
+// Context Menu
+EditLink			: "Sunting Sambungan",
+CellCM				: "Cell",	//MISSING
+RowCM				: "Row",	//MISSING
+ColumnCM			: "Column",	//MISSING
+InsertRowAfter		: "Insert Row After",	//MISSING
+InsertRowBefore		: "Insert Row Before",	//MISSING
+DeleteRows			: "Buangkan Baris",
+InsertColumnAfter	: "Insert Column After",	//MISSING
+InsertColumnBefore	: "Insert Column Before",	//MISSING
+DeleteColumns		: "Buangkan Lajur",
+InsertCellAfter		: "Insert Cell After",	//MISSING
+InsertCellBefore	: "Insert Cell Before",	//MISSING
+DeleteCells			: "Buangkan Sel-sel",
+MergeCells			: "Cantumkan Sel-sel",
+MergeRight			: "Merge Right",	//MISSING
+MergeDown			: "Merge Down",	//MISSING
+HorizontalSplitCell	: "Split Cell Horizontally",	//MISSING
+VerticalSplitCell	: "Split Cell Vertically",	//MISSING
+TableDelete			: "Delete Table",	//MISSING
+CellProperties		: "Ciri-ciri Sel",
+TableProperties		: "Ciri-ciri Jadual",
+ImageProperties		: "Ciri-ciri Gambar",
+FlashProperties		: "Flash Properties",	//MISSING
+
+AnchorProp			: "Ciri-ciri Pautan",
+ButtonProp			: "Ciri-ciri Butang",
+CheckboxProp		: "Ciri-ciri Checkbox",
+HiddenFieldProp		: "Ciri-ciri Field Tersembunyi",
+RadioButtonProp		: "Ciri-ciri Butang Radio",
+ImageButtonProp		: "Ciri-ciri Butang Bergambar",
+TextFieldProp		: "Ciri-ciri Text Field",
+SelectionFieldProp	: "Ciri-ciri Selection Field",
+TextareaProp		: "Ciri-ciri Textarea",
+FormProp			: "Ciri-ciri Borang",
+
+FontFormats			: "Normal;Telah Diformat;Alamat;Heading 1;Heading 2;Heading 3;Heading 4;Heading 5;Heading 6;Perenggan (DIV)",
+
+// Alerts and Messages
+ProcessingXHTML		: "Memproses XHTML. Sila tunggu...",
+Done				: "Siap",
+PasteWordConfirm	: "Text yang anda hendak tampal adalah berasal dari Word. Adakah anda mahu membuang semua format Word sebelum tampal ke dalam text?",
+NotCompatiblePaste	: "Arahan ini bole dilakukan jika anda mempuunyai Internet Explorer version 5.5 atau yang lebih tinggi. Adakah anda hendak tampal text tanpa membuang format Word?",
+UnknownToolbarItem	: "Toolbar item tidak diketahui\"%1\"",
+UnknownCommand		: "Arahan tidak diketahui \"%1\"",
+NotImplemented		: "Arahan tidak terdapat didalam sistem",
+UnknownToolbarSet	: "Set toolbar \"%1\" tidak wujud",
+NoActiveX			: "Your browser's security settings could limit some features of the editor. You must enable the option \"Run ActiveX controls and plug-ins\". You may experience errors and notice missing features.",	//MISSING
+BrowseServerBlocked : "The resources browser could not be opened. Make sure that all popup blockers are disabled.",	//MISSING
+DialogBlocked		: "It was not possible to open the dialog window. Make sure all popup blockers are disabled.",	//MISSING
+
+// Dialogs
+DlgBtnOK			: "OK",
+DlgBtnCancel		: "Batal",
+DlgBtnClose			: "Tutup",
+DlgBtnBrowseServer	: "Browse Server",
+DlgAdvancedTag		: "Advanced",
+DlgOpOther			: "<Lain-lain>",
+DlgInfoTab			: "Info",	//MISSING
+DlgAlertUrl			: "Please insert the URL",	//MISSING
+
+// General Dialogs Labels
+DlgGenNotSet		: "<tidak di set>",
+DlgGenId			: "Id",
+DlgGenLangDir		: "Arah Tulisan",
+DlgGenLangDirLtr	: "Kiri ke Kanan (LTR)",
+DlgGenLangDirRtl	: "Kanan ke Kiri (RTL)",
+DlgGenLangCode		: "Kod Bahasa",
+DlgGenAccessKey		: "Kunci Akses",
+DlgGenName			: "Nama",
+DlgGenTabIndex		: "Indeks Tab ",
+DlgGenLongDescr		: "Butiran Panjang URL",
+DlgGenClass			: "Kelas-kelas Stylesheet",
+DlgGenTitle			: "Tajuk Makluman",
+DlgGenContType		: "Jenis Kandungan Makluman",
+DlgGenLinkCharset	: "Linked Resource Charset",
+DlgGenStyle			: "Stail",
+
+// Image Dialog
+DlgImgTitle			: "Ciri-ciri Imej",
+DlgImgInfoTab		: "Info Imej",
+DlgImgBtnUpload		: "Hantar ke Server",
+DlgImgURL			: "URL",
+DlgImgUpload		: "Muat Naik",
+DlgImgAlt			: "Text Alternatif",
+DlgImgWidth			: "Lebar",
+DlgImgHeight		: "Tinggi",
+DlgImgLockRatio		: "Tetapkan Nisbah",
+DlgBtnResetSize		: "Saiz Set Semula",
+DlgImgBorder		: "Border",
+DlgImgHSpace		: "Ruang Melintang",
+DlgImgVSpace		: "Ruang Menegak",
+DlgImgAlign			: "Jajaran",
+DlgImgAlignLeft		: "Kiri",
+DlgImgAlignAbsBottom: "Bawah Mutlak",
+DlgImgAlignAbsMiddle: "Pertengahan Mutlak",
+DlgImgAlignBaseline	: "Garis Dasar",
+DlgImgAlignBottom	: "Bawah",
+DlgImgAlignMiddle	: "Pertengahan",
+DlgImgAlignRight	: "Kanan",
+DlgImgAlignTextTop	: "Atas Text",
+DlgImgAlignTop		: "Atas",
+DlgImgPreview		: "Prebiu",
+DlgImgAlertUrl		: "Sila taip URL untuk fail gambar",
+DlgImgLinkTab		: "Sambungan",
+
+// Flash Dialog
+DlgFlashTitle		: "Flash Properties",	//MISSING
+DlgFlashChkPlay		: "Auto Play",	//MISSING
+DlgFlashChkLoop		: "Loop",	//MISSING
+DlgFlashChkMenu		: "Enable Flash Menu",	//MISSING
+DlgFlashScale		: "Scale",	//MISSING
+DlgFlashScaleAll	: "Show all",	//MISSING
+DlgFlashScaleNoBorder	: "No Border",	//MISSING
+DlgFlashScaleFit	: "Exact Fit",	//MISSING
+
+// Link Dialog
+DlgLnkWindowTitle	: "Sambungan",
+DlgLnkInfoTab		: "Butiran Sambungan",
+DlgLnkTargetTab		: "Sasaran",
+
+DlgLnkType			: "Jenis Sambungan",
+DlgLnkTypeURL		: "URL",
+DlgLnkTypeAnchor	: "Pautan dalam muka surat ini",
+DlgLnkTypeEMail		: "E-Mail",
+DlgLnkProto			: "Protokol",
+DlgLnkProtoOther	: "<lain-lain>",
+DlgLnkURL			: "URL",
+DlgLnkAnchorSel		: "Sila pilih pautan",
+DlgLnkAnchorByName	: "dengan menggunakan nama pautan",
+DlgLnkAnchorById	: "dengan menggunakan ID elemen",
+DlgLnkNoAnchors		: "(Tiada pautan terdapat dalam dokumen ini)",
+DlgLnkEMail			: "Alamat E-Mail",
+DlgLnkEMailSubject	: "Subjek Mesej",
+DlgLnkEMailBody		: "Isi Kandungan Mesej",
+DlgLnkUpload		: "Muat Naik",
+DlgLnkBtnUpload		: "Hantar ke Server",
+
+DlgLnkTarget		: "Sasaran",
+DlgLnkTargetFrame	: "<bingkai>",
+DlgLnkTargetPopup	: "<tetingkap popup>",
+DlgLnkTargetBlank	: "Tetingkap Baru (_blank)",
+DlgLnkTargetParent	: "Tetingkap Parent (_parent)",
+DlgLnkTargetSelf	: "Tetingkap yang Sama (_self)",
+DlgLnkTargetTop		: "Tetingkap yang paling atas (_top)",
+DlgLnkTargetFrameName	: "Nama Bingkai Sasaran",
+DlgLnkPopWinName	: "Nama Tetingkap Popup",
+DlgLnkPopWinFeat	: "Ciri Tetingkap Popup",
+DlgLnkPopResize		: "Saiz bolehubah",
+DlgLnkPopLocation	: "Bar Lokasi",
+DlgLnkPopMenu		: "Bar Menu",
+DlgLnkPopScroll		: "Bar-bar skrol",
+DlgLnkPopStatus		: "Bar Status",
+DlgLnkPopToolbar	: "Toolbar",
+DlgLnkPopFullScrn	: "Skrin Penuh (IE)",
+DlgLnkPopDependent	: "Bergantungan (Netscape)",
+DlgLnkPopWidth		: "Lebar",
+DlgLnkPopHeight		: "Tinggi",
+DlgLnkPopLeft		: "Posisi Kiri",
+DlgLnkPopTop		: "Posisi Atas",
+
+DlnLnkMsgNoUrl		: "Sila taip sambungan URL",
+DlnLnkMsgNoEMail	: "Sila taip alamat e-mail",
+DlnLnkMsgNoAnchor	: "Sila pilih pautan berkenaaan",
+DlnLnkMsgInvPopName	: "The popup name must begin with an alphabetic character and must not contain spaces",	//MISSING
+
+// Color Dialog
+DlgColorTitle		: "Pilihan Warna",
+DlgColorBtnClear	: "Nyahwarna",
+DlgColorHighlight	: "Terang",
+DlgColorSelected	: "Dipilih",
+
+// Smiley Dialog
+DlgSmileyTitle		: "Masukkan Smiley",
+
+// Special Character Dialog
+DlgSpecialCharTitle	: "Sila pilih huruf istimewa",
+
+// Table Dialog
+DlgTableTitle		: "Ciri-ciri Jadual",
+DlgTableRows		: "Barisan",
+DlgTableColumns		: "Jaluran",
+DlgTableBorder		: "Saiz Border",
+DlgTableAlign		: "Penjajaran",
+DlgTableAlignNotSet	: "<Tidak diset>",
+DlgTableAlignLeft	: "Kiri",
+DlgTableAlignCenter	: "Tengah",
+DlgTableAlignRight	: "Kanan",
+DlgTableWidth		: "Lebar",
+DlgTableWidthPx		: "piksel-piksel",
+DlgTableWidthPc		: "peratus",
+DlgTableHeight		: "Tinggi",
+DlgTableCellSpace	: "Ruangan Antara Sel",
+DlgTableCellPad		: "Tambahan Ruang Sel",
+DlgTableCaption		: "Keterangan",
+DlgTableSummary		: "Summary",	//MISSING
+
+// Table Cell Dialog
+DlgCellTitle		: "Ciri-ciri Sel",
+DlgCellWidth		: "Lebar",
+DlgCellWidthPx		: "piksel-piksel",
+DlgCellWidthPc		: "peratus",
+DlgCellHeight		: "Tinggi",
+DlgCellWordWrap		: "Mengulung Perkataan",
+DlgCellWordWrapNotSet	: "<Tidak diset>",
+DlgCellWordWrapYes	: "Ya",
+DlgCellWordWrapNo	: "Tidak",
+DlgCellHorAlign		: "Jajaran Membujur",
+DlgCellHorAlignNotSet	: "<Tidak diset>",
+DlgCellHorAlignLeft	: "Kiri",
+DlgCellHorAlignCenter	: "Tengah",
+DlgCellHorAlignRight: "Kanan",
+DlgCellVerAlign		: "Jajaran Menegak",
+DlgCellVerAlignNotSet	: "<Tidak diset>",
+DlgCellVerAlignTop	: "Atas",
+DlgCellVerAlignMiddle	: "Tengah",
+DlgCellVerAlignBottom	: "Bawah",
+DlgCellVerAlignBaseline	: "Garis Dasar",
+DlgCellRowSpan		: "Penggunaan Baris",
+DlgCellCollSpan		: "Penggunaan Lajur",
+DlgCellBackColor	: "Warna Latarbelakang",
+DlgCellBorderColor	: "Warna Border",
+DlgCellBtnSelect	: "Pilih...",
+
+// Find and Replace Dialog
+DlgFindAndReplaceTitle	: "Find and Replace",	//MISSING
+
+// Find Dialog
+DlgFindTitle		: "Carian",
+DlgFindFindBtn		: "Cari",
+DlgFindNotFoundMsg	: "Text yang dicari tidak dijumpai.",
+
+// Replace Dialog
+DlgReplaceTitle			: "Gantian",
+DlgReplaceFindLbl		: "Perkataan yang dicari:",
+DlgReplaceReplaceLbl	: "Diganti dengan:",
+DlgReplaceCaseChk		: "Padanan case huruf",
+DlgReplaceReplaceBtn	: "Ganti",
+DlgReplaceReplAllBtn	: "Ganti semua",
+DlgReplaceWordChk		: "Padana Keseluruhan perkataan",
+
+// Paste Operations / Dialog
+PasteErrorCut	: "Keselamatan perisian browser anda tidak membenarkan operasi suntingan text/imej. Sila gunakan papan kekunci (Ctrl+X).",
+PasteErrorCopy	: "Keselamatan perisian browser anda tidak membenarkan operasi salinan text/imej. Sila gunakan papan kekunci (Ctrl+C).",
+
+PasteAsText		: "Tampal sebagai text biasa",
+PasteFromWord	: "Tampal dari perisian \"Word\"",
+
+DlgPasteMsg2	: "Please paste inside the following box using the keyboard (<strong>Ctrl+V</strong>) and hit <strong>OK</strong>.",	//MISSING
+DlgPasteSec		: "Because of your browser security settings, the editor is not able to access your clipboard data directly. You are required to paste it again in this window.",	//MISSING
+DlgPasteIgnoreFont		: "Ignore Font Face definitions",	//MISSING
+DlgPasteRemoveStyles	: "Remove Styles definitions",	//MISSING
+
+// Color Picker
+ColorAutomatic	: "Otomatik",
+ColorMoreColors	: "Warna lain-lain...",
+
+// Document Properties
+DocProps		: "Ciri-ciri dokumen",
+
+// Anchor Dialog
+DlgAnchorTitle		: "Ciri-ciri Pautan",
+DlgAnchorName		: "Nama Pautan",
+DlgAnchorErrorName	: "Sila taip nama pautan",
+
+// Speller Pages Dialog
+DlgSpellNotInDic		: "Tidak terdapat didalam kamus",
+DlgSpellChangeTo		: "Tukarkan kepada",
+DlgSpellBtnIgnore		: "Biar",
+DlgSpellBtnIgnoreAll	: "Biarkan semua",
+DlgSpellBtnReplace		: "Ganti",
+DlgSpellBtnReplaceAll	: "Gantikan Semua",
+DlgSpellBtnUndo			: "Batalkan",
+DlgSpellNoSuggestions	: "- Tiada cadangan -",
+DlgSpellProgress		: "Pemeriksaan ejaan sedang diproses...",
+DlgSpellNoMispell		: "Pemeriksaan ejaan siap: Tiada salah ejaan",
+DlgSpellNoChanges		: "Pemeriksaan ejaan siap: Tiada perkataan diubah",
+DlgSpellOneChange		: "Pemeriksaan ejaan siap: Satu perkataan telah diubah",
+DlgSpellManyChanges		: "Pemeriksaan ejaan siap: %1 perkataan diubah",
+
+IeSpellDownload			: "Pemeriksa ejaan tidak dipasang. Adakah anda mahu muat turun sekarang?",
+
+// Button Dialog
+DlgButtonText		: "Teks (Nilai)",
+DlgButtonType		: "Jenis",
+DlgButtonTypeBtn	: "Button",	//MISSING
+DlgButtonTypeSbm	: "Submit",	//MISSING
+DlgButtonTypeRst	: "Reset",	//MISSING
+
+// Checkbox and Radio Button Dialogs
+DlgCheckboxName		: "Nama",
+DlgCheckboxValue	: "Nilai",
+DlgCheckboxSelected	: "Dipilih",
+
+// Form Dialog
+DlgFormName		: "Nama",
+DlgFormAction	: "Tindakan borang",
+DlgFormMethod	: "Cara borang dihantar",
+
+// Select Field Dialog
+DlgSelectName		: "Nama",
+DlgSelectValue		: "Nilai",
+DlgSelectSize		: "Saiz",
+DlgSelectLines		: "garisan",
+DlgSelectChkMulti	: "Benarkan pilihan pelbagai",
+DlgSelectOpAvail	: "Pilihan sediada",
+DlgSelectOpText		: "Teks",
+DlgSelectOpValue	: "Nilai",
+DlgSelectBtnAdd		: "Tambah Pilihan",
+DlgSelectBtnModify	: "Ubah Pilihan",
+DlgSelectBtnUp		: "Naik ke atas",
+DlgSelectBtnDown	: "Turun ke bawah",
+DlgSelectBtnSetValue : "Set sebagai nilai terpilih",
+DlgSelectBtnDelete	: "Padam",
+
+// Textarea Dialog
+DlgTextareaName	: "Nama",
+DlgTextareaCols	: "Lajur",
+DlgTextareaRows	: "Baris",
+
+// Text Field Dialog
+DlgTextName			: "Nama",
+DlgTextValue		: "Nilai",
+DlgTextCharWidth	: "Lebar isian",
+DlgTextMaxChars		: "Isian Maksimum",
+DlgTextType			: "Jenis",
+DlgTextTypeText		: "Teks",
+DlgTextTypePass		: "Kata Laluan",
+
+// Hidden Field Dialog
+DlgHiddenName	: "Nama",
+DlgHiddenValue	: "Nilai",
+
+// Bulleted List Dialog
+BulletedListProp	: "Ciri-ciri senarai berpeluru",
+NumberedListProp	: "Ciri-ciri senarai bernombor",
+DlgLstStart			: "Start",	//MISSING
+DlgLstType			: "Jenis",
+DlgLstTypeCircle	: "Circle",
+DlgLstTypeDisc		: "Disc",	//MISSING
+DlgLstTypeSquare	: "Square",
+DlgLstTypeNumbers	: "Nombor-nombor (1, 2, 3)",
+DlgLstTypeLCase		: "Huruf-huruf kecil (a, b, c)",
+DlgLstTypeUCase		: "Huruf-huruf besar (A, B, C)",
+DlgLstTypeSRoman	: "Nombor Roman Kecil (i, ii, iii)",
+DlgLstTypeLRoman	: "Nombor Roman Besar (I, II, III)",
+
+// Document Properties Dialog
+DlgDocGeneralTab	: "Umum",
+DlgDocBackTab		: "Latarbelakang",
+DlgDocColorsTab		: "Warna dan margin",
+DlgDocMetaTab		: "Data Meta",
+
+DlgDocPageTitle		: "Tajuk Muka Surat",
+DlgDocLangDir		: "Arah Tulisan",
+DlgDocLangDirLTR	: "Kiri ke Kanan (LTR)",
+DlgDocLangDirRTL	: "Kanan ke Kiri (RTL)",
+DlgDocLangCode		: "Kod Bahasa",
+DlgDocCharSet		: "Enkod Set Huruf",
+DlgDocCharSetCE		: "Central European",	//MISSING
+DlgDocCharSetCT		: "Chinese Traditional (Big5)",	//MISSING
+DlgDocCharSetCR		: "Cyrillic",	//MISSING
+DlgDocCharSetGR		: "Greek",	//MISSING
+DlgDocCharSetJP		: "Japanese",	//MISSING
+DlgDocCharSetKR		: "Korean",	//MISSING
+DlgDocCharSetTR		: "Turkish",	//MISSING
+DlgDocCharSetUN		: "Unicode (UTF-8)",	//MISSING
+DlgDocCharSetWE		: "Western European",	//MISSING
+DlgDocCharSetOther	: "Enkod Set Huruf yang Lain",
+
+DlgDocDocType		: "Jenis Kepala Dokumen",
+DlgDocDocTypeOther	: "Jenis Kepala Dokumen yang Lain",
+DlgDocIncXHTML		: "Masukkan pemula kod XHTML",
+DlgDocBgColor		: "Warna Latarbelakang",
+DlgDocBgImage		: "URL Gambar Latarbelakang",
+DlgDocBgNoScroll	: "Imej Latarbelakang tanpa Skrol",
+DlgDocCText			: "Teks",
+DlgDocCLink			: "Sambungan",
+DlgDocCVisited		: "Sambungan telah Dilawati",
+DlgDocCActive		: "Sambungan Aktif",
+DlgDocMargins		: "Margin Muka Surat",
+DlgDocMaTop			: "Atas",
+DlgDocMaLeft		: "Kiri",
+DlgDocMaRight		: "Kanan",
+DlgDocMaBottom		: "Bawah",
+DlgDocMeIndex		: "Kata Kunci Indeks Dokumen (dipisahkan oleh koma)",
+DlgDocMeDescr		: "Keterangan Dokumen",
+DlgDocMeAuthor		: "Penulis",
+DlgDocMeCopy		: "Hakcipta",
+DlgDocPreview		: "Prebiu",
+
+// Templates Dialog
+Templates			: "Templat",
+DlgTemplatesTitle	: "Templat Kandungan",
+DlgTemplatesSelMsg	: "Sila pilih templat untuk dibuka oleh editor<br>(kandungan sebenar akan hilang):",
+DlgTemplatesLoading	: "Senarai Templat sedang diproses. Sila Tunggu...",
+DlgTemplatesNoTpl	: "(Tiada Templat Disimpan)",
+DlgTemplatesReplace	: "Replace actual contents",	//MISSING
+
+// About Dialog
+DlgAboutAboutTab	: "Tentang",
+DlgAboutBrowserInfoTab	: "Maklumat Perisian Browser",
+DlgAboutLicenseTab	: "License",	//MISSING
+DlgAboutVersion		: "versi",
+DlgAboutInfo		: "Untuk maklumat lanjut sila pergi ke"
+};


Property changes on: announcement/trunk/src/main/webapp/fckeditor/editor/lang/ms.js
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/webapp/fckeditor/editor/lang/nb.js
===================================================================
--- announcement/trunk/src/main/webapp/fckeditor/editor/lang/nb.js	                        (rev 0)
+++ announcement/trunk/src/main/webapp/fckeditor/editor/lang/nb.js	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,515 @@
+/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2008 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * Norwegian Bokmål language file.
+ */
+
+var FCKLang =
+{
+// Language direction : "ltr" (left to right) or "rtl" (right to left).
+Dir					: "ltr",
+
+ToolbarCollapse		: "Skjul verktøylinje",
+ToolbarExpand		: "Vis verktøylinje",
+
+// Toolbar Items and Context Menu
+Save				: "Lagre",
+NewPage				: "Ny Side",
+Preview				: "Forhåndsvis",
+Cut					: "Klipp ut",
+Copy				: "Kopier",
+Paste				: "Lim inn",
+PasteText			: "Lim inn som ren tekst",
+PasteWord			: "Lim inn fra Word",
+Print				: "Skriv ut",
+SelectAll			: "Merk alt",
+RemoveFormat		: "Fjern format",
+InsertLinkLbl		: "Lenke",
+InsertLink			: "Sett inn/Rediger lenke",
+RemoveLink			: "Fjern lenke",
+Anchor				: "Sett inn/Rediger anker",
+AnchorDelete		: "Remove Anchor",	//MISSING
+InsertImageLbl		: "Bilde",
+InsertImage			: "Sett inn/Rediger bilde",
+InsertFlashLbl		: "Flash",
+InsertFlash			: "Sett inn/Rediger Flash",
+InsertTableLbl		: "Tabell",
+InsertTable			: "Sett inn/Rediger tabell",
+InsertLineLbl		: "Linje",
+InsertLine			: "Sett inn horisontal linje",
+InsertSpecialCharLbl: "Spesielt tegn",
+InsertSpecialChar	: "Sett inn spesielt tegn",
+InsertSmileyLbl		: "Smil",
+InsertSmiley		: "Sett inn smil",
+About				: "Om FCKeditor",
+Bold				: "Fet",
+Italic				: "Kursiv",
+Underline			: "Understrek",
+StrikeThrough		: "Gjennomstrek",
+Subscript			: "Senket skrift",
+Superscript			: "Hevet skrift",
+LeftJustify			: "Venstrejuster",
+CenterJustify		: "Midtjuster",
+RightJustify		: "Høyrejuster",
+BlockJustify		: "Blokkjuster",
+DecreaseIndent		: "Senk nivå",
+IncreaseIndent		: "Øk nivå",
+Blockquote			: "Blockquote",	//MISSING
+Undo				: "Angre",
+Redo				: "Gjør om",
+NumberedListLbl		: "Numrert liste",
+NumberedList		: "Sett inn/Fjern numrert liste",
+BulletedListLbl		: "Uordnet liste",
+BulletedList		: "Sett inn/Fjern uordnet liste",
+ShowTableBorders	: "Vis tabellrammer",
+ShowDetails			: "Vis detaljer",
+Style				: "Stil",
+FontFormat			: "Format",
+Font				: "Skrift",
+FontSize			: "Størrelse",
+TextColor			: "Tekstfarge",
+BGColor				: "Bakgrunnsfarge",
+Source				: "Kilde",
+Find				: "Finn",
+Replace				: "Erstatt",
+SpellCheck			: "Stavekontroll",
+UniversalKeyboard	: "Universelt tastatur",
+PageBreakLbl		: "Sideskift",
+PageBreak			: "Sett inn sideskift",
+
+Form			: "Skjema",
+Checkbox		: "Sjekkboks",
+RadioButton		: "Radioknapp",
+TextField		: "Tekstfelt",
+Textarea		: "Tekstområde",
+HiddenField		: "Skjult felt",
+Button			: "Knapp",
+SelectionField	: "Dropdown meny",
+ImageButton		: "Bildeknapp",
+
+FitWindow		: "Maksimer størrelsen på redigeringsverktøyet",
+ShowBlocks		: "Show Blocks",	//MISSING
+
+// Context Menu
+EditLink			: "Rediger lenke",
+CellCM				: "Celle",
+RowCM				: "Rader",
+ColumnCM			: "Kolonne",
+InsertRowAfter		: "Insert Row After",	//MISSING
+InsertRowBefore		: "Insert Row Before",	//MISSING
+DeleteRows			: "Slett rader",
+InsertColumnAfter	: "Insert Column After",	//MISSING
+InsertColumnBefore	: "Insert Column Before",	//MISSING
+DeleteColumns		: "Slett kolonner",
+InsertCellAfter		: "Insert Cell After",	//MISSING
+InsertCellBefore	: "Insert Cell Before",	//MISSING
+DeleteCells			: "Slett celler",
+MergeCells			: "Slå sammen celler",
+MergeRight			: "Merge Right",	//MISSING
+MergeDown			: "Merge Down",	//MISSING
+HorizontalSplitCell	: "Split Cell Horizontally",	//MISSING
+VerticalSplitCell	: "Split Cell Vertically",	//MISSING
+TableDelete			: "Slett tabell",
+CellProperties		: "Celleegenskaper",
+TableProperties		: "Tabellegenskaper",
+ImageProperties		: "Bildeegenskaper",
+FlashProperties		: "Flash Egenskaper",
+
+AnchorProp			: "Ankeregenskaper",
+ButtonProp			: "Knappegenskaper",
+CheckboxProp		: "Sjekkboksegenskaper",
+HiddenFieldProp		: "Skjult felt egenskaper",
+RadioButtonProp		: "Radioknappegenskaper",
+ImageButtonProp		: "Bildeknappegenskaper",
+TextFieldProp		: "Tekstfeltegenskaper",
+SelectionFieldProp	: "Dropdown menyegenskaper",
+TextareaProp		: "Tekstfeltegenskaper",
+FormProp			: "Skjemaegenskaper",
+
+FontFormats			: "Normal;Formatert;Adresse;Tittel 1;Tittel 2;Tittel 3;Tittel 4;Tittel 5;Tittel 6;Normal (DIV)",
+
+// Alerts and Messages
+ProcessingXHTML		: "Lager XHTML. Vennligst vent...",
+Done				: "Ferdig",
+PasteWordConfirm	: "Teksten du prøver å lime inn ser ut som om den kommer fra word , du bør rense den før du limer inn , vil du gjøre dette?",
+NotCompatiblePaste	: "Denne kommandoen er tilgjenglig kun for Internet Explorer version 5.5 eller bedre. Vil du fortsette uten å rense?(Du kan lime inn som ren tekst)",
+UnknownToolbarItem	: "Ukjent menyvalg \"%1\"",
+UnknownCommand		: "Ukjent kommando \"%1\"",
+NotImplemented		: "Kommando ikke ennå implimentert",
+UnknownToolbarSet	: "Verktøylinjesett \"%1\" finnes ikke",
+NoActiveX			: "Din nettleser's sikkerhetsinstillinger kan begrense noen av funksjonene i redigeringsverktøyet. Du må aktivere \"Kjør ActiveXkontroller og plugins\". Du kan oppleve feil og advarsler om manglende funksjoner",
+BrowseServerBlocked : "Kunne ikke åpne dialogboksen for filarkiv. Pass på at du har slått av popupstoppere.",
+DialogBlocked		: "Kunne ikke åpne dialogboksen. Pass på at du har slått av popupstoppere.",
+
+// Dialogs
+DlgBtnOK			: "OK",
+DlgBtnCancel		: "Avbryt",
+DlgBtnClose			: "Lukk",
+DlgBtnBrowseServer	: "Bla igjennom server",
+DlgAdvancedTag		: "Avansert",
+DlgOpOther			: "<Annet>",
+DlgInfoTab			: "Info",
+DlgAlertUrl			: "Vennligst skriv inn URL'en",
+
+// General Dialogs Labels
+DlgGenNotSet		: "<ikke satt>",
+DlgGenId			: "Id",
+DlgGenLangDir		: "Språkretning",
+DlgGenLangDirLtr	: "Venstre til høyre (VTH)",
+DlgGenLangDirRtl	: "Høyre til venstre (HTV)",
+DlgGenLangCode		: "Språk kode",
+DlgGenAccessKey		: "Aksessknapp",
+DlgGenName			: "Navn",
+DlgGenTabIndex		: "Tab Indeks",
+DlgGenLongDescr		: "Utvidet beskrivelse",
+DlgGenClass			: "Stilarkklasser",
+DlgGenTitle			: "Tittel",
+DlgGenContType		: "Type",
+DlgGenLinkCharset	: "Lenket språkkart",
+DlgGenStyle			: "Stil",
+
+// Image Dialog
+DlgImgTitle			: "Bildeegenskaper",
+DlgImgInfoTab		: "Bildeinformasjon",
+DlgImgBtnUpload		: "Send det til serveren",
+DlgImgURL			: "URL",
+DlgImgUpload		: "Last opp",
+DlgImgAlt			: "Alternativ tekst",
+DlgImgWidth			: "Bredde",
+DlgImgHeight		: "Høyde",
+DlgImgLockRatio		: "Lås forhold",
+DlgBtnResetSize		: "Tilbakestill størrelse",
+DlgImgBorder		: "Ramme",
+DlgImgHSpace		: "HMarg",
+DlgImgVSpace		: "VMarg",
+DlgImgAlign			: "Juster",
+DlgImgAlignLeft		: "Venstre",
+DlgImgAlignAbsBottom: "Abs bunn",
+DlgImgAlignAbsMiddle: "Abs midten",
+DlgImgAlignBaseline	: "Bunnlinje",
+DlgImgAlignBottom	: "Bunn",
+DlgImgAlignMiddle	: "Midten",
+DlgImgAlignRight	: "Høyre",
+DlgImgAlignTextTop	: "Tekst topp",
+DlgImgAlignTop		: "Topp",
+DlgImgPreview		: "Forhåndsvis",
+DlgImgAlertUrl		: "Vennligst skriv bildeurlen",
+DlgImgLinkTab		: "Lenke",
+
+// Flash Dialog
+DlgFlashTitle		: "Flash Egenskaper",
+DlgFlashChkPlay		: "Auto Spill",
+DlgFlashChkLoop		: "Loop",
+DlgFlashChkMenu		: "Slå på Flash meny",
+DlgFlashScale		: "Skaler",
+DlgFlashScaleAll	: "Vis alt",
+DlgFlashScaleNoBorder	: "Ingen ramme",
+DlgFlashScaleFit	: "Skaler til å passeExact Fit",
+
+// Link Dialog
+DlgLnkWindowTitle	: "Lenke",
+DlgLnkInfoTab		: "Lenkeinfo",
+DlgLnkTargetTab		: "Mål",
+
+DlgLnkType			: "Lenketype",
+DlgLnkTypeURL		: "URL",
+DlgLnkTypeAnchor	: "Lenke til anker i teksten",
+DlgLnkTypeEMail		: "E-post",
+DlgLnkProto			: "Protokoll",
+DlgLnkProtoOther	: "<annet>",
+DlgLnkURL			: "URL",
+DlgLnkAnchorSel		: "Velg ett anker",
+DlgLnkAnchorByName	: "Anker etter navn",
+DlgLnkAnchorById	: "Element etter ID",
+DlgLnkNoAnchors		: "(Ingen anker i dokumentet)",
+DlgLnkEMail			: "E-postadresse",
+DlgLnkEMailSubject	: "Meldingsemne",
+DlgLnkEMailBody		: "Melding",
+DlgLnkUpload		: "Last opp",
+DlgLnkBtnUpload		: "Send til server",
+
+DlgLnkTarget		: "Mål",
+DlgLnkTargetFrame	: "<ramme>",
+DlgLnkTargetPopup	: "<popup vindu>",
+DlgLnkTargetBlank	: "Nytt vindu (_blank)",
+DlgLnkTargetParent	: "Foreldre vindu (_parent)",
+DlgLnkTargetSelf	: "Samme vindu (_self)",
+DlgLnkTargetTop		: "Hele vindu (_top)",
+DlgLnkTargetFrameName	: "Målramme",
+DlgLnkPopWinName	: "Popup vindus navn",
+DlgLnkPopWinFeat	: "Popup vindus egenskaper",
+DlgLnkPopResize		: "Endre størrelse",
+DlgLnkPopLocation	: "Adresselinje",
+DlgLnkPopMenu		: "Menylinje",
+DlgLnkPopScroll		: "Scrollbar",
+DlgLnkPopStatus		: "Statuslinje",
+DlgLnkPopToolbar	: "Verktøylinje",
+DlgLnkPopFullScrn	: "Full skjerm (IE)",
+DlgLnkPopDependent	: "Avhenging (Netscape)",
+DlgLnkPopWidth		: "Bredde",
+DlgLnkPopHeight		: "Høyde",
+DlgLnkPopLeft		: "Venstre posisjon",
+DlgLnkPopTop		: "Topp posisjon",
+
+DlnLnkMsgNoUrl		: "Vennligst skriv inn lenkens url",
+DlnLnkMsgNoEMail	: "Vennligst skriv inn e-postadressen",
+DlnLnkMsgNoAnchor	: "Vennligst velg ett anker",
+DlnLnkMsgInvPopName	: "Popup vinduets navn må begynne med en bokstav, og kan ikke inneholde mellomrom",
+
+// Color Dialog
+DlgColorTitle		: "Velg farge",
+DlgColorBtnClear	: "Tøm",
+DlgColorHighlight	: "Marker",
+DlgColorSelected	: "Velg",
+
+// Smiley Dialog
+DlgSmileyTitle		: "Sett inn smil",
+
+// Special Character Dialog
+DlgSpecialCharTitle	: "Velg spesielt tegn",
+
+// Table Dialog
+DlgTableTitle		: "Tabellegenskaper",
+DlgTableRows		: "Rader",
+DlgTableColumns		: "Kolonner",
+DlgTableBorder		: "Rammestørrelse",
+DlgTableAlign		: "Justering",
+DlgTableAlignNotSet	: "<Ikke satt>",
+DlgTableAlignLeft	: "Venstre",
+DlgTableAlignCenter	: "Midtjuster",
+DlgTableAlignRight	: "Høyre",
+DlgTableWidth		: "Bredde",
+DlgTableWidthPx		: "piksler",
+DlgTableWidthPc		: "prosent",
+DlgTableHeight		: "Høyde",
+DlgTableCellSpace	: "Celle marg",
+DlgTableCellPad		: "Celle polstring",
+DlgTableCaption		: "Tittel",
+DlgTableSummary		: "Sammendrag",
+
+// Table Cell Dialog
+DlgCellTitle		: "Celleegenskaper",
+DlgCellWidth		: "Bredde",
+DlgCellWidthPx		: "piksler",
+DlgCellWidthPc		: "prosent",
+DlgCellHeight		: "Høyde",
+DlgCellWordWrap		: "Tekstbrytning",
+DlgCellWordWrapNotSet	: "<Ikke satt>",
+DlgCellWordWrapYes	: "Ja",
+DlgCellWordWrapNo	: "Nei",
+DlgCellHorAlign		: "Horisontal justering",
+DlgCellHorAlignNotSet	: "<Ikke satt>",
+DlgCellHorAlignLeft	: "Venstre",
+DlgCellHorAlignCenter	: "Midtjuster",
+DlgCellHorAlignRight: "Høyre",
+DlgCellVerAlign		: "Vertikal justering",
+DlgCellVerAlignNotSet	: "<Ikke satt>",
+DlgCellVerAlignTop	: "Topp",
+DlgCellVerAlignMiddle	: "Midten",
+DlgCellVerAlignBottom	: "Bunn",
+DlgCellVerAlignBaseline	: "Bunnlinje",
+DlgCellRowSpan		: "Radspenn",
+DlgCellCollSpan		: "Kolonnespenn",
+DlgCellBackColor	: "Bakgrunnsfarge",
+DlgCellBorderColor	: "Rammefarge",
+DlgCellBtnSelect	: "Velg...",
+
+// Find and Replace Dialog
+DlgFindAndReplaceTitle	: "Find and Replace",	//MISSING
+
+// Find Dialog
+DlgFindTitle		: "Finn",
+DlgFindFindBtn		: "Finn",
+DlgFindNotFoundMsg	: "Den spesifiserte teksten ble ikke funnet.",
+
+// Replace Dialog
+DlgReplaceTitle			: "Erstatt",
+DlgReplaceFindLbl		: "Finn hva:",
+DlgReplaceReplaceLbl	: "Erstatt med:",
+DlgReplaceCaseChk		: "Riktig case",
+DlgReplaceReplaceBtn	: "Erstatt",
+DlgReplaceReplAllBtn	: "Erstatt alle",
+DlgReplaceWordChk		: "Finn hele ordet",
+
+// Paste Operations / Dialog
+PasteErrorCut	: "Din nettlesers sikkerhetsinstillinger tillater ikke automatisk klipping av tekst. Vennligst brukt snareveien (Ctrl+X).",
+PasteErrorCopy	: "Din nettlesers sikkerhetsinstillinger tillater ikke automatisk kopiering av tekst. Vennligst brukt snareveien (Ctrl+C).",
+
+PasteAsText		: "Lim inn som ren tekst",
+PasteFromWord	: "Lim inn fra word",
+
+DlgPasteMsg2	: "Vennligst lim inn i den følgende boksen med tastaturet (<STRONG>Ctrl+V</STRONG>) og trykk <STRONG>OK</STRONG>.",
+DlgPasteSec		: "Because of your browser security settings, the editor is not able to access your clipboard data directly. You are required to paste it again in this window.",	//MISSING
+DlgPasteIgnoreFont		: "Fjern skrifttyper",
+DlgPasteRemoveStyles	: "Fjern stildefinisjoner",
+
+// Color Picker
+ColorAutomatic	: "Automatisk",
+ColorMoreColors	: "Flere farger...",
+
+// Document Properties
+DocProps		: "Dokumentegenskaper",
+
+// Anchor Dialog
+DlgAnchorTitle		: "Ankeregenskaper",
+DlgAnchorName		: "Ankernavn",
+DlgAnchorErrorName	: "Vennligst skriv inn ankernavnet",
+
+// Speller Pages Dialog
+DlgSpellNotInDic		: "Ikke i ordboken",
+DlgSpellChangeTo		: "Endre til",
+DlgSpellBtnIgnore		: "Ignorer",
+DlgSpellBtnIgnoreAll	: "Ignorer alle",
+DlgSpellBtnReplace		: "Erstatt",
+DlgSpellBtnReplaceAll	: "Erstatt alle",
+DlgSpellBtnUndo			: "Angre",
+DlgSpellNoSuggestions	: "- ingen forslag -",
+DlgSpellProgress		: "Stavekontroll pågår...",
+DlgSpellNoMispell		: "Stavekontroll fullført: ingen feilstavinger funnet",
+DlgSpellNoChanges		: "Stavekontroll fullført: ingen ord endret",
+DlgSpellOneChange		: "Stavekontroll fullført: Ett ord endret",
+DlgSpellManyChanges		: "Stavekontroll fullført: %1 ord endret",
+
+IeSpellDownload			: "Stavekontroll ikke installert, vil du laste den ned nå?",
+
+// Button Dialog
+DlgButtonText		: "Tekst",
+DlgButtonType		: "Type",
+DlgButtonTypeBtn	: "Knapp",
+DlgButtonTypeSbm	: "Send",
+DlgButtonTypeRst	: "Nullstill",
+
+// Checkbox and Radio Button Dialogs
+DlgCheckboxName		: "Navn",
+DlgCheckboxValue	: "Verdi",
+DlgCheckboxSelected	: "Valgt",
+
+// Form Dialog
+DlgFormName		: "Navn",
+DlgFormAction	: "Handling",
+DlgFormMethod	: "Metode",
+
+// Select Field Dialog
+DlgSelectName		: "Navn",
+DlgSelectValue		: "Verdi",
+DlgSelectSize		: "Størrelse",
+DlgSelectLines		: "Linjer",
+DlgSelectChkMulti	: "Tillat flervalg",
+DlgSelectOpAvail	: "Tilgjenglige alternativer",
+DlgSelectOpText		: "Tekst",
+DlgSelectOpValue	: "Verdi",
+DlgSelectBtnAdd		: "Legg til",
+DlgSelectBtnModify	: "Endre",
+DlgSelectBtnUp		: "Opp",
+DlgSelectBtnDown	: "Ned",
+DlgSelectBtnSetValue : "Sett som valgt",
+DlgSelectBtnDelete	: "Slett",
+
+// Textarea Dialog
+DlgTextareaName	: "Navn",
+DlgTextareaCols	: "Kolonner",
+DlgTextareaRows	: "Rader",
+
+// Text Field Dialog
+DlgTextName			: "Navn",
+DlgTextValue		: "verdi",
+DlgTextCharWidth	: "Tegnbredde",
+DlgTextMaxChars		: "Maks antall tegn",
+DlgTextType			: "Type",
+DlgTextTypeText		: "Tekst",
+DlgTextTypePass		: "Passord",
+
+// Hidden Field Dialog
+DlgHiddenName	: "Navn",
+DlgHiddenValue	: "Verdi",
+
+// Bulleted List Dialog
+BulletedListProp	: "Uordnet listeegenskaper",
+NumberedListProp	: "Ordnet listeegenskaper",
+DlgLstStart			: "Start",
+DlgLstType			: "Type",
+DlgLstTypeCircle	: "Sirkel",
+DlgLstTypeDisc		: "Hel sirkel",
+DlgLstTypeSquare	: "Firkant",
+DlgLstTypeNumbers	: "Numre(1, 2, 3)",
+DlgLstTypeLCase		: "Små bokstaver (a, b, c)",
+DlgLstTypeUCase		: "Store bokstaver(A, B, C)",
+DlgLstTypeSRoman	: "Små romerske tall(i, ii, iii)",
+DlgLstTypeLRoman	: "Store romerske tall(I, II, III)",
+
+// Document Properties Dialog
+DlgDocGeneralTab	: "Generalt",
+DlgDocBackTab		: "Bakgrunn",
+DlgDocColorsTab		: "Farger og marginer",
+DlgDocMetaTab		: "Meta Data",
+
+DlgDocPageTitle		: "Sidetittel",
+DlgDocLangDir		: "Språkretning",
+DlgDocLangDirLTR	: "Venstre til høyre (LTR)",
+DlgDocLangDirRTL	: "Høyre til venstre (RTL)",
+DlgDocLangCode		: "Språkkode",
+DlgDocCharSet		: "Tegnsett",
+DlgDocCharSetCE		: "Sentraleuropeisk",
+DlgDocCharSetCT		: "Tradisonell kinesisk(Big5)",
+DlgDocCharSetCR		: "Cyrillic",
+DlgDocCharSetGR		: "Gresk",
+DlgDocCharSetJP		: "Japansk",
+DlgDocCharSetKR		: "Koreansk",
+DlgDocCharSetTR		: "Tyrkisk",
+DlgDocCharSetUN		: "Unikode (UTF-8)",
+DlgDocCharSetWE		: "Vesteuropeisk",
+DlgDocCharSetOther	: "Annet tegnsett",
+
+DlgDocDocType		: "Dokumenttype header",
+DlgDocDocTypeOther	: "Annet dokumenttype header",
+DlgDocIncXHTML		: "Inkulder XHTML deklarasjon",
+DlgDocBgColor		: "Bakgrunnsfarge",
+DlgDocBgImage		: "Bakgrunnsbilde url",
+DlgDocBgNoScroll	: "Ikke scroll bakgrunnsbilde",
+DlgDocCText			: "Tekst",
+DlgDocCLink			: "Link",
+DlgDocCVisited		: "Besøkt lenke",
+DlgDocCActive		: "Aktiv lenke",
+DlgDocMargins		: "Sidemargin",
+DlgDocMaTop			: "Topp",
+DlgDocMaLeft		: "Venstre",
+DlgDocMaRight		: "Høyre",
+DlgDocMaBottom		: "Bunn",
+DlgDocMeIndex		: "Dokument nøkkelord (kommaseparert)",
+DlgDocMeDescr		: "Dokumentbeskrivelse",
+DlgDocMeAuthor		: "Forfatter",
+DlgDocMeCopy		: "Kopirett",
+DlgDocPreview		: "Forhåndsvising",
+
+// Templates Dialog
+Templates			: "Maler",
+DlgTemplatesTitle	: "Innholdsmaler",
+DlgTemplatesSelMsg	: "Velg malen du vil åpne<br>(innholdet du har skrevet blir tapt!):",
+DlgTemplatesLoading	: "Laster malliste. Vennligst vent...",
+DlgTemplatesNoTpl	: "(Ingen maler definert)",
+DlgTemplatesReplace	: "Erstatt faktisk innold",
+
+// About Dialog
+DlgAboutAboutTab	: "Om",
+DlgAboutBrowserInfoTab	: "Nettleserinfo",
+DlgAboutLicenseTab	: "Lisens",
+DlgAboutVersion		: "versjon",
+DlgAboutInfo		: "For further information go to"	//MISSING
+};


Property changes on: announcement/trunk/src/main/webapp/fckeditor/editor/lang/nb.js
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/webapp/fckeditor/editor/lang/nl.js
===================================================================
--- announcement/trunk/src/main/webapp/fckeditor/editor/lang/nl.js	                        (rev 0)
+++ announcement/trunk/src/main/webapp/fckeditor/editor/lang/nl.js	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,515 @@
+/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2008 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * Dutch language file.
+ */
+
+var FCKLang =
+{
+// Language direction : "ltr" (left to right) or "rtl" (right to left).
+Dir					: "ltr",
+
+ToolbarCollapse		: "Menubalk inklappen",
+ToolbarExpand		: "Menubalk uitklappen",
+
+// Toolbar Items and Context Menu
+Save				: "Opslaan",
+NewPage				: "Nieuwe pagina",
+Preview				: "Voorbeeld",
+Cut					: "Knippen",
+Copy				: "Kopiëren",
+Paste				: "Plakken",
+PasteText			: "Plakken als platte tekst",
+PasteWord			: "Plakken als Word-gegevens",
+Print				: "Printen",
+SelectAll			: "Alles selecteren",
+RemoveFormat		: "Opmaak verwijderen",
+InsertLinkLbl		: "Link",
+InsertLink			: "Link invoegen/wijzigen",
+RemoveLink			: "Link verwijderen",
+Anchor				: "Interne link",
+AnchorDelete		: "Anker verwijderen",
+InsertImageLbl		: "Afbeelding",
+InsertImage			: "Afbeelding invoegen/wijzigen",
+InsertFlashLbl		: "Flash",
+InsertFlash			: "Flash invoegen/wijzigen",
+InsertTableLbl		: "Tabel",
+InsertTable			: "Tabel invoegen/wijzigen",
+InsertLineLbl		: "Lijn",
+InsertLine			: "Horizontale lijn invoegen",
+InsertSpecialCharLbl: "Speciale tekens",
+InsertSpecialChar	: "Speciaal teken invoegen",
+InsertSmileyLbl		: "Smiley",
+InsertSmiley		: "Smiley invoegen",
+About				: "Over FCKeditor",
+Bold				: "Vet",
+Italic				: "Schuingedrukt",
+Underline			: "Onderstreept",
+StrikeThrough		: "Doorhalen",
+Subscript			: "Subscript",
+Superscript			: "Superscript",
+LeftJustify			: "Links uitlijnen",
+CenterJustify		: "Centreren",
+RightJustify		: "Rechts uitlijnen",
+BlockJustify		: "Uitvullen",
+DecreaseIndent		: "Inspringen verkleinen",
+IncreaseIndent		: "Inspringen vergroten",
+Blockquote			: "Citaatblok",
+Undo				: "Ongedaan maken",
+Redo				: "Opnieuw uitvoeren",
+NumberedListLbl		: "Genummerde lijst",
+NumberedList		: "Genummerde lijst invoegen/verwijderen",
+BulletedListLbl		: "Opsomming",
+BulletedList		: "Opsomming invoegen/verwijderen",
+ShowTableBorders	: "Randen tabel weergeven",
+ShowDetails			: "Details weergeven",
+Style				: "Stijl",
+FontFormat			: "Opmaak",
+Font				: "Lettertype",
+FontSize			: "Grootte",
+TextColor			: "Tekstkleur",
+BGColor				: "Achtergrondkleur",
+Source				: "Code",
+Find				: "Zoeken",
+Replace				: "Vervangen",
+SpellCheck			: "Spellingscontrole",
+UniversalKeyboard	: "Universeel toetsenbord",
+PageBreakLbl		: "Pagina-einde",
+PageBreak			: "Pagina-einde invoegen",
+
+Form			: "Formulier",
+Checkbox		: "Aanvinkvakje",
+RadioButton		: "Selectievakje",
+TextField		: "Tekstveld",
+Textarea		: "Tekstvak",
+HiddenField		: "Verborgen veld",
+Button			: "Knop",
+SelectionField	: "Selectieveld",
+ImageButton		: "Afbeeldingsknop",
+
+FitWindow		: "De editor maximaliseren",
+ShowBlocks		: "Toon blokken",
+
+// Context Menu
+EditLink			: "Link wijzigen",
+CellCM				: "Cel",
+RowCM				: "Rij",
+ColumnCM			: "Kolom",
+InsertRowAfter		: "Voeg rij in achter",
+InsertRowBefore		: "Voeg rij in voor",
+DeleteRows			: "Rijen verwijderen",
+InsertColumnAfter	: "Voeg kolom in achter",
+InsertColumnBefore	: "Voeg kolom in voor",
+DeleteColumns		: "Kolommen verwijderen",
+InsertCellAfter		: "Voeg cel in achter",
+InsertCellBefore	: "Voeg cel in voor",
+DeleteCells			: "Cellen verwijderen",
+MergeCells			: "Cellen samenvoegen",
+MergeRight			: "Voeg samen naar rechts",
+MergeDown			: "Voeg samen naar beneden",
+HorizontalSplitCell	: "Splits cellen horizontaal",
+VerticalSplitCell	: "Splits cellen verticaal",
+TableDelete			: "Tabel verwijderen",
+CellProperties		: "Eigenschappen cel",
+TableProperties		: "Eigenschappen tabel",
+ImageProperties		: "Eigenschappen afbeelding",
+FlashProperties		: "Eigenschappen Flash",
+
+AnchorProp			: "Eigenschappen interne link",
+ButtonProp			: "Eigenschappen knop",
+CheckboxProp		: "Eigenschappen aanvinkvakje",
+HiddenFieldProp		: "Eigenschappen verborgen veld",
+RadioButtonProp		: "Eigenschappen selectievakje",
+ImageButtonProp		: "Eigenschappen afbeeldingsknop",
+TextFieldProp		: "Eigenschappen tekstveld",
+SelectionFieldProp	: "Eigenschappen selectieveld",
+TextareaProp		: "Eigenschappen tekstvak",
+FormProp			: "Eigenschappen formulier",
+
+FontFormats			: "Normaal;Met opmaak;Adres;Kop 1;Kop 2;Kop 3;Kop 4;Kop 5;Kop 6;Normaal (DIV)",
+
+// Alerts and Messages
+ProcessingXHTML		: "Bezig met verwerken XHTML. Even geduld aub...",
+Done				: "Klaar",
+PasteWordConfirm	: "De tekst die je plakte lijkt gekopieerd uit te zijn Word. Wil je de tekst opschonen voordat deze geplakt wordt?",
+NotCompatiblePaste	: "Deze opdracht is beschikbaar voor Internet Explorer versie 5.5 of hoger. Wil je plakken zonder op te schonen?",
+UnknownToolbarItem	: "Onbekend item op menubalk \"%1\"",
+UnknownCommand		: "Onbekende opdrachtnaam: \"%1\"",
+NotImplemented		: "Opdracht niet geïmplementeerd.",
+UnknownToolbarSet	: "Menubalk \"%1\" bestaat niet.",
+NoActiveX			: "De beveilingsinstellingen van je browser zouden sommige functies van de editor kunnen beperken. De optie \"Activeer ActiveX-elementen en plug-ins\" dient ingeschakeld te worden. Het kan zijn dat er nu functies ontbreken of niet werken.",
+BrowseServerBlocked : "De bestandsbrowser kon niet geopend worden. Zorg ervoor dat pop-up-blokkeerders uit staan.",
+DialogBlocked		: "Kan het dialoogvenster niet weergeven. Zorg ervoor dat pop-up-blokkeerders uit staan.",
+
+// Dialogs
+DlgBtnOK			: "OK",
+DlgBtnCancel		: "Annuleren",
+DlgBtnClose			: "Afsluiten",
+DlgBtnBrowseServer	: "Bladeren op server",
+DlgAdvancedTag		: "Geavanceerd",
+DlgOpOther			: "<Anders>",
+DlgInfoTab			: "Informatie",
+DlgAlertUrl			: "Geef URL op",
+
+// General Dialogs Labels
+DlgGenNotSet		: "<niet ingevuld>",
+DlgGenId			: "Kenmerk",
+DlgGenLangDir		: "Schrijfrichting",
+DlgGenLangDirLtr	: "Links naar rechts (LTR)",
+DlgGenLangDirRtl	: "Rechts naar links (RTL)",
+DlgGenLangCode		: "Taalcode",
+DlgGenAccessKey		: "Toegangstoets",
+DlgGenName			: "Naam",
+DlgGenTabIndex		: "Tabvolgorde",
+DlgGenLongDescr		: "Lange URL-omschrijving",
+DlgGenClass			: "Stylesheet-klassen",
+DlgGenTitle			: "Aanbevolen titel",
+DlgGenContType		: "Aanbevolen content-type",
+DlgGenLinkCharset	: "Karakterset van gelinkte bron",
+DlgGenStyle			: "Stijl",
+
+// Image Dialog
+DlgImgTitle			: "Eigenschappen afbeelding",
+DlgImgInfoTab		: "Informatie afbeelding",
+DlgImgBtnUpload		: "Naar server verzenden",
+DlgImgURL			: "URL",
+DlgImgUpload		: "Upload",
+DlgImgAlt			: "Alternatieve tekst",
+DlgImgWidth			: "Breedte",
+DlgImgHeight		: "Hoogte",
+DlgImgLockRatio		: "Afmetingen vergrendelen",
+DlgBtnResetSize		: "Afmetingen resetten",
+DlgImgBorder		: "Rand",
+DlgImgHSpace		: "HSpace",
+DlgImgVSpace		: "VSpace",
+DlgImgAlign			: "Uitlijning",
+DlgImgAlignLeft		: "Links",
+DlgImgAlignAbsBottom: "Absoluut-onder",
+DlgImgAlignAbsMiddle: "Absoluut-midden",
+DlgImgAlignBaseline	: "Basislijn",
+DlgImgAlignBottom	: "Beneden",
+DlgImgAlignMiddle	: "Midden",
+DlgImgAlignRight	: "Rechts",
+DlgImgAlignTextTop	: "Boven tekst",
+DlgImgAlignTop		: "Boven",
+DlgImgPreview		: "Voorbeeld",
+DlgImgAlertUrl		: "Geef de URL van de afbeelding",
+DlgImgLinkTab		: "Link",
+
+// Flash Dialog
+DlgFlashTitle		: "Eigenschappen Flash",
+DlgFlashChkPlay		: "Automatisch afspelen",
+DlgFlashChkLoop		: "Herhalen",
+DlgFlashChkMenu		: "Flashmenu\'s inschakelen",
+DlgFlashScale		: "Schaal",
+DlgFlashScaleAll	: "Alles tonen",
+DlgFlashScaleNoBorder	: "Geen rand",
+DlgFlashScaleFit	: "Precies passend",
+
+// Link Dialog
+DlgLnkWindowTitle	: "Link",
+DlgLnkInfoTab		: "Linkomschrijving",
+DlgLnkTargetTab		: "Doel",
+
+DlgLnkType			: "Linktype",
+DlgLnkTypeURL		: "URL",
+DlgLnkTypeAnchor	: "Interne link in pagina",
+DlgLnkTypeEMail		: "E-mail",
+DlgLnkProto			: "Protocol",
+DlgLnkProtoOther	: "<anders>",
+DlgLnkURL			: "URL",
+DlgLnkAnchorSel		: "Kies een interne link",
+DlgLnkAnchorByName	: "Op naam interne link",
+DlgLnkAnchorById	: "Op kenmerk interne link",
+DlgLnkNoAnchors		: "(Geen interne links in document gevonden)",
+DlgLnkEMail			: "E-mailadres",
+DlgLnkEMailSubject	: "Onderwerp bericht",
+DlgLnkEMailBody		: "Inhoud bericht",
+DlgLnkUpload		: "Upload",
+DlgLnkBtnUpload		: "Naar de server versturen",
+
+DlgLnkTarget		: "Doel",
+DlgLnkTargetFrame	: "<frame>",
+DlgLnkTargetPopup	: "<popup window>",
+DlgLnkTargetBlank	: "Nieuw venster (_blank)",
+DlgLnkTargetParent	: "Origineel venster (_parent)",
+DlgLnkTargetSelf	: "Zelfde venster (_self)",
+DlgLnkTargetTop		: "Hele venster (_top)",
+DlgLnkTargetFrameName	: "Naam doelframe",
+DlgLnkPopWinName	: "Naam popupvenster",
+DlgLnkPopWinFeat	: "Instellingen popupvenster",
+DlgLnkPopResize		: "Grootte wijzigen",
+DlgLnkPopLocation	: "Locatiemenu",
+DlgLnkPopMenu		: "Menubalk",
+DlgLnkPopScroll		: "Schuifbalken",
+DlgLnkPopStatus		: "Statusbalk",
+DlgLnkPopToolbar	: "Menubalk",
+DlgLnkPopFullScrn	: "Volledig scherm (IE)",
+DlgLnkPopDependent	: "Afhankelijk (Netscape)",
+DlgLnkPopWidth		: "Breedte",
+DlgLnkPopHeight		: "Hoogte",
+DlgLnkPopLeft		: "Positie links",
+DlgLnkPopTop		: "Positie boven",
+
+DlnLnkMsgNoUrl		: "Geef de link van de URL",
+DlnLnkMsgNoEMail	: "Geef een e-mailadres",
+DlnLnkMsgNoAnchor	: "Selecteer een interne link",
+DlnLnkMsgInvPopName	: "De naam van de popup moet met een alfa-numerieke waarde beginnen, en mag geen spaties bevatten.",
+
+// Color Dialog
+DlgColorTitle		: "Selecteer kleur",
+DlgColorBtnClear	: "Opschonen",
+DlgColorHighlight	: "Accentueren",
+DlgColorSelected	: "Geselecteerd",
+
+// Smiley Dialog
+DlgSmileyTitle		: "Smiley invoegen",
+
+// Special Character Dialog
+DlgSpecialCharTitle	: "Selecteer speciaal teken",
+
+// Table Dialog
+DlgTableTitle		: "Eigenschappen tabel",
+DlgTableRows		: "Rijen",
+DlgTableColumns		: "Kolommen",
+DlgTableBorder		: "Breedte rand",
+DlgTableAlign		: "Uitlijning",
+DlgTableAlignNotSet	: "<Niet ingevoerd>",
+DlgTableAlignLeft	: "Links",
+DlgTableAlignCenter	: "Centreren",
+DlgTableAlignRight	: "Rechts",
+DlgTableWidth		: "Breedte",
+DlgTableWidthPx		: "pixels",
+DlgTableWidthPc		: "procent",
+DlgTableHeight		: "Hoogte",
+DlgTableCellSpace	: "Afstand tussen cellen",
+DlgTableCellPad		: "Afstand vanaf rand cel",
+DlgTableCaption		: "Naam",
+DlgTableSummary		: "Samenvatting",
+
+// Table Cell Dialog
+DlgCellTitle		: "Eigenschappen cel",
+DlgCellWidth		: "Breedte",
+DlgCellWidthPx		: "pixels",
+DlgCellWidthPc		: "procent",
+DlgCellHeight		: "Hoogte",
+DlgCellWordWrap		: "Afbreken woorden",
+DlgCellWordWrapNotSet	: "<Niet ingevoerd>",
+DlgCellWordWrapYes	: "Ja",
+DlgCellWordWrapNo	: "Nee",
+DlgCellHorAlign		: "Horizontale uitlijning",
+DlgCellHorAlignNotSet	: "<Niet ingevoerd>",
+DlgCellHorAlignLeft	: "Links",
+DlgCellHorAlignCenter	: "Centreren",
+DlgCellHorAlignRight: "Rechts",
+DlgCellVerAlign		: "Verticale uitlijning",
+DlgCellVerAlignNotSet	: "<Niet ingevoerd>",
+DlgCellVerAlignTop	: "Boven",
+DlgCellVerAlignMiddle	: "Midden",
+DlgCellVerAlignBottom	: "Beneden",
+DlgCellVerAlignBaseline	: "Basislijn",
+DlgCellRowSpan		: "Overkoepeling rijen",
+DlgCellCollSpan		: "Overkoepeling kolommen",
+DlgCellBackColor	: "Achtergrondkleur",
+DlgCellBorderColor	: "Randkleur",
+DlgCellBtnSelect	: "Selecteren...",
+
+// Find and Replace Dialog
+DlgFindAndReplaceTitle	: "Zoeken en vervangen",
+
+// Find Dialog
+DlgFindTitle		: "Zoeken",
+DlgFindFindBtn		: "Zoeken",
+DlgFindNotFoundMsg	: "De opgegeven tekst is niet gevonden.",
+
+// Replace Dialog
+DlgReplaceTitle			: "Vervangen",
+DlgReplaceFindLbl		: "Zoeken naar:",
+DlgReplaceReplaceLbl	: "Vervangen met:",
+DlgReplaceCaseChk		: "Hoofdlettergevoelig",
+DlgReplaceReplaceBtn	: "Vervangen",
+DlgReplaceReplAllBtn	: "Alles vervangen",
+DlgReplaceWordChk		: "Hele woord moet voorkomen",
+
+// Paste Operations / Dialog
+PasteErrorCut	: "De beveiligingsinstelling van de browser verhinderen het automatisch knippen. Gebruik de sneltoets Ctrl+X van het toetsenbord.",
+PasteErrorCopy	: "De beveiligingsinstelling van de browser verhinderen het automatisch kopiëren. Gebruik de sneltoets Ctrl+C van het toetsenbord.",
+
+PasteAsText		: "Plakken als platte tekst",
+PasteFromWord	: "Plakken als Word-gegevens",
+
+DlgPasteMsg2	: "Plak de tekst in het volgende vak gebruik makend van je toetstenbord (<strong>Ctrl+V</strong>) en klik op <strong>OK</strong>.",
+DlgPasteSec		: "Door de beveiligingsinstellingen van uw browser is het niet mogelijk om direct vanuit het klembord in de editor te plakken. Middels opnieuw plakken in dit venster kunt u de tekst alsnog plakken in de editor.",
+DlgPasteIgnoreFont		: "Negeer \"Font Face\"-definities",
+DlgPasteRemoveStyles	: "Verwijder \"Style\"-definities",
+
+// Color Picker
+ColorAutomatic	: "Automatisch",
+ColorMoreColors	: "Meer kleuren...",
+
+// Document Properties
+DocProps		: "Eigenschappen document",
+
+// Anchor Dialog
+DlgAnchorTitle		: "Eigenschappen interne link",
+DlgAnchorName		: "Naam interne link",
+DlgAnchorErrorName	: "Geef de naam van de interne link op",
+
+// Speller Pages Dialog
+DlgSpellNotInDic		: "Niet in het woordenboek",
+DlgSpellChangeTo		: "Wijzig in",
+DlgSpellBtnIgnore		: "Negeren",
+DlgSpellBtnIgnoreAll	: "Alles negeren",
+DlgSpellBtnReplace		: "Vervangen",
+DlgSpellBtnReplaceAll	: "Alles vervangen",
+DlgSpellBtnUndo			: "Ongedaan maken",
+DlgSpellNoSuggestions	: "-Geen suggesties-",
+DlgSpellProgress		: "Bezig met spellingscontrole...",
+DlgSpellNoMispell		: "Klaar met spellingscontrole: geen fouten gevonden",
+DlgSpellNoChanges		: "Klaar met spellingscontrole: geen woorden aangepast",
+DlgSpellOneChange		: "Klaar met spellingscontrole: één woord aangepast",
+DlgSpellManyChanges		: "Klaar met spellingscontrole: %1 woorden aangepast",
+
+IeSpellDownload			: "De spellingscontrole niet geïnstalleerd. Wil je deze nu downloaden?",
+
+// Button Dialog
+DlgButtonText		: "Tekst (waarde)",
+DlgButtonType		: "Soort",
+DlgButtonTypeBtn	: "Knop",
+DlgButtonTypeSbm	: "Versturen",
+DlgButtonTypeRst	: "Leegmaken",
+
+// Checkbox and Radio Button Dialogs
+DlgCheckboxName		: "Naam",
+DlgCheckboxValue	: "Waarde",
+DlgCheckboxSelected	: "Geselecteerd",
+
+// Form Dialog
+DlgFormName		: "Naam",
+DlgFormAction	: "Actie",
+DlgFormMethod	: "Methode",
+
+// Select Field Dialog
+DlgSelectName		: "Naam",
+DlgSelectValue		: "Waarde",
+DlgSelectSize		: "Grootte",
+DlgSelectLines		: "Regels",
+DlgSelectChkMulti	: "Gecombineerde selecties toestaan",
+DlgSelectOpAvail	: "Beschikbare opties",
+DlgSelectOpText		: "Tekst",
+DlgSelectOpValue	: "Waarde",
+DlgSelectBtnAdd		: "Toevoegen",
+DlgSelectBtnModify	: "Wijzigen",
+DlgSelectBtnUp		: "Omhoog",
+DlgSelectBtnDown	: "Omlaag",
+DlgSelectBtnSetValue : "Als geselecteerde waarde instellen",
+DlgSelectBtnDelete	: "Verwijderen",
+
+// Textarea Dialog
+DlgTextareaName	: "Naam",
+DlgTextareaCols	: "Kolommen",
+DlgTextareaRows	: "Rijen",
+
+// Text Field Dialog
+DlgTextName			: "Naam",
+DlgTextValue		: "Waarde",
+DlgTextCharWidth	: "Breedte (tekens)",
+DlgTextMaxChars		: "Maximum aantal tekens",
+DlgTextType			: "Soort",
+DlgTextTypeText		: "Tekst",
+DlgTextTypePass		: "Wachtwoord",
+
+// Hidden Field Dialog
+DlgHiddenName	: "Naam",
+DlgHiddenValue	: "Waarde",
+
+// Bulleted List Dialog
+BulletedListProp	: "Eigenschappen opsommingslijst",
+NumberedListProp	: "Eigenschappen genummerde opsommingslijst",
+DlgLstStart			: "Start",
+DlgLstType			: "Soort",
+DlgLstTypeCircle	: "Cirkel",
+DlgLstTypeDisc		: "Schijf",
+DlgLstTypeSquare	: "Vierkant",
+DlgLstTypeNumbers	: "Nummers (1, 2, 3)",
+DlgLstTypeLCase		: "Kleine letters (a, b, c)",
+DlgLstTypeUCase		: "Hoofdletters (A, B, C)",
+DlgLstTypeSRoman	: "Klein Romeins (i, ii, iii)",
+DlgLstTypeLRoman	: "Groot Romeins (I, II, III)",
+
+// Document Properties Dialog
+DlgDocGeneralTab	: "Algemeen",
+DlgDocBackTab		: "Achtergrond",
+DlgDocColorsTab		: "Kleuring en marges",
+DlgDocMetaTab		: "META-data",
+
+DlgDocPageTitle		: "Paginatitel",
+DlgDocLangDir		: "Schrijfrichting",
+DlgDocLangDirLTR	: "Links naar rechts",
+DlgDocLangDirRTL	: "Rechts naar links",
+DlgDocLangCode		: "Taalcode",
+DlgDocCharSet		: "Karakterset-encoding",
+DlgDocCharSetCE		: "Centraal Europees",
+DlgDocCharSetCT		: "Traditioneel Chinees (Big5)",
+DlgDocCharSetCR		: "Cyriliaans",
+DlgDocCharSetGR		: "Grieks",
+DlgDocCharSetJP		: "Japans",
+DlgDocCharSetKR		: "Koreaans",
+DlgDocCharSetTR		: "Turks",
+DlgDocCharSetUN		: "Unicode (UTF-8)",
+DlgDocCharSetWE		: "West europees",
+DlgDocCharSetOther	: "Andere karakterset-encoding",
+
+DlgDocDocType		: "Opschrift documentsoort",
+DlgDocDocTypeOther	: "Ander opschrift documentsoort",
+DlgDocIncXHTML		: "XHTML-declaraties meenemen",
+DlgDocBgColor		: "Achtergrondkleur",
+DlgDocBgImage		: "URL achtergrondplaatje",
+DlgDocBgNoScroll	: "Vaste achtergrond",
+DlgDocCText			: "Tekst",
+DlgDocCLink			: "Link",
+DlgDocCVisited		: "Bezochte link",
+DlgDocCActive		: "Active link",
+DlgDocMargins		: "Afstandsinstellingen document",
+DlgDocMaTop			: "Boven",
+DlgDocMaLeft		: "Links",
+DlgDocMaRight		: "Rechts",
+DlgDocMaBottom		: "Onder",
+DlgDocMeIndex		: "Trefwoorden betreffende document (kommagescheiden)",
+DlgDocMeDescr		: "Beschrijving document",
+DlgDocMeAuthor		: "Auteur",
+DlgDocMeCopy		: "Copyright",
+DlgDocPreview		: "Voorbeeld",
+
+// Templates Dialog
+Templates			: "Sjablonen",
+DlgTemplatesTitle	: "Inhoud sjabonen",
+DlgTemplatesSelMsg	: "Selecteer het sjabloon dat in de editor geopend moet worden (de actuele inhoud gaat verloren):",
+DlgTemplatesLoading	: "Bezig met laden sjabonen. Even geduld alstublieft...",
+DlgTemplatesNoTpl	: "(Geen sjablonen gedefinieerd)",
+DlgTemplatesReplace	: "Vervang de huidige inhoud",
+
+// About Dialog
+DlgAboutAboutTab	: "Over",
+DlgAboutBrowserInfoTab	: "Browserinformatie",
+DlgAboutLicenseTab	: "Licentie",
+DlgAboutVersion		: "Versie",
+DlgAboutInfo		: "Voor meer informatie ga naar "
+};


Property changes on: announcement/trunk/src/main/webapp/fckeditor/editor/lang/nl.js
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/webapp/fckeditor/editor/lang/no.js
===================================================================
--- announcement/trunk/src/main/webapp/fckeditor/editor/lang/no.js	                        (rev 0)
+++ announcement/trunk/src/main/webapp/fckeditor/editor/lang/no.js	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,515 @@
+/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2008 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * Norwegian language file.
+ */
+
+var FCKLang =
+{
+// Language direction : "ltr" (left to right) or "rtl" (right to left).
+Dir					: "ltr",
+
+ToolbarCollapse		: "Skjul verktøylinje",
+ToolbarExpand		: "Vis verktøylinje",
+
+// Toolbar Items and Context Menu
+Save				: "Lagre",
+NewPage				: "Ny Side",
+Preview				: "Forhåndsvis",
+Cut					: "Klipp ut",
+Copy				: "Kopier",
+Paste				: "Lim inn",
+PasteText			: "Lim inn som ren tekst",
+PasteWord			: "Lim inn fra Word",
+Print				: "Skriv ut",
+SelectAll			: "Merk alt",
+RemoveFormat		: "Fjern format",
+InsertLinkLbl		: "Lenke",
+InsertLink			: "Sett inn/Rediger lenke",
+RemoveLink			: "Fjern lenke",
+Anchor				: "Sett inn/Rediger anker",
+AnchorDelete		: "Remove Anchor",	//MISSING
+InsertImageLbl		: "Bilde",
+InsertImage			: "Sett inn/Rediger bilde",
+InsertFlashLbl		: "Flash",
+InsertFlash			: "Sett inn/Rediger Flash",
+InsertTableLbl		: "Tabell",
+InsertTable			: "Sett inn/Rediger tabell",
+InsertLineLbl		: "Linje",
+InsertLine			: "Sett inn horisontal linje",
+InsertSpecialCharLbl: "Spesielt tegn",
+InsertSpecialChar	: "Sett inn spesielt tegn",
+InsertSmileyLbl		: "Smil",
+InsertSmiley		: "Sett inn smil",
+About				: "Om FCKeditor",
+Bold				: "Fet",
+Italic				: "Kursiv",
+Underline			: "Understrek",
+StrikeThrough		: "Gjennomstrek",
+Subscript			: "Senket skrift",
+Superscript			: "Hevet skrift",
+LeftJustify			: "Venstrejuster",
+CenterJustify		: "Midtjuster",
+RightJustify		: "Høyrejuster",
+BlockJustify		: "Blokkjuster",
+DecreaseIndent		: "Senk nivå",
+IncreaseIndent		: "Øk nivå",
+Blockquote			: "Blockquote",	//MISSING
+Undo				: "Angre",
+Redo				: "Gjør om",
+NumberedListLbl		: "Numrert liste",
+NumberedList		: "Sett inn/Fjern numrert liste",
+BulletedListLbl		: "Uordnet liste",
+BulletedList		: "Sett inn/Fjern uordnet liste",
+ShowTableBorders	: "Vis tabellrammer",
+ShowDetails			: "Vis detaljer",
+Style				: "Stil",
+FontFormat			: "Format",
+Font				: "Skrift",
+FontSize			: "Størrelse",
+TextColor			: "Tekstfarge",
+BGColor				: "Bakgrunnsfarge",
+Source				: "Kilde",
+Find				: "Finn",
+Replace				: "Erstatt",
+SpellCheck			: "Stavekontroll",
+UniversalKeyboard	: "Universelt tastatur",
+PageBreakLbl		: "Sideskift",
+PageBreak			: "Sett inn sideskift",
+
+Form			: "Skjema",
+Checkbox		: "Sjekkboks",
+RadioButton		: "Radioknapp",
+TextField		: "Tekstfelt",
+Textarea		: "Tekstområde",
+HiddenField		: "Skjult felt",
+Button			: "Knapp",
+SelectionField	: "Dropdown meny",
+ImageButton		: "Bildeknapp",
+
+FitWindow		: "Maksimer størrelsen på redigeringsverktøyet",
+ShowBlocks		: "Show Blocks",	//MISSING
+
+// Context Menu
+EditLink			: "Rediger lenke",
+CellCM				: "Celle",
+RowCM				: "Rader",
+ColumnCM			: "Kolonne",
+InsertRowAfter		: "Insert Row After",	//MISSING
+InsertRowBefore		: "Insert Row Before",	//MISSING
+DeleteRows			: "Slett rader",
+InsertColumnAfter	: "Insert Column After",	//MISSING
+InsertColumnBefore	: "Insert Column Before",	//MISSING
+DeleteColumns		: "Slett kolonner",
+InsertCellAfter		: "Insert Cell After",	//MISSING
+InsertCellBefore	: "Insert Cell Before",	//MISSING
+DeleteCells			: "Slett celler",
+MergeCells			: "Slå sammen celler",
+MergeRight			: "Merge Right",	//MISSING
+MergeDown			: "Merge Down",	//MISSING
+HorizontalSplitCell	: "Split Cell Horizontally",	//MISSING
+VerticalSplitCell	: "Split Cell Vertically",	//MISSING
+TableDelete			: "Slett tabell",
+CellProperties		: "Celleegenskaper",
+TableProperties		: "Tabellegenskaper",
+ImageProperties		: "Bildeegenskaper",
+FlashProperties		: "Flash Egenskaper",
+
+AnchorProp			: "Ankeregenskaper",
+ButtonProp			: "Knappegenskaper",
+CheckboxProp		: "Sjekkboksegenskaper",
+HiddenFieldProp		: "Skjult felt egenskaper",
+RadioButtonProp		: "Radioknappegenskaper",
+ImageButtonProp		: "Bildeknappegenskaper",
+TextFieldProp		: "Tekstfeltegenskaper",
+SelectionFieldProp	: "Dropdown menyegenskaper",
+TextareaProp		: "Tekstfeltegenskaper",
+FormProp			: "Skjemaegenskaper",
+
+FontFormats			: "Normal;Formatert;Adresse;Tittel 1;Tittel 2;Tittel 3;Tittel 4;Tittel 5;Tittel 6;Normal (DIV)",
+
+// Alerts and Messages
+ProcessingXHTML		: "Lager XHTML. Vennligst vent...",
+Done				: "Ferdig",
+PasteWordConfirm	: "Teksten du prøver å lime inn ser ut som om den kommer fra word , du bør rense den før du limer inn , vil du gjøre dette?",
+NotCompatiblePaste	: "Denne kommandoen er tilgjenglig kun for Internet Explorer version 5.5 eller bedre. Vil du fortsette uten å rense?(Du kan lime inn som ren tekst)",
+UnknownToolbarItem	: "Ukjent menyvalg \"%1\"",
+UnknownCommand		: "Ukjent kommando \"%1\"",
+NotImplemented		: "Kommando ikke ennå implimentert",
+UnknownToolbarSet	: "Verktøylinjesett \"%1\" finnes ikke",
+NoActiveX			: "Din nettleser's sikkerhetsinstillinger kan begrense noen av funksjonene i redigeringsverktøyet. Du må aktivere \"Kjør ActiveXkontroller og plugins\". Du kan oppleve feil og advarsler om manglende funksjoner",
+BrowseServerBlocked : "Kunne ikke åpne dialogboksen for filarkiv. Pass på at du har slått av popupstoppere.",
+DialogBlocked		: "Kunne ikke åpne dialogboksen. Pass på at du har slått av popupstoppere.",
+
+// Dialogs
+DlgBtnOK			: "OK",
+DlgBtnCancel		: "Avbryt",
+DlgBtnClose			: "Lukk",
+DlgBtnBrowseServer	: "Bla igjennom server",
+DlgAdvancedTag		: "Avansert",
+DlgOpOther			: "<Annet>",
+DlgInfoTab			: "Info",
+DlgAlertUrl			: "Vennligst skriv inn URL'en",
+
+// General Dialogs Labels
+DlgGenNotSet		: "<ikke satt>",
+DlgGenId			: "Id",
+DlgGenLangDir		: "Språkretning",
+DlgGenLangDirLtr	: "Venstre til høyre (VTH)",
+DlgGenLangDirRtl	: "Høyre til venstre (HTV)",
+DlgGenLangCode		: "Språk kode",
+DlgGenAccessKey		: "Aksessknapp",
+DlgGenName			: "Navn",
+DlgGenTabIndex		: "Tab Indeks",
+DlgGenLongDescr		: "Utvidet beskrivelse",
+DlgGenClass			: "Stilarkklasser",
+DlgGenTitle			: "Tittel",
+DlgGenContType		: "Type",
+DlgGenLinkCharset	: "Lenket språkkart",
+DlgGenStyle			: "Stil",
+
+// Image Dialog
+DlgImgTitle			: "Bildeegenskaper",
+DlgImgInfoTab		: "Bildeinformasjon",
+DlgImgBtnUpload		: "Send det til serveren",
+DlgImgURL			: "URL",
+DlgImgUpload		: "Last opp",
+DlgImgAlt			: "Alternativ tekst",
+DlgImgWidth			: "Bredde",
+DlgImgHeight		: "Høyde",
+DlgImgLockRatio		: "Lås forhold",
+DlgBtnResetSize		: "Tilbakestill størrelse",
+DlgImgBorder		: "Ramme",
+DlgImgHSpace		: "HMarg",
+DlgImgVSpace		: "VMarg",
+DlgImgAlign			: "Juster",
+DlgImgAlignLeft		: "Venstre",
+DlgImgAlignAbsBottom: "Abs bunn",
+DlgImgAlignAbsMiddle: "Abs midten",
+DlgImgAlignBaseline	: "Bunnlinje",
+DlgImgAlignBottom	: "Bunn",
+DlgImgAlignMiddle	: "Midten",
+DlgImgAlignRight	: "Høyre",
+DlgImgAlignTextTop	: "Tekst topp",
+DlgImgAlignTop		: "Topp",
+DlgImgPreview		: "Forhåndsvis",
+DlgImgAlertUrl		: "Vennligst skriv bildeurlen",
+DlgImgLinkTab		: "Lenke",
+
+// Flash Dialog
+DlgFlashTitle		: "Flash Egenskaper",
+DlgFlashChkPlay		: "Auto Spill",
+DlgFlashChkLoop		: "Loop",
+DlgFlashChkMenu		: "Slå på Flash meny",
+DlgFlashScale		: "Skaler",
+DlgFlashScaleAll	: "Vis alt",
+DlgFlashScaleNoBorder	: "Ingen ramme",
+DlgFlashScaleFit	: "Skaler til å passeExact Fit",
+
+// Link Dialog
+DlgLnkWindowTitle	: "Lenke",
+DlgLnkInfoTab		: "Lenkeinfo",
+DlgLnkTargetTab		: "Mål",
+
+DlgLnkType			: "Lenketype",
+DlgLnkTypeURL		: "URL",
+DlgLnkTypeAnchor	: "Lenke til anker i teksten",
+DlgLnkTypeEMail		: "E-post",
+DlgLnkProto			: "Protokoll",
+DlgLnkProtoOther	: "<annet>",
+DlgLnkURL			: "URL",
+DlgLnkAnchorSel		: "Velg ett anker",
+DlgLnkAnchorByName	: "Anker etter navn",
+DlgLnkAnchorById	: "Element etter ID",
+DlgLnkNoAnchors		: "(Ingen anker i dokumentet)",
+DlgLnkEMail			: "E-postadresse",
+DlgLnkEMailSubject	: "Meldingsemne",
+DlgLnkEMailBody		: "Melding",
+DlgLnkUpload		: "Last opp",
+DlgLnkBtnUpload		: "Send til server",
+
+DlgLnkTarget		: "Mål",
+DlgLnkTargetFrame	: "<ramme>",
+DlgLnkTargetPopup	: "<popup vindu>",
+DlgLnkTargetBlank	: "Nytt vindu (_blank)",
+DlgLnkTargetParent	: "Foreldre vindu (_parent)",
+DlgLnkTargetSelf	: "Samme vindu (_self)",
+DlgLnkTargetTop		: "Hele vindu (_top)",
+DlgLnkTargetFrameName	: "Målramme",
+DlgLnkPopWinName	: "Popup vindus navn",
+DlgLnkPopWinFeat	: "Popup vindus egenskaper",
+DlgLnkPopResize		: "Endre størrelse",
+DlgLnkPopLocation	: "Adresselinje",
+DlgLnkPopMenu		: "Menylinje",
+DlgLnkPopScroll		: "Scrollbar",
+DlgLnkPopStatus		: "Statuslinje",
+DlgLnkPopToolbar	: "Verktøylinje",
+DlgLnkPopFullScrn	: "Full skjerm (IE)",
+DlgLnkPopDependent	: "Avhenging (Netscape)",
+DlgLnkPopWidth		: "Bredde",
+DlgLnkPopHeight		: "Høyde",
+DlgLnkPopLeft		: "Venstre posisjon",
+DlgLnkPopTop		: "Topp posisjon",
+
+DlnLnkMsgNoUrl		: "Vennligst skriv inn lenkens url",
+DlnLnkMsgNoEMail	: "Vennligst skriv inn e-postadressen",
+DlnLnkMsgNoAnchor	: "Vennligst velg ett anker",
+DlnLnkMsgInvPopName	: "Popup vinduets navn må begynne med en bokstav, og kan ikke inneholde mellomrom",
+
+// Color Dialog
+DlgColorTitle		: "Velg farge",
+DlgColorBtnClear	: "Tøm",
+DlgColorHighlight	: "Marker",
+DlgColorSelected	: "Velg",
+
+// Smiley Dialog
+DlgSmileyTitle		: "Sett inn smil",
+
+// Special Character Dialog
+DlgSpecialCharTitle	: "Velg spesielt tegn",
+
+// Table Dialog
+DlgTableTitle		: "Tabellegenskaper",
+DlgTableRows		: "Rader",
+DlgTableColumns		: "Kolonner",
+DlgTableBorder		: "Rammestørrelse",
+DlgTableAlign		: "Justering",
+DlgTableAlignNotSet	: "<Ikke satt>",
+DlgTableAlignLeft	: "Venstre",
+DlgTableAlignCenter	: "Midtjuster",
+DlgTableAlignRight	: "Høyre",
+DlgTableWidth		: "Bredde",
+DlgTableWidthPx		: "piksler",
+DlgTableWidthPc		: "prosent",
+DlgTableHeight		: "Høyde",
+DlgTableCellSpace	: "Celle marg",
+DlgTableCellPad		: "Celle polstring",
+DlgTableCaption		: "Tittel",
+DlgTableSummary		: "Sammendrag",
+
+// Table Cell Dialog
+DlgCellTitle		: "Celleegenskaper",
+DlgCellWidth		: "Bredde",
+DlgCellWidthPx		: "piksler",
+DlgCellWidthPc		: "prosent",
+DlgCellHeight		: "Høyde",
+DlgCellWordWrap		: "Tekstbrytning",
+DlgCellWordWrapNotSet	: "<Ikke satt>",
+DlgCellWordWrapYes	: "Ja",
+DlgCellWordWrapNo	: "Nei",
+DlgCellHorAlign		: "Horisontal justering",
+DlgCellHorAlignNotSet	: "<Ikke satt>",
+DlgCellHorAlignLeft	: "Venstre",
+DlgCellHorAlignCenter	: "Midtjuster",
+DlgCellHorAlignRight: "Høyre",
+DlgCellVerAlign		: "Vertikal justering",
+DlgCellVerAlignNotSet	: "<Ikke satt>",
+DlgCellVerAlignTop	: "Topp",
+DlgCellVerAlignMiddle	: "Midten",
+DlgCellVerAlignBottom	: "Bunn",
+DlgCellVerAlignBaseline	: "Bunnlinje",
+DlgCellRowSpan		: "Radspenn",
+DlgCellCollSpan		: "Kolonnespenn",
+DlgCellBackColor	: "Bakgrunnsfarge",
+DlgCellBorderColor	: "Rammefarge",
+DlgCellBtnSelect	: "Velg...",
+
+// Find and Replace Dialog
+DlgFindAndReplaceTitle	: "Find and Replace",	//MISSING
+
+// Find Dialog
+DlgFindTitle		: "Finn",
+DlgFindFindBtn		: "Finn",
+DlgFindNotFoundMsg	: "Den spesifiserte teksten ble ikke funnet.",
+
+// Replace Dialog
+DlgReplaceTitle			: "Erstatt",
+DlgReplaceFindLbl		: "Finn hva:",
+DlgReplaceReplaceLbl	: "Erstatt med:",
+DlgReplaceCaseChk		: "Riktig case",
+DlgReplaceReplaceBtn	: "Erstatt",
+DlgReplaceReplAllBtn	: "Erstatt alle",
+DlgReplaceWordChk		: "Finn hele ordet",
+
+// Paste Operations / Dialog
+PasteErrorCut	: "Din nettlesers sikkerhetsinstillinger tillater ikke automatisk klipping av tekst. Vennligst brukt snareveien (Ctrl+X).",
+PasteErrorCopy	: "Din nettlesers sikkerhetsinstillinger tillater ikke automatisk kopiering av tekst. Vennligst brukt snareveien (Ctrl+C).",
+
+PasteAsText		: "Lim inn som ren tekst",
+PasteFromWord	: "Lim inn fra word",
+
+DlgPasteMsg2	: "Vennligst lim inn i den følgende boksen med tastaturet (<STRONG>Ctrl+V</STRONG>) og trykk <STRONG>OK</STRONG>.",
+DlgPasteSec		: "Because of your browser security settings, the editor is not able to access your clipboard data directly. You are required to paste it again in this window.",	//MISSING
+DlgPasteIgnoreFont		: "Fjern skrifttyper",
+DlgPasteRemoveStyles	: "Fjern stildefinisjoner",
+
+// Color Picker
+ColorAutomatic	: "Automatisk",
+ColorMoreColors	: "Flere farger...",
+
+// Document Properties
+DocProps		: "Dokumentegenskaper",
+
+// Anchor Dialog
+DlgAnchorTitle		: "Ankeregenskaper",
+DlgAnchorName		: "Ankernavn",
+DlgAnchorErrorName	: "Vennligst skriv inn ankernavnet",
+
+// Speller Pages Dialog
+DlgSpellNotInDic		: "Ikke i ordboken",
+DlgSpellChangeTo		: "Endre til",
+DlgSpellBtnIgnore		: "Ignorer",
+DlgSpellBtnIgnoreAll	: "Ignorer alle",
+DlgSpellBtnReplace		: "Erstatt",
+DlgSpellBtnReplaceAll	: "Erstatt alle",
+DlgSpellBtnUndo			: "Angre",
+DlgSpellNoSuggestions	: "- ingen forslag -",
+DlgSpellProgress		: "Stavekontroll pågår...",
+DlgSpellNoMispell		: "Stavekontroll fullført: ingen feilstavinger funnet",
+DlgSpellNoChanges		: "Stavekontroll fullført: ingen ord endret",
+DlgSpellOneChange		: "Stavekontroll fullført: Ett ord endret",
+DlgSpellManyChanges		: "Stavekontroll fullført: %1 ord endret",
+
+IeSpellDownload			: "Stavekontroll ikke installert, vil du laste den ned nå?",
+
+// Button Dialog
+DlgButtonText		: "Tekst",
+DlgButtonType		: "Type",
+DlgButtonTypeBtn	: "Knapp",
+DlgButtonTypeSbm	: "Send",
+DlgButtonTypeRst	: "Nullstill",
+
+// Checkbox and Radio Button Dialogs
+DlgCheckboxName		: "Navn",
+DlgCheckboxValue	: "Verdi",
+DlgCheckboxSelected	: "Valgt",
+
+// Form Dialog
+DlgFormName		: "Navn",
+DlgFormAction	: "Handling",
+DlgFormMethod	: "Metode",
+
+// Select Field Dialog
+DlgSelectName		: "Navn",
+DlgSelectValue		: "Verdi",
+DlgSelectSize		: "Størrelse",
+DlgSelectLines		: "Linjer",
+DlgSelectChkMulti	: "Tillat flervalg",
+DlgSelectOpAvail	: "Tilgjenglige alternativer",
+DlgSelectOpText		: "Tekst",
+DlgSelectOpValue	: "Verdi",
+DlgSelectBtnAdd		: "Legg til",
+DlgSelectBtnModify	: "Endre",
+DlgSelectBtnUp		: "Opp",
+DlgSelectBtnDown	: "Ned",
+DlgSelectBtnSetValue : "Sett som valgt",
+DlgSelectBtnDelete	: "Slett",
+
+// Textarea Dialog
+DlgTextareaName	: "Navn",
+DlgTextareaCols	: "Kolonner",
+DlgTextareaRows	: "Rader",
+
+// Text Field Dialog
+DlgTextName			: "Navn",
+DlgTextValue		: "verdi",
+DlgTextCharWidth	: "Tegnbredde",
+DlgTextMaxChars		: "Maks antall tegn",
+DlgTextType			: "Type",
+DlgTextTypeText		: "Tekst",
+DlgTextTypePass		: "Passord",
+
+// Hidden Field Dialog
+DlgHiddenName	: "Navn",
+DlgHiddenValue	: "Verdi",
+
+// Bulleted List Dialog
+BulletedListProp	: "Uordnet listeegenskaper",
+NumberedListProp	: "Ordnet listeegenskaper",
+DlgLstStart			: "Start",
+DlgLstType			: "Type",
+DlgLstTypeCircle	: "Sirkel",
+DlgLstTypeDisc		: "Hel sirkel",
+DlgLstTypeSquare	: "Firkant",
+DlgLstTypeNumbers	: "Numre(1, 2, 3)",
+DlgLstTypeLCase		: "Små bokstaver (a, b, c)",
+DlgLstTypeUCase		: "Store bokstaver(A, B, C)",
+DlgLstTypeSRoman	: "Små romerske tall(i, ii, iii)",
+DlgLstTypeLRoman	: "Store romerske tall(I, II, III)",
+
+// Document Properties Dialog
+DlgDocGeneralTab	: "Generalt",
+DlgDocBackTab		: "Bakgrunn",
+DlgDocColorsTab		: "Farger og marginer",
+DlgDocMetaTab		: "Meta Data",
+
+DlgDocPageTitle		: "Sidetittel",
+DlgDocLangDir		: "Språkretning",
+DlgDocLangDirLTR	: "Venstre til høyre (LTR)",
+DlgDocLangDirRTL	: "Høyre til venstre (RTL)",
+DlgDocLangCode		: "Språkkode",
+DlgDocCharSet		: "Tegnsett",
+DlgDocCharSetCE		: "Sentraleuropeisk",
+DlgDocCharSetCT		: "Tradisonell kinesisk(Big5)",
+DlgDocCharSetCR		: "Cyrillic",
+DlgDocCharSetGR		: "Gresk",
+DlgDocCharSetJP		: "Japansk",
+DlgDocCharSetKR		: "Koreansk",
+DlgDocCharSetTR		: "Tyrkisk",
+DlgDocCharSetUN		: "Unikode (UTF-8)",
+DlgDocCharSetWE		: "Vesteuropeisk",
+DlgDocCharSetOther	: "Annet tegnsett",
+
+DlgDocDocType		: "Dokumenttype header",
+DlgDocDocTypeOther	: "Annet dokumenttype header",
+DlgDocIncXHTML		: "Inkulder XHTML deklarasjon",
+DlgDocBgColor		: "Bakgrunnsfarge",
+DlgDocBgImage		: "Bakgrunnsbilde url",
+DlgDocBgNoScroll	: "Ikke scroll bakgrunnsbilde",
+DlgDocCText			: "Tekst",
+DlgDocCLink			: "Link",
+DlgDocCVisited		: "Besøkt lenke",
+DlgDocCActive		: "Aktiv lenke",
+DlgDocMargins		: "Sidemargin",
+DlgDocMaTop			: "Topp",
+DlgDocMaLeft		: "Venstre",
+DlgDocMaRight		: "Høyre",
+DlgDocMaBottom		: "Bunn",
+DlgDocMeIndex		: "Dokument nøkkelord (kommaseparert)",
+DlgDocMeDescr		: "Dokumentbeskrivelse",
+DlgDocMeAuthor		: "Forfatter",
+DlgDocMeCopy		: "Kopirett",
+DlgDocPreview		: "Forhåndsvising",
+
+// Templates Dialog
+Templates			: "Maler",
+DlgTemplatesTitle	: "Innholdsmaler",
+DlgTemplatesSelMsg	: "Velg malen du vil åpne<br>(innholdet du har skrevet blir tapt!):",
+DlgTemplatesLoading	: "Laster malliste. Vennligst vent...",
+DlgTemplatesNoTpl	: "(Ingen maler definert)",
+DlgTemplatesReplace	: "Erstatt faktisk innold",
+
+// About Dialog
+DlgAboutAboutTab	: "Om",
+DlgAboutBrowserInfoTab	: "Nettleserinfo",
+DlgAboutLicenseTab	: "Lisens",
+DlgAboutVersion		: "versjon",
+DlgAboutInfo		: "For further information go to"	//MISSING
+};


Property changes on: announcement/trunk/src/main/webapp/fckeditor/editor/lang/no.js
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/webapp/fckeditor/editor/lang/pl.js
===================================================================
--- announcement/trunk/src/main/webapp/fckeditor/editor/lang/pl.js	                        (rev 0)
+++ announcement/trunk/src/main/webapp/fckeditor/editor/lang/pl.js	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,515 @@
+/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2008 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * Polish language file.
+ */
+
+var FCKLang =
+{
+// Language direction : "ltr" (left to right) or "rtl" (right to left).
+Dir					: "ltr",
+
+ToolbarCollapse		: "Zwiń pasek narzędzi",
+ToolbarExpand		: "Rozwiń pasek narzędzi",
+
+// Toolbar Items and Context Menu
+Save				: "Zapisz",
+NewPage				: "Nowa strona",
+Preview				: "Podgląd",
+Cut					: "Wytnij",
+Copy				: "Kopiuj",
+Paste				: "Wklej",
+PasteText			: "Wklej jako czysty tekst",
+PasteWord			: "Wklej z Worda",
+Print				: "Drukuj",
+SelectAll			: "Zaznacz wszystko",
+RemoveFormat		: "Usuń formatowanie",
+InsertLinkLbl		: "Hiperłącze",
+InsertLink			: "Wstaw/edytuj hiperłącze",
+RemoveLink			: "Usuń hiperłącze",
+Anchor				: "Wstaw/edytuj kotwicę",
+AnchorDelete		: "Usuń kotwicę",
+InsertImageLbl		: "Obrazek",
+InsertImage			: "Wstaw/edytuj obrazek",
+InsertFlashLbl		: "Flash",
+InsertFlash			: "Dodaj/Edytuj element Flash",
+InsertTableLbl		: "Tabela",
+InsertTable			: "Wstaw/edytuj tabelę",
+InsertLineLbl		: "Linia pozioma",
+InsertLine			: "Wstaw poziomą linię",
+InsertSpecialCharLbl: "Znak specjalny",
+InsertSpecialChar	: "Wstaw znak specjalny",
+InsertSmileyLbl		: "Emotikona",
+InsertSmiley		: "Wstaw emotikonę",
+About				: "O programie FCKeditor",
+Bold				: "Pogrubienie",
+Italic				: "Kursywa",
+Underline			: "Podkreślenie",
+StrikeThrough		: "Przekreślenie",
+Subscript			: "Indeks dolny",
+Superscript			: "Indeks górny",
+LeftJustify			: "Wyrównaj do lewej",
+CenterJustify		: "Wyrównaj do środka",
+RightJustify		: "Wyrównaj do prawej",
+BlockJustify		: "Wyrównaj do lewej i prawej",
+DecreaseIndent		: "Zmniejsz wcięcie",
+IncreaseIndent		: "Zwiększ wcięcie",
+Blockquote			: "Cytat",
+Undo				: "Cofnij",
+Redo				: "Ponów",
+NumberedListLbl		: "Lista numerowana",
+NumberedList		: "Wstaw/usuń numerowanie listy",
+BulletedListLbl		: "Lista wypunktowana",
+BulletedList		: "Wstaw/usuń wypunktowanie listy",
+ShowTableBorders	: "Pokazuj ramkę tabeli",
+ShowDetails			: "Pokaż szczegóły",
+Style				: "Styl",
+FontFormat			: "Format",
+Font				: "Czcionka",
+FontSize			: "Rozmiar",
+TextColor			: "Kolor tekstu",
+BGColor				: "Kolor tła",
+Source				: "Źródło dokumentu",
+Find				: "Znajdź",
+Replace				: "Zamień",
+SpellCheck			: "Sprawdź pisownię",
+UniversalKeyboard	: "Klawiatura Uniwersalna",
+PageBreakLbl		: "Odstęp",
+PageBreak			: "Wstaw odstęp",
+
+Form			: "Formularz",
+Checkbox		: "Pole wyboru (checkbox)",
+RadioButton		: "Pole wyboru (radio)",
+TextField		: "Pole tekstowe",
+Textarea		: "Obszar tekstowy",
+HiddenField		: "Pole ukryte",
+Button			: "Przycisk",
+SelectionField	: "Lista wyboru",
+ImageButton		: "Przycisk-obrazek",
+
+FitWindow		: "Maksymalizuj rozmiar edytora",
+ShowBlocks		: "Pokaż bloki",
+
+// Context Menu
+EditLink			: "Edytuj hiperłącze",
+CellCM				: "Komórka",
+RowCM				: "Wiersz",
+ColumnCM			: "Kolumna",
+InsertRowAfter		: "Wstaw wiersz poniżej",
+InsertRowBefore		: "Wstaw wiersz powyżej",
+DeleteRows			: "Usuń wiersze",
+InsertColumnAfter	: "Wstaw kolumnę z prawej",
+InsertColumnBefore	: "Wstaw kolumnę z lewej",
+DeleteColumns		: "Usuń kolumny",
+InsertCellAfter		: "Wstaw komórkę z prawej",
+InsertCellBefore	: "Wstaw komórkę z lewej",
+DeleteCells			: "Usuń komórki",
+MergeCells			: "Połącz komórki",
+MergeRight			: "Połącz z komórką z prawej",
+MergeDown			: "Połącz z komórką poniżej",
+HorizontalSplitCell	: "Podziel komórkę poziomo",
+VerticalSplitCell	: "Podziel komórkę pionowo",
+TableDelete			: "Usuń tabelę",
+CellProperties		: "Właściwości komórki",
+TableProperties		: "Właściwości tabeli",
+ImageProperties		: "Właściwości obrazka",
+FlashProperties		: "Właściwości elementu Flash",
+
+AnchorProp			: "Właściwości kotwicy",
+ButtonProp			: "Właściwości przycisku",
+CheckboxProp		: "Właściwości pola wyboru (checkbox)",
+HiddenFieldProp		: "Właściwości pola ukrytego",
+RadioButtonProp		: "Właściwości pola wyboru (radio)",
+ImageButtonProp		: "Właściwości przycisku obrazka",
+TextFieldProp		: "Właściwości pola tekstowego",
+SelectionFieldProp	: "Właściwości listy wyboru",
+TextareaProp		: "Właściwości obszaru tekstowego",
+FormProp			: "Właściwości formularza",
+
+FontFormats			: "Normalny;Tekst sformatowany;Adres;Nagłówek 1;Nagłówek 2;Nagłówek 3;Nagłówek 4;Nagłówek 5;Nagłówek 6",
+
+// Alerts and Messages
+ProcessingXHTML		: "Przetwarzanie XHTML. Proszę czekać...",
+Done				: "Gotowe",
+PasteWordConfirm	: "Tekst, który chcesz wkleić, prawdopodobnie pochodzi z programu Word. Czy chcesz go wyczyścic przed wklejeniem?",
+NotCompatiblePaste	: "Ta funkcja jest dostępna w programie Internet Explorer w wersji 5.5 lub wyższej. Czy chcesz wkleić tekst bez czyszczenia?",
+UnknownToolbarItem	: "Nieznany element paska narzędzi \"%1\"",
+UnknownCommand		: "Nieznana komenda \"%1\"",
+NotImplemented		: "Komenda niezaimplementowana",
+UnknownToolbarSet	: "Pasek narzędzi \"%1\" nie istnieje",
+NoActiveX			: "Ustawienia zabezpieczeń twojej przeglądarki mogą ograniczyć niektóre funkcje edytora. Musisz włączyć opcję \"Uruchamianie formantów Activex i dodatków plugin\". W przeciwnym wypadku mogą pojawiać się błędy.",
+BrowseServerBlocked : "Nie można otworzyć okno menadżera plików. Upewnij się, że wszystkie blokady wyskakujących okienek są wyłączone.",
+DialogBlocked		: "Nie można otworzyć okna dialogowego. Upewnij się, że wszystkie blokady wyskakujących okienek są wyłączone.",
+
+// Dialogs
+DlgBtnOK			: "OK",
+DlgBtnCancel		: "Anuluj",
+DlgBtnClose			: "Zamknij",
+DlgBtnBrowseServer	: "Przeglądaj",
+DlgAdvancedTag		: "Zaawansowane",
+DlgOpOther			: "<Inny>",
+DlgInfoTab			: "Informacje",
+DlgAlertUrl			: "Proszę podać URL",
+
+// General Dialogs Labels
+DlgGenNotSet		: "<nie ustawione>",
+DlgGenId			: "Id",
+DlgGenLangDir		: "Kierunek tekstu",
+DlgGenLangDirLtr	: "Od lewej do prawej (LTR)",
+DlgGenLangDirRtl	: "Od prawej do lewej (RTL)",
+DlgGenLangCode		: "Kod języka",
+DlgGenAccessKey		: "Klawisz dostępu",
+DlgGenName			: "Nazwa",
+DlgGenTabIndex		: "Indeks tabeli",
+DlgGenLongDescr		: "Długi opis hiperłącza",
+DlgGenClass			: "Nazwa klasy CSS",
+DlgGenTitle			: "Opis obiektu docelowego",
+DlgGenContType		: "Typ MIME obiektu docelowego",
+DlgGenLinkCharset	: "Kodowanie znaków obiektu docelowego",
+DlgGenStyle			: "Styl",
+
+// Image Dialog
+DlgImgTitle			: "Właściwości obrazka",
+DlgImgInfoTab		: "Informacje o obrazku",
+DlgImgBtnUpload		: "Wyślij",
+DlgImgURL			: "Adres URL",
+DlgImgUpload		: "Wyślij",
+DlgImgAlt			: "Tekst zastępczy",
+DlgImgWidth			: "Szerokość",
+DlgImgHeight		: "Wysokość",
+DlgImgLockRatio		: "Zablokuj proporcje",
+DlgBtnResetSize		: "Przywróć rozmiar",
+DlgImgBorder		: "Ramka",
+DlgImgHSpace		: "Odstęp poziomy",
+DlgImgVSpace		: "Odstęp pionowy",
+DlgImgAlign			: "Wyrównaj",
+DlgImgAlignLeft		: "Do lewej",
+DlgImgAlignAbsBottom: "Do dołu",
+DlgImgAlignAbsMiddle: "Do środka w pionie",
+DlgImgAlignBaseline	: "Do linii bazowej",
+DlgImgAlignBottom	: "Do dołu",
+DlgImgAlignMiddle	: "Do środka",
+DlgImgAlignRight	: "Do prawej",
+DlgImgAlignTextTop	: "Do góry tekstu",
+DlgImgAlignTop		: "Do góry",
+DlgImgPreview		: "Podgląd",
+DlgImgAlertUrl		: "Podaj adres obrazka.",
+DlgImgLinkTab		: "Hiperłącze",
+
+// Flash Dialog
+DlgFlashTitle		: "Właściwości elementu Flash",
+DlgFlashChkPlay		: "Auto Odtwarzanie",
+DlgFlashChkLoop		: "Pętla",
+DlgFlashChkMenu		: "Włącz menu",
+DlgFlashScale		: "Skaluj",
+DlgFlashScaleAll	: "Pokaż wszystko",
+DlgFlashScaleNoBorder	: "Bez Ramki",
+DlgFlashScaleFit	: "Dokładne dopasowanie",
+
+// Link Dialog
+DlgLnkWindowTitle	: "Hiperłącze",
+DlgLnkInfoTab		: "Informacje ",
+DlgLnkTargetTab		: "Cel",
+
+DlgLnkType			: "Typ hiperłącza",
+DlgLnkTypeURL		: "Adres URL",
+DlgLnkTypeAnchor	: "Odnośnik wewnątrz strony",
+DlgLnkTypeEMail		: "Adres e-mail",
+DlgLnkProto			: "Protokół",
+DlgLnkProtoOther	: "<inny>",
+DlgLnkURL			: "Adres URL",
+DlgLnkAnchorSel		: "Wybierz etykietę",
+DlgLnkAnchorByName	: "Wg etykiety",
+DlgLnkAnchorById	: "Wg identyfikatora elementu",
+DlgLnkNoAnchors		: "(W dokumencie nie zdefiniowano żadnych etykiet)",
+DlgLnkEMail			: "Adres e-mail",
+DlgLnkEMailSubject	: "Temat",
+DlgLnkEMailBody		: "Treść",
+DlgLnkUpload		: "Wyślij",
+DlgLnkBtnUpload		: "Wyślij",
+
+DlgLnkTarget		: "Cel",
+DlgLnkTargetFrame	: "<ramka>",
+DlgLnkTargetPopup	: "<wyskakujące okno>",
+DlgLnkTargetBlank	: "Nowe okno (_blank)",
+DlgLnkTargetParent	: "Okno nadrzędne (_parent)",
+DlgLnkTargetSelf	: "To samo okno (_self)",
+DlgLnkTargetTop		: "Okno najwyższe w hierarchii (_top)",
+DlgLnkTargetFrameName	: "Nazwa Ramki Docelowej",
+DlgLnkPopWinName	: "Nazwa wyskakującego okna",
+DlgLnkPopWinFeat	: "Właściwości wyskakującego okna",
+DlgLnkPopResize		: "Możliwa zmiana rozmiaru",
+DlgLnkPopLocation	: "Pasek adresu",
+DlgLnkPopMenu		: "Pasek menu",
+DlgLnkPopScroll		: "Paski przewijania",
+DlgLnkPopStatus		: "Pasek statusu",
+DlgLnkPopToolbar	: "Pasek narzędzi",
+DlgLnkPopFullScrn	: "Pełny ekran (IE)",
+DlgLnkPopDependent	: "Okno zależne (Netscape)",
+DlgLnkPopWidth		: "Szerokość",
+DlgLnkPopHeight		: "Wysokość",
+DlgLnkPopLeft		: "Pozycja w poziomie",
+DlgLnkPopTop		: "Pozycja w pionie",
+
+DlnLnkMsgNoUrl		: "Podaj adres URL",
+DlnLnkMsgNoEMail	: "Podaj adres e-mail",
+DlnLnkMsgNoAnchor	: "Wybierz etykietę",
+DlnLnkMsgInvPopName	: "Nazwa wyskakującego okienka musi zaczynać się od znaku alfanumerycznego i nie może zawierać spacji",
+
+// Color Dialog
+DlgColorTitle		: "Wybierz kolor",
+DlgColorBtnClear	: "Wyczyść",
+DlgColorHighlight	: "Podgląd",
+DlgColorSelected	: "Wybrane",
+
+// Smiley Dialog
+DlgSmileyTitle		: "Wstaw emotikonę",
+
+// Special Character Dialog
+DlgSpecialCharTitle	: "Wybierz znak specjalny",
+
+// Table Dialog
+DlgTableTitle		: "Właściwości tabeli",
+DlgTableRows		: "Liczba wierszy",
+DlgTableColumns		: "Liczba kolumn",
+DlgTableBorder		: "Grubość ramki",
+DlgTableAlign		: "Wyrównanie",
+DlgTableAlignNotSet	: "<brak ustawień>",
+DlgTableAlignLeft	: "Do lewej",
+DlgTableAlignCenter	: "Do środka",
+DlgTableAlignRight	: "Do prawej",
+DlgTableWidth		: "Szerokość",
+DlgTableWidthPx		: "piksele",
+DlgTableWidthPc		: "%",
+DlgTableHeight		: "Wysokość",
+DlgTableCellSpace	: "Odstęp pomiędzy komórkami",
+DlgTableCellPad		: "Margines wewnętrzny komórek",
+DlgTableCaption		: "Tytuł",
+DlgTableSummary		: "Podsumowanie",
+
+// Table Cell Dialog
+DlgCellTitle		: "Właściwości komórki",
+DlgCellWidth		: "Szerokość",
+DlgCellWidthPx		: "piksele",
+DlgCellWidthPc		: "%",
+DlgCellHeight		: "Wysokość",
+DlgCellWordWrap		: "Zawijanie tekstu",
+DlgCellWordWrapNotSet	: "<brak ustawień>",
+DlgCellWordWrapYes	: "Tak",
+DlgCellWordWrapNo	: "Nie",
+DlgCellHorAlign		: "Wyrównanie poziome",
+DlgCellHorAlignNotSet	: "<brak ustawień>",
+DlgCellHorAlignLeft	: "Do lewej",
+DlgCellHorAlignCenter	: "Do środka",
+DlgCellHorAlignRight: "Do prawej",
+DlgCellVerAlign		: "Wyrównanie pionowe",
+DlgCellVerAlignNotSet	: "<brak ustawień>",
+DlgCellVerAlignTop	: "Do góry",
+DlgCellVerAlignMiddle	: "Do środka",
+DlgCellVerAlignBottom	: "Do dołu",
+DlgCellVerAlignBaseline	: "Do linii bazowej",
+DlgCellRowSpan		: "Zajętość wierszy",
+DlgCellCollSpan		: "Zajętość kolumn",
+DlgCellBackColor	: "Kolor tła",
+DlgCellBorderColor	: "Kolor ramki",
+DlgCellBtnSelect	: "Wybierz...",
+
+// Find and Replace Dialog
+DlgFindAndReplaceTitle	: "Znajdź i zamień",
+
+// Find Dialog
+DlgFindTitle		: "Znajdź",
+DlgFindFindBtn		: "Znajdź",
+DlgFindNotFoundMsg	: "Nie znaleziono szukanego hasła.",
+
+// Replace Dialog
+DlgReplaceTitle			: "Zamień",
+DlgReplaceFindLbl		: "Znajdź:",
+DlgReplaceReplaceLbl	: "Zastąp przez:",
+DlgReplaceCaseChk		: "Uwzględnij wielkość liter",
+DlgReplaceReplaceBtn	: "Zastąp",
+DlgReplaceReplAllBtn	: "Zastąp wszystko",
+DlgReplaceWordChk		: "Całe słowa",
+
+// Paste Operations / Dialog
+PasteErrorCut	: "Ustawienia bezpieczeństwa Twojej przeglądarki nie pozwalają na automatyczne wycinanie tekstu. Użyj skrótu klawiszowego Ctrl+X.",
+PasteErrorCopy	: "Ustawienia bezpieczeństwa Twojej przeglądarki nie pozwalają na automatyczne kopiowanie tekstu. Użyj skrótu klawiszowego Ctrl+C.",
+
+PasteAsText		: "Wklej jako czysty tekst",
+PasteFromWord	: "Wklej z Worda",
+
+DlgPasteMsg2	: "Proszę wkleić w poniższym polu używając klawiaturowego skrótu (<STRONG>Ctrl+V</STRONG>) i kliknąć <STRONG>OK</STRONG>.",
+DlgPasteSec		: "Zabezpieczenia przeglądarki uniemożliwiają wklejenie danych bezpośrednio do edytora. Proszę dane wkleić ponownie w tym okienku.",
+DlgPasteIgnoreFont		: "Ignoruj definicje 'Font Face'",
+DlgPasteRemoveStyles	: "Usuń definicje Stylów",
+
+// Color Picker
+ColorAutomatic	: "Automatycznie",
+ColorMoreColors	: "Więcej kolorów...",
+
+// Document Properties
+DocProps		: "Właściwości dokumentu",
+
+// Anchor Dialog
+DlgAnchorTitle		: "Właściwości kotwicy",
+DlgAnchorName		: "Nazwa kotwicy",
+DlgAnchorErrorName	: "Wpisz nazwę kotwicy",
+
+// Speller Pages Dialog
+DlgSpellNotInDic		: "Słowa nie ma w słowniku",
+DlgSpellChangeTo		: "Zmień na",
+DlgSpellBtnIgnore		: "Ignoruj",
+DlgSpellBtnIgnoreAll	: "Ignoruj wszystkie",
+DlgSpellBtnReplace		: "Zmień",
+DlgSpellBtnReplaceAll	: "Zmień wszystkie",
+DlgSpellBtnUndo			: "Cofnij",
+DlgSpellNoSuggestions	: "- Brak sugestii -",
+DlgSpellProgress		: "Trwa sprawdzanie ...",
+DlgSpellNoMispell		: "Sprawdzanie zakończone: nie znaleziono błędów",
+DlgSpellNoChanges		: "Sprawdzanie zakończone: nie zmieniono żadnego słowa",
+DlgSpellOneChange		: "Sprawdzanie zakończone: zmieniono jedno słowo",
+DlgSpellManyChanges		: "Sprawdzanie zakończone: zmieniono %l słów",
+
+IeSpellDownload			: "Słownik nie jest zainstalowany. Chcesz go ściągnąć?",
+
+// Button Dialog
+DlgButtonText		: "Tekst (Wartość)",
+DlgButtonType		: "Typ",
+DlgButtonTypeBtn	: "Przycisk",
+DlgButtonTypeSbm	: "Wyślij",
+DlgButtonTypeRst	: "Wyzeruj",
+
+// Checkbox and Radio Button Dialogs
+DlgCheckboxName		: "Nazwa",
+DlgCheckboxValue	: "Wartość",
+DlgCheckboxSelected	: "Zaznaczone",
+
+// Form Dialog
+DlgFormName		: "Nazwa",
+DlgFormAction	: "Akcja",
+DlgFormMethod	: "Metoda",
+
+// Select Field Dialog
+DlgSelectName		: "Nazwa",
+DlgSelectValue		: "Wartość",
+DlgSelectSize		: "Rozmiar",
+DlgSelectLines		: "linii",
+DlgSelectChkMulti	: "Wielokrotny wybór",
+DlgSelectOpAvail	: "Dostępne opcje",
+DlgSelectOpText		: "Tekst",
+DlgSelectOpValue	: "Wartość",
+DlgSelectBtnAdd		: "Dodaj",
+DlgSelectBtnModify	: "Zmień",
+DlgSelectBtnUp		: "Do góry",
+DlgSelectBtnDown	: "Do dołu",
+DlgSelectBtnSetValue : "Ustaw wartość zaznaczoną",
+DlgSelectBtnDelete	: "Usuń",
+
+// Textarea Dialog
+DlgTextareaName	: "Nazwa",
+DlgTextareaCols	: "Kolumnu",
+DlgTextareaRows	: "Wiersze",
+
+// Text Field Dialog
+DlgTextName			: "Nazwa",
+DlgTextValue		: "Wartość",
+DlgTextCharWidth	: "Szerokość w znakach",
+DlgTextMaxChars		: "Max. szerokość",
+DlgTextType			: "Typ",
+DlgTextTypeText		: "Tekst",
+DlgTextTypePass		: "Hasło",
+
+// Hidden Field Dialog
+DlgHiddenName	: "Nazwa",
+DlgHiddenValue	: "Wartość",
+
+// Bulleted List Dialog
+BulletedListProp	: "Właściwości listy punktowanej",
+NumberedListProp	: "Właściwości listy numerowanej",
+DlgLstStart			: "Początek",
+DlgLstType			: "Typ",
+DlgLstTypeCircle	: "Koło",
+DlgLstTypeDisc		: "Dysk",
+DlgLstTypeSquare	: "Kwadrat",
+DlgLstTypeNumbers	: "Cyfry (1, 2, 3)",
+DlgLstTypeLCase		: "Małe litery (a, b, c)",
+DlgLstTypeUCase		: "Duże litery (A, B, C)",
+DlgLstTypeSRoman	: "Numeracja rzymska (i, ii, iii)",
+DlgLstTypeLRoman	: "Numeracja rzymska (I, II, III)",
+
+// Document Properties Dialog
+DlgDocGeneralTab	: "Ogólne",
+DlgDocBackTab		: "Tło",
+DlgDocColorsTab		: "Kolory i marginesy",
+DlgDocMetaTab		: "Meta Dane",
+
+DlgDocPageTitle		: "Tytuł strony",
+DlgDocLangDir		: "Kierunek pisania",
+DlgDocLangDirLTR	: "Od lewej do prawej (LTR)",
+DlgDocLangDirRTL	: "Od prawej do lewej (RTL)",
+DlgDocLangCode		: "Kod języka",
+DlgDocCharSet		: "Kodowanie znaków",
+DlgDocCharSetCE		: "Środkowoeuropejskie",
+DlgDocCharSetCT		: "Chińskie tradycyjne (Big5)",
+DlgDocCharSetCR		: "Cyrylica",
+DlgDocCharSetGR		: "Greckie",
+DlgDocCharSetJP		: "Japońskie",
+DlgDocCharSetKR		: "Koreańskie",
+DlgDocCharSetTR		: "Tureckie",
+DlgDocCharSetUN		: "Unicode (UTF-8)",
+DlgDocCharSetWE		: "Zachodnioeuropejskie",
+DlgDocCharSetOther	: "Inne kodowanie znaków",
+
+DlgDocDocType		: "Nagłówek typu dokumentu",
+DlgDocDocTypeOther	: "Inny typ dokumentu",
+DlgDocIncXHTML		: "Dołącz deklarację XHTML",
+DlgDocBgColor		: "Kolor tła",
+DlgDocBgImage		: "Obrazek tła",
+DlgDocBgNoScroll	: "Tło nieruchome",
+DlgDocCText			: "Tekst",
+DlgDocCLink			: "Hiperłącze",
+DlgDocCVisited		: "Odwiedzane hiperłącze",
+DlgDocCActive		: "Aktywne hiperłącze",
+DlgDocMargins		: "Marginesy strony",
+DlgDocMaTop			: "Górny",
+DlgDocMaLeft		: "Lewy",
+DlgDocMaRight		: "Prawy",
+DlgDocMaBottom		: "Dolny",
+DlgDocMeIndex		: "Słowa kluczowe (oddzielone przecinkami)",
+DlgDocMeDescr		: "Opis dokumentu",
+DlgDocMeAuthor		: "Autor",
+DlgDocMeCopy		: "Prawa autorskie",
+DlgDocPreview		: "Podgląd",
+
+// Templates Dialog
+Templates			: "Sablony",
+DlgTemplatesTitle	: "Szablony zawartości",
+DlgTemplatesSelMsg	: "Wybierz szablon do otwarcia w edytorze<br>(obecna zawartość okna edytora zostanie utracona):",
+DlgTemplatesLoading	: "Ładowanie listy szablonów. Proszę czekać...",
+DlgTemplatesNoTpl	: "(Brak zdefiniowanych szablonów)",
+DlgTemplatesReplace	: "Zastąp aktualną zawartość",
+
+// About Dialog
+DlgAboutAboutTab	: "O ...",
+DlgAboutBrowserInfoTab	: "O przeglądarce",
+DlgAboutLicenseTab	: "Licencja",
+DlgAboutVersion		: "wersja",
+DlgAboutInfo		: "Więcej informacji uzyskasz pod adresem"
+};


Property changes on: announcement/trunk/src/main/webapp/fckeditor/editor/lang/pl.js
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/webapp/fckeditor/editor/lang/pt-br.js
===================================================================
--- announcement/trunk/src/main/webapp/fckeditor/editor/lang/pt-br.js	                        (rev 0)
+++ announcement/trunk/src/main/webapp/fckeditor/editor/lang/pt-br.js	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,515 @@
+/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2008 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * Brazilian Portuguese language file.
+ */
+
+var FCKLang =
+{
+// Language direction : "ltr" (left to right) or "rtl" (right to left).
+Dir					: "ltr",
+
+ToolbarCollapse		: "Ocultar Barra de Ferramentas",
+ToolbarExpand		: "Exibir Barra de Ferramentas",
+
+// Toolbar Items and Context Menu
+Save				: "Salvar",
+NewPage				: "Novo",
+Preview				: "Visualizar",
+Cut					: "Recortar",
+Copy				: "Copiar",
+Paste				: "Colar",
+PasteText			: "Colar como Texto sem Formatação",
+PasteWord			: "Colar do Word",
+Print				: "Imprimir",
+SelectAll			: "Selecionar Tudo",
+RemoveFormat		: "Remover Formatação",
+InsertLinkLbl		: "Hiperlink",
+InsertLink			: "Inserir/Editar Hiperlink",
+RemoveLink			: "Remover Hiperlink",
+Anchor				: "Inserir/Editar Âncora",
+AnchorDelete		: "Remover Âncora",
+InsertImageLbl		: "Figura",
+InsertImage			: "Inserir/Editar Figura",
+InsertFlashLbl		: "Flash",
+InsertFlash			: "Insere/Edita Flash",
+InsertTableLbl		: "Tabela",
+InsertTable			: "Inserir/Editar Tabela",
+InsertLineLbl		: "Linha",
+InsertLine			: "Inserir Linha Horizontal",
+InsertSpecialCharLbl: "Caracteres Especiais",
+InsertSpecialChar	: "Inserir Caractere Especial",
+InsertSmileyLbl		: "Emoticon",
+InsertSmiley		: "Inserir Emoticon",
+About				: "Sobre FCKeditor",
+Bold				: "Negrito",
+Italic				: "Itálico",
+Underline			: "Sublinhado",
+StrikeThrough		: "Tachado",
+Subscript			: "Subscrito",
+Superscript			: "Sobrescrito",
+LeftJustify			: "Alinhar Esquerda",
+CenterJustify		: "Centralizar",
+RightJustify		: "Alinhar Direita",
+BlockJustify		: "Justificado",
+DecreaseIndent		: "Diminuir Recuo",
+IncreaseIndent		: "Aumentar Recuo",
+Blockquote			: "Recuo",
+Undo				: "Desfazer",
+Redo				: "Refazer",
+NumberedListLbl		: "Numeração",
+NumberedList		: "Inserir/Remover Numeração",
+BulletedListLbl		: "Marcadores",
+BulletedList		: "Inserir/Remover Marcadores",
+ShowTableBorders	: "Exibir Bordas da Tabela",
+ShowDetails			: "Exibir Detalhes",
+Style				: "Estilo",
+FontFormat			: "Formatação",
+Font				: "Fonte",
+FontSize			: "Tamanho",
+TextColor			: "Cor do Texto",
+BGColor				: "Cor do Plano de Fundo",
+Source				: "Código-Fonte",
+Find				: "Localizar",
+Replace				: "Substituir",
+SpellCheck			: "Verificar Ortografia",
+UniversalKeyboard	: "Teclado Universal",
+PageBreakLbl		: "Quebra de Página",
+PageBreak			: "Inserir Quebra de Página",
+
+Form			: "Formulário",
+Checkbox		: "Caixa de Seleção",
+RadioButton		: "Botão de Opção",
+TextField		: "Caixa de Texto",
+Textarea		: "Área de Texto",
+HiddenField		: "Campo Oculto",
+Button			: "Botão",
+SelectionField	: "Caixa de Listagem",
+ImageButton		: "Botão de Imagem",
+
+FitWindow		: "Maximizar o tamanho do editor",
+ShowBlocks		: "Mostrar blocos",
+
+// Context Menu
+EditLink			: "Editar Hiperlink",
+CellCM				: "Célula",
+RowCM				: "Linha",
+ColumnCM			: "Coluna",
+InsertRowAfter		: "Inserir linha abaixo",
+InsertRowBefore		: "Inserir linha acima",
+DeleteRows			: "Remover Linhas",
+InsertColumnAfter	: "Inserir coluna à direita",
+InsertColumnBefore	: "Inserir coluna à esquerda",
+DeleteColumns		: "Remover Colunas",
+InsertCellAfter		: "Inserir célula à direita",
+InsertCellBefore	: "Inserir célula à esquerda",
+DeleteCells			: "Remover Células",
+MergeCells			: "Mesclar Células",
+MergeRight			: "Mesclar com célula à direita",
+MergeDown			: "Mesclar com célula abaixo",
+HorizontalSplitCell	: "Dividir célula horizontalmente",
+VerticalSplitCell	: "Dividir célula verticalmente",
+TableDelete			: "Apagar Tabela",
+CellProperties		: "Formatar Célula",
+TableProperties		: "Formatar Tabela",
+ImageProperties		: "Formatar Figura",
+FlashProperties		: "Propriedades Flash",
+
+AnchorProp			: "Formatar Âncora",
+ButtonProp			: "Formatar Botão",
+CheckboxProp		: "Formatar Caixa de Seleção",
+HiddenFieldProp		: "Formatar Campo Oculto",
+RadioButtonProp		: "Formatar Botão de Opção",
+ImageButtonProp		: "Formatar Botão de Imagem",
+TextFieldProp		: "Formatar Caixa de Texto",
+SelectionFieldProp	: "Formatar Caixa de Listagem",
+TextareaProp		: "Formatar Área de Texto",
+FormProp			: "Formatar Formulário",
+
+FontFormats			: "Normal;Formatado;Endereço;Título 1;Título 2;Título 3;Título 4;Título 5;Título 6",
+
+// Alerts and Messages
+ProcessingXHTML		: "Processando XHTML. Por favor, aguarde...",
+Done				: "Pronto",
+PasteWordConfirm	: "O texto que você deseja colar parece ter sido copiado do Word. Você gostaria de remover a formatação antes de colar?",
+NotCompatiblePaste	: "Este comando está disponível para o navegador Internet Explorer 5.5 ou superior. Você gostaria de colar sem remover a formatação?",
+UnknownToolbarItem	: "O item da barra de ferramentas \"%1\" não é reconhecido",
+UnknownCommand		: "O comando \"%1\" não é reconhecido",
+NotImplemented		: "O comando não foi implementado",
+UnknownToolbarSet	: "A barra de ferramentas \"%1\" não existe",
+NoActiveX			: "As configurações de segurança do seu browser podem limitar algumas características do editor. Você precisa habilitar a opção \"Executar controles e plug-ins ActiveX\". Você pode experimentar erros e alertas de características faltantes.",
+BrowseServerBlocked : "Os recursos do browser não puderam ser abertos. Tenha certeza que todos os bloqueadores de popup estão desabilitados.",
+DialogBlocked		: "Não foi possível abrir a janela de diálogo. Tenha certeza que todos os bloqueadores de popup estão desabilitados.",
+
+// Dialogs
+DlgBtnOK			: "OK",
+DlgBtnCancel		: "Cancelar",
+DlgBtnClose			: "Fechar",
+DlgBtnBrowseServer	: "Localizar no Servidor",
+DlgAdvancedTag		: "Avançado",
+DlgOpOther			: "<Outros>",
+DlgInfoTab			: "Info",
+DlgAlertUrl			: "Inserir a URL",
+
+// General Dialogs Labels
+DlgGenNotSet		: "<não ajustado>",
+DlgGenId			: "Id",
+DlgGenLangDir		: "Direção do idioma",
+DlgGenLangDirLtr	: "Esquerda para Direita (LTR)",
+DlgGenLangDirRtl	: "Direita para Esquerda (RTL)",
+DlgGenLangCode		: "Idioma",
+DlgGenAccessKey		: "Chave de Acesso",
+DlgGenName			: "Nome",
+DlgGenTabIndex		: "Índice de Tabulação",
+DlgGenLongDescr		: "Descrição da URL",
+DlgGenClass			: "Classe de Folhas de Estilo",
+DlgGenTitle			: "Título",
+DlgGenContType		: "Tipo de Conteúdo",
+DlgGenLinkCharset	: "Conjunto de Caracteres do Hiperlink",
+DlgGenStyle			: "Estilos",
+
+// Image Dialog
+DlgImgTitle			: "Formatar Figura",
+DlgImgInfoTab		: "Informações da Figura",
+DlgImgBtnUpload		: "Enviar para o Servidor",
+DlgImgURL			: "URL",
+DlgImgUpload		: "Submeter",
+DlgImgAlt			: "Texto Alternativo",
+DlgImgWidth			: "Largura",
+DlgImgHeight		: "Altura",
+DlgImgLockRatio		: "Manter proporções",
+DlgBtnResetSize		: "Redefinir para o Tamanho Original",
+DlgImgBorder		: "Borda",
+DlgImgHSpace		: "Horizontal",
+DlgImgVSpace		: "Vertical",
+DlgImgAlign			: "Alinhamento",
+DlgImgAlignLeft		: "Esquerda",
+DlgImgAlignAbsBottom: "Inferior Absoluto",
+DlgImgAlignAbsMiddle: "Centralizado Absoluto",
+DlgImgAlignBaseline	: "Baseline",
+DlgImgAlignBottom	: "Inferior",
+DlgImgAlignMiddle	: "Centralizado",
+DlgImgAlignRight	: "Direita",
+DlgImgAlignTextTop	: "Superior Absoluto",
+DlgImgAlignTop		: "Superior",
+DlgImgPreview		: "Visualização",
+DlgImgAlertUrl		: "Por favor, digite o URL da figura.",
+DlgImgLinkTab		: "Hiperlink",
+
+// Flash Dialog
+DlgFlashTitle		: "Propriedades Flash",
+DlgFlashChkPlay		: "Tocar Automaticamente",
+DlgFlashChkLoop		: "Loop",
+DlgFlashChkMenu		: "Habilita Menu Flash",
+DlgFlashScale		: "Escala",
+DlgFlashScaleAll	: "Mostrar tudo",
+DlgFlashScaleNoBorder	: "Sem Borda",
+DlgFlashScaleFit	: "Escala Exata",
+
+// Link Dialog
+DlgLnkWindowTitle	: "Hiperlink",
+DlgLnkInfoTab		: "Informações",
+DlgLnkTargetTab		: "Destino",
+
+DlgLnkType			: "Tipo de hiperlink",
+DlgLnkTypeURL		: "URL",
+DlgLnkTypeAnchor	: "Âncora nesta página",
+DlgLnkTypeEMail		: "E-Mail",
+DlgLnkProto			: "Protocolo",
+DlgLnkProtoOther	: "<outro>",
+DlgLnkURL			: "URL do hiperlink",
+DlgLnkAnchorSel		: "Selecione uma âncora",
+DlgLnkAnchorByName	: "Pelo Nome da âncora",
+DlgLnkAnchorById	: "Pelo Id do Elemento",
+DlgLnkNoAnchors		: "(Não há âncoras disponíveis neste documento)",
+DlgLnkEMail			: "Endereço E-Mail",
+DlgLnkEMailSubject	: "Assunto da Mensagem",
+DlgLnkEMailBody		: "Corpo da Mensagem",
+DlgLnkUpload		: "Enviar ao Servidor",
+DlgLnkBtnUpload		: "Enviar ao Servidor",
+
+DlgLnkTarget		: "Destino",
+DlgLnkTargetFrame	: "<frame>",
+DlgLnkTargetPopup	: "<janela popup>",
+DlgLnkTargetBlank	: "Nova Janela (_blank)",
+DlgLnkTargetParent	: "Janela Pai (_parent)",
+DlgLnkTargetSelf	: "Mesma Janela (_self)",
+DlgLnkTargetTop		: "Janela Superior (_top)",
+DlgLnkTargetFrameName	: "Nome do Frame de Destino",
+DlgLnkPopWinName	: "Nome da Janela Pop-up",
+DlgLnkPopWinFeat	: "Atributos da Janela Pop-up",
+DlgLnkPopResize		: "Redimensionável",
+DlgLnkPopLocation	: "Barra de Endereços",
+DlgLnkPopMenu		: "Barra de Menus",
+DlgLnkPopScroll		: "Barras de Rolagem",
+DlgLnkPopStatus		: "Barra de Status",
+DlgLnkPopToolbar	: "Barra de Ferramentas",
+DlgLnkPopFullScrn	: "Modo Tela Cheia (IE)",
+DlgLnkPopDependent	: "Dependente (Netscape)",
+DlgLnkPopWidth		: "Largura",
+DlgLnkPopHeight		: "Altura",
+DlgLnkPopLeft		: "Esquerda",
+DlgLnkPopTop		: "Superior",
+
+DlnLnkMsgNoUrl		: "Por favor, digite o endereço do Hiperlink",
+DlnLnkMsgNoEMail	: "Por favor, digite o endereço de e-mail",
+DlnLnkMsgNoAnchor	: "Por favor, selecione uma âncora",
+DlnLnkMsgInvPopName	: "O nome da janela popup deve começar com uma letra ou sublinhado (_) e não pode conter espaços",
+
+// Color Dialog
+DlgColorTitle		: "Selecione uma Cor",
+DlgColorBtnClear	: "Limpar",
+DlgColorHighlight	: "Visualização",
+DlgColorSelected	: "Selecionada",
+
+// Smiley Dialog
+DlgSmileyTitle		: "Inserir Emoticon",
+
+// Special Character Dialog
+DlgSpecialCharTitle	: "Selecione um Caractere Especial",
+
+// Table Dialog
+DlgTableTitle		: "Formatar Tabela",
+DlgTableRows		: "Linhas",
+DlgTableColumns		: "Colunas",
+DlgTableBorder		: "Borda",
+DlgTableAlign		: "Alinhamento",
+DlgTableAlignNotSet	: "<Não ajustado>",
+DlgTableAlignLeft	: "Esquerda",
+DlgTableAlignCenter	: "Centralizado",
+DlgTableAlignRight	: "Direita",
+DlgTableWidth		: "Largura",
+DlgTableWidthPx		: "pixels",
+DlgTableWidthPc		: "%",
+DlgTableHeight		: "Altura",
+DlgTableCellSpace	: "Espaçamento",
+DlgTableCellPad		: "Enchimento",
+DlgTableCaption		: "Legenda",
+DlgTableSummary		: "Resumo",
+
+// Table Cell Dialog
+DlgCellTitle		: "Formatar célula",
+DlgCellWidth		: "Largura",
+DlgCellWidthPx		: "pixels",
+DlgCellWidthPc		: "%",
+DlgCellHeight		: "Altura",
+DlgCellWordWrap		: "Quebra de Linha",
+DlgCellWordWrapNotSet	: "<Não ajustado>",
+DlgCellWordWrapYes	: "Sim",
+DlgCellWordWrapNo	: "Não",
+DlgCellHorAlign		: "Alinhamento Horizontal",
+DlgCellHorAlignNotSet	: "<Não ajustado>",
+DlgCellHorAlignLeft	: "Esquerda",
+DlgCellHorAlignCenter	: "Centralizado",
+DlgCellHorAlignRight: "Direita",
+DlgCellVerAlign		: "Alinhamento Vertical",
+DlgCellVerAlignNotSet	: "<Não ajustado>",
+DlgCellVerAlignTop	: "Superior",
+DlgCellVerAlignMiddle	: "Centralizado",
+DlgCellVerAlignBottom	: "Inferior",
+DlgCellVerAlignBaseline	: "Baseline",
+DlgCellRowSpan		: "Transpor Linhas",
+DlgCellCollSpan		: "Transpor Colunas",
+DlgCellBackColor	: "Cor do Plano de Fundo",
+DlgCellBorderColor	: "Cor da Borda",
+DlgCellBtnSelect	: "Selecionar...",
+
+// Find and Replace Dialog
+DlgFindAndReplaceTitle	: "Localizar e Substituir",
+
+// Find Dialog
+DlgFindTitle		: "Localizar...",
+DlgFindFindBtn		: "Localizar",
+DlgFindNotFoundMsg	: "O texto especificado não foi encontrado.",
+
+// Replace Dialog
+DlgReplaceTitle			: "Substituir",
+DlgReplaceFindLbl		: "Procurar por:",
+DlgReplaceReplaceLbl	: "Substituir por:",
+DlgReplaceCaseChk		: "Coincidir Maiúsculas/Minúsculas",
+DlgReplaceReplaceBtn	: "Substituir",
+DlgReplaceReplAllBtn	: "Substituir Tudo",
+DlgReplaceWordChk		: "Coincidir a palavra inteira",
+
+// Paste Operations / Dialog
+PasteErrorCut	: "As configurações de segurança do seu navegador não permitem que o editor execute operações de recortar automaticamente. Por favor, utilize o teclado para recortar (Ctrl+X).",
+PasteErrorCopy	: "As configurações de segurança do seu navegador não permitem que o editor execute operações de copiar automaticamente. Por favor, utilize o teclado para copiar (Ctrl+C).",
+
+PasteAsText		: "Colar como Texto sem Formatação",
+PasteFromWord	: "Colar do Word",
+
+DlgPasteMsg2	: "Transfira o link usado no box usando o teclado com (<STRONG>Ctrl+V</STRONG>) e <STRONG>OK</STRONG>.",
+DlgPasteSec		: "As configurações de segurança do seu navegador não permitem que o editor acesse os dados da área de transferência diretamente. Por favor cole o conteúdo novamente nesta janela.",
+DlgPasteIgnoreFont		: "Ignorar definições de fonte",
+DlgPasteRemoveStyles	: "Remove definições de estilo",
+
+// Color Picker
+ColorAutomatic	: "Automático",
+ColorMoreColors	: "Mais Cores...",
+
+// Document Properties
+DocProps		: "Propriedades Documento",
+
+// Anchor Dialog
+DlgAnchorTitle		: "Formatar Âncora",
+DlgAnchorName		: "Nome da Âncora",
+DlgAnchorErrorName	: "Por favor, digite o nome da âncora",
+
+// Speller Pages Dialog
+DlgSpellNotInDic		: "Não encontrada",
+DlgSpellChangeTo		: "Alterar para",
+DlgSpellBtnIgnore		: "Ignorar uma vez",
+DlgSpellBtnIgnoreAll	: "Ignorar Todas",
+DlgSpellBtnReplace		: "Alterar",
+DlgSpellBtnReplaceAll	: "Alterar Todas",
+DlgSpellBtnUndo			: "Desfazer",
+DlgSpellNoSuggestions	: "-sem sugestões de ortografia-",
+DlgSpellProgress		: "Verificação ortográfica em andamento...",
+DlgSpellNoMispell		: "Verificação encerrada: Não foram encontrados erros de ortografia",
+DlgSpellNoChanges		: "Verificação ortográfica encerrada: Não houve alterações",
+DlgSpellOneChange		: "Verificação ortográfica encerrada: Uma palavra foi alterada",
+DlgSpellManyChanges		: "Verificação ortográfica encerrada: %1 foram alteradas",
+
+IeSpellDownload			: "A verificação ortográfica não foi instalada. Você gostaria de realizar o download agora?",
+
+// Button Dialog
+DlgButtonText		: "Texto (Valor)",
+DlgButtonType		: "Tipo",
+DlgButtonTypeBtn	: "Botão",
+DlgButtonTypeSbm	: "Enviar",
+DlgButtonTypeRst	: "Limpar",
+
+// Checkbox and Radio Button Dialogs
+DlgCheckboxName		: "Nome",
+DlgCheckboxValue	: "Valor",
+DlgCheckboxSelected	: "Selecionado",
+
+// Form Dialog
+DlgFormName		: "Nome",
+DlgFormAction	: "Action",
+DlgFormMethod	: "Método",
+
+// Select Field Dialog
+DlgSelectName		: "Nome",
+DlgSelectValue		: "Valor",
+DlgSelectSize		: "Tamanho",
+DlgSelectLines		: "linhas",
+DlgSelectChkMulti	: "Permitir múltiplas seleções",
+DlgSelectOpAvail	: "Opções disponíveis",
+DlgSelectOpText		: "Texto",
+DlgSelectOpValue	: "Valor",
+DlgSelectBtnAdd		: "Adicionar",
+DlgSelectBtnModify	: "Modificar",
+DlgSelectBtnUp		: "Para cima",
+DlgSelectBtnDown	: "Para baixo",
+DlgSelectBtnSetValue : "Definir como selecionado",
+DlgSelectBtnDelete	: "Remover",
+
+// Textarea Dialog
+DlgTextareaName	: "Nome",
+DlgTextareaCols	: "Colunas",
+DlgTextareaRows	: "Linhas",
+
+// Text Field Dialog
+DlgTextName			: "Nome",
+DlgTextValue		: "Valor",
+DlgTextCharWidth	: "Comprimento (em caracteres)",
+DlgTextMaxChars		: "Número Máximo de Caracteres",
+DlgTextType			: "Tipo",
+DlgTextTypeText		: "Texto",
+DlgTextTypePass		: "Senha",
+
+// Hidden Field Dialog
+DlgHiddenName	: "Nome",
+DlgHiddenValue	: "Valor",
+
+// Bulleted List Dialog
+BulletedListProp	: "Formatar Marcadores",
+NumberedListProp	: "Formatar Numeração",
+DlgLstStart			: "Iniciar",
+DlgLstType			: "Tipo",
+DlgLstTypeCircle	: "Círculo",
+DlgLstTypeDisc		: "Disco",
+DlgLstTypeSquare	: "Quadrado",
+DlgLstTypeNumbers	: "Números (1, 2, 3)",
+DlgLstTypeLCase		: "Letras Minúsculas (a, b, c)",
+DlgLstTypeUCase		: "Letras Maiúsculas (A, B, C)",
+DlgLstTypeSRoman	: "Números Romanos Minúsculos (i, ii, iii)",
+DlgLstTypeLRoman	: "Números Romanos Maiúsculos (I, II, III)",
+
+// Document Properties Dialog
+DlgDocGeneralTab	: "Geral",
+DlgDocBackTab		: "Plano de Fundo",
+DlgDocColorsTab		: "Cores e Margens",
+DlgDocMetaTab		: "Meta Dados",
+
+DlgDocPageTitle		: "Título da Página",
+DlgDocLangDir		: "Direção do Idioma",
+DlgDocLangDirLTR	: "Esquerda para Direita (LTR)",
+DlgDocLangDirRTL	: "Direita para Esquerda (RTL)",
+DlgDocLangCode		: "Código do Idioma",
+DlgDocCharSet		: "Codificação de Caracteres",
+DlgDocCharSetCE		: "Europa Central",
+DlgDocCharSetCT		: "Chinês Tradicional (Big5)",
+DlgDocCharSetCR		: "Cirílico",
+DlgDocCharSetGR		: "Grego",
+DlgDocCharSetJP		: "Japonês",
+DlgDocCharSetKR		: "Coreano",
+DlgDocCharSetTR		: "Turco",
+DlgDocCharSetUN		: "Unicode (UTF-8)",
+DlgDocCharSetWE		: "Europa Ocidental",
+DlgDocCharSetOther	: "Outra Codificação de Caracteres",
+
+DlgDocDocType		: "Cabeçalho Tipo de Documento",
+DlgDocDocTypeOther	: "Other Document Type Heading",
+DlgDocIncXHTML		: "Incluir Declarações XHTML",
+DlgDocBgColor		: "Cor do Plano de Fundo",
+DlgDocBgImage		: "URL da Imagem de Plano de Fundo",
+DlgDocBgNoScroll	: "Plano de Fundo Fixo",
+DlgDocCText			: "Texto",
+DlgDocCLink			: "Hiperlink",
+DlgDocCVisited		: "Hiperlink Visitado",
+DlgDocCActive		: "Hiperlink Ativo",
+DlgDocMargins		: "Margens da Página",
+DlgDocMaTop			: "Superior",
+DlgDocMaLeft		: "Inferior",
+DlgDocMaRight		: "Direita",
+DlgDocMaBottom		: "Inferior",
+DlgDocMeIndex		: "Palavras-chave de Indexação do Documento (separadas por vírgula)",
+DlgDocMeDescr		: "Descrição do Documento",
+DlgDocMeAuthor		: "Autor",
+DlgDocMeCopy		: "Direitos Autorais",
+DlgDocPreview		: "Visualizar",
+
+// Templates Dialog
+Templates			: "Modelos de layout",
+DlgTemplatesTitle	: "Modelo de layout do conteúdo",
+DlgTemplatesSelMsg	: "Selecione um modelo de layout para ser aberto no editor<br>(o conteúdo atual será perdido):",
+DlgTemplatesLoading	: "Carregando a lista de modelos de layout. Aguarde...",
+DlgTemplatesNoTpl	: "(Não foram definidos modelos de layout)",
+DlgTemplatesReplace	: "Substituir o conteúdo atual",
+
+// About Dialog
+DlgAboutAboutTab	: "Sobre",
+DlgAboutBrowserInfoTab	: "Informações do Navegador",
+DlgAboutLicenseTab	: "Licença",
+DlgAboutVersion		: "versão",
+DlgAboutInfo		: "Para maiores informações visite"
+};


Property changes on: announcement/trunk/src/main/webapp/fckeditor/editor/lang/pt-br.js
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/webapp/fckeditor/editor/lang/pt.js
===================================================================
--- announcement/trunk/src/main/webapp/fckeditor/editor/lang/pt.js	                        (rev 0)
+++ announcement/trunk/src/main/webapp/fckeditor/editor/lang/pt.js	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,515 @@
+/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2008 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * Portuguese language file.
+ */
+
+var FCKLang =
+{
+// Language direction : "ltr" (left to right) or "rtl" (right to left).
+Dir					: "ltr",
+
+ToolbarCollapse		: "Fechar Barra",
+ToolbarExpand		: "Expandir Barra",
+
+// Toolbar Items and Context Menu
+Save				: "Guardar",
+NewPage				: "Nova Página",
+Preview				: "Pré-visualizar",
+Cut					: "Cortar",
+Copy				: "Copiar",
+Paste				: "Colar",
+PasteText			: "Colar como texto não formatado",
+PasteWord			: "Colar do Word",
+Print				: "Imprimir",
+SelectAll			: "Seleccionar Tudo",
+RemoveFormat		: "Eliminar Formato",
+InsertLinkLbl		: "Hiperligação",
+InsertLink			: "Inserir/Editar Hiperligação",
+RemoveLink			: "Eliminar Hiperligação",
+Anchor				: " Inserir/Editar Âncora",
+AnchorDelete		: "Remove Anchor",	//MISSING
+InsertImageLbl		: "Imagem",
+InsertImage			: "Inserir/Editar Imagem",
+InsertFlashLbl		: "Flash",
+InsertFlash			: "Inserir/Editar Flash",
+InsertTableLbl		: "Tabela",
+InsertTable			: "Inserir/Editar Tabela",
+InsertLineLbl		: "Linha",
+InsertLine			: "Inserir Linha Horizontal",
+InsertSpecialCharLbl: "Caracter Especial",
+InsertSpecialChar	: "Inserir Caracter Especial",
+InsertSmileyLbl		: "Emoticons",
+InsertSmiley		: "Inserir Emoticons",
+About				: "Acerca do FCKeditor",
+Bold				: "Negrito",
+Italic				: "Itálico",
+Underline			: "Sublinhado",
+StrikeThrough		: "Rasurado",
+Subscript			: "Superior à Linha",
+Superscript			: "Inferior à Linha",
+LeftJustify			: "Alinhar à Esquerda",
+CenterJustify		: "Alinhar ao Centro",
+RightJustify		: "Alinhar à Direita",
+BlockJustify		: "Justificado",
+DecreaseIndent		: "Diminuir Avanço",
+IncreaseIndent		: "Aumentar Avanço",
+Blockquote			: "Blockquote",	//MISSING
+Undo				: "Anular",
+Redo				: "Repetir",
+NumberedListLbl		: "Numeração",
+NumberedList		: "Inserir/Eliminar Numeração",
+BulletedListLbl		: "Marcas",
+BulletedList		: "Inserir/Eliminar Marcas",
+ShowTableBorders	: "Mostrar Limites da Tabelas",
+ShowDetails			: "Mostrar Parágrafo",
+Style				: "Estilo",
+FontFormat			: "Formato",
+Font				: "Tipo de Letra",
+FontSize			: "Tamanho",
+TextColor			: "Cor do Texto",
+BGColor				: "Cor de Fundo",
+Source				: "Fonte",
+Find				: "Procurar",
+Replace				: "Substituir",
+SpellCheck			: "Verificação Ortográfica",
+UniversalKeyboard	: "Teclado Universal",
+PageBreakLbl		: "Quebra de Página",
+PageBreak			: "Inserir Quebra de Página",
+
+Form			: "Formulário",
+Checkbox		: "Caixa de Verificação",
+RadioButton		: "Botão de Opção",
+TextField		: "Campo de Texto",
+Textarea		: "Área de Texto",
+HiddenField		: "Campo Escondido",
+Button			: "Botão",
+SelectionField	: "Caixa de Combinação",
+ImageButton		: "Botão de Imagem",
+
+FitWindow		: "Maximizar o tamanho do editor",
+ShowBlocks		: "Show Blocks",	//MISSING
+
+// Context Menu
+EditLink			: "Editar Hiperligação",
+CellCM				: "Célula",
+RowCM				: "Linha",
+ColumnCM			: "Coluna",
+InsertRowAfter		: "Insert Row After",	//MISSING
+InsertRowBefore		: "Insert Row Before",	//MISSING
+DeleteRows			: "Eliminar Linhas",
+InsertColumnAfter	: "Insert Column After",	//MISSING
+InsertColumnBefore	: "Insert Column Before",	//MISSING
+DeleteColumns		: "Eliminar Coluna",
+InsertCellAfter		: "Insert Cell After",	//MISSING
+InsertCellBefore	: "Insert Cell Before",	//MISSING
+DeleteCells			: "Eliminar Célula",
+MergeCells			: "Unir Células",
+MergeRight			: "Merge Right",	//MISSING
+MergeDown			: "Merge Down",	//MISSING
+HorizontalSplitCell	: "Split Cell Horizontally",	//MISSING
+VerticalSplitCell	: "Split Cell Vertically",	//MISSING
+TableDelete			: "Eliminar Tabela",
+CellProperties		: "Propriedades da Célula",
+TableProperties		: "Propriedades da Tabela",
+ImageProperties		: "Propriedades da Imagem",
+FlashProperties		: "Propriedades do Flash",
+
+AnchorProp			: "Propriedades da Âncora",
+ButtonProp			: "Propriedades do Botão",
+CheckboxProp		: "Propriedades da Caixa de Verificação",
+HiddenFieldProp		: "Propriedades do Campo Escondido",
+RadioButtonProp		: "Propriedades do Botão de Opção",
+ImageButtonProp		: "Propriedades do Botão de imagens",
+TextFieldProp		: "Propriedades do Campo de Texto",
+SelectionFieldProp	: "Propriedades da Caixa de Combinação",
+TextareaProp		: "Propriedades da Área de Texto",
+FormProp			: "Propriedades do Formulário",
+
+FontFormats			: "Normal;Formatado;Endereço;Título 1;Título 2;Título 3;Título 4;Título 5;Título 6",
+
+// Alerts and Messages
+ProcessingXHTML		: "A Processar XHTML. Por favor, espere...",
+Done				: "Concluído",
+PasteWordConfirm	: "O texto que deseja parece ter sido copiado do Word. Deseja limpar a formatação antes de colar?",
+NotCompatiblePaste	: "Este comando só está disponível para Internet Explorer versão 5.5 ou superior. Deseja colar sem limpar a formatação?",
+UnknownToolbarItem	: "Item de barra desconhecido \"%1\"",
+UnknownCommand		: "Nome de comando desconhecido \"%1\"",
+NotImplemented		: "Comando não implementado",
+UnknownToolbarSet	: "Nome de barra \"%1\" não definido",
+NoActiveX			: "As definições de segurança do navegador podem limitar algumas potencalidades do editr. Deve activar a opção \"Executar controlos e extensões ActiveX\". Pode ocorrer erros ou verificar que faltam potencialidades.",
+BrowseServerBlocked : "Não foi possível abrir o navegador de recursos. Certifique-se que todos os bloqueadores de popup estão desactivados.",
+DialogBlocked		: "Não foi possível abrir a janela de diálogo. Certifique-se que todos os bloqueadores de popup estão desactivados.",
+
+// Dialogs
+DlgBtnOK			: "OK",
+DlgBtnCancel		: "Cancelar",
+DlgBtnClose			: "Fechar",
+DlgBtnBrowseServer	: "Navegar no Servidor",
+DlgAdvancedTag		: "Avançado",
+DlgOpOther			: "<Outro>",
+DlgInfoTab			: "Informação",
+DlgAlertUrl			: "Por favor introduza o URL",
+
+// General Dialogs Labels
+DlgGenNotSet		: "<Não definido>",
+DlgGenId			: "Id",
+DlgGenLangDir		: "Orientação de idioma",
+DlgGenLangDirLtr	: "Esquerda à Direita (LTR)",
+DlgGenLangDirRtl	: "Direita a Esquerda (RTL)",
+DlgGenLangCode		: "Código de Idioma",
+DlgGenAccessKey		: "Chave de Acesso",
+DlgGenName			: "Nome",
+DlgGenTabIndex		: "Índice de Tubulação",
+DlgGenLongDescr		: "Descrição Completa do URL",
+DlgGenClass			: "Classes de Estilo de Folhas Classes",
+DlgGenTitle			: "Título",
+DlgGenContType		: "Tipo de Conteúdo",
+DlgGenLinkCharset	: "Fonte de caracteres vinculado",
+DlgGenStyle			: "Estilo",
+
+// Image Dialog
+DlgImgTitle			: "Propriedades da Imagem",
+DlgImgInfoTab		: "Informação da Imagem",
+DlgImgBtnUpload		: "Enviar para o Servidor",
+DlgImgURL			: "URL",
+DlgImgUpload		: "Carregar",
+DlgImgAlt			: "Texto Alternativo",
+DlgImgWidth			: "Largura",
+DlgImgHeight		: "Altura",
+DlgImgLockRatio		: "Proporcional",
+DlgBtnResetSize		: "Tamanho Original",
+DlgImgBorder		: "Limite",
+DlgImgHSpace		: "Esp.Horiz",
+DlgImgVSpace		: "Esp.Vert",
+DlgImgAlign			: "Alinhamento",
+DlgImgAlignLeft		: "Esquerda",
+DlgImgAlignAbsBottom: "Abs inferior",
+DlgImgAlignAbsMiddle: "Abs centro",
+DlgImgAlignBaseline	: "Linha de base",
+DlgImgAlignBottom	: "Fundo",
+DlgImgAlignMiddle	: "Centro",
+DlgImgAlignRight	: "Direita",
+DlgImgAlignTextTop	: "Topo do texto",
+DlgImgAlignTop		: "Topo",
+DlgImgPreview		: "Pré-visualizar",
+DlgImgAlertUrl		: "Por favor introduza o URL da imagem",
+DlgImgLinkTab		: "Hiperligação",
+
+// Flash Dialog
+DlgFlashTitle		: "Propriedades do Flash",
+DlgFlashChkPlay		: "Reproduzir automaticamente",
+DlgFlashChkLoop		: "Loop",
+DlgFlashChkMenu		: "Permitir Menu do Flash",
+DlgFlashScale		: "Escala",
+DlgFlashScaleAll	: "Mostrar tudo",
+DlgFlashScaleNoBorder	: "Sem Limites",
+DlgFlashScaleFit	: "Tamanho Exacto",
+
+// Link Dialog
+DlgLnkWindowTitle	: "Hiperligação",
+DlgLnkInfoTab		: "Informação de Hiperligação",
+DlgLnkTargetTab		: "Destino",
+
+DlgLnkType			: "Tipo de Hiperligação",
+DlgLnkTypeURL		: "URL",
+DlgLnkTypeAnchor	: "Referência a esta página",
+DlgLnkTypeEMail		: "E-Mail",
+DlgLnkProto			: "Protocolo",
+DlgLnkProtoOther	: "<outro>",
+DlgLnkURL			: "URL",
+DlgLnkAnchorSel		: "Seleccionar una referência",
+DlgLnkAnchorByName	: "Por Nome de Referência",
+DlgLnkAnchorById	: "Por ID de elemento",
+DlgLnkNoAnchors		: "(Não há referências disponíveis no documento)",
+DlgLnkEMail			: "Endereço de E-Mail",
+DlgLnkEMailSubject	: "Título de Mensagem",
+DlgLnkEMailBody		: "Corpo da Mensagem",
+DlgLnkUpload		: "Carregar",
+DlgLnkBtnUpload		: "Enviar ao Servidor",
+
+DlgLnkTarget		: "Destino",
+DlgLnkTargetFrame	: "<Frame>",
+DlgLnkTargetPopup	: "<Janela de popup>",
+DlgLnkTargetBlank	: "Nova Janela(_blank)",
+DlgLnkTargetParent	: "Janela Pai (_parent)",
+DlgLnkTargetSelf	: "Mesma janela (_self)",
+DlgLnkTargetTop		: "Janela primaria (_top)",
+DlgLnkTargetFrameName	: "Nome do Frame Destino",
+DlgLnkPopWinName	: "Nome da Janela de Popup",
+DlgLnkPopWinFeat	: "Características de Janela de Popup",
+DlgLnkPopResize		: "Ajustável",
+DlgLnkPopLocation	: "Barra de localização",
+DlgLnkPopMenu		: "Barra de Menu",
+DlgLnkPopScroll		: "Barras de deslocamento",
+DlgLnkPopStatus		: "Barra de Estado",
+DlgLnkPopToolbar	: "Barra de Ferramentas",
+DlgLnkPopFullScrn	: "Janela Completa (IE)",
+DlgLnkPopDependent	: "Dependente (Netscape)",
+DlgLnkPopWidth		: "Largura",
+DlgLnkPopHeight		: "Altura",
+DlgLnkPopLeft		: "Posição Esquerda",
+DlgLnkPopTop		: "Posição Direita",
+
+DlnLnkMsgNoUrl		: "Por favor introduza a hiperligação URL",
+DlnLnkMsgNoEMail	: "Por favor introduza o endereço de e-mail",
+DlnLnkMsgNoAnchor	: "Por favor seleccione uma referência",
+DlnLnkMsgInvPopName	: "The popup name must begin with an alphabetic character and must not contain spaces",	//MISSING
+
+// Color Dialog
+DlgColorTitle		: "Seleccionar Cor",
+DlgColorBtnClear	: "Nenhuma",
+DlgColorHighlight	: "Destacado",
+DlgColorSelected	: "Seleccionado",
+
+// Smiley Dialog
+DlgSmileyTitle		: "Inserir um Emoticon",
+
+// Special Character Dialog
+DlgSpecialCharTitle	: "Seleccione um caracter especial",
+
+// Table Dialog
+DlgTableTitle		: "Propriedades da Tabela",
+DlgTableRows		: "Linhas",
+DlgTableColumns		: "Colunas",
+DlgTableBorder		: "Tamanho do Limite",
+DlgTableAlign		: "Alinhamento",
+DlgTableAlignNotSet	: "<Não definido>",
+DlgTableAlignLeft	: "Esquerda",
+DlgTableAlignCenter	: "Centrado",
+DlgTableAlignRight	: "Direita",
+DlgTableWidth		: "Largura",
+DlgTableWidthPx		: "pixeis",
+DlgTableWidthPc		: "percentagem",
+DlgTableHeight		: "Altura",
+DlgTableCellSpace	: "Esp. e/células",
+DlgTableCellPad		: "Esp. interior",
+DlgTableCaption		: "Título",
+DlgTableSummary		: "Sumário",
+
+// Table Cell Dialog
+DlgCellTitle		: "Propriedades da Célula",
+DlgCellWidth		: "Largura",
+DlgCellWidthPx		: "pixeis",
+DlgCellWidthPc		: "percentagem",
+DlgCellHeight		: "Altura",
+DlgCellWordWrap		: "Moldar Texto",
+DlgCellWordWrapNotSet	: "<Não definido>",
+DlgCellWordWrapYes	: "Sim",
+DlgCellWordWrapNo	: "Não",
+DlgCellHorAlign		: "Alinhamento Horizontal",
+DlgCellHorAlignNotSet	: "<Não definido>",
+DlgCellHorAlignLeft	: "Esquerda",
+DlgCellHorAlignCenter	: "Centrado",
+DlgCellHorAlignRight: "Direita",
+DlgCellVerAlign		: "Alinhamento Vertical",
+DlgCellVerAlignNotSet	: "<Não definido>",
+DlgCellVerAlignTop	: "Topo",
+DlgCellVerAlignMiddle	: "Médio",
+DlgCellVerAlignBottom	: "Fundi",
+DlgCellVerAlignBaseline	: "Linha de Base",
+DlgCellRowSpan		: "Unir Linhas",
+DlgCellCollSpan		: "Unir Colunas",
+DlgCellBackColor	: "Cor do Fundo",
+DlgCellBorderColor	: "Cor do Limite",
+DlgCellBtnSelect	: "Seleccione...",
+
+// Find and Replace Dialog
+DlgFindAndReplaceTitle	: "Find and Replace",	//MISSING
+
+// Find Dialog
+DlgFindTitle		: "Procurar",
+DlgFindFindBtn		: "Procurar",
+DlgFindNotFoundMsg	: "O texto especificado não foi encontrado.",
+
+// Replace Dialog
+DlgReplaceTitle			: "Substituir",
+DlgReplaceFindLbl		: "Texto a Procurar:",
+DlgReplaceReplaceLbl	: "Substituir por:",
+DlgReplaceCaseChk		: "Maiúsculas/Minúsculas",
+DlgReplaceReplaceBtn	: "Substituir",
+DlgReplaceReplAllBtn	: "Substituir Tudo",
+DlgReplaceWordChk		: "Coincidir com toda a palavra",
+
+// Paste Operations / Dialog
+PasteErrorCut	: "A configuração de segurança do navegador não permite a execução automática de operações de cortar. Por favor use o teclado (Ctrl+X).",
+PasteErrorCopy	: "A configuração de segurança do navegador não permite a execução automática de operações de copiar. Por favor use o teclado (Ctrl+C).",
+
+PasteAsText		: "Colar como Texto Simples",
+PasteFromWord	: "Colar do Word",
+
+DlgPasteMsg2	: "Por favor, cole dentro da seguinte caixa usando o teclado (<STRONG>Ctrl+V</STRONG>) e prima <STRONG>OK</STRONG>.",
+DlgPasteSec		: "Because of your browser security settings, the editor is not able to access your clipboard data directly. You are required to paste it again in this window.",	//MISSING
+DlgPasteIgnoreFont		: "Ignorar da definições do Tipo de Letra ",
+DlgPasteRemoveStyles	: "Remover as definições de Estilos",
+
+// Color Picker
+ColorAutomatic	: "Automático",
+ColorMoreColors	: "Mais Cores...",
+
+// Document Properties
+DocProps		: "Propriedades do Documento",
+
+// Anchor Dialog
+DlgAnchorTitle		: "Propriedades da Âncora",
+DlgAnchorName		: "Nome da Âncora",
+DlgAnchorErrorName	: "Por favor, introduza o nome da âncora",
+
+// Speller Pages Dialog
+DlgSpellNotInDic		: "Não está num directório",
+DlgSpellChangeTo		: "Mudar para",
+DlgSpellBtnIgnore		: "Ignorar",
+DlgSpellBtnIgnoreAll	: "Ignorar Tudo",
+DlgSpellBtnReplace		: "Substituir",
+DlgSpellBtnReplaceAll	: "Substituir Tudo",
+DlgSpellBtnUndo			: "Anular",
+DlgSpellNoSuggestions	: "- Sem sugestões -",
+DlgSpellProgress		: "Verificação ortográfica em progresso…",
+DlgSpellNoMispell		: "Verificação ortográfica completa: não foram encontrados erros",
+DlgSpellNoChanges		: "Verificação ortográfica completa: não houve alteração de palavras",
+DlgSpellOneChange		: "Verificação ortográfica completa: uma palavra alterada",
+DlgSpellManyChanges		: "Verificação ortográfica completa: %1 palavras alteradas",
+
+IeSpellDownload			: " Verificação ortográfica não instalada. Quer descarregar agora?",
+
+// Button Dialog
+DlgButtonText		: "Texto (Valor)",
+DlgButtonType		: "Tipo",
+DlgButtonTypeBtn	: "Button",	//MISSING
+DlgButtonTypeSbm	: "Submit",	//MISSING
+DlgButtonTypeRst	: "Reset",	//MISSING
+
+// Checkbox and Radio Button Dialogs
+DlgCheckboxName		: "Nome",
+DlgCheckboxValue	: "Valor",
+DlgCheckboxSelected	: "Seleccionado",
+
+// Form Dialog
+DlgFormName		: "Nome",
+DlgFormAction	: "Acção",
+DlgFormMethod	: "Método",
+
+// Select Field Dialog
+DlgSelectName		: "Nome",
+DlgSelectValue		: "Valor",
+DlgSelectSize		: "Tamanho",
+DlgSelectLines		: "linhas",
+DlgSelectChkMulti	: "Permitir selecções múltiplas",
+DlgSelectOpAvail	: "Opções Possíveis",
+DlgSelectOpText		: "Texto",
+DlgSelectOpValue	: "Valor",
+DlgSelectBtnAdd		: "Adicionar",
+DlgSelectBtnModify	: "Modificar",
+DlgSelectBtnUp		: "Para cima",
+DlgSelectBtnDown	: "Para baixo",
+DlgSelectBtnSetValue : "Definir um valor por defeito",
+DlgSelectBtnDelete	: "Apagar",
+
+// Textarea Dialog
+DlgTextareaName	: "Nome",
+DlgTextareaCols	: "Colunas",
+DlgTextareaRows	: "Linhas",
+
+// Text Field Dialog
+DlgTextName			: "Nome",
+DlgTextValue		: "Valor",
+DlgTextCharWidth	: "Tamanho do caracter",
+DlgTextMaxChars		: "Nr. Máximo de Caracteres",
+DlgTextType			: "Tipo",
+DlgTextTypeText		: "Texto",
+DlgTextTypePass		: "Palavra-chave",
+
+// Hidden Field Dialog
+DlgHiddenName	: "Nome",
+DlgHiddenValue	: "Valor",
+
+// Bulleted List Dialog
+BulletedListProp	: "Propriedades da Marca",
+NumberedListProp	: "Propriedades da Numeração",
+DlgLstStart			: "Start",	//MISSING
+DlgLstType			: "Tipo",
+DlgLstTypeCircle	: "Circulo",
+DlgLstTypeDisc		: "Disco",
+DlgLstTypeSquare	: "Quadrado",
+DlgLstTypeNumbers	: "Números (1, 2, 3)",
+DlgLstTypeLCase		: "Letras Minúsculas (a, b, c)",
+DlgLstTypeUCase		: "Letras Maiúsculas (A, B, C)",
+DlgLstTypeSRoman	: "Numeração Romana em Minúsculas (i, ii, iii)",
+DlgLstTypeLRoman	: "Numeração Romana em Maiúsculas (I, II, III)",
+
+// Document Properties Dialog
+DlgDocGeneralTab	: "Geral",
+DlgDocBackTab		: "Fundo",
+DlgDocColorsTab		: "Cores e Margens",
+DlgDocMetaTab		: "Meta Data",
+
+DlgDocPageTitle		: "Título da Página",
+DlgDocLangDir		: "Orientação de idioma",
+DlgDocLangDirLTR	: "Esquerda à Direita (LTR)",
+DlgDocLangDirRTL	: "Direita à Esquerda (RTL)",
+DlgDocLangCode		: "Código de Idioma",
+DlgDocCharSet		: "Codificação de Caracteres",
+DlgDocCharSetCE		: "Central European",	//MISSING
+DlgDocCharSetCT		: "Chinese Traditional (Big5)",	//MISSING
+DlgDocCharSetCR		: "Cyrillic",	//MISSING
+DlgDocCharSetGR		: "Greek",	//MISSING
+DlgDocCharSetJP		: "Japanese",	//MISSING
+DlgDocCharSetKR		: "Korean",	//MISSING
+DlgDocCharSetTR		: "Turkish",	//MISSING
+DlgDocCharSetUN		: "Unicode (UTF-8)",	//MISSING
+DlgDocCharSetWE		: "Western European",	//MISSING
+DlgDocCharSetOther	: "Outra Codificação de Caracteres",
+
+DlgDocDocType		: "Tipo de Cabeçalho do Documento",
+DlgDocDocTypeOther	: "Outro Tipo de Cabeçalho do Documento",
+DlgDocIncXHTML		: "Incluir Declarações XHTML",
+DlgDocBgColor		: "Cor de Fundo",
+DlgDocBgImage		: "Caminho para a Imagem de Fundo",
+DlgDocBgNoScroll	: "Fundo Fixo",
+DlgDocCText			: "Texto",
+DlgDocCLink			: "Hiperligação",
+DlgDocCVisited		: "Hiperligação Visitada",
+DlgDocCActive		: "Hiperligação Activa",
+DlgDocMargins		: "Margem das Páginas",
+DlgDocMaTop			: "Topo",
+DlgDocMaLeft		: "Esquerda",
+DlgDocMaRight		: "Direita",
+DlgDocMaBottom		: "Fundo",
+DlgDocMeIndex		: "Palavras de Indexação do Documento (separadas por virgula)",
+DlgDocMeDescr		: "Descrição do Documento",
+DlgDocMeAuthor		: "Autor",
+DlgDocMeCopy		: "Direitos de Autor",
+DlgDocPreview		: "Pré-visualizar",
+
+// Templates Dialog
+Templates			: "Modelos",
+DlgTemplatesTitle	: "Modelo de Conteúdo",
+DlgTemplatesSelMsg	: "Por favor, seleccione o modelo a abrir no editor<br>(o conteúdo actual será perdido):",
+DlgTemplatesLoading	: "A carregar a lista de modelos. Aguarde por favor...",
+DlgTemplatesNoTpl	: "(Sem modelos definidos)",
+DlgTemplatesReplace	: "Replace actual contents",	//MISSING
+
+// About Dialog
+DlgAboutAboutTab	: "Acerca",
+DlgAboutBrowserInfoTab	: "Informação do Nevegador",
+DlgAboutLicenseTab	: "Licença",
+DlgAboutVersion		: "versão",
+DlgAboutInfo		: "Para mais informações por favor dirija-se a"
+};


Property changes on: announcement/trunk/src/main/webapp/fckeditor/editor/lang/pt.js
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/webapp/fckeditor/editor/lang/ro.js
===================================================================
--- announcement/trunk/src/main/webapp/fckeditor/editor/lang/ro.js	                        (rev 0)
+++ announcement/trunk/src/main/webapp/fckeditor/editor/lang/ro.js	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,515 @@
+/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2008 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * Romanian language file.
+ */
+
+var FCKLang =
+{
+// Language direction : "ltr" (left to right) or "rtl" (right to left).
+Dir					: "ltr",
+
+ToolbarCollapse		: "Ascunde bara cu opţiuni",
+ToolbarExpand		: "Expandează bara cu opţiuni",
+
+// Toolbar Items and Context Menu
+Save				: "Salvează",
+NewPage				: "Pagină nouă",
+Preview				: "Previzualizare",
+Cut					: "Taie",
+Copy				: "Copiază",
+Paste				: "Adaugă",
+PasteText			: "Adaugă ca text simplu",
+PasteWord			: "Adaugă din Word",
+Print				: "Printează",
+SelectAll			: "Selectează tot",
+RemoveFormat		: "Înlătură formatarea",
+InsertLinkLbl		: "Link (Legătură web)",
+InsertLink			: "Inserează/Editează link (legătură web)",
+RemoveLink			: "Înlătură link (legătură web)",
+Anchor				: "Inserează/Editează ancoră",
+AnchorDelete		: "Şterge ancoră",
+InsertImageLbl		: "Imagine",
+InsertImage			: "Inserează/Editează imagine",
+InsertFlashLbl		: "Flash",
+InsertFlash			: "Inserează/Editează flash",
+InsertTableLbl		: "Tabel",
+InsertTable			: "Inserează/Editează tabel",
+InsertLineLbl		: "Linie",
+InsertLine			: "Inserează linie orizontă",
+InsertSpecialCharLbl: "Caracter special",
+InsertSpecialChar	: "Inserează caracter special",
+InsertSmileyLbl		: "Figură expresivă (Emoticon)",
+InsertSmiley		: "Inserează Figură expresivă (Emoticon)",
+About				: "Despre FCKeditor",
+Bold				: "Îngroşat (bold)",
+Italic				: "Înclinat (italic)",
+Underline			: "Subliniat (underline)",
+StrikeThrough		: "Tăiat (strike through)",
+Subscript			: "Indice (subscript)",
+Superscript			: "Putere (superscript)",
+LeftJustify			: "Aliniere la stânga",
+CenterJustify		: "Aliniere centrală",
+RightJustify		: "Aliniere la dreapta",
+BlockJustify		: "Aliniere în bloc (Block Justify)",
+DecreaseIndent		: "Scade indentarea",
+IncreaseIndent		: "Creşte indentarea",
+Blockquote			: "Citat",
+Undo				: "Starea anterioară (undo)",
+Redo				: "Starea ulterioară (redo)",
+NumberedListLbl		: "Listă numerotată",
+NumberedList		: "Inserează/Şterge listă numerotată",
+BulletedListLbl		: "Listă cu puncte",
+BulletedList		: "Inserează/Şterge listă cu puncte",
+ShowTableBorders	: "Arată marginile tabelului",
+ShowDetails			: "Arată detalii",
+Style				: "Stil",
+FontFormat			: "Formatare",
+Font				: "Font",
+FontSize			: "Mărime",
+TextColor			: "Culoarea textului",
+BGColor				: "Coloarea fundalului",
+Source				: "Sursa",
+Find				: "Găseşte",
+Replace				: "Înlocuieşte",
+SpellCheck			: "Verifică text",
+UniversalKeyboard	: "Tastatură universală",
+PageBreakLbl		: "Separator de pagină (Page Break)",
+PageBreak			: "Inserează separator de pagină (Page Break)",
+
+Form			: "Formular (Form)",
+Checkbox		: "Bifă (Checkbox)",
+RadioButton		: "Buton radio (RadioButton)",
+TextField		: "Câmp text (TextField)",
+Textarea		: "Suprafaţă text (Textarea)",
+HiddenField		: "Câmp ascuns (HiddenField)",
+Button			: "Buton",
+SelectionField	: "Câmp selecţie (SelectionField)",
+ImageButton		: "Buton imagine (ImageButton)",
+
+FitWindow		: "Maximizează mărimea editorului",
+ShowBlocks		: "Arată blocurile",
+
+// Context Menu
+EditLink			: "Editează Link",
+CellCM				: "Celulă",
+RowCM				: "Linie",
+ColumnCM			: "Coloană",
+InsertRowAfter		: "Inserează linie după",
+InsertRowBefore		: "Inserează linie înainte",
+DeleteRows			: "Şterge linii",
+InsertColumnAfter	: "Inserează coloană după",
+InsertColumnBefore	: "Inserează coloană înainte",
+DeleteColumns		: "Şterge celule",
+InsertCellAfter		: "Inserează celulă după",
+InsertCellBefore	: "Inserează celulă înainte",
+DeleteCells			: "Şterge celule",
+MergeCells			: "Uneşte celule",
+MergeRight			: "Uneşte la dreapta",
+MergeDown			: "Uneşte jos",
+HorizontalSplitCell	: "Împarte celula pe orizontală",
+VerticalSplitCell	: "Împarte celula pe verticală",
+TableDelete			: "Şterge tabel",
+CellProperties		: "Proprietăţile celulei",
+TableProperties		: "Proprietăţile tabelului",
+ImageProperties		: "Proprietăţile imaginii",
+FlashProperties		: "Proprietăţile flash-ului",
+
+AnchorProp			: "Proprietăţi ancoră",
+ButtonProp			: "Proprietăţi buton",
+CheckboxProp		: "Proprietăţi bifă (Checkbox)",
+HiddenFieldProp		: "Proprietăţi câmp ascuns (Hidden Field)",
+RadioButtonProp		: "Proprietăţi buton radio (Radio Button)",
+ImageButtonProp		: "Proprietăţi buton imagine (Image Button)",
+TextFieldProp		: "Proprietăţi câmp text (Text Field)",
+SelectionFieldProp	: "Proprietăţi câmp selecţie (Selection Field)",
+TextareaProp		: "Proprietăţi suprafaţă text (Textarea)",
+FormProp			: "Proprietăţi formular (Form)",
+
+FontFormats			: "Normal;Formatted;Address;Heading 1;Heading 2;Heading 3;Heading 4;Heading 5;Heading 6;Normal (DIV)",	//MISSING
+
+// Alerts and Messages
+ProcessingXHTML		: "Procesăm XHTML. Vă rugăm aşteptaţi...",
+Done				: "Am terminat",
+PasteWordConfirm	: "Textul pe care doriţi să-l adăugaţi pare a fi formatat pentru Word. Doriţi să-l curăţaţi de această formatare înainte de a-l adăuga?",
+NotCompatiblePaste	: "Această facilitate e disponibilă doar pentru Microsoft Internet Explorer, versiunea 5.5 sau ulterioară. Vreţi să-l adăugaţi fără a-i fi înlăturat formatarea?",
+UnknownToolbarItem	: "Obiectul \"%1\" din bara cu opţiuni necunoscut",
+UnknownCommand		: "Comanda \"%1\" necunoscută",
+NotImplemented		: "Comandă neimplementată",
+UnknownToolbarSet	: "Grupul din bara cu opţiuni \"%1\" nu există",
+NoActiveX			: "Setările de securitate ale programului dvs. cu care navigaţi pe internet (browser) pot limita anumite funcţionalităţi ale editorului. Pentru a evita asta, trebuie să activaţi opţiunea \"Run ActiveX controls and plug-ins\". Poate veţi întâlni erori sau veţi observa funcţionalităţi lipsă.",
+BrowseServerBlocked : "The resources browser could not be opened. Asiguraţi-vă că nu e activ niciun \"popup blocker\" (funcţionalitate a programului de navigat (browser) sau a unui plug-in al acestuia de a bloca deschiderea unui noi ferestre).",
+DialogBlocked		: "Nu a fost posibilă deschiderea unei ferestre de dialog. Asiguraţi-vă că nu e activ niciun \"popup blocker\" (funcţionalitate a programului de navigat (browser) sau a unui plug-in al acestuia de a bloca deschiderea unui noi ferestre).",
+
+// Dialogs
+DlgBtnOK			: "Bine",
+DlgBtnCancel		: "Anulare",
+DlgBtnClose			: "Închidere",
+DlgBtnBrowseServer	: "Răsfoieşte server",
+DlgAdvancedTag		: "Avansat",
+DlgOpOther			: "<Altul>",
+DlgInfoTab			: "Informaţii",
+DlgAlertUrl			: "Vă rugăm să scrieţi URL-ul",
+
+// General Dialogs Labels
+DlgGenNotSet		: "<nesetat>",
+DlgGenId			: "Id",
+DlgGenLangDir		: "Direcţia cuvintelor",
+DlgGenLangDirLtr	: "stânga-dreapta (LTR)",
+DlgGenLangDirRtl	: "dreapta-stânga (RTL)",
+DlgGenLangCode		: "Codul limbii",
+DlgGenAccessKey		: "Tasta de acces",
+DlgGenName			: "Nume",
+DlgGenTabIndex		: "Indexul tabului",
+DlgGenLongDescr		: "Descrierea lungă URL",
+DlgGenClass			: "Clasele cu stilul paginii (CSS)",
+DlgGenTitle			: "Titlul consultativ",
+DlgGenContType		: "Tipul consultativ al titlului",
+DlgGenLinkCharset	: "Setul de caractere al resursei legate",
+DlgGenStyle			: "Stil",
+
+// Image Dialog
+DlgImgTitle			: "Proprietăţile imaginii",
+DlgImgInfoTab		: "Informaţii despre imagine",
+DlgImgBtnUpload		: "Trimite la server",
+DlgImgURL			: "URL",
+DlgImgUpload		: "Încarcă",
+DlgImgAlt			: "Text alternativ",
+DlgImgWidth			: "Lăţime",
+DlgImgHeight		: "Înălţime",
+DlgImgLockRatio		: "Păstrează proporţiile",
+DlgBtnResetSize		: "Resetează mărimea",
+DlgImgBorder		: "Margine",
+DlgImgHSpace		: "HSpace",
+DlgImgVSpace		: "VSpace",
+DlgImgAlign			: "Aliniere",
+DlgImgAlignLeft		: "Stânga",
+DlgImgAlignAbsBottom: "Jos absolut (Abs Bottom)",
+DlgImgAlignAbsMiddle: "Mijloc absolut (Abs Middle)",
+DlgImgAlignBaseline	: "Linia de jos (Baseline)",
+DlgImgAlignBottom	: "Jos",
+DlgImgAlignMiddle	: "Mijloc",
+DlgImgAlignRight	: "Dreapta",
+DlgImgAlignTextTop	: "Text sus",
+DlgImgAlignTop		: "Sus",
+DlgImgPreview		: "Previzualizare",
+DlgImgAlertUrl		: "Vă rugăm să scrieţi URL-ul imaginii",
+DlgImgLinkTab		: "Link (Legătură web)",
+
+// Flash Dialog
+DlgFlashTitle		: "Proprietăţile flash-ului",
+DlgFlashChkPlay		: "Rulează automat",
+DlgFlashChkLoop		: "Repetă (Loop)",
+DlgFlashChkMenu		: "Activează meniul flash",
+DlgFlashScale		: "Scală",
+DlgFlashScaleAll	: "Arată tot",
+DlgFlashScaleNoBorder	: "Fără margini (No border)",
+DlgFlashScaleFit	: "Potriveşte",
+
+// Link Dialog
+DlgLnkWindowTitle	: "Link (Legătură web)",
+DlgLnkInfoTab		: "Informaţii despre link (Legătură web)",
+DlgLnkTargetTab		: "Ţintă (Target)",
+
+DlgLnkType			: "Tipul link-ului (al legăturii web)",
+DlgLnkTypeURL		: "URL",
+DlgLnkTypeAnchor	: "Ancoră în această pagină",
+DlgLnkTypeEMail		: "E-Mail",
+DlgLnkProto			: "Protocol",
+DlgLnkProtoOther	: "<altul>",
+DlgLnkURL			: "URL",
+DlgLnkAnchorSel		: "Selectaţi o ancoră",
+DlgLnkAnchorByName	: "după numele ancorei",
+DlgLnkAnchorById	: "după Id-ul elementului",
+DlgLnkNoAnchors		: "(Nicio ancoră disponibilă în document)",
+DlgLnkEMail			: "Adresă de e-mail",
+DlgLnkEMailSubject	: "Subiectul mesajului",
+DlgLnkEMailBody		: "Conţinutul mesajului",
+DlgLnkUpload		: "Încarcă",
+DlgLnkBtnUpload		: "Trimite la server",
+
+DlgLnkTarget		: "Ţintă (Target)",
+DlgLnkTargetFrame	: "<frame>",
+DlgLnkTargetPopup	: "<fereastra popup>",
+DlgLnkTargetBlank	: "Fereastră nouă (_blank)",
+DlgLnkTargetParent	: "Fereastra părinte (_parent)",
+DlgLnkTargetSelf	: "Aceeaşi fereastră (_self)",
+DlgLnkTargetTop		: "Fereastra din topul ierarhiei (_top)",
+DlgLnkTargetFrameName	: "Numele frame-ului ţintă",
+DlgLnkPopWinName	: "Numele ferestrei popup",
+DlgLnkPopWinFeat	: "Proprietăţile ferestrei popup",
+DlgLnkPopResize		: "Scalabilă",
+DlgLnkPopLocation	: "Bara de locaţie",
+DlgLnkPopMenu		: "Bara de meniu",
+DlgLnkPopScroll		: "Scroll Bars",
+DlgLnkPopStatus		: "Bara de status",
+DlgLnkPopToolbar	: "Bara de opţiuni",
+DlgLnkPopFullScrn	: "Tot ecranul (Full Screen)(IE)",
+DlgLnkPopDependent	: "Dependent (Netscape)",
+DlgLnkPopWidth		: "Lăţime",
+DlgLnkPopHeight		: "Înălţime",
+DlgLnkPopLeft		: "Poziţia la stânga",
+DlgLnkPopTop		: "Poziţia la dreapta",
+
+DlnLnkMsgNoUrl		: "Vă rugăm să scrieţi URL-ul",
+DlnLnkMsgNoEMail	: "Vă rugăm să scrieţi adresa de e-mail",
+DlnLnkMsgNoAnchor	: "Vă rugăm să selectaţi o ancoră",
+DlnLnkMsgInvPopName	: "Numele 'popup'-ului trebuie să înceapă cu un caracter alfabetic şi trebuie să nu conţină spaţii",
+
+// Color Dialog
+DlgColorTitle		: "Selectează culoare",
+DlgColorBtnClear	: "Curăţă",
+DlgColorHighlight	: "Subliniază (Highlight)",
+DlgColorSelected	: "Selectat",
+
+// Smiley Dialog
+DlgSmileyTitle		: "Inserează o figură expresivă (Emoticon)",
+
+// Special Character Dialog
+DlgSpecialCharTitle	: "Selectează caracter special",
+
+// Table Dialog
+DlgTableTitle		: "Proprietăţile tabelului",
+DlgTableRows		: "Linii",
+DlgTableColumns		: "Coloane",
+DlgTableBorder		: "Mărimea marginii",
+DlgTableAlign		: "Aliniament",
+DlgTableAlignNotSet	: "<Nesetat>",
+DlgTableAlignLeft	: "Stânga",
+DlgTableAlignCenter	: "Centru",
+DlgTableAlignRight	: "Dreapta",
+DlgTableWidth		: "Lăţime",
+DlgTableWidthPx		: "pixeli",
+DlgTableWidthPc		: "procente",
+DlgTableHeight		: "Înălţime",
+DlgTableCellSpace	: "Spaţiu între celule",
+DlgTableCellPad		: "Spaţiu în cadrul celulei",
+DlgTableCaption		: "Titlu (Caption)",
+DlgTableSummary		: "Rezumat",
+
+// Table Cell Dialog
+DlgCellTitle		: "Proprietăţile celulei",
+DlgCellWidth		: "Lăţime",
+DlgCellWidthPx		: "pixeli",
+DlgCellWidthPc		: "procente",
+DlgCellHeight		: "Înălţime",
+DlgCellWordWrap		: "Desparte cuvintele (Wrap)",
+DlgCellWordWrapNotSet	: "<Nesetat>",
+DlgCellWordWrapYes	: "Da",
+DlgCellWordWrapNo	: "Nu",
+DlgCellHorAlign		: "Aliniament orizontal",
+DlgCellHorAlignNotSet	: "<Nesetat>",
+DlgCellHorAlignLeft	: "Stânga",
+DlgCellHorAlignCenter	: "Centru",
+DlgCellHorAlignRight: "Dreapta",
+DlgCellVerAlign		: "Aliniament vertical",
+DlgCellVerAlignNotSet	: "<Nesetat>",
+DlgCellVerAlignTop	: "Sus",
+DlgCellVerAlignMiddle	: "Mijloc",
+DlgCellVerAlignBottom	: "Jos",
+DlgCellVerAlignBaseline	: "Linia de jos (Baseline)",
+DlgCellRowSpan		: "Lungimea în linii (Span)",
+DlgCellCollSpan		: "Lungimea în coloane (Span)",
+DlgCellBackColor	: "Culoarea fundalului",
+DlgCellBorderColor	: "Culoarea marginii",
+DlgCellBtnSelect	: "Selectaţi...",
+
+// Find and Replace Dialog
+DlgFindAndReplaceTitle	: "Găseşte şi înlocuieşte",
+
+// Find Dialog
+DlgFindTitle		: "Găseşte",
+DlgFindFindBtn		: "Găseşte",
+DlgFindNotFoundMsg	: "Textul specificat nu a fost găsit.",
+
+// Replace Dialog
+DlgReplaceTitle			: "Replace",
+DlgReplaceFindLbl		: "Găseşte:",
+DlgReplaceReplaceLbl	: "Înlocuieşte cu:",
+DlgReplaceCaseChk		: "Deosebeşte majuscule de minuscule (Match case)",
+DlgReplaceReplaceBtn	: "Înlocuieşte",
+DlgReplaceReplAllBtn	: "Înlocuieşte tot",
+DlgReplaceWordChk		: "Doar cuvintele întregi",
+
+// Paste Operations / Dialog
+PasteErrorCut	: "Setările de securitate ale navigatorului (browser) pe care îl folosiţi nu permit editorului să execute automat operaţiunea de tăiere. Vă rugăm folosiţi tastatura (Ctrl+X).",
+PasteErrorCopy	: "Setările de securitate ale navigatorului (browser) pe care îl folosiţi nu permit editorului să execute automat operaţiunea de copiere. Vă rugăm folosiţi tastatura (Ctrl+C).",
+
+PasteAsText		: "Adaugă ca text simplu (Plain Text)",
+PasteFromWord	: "Adaugă din Word",
+
+DlgPasteMsg2	: "Vă rugăm adăugaţi în căsuţa următoare folosind tastatura (<STRONG>Ctrl+V</STRONG>) şi apăsaţi <STRONG>OK</STRONG>.",
+DlgPasteSec		: "Din cauza setărilor de securitate ale programului dvs. cu care navigaţi pe internet (browser), editorul nu poate accesa direct datele din clipboard. Va trebui să adăugaţi din nou datele în această fereastră.",
+DlgPasteIgnoreFont		: "Ignoră definiţiile Font Face",
+DlgPasteRemoveStyles	: "Şterge definiţiile stilurilor",
+
+// Color Picker
+ColorAutomatic	: "Automatic",
+ColorMoreColors	: "Mai multe culori...",
+
+// Document Properties
+DocProps		: "Proprietăţile documentului",
+
+// Anchor Dialog
+DlgAnchorTitle		: "Proprietăţile ancorei",
+DlgAnchorName		: "Numele ancorei",
+DlgAnchorErrorName	: "Vă rugăm scrieţi numele ancorei",
+
+// Speller Pages Dialog
+DlgSpellNotInDic		: "Nu e în dicţionar",
+DlgSpellChangeTo		: "Schimbă în",
+DlgSpellBtnIgnore		: "Ignoră",
+DlgSpellBtnIgnoreAll	: "Ignoră toate",
+DlgSpellBtnReplace		: "Înlocuieşte",
+DlgSpellBtnReplaceAll	: "Înlocuieşte tot",
+DlgSpellBtnUndo			: "Starea anterioară (undo)",
+DlgSpellNoSuggestions	: "- Fără sugestii -",
+DlgSpellProgress		: "Verificarea textului în desfăşurare...",
+DlgSpellNoMispell		: "Verificarea textului terminată: Nicio greşeală găsită",
+DlgSpellNoChanges		: "Verificarea textului terminată: Niciun cuvânt modificat",
+DlgSpellOneChange		: "Verificarea textului terminată: Un cuvânt modificat",
+DlgSpellManyChanges		: "Verificarea textului terminată: 1% cuvinte modificate",
+
+IeSpellDownload			: "Unealta pentru verificat textul (Spell checker) neinstalată. Doriţi să o descărcaţi acum?",
+
+// Button Dialog
+DlgButtonText		: "Text (Valoare)",
+DlgButtonType		: "Tip",
+DlgButtonTypeBtn	: "Button",
+DlgButtonTypeSbm	: "Submit",
+DlgButtonTypeRst	: "Reset",
+
+// Checkbox and Radio Button Dialogs
+DlgCheckboxName		: "Nume",
+DlgCheckboxValue	: "Valoare",
+DlgCheckboxSelected	: "Selectat",
+
+// Form Dialog
+DlgFormName		: "Nume",
+DlgFormAction	: "Acţiune",
+DlgFormMethod	: "Metodă",
+
+// Select Field Dialog
+DlgSelectName		: "Nume",
+DlgSelectValue		: "Valoare",
+DlgSelectSize		: "Mărime",
+DlgSelectLines		: "linii",
+DlgSelectChkMulti	: "Permite selecţii multiple",
+DlgSelectOpAvail	: "Opţiuni disponibile",
+DlgSelectOpText		: "Text",
+DlgSelectOpValue	: "Valoare",
+DlgSelectBtnAdd		: "Adaugă",
+DlgSelectBtnModify	: "Modifică",
+DlgSelectBtnUp		: "Sus",
+DlgSelectBtnDown	: "Jos",
+DlgSelectBtnSetValue : "Setează ca valoare selectată",
+DlgSelectBtnDelete	: "Şterge",
+
+// Textarea Dialog
+DlgTextareaName	: "Nume",
+DlgTextareaCols	: "Coloane",
+DlgTextareaRows	: "Linii",
+
+// Text Field Dialog
+DlgTextName			: "Nume",
+DlgTextValue		: "Valoare",
+DlgTextCharWidth	: "Lărgimea caracterului",
+DlgTextMaxChars		: "Caractere maxime",
+DlgTextType			: "Tip",
+DlgTextTypeText		: "Text",
+DlgTextTypePass		: "Parolă",
+
+// Hidden Field Dialog
+DlgHiddenName	: "Nume",
+DlgHiddenValue	: "Valoare",
+
+// Bulleted List Dialog
+BulletedListProp	: "Proprietăţile listei punctate (Bulleted List)",
+NumberedListProp	: "Proprietăţile listei numerotate (Numbered List)",
+DlgLstStart			: "Start",
+DlgLstType			: "Tip",
+DlgLstTypeCircle	: "Cerc",
+DlgLstTypeDisc		: "Disc",
+DlgLstTypeSquare	: "Pătrat",
+DlgLstTypeNumbers	: "Numere (1, 2, 3)",
+DlgLstTypeLCase		: "Minuscule-litere mici (a, b, c)",
+DlgLstTypeUCase		: "Majuscule (A, B, C)",
+DlgLstTypeSRoman	: "Cifre romane mici (i, ii, iii)",
+DlgLstTypeLRoman	: "Cifre romane mari (I, II, III)",
+
+// Document Properties Dialog
+DlgDocGeneralTab	: "General",
+DlgDocBackTab		: "Fundal",
+DlgDocColorsTab		: "Culori si margini",
+DlgDocMetaTab		: "Meta Data",
+
+DlgDocPageTitle		: "Titlul paginii",
+DlgDocLangDir		: "Descrierea limbii",
+DlgDocLangDirLTR	: "stânga-dreapta (LTR)",
+DlgDocLangDirRTL	: "dreapta-stânga (RTL)",
+DlgDocLangCode		: "Codul limbii",
+DlgDocCharSet		: "Encoding setului de caractere",
+DlgDocCharSetCE		: "Central european",
+DlgDocCharSetCT		: "Chinezesc tradiţional (Big5)",
+DlgDocCharSetCR		: "Chirilic",
+DlgDocCharSetGR		: "Grecesc",
+DlgDocCharSetJP		: "Japonez",
+DlgDocCharSetKR		: "Corean",
+DlgDocCharSetTR		: "Turcesc",
+DlgDocCharSetUN		: "Unicode (UTF-8)",
+DlgDocCharSetWE		: "Vest european",
+DlgDocCharSetOther	: "Alt encoding al setului de caractere",
+
+DlgDocDocType		: "Document Type Heading",
+DlgDocDocTypeOther	: "Alt Document Type Heading",
+DlgDocIncXHTML		: "Include declaraţii XHTML",
+DlgDocBgColor		: "Culoarea fundalului (Background Color)",
+DlgDocBgImage		: "URL-ul imaginii din fundal (Background Image URL)",
+DlgDocBgNoScroll	: "Fundal neflotant, fix (Nonscrolling Background)",
+DlgDocCText			: "Text",
+DlgDocCLink			: "Link (Legătură web)",
+DlgDocCVisited		: "Link (Legătură web) vizitat",
+DlgDocCActive		: "Link (Legătură web) activ",
+DlgDocMargins		: "Marginile paginii",
+DlgDocMaTop			: "Sus",
+DlgDocMaLeft		: "Stânga",
+DlgDocMaRight		: "Dreapta",
+DlgDocMaBottom		: "Jos",
+DlgDocMeIndex		: "Cuvinte cheie după care se va indexa documentul (separate prin virgulă)",
+DlgDocMeDescr		: "Descrierea documentului",
+DlgDocMeAuthor		: "Autor",
+DlgDocMeCopy		: "Drepturi de autor",
+DlgDocPreview		: "Previzualizare",
+
+// Templates Dialog
+Templates			: "Template-uri (şabloane)",
+DlgTemplatesTitle	: "Template-uri (şabloane) de conţinut",
+DlgTemplatesSelMsg	: "Vă rugăm selectaţi template-ul (şablonul) ce se va deschide în editor<br>(conţinutul actual va fi pierdut):",
+DlgTemplatesLoading	: "Se încarcă lista cu template-uri (şabloane). Vă rugăm aşteptaţi...",
+DlgTemplatesNoTpl	: "(Niciun template (şablon) definit)",
+DlgTemplatesReplace	: "Înlocuieşte cuprinsul actual",
+
+// About Dialog
+DlgAboutAboutTab	: "Despre",
+DlgAboutBrowserInfoTab	: "Informaţii browser",
+DlgAboutLicenseTab	: "Licenţă",
+DlgAboutVersion		: "versiune",
+DlgAboutInfo		: "Pentru informaţii amănunţite, vizitaţi"
+};


Property changes on: announcement/trunk/src/main/webapp/fckeditor/editor/lang/ro.js
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/webapp/fckeditor/editor/lang/ru.js
===================================================================
--- announcement/trunk/src/main/webapp/fckeditor/editor/lang/ru.js	                        (rev 0)
+++ announcement/trunk/src/main/webapp/fckeditor/editor/lang/ru.js	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,515 @@
+/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2008 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * Russian language file.
+ */
+
+var FCKLang =
+{
+// Language direction : "ltr" (left to right) or "rtl" (right to left).
+Dir					: "ltr",
+
+ToolbarCollapse		: "Свернуть панель инструментов",
+ToolbarExpand		: "Развернуть панель инструментов",
+
+// Toolbar Items and Context Menu
+Save				: "Сохранить",
+NewPage				: "Новая страница",
+Preview				: "Предварительный просмотр",
+Cut					: "Вырезать",
+Copy				: "Копировать",
+Paste				: "Вставить",
+PasteText			: "Вставить только текст",
+PasteWord			: "Вставить из Word",
+Print				: "Печать",
+SelectAll			: "Выделить все",
+RemoveFormat		: "Убрать форматирование",
+InsertLinkLbl		: "Ссылка",
+InsertLink			: "Вставить/Редактировать ссылку",
+RemoveLink			: "Убрать ссылку",
+Anchor				: "Вставить/Редактировать якорь",
+AnchorDelete		: "Убрать якорь",
+InsertImageLbl		: "Изображение",
+InsertImage			: "Вставить/Редактировать изображение",
+InsertFlashLbl		: "Flash",
+InsertFlash			: "Вставить/Редактировать Flash",
+InsertTableLbl		: "Таблица",
+InsertTable			: "Вставить/Редактировать таблицу",
+InsertLineLbl		: "Линия",
+InsertLine			: "Вставить горизонтальную линию",
+InsertSpecialCharLbl: "Специальный символ",
+InsertSpecialChar	: "Вставить специальный символ",
+InsertSmileyLbl		: "Смайлик",
+InsertSmiley		: "Вставить смайлик",
+About				: "О FCKeditor",
+Bold				: "Жирный",
+Italic				: "Курсив",
+Underline			: "Подчеркнутый",
+StrikeThrough		: "Зачеркнутый",
+Subscript			: "Подстрочный индекс",
+Superscript			: "Надстрочный индекс",
+LeftJustify			: "По левому краю",
+CenterJustify		: "По центру",
+RightJustify		: "По правому краю",
+BlockJustify		: "По ширине",
+DecreaseIndent		: "Уменьшить отступ",
+IncreaseIndent		: "Увеличить отступ",
+Blockquote			: "Цитата",
+Undo				: "Отменить",
+Redo				: "Повторить",
+NumberedListLbl		: "Нумерованный список",
+NumberedList		: "Вставить/Удалить нумерованный список",
+BulletedListLbl		: "Маркированный список",
+BulletedList		: "Вставить/Удалить маркированный список",
+ShowTableBorders	: "Показать бордюры таблицы",
+ShowDetails			: "Показать детали",
+Style				: "Стиль",
+FontFormat			: "Форматирование",
+Font				: "Шрифт",
+FontSize			: "Размер",
+TextColor			: "Цвет текста",
+BGColor				: "Цвет фона",
+Source				: "Источник",
+Find				: "Найти",
+Replace				: "Заменить",
+SpellCheck			: "Проверить орфографию",
+UniversalKeyboard	: "Универсальная клавиатура",
+PageBreakLbl		: "Разрыв страницы",
+PageBreak			: "Вставить разрыв страницы",
+
+Form			: "Форма",
+Checkbox		: "Флаговая кнопка",
+RadioButton		: "Кнопка выбора",
+TextField		: "Текстовое поле",
+Textarea		: "Текстовая область",
+HiddenField		: "Скрытое поле",
+Button			: "Кнопка",
+SelectionField	: "Список",
+ImageButton		: "Кнопка с изображением",
+
+FitWindow		: "Развернуть окно редактора",
+ShowBlocks		: "Показать блоки",
+
+// Context Menu
+EditLink			: "Вставить ссылку",
+CellCM				: "Ячейка",
+RowCM				: "Строка",
+ColumnCM			: "Колонка",
+InsertRowAfter		: "Вставить строку после",
+InsertRowBefore		: "Вставить строку до",
+DeleteRows			: "Удалить строки",
+InsertColumnAfter	: "Вставить колонку после",
+InsertColumnBefore	: "Вставить колонку до",
+DeleteColumns		: "Удалить колонки",
+InsertCellAfter		: "Вставить ячейку после",
+InsertCellBefore	: "Вставить ячейку до",
+DeleteCells			: "Удалить ячейки",
+MergeCells			: "Соединить ячейки",
+MergeRight			: "Соединить вправо",
+MergeDown			: "Соединить вниз",
+HorizontalSplitCell	: "Разбить ячейку горизонтально",
+VerticalSplitCell	: "Разбить ячейку вертикально",
+TableDelete			: "Удалить таблицу",
+CellProperties		: "Свойства ячейки",
+TableProperties		: "Свойства таблицы",
+ImageProperties		: "Свойства изображения",
+FlashProperties		: "Свойства Flash",
+
+AnchorProp			: "Свойства якоря",
+ButtonProp			: "Свойства кнопки",
+CheckboxProp		: "Свойства флаговой кнопки",
+HiddenFieldProp		: "Свойства скрытого поля",
+RadioButtonProp		: "Свойства кнопки выбора",
+ImageButtonProp		: "Свойства кнопки с изображением",
+TextFieldProp		: "Свойства текстового поля",
+SelectionFieldProp	: "Свойства списка",
+TextareaProp		: "Свойства текстовой области",
+FormProp			: "Свойства формы",
+
+FontFormats			: "Нормальный;Форматированный;Адрес;Заголовок 1;Заголовок 2;Заголовок 3;Заголовок 4;Заголовок 5;Заголовок 6;Нормальный (DIV)",
+
+// Alerts and Messages
+ProcessingXHTML		: "Обработка XHTML. Пожалуйста, подождите...",
+Done				: "Сделано",
+PasteWordConfirm	: "Текст, который вы хотите вставить, похож на копируемый из Word. Вы хотите очистить его перед вставкой?",
+NotCompatiblePaste	: "Эта команда доступна для Internet Explorer версии 5.5 или выше. Вы хотите вставить без очистки?",
+UnknownToolbarItem	: "Не известный элемент панели инструментов \"%1\"",
+UnknownCommand		: "Не известное имя команды \"%1\"",
+NotImplemented		: "Команда не реализована",
+UnknownToolbarSet	: "Панель инструментов \"%1\" не существует",
+NoActiveX			: "Настройки безопасности вашего браузера могут ограничивать некоторые свойства редактора. Вы должны включить опцию \"Запускать элементы управления ActiveX и плугины\". Вы можете видеть ошибки и замечать отсутствие возможностей.",
+BrowseServerBlocked : "Ресурсы браузера не могут быть открыты. Проверьте что блокировки всплывающих окон выключены.",
+DialogBlocked		: "Невозможно открыть окно диалога. Проверьте что блокировки всплывающих окон выключены.",
+
+// Dialogs
+DlgBtnOK			: "ОК",
+DlgBtnCancel		: "Отмена",
+DlgBtnClose			: "Закрыть",
+DlgBtnBrowseServer	: "Просмотреть на сервере",
+DlgAdvancedTag		: "Расширенный",
+DlgOpOther			: "<Другое>",
+DlgInfoTab			: "Информация",
+DlgAlertUrl			: "Пожалуйста, вставьте URL",
+
+// General Dialogs Labels
+DlgGenNotSet		: "<не определено>",
+DlgGenId			: "Идентификатор",
+DlgGenLangDir		: "Направление языка",
+DlgGenLangDirLtr	: "Слева на право (LTR)",
+DlgGenLangDirRtl	: "Справа на лево (RTL)",
+DlgGenLangCode		: "Язык",
+DlgGenAccessKey		: "Горячая клавиша",
+DlgGenName			: "Имя",
+DlgGenTabIndex		: "Последовательность перехода",
+DlgGenLongDescr		: "Длинное описание URL",
+DlgGenClass			: "Класс CSS",
+DlgGenTitle			: "Заголовок",
+DlgGenContType		: "Тип содержимого",
+DlgGenLinkCharset	: "Кодировка",
+DlgGenStyle			: "Стиль CSS",
+
+// Image Dialog
+DlgImgTitle			: "Свойства изображения",
+DlgImgInfoTab		: "Информация о изображении",
+DlgImgBtnUpload		: "Послать на сервер",
+DlgImgURL			: "URL",
+DlgImgUpload		: "Закачать",
+DlgImgAlt			: "Альтернативный текст",
+DlgImgWidth			: "Ширина",
+DlgImgHeight		: "Высота",
+DlgImgLockRatio		: "Сохранять пропорции",
+DlgBtnResetSize		: "Сбросить размер",
+DlgImgBorder		: "Бордюр",
+DlgImgHSpace		: "Горизонтальный отступ",
+DlgImgVSpace		: "Вертикальный отступ",
+DlgImgAlign			: "Выравнивание",
+DlgImgAlignLeft		: "По левому краю",
+DlgImgAlignAbsBottom: "Абс понизу",
+DlgImgAlignAbsMiddle: "Абс посередине",
+DlgImgAlignBaseline	: "По базовой линии",
+DlgImgAlignBottom	: "Понизу",
+DlgImgAlignMiddle	: "Посередине",
+DlgImgAlignRight	: "По правому краю",
+DlgImgAlignTextTop	: "Текст наверху",
+DlgImgAlignTop		: "По верху",
+DlgImgPreview		: "Предварительный просмотр",
+DlgImgAlertUrl		: "Пожалуйста, введите URL изображения",
+DlgImgLinkTab		: "Ссылка",
+
+// Flash Dialog
+DlgFlashTitle		: "Свойства Flash",
+DlgFlashChkPlay		: "Авто проигрывание",
+DlgFlashChkLoop		: "Повтор",
+DlgFlashChkMenu		: "Включить меню Flash",
+DlgFlashScale		: "Масштабировать",
+DlgFlashScaleAll	: "Показывать все",
+DlgFlashScaleNoBorder	: "Без бордюра",
+DlgFlashScaleFit	: "Точное совпадение",
+
+// Link Dialog
+DlgLnkWindowTitle	: "Ссылка",
+DlgLnkInfoTab		: "Информация ссылки",
+DlgLnkTargetTab		: "Цель",
+
+DlgLnkType			: "Тип ссылки",
+DlgLnkTypeURL		: "URL",
+DlgLnkTypeAnchor	: "Якорь на эту страницу",
+DlgLnkTypeEMail		: "Эл. почта",
+DlgLnkProto			: "Протокол",
+DlgLnkProtoOther	: "<другое>",
+DlgLnkURL			: "URL",
+DlgLnkAnchorSel		: "Выберите якорь",
+DlgLnkAnchorByName	: "По имени якоря",
+DlgLnkAnchorById	: "По идентификатору элемента",
+DlgLnkNoAnchors		: "(Нет якорей доступных в этом документе)",
+DlgLnkEMail			: "Адрес эл. почты",
+DlgLnkEMailSubject	: "Заголовок сообщения",
+DlgLnkEMailBody		: "Тело сообщения",
+DlgLnkUpload		: "Закачать",
+DlgLnkBtnUpload		: "Послать на сервер",
+
+DlgLnkTarget		: "Цель",
+DlgLnkTargetFrame	: "<фрейм>",
+DlgLnkTargetPopup	: "<всплывающее окно>",
+DlgLnkTargetBlank	: "Новое окно (_blank)",
+DlgLnkTargetParent	: "Родительское окно (_parent)",
+DlgLnkTargetSelf	: "Тоже окно (_self)",
+DlgLnkTargetTop		: "Самое верхнее окно (_top)",
+DlgLnkTargetFrameName	: "Имя целевого фрейма",
+DlgLnkPopWinName	: "Имя всплывающего окна",
+DlgLnkPopWinFeat	: "Свойства всплывающего окна",
+DlgLnkPopResize		: "Изменяющееся в размерах",
+DlgLnkPopLocation	: "Панель локации",
+DlgLnkPopMenu		: "Панель меню",
+DlgLnkPopScroll		: "Полосы прокрутки",
+DlgLnkPopStatus		: "Строка состояния",
+DlgLnkPopToolbar	: "Панель инструментов",
+DlgLnkPopFullScrn	: "Полный экран (IE)",
+DlgLnkPopDependent	: "Зависимый (Netscape)",
+DlgLnkPopWidth		: "Ширина",
+DlgLnkPopHeight		: "Высота",
+DlgLnkPopLeft		: "Позиция слева",
+DlgLnkPopTop		: "Позиция сверху",
+
+DlnLnkMsgNoUrl		: "Пожалуйста, введите URL ссылки",
+DlnLnkMsgNoEMail	: "Пожалуйста, введите адрес эл. почты",
+DlnLnkMsgNoAnchor	: "Пожалуйста, выберете якорь",
+DlnLnkMsgInvPopName	: "Название вспывающего окна должно начинаться буквы и не может содержать пробелов",
+
+// Color Dialog
+DlgColorTitle		: "Выберите цвет",
+DlgColorBtnClear	: "Очистить",
+DlgColorHighlight	: "Подсвеченный",
+DlgColorSelected	: "Выбранный",
+
+// Smiley Dialog
+DlgSmileyTitle		: "Вставить смайлик",
+
+// Special Character Dialog
+DlgSpecialCharTitle	: "Выберите специальный символ",
+
+// Table Dialog
+DlgTableTitle		: "Свойства таблицы",
+DlgTableRows		: "Строки",
+DlgTableColumns		: "Колонки",
+DlgTableBorder		: "Размер бордюра",
+DlgTableAlign		: "Выравнивание",
+DlgTableAlignNotSet	: "<Не уст.>",
+DlgTableAlignLeft	: "Слева",
+DlgTableAlignCenter	: "По центру",
+DlgTableAlignRight	: "Справа",
+DlgTableWidth		: "Ширина",
+DlgTableWidthPx		: "пикселей",
+DlgTableWidthPc		: "процентов",
+DlgTableHeight		: "Высота",
+DlgTableCellSpace	: "Промежуток (spacing)",
+DlgTableCellPad		: "Отступ (padding)",
+DlgTableCaption		: "Заголовок",
+DlgTableSummary		: "Резюме",
+
+// Table Cell Dialog
+DlgCellTitle		: "Свойства ячейки",
+DlgCellWidth		: "Ширина",
+DlgCellWidthPx		: "пикселей",
+DlgCellWidthPc		: "процентов",
+DlgCellHeight		: "Высота",
+DlgCellWordWrap		: "Заворачивание текста",
+DlgCellWordWrapNotSet	: "<Не уст.>",
+DlgCellWordWrapYes	: "Да",
+DlgCellWordWrapNo	: "Нет",
+DlgCellHorAlign		: "Гор. выравнивание",
+DlgCellHorAlignNotSet	: "<Не уст.>",
+DlgCellHorAlignLeft	: "Слева",
+DlgCellHorAlignCenter	: "По центру",
+DlgCellHorAlignRight: "Справа",
+DlgCellVerAlign		: "Верт. выравнивание",
+DlgCellVerAlignNotSet	: "<Не уст.>",
+DlgCellVerAlignTop	: "Сверху",
+DlgCellVerAlignMiddle	: "Посередине",
+DlgCellVerAlignBottom	: "Снизу",
+DlgCellVerAlignBaseline	: "По базовой линии",
+DlgCellRowSpan		: "Диапазон строк (span)",
+DlgCellCollSpan		: "Диапазон колонок (span)",
+DlgCellBackColor	: "Цвет фона",
+DlgCellBorderColor	: "Цвет бордюра",
+DlgCellBtnSelect	: "Выберите...",
+
+// Find and Replace Dialog
+DlgFindAndReplaceTitle	: "Найти и заменить",
+
+// Find Dialog
+DlgFindTitle		: "Найти",
+DlgFindFindBtn		: "Найти",
+DlgFindNotFoundMsg	: "Указанный текст не найден.",
+
+// Replace Dialog
+DlgReplaceTitle			: "Заменить",
+DlgReplaceFindLbl		: "Найти:",
+DlgReplaceReplaceLbl	: "Заменить на:",
+DlgReplaceCaseChk		: "Учитывать регистр",
+DlgReplaceReplaceBtn	: "Заменить",
+DlgReplaceReplAllBtn	: "Заменить все",
+DlgReplaceWordChk		: "Совпадение целых слов",
+
+// Paste Operations / Dialog
+PasteErrorCut	: "Настройки безопасности вашего браузера не позволяют редактору автоматически выполнять операции вырезания. Пожалуйста, используйте клавиатуру для этого (Ctrl+X).",
+PasteErrorCopy	: "Настройки безопасности вашего браузера не позволяют редактору автоматически выполнять операции копирования. Пожалуйста, используйте клавиатуру для этого (Ctrl+C).",
+
+PasteAsText		: "Вставить только текст",
+PasteFromWord	: "Вставить из Word",
+
+DlgPasteMsg2	: "Пожалуйста, вставьте текст в прямоугольник, используя сочетание клавиш (<STRONG>Ctrl+V</STRONG>), и нажмите <STRONG>OK</STRONG>.",
+DlgPasteSec		: "По причине настроек безопасности браузера, редактор не имеет доступа к данным буфера обмена напрямую. Вам необходимо вставить текст снова в это окно.",
+DlgPasteIgnoreFont		: "Игнорировать определения гарнитуры",
+DlgPasteRemoveStyles	: "Убрать определения стилей",
+
+// Color Picker
+ColorAutomatic	: "Автоматический",
+ColorMoreColors	: "Цвета...",
+
+// Document Properties
+DocProps		: "Свойства документа",
+
+// Anchor Dialog
+DlgAnchorTitle		: "Свойства якоря",
+DlgAnchorName		: "Имя якоря",
+DlgAnchorErrorName	: "Пожалуйста, введите имя якоря",
+
+// Speller Pages Dialog
+DlgSpellNotInDic		: "Нет в словаре",
+DlgSpellChangeTo		: "Заменить на",
+DlgSpellBtnIgnore		: "Игнорировать",
+DlgSpellBtnIgnoreAll	: "Игнорировать все",
+DlgSpellBtnReplace		: "Заменить",
+DlgSpellBtnReplaceAll	: "Заменить все",
+DlgSpellBtnUndo			: "Отменить",
+DlgSpellNoSuggestions	: "- Нет предположений -",
+DlgSpellProgress		: "Идет проверка орфографии...",
+DlgSpellNoMispell		: "Проверка орфографии закончена: ошибок не найдено",
+DlgSpellNoChanges		: "Проверка орфографии закончена: ни одного слова не изменено",
+DlgSpellOneChange		: "Проверка орфографии закончена: одно слово изменено",
+DlgSpellManyChanges		: "Проверка орфографии закончена: 1% слов изменен",
+
+IeSpellDownload			: "Модуль проверки орфографии не установлен. Хотите скачать его сейчас?",
+
+// Button Dialog
+DlgButtonText		: "Текст (Значение)",
+DlgButtonType		: "Тип",
+DlgButtonTypeBtn	: "Кнопка",
+DlgButtonTypeSbm	: "Отправить",
+DlgButtonTypeRst	: "Сбросить",
+
+// Checkbox and Radio Button Dialogs
+DlgCheckboxName		: "Имя",
+DlgCheckboxValue	: "Значение",
+DlgCheckboxSelected	: "Выбранная",
+
+// Form Dialog
+DlgFormName		: "Имя",
+DlgFormAction	: "Действие",
+DlgFormMethod	: "Метод",
+
+// Select Field Dialog
+DlgSelectName		: "Имя",
+DlgSelectValue		: "Значение",
+DlgSelectSize		: "Размер",
+DlgSelectLines		: "линии",
+DlgSelectChkMulti	: "Разрешить множественный выбор",
+DlgSelectOpAvail	: "Доступные варианты",
+DlgSelectOpText		: "Текст",
+DlgSelectOpValue	: "Значение",
+DlgSelectBtnAdd		: "Добавить",
+DlgSelectBtnModify	: "Модифицировать",
+DlgSelectBtnUp		: "Вверх",
+DlgSelectBtnDown	: "Вниз",
+DlgSelectBtnSetValue : "Установить как выбранное значение",
+DlgSelectBtnDelete	: "Удалить",
+
+// Textarea Dialog
+DlgTextareaName	: "Имя",
+DlgTextareaCols	: "Колонки",
+DlgTextareaRows	: "Строки",
+
+// Text Field Dialog
+DlgTextName			: "Имя",
+DlgTextValue		: "Значение",
+DlgTextCharWidth	: "Ширина",
+DlgTextMaxChars		: "Макс. кол-во символов",
+DlgTextType			: "Тип",
+DlgTextTypeText		: "Текст",
+DlgTextTypePass		: "Пароль",
+
+// Hidden Field Dialog
+DlgHiddenName	: "Имя",
+DlgHiddenValue	: "Значение",
+
+// Bulleted List Dialog
+BulletedListProp	: "Свойства маркированного списка",
+NumberedListProp	: "Свойства нумерованного списка",
+DlgLstStart			: "Начало",
+DlgLstType			: "Тип",
+DlgLstTypeCircle	: "Круг",
+DlgLstTypeDisc		: "Диск",
+DlgLstTypeSquare	: "Квадрат",
+DlgLstTypeNumbers	: "Номера (1, 2, 3)",
+DlgLstTypeLCase		: "Буквы нижнего регистра (a, b, c)",
+DlgLstTypeUCase		: "Буквы верхнего регистра (A, B, C)",
+DlgLstTypeSRoman	: "Малые римские буквы (i, ii, iii)",
+DlgLstTypeLRoman	: "Большие римские буквы (I, II, III)",
+
+// Document Properties Dialog
+DlgDocGeneralTab	: "Общие",
+DlgDocBackTab		: "Задний фон",
+DlgDocColorsTab		: "Цвета и отступы",
+DlgDocMetaTab		: "Мета данные",
+
+DlgDocPageTitle		: "Заголовок страницы",
+DlgDocLangDir		: "Направление текста",
+DlgDocLangDirLTR	: "Слева направо (LTR)",
+DlgDocLangDirRTL	: "Справа налево (RTL)",
+DlgDocLangCode		: "Код языка",
+DlgDocCharSet		: "Кодировка набора символов",
+DlgDocCharSetCE		: "Центрально-европейская",
+DlgDocCharSetCT		: "Китайская традиционная (Big5)",
+DlgDocCharSetCR		: "Кириллица",
+DlgDocCharSetGR		: "Греческая",
+DlgDocCharSetJP		: "Японская",
+DlgDocCharSetKR		: "Корейская",
+DlgDocCharSetTR		: "Турецкая",
+DlgDocCharSetUN		: "Юникод (UTF-8)",
+DlgDocCharSetWE		: "Западно-европейская",
+DlgDocCharSetOther	: "Другая кодировка набора символов",
+
+DlgDocDocType		: "Заголовок типа документа",
+DlgDocDocTypeOther	: "Другой заголовок типа документа",
+DlgDocIncXHTML		: "Включить XHTML объявления",
+DlgDocBgColor		: "Цвет фона",
+DlgDocBgImage		: "URL изображения фона",
+DlgDocBgNoScroll	: "Нескроллируемый фон",
+DlgDocCText			: "Текст",
+DlgDocCLink			: "Ссылка",
+DlgDocCVisited		: "Посещенная ссылка",
+DlgDocCActive		: "Активная ссылка",
+DlgDocMargins		: "Отступы страницы",
+DlgDocMaTop			: "Верхний",
+DlgDocMaLeft		: "Левый",
+DlgDocMaRight		: "Правый",
+DlgDocMaBottom		: "Нижний",
+DlgDocMeIndex		: "Ключевые слова документа (разделенные запятой)",
+DlgDocMeDescr		: "Описание документа",
+DlgDocMeAuthor		: "Автор",
+DlgDocMeCopy		: "Авторские права",
+DlgDocPreview		: "Предварительный просмотр",
+
+// Templates Dialog
+Templates			: "Шаблоны",
+DlgTemplatesTitle	: "Шаблоны содержимого",
+DlgTemplatesSelMsg	: "Пожалуйста, выберете шаблон для открытия в редакторе<br>(текущее содержимое будет потеряно):",
+DlgTemplatesLoading	: "Загрузка списка шаблонов. Пожалуйста, подождите...",
+DlgTemplatesNoTpl	: "(Ни одного шаблона не определено)",
+DlgTemplatesReplace	: "Заменить текущее содержание",
+
+// About Dialog
+DlgAboutAboutTab	: "О программе",
+DlgAboutBrowserInfoTab	: "Информация браузера",
+DlgAboutLicenseTab	: "Лицензия",
+DlgAboutVersion		: "Версия",
+DlgAboutInfo		: "Для большей информации, посетите"
+};


Property changes on: announcement/trunk/src/main/webapp/fckeditor/editor/lang/ru.js
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/webapp/fckeditor/editor/lang/sk.js
===================================================================
--- announcement/trunk/src/main/webapp/fckeditor/editor/lang/sk.js	                        (rev 0)
+++ announcement/trunk/src/main/webapp/fckeditor/editor/lang/sk.js	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,515 @@
+/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2008 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * Slovak language file.
+ */
+
+var FCKLang =
+{
+// Language direction : "ltr" (left to right) or "rtl" (right to left).
+Dir					: "ltr",
+
+ToolbarCollapse		: "Skryť panel nástrojov",
+ToolbarExpand		: "Zobraziť panel nástrojov",
+
+// Toolbar Items and Context Menu
+Save				: "Uložit",
+NewPage				: "Nová stránka",
+Preview				: "Náhľad",
+Cut					: "Vystrihnúť",
+Copy				: "Kopírovať",
+Paste				: "Vložiť",
+PasteText			: "Vložiť ako čistý text",
+PasteWord			: "Vložiť z Wordu",
+Print				: "Tlač",
+SelectAll			: "Vybrať všetko",
+RemoveFormat		: "Odstrániť formátovanie",
+InsertLinkLbl		: "Odkaz",
+InsertLink			: "Vložiť/zmeniť odkaz",
+RemoveLink			: "Odstrániť odkaz",
+Anchor				: "Vložiť/zmeniť kotvu",
+AnchorDelete		: "Remove Anchor",	//MISSING
+InsertImageLbl		: "Obrázok",
+InsertImage			: "Vložiť/zmeniť obrázok",
+InsertFlashLbl		: "Flash",
+InsertFlash			: "Vložiť/zmeniť Flash",
+InsertTableLbl		: "Tabuľka",
+InsertTable			: "Vložiť/zmeniť tabuľku",
+InsertLineLbl		: "Čiara",
+InsertLine			: "Vložiť vodorovnú čiaru",
+InsertSpecialCharLbl: "Špeciálne znaky",
+InsertSpecialChar	: "Vložiť špeciálne znaky",
+InsertSmileyLbl		: "Smajlíky",
+InsertSmiley		: "Vložiť smajlíka",
+About				: "O aplikáci FCKeditor",
+Bold				: "Tučné",
+Italic				: "Kurzíva",
+Underline			: "Podčiarknuté",
+StrikeThrough		: "Prečiarknuté",
+Subscript			: "Dolný index",
+Superscript			: "Horný index",
+LeftJustify			: "Zarovnať vľavo",
+CenterJustify		: "Zarovnať na stred",
+RightJustify		: "Zarovnať vpravo",
+BlockJustify		: "Zarovnať do bloku",
+DecreaseIndent		: "Zmenšiť odsadenie",
+IncreaseIndent		: "Zväčšiť odsadenie",
+Blockquote			: "Blockquote",	//MISSING
+Undo				: "Späť",
+Redo				: "Znovu",
+NumberedListLbl		: "Číslovanie",
+NumberedList		: "Vložiť/odstrániť číslovaný zoznam",
+BulletedListLbl		: "Odrážky",
+BulletedList		: "Vložiť/odstraniť odrážky",
+ShowTableBorders	: "Zobraziť okraje tabuliek",
+ShowDetails			: "Zobraziť podrobnosti",
+Style				: "Štýl",
+FontFormat			: "Formát",
+Font				: "Písmo",
+FontSize			: "Veľkosť",
+TextColor			: "Farba textu",
+BGColor				: "Farba pozadia",
+Source				: "Zdroj",
+Find				: "Hľadať",
+Replace				: "Nahradiť",
+SpellCheck			: "Kontrola pravopisu",
+UniversalKeyboard	: "Univerzálna klávesnica",
+PageBreakLbl		: "Oddeľovač stránky",
+PageBreak			: "Vložiť oddeľovač stránky",
+
+Form			: "Formulár",
+Checkbox		: "Zaškrtávacie políčko",
+RadioButton		: "Prepínač",
+TextField		: "Textové pole",
+Textarea		: "Textová oblasť",
+HiddenField		: "Skryté pole",
+Button			: "Tlačíidlo",
+SelectionField	: "Rozbaľovací zoznam",
+ImageButton		: "Obrázkové tlačidlo",
+
+FitWindow		: "Maximalizovať veľkosť okna editora",
+ShowBlocks		: "Show Blocks",	//MISSING
+
+// Context Menu
+EditLink			: "Zmeniť odkaz",
+CellCM				: "Bunka",
+RowCM				: "Riadok",
+ColumnCM			: "Stĺpec",
+InsertRowAfter		: "Insert Row After",	//MISSING
+InsertRowBefore		: "Insert Row Before",	//MISSING
+DeleteRows			: "Vymazať riadok",
+InsertColumnAfter	: "Insert Column After",	//MISSING
+InsertColumnBefore	: "Insert Column Before",	//MISSING
+DeleteColumns		: "Zmazať stĺpec",
+InsertCellAfter		: "Insert Cell After",	//MISSING
+InsertCellBefore	: "Insert Cell Before",	//MISSING
+DeleteCells			: "Vymazať bunky",
+MergeCells			: "Zlúčiť bunky",
+MergeRight			: "Merge Right",	//MISSING
+MergeDown			: "Merge Down",	//MISSING
+HorizontalSplitCell	: "Split Cell Horizontally",	//MISSING
+VerticalSplitCell	: "Split Cell Vertically",	//MISSING
+TableDelete			: "Vymazať tabuľku",
+CellProperties		: "Vlastnosti bunky",
+TableProperties		: "Vlastnosti tabuľky",
+ImageProperties		: "Vlastnosti obrázku",
+FlashProperties		: "Vlastnosti Flashu",
+
+AnchorProp			: "Vlastnosti kotvy",
+ButtonProp			: "Vlastnosti tlačidla",
+CheckboxProp		: "Vlastnosti zaškrtávacieho políčka",
+HiddenFieldProp		: "Vlastnosti skrytého poľa",
+RadioButtonProp		: "Vlastnosti prepínača",
+ImageButtonProp		: "Vlastnosti obrázkového tlačidla",
+TextFieldProp		: "Vlastnosti textového poľa",
+SelectionFieldProp	: "Vlastnosti rozbaľovacieho zoznamu",
+TextareaProp		: "Vlastnosti textovej oblasti",
+FormProp			: "Vlastnosti formulára",
+
+FontFormats			: "Normálny;Formátovaný;Adresa;Nadpis 1;Nadpis 2;Nadpis 3;Nadpis 4;Nadpis 5;Nadpis 6;Odsek (DIV)",
+
+// Alerts and Messages
+ProcessingXHTML		: "Prebieha spracovanie XHTML. Čakajte prosím...",
+Done				: "Dokončené.",
+PasteWordConfirm	: "Vyzerá to tak, že vkladaný text je kopírovaný z Wordu. Chcete ho pred vložením vyčistiť?",
+NotCompatiblePaste	: "Tento príkaz je dostupný len v prehliadači Internet Explorer verzie 5.5 alebo vyššej. Chcete vložiť text bez vyčistenia?",
+UnknownToolbarItem	: "Neznáma položka panela nástrojov \"%1\"",
+UnknownCommand		: "Neznámy príkaz \"%1\"",
+NotImplemented		: "Príkaz nie je implementovaný",
+UnknownToolbarSet	: "Panel nástrojov \"%1\" neexistuje",
+NoActiveX			: "Bezpečnostné nastavenia vášho prehliadača môžu obmedzovať niektoré funkcie editora. Pre ich plnú funkčnosť musíte zapnúť voľbu \"Spúšťať ActiveX moduly a zásuvné moduly\", inak sa môžete stretnúť s chybami a nefunkčnosťou niektorých funkcií.",
+BrowseServerBlocked : "Prehliadač zdrojových prvkov nebolo možné otvoriť. Uistite sa, že máte vypnuté všetky blokovače vyskakujúcich okien.",
+DialogBlocked		: "Dialógové okno nebolo možné otvoriť. Uistite sa, že máte vypnuté všetky blokovače vyskakujúcich okien.",
+
+// Dialogs
+DlgBtnOK			: "OK",
+DlgBtnCancel		: "Zrušiť",
+DlgBtnClose			: "Zavrieť",
+DlgBtnBrowseServer	: "Prechádzať server",
+DlgAdvancedTag		: "Rozšírené",
+DlgOpOther			: "<Ďalšie>",
+DlgInfoTab			: "Info",
+DlgAlertUrl			: "Prosím vložte URL",
+
+// General Dialogs Labels
+DlgGenNotSet		: "<nenastavené>",
+DlgGenId			: "Id",
+DlgGenLangDir		: "Orientácia jazyka",
+DlgGenLangDirLtr	: "Zľava doprava (LTR)",
+DlgGenLangDirRtl	: "Sprava doľava (RTL)",
+DlgGenLangCode		: "Kód jazyka",
+DlgGenAccessKey		: "Prístupový kľúč",
+DlgGenName			: "Meno",
+DlgGenTabIndex		: "Poradie prvku",
+DlgGenLongDescr		: "Dlhý popis URL",
+DlgGenClass			: "Trieda štýlu",
+DlgGenTitle			: "Pomocný titulok",
+DlgGenContType		: "Pomocný typ obsahu",
+DlgGenLinkCharset	: "Priradená znaková sada",
+DlgGenStyle			: "Štýl",
+
+// Image Dialog
+DlgImgTitle			: "Vlastnosti obrázku",
+DlgImgInfoTab		: "Informácie o obrázku",
+DlgImgBtnUpload		: "Odoslať na server",
+DlgImgURL			: "URL",
+DlgImgUpload		: "Odoslať",
+DlgImgAlt			: "Alternatívny text",
+DlgImgWidth			: "Šírka",
+DlgImgHeight		: "Výška",
+DlgImgLockRatio		: "Zámok",
+DlgBtnResetSize		: "Pôvodná veľkosť",
+DlgImgBorder		: "Okraje",
+DlgImgHSpace		: "H-medzera",
+DlgImgVSpace		: "V-medzera",
+DlgImgAlign			: "Zarovnanie",
+DlgImgAlignLeft		: "Vľavo",
+DlgImgAlignAbsBottom: "Úplne dole",
+DlgImgAlignAbsMiddle: "Do stredu",
+DlgImgAlignBaseline	: "Na základňu",
+DlgImgAlignBottom	: "Dole",
+DlgImgAlignMiddle	: "Na stred",
+DlgImgAlignRight	: "Vpravo",
+DlgImgAlignTextTop	: "Na horný okraj textu",
+DlgImgAlignTop		: "Nahor",
+DlgImgPreview		: "Náhľad",
+DlgImgAlertUrl		: "Zadajte prosím URL obrázku",
+DlgImgLinkTab		: "Odkaz",
+
+// Flash Dialog
+DlgFlashTitle		: "Vlastnosti Flashu",
+DlgFlashChkPlay		: "Automatické prehrávanie",
+DlgFlashChkLoop		: "Opakovanie",
+DlgFlashChkMenu		: "Povoliť Flash Menu",
+DlgFlashScale		: "Mierka",
+DlgFlashScaleAll	: "Zobraziť mierku",
+DlgFlashScaleNoBorder	: "Bez okrajov",
+DlgFlashScaleFit	: "Roztiahnuť na celé",
+
+// Link Dialog
+DlgLnkWindowTitle	: "Odkaz",
+DlgLnkInfoTab		: "Informácie o odkaze",
+DlgLnkTargetTab		: "Cieľ",
+
+DlgLnkType			: "Typ odkazu",
+DlgLnkTypeURL		: "URL",
+DlgLnkTypeAnchor	: "Kotva v tejto stránke",
+DlgLnkTypeEMail		: "E-Mail",
+DlgLnkProto			: "Protokol",
+DlgLnkProtoOther	: "<iný>",
+DlgLnkURL			: "URL",
+DlgLnkAnchorSel		: "Vybrať kotvu",
+DlgLnkAnchorByName	: "Podľa mena kotvy",
+DlgLnkAnchorById	: "Podľa Id objektu",
+DlgLnkNoAnchors		: "(V stránke nie je definovaná žiadna kotva)",
+DlgLnkEMail			: "E-Mailová adresa",
+DlgLnkEMailSubject	: "Predmet správy",
+DlgLnkEMailBody		: "Telo správy",
+DlgLnkUpload		: "Odoslať",
+DlgLnkBtnUpload		: "Odoslať na server",
+
+DlgLnkTarget		: "Cieľ",
+DlgLnkTargetFrame	: "<rámec>",
+DlgLnkTargetPopup	: "<vyskakovacie okno>",
+DlgLnkTargetBlank	: "Nové okno (_blank)",
+DlgLnkTargetParent	: "Rodičovské okno (_parent)",
+DlgLnkTargetSelf	: "Rovnaké okno (_self)",
+DlgLnkTargetTop		: "Hlavné okno (_top)",
+DlgLnkTargetFrameName	: "Meno rámu cieľa",
+DlgLnkPopWinName	: "Názov vyskakovacieho okna",
+DlgLnkPopWinFeat	: "Vlastnosti vyskakovacieho okna",
+DlgLnkPopResize		: "Meniteľná veľkosť",
+DlgLnkPopLocation	: "Panel umiestnenia",
+DlgLnkPopMenu		: "Panel ponuky",
+DlgLnkPopScroll		: "Posuvníky",
+DlgLnkPopStatus		: "Stavový riadok",
+DlgLnkPopToolbar	: "Panel nástrojov",
+DlgLnkPopFullScrn	: "Celá obrazovka (IE)",
+DlgLnkPopDependent	: "Závislosť (Netscape)",
+DlgLnkPopWidth		: "Šírka",
+DlgLnkPopHeight		: "Výška",
+DlgLnkPopLeft		: "Ľavý okraj",
+DlgLnkPopTop		: "Horný okraj",
+
+DlnLnkMsgNoUrl		: "Zadajte prosím URL odkazu",
+DlnLnkMsgNoEMail	: "Zadajte prosím e-mailovú adresu",
+DlnLnkMsgNoAnchor	: "Vyberte prosím kotvu",
+DlnLnkMsgInvPopName	: "Názov vyskakovacieho okna sa musá začínať písmenom a nemôže obsahovať medzery",
+
+// Color Dialog
+DlgColorTitle		: "Výber farby",
+DlgColorBtnClear	: "Vymazať",
+DlgColorHighlight	: "Zvýraznená",
+DlgColorSelected	: "Vybraná",
+
+// Smiley Dialog
+DlgSmileyTitle		: "Vkladanie smajlíkov",
+
+// Special Character Dialog
+DlgSpecialCharTitle	: "Výber špeciálneho znaku",
+
+// Table Dialog
+DlgTableTitle		: "Vlastnosti tabuľky",
+DlgTableRows		: "Riadky",
+DlgTableColumns		: "Stĺpce",
+DlgTableBorder		: "Ohraničenie",
+DlgTableAlign		: "Zarovnanie",
+DlgTableAlignNotSet	: "<nenastavené>",
+DlgTableAlignLeft	: "Vľavo",
+DlgTableAlignCenter	: "Na stred",
+DlgTableAlignRight	: "Vpravo",
+DlgTableWidth		: "Šírka",
+DlgTableWidthPx		: "pixelov",
+DlgTableWidthPc		: "percent",
+DlgTableHeight		: "Výška",
+DlgTableCellSpace	: "Vzdialenosť buniek",
+DlgTableCellPad		: "Odsadenie obsahu",
+DlgTableCaption		: "Popis",
+DlgTableSummary		: "Prehľad",
+
+// Table Cell Dialog
+DlgCellTitle		: "Vlastnosti bunky",
+DlgCellWidth		: "Šírka",
+DlgCellWidthPx		: "bodov",
+DlgCellWidthPc		: "percent",
+DlgCellHeight		: "Výška",
+DlgCellWordWrap		: "Zalamovannie",
+DlgCellWordWrapNotSet	: "<nenastavené>",
+DlgCellWordWrapYes	: "Áno",
+DlgCellWordWrapNo	: "Nie",
+DlgCellHorAlign		: "Vodorovné zarovnanie",
+DlgCellHorAlignNotSet	: "<nenastavené>",
+DlgCellHorAlignLeft	: "Vľavo",
+DlgCellHorAlignCenter	: "Na stred",
+DlgCellHorAlignRight: "Vpravo",
+DlgCellVerAlign		: "Zvislé zarovnanie",
+DlgCellVerAlignNotSet	: "<nenastavené>",
+DlgCellVerAlignTop	: "Nahor",
+DlgCellVerAlignMiddle	: "Doprostred",
+DlgCellVerAlignBottom	: "Dole",
+DlgCellVerAlignBaseline	: "Na základňu",
+DlgCellRowSpan		: "Zlúčené riadky",
+DlgCellCollSpan		: "Zlúčené stĺpce",
+DlgCellBackColor	: "Farba pozadia",
+DlgCellBorderColor	: "Farba ohraničenia",
+DlgCellBtnSelect	: "Výber...",
+
+// Find and Replace Dialog
+DlgFindAndReplaceTitle	: "Find and Replace",	//MISSING
+
+// Find Dialog
+DlgFindTitle		: "Hľadať",
+DlgFindFindBtn		: "Hľadať",
+DlgFindNotFoundMsg	: "Hľadaný text nebol nájdený.",
+
+// Replace Dialog
+DlgReplaceTitle			: "Nahradiť",
+DlgReplaceFindLbl		: "Čo hľadať:",
+DlgReplaceReplaceLbl	: "Čím nahradiť:",
+DlgReplaceCaseChk		: "Rozlišovať malé/veľké písmená",
+DlgReplaceReplaceBtn	: "Nahradiť",
+DlgReplaceReplAllBtn	: "Nahradiť všetko",
+DlgReplaceWordChk		: "Len celé slová",
+
+// Paste Operations / Dialog
+PasteErrorCut	: "Bezpečnostné nastavenie Vášho prehliadača nedovoľujú editoru spustiť funkciu pre vystrihnutie zvoleného textu do schránky. Prosím vystrihnite zvolený text do schránky pomocou klávesnice (Ctrl+X).",
+PasteErrorCopy	: "Bezpečnostné nastavenie Vášho prehliadača nedovoľujú editoru spustiť funkciu pre kopírovanie zvoleného textu do schránky. Prosím skopírujte zvolený text do schránky pomocou klávesnice (Ctrl+C).",
+
+PasteAsText		: "Vložiť ako čistý text",
+PasteFromWord	: "Vložiť text z Wordu",
+
+DlgPasteMsg2	: "Prosím vložte nasledovný rámček použitím klávesnice (<STRONG>Ctrl+V</STRONG>) a stlačte <STRONG>OK</STRONG>.",
+DlgPasteSec		: "Because of your browser security settings, the editor is not able to access your clipboard data directly. You are required to paste it again in this window.",	//MISSING
+DlgPasteIgnoreFont		: "Ignorovať nastavenia typu písma",
+DlgPasteRemoveStyles	: "Odstrániť formátovanie",
+
+// Color Picker
+ColorAutomatic	: "Automaticky",
+ColorMoreColors	: "Viac farieb...",
+
+// Document Properties
+DocProps		: "Vlastnosti dokumentu",
+
+// Anchor Dialog
+DlgAnchorTitle		: "Vlastnosti kotvy",
+DlgAnchorName		: "Meno kotvy",
+DlgAnchorErrorName	: "Zadajte prosím meno kotvy",
+
+// Speller Pages Dialog
+DlgSpellNotInDic		: "Nie je v slovníku",
+DlgSpellChangeTo		: "Zmeniť na",
+DlgSpellBtnIgnore		: "Ignorovať",
+DlgSpellBtnIgnoreAll	: "Ignorovať všetko",
+DlgSpellBtnReplace		: "Prepísat",
+DlgSpellBtnReplaceAll	: "Prepísat všetko",
+DlgSpellBtnUndo			: "Späť",
+DlgSpellNoSuggestions	: "- Žiadny návrh -",
+DlgSpellProgress		: "Prebieha kontrola pravopisu...",
+DlgSpellNoMispell		: "Kontrola pravopisu dokončená: bez chýb",
+DlgSpellNoChanges		: "Kontrola pravopisu dokončená: žiadne slová nezmenené",
+DlgSpellOneChange		: "Kontrola pravopisu dokončená: zmenené jedno slovo",
+DlgSpellManyChanges		: "Kontrola pravopisu dokončená: zmenených %1 slov",
+
+IeSpellDownload			: "Kontrola pravopisu nie je naištalovaná. Chcete ju hneď stiahnuť?",
+
+// Button Dialog
+DlgButtonText		: "Text",
+DlgButtonType		: "Typ",
+DlgButtonTypeBtn	: "Tlačidlo",
+DlgButtonTypeSbm	: "Odoslať",
+DlgButtonTypeRst	: "Vymazať",
+
+// Checkbox and Radio Button Dialogs
+DlgCheckboxName		: "Názov",
+DlgCheckboxValue	: "Hodnota",
+DlgCheckboxSelected	: "Vybrané",
+
+// Form Dialog
+DlgFormName		: "Názov",
+DlgFormAction	: "Akcie",
+DlgFormMethod	: "Metóda",
+
+// Select Field Dialog
+DlgSelectName		: "Názov",
+DlgSelectValue		: "Hodnota",
+DlgSelectSize		: "Veľkosť",
+DlgSelectLines		: "riadkov",
+DlgSelectChkMulti	: "Povoliť viacnásobný výber",
+DlgSelectOpAvail	: "Dostupné možnosti",
+DlgSelectOpText		: "Text",
+DlgSelectOpValue	: "Hodnota",
+DlgSelectBtnAdd		: "Pridať",
+DlgSelectBtnModify	: "Zmeniť",
+DlgSelectBtnUp		: "Hore",
+DlgSelectBtnDown	: "Dole",
+DlgSelectBtnSetValue : "Nastaviť ako vybranú hodnotu",
+DlgSelectBtnDelete	: "Zmazať",
+
+// Textarea Dialog
+DlgTextareaName	: "Názov",
+DlgTextareaCols	: "Stĺpce",
+DlgTextareaRows	: "Riadky",
+
+// Text Field Dialog
+DlgTextName			: "Názov",
+DlgTextValue		: "Hodnota",
+DlgTextCharWidth	: "Šírka pola (znakov)",
+DlgTextMaxChars		: "Maximálny počet znakov",
+DlgTextType			: "Typ",
+DlgTextTypeText		: "Text",
+DlgTextTypePass		: "Heslo",
+
+// Hidden Field Dialog
+DlgHiddenName	: "Názov",
+DlgHiddenValue	: "Hodnota",
+
+// Bulleted List Dialog
+BulletedListProp	: "Vlastnosti odrážok",
+NumberedListProp	: "Vlastnosti číslovania",
+DlgLstStart			: "Štart",
+DlgLstType			: "Typ",
+DlgLstTypeCircle	: "Krúžok",
+DlgLstTypeDisc		: "Disk",
+DlgLstTypeSquare	: "Štvorec",
+DlgLstTypeNumbers	: "Číslovanie (1, 2, 3)",
+DlgLstTypeLCase		: "Malé písmená (a, b, c)",
+DlgLstTypeUCase		: "Veľké písmená (A, B, C)",
+DlgLstTypeSRoman	: "Malé rímske číslice (i, ii, iii)",
+DlgLstTypeLRoman	: "Veľké rímske číslice (I, II, III)",
+
+// Document Properties Dialog
+DlgDocGeneralTab	: "Všeobecné",
+DlgDocBackTab		: "Pozadie",
+DlgDocColorsTab		: "Farby a okraje",
+DlgDocMetaTab		: "Meta Data",
+
+DlgDocPageTitle		: "Titulok",
+DlgDocLangDir		: "Orientácie jazyka",
+DlgDocLangDirLTR	: "Zľava doprava (LTR)",
+DlgDocLangDirRTL	: "Sprava doľava (RTL)",
+DlgDocLangCode		: "Kód jazyka",
+DlgDocCharSet		: "Kódová stránka",
+DlgDocCharSetCE		: "Stredoeurópske",
+DlgDocCharSetCT		: "Čínština tradičná (Big5)",
+DlgDocCharSetCR		: "Cyrillika",
+DlgDocCharSetGR		: "Gréčtina",
+DlgDocCharSetJP		: "Japončina",
+DlgDocCharSetKR		: "Korejčina",
+DlgDocCharSetTR		: "Turečtina",
+DlgDocCharSetUN		: "Unicode (UTF-8)",
+DlgDocCharSetWE		: "Západná európa",
+DlgDocCharSetOther	: "Iná kódová stránka",
+
+DlgDocDocType		: "Typ záhlavia dokumentu",
+DlgDocDocTypeOther	: "Iný typ záhlavia dokumentu",
+DlgDocIncXHTML		: "Obsahuje deklarácie XHTML",
+DlgDocBgColor		: "Farba pozadia",
+DlgDocBgImage		: "URL adresa obrázku na pozadí",
+DlgDocBgNoScroll	: "Fixné pozadie",
+DlgDocCText			: "Text",
+DlgDocCLink			: "Odkaz",
+DlgDocCVisited		: "Navštívený odkaz",
+DlgDocCActive		: "Aktívny odkaz",
+DlgDocMargins		: "Okraje stránky",
+DlgDocMaTop			: "Horný",
+DlgDocMaLeft		: "Ľavý",
+DlgDocMaRight		: "Pravý",
+DlgDocMaBottom		: "Dolný",
+DlgDocMeIndex		: "Kľúčové slová pre indexovanie (oddelené čiarkou)",
+DlgDocMeDescr		: "Popis stránky",
+DlgDocMeAuthor		: "Autor",
+DlgDocMeCopy		: "Autorské práva",
+DlgDocPreview		: "Náhľad",
+
+// Templates Dialog
+Templates			: "Šablóny",
+DlgTemplatesTitle	: "Šablóny obsahu",
+DlgTemplatesSelMsg	: "Prosím vyberte šablóny na otvorenie v editore<br>(súšasný obsah bude stratený):",
+DlgTemplatesLoading	: "Nahrávam zoznam šablón. Čakajte prosím...",
+DlgTemplatesNoTpl	: "(žiadne šablóny nenájdené)",
+DlgTemplatesReplace	: "Nahradiť aktuálny obsah",
+
+// About Dialog
+DlgAboutAboutTab	: "O aplikáci",
+DlgAboutBrowserInfoTab	: "Informácie o prehliadači",
+DlgAboutLicenseTab	: "Licencia",
+DlgAboutVersion		: "verzia",
+DlgAboutInfo		: "Viac informácií získate na"
+};


Property changes on: announcement/trunk/src/main/webapp/fckeditor/editor/lang/sk.js
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/webapp/fckeditor/editor/lang/sl.js
===================================================================
--- announcement/trunk/src/main/webapp/fckeditor/editor/lang/sl.js	                        (rev 0)
+++ announcement/trunk/src/main/webapp/fckeditor/editor/lang/sl.js	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,515 @@
+/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2008 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * Slovenian language file.
+ */
+
+var FCKLang =
+{
+// Language direction : "ltr" (left to right) or "rtl" (right to left).
+Dir					: "ltr",
+
+ToolbarCollapse		: "Zloži orodno vrstico",
+ToolbarExpand		: "Razširi orodno vrstico",
+
+// Toolbar Items and Context Menu
+Save				: "Shrani",
+NewPage				: "Nova stran",
+Preview				: "Predogled",
+Cut					: "Izreži",
+Copy				: "Kopiraj",
+Paste				: "Prilepi",
+PasteText			: "Prilepi kot golo besedilo",
+PasteWord			: "Prilepi iz Worda",
+Print				: "Natisni",
+SelectAll			: "Izberi vse",
+RemoveFormat		: "Odstrani oblikovanje",
+InsertLinkLbl		: "Povezava",
+InsertLink			: "Vstavi/uredi povezavo",
+RemoveLink			: "Odstrani povezavo",
+Anchor				: "Vstavi/uredi zaznamek",
+AnchorDelete		: "Odstrani zaznamek",
+InsertImageLbl		: "Slika",
+InsertImage			: "Vstavi/uredi sliko",
+InsertFlashLbl		: "Flash",
+InsertFlash			: "Vstavi/Uredi Flash",
+InsertTableLbl		: "Tabela",
+InsertTable			: "Vstavi/uredi tabelo",
+InsertLineLbl		: "Črta",
+InsertLine			: "Vstavi vodoravno črto",
+InsertSpecialCharLbl: "Posebni znak",
+InsertSpecialChar	: "Vstavi posebni znak",
+InsertSmileyLbl		: "Smeško",
+InsertSmiley		: "Vstavi smeška",
+About				: "O FCKeditorju",
+Bold				: "Krepko",
+Italic				: "Ležeče",
+Underline			: "Podčrtano",
+StrikeThrough		: "Prečrtano",
+Subscript			: "Podpisano",
+Superscript			: "Nadpisano",
+LeftJustify			: "Leva poravnava",
+CenterJustify		: "Sredinska poravnava",
+RightJustify		: "Desna poravnava",
+BlockJustify		: "Obojestranska poravnava",
+DecreaseIndent		: "Zmanjšaj zamik",
+IncreaseIndent		: "Povečaj zamik",
+Blockquote			: "Citat",
+Undo				: "Razveljavi",
+Redo				: "Ponovi",
+NumberedListLbl		: "Oštevilčen seznam",
+NumberedList		: "Vstavi/odstrani oštevilčevanje",
+BulletedListLbl		: "Označen seznam",
+BulletedList		: "Vstavi/odstrani označevanje",
+ShowTableBorders	: "Pokaži meje tabele",
+ShowDetails			: "Pokaži podrobnosti",
+Style				: "Slog",
+FontFormat			: "Oblika",
+Font				: "Pisava",
+FontSize			: "Velikost",
+TextColor			: "Barva besedila",
+BGColor				: "Barva ozadja",
+Source				: "Izvorna koda",
+Find				: "Najdi",
+Replace				: "Zamenjaj",
+SpellCheck			: "Preveri črkovanje",
+UniversalKeyboard	: "Večjezična tipkovnica",
+PageBreakLbl		: "Prelom strani",
+PageBreak			: "Vstavi prelom strani",
+
+Form			: "Obrazec",
+Checkbox		: "Potrditveno polje",
+RadioButton		: "Izbirno polje",
+TextField		: "Vnosno polje",
+Textarea		: "Vnosno območje",
+HiddenField		: "Skrito polje",
+Button			: "Gumb",
+SelectionField	: "Spustni seznam",
+ImageButton		: "Gumb s sliko",
+
+FitWindow		: "Razširi velikost urejevalnika čez cel zaslon",
+ShowBlocks		: "Prikaži ograde",
+
+// Context Menu
+EditLink			: "Uredi povezavo",
+CellCM				: "Celica",
+RowCM				: "Vrstica",
+ColumnCM			: "Stolpec",
+InsertRowAfter		: "Vstavi vrstico za",
+InsertRowBefore		: "Vstavi vrstico pred",
+DeleteRows			: "Izbriši vrstice",
+InsertColumnAfter	: "Vstavi stolpec za",
+InsertColumnBefore	: "Vstavi stolpec pred",
+DeleteColumns		: "Izbriši stolpce",
+InsertCellAfter		: "Vstavi celico za",
+InsertCellBefore	: "Vstavi celico pred",
+DeleteCells			: "Izbriši celice",
+MergeCells			: "Združi celice",
+MergeRight			: "Združi desno",
+MergeDown			: "Druži navzdol",
+HorizontalSplitCell	: "Razdeli celico vodoravno",
+VerticalSplitCell	: "Razdeli celico navpično",
+TableDelete			: "Izbriši tabelo",
+CellProperties		: "Lastnosti celice",
+TableProperties		: "Lastnosti tabele",
+ImageProperties		: "Lastnosti slike",
+FlashProperties		: "Lastnosti Flash",
+
+AnchorProp			: "Lastnosti zaznamka",
+ButtonProp			: "Lastnosti gumba",
+CheckboxProp		: "Lastnosti potrditvenega polja",
+HiddenFieldProp		: "Lastnosti skritega polja",
+RadioButtonProp		: "Lastnosti izbirnega polja",
+ImageButtonProp		: "Lastnosti gumba s sliko",
+TextFieldProp		: "Lastnosti vnosnega polja",
+SelectionFieldProp	: "Lastnosti spustnega seznama",
+TextareaProp		: "Lastnosti vnosnega območja",
+FormProp			: "Lastnosti obrazca",
+
+FontFormats			: "Navaden;Oblikovan;Napis;Naslov 1;Naslov 2;Naslov 3;Naslov 4;Naslov 5;Naslov 6",
+
+// Alerts and Messages
+ProcessingXHTML		: "Obdelujem XHTML. Prosim počakajte...",
+Done				: "Narejeno",
+PasteWordConfirm	: "Izgleda, da želite prilepiti besedilo iz Worda. Ali ga želite očistiti, preden ga prilepite?",
+NotCompatiblePaste	: "Ta ukaz deluje le v Internet Explorerje različice 5.5 ali višje. Ali želite prilepiti brez čiščenja?",
+UnknownToolbarItem	: "Neznan element orodne vrstice \"%1\"",
+UnknownCommand		: "Neznano ime ukaza \"%1\"",
+NotImplemented		: "Ukaz ni izdelan",
+UnknownToolbarSet	: "Skupina orodnih vrstic \"%1\" ne obstoja",
+NoActiveX			: "Varnostne nastavitve vašega brskalnika lahko omejijo delovanje nekaterih zmožnosti urejevalnika. Če ne želite zaznavati napak in sporočil o manjkajočih zmožnostih, omogočite možnost \"Zaženi ActiveX kontrolnike in vtičnike\".",
+BrowseServerBlocked : "Brskalnik virov se ne more odpreti. Prepričajte se, da je preprečevanje pojavnih oken onemogočeno.",
+DialogBlocked		: "Pogovorno okno se ni moglo odpreti. Prepričajte se, da je preprečevanje pojavnih oken onemogočeno.",
+
+// Dialogs
+DlgBtnOK			: "V redu",
+DlgBtnCancel		: "Prekliči",
+DlgBtnClose			: "Zapri",
+DlgBtnBrowseServer	: "Prebrskaj na strežniku",
+DlgAdvancedTag		: "Napredno",
+DlgOpOther			: "<Ostalo>",
+DlgInfoTab			: "Podatki",
+DlgAlertUrl			: "Prosim vpiši spletni naslov",
+
+// General Dialogs Labels
+DlgGenNotSet		: "<ni postavljen>",
+DlgGenId			: "Id",
+DlgGenLangDir		: "Smer jezika",
+DlgGenLangDirLtr	: "Od leve proti desni (LTR)",
+DlgGenLangDirRtl	: "Od desne proti levi (RTL)",
+DlgGenLangCode		: "Oznaka jezika",
+DlgGenAccessKey		: "Vstopno geslo",
+DlgGenName			: "Ime",
+DlgGenTabIndex		: "Številka tabulatorja",
+DlgGenLongDescr		: "Dolg opis URL-ja",
+DlgGenClass			: "Razred stilne predloge",
+DlgGenTitle			: "Predlagani naslov",
+DlgGenContType		: "Predlagani tip vsebine (content-type)",
+DlgGenLinkCharset	: "Kodna tabela povezanega vira",
+DlgGenStyle			: "Slog",
+
+// Image Dialog
+DlgImgTitle			: "Lastnosti slike",
+DlgImgInfoTab		: "Podatki o sliki",
+DlgImgBtnUpload		: "Pošlji na strežnik",
+DlgImgURL			: "URL",
+DlgImgUpload		: "Pošlji",
+DlgImgAlt			: "Nadomestno besedilo",
+DlgImgWidth			: "Širina",
+DlgImgHeight		: "Višina",
+DlgImgLockRatio		: "Zakleni razmerje",
+DlgBtnResetSize		: "Ponastavi velikost",
+DlgImgBorder		: "Obroba",
+DlgImgHSpace		: "Vodoravni razmik",
+DlgImgVSpace		: "Navpični razmik",
+DlgImgAlign			: "Poravnava",
+DlgImgAlignLeft		: "Levo",
+DlgImgAlignAbsBottom: "Popolnoma na dno",
+DlgImgAlignAbsMiddle: "Popolnoma v sredino",
+DlgImgAlignBaseline	: "Na osnovno črto",
+DlgImgAlignBottom	: "Na dno",
+DlgImgAlignMiddle	: "V sredino",
+DlgImgAlignRight	: "Desno",
+DlgImgAlignTextTop	: "Besedilo na vrh",
+DlgImgAlignTop		: "Na vrh",
+DlgImgPreview		: "Predogled",
+DlgImgAlertUrl		: "Vnesite URL slike",
+DlgImgLinkTab		: "Povezava",
+
+// Flash Dialog
+DlgFlashTitle		: "Lastnosti Flash",
+DlgFlashChkPlay		: "Samodejno predvajaj",
+DlgFlashChkLoop		: "Ponavljanje",
+DlgFlashChkMenu		: "Omogoči Flash Meni",
+DlgFlashScale		: "Povečava",
+DlgFlashScaleAll	: "Pokaži vse",
+DlgFlashScaleNoBorder	: "Brez obrobe",
+DlgFlashScaleFit	: "Natančno prileganje",
+
+// Link Dialog
+DlgLnkWindowTitle	: "Povezava",
+DlgLnkInfoTab		: "Podatki o povezavi",
+DlgLnkTargetTab		: "Cilj",
+
+DlgLnkType			: "Vrsta povezave",
+DlgLnkTypeURL		: "URL",
+DlgLnkTypeAnchor	: "Zaznamek na tej strani",
+DlgLnkTypeEMail		: "Elektronski naslov",
+DlgLnkProto			: "Protokol",
+DlgLnkProtoOther	: "<drugo>",
+DlgLnkURL			: "URL",
+DlgLnkAnchorSel		: "Izberi zaznamek",
+DlgLnkAnchorByName	: "Po imenu zaznamka",
+DlgLnkAnchorById	: "Po ID-ju elementa",
+DlgLnkNoAnchors		: "(V tem dokumentu ni zaznamkov)",
+DlgLnkEMail			: "Elektronski naslov",
+DlgLnkEMailSubject	: "Predmet sporočila",
+DlgLnkEMailBody		: "Vsebina sporočila",
+DlgLnkUpload		: "Prenesi",
+DlgLnkBtnUpload		: "Pošlji na strežnik",
+
+DlgLnkTarget		: "Cilj",
+DlgLnkTargetFrame	: "<okvir>",
+DlgLnkTargetPopup	: "<pojavno okno>",
+DlgLnkTargetBlank	: "Novo okno (_blank)",
+DlgLnkTargetParent	: "Starševsko okno (_parent)",
+DlgLnkTargetSelf	: "Isto okno (_self)",
+DlgLnkTargetTop		: "Najvišje okno (_top)",
+DlgLnkTargetFrameName	: "Ime ciljnega okvirja",
+DlgLnkPopWinName	: "Ime pojavnega okna",
+DlgLnkPopWinFeat	: "Značilnosti pojavnega okna",
+DlgLnkPopResize		: "Spremenljive velikosti",
+DlgLnkPopLocation	: "Naslovna vrstica",
+DlgLnkPopMenu		: "Menijska vrstica",
+DlgLnkPopScroll		: "Drsniki",
+DlgLnkPopStatus		: "Vrstica stanja",
+DlgLnkPopToolbar	: "Orodna vrstica",
+DlgLnkPopFullScrn	: "Celozaslonska slika (IE)",
+DlgLnkPopDependent	: "Podokno (Netscape)",
+DlgLnkPopWidth		: "Širina",
+DlgLnkPopHeight		: "Višina",
+DlgLnkPopLeft		: "Lega levo",
+DlgLnkPopTop		: "Lega na vrhu",
+
+DlnLnkMsgNoUrl		: "Vnesite URL povezave",
+DlnLnkMsgNoEMail	: "Vnesite elektronski naslov",
+DlnLnkMsgNoAnchor	: "Izberite zaznamek",
+DlnLnkMsgInvPopName	: "Ime pojavnega okna se mora začeti s črko ali številko in ne sme vsebovati presledkov",
+
+// Color Dialog
+DlgColorTitle		: "Izberite barvo",
+DlgColorBtnClear	: "Počisti",
+DlgColorHighlight	: "Označi",
+DlgColorSelected	: "Izbrano",
+
+// Smiley Dialog
+DlgSmileyTitle		: "Vstavi smeška",
+
+// Special Character Dialog
+DlgSpecialCharTitle	: "Izberi posebni znak",
+
+// Table Dialog
+DlgTableTitle		: "Lastnosti tabele",
+DlgTableRows		: "Vrstice",
+DlgTableColumns		: "Stolpci",
+DlgTableBorder		: "Velikost obrobe",
+DlgTableAlign		: "Poravnava",
+DlgTableAlignNotSet	: "<Ni nastavljeno>",
+DlgTableAlignLeft	: "Levo",
+DlgTableAlignCenter	: "Sredinsko",
+DlgTableAlignRight	: "Desno",
+DlgTableWidth		: "Širina",
+DlgTableWidthPx		: "pik",
+DlgTableWidthPc		: "procentov",
+DlgTableHeight		: "Višina",
+DlgTableCellSpace	: "Razmik med celicami",
+DlgTableCellPad		: "Polnilo med celicami",
+DlgTableCaption		: "Naslov",
+DlgTableSummary		: "Povzetek",
+
+// Table Cell Dialog
+DlgCellTitle		: "Lastnosti celice",
+DlgCellWidth		: "Širina",
+DlgCellWidthPx		: "pik",
+DlgCellWidthPc		: "procentov",
+DlgCellHeight		: "Višina",
+DlgCellWordWrap		: "Pomikanje besedila",
+DlgCellWordWrapNotSet	: "<Ni nastavljeno>",
+DlgCellWordWrapYes	: "Da",
+DlgCellWordWrapNo	: "Ne",
+DlgCellHorAlign		: "Vodoravna poravnava",
+DlgCellHorAlignNotSet	: "<Ni nastavljeno>",
+DlgCellHorAlignLeft	: "Levo",
+DlgCellHorAlignCenter	: "Sredinsko",
+DlgCellHorAlignRight: "Desno",
+DlgCellVerAlign		: "Navpična poravnava",
+DlgCellVerAlignNotSet	: "<Ni nastavljeno>",
+DlgCellVerAlignTop	: "Na vrh",
+DlgCellVerAlignMiddle	: "V sredino",
+DlgCellVerAlignBottom	: "Na dno",
+DlgCellVerAlignBaseline	: "Na osnovno črto",
+DlgCellRowSpan		: "Spojenih vrstic (row-span)",
+DlgCellCollSpan		: "Spojenih stolpcev (col-span)",
+DlgCellBackColor	: "Barva ozadja",
+DlgCellBorderColor	: "Barva obrobe",
+DlgCellBtnSelect	: "Izberi...",
+
+// Find and Replace Dialog
+DlgFindAndReplaceTitle	: "Najdi in zamenjaj",
+
+// Find Dialog
+DlgFindTitle		: "Najdi",
+DlgFindFindBtn		: "Najdi",
+DlgFindNotFoundMsg	: "Navedeno besedilo ni bilo najdeno.",
+
+// Replace Dialog
+DlgReplaceTitle			: "Zamenjaj",
+DlgReplaceFindLbl		: "Najdi:",
+DlgReplaceReplaceLbl	: "Zamenjaj z:",
+DlgReplaceCaseChk		: "Razlikuj velike in male črke",
+DlgReplaceReplaceBtn	: "Zamenjaj",
+DlgReplaceReplAllBtn	: "Zamenjaj vse",
+DlgReplaceWordChk		: "Samo cele besede",
+
+// Paste Operations / Dialog
+PasteErrorCut	: "Varnostne nastavitve brskalnika ne dopuščajo samodejnega izrezovanja. Uporabite kombinacijo tipk na tipkovnici (Ctrl+X).",
+PasteErrorCopy	: "Varnostne nastavitve brskalnika ne dopuščajo samodejnega kopiranja. Uporabite kombinacijo tipk na tipkovnici (Ctrl+C).",
+
+PasteAsText		: "Prilepi kot golo besedilo",
+PasteFromWord	: "Prilepi iz Worda",
+
+DlgPasteMsg2	: "Prosim prilepite v sleči okvir s pomočjo tipkovnice (<STRONG>Ctrl+V</STRONG>) in pritisnite <STRONG>V redu</STRONG>.",
+DlgPasteSec		: "Zaradi varnostnih nastavitev vašega brskalnika urejevalnik ne more neposredno dostopati do odložišča. Vsebino odložišča ponovno prilepite v to okno.",
+DlgPasteIgnoreFont		: "Prezri obliko pisave",
+DlgPasteRemoveStyles	: "Odstrani nastavitve stila",
+
+// Color Picker
+ColorAutomatic	: "Samodejno",
+ColorMoreColors	: "Več barv...",
+
+// Document Properties
+DocProps		: "Lastnosti dokumenta",
+
+// Anchor Dialog
+DlgAnchorTitle		: "Lastnosti zaznamka",
+DlgAnchorName		: "Ime zaznamka",
+DlgAnchorErrorName	: "Prosim vnesite ime zaznamka",
+
+// Speller Pages Dialog
+DlgSpellNotInDic		: "Ni v slovarju",
+DlgSpellChangeTo		: "Spremeni v",
+DlgSpellBtnIgnore		: "Prezri",
+DlgSpellBtnIgnoreAll	: "Prezri vse",
+DlgSpellBtnReplace		: "Zamenjaj",
+DlgSpellBtnReplaceAll	: "Zamenjaj vse",
+DlgSpellBtnUndo			: "Razveljavi",
+DlgSpellNoSuggestions	: "- Ni predlogov -",
+DlgSpellProgress		: "Preverjanje črkovanja se izvaja...",
+DlgSpellNoMispell		: "Črkovanje je končano: Brez napak",
+DlgSpellNoChanges		: "Črkovanje je končano: Nobena beseda ni bila spremenjena",
+DlgSpellOneChange		: "Črkovanje je končano: Spremenjena je bila ena beseda",
+DlgSpellManyChanges		: "Črkovanje je končano: Spremenjenih je bilo %1 besed",
+
+IeSpellDownload			: "Črkovalnik ni nameščen. Ali ga želite prenesti sedaj?",
+
+// Button Dialog
+DlgButtonText		: "Besedilo (Vrednost)",
+DlgButtonType		: "Tip",
+DlgButtonTypeBtn	: "Gumb",
+DlgButtonTypeSbm	: "Potrdi",
+DlgButtonTypeRst	: "Ponastavi",
+
+// Checkbox and Radio Button Dialogs
+DlgCheckboxName		: "Ime",
+DlgCheckboxValue	: "Vrednost",
+DlgCheckboxSelected	: "Izbrano",
+
+// Form Dialog
+DlgFormName		: "Ime",
+DlgFormAction	: "Akcija",
+DlgFormMethod	: "Metoda",
+
+// Select Field Dialog
+DlgSelectName		: "Ime",
+DlgSelectValue		: "Vrednost",
+DlgSelectSize		: "Velikost",
+DlgSelectLines		: "vrstic",
+DlgSelectChkMulti	: "Dovoli izbor večih vrstic",
+DlgSelectOpAvail	: "Razpoložljive izbire",
+DlgSelectOpText		: "Besedilo",
+DlgSelectOpValue	: "Vrednost",
+DlgSelectBtnAdd		: "Dodaj",
+DlgSelectBtnModify	: "Spremeni",
+DlgSelectBtnUp		: "Gor",
+DlgSelectBtnDown	: "Dol",
+DlgSelectBtnSetValue : "Postavi kot privzeto izbiro",
+DlgSelectBtnDelete	: "Izbriši",
+
+// Textarea Dialog
+DlgTextareaName	: "Ime",
+DlgTextareaCols	: "Stolpcev",
+DlgTextareaRows	: "Vrstic",
+
+// Text Field Dialog
+DlgTextName			: "Ime",
+DlgTextValue		: "Vrednost",
+DlgTextCharWidth	: "Dolžina",
+DlgTextMaxChars		: "Največje število znakov",
+DlgTextType			: "Tip",
+DlgTextTypeText		: "Besedilo",
+DlgTextTypePass		: "Geslo",
+
+// Hidden Field Dialog
+DlgHiddenName	: "Ime",
+DlgHiddenValue	: "Vrednost",
+
+// Bulleted List Dialog
+BulletedListProp	: "Lastnosti označenega seznama",
+NumberedListProp	: "Lastnosti oštevilčenega seznama",
+DlgLstStart			: "Začetek",
+DlgLstType			: "Tip",
+DlgLstTypeCircle	: "Pikica",
+DlgLstTypeDisc		: "Kroglica",
+DlgLstTypeSquare	: "Kvadratek",
+DlgLstTypeNumbers	: "Številke (1, 2, 3)",
+DlgLstTypeLCase		: "Male črke (a, b, c)",
+DlgLstTypeUCase		: "Velike črke (A, B, C)",
+DlgLstTypeSRoman	: "Male rimske številke (i, ii, iii)",
+DlgLstTypeLRoman	: "Velike rimske številke (I, II, III)",
+
+// Document Properties Dialog
+DlgDocGeneralTab	: "Splošno",
+DlgDocBackTab		: "Ozadje",
+DlgDocColorsTab		: "Barve in zamiki",
+DlgDocMetaTab		: "Meta podatki",
+
+DlgDocPageTitle		: "Naslov strani",
+DlgDocLangDir		: "Smer jezika",
+DlgDocLangDirLTR	: "Od leve proti desni (LTR)",
+DlgDocLangDirRTL	: "Od desne proti levi (RTL)",
+DlgDocLangCode		: "Oznaka jezika",
+DlgDocCharSet		: "Kodna tabela",
+DlgDocCharSetCE		: "Srednjeevropsko",
+DlgDocCharSetCT		: "Tradicionalno Kitajsko (Big5)",
+DlgDocCharSetCR		: "Cirilica",
+DlgDocCharSetGR		: "Grško",
+DlgDocCharSetJP		: "Japonsko",
+DlgDocCharSetKR		: "Korejsko",
+DlgDocCharSetTR		: "Turško",
+DlgDocCharSetUN		: "Unicode (UTF-8)",
+DlgDocCharSetWE		: "Zahodnoevropsko",
+DlgDocCharSetOther	: "Druga kodna tabela",
+
+DlgDocDocType		: "Glava tipa dokumenta",
+DlgDocDocTypeOther	: "Druga glava tipa dokumenta",
+DlgDocIncXHTML		: "Vstavi XHTML deklaracije",
+DlgDocBgColor		: "Barva ozadja",
+DlgDocBgImage		: "URL slike za ozadje",
+DlgDocBgNoScroll	: "Nepremično ozadje",
+DlgDocCText			: "Besedilo",
+DlgDocCLink			: "Povezava",
+DlgDocCVisited		: "Obiskana povezava",
+DlgDocCActive		: "Aktivna povezava",
+DlgDocMargins		: "Zamiki strani",
+DlgDocMaTop			: "Na vrhu",
+DlgDocMaLeft		: "Levo",
+DlgDocMaRight		: "Desno",
+DlgDocMaBottom		: "Spodaj",
+DlgDocMeIndex		: "Ključne besede (ločene z vejicami)",
+DlgDocMeDescr		: "Opis strani",
+DlgDocMeAuthor		: "Avtor",
+DlgDocMeCopy		: "Avtorske pravice",
+DlgDocPreview		: "Predogled",
+
+// Templates Dialog
+Templates			: "Predloge",
+DlgTemplatesTitle	: "Vsebinske predloge",
+DlgTemplatesSelMsg	: "Izberite predlogo, ki jo želite odpreti v urejevalniku<br>(trenutna vsebina bo izgubljena):",
+DlgTemplatesLoading	: "Nalagam seznam predlog. Prosim počakajte...",
+DlgTemplatesNoTpl	: "(Ni pripravljenih predlog)",
+DlgTemplatesReplace	: "Zamenjaj trenutno vsebino",
+
+// About Dialog
+DlgAboutAboutTab	: "Vizitka",
+DlgAboutBrowserInfoTab	: "Informacije o brskalniku",
+DlgAboutLicenseTab	: "Dovoljenja",
+DlgAboutVersion		: "različica",
+DlgAboutInfo		: "Za več informacij obiščite"
+};


Property changes on: announcement/trunk/src/main/webapp/fckeditor/editor/lang/sl.js
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/webapp/fckeditor/editor/lang/sr-latn.js
===================================================================
--- announcement/trunk/src/main/webapp/fckeditor/editor/lang/sr-latn.js	                        (rev 0)
+++ announcement/trunk/src/main/webapp/fckeditor/editor/lang/sr-latn.js	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,515 @@
+/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2008 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * Serbian (Latin) language file.
+ */
+
+var FCKLang =
+{
+// Language direction : "ltr" (left to right) or "rtl" (right to left).
+Dir					: "ltr",
+
+ToolbarCollapse		: "Smanji liniju sa alatkama",
+ToolbarExpand		: "Proiri liniju sa alatkama",
+
+// Toolbar Items and Context Menu
+Save				: "Sačuvaj",
+NewPage				: "Nova stranica",
+Preview				: "Izgled stranice",
+Cut					: "Iseci",
+Copy				: "Kopiraj",
+Paste				: "Zalepi",
+PasteText			: "Zalepi kao neformatiran tekst",
+PasteWord			: "Zalepi iz Worda",
+Print				: "Štampa",
+SelectAll			: "Označi sve",
+RemoveFormat		: "Ukloni formatiranje",
+InsertLinkLbl		: "Link",
+InsertLink			: "Unesi/izmeni link",
+RemoveLink			: "Ukloni link",
+Anchor				: "Unesi/izmeni sidro",
+AnchorDelete		: "Remove Anchor",	//MISSING
+InsertImageLbl		: "Slika",
+InsertImage			: "Unesi/izmeni sliku",
+InsertFlashLbl		: "Fleš",
+InsertFlash			: "Unesi/izmeni fleš",
+InsertTableLbl		: "Tabela",
+InsertTable			: "Unesi/izmeni tabelu",
+InsertLineLbl		: "Linija",
+InsertLine			: "Unesi horizontalnu liniju",
+InsertSpecialCharLbl: "Specijalni karakteri",
+InsertSpecialChar	: "Unesi specijalni karakter",
+InsertSmileyLbl		: "Smajli",
+InsertSmiley		: "Unesi smajlija",
+About				: "O FCKeditoru",
+Bold				: "Podebljano",
+Italic				: "Kurziv",
+Underline			: "Podvučeno",
+StrikeThrough		: "Precrtano",
+Subscript			: "Indeks",
+Superscript			: "Stepen",
+LeftJustify			: "Levo ravnanje",
+CenterJustify		: "Centriran tekst",
+RightJustify		: "Desno ravnanje",
+BlockJustify		: "Obostrano ravnanje",
+DecreaseIndent		: "Smanji levu marginu",
+IncreaseIndent		: "Uvećaj levu marginu",
+Blockquote			: "Blockquote",	//MISSING
+Undo				: "Poni�ti akciju",
+Redo				: "Ponovi akciju",
+NumberedListLbl		: "Nabrojiva lista",
+NumberedList		: "Unesi/ukloni nabrojivu listu",
+BulletedListLbl		: "Nenabrojiva lista",
+BulletedList		: "Unesi/ukloni nenabrojivu listu",
+ShowTableBorders	: "Prikaži okvir tabele",
+ShowDetails			: "Prikaži detalje",
+Style				: "Stil",
+FontFormat			: "Format",
+Font				: "Font",
+FontSize			: "Veličina fonta",
+TextColor			: "Boja teksta",
+BGColor				: "Boja pozadine",
+Source				: "Kôd",
+Find				: "Pretraga",
+Replace				: "Zamena",
+SpellCheck			: "Proveri spelovanje",
+UniversalKeyboard	: "Univerzalna tastatura",
+PageBreakLbl		: "Page Break",	//MISSING
+PageBreak			: "Insert Page Break",	//MISSING
+
+Form			: "Forma",
+Checkbox		: "Polje za potvrdu",
+RadioButton		: "Radio-dugme",
+TextField		: "Tekstualno polje",
+Textarea		: "Zona teksta",
+HiddenField		: "Skriveno polje",
+Button			: "Dugme",
+SelectionField	: "Izborno polje",
+ImageButton		: "Dugme sa slikom",
+
+FitWindow		: "Maximize the editor size",	//MISSING
+ShowBlocks		: "Show Blocks",	//MISSING
+
+// Context Menu
+EditLink			: "Izmeni link",
+CellCM				: "Cell",	//MISSING
+RowCM				: "Row",	//MISSING
+ColumnCM			: "Column",	//MISSING
+InsertRowAfter		: "Insert Row After",	//MISSING
+InsertRowBefore		: "Insert Row Before",	//MISSING
+DeleteRows			: "Obriši redove",
+InsertColumnAfter	: "Insert Column After",	//MISSING
+InsertColumnBefore	: "Insert Column Before",	//MISSING
+DeleteColumns		: "Obriši kolone",
+InsertCellAfter		: "Insert Cell After",	//MISSING
+InsertCellBefore	: "Insert Cell Before",	//MISSING
+DeleteCells			: "Obriši ćelije",
+MergeCells			: "Spoj celije",
+MergeRight			: "Merge Right",	//MISSING
+MergeDown			: "Merge Down",	//MISSING
+HorizontalSplitCell	: "Split Cell Horizontally",	//MISSING
+VerticalSplitCell	: "Split Cell Vertically",	//MISSING
+TableDelete			: "Delete Table",	//MISSING
+CellProperties		: "Osobine celije",
+TableProperties		: "Osobine tabele",
+ImageProperties		: "Osobine slike",
+FlashProperties		: "Osobine fleša",
+
+AnchorProp			: "Osobine sidra",
+ButtonProp			: "Osobine dugmeta",
+CheckboxProp		: "Osobine polja za potvrdu",
+HiddenFieldProp		: "Osobine skrivenog polja",
+RadioButtonProp		: "Osobine radio-dugmeta",
+ImageButtonProp		: "Osobine dugmeta sa slikom",
+TextFieldProp		: "Osobine tekstualnog polja",
+SelectionFieldProp	: "Osobine izbornog polja",
+TextareaProp		: "Osobine zone teksta",
+FormProp			: "Osobine forme",
+
+FontFormats			: "Normal;Formatirano;Adresa;Naslov 1;Naslov 2;Naslov 3;Naslov 4;Naslov 5;Naslov 6",
+
+// Alerts and Messages
+ProcessingXHTML		: "Obradujem XHTML. Malo strpljenja...",
+Done				: "Završio",
+PasteWordConfirm	: "Tekst koji želite da nalepite kopiran je iz Worda. Da li želite da bude očišćen od formata pre lepljenja?",
+NotCompatiblePaste	: "Ova komanda je dostupna samo za Internet Explorer od verzije 5.5. Da li želite da nalepim tekst bez čišćenja?",
+UnknownToolbarItem	: "Nepoznata stavka toolbara \"%1\"",
+UnknownCommand		: "Nepoznata naredba \"%1\"",
+NotImplemented		: "Naredba nije implementirana",
+UnknownToolbarSet	: "Toolbar \"%1\" ne postoji",
+NoActiveX			: "Your browser's security settings could limit some features of the editor. You must enable the option \"Run ActiveX controls and plug-ins\". You may experience errors and notice missing features.",	//MISSING
+BrowseServerBlocked : "The resources browser could not be opened. Make sure that all popup blockers are disabled.",	//MISSING
+DialogBlocked		: "It was not possible to open the dialog window. Make sure all popup blockers are disabled.",	//MISSING
+
+// Dialogs
+DlgBtnOK			: "OK",
+DlgBtnCancel		: "Otkaži",
+DlgBtnClose			: "Zatvori",
+DlgBtnBrowseServer	: "Pretraži server",
+DlgAdvancedTag		: "Napredni tagovi",
+DlgOpOther			: "<Ostali>",
+DlgInfoTab			: "Info",
+DlgAlertUrl			: "Molimo Vas, unesite URL",
+
+// General Dialogs Labels
+DlgGenNotSet		: "<nije postavljeno>",
+DlgGenId			: "Id",
+DlgGenLangDir		: "Smer jezika",
+DlgGenLangDirLtr	: "S leva na desno (LTR)",
+DlgGenLangDirRtl	: "S desna na levo (RTL)",
+DlgGenLangCode		: "Kôd jezika",
+DlgGenAccessKey		: "Pristupni taster",
+DlgGenName			: "Naziv",
+DlgGenTabIndex		: "Tab indeks",
+DlgGenLongDescr		: "Pun opis URL",
+DlgGenClass			: "Stylesheet klase",
+DlgGenTitle			: "Advisory naslov",
+DlgGenContType		: "Advisory vrsta sadržaja",
+DlgGenLinkCharset	: "Linked Resource Charset",
+DlgGenStyle			: "Stil",
+
+// Image Dialog
+DlgImgTitle			: "Osobine slika",
+DlgImgInfoTab		: "Info slike",
+DlgImgBtnUpload		: "Pošalji na server",
+DlgImgURL			: "URL",
+DlgImgUpload		: "Pošalji",
+DlgImgAlt			: "Alternativni tekst",
+DlgImgWidth			: "Širina",
+DlgImgHeight		: "Visina",
+DlgImgLockRatio		: "Zaključaj odnos",
+DlgBtnResetSize		: "Resetuj veličinu",
+DlgImgBorder		: "Okvir",
+DlgImgHSpace		: "HSpace",
+DlgImgVSpace		: "VSpace",
+DlgImgAlign			: "Ravnanje",
+DlgImgAlignLeft		: "Levo",
+DlgImgAlignAbsBottom: "Abs dole",
+DlgImgAlignAbsMiddle: "Abs sredina",
+DlgImgAlignBaseline	: "Bazno",
+DlgImgAlignBottom	: "Dole",
+DlgImgAlignMiddle	: "Sredina",
+DlgImgAlignRight	: "Desno",
+DlgImgAlignTextTop	: "Vrh teksta",
+DlgImgAlignTop		: "Vrh",
+DlgImgPreview		: "Izgled",
+DlgImgAlertUrl		: "Unesite URL slike",
+DlgImgLinkTab		: "Link",
+
+// Flash Dialog
+DlgFlashTitle		: "Osobine fleša",
+DlgFlashChkPlay		: "Automatski start",
+DlgFlashChkLoop		: "Ponavljaj",
+DlgFlashChkMenu		: "Uključi fleš meni",
+DlgFlashScale		: "Skaliraj",
+DlgFlashScaleAll	: "Prikaži sve",
+DlgFlashScaleNoBorder	: "Bez ivice",
+DlgFlashScaleFit	: "Popuni površinu",
+
+// Link Dialog
+DlgLnkWindowTitle	: "Link",
+DlgLnkInfoTab		: "Link Info",
+DlgLnkTargetTab		: "Meta",
+
+DlgLnkType			: "Vrsta linka",
+DlgLnkTypeURL		: "URL",
+DlgLnkTypeAnchor	: "Sidro na ovoj stranici",
+DlgLnkTypeEMail		: "E-Mail",
+DlgLnkProto			: "Protokol",
+DlgLnkProtoOther	: "<drugo>",
+DlgLnkURL			: "URL",
+DlgLnkAnchorSel		: "Odaberi sidro",
+DlgLnkAnchorByName	: "Po nazivu sidra",
+DlgLnkAnchorById	: "Po Id-ju elementa",
+DlgLnkNoAnchors		: "(Nema dostupnih sidra)",
+DlgLnkEMail			: "E-Mail adresa",
+DlgLnkEMailSubject	: "Naslov",
+DlgLnkEMailBody		: "Sadržaj poruke",
+DlgLnkUpload		: "Pošalji",
+DlgLnkBtnUpload		: "Pošalji na server",
+
+DlgLnkTarget		: "Meta",
+DlgLnkTargetFrame	: "<okvir>",
+DlgLnkTargetPopup	: "<popup prozor>",
+DlgLnkTargetBlank	: "Novi prozor (_blank)",
+DlgLnkTargetParent	: "Roditeljski prozor (_parent)",
+DlgLnkTargetSelf	: "Isti prozor (_self)",
+DlgLnkTargetTop		: "Prozor na vrhu (_top)",
+DlgLnkTargetFrameName	: "Naziv odredišnog frejma",
+DlgLnkPopWinName	: "Naziv popup prozora",
+DlgLnkPopWinFeat	: "Mogućnosti popup prozora",
+DlgLnkPopResize		: "Promenljiva velicina",
+DlgLnkPopLocation	: "Lokacija",
+DlgLnkPopMenu		: "Kontekstni meni",
+DlgLnkPopScroll		: "Scroll bar",
+DlgLnkPopStatus		: "Statusna linija",
+DlgLnkPopToolbar	: "Toolbar",
+DlgLnkPopFullScrn	: "Prikaz preko celog ekrana (IE)",
+DlgLnkPopDependent	: "Zavisno (Netscape)",
+DlgLnkPopWidth		: "Širina",
+DlgLnkPopHeight		: "Visina",
+DlgLnkPopLeft		: "Od leve ivice ekrana (px)",
+DlgLnkPopTop		: "Od vrha ekrana (px)",
+
+DlnLnkMsgNoUrl		: "Unesite URL linka",
+DlnLnkMsgNoEMail	: "Otkucajte adresu elektronske pote",
+DlnLnkMsgNoAnchor	: "Odaberite sidro",
+DlnLnkMsgInvPopName	: "The popup name must begin with an alphabetic character and must not contain spaces",	//MISSING
+
+// Color Dialog
+DlgColorTitle		: "Odaberite boju",
+DlgColorBtnClear	: "Obriši",
+DlgColorHighlight	: "Posvetli",
+DlgColorSelected	: "Odaberi",
+
+// Smiley Dialog
+DlgSmileyTitle		: "Unesi smajlija",
+
+// Special Character Dialog
+DlgSpecialCharTitle	: "Odaberite specijalni karakter",
+
+// Table Dialog
+DlgTableTitle		: "Osobine tabele",
+DlgTableRows		: "Redova",
+DlgTableColumns		: "Kolona",
+DlgTableBorder		: "Veličina okvira",
+DlgTableAlign		: "Ravnanje",
+DlgTableAlignNotSet	: "<nije postavljeno>",
+DlgTableAlignLeft	: "Levo",
+DlgTableAlignCenter	: "Sredina",
+DlgTableAlignRight	: "Desno",
+DlgTableWidth		: "Širina",
+DlgTableWidthPx		: "piksela",
+DlgTableWidthPc		: "procenata",
+DlgTableHeight		: "Visina",
+DlgTableCellSpace	: "Ćelijski prostor",
+DlgTableCellPad		: "Razmak ćelija",
+DlgTableCaption		: "Naslov tabele",
+DlgTableSummary		: "Summary",	//MISSING
+
+// Table Cell Dialog
+DlgCellTitle		: "Osobine ćelije",
+DlgCellWidth		: "Širina",
+DlgCellWidthPx		: "piksela",
+DlgCellWidthPc		: "procenata",
+DlgCellHeight		: "Visina",
+DlgCellWordWrap		: "Deljenje reči",
+DlgCellWordWrapNotSet	: "<nije postavljeno>",
+DlgCellWordWrapYes	: "Da",
+DlgCellWordWrapNo	: "Ne",
+DlgCellHorAlign		: "Vodoravno ravnanje",
+DlgCellHorAlignNotSet	: "<nije postavljeno>",
+DlgCellHorAlignLeft	: "Levo",
+DlgCellHorAlignCenter	: "Sredina",
+DlgCellHorAlignRight: "Desno",
+DlgCellVerAlign		: "Vertikalno ravnanje",
+DlgCellVerAlignNotSet	: "<nije postavljeno>",
+DlgCellVerAlignTop	: "Gornje",
+DlgCellVerAlignMiddle	: "Sredina",
+DlgCellVerAlignBottom	: "Donje",
+DlgCellVerAlignBaseline	: "Bazno",
+DlgCellRowSpan		: "Spajanje redova",
+DlgCellCollSpan		: "Spajanje kolona",
+DlgCellBackColor	: "Boja pozadine",
+DlgCellBorderColor	: "Boja okvira",
+DlgCellBtnSelect	: "Odaberi...",
+
+// Find and Replace Dialog
+DlgFindAndReplaceTitle	: "Find and Replace",	//MISSING
+
+// Find Dialog
+DlgFindTitle		: "Pronađi",
+DlgFindFindBtn		: "Pronađi",
+DlgFindNotFoundMsg	: "Traženi tekst nije pronađen.",
+
+// Replace Dialog
+DlgReplaceTitle			: "Zameni",
+DlgReplaceFindLbl		: "Pronadi:",
+DlgReplaceReplaceLbl	: "Zameni sa:",
+DlgReplaceCaseChk		: "Razlikuj mala i velika slova",
+DlgReplaceReplaceBtn	: "Zameni",
+DlgReplaceReplAllBtn	: "Zameni sve",
+DlgReplaceWordChk		: "Uporedi cele reci",
+
+// Paste Operations / Dialog
+PasteErrorCut	: "Sigurnosna podešavanja Vašeg pretraživača ne dozvoljavaju operacije automatskog isecanja teksta. Molimo Vas da koristite prečicu sa tastature (Ctrl+X).",
+PasteErrorCopy	: "Sigurnosna podešavanja Vašeg pretraživača ne dozvoljavaju operacije automatskog kopiranja teksta. Molimo Vas da koristite prečicu sa tastature (Ctrl+C).",
+
+PasteAsText		: "Zalepi kao čist tekst",
+PasteFromWord	: "Zalepi iz Worda",
+
+DlgPasteMsg2	: "Molimo Vas da zalepite unutar donje povrine koristeći tastaturnu prečicu (<STRONG>Ctrl+V</STRONG>) i da pritisnete <STRONG>OK</STRONG>.",
+DlgPasteSec		: "Because of your browser security settings, the editor is not able to access your clipboard data directly. You are required to paste it again in this window.",	//MISSING
+DlgPasteIgnoreFont		: "Ignoriši definicije fontova",
+DlgPasteRemoveStyles	: "Ukloni definicije stilova",
+
+// Color Picker
+ColorAutomatic	: "Automatski",
+ColorMoreColors	: "Više boja...",
+
+// Document Properties
+DocProps		: "Osobine dokumenta",
+
+// Anchor Dialog
+DlgAnchorTitle		: "Osobine sidra",
+DlgAnchorName		: "Ime sidra",
+DlgAnchorErrorName	: "Unesite ime sidra",
+
+// Speller Pages Dialog
+DlgSpellNotInDic		: "Nije u rečniku",
+DlgSpellChangeTo		: "Izmeni",
+DlgSpellBtnIgnore		: "Ignoriši",
+DlgSpellBtnIgnoreAll	: "Ignoriši sve",
+DlgSpellBtnReplace		: "Zameni",
+DlgSpellBtnReplaceAll	: "Zameni sve",
+DlgSpellBtnUndo			: "Vrati akciju",
+DlgSpellNoSuggestions	: "- Bez sugestija -",
+DlgSpellProgress		: "Provera spelovanja u toku...",
+DlgSpellNoMispell		: "Provera spelovanja završena: greške nisu pronadene",
+DlgSpellNoChanges		: "Provera spelovanja završena: Nije izmenjena nijedna rec",
+DlgSpellOneChange		: "Provera spelovanja završena: Izmenjena je jedna reč",
+DlgSpellManyChanges		: "Provera spelovanja završena: %1 reč(i) je izmenjeno",
+
+IeSpellDownload			: "Provera spelovanja nije instalirana. Da li želite da je skinete sa Interneta?",
+
+// Button Dialog
+DlgButtonText		: "Tekst (vrednost)",
+DlgButtonType		: "Tip",
+DlgButtonTypeBtn	: "Button",	//MISSING
+DlgButtonTypeSbm	: "Submit",	//MISSING
+DlgButtonTypeRst	: "Reset",	//MISSING
+
+// Checkbox and Radio Button Dialogs
+DlgCheckboxName		: "Naziv",
+DlgCheckboxValue	: "Vrednost",
+DlgCheckboxSelected	: "Označeno",
+
+// Form Dialog
+DlgFormName		: "Naziv",
+DlgFormAction	: "Akcija",
+DlgFormMethod	: "Metoda",
+
+// Select Field Dialog
+DlgSelectName		: "Naziv",
+DlgSelectValue		: "Vrednost",
+DlgSelectSize		: "Veličina",
+DlgSelectLines		: "linija",
+DlgSelectChkMulti	: "Dozvoli višestruku selekciju",
+DlgSelectOpAvail	: "Dostupne opcije",
+DlgSelectOpText		: "Tekst",
+DlgSelectOpValue	: "Vrednost",
+DlgSelectBtnAdd		: "Dodaj",
+DlgSelectBtnModify	: "Izmeni",
+DlgSelectBtnUp		: "Gore",
+DlgSelectBtnDown	: "Dole",
+DlgSelectBtnSetValue : "Podesi kao označenu vrednost",
+DlgSelectBtnDelete	: "Obriši",
+
+// Textarea Dialog
+DlgTextareaName	: "Naziv",
+DlgTextareaCols	: "Broj kolona",
+DlgTextareaRows	: "Broj redova",
+
+// Text Field Dialog
+DlgTextName			: "Naziv",
+DlgTextValue		: "Vrednost",
+DlgTextCharWidth	: "Širina (karaktera)",
+DlgTextMaxChars		: "Maksimalno karaktera",
+DlgTextType			: "Tip",
+DlgTextTypeText		: "Tekst",
+DlgTextTypePass		: "Lozinka",
+
+// Hidden Field Dialog
+DlgHiddenName	: "Naziv",
+DlgHiddenValue	: "Vrednost",
+
+// Bulleted List Dialog
+BulletedListProp	: "Osobine nenabrojive liste",
+NumberedListProp	: "Osobine nabrojive liste",
+DlgLstStart			: "Start",	//MISSING
+DlgLstType			: "Tip",
+DlgLstTypeCircle	: "Krug",
+DlgLstTypeDisc		: "Disc",	//MISSING
+DlgLstTypeSquare	: "Kvadrat",
+DlgLstTypeNumbers	: "Brojevi (1, 2, 3)",
+DlgLstTypeLCase		: "mala slova (a, b, c)",
+DlgLstTypeUCase		: "VELIKA slova (A, B, C)",
+DlgLstTypeSRoman	: "Male rimske cifre (i, ii, iii)",
+DlgLstTypeLRoman	: "Velike rimske cifre (I, II, III)",
+
+// Document Properties Dialog
+DlgDocGeneralTab	: "Opšte osobine",
+DlgDocBackTab		: "Pozadina",
+DlgDocColorsTab		: "Boje i margine",
+DlgDocMetaTab		: "Metapodaci",
+
+DlgDocPageTitle		: "Naslov stranice",
+DlgDocLangDir		: "Smer jezika",
+DlgDocLangDirLTR	: "Sleva nadesno (LTR)",
+DlgDocLangDirRTL	: "Zdesna nalevo (RTL)",
+DlgDocLangCode		: "Šifra jezika",
+DlgDocCharSet		: "Kodiranje skupa karaktera",
+DlgDocCharSetCE		: "Central European",	//MISSING
+DlgDocCharSetCT		: "Chinese Traditional (Big5)",	//MISSING
+DlgDocCharSetCR		: "Cyrillic",	//MISSING
+DlgDocCharSetGR		: "Greek",	//MISSING
+DlgDocCharSetJP		: "Japanese",	//MISSING
+DlgDocCharSetKR		: "Korean",	//MISSING
+DlgDocCharSetTR		: "Turkish",	//MISSING
+DlgDocCharSetUN		: "Unicode (UTF-8)",	//MISSING
+DlgDocCharSetWE		: "Western European",	//MISSING
+DlgDocCharSetOther	: "Ostala kodiranja skupa karaktera",
+
+DlgDocDocType		: "Zaglavlje tipa dokumenta",
+DlgDocDocTypeOther	: "Ostala zaglavlja tipa dokumenta",
+DlgDocIncXHTML		: "Ukljuci XHTML deklaracije",
+DlgDocBgColor		: "Boja pozadine",
+DlgDocBgImage		: "URL pozadinske slike",
+DlgDocBgNoScroll	: "Fiksirana pozadina",
+DlgDocCText			: "Tekst",
+DlgDocCLink			: "Link",
+DlgDocCVisited		: "Posećeni link",
+DlgDocCActive		: "Aktivni link",
+DlgDocMargins		: "Margine stranice",
+DlgDocMaTop			: "Gornja",
+DlgDocMaLeft		: "Leva",
+DlgDocMaRight		: "Desna",
+DlgDocMaBottom		: "Donja",
+DlgDocMeIndex		: "Ključne reci za indeksiranje dokumenta (razdvojene zarezima)",
+DlgDocMeDescr		: "Opis dokumenta",
+DlgDocMeAuthor		: "Autor",
+DlgDocMeCopy		: "Autorska prava",
+DlgDocPreview		: "Izgled stranice",
+
+// Templates Dialog
+Templates			: "Obrasci",
+DlgTemplatesTitle	: "Obrasci za sadržaj",
+DlgTemplatesSelMsg	: "Molimo Vas da odaberete obrazac koji ce biti primenjen na stranicu (trenutni sadržaj ce biti obrisan):",
+DlgTemplatesLoading	: "Učitavam listu obrazaca. Malo strpljenja...",
+DlgTemplatesNoTpl	: "(Nema definisanih obrazaca)",
+DlgTemplatesReplace	: "Replace actual contents",	//MISSING
+
+// About Dialog
+DlgAboutAboutTab	: "O editoru",
+DlgAboutBrowserInfoTab	: "Informacije o pretraživacu",
+DlgAboutLicenseTab	: "License",	//MISSING
+DlgAboutVersion		: "verzija",
+DlgAboutInfo		: "Za više informacija posetite"
+};


Property changes on: announcement/trunk/src/main/webapp/fckeditor/editor/lang/sr-latn.js
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/webapp/fckeditor/editor/lang/sr.js
===================================================================
--- announcement/trunk/src/main/webapp/fckeditor/editor/lang/sr.js	                        (rev 0)
+++ announcement/trunk/src/main/webapp/fckeditor/editor/lang/sr.js	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,515 @@
+/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2008 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * Serbian (Cyrillic) language file.
+ */
+
+var FCKLang =
+{
+// Language direction : "ltr" (left to right) or "rtl" (right to left).
+Dir					: "ltr",
+
+ToolbarCollapse		: "Смањи линију са алаткама",
+ToolbarExpand		: "Прошири линију са алаткама",
+
+// Toolbar Items and Context Menu
+Save				: "Сачувај",
+NewPage				: "Нова страница",
+Preview				: "Изглед странице",
+Cut					: "Исеци",
+Copy				: "Копирај",
+Paste				: "Залепи",
+PasteText			: "Залепи као неформатиран текст",
+PasteWord			: "Залепи из Worda",
+Print				: "Штампа",
+SelectAll			: "Означи све",
+RemoveFormat		: "Уклони форматирање",
+InsertLinkLbl		: "Линк",
+InsertLink			: "Унеси/измени линк",
+RemoveLink			: "Уклони линк",
+Anchor				: "Унеси/измени сидро",
+AnchorDelete		: "Remove Anchor",	//MISSING
+InsertImageLbl		: "Слика",
+InsertImage			: "Унеси/измени слику",
+InsertFlashLbl		: "Флеш елемент",
+InsertFlash			: "Унеси/измени флеш",
+InsertTableLbl		: "Табела",
+InsertTable			: "Унеси/измени табелу",
+InsertLineLbl		: "Линија",
+InsertLine			: "Унеси хоризонталну линију",
+InsertSpecialCharLbl: "Специјални карактери",
+InsertSpecialChar	: "Унеси специјални карактер",
+InsertSmileyLbl		: "Смајли",
+InsertSmiley		: "Унеси смајлија",
+About				: "О ФЦКедитору",
+Bold				: "Подебљано",
+Italic				: "Курзив",
+Underline			: "Подвучено",
+StrikeThrough		: "Прецртано",
+Subscript			: "Индекс",
+Superscript			: "Степен",
+LeftJustify			: "Лево равнање",
+CenterJustify		: "Центриран текст",
+RightJustify		: "Десно равнање",
+BlockJustify		: "Обострано равнање",
+DecreaseIndent		: "Смањи леву маргину",
+IncreaseIndent		: "Увећај леву маргину",
+Blockquote			: "Blockquote",	//MISSING
+Undo				: "Поништи акцију",
+Redo				: "Понови акцију",
+NumberedListLbl		: "Набројиву листу",
+NumberedList		: "Унеси/уклони набројиву листу",
+BulletedListLbl		: "Ненабројива листа",
+BulletedList		: "Унеси/уклони ненабројиву листу",
+ShowTableBorders	: "Прикажи оквир табеле",
+ShowDetails			: "Прикажи детаље",
+Style				: "Стил",
+FontFormat			: "Формат",
+Font				: "Фонт",
+FontSize			: "Величина фонта",
+TextColor			: "Боја текста",
+BGColor				: "Боја позадине",
+Source				: "Kôд",
+Find				: "Претрага",
+Replace				: "Замена",
+SpellCheck			: "Провери спеловање",
+UniversalKeyboard	: "Универзална тастатура",
+PageBreakLbl		: "Page Break",	//MISSING
+PageBreak			: "Insert Page Break",	//MISSING
+
+Form			: "Форма",
+Checkbox		: "Поље за потврду",
+RadioButton		: "Радио-дугме",
+TextField		: "Текстуално поље",
+Textarea		: "Зона текста",
+HiddenField		: "Скривено поље",
+Button			: "Дугме",
+SelectionField	: "Изборно поље",
+ImageButton		: "Дугме са сликом",
+
+FitWindow		: "Maximize the editor size",	//MISSING
+ShowBlocks		: "Show Blocks",	//MISSING
+
+// Context Menu
+EditLink			: "Промени линк",
+CellCM				: "Cell",	//MISSING
+RowCM				: "Row",	//MISSING
+ColumnCM			: "Column",	//MISSING
+InsertRowAfter		: "Insert Row After",	//MISSING
+InsertRowBefore		: "Insert Row Before",	//MISSING
+DeleteRows			: "Обриши редове",
+InsertColumnAfter	: "Insert Column After",	//MISSING
+InsertColumnBefore	: "Insert Column Before",	//MISSING
+DeleteColumns		: "Обриши колоне",
+InsertCellAfter		: "Insert Cell After",	//MISSING
+InsertCellBefore	: "Insert Cell Before",	//MISSING
+DeleteCells			: "Обриши ћелије",
+MergeCells			: "Спој ћелије",
+MergeRight			: "Merge Right",	//MISSING
+MergeDown			: "Merge Down",	//MISSING
+HorizontalSplitCell	: "Split Cell Horizontally",	//MISSING
+VerticalSplitCell	: "Split Cell Vertically",	//MISSING
+TableDelete			: "Delete Table",	//MISSING
+CellProperties		: "Особине ћелије",
+TableProperties		: "Особине табеле",
+ImageProperties		: "Особине слике",
+FlashProperties		: "Особине Флеша",
+
+AnchorProp			: "Особине сидра",
+ButtonProp			: "Особине дугмета",
+CheckboxProp		: "Особине поља за потврду",
+HiddenFieldProp		: "Особине скривеног поља",
+RadioButtonProp		: "Особине радио-дугмета",
+ImageButtonProp		: "Особине дугмета са сликом",
+TextFieldProp		: "Особине текстуалног поља",
+SelectionFieldProp	: "Особине изборног поља",
+TextareaProp		: "Особине зоне текста",
+FormProp			: "Особине форме",
+
+FontFormats			: "Normal;Formatirano;Adresa;Heading 1;Heading 2;Heading 3;Heading 4;Heading 5;Heading 6",
+
+// Alerts and Messages
+ProcessingXHTML		: "Обрађујем XHTML. Maлo стрпљења...",
+Done				: "Завршио",
+PasteWordConfirm	: "Текст који желите да налепите копиран је из Worda. Да ли желите да буде очишћен од формата пре лепљења?",
+NotCompatiblePaste	: "Ова команда је доступна само за Интернет Екплорер од верзије 5.5. Да ли желите да налепим текст без чишћења?",
+UnknownToolbarItem	: "Непозната ставка toolbara \"%1\"",
+UnknownCommand		: "Непозната наредба \"%1\"",
+NotImplemented		: "Наредба није имплементирана",
+UnknownToolbarSet	: "Toolbar \"%1\" не постоји",
+NoActiveX			: "Your browser's security settings could limit some features of the editor. You must enable the option \"Run ActiveX controls and plug-ins\". You may experience errors and notice missing features.",	//MISSING
+BrowseServerBlocked : "The resources browser could not be opened. Make sure that all popup blockers are disabled.",	//MISSING
+DialogBlocked		: "It was not possible to open the dialog window. Make sure all popup blockers are disabled.",	//MISSING
+
+// Dialogs
+DlgBtnOK			: "OK",
+DlgBtnCancel		: "Oткажи",
+DlgBtnClose			: "Затвори",
+DlgBtnBrowseServer	: "Претражи сервер",
+DlgAdvancedTag		: "Напредни тагови",
+DlgOpOther			: "<Остали>",
+DlgInfoTab			: "Инфо",
+DlgAlertUrl			: "Молимо Вас, унесите УРЛ",
+
+// General Dialogs Labels
+DlgGenNotSet		: "<није постављено>",
+DlgGenId			: "Ид",
+DlgGenLangDir		: "Смер језика",
+DlgGenLangDirLtr	: "С лева на десно (LTR)",
+DlgGenLangDirRtl	: "С десна на лево (RTL)",
+DlgGenLangCode		: "Kôд језика",
+DlgGenAccessKey		: "Приступни тастер",
+DlgGenName			: "Назив",
+DlgGenTabIndex		: "Таб индекс",
+DlgGenLongDescr		: "Пун опис УРЛ",
+DlgGenClass			: "Stylesheet класе",
+DlgGenTitle			: "Advisory наслов",
+DlgGenContType		: "Advisory врста садржаја",
+DlgGenLinkCharset	: "Linked Resource Charset",
+DlgGenStyle			: "Стил",
+
+// Image Dialog
+DlgImgTitle			: "Особине слика",
+DlgImgInfoTab		: "Инфо слике",
+DlgImgBtnUpload		: "Пошаљи на сервер",
+DlgImgURL			: "УРЛ",
+DlgImgUpload		: "Пошаљи",
+DlgImgAlt			: "Алтернативни текст",
+DlgImgWidth			: "Ширина",
+DlgImgHeight		: "Висина",
+DlgImgLockRatio		: "Закључај однос",
+DlgBtnResetSize		: "Ресетуј величину",
+DlgImgBorder		: "Оквир",
+DlgImgHSpace		: "HSpace",
+DlgImgVSpace		: "VSpace",
+DlgImgAlign			: "Равнање",
+DlgImgAlignLeft		: "Лево",
+DlgImgAlignAbsBottom: "Abs доле",
+DlgImgAlignAbsMiddle: "Abs средина",
+DlgImgAlignBaseline	: "Базно",
+DlgImgAlignBottom	: "Доле",
+DlgImgAlignMiddle	: "Средина",
+DlgImgAlignRight	: "Десно",
+DlgImgAlignTextTop	: "Врх текста",
+DlgImgAlignTop		: "Врх",
+DlgImgPreview		: "Изглед",
+DlgImgAlertUrl		: "Унесите УРЛ слике",
+DlgImgLinkTab		: "Линк",
+
+// Flash Dialog
+DlgFlashTitle		: "Особине флеша",
+DlgFlashChkPlay		: "Аутоматски старт",
+DlgFlashChkLoop		: "Понављај",
+DlgFlashChkMenu		: "Укључи флеш мени",
+DlgFlashScale		: "Скалирај",
+DlgFlashScaleAll	: "Прикажи све",
+DlgFlashScaleNoBorder	: "Без ивице",
+DlgFlashScaleFit	: "Попуни површину",
+
+// Link Dialog
+DlgLnkWindowTitle	: "Линк",
+DlgLnkInfoTab		: "Линк инфо",
+DlgLnkTargetTab		: "Мета",
+
+DlgLnkType			: "Врста линка",
+DlgLnkTypeURL		: "URL",
+DlgLnkTypeAnchor	: "Сидро на овој страници",
+DlgLnkTypeEMail		: "Eлектронска пошта",
+DlgLnkProto			: "Протокол",
+DlgLnkProtoOther	: "<друго>",
+DlgLnkURL			: "УРЛ",
+DlgLnkAnchorSel		: "Одабери сидро",
+DlgLnkAnchorByName	: "По називу сидра",
+DlgLnkAnchorById	: "Пo Ид-jу елемента",
+DlgLnkNoAnchors		: "(Нема доступних сидра)",
+DlgLnkEMail			: "Адреса електронске поште",
+DlgLnkEMailSubject	: "Наслов",
+DlgLnkEMailBody		: "Садржај поруке",
+DlgLnkUpload		: "Пошаљи",
+DlgLnkBtnUpload		: "Пошаљи на сервер",
+
+DlgLnkTarget		: "Meтa",
+DlgLnkTargetFrame	: "<оквир>",
+DlgLnkTargetPopup	: "<искачући прозор>",
+DlgLnkTargetBlank	: "Нови прозор (_blank)",
+DlgLnkTargetParent	: "Родитељски прозор (_parent)",
+DlgLnkTargetSelf	: "Исти прозор (_self)",
+DlgLnkTargetTop		: "Прозор на врху (_top)",
+DlgLnkTargetFrameName	: "Назив одредишног фрејма",
+DlgLnkPopWinName	: "Назив искачућег прозора",
+DlgLnkPopWinFeat	: "Могућности искачућег прозора",
+DlgLnkPopResize		: "Променљива величина",
+DlgLnkPopLocation	: "Локација",
+DlgLnkPopMenu		: "Контекстни мени",
+DlgLnkPopScroll		: "Скрол бар",
+DlgLnkPopStatus		: "Статусна линија",
+DlgLnkPopToolbar	: "Toolbar",
+DlgLnkPopFullScrn	: "Приказ преко целог екрана (ИE)",
+DlgLnkPopDependent	: "Зависно (Netscape)",
+DlgLnkPopWidth		: "Ширина",
+DlgLnkPopHeight		: "Висина",
+DlgLnkPopLeft		: "Од леве ивице екрана (пиксела)",
+DlgLnkPopTop		: "Од врха екрана (пиксела)",
+
+DlnLnkMsgNoUrl		: "Унесите УРЛ линка",
+DlnLnkMsgNoEMail	: "Откуцајте адресу електронске поште",
+DlnLnkMsgNoAnchor	: "Одаберите сидро",
+DlnLnkMsgInvPopName	: "The popup name must begin with an alphabetic character and must not contain spaces",	//MISSING
+
+// Color Dialog
+DlgColorTitle		: "Одаберите боју",
+DlgColorBtnClear	: "Обриши",
+DlgColorHighlight	: "Посветли",
+DlgColorSelected	: "Одабери",
+
+// Smiley Dialog
+DlgSmileyTitle		: "Унеси смајлија",
+
+// Special Character Dialog
+DlgSpecialCharTitle	: "Одаберите специјални карактер",
+
+// Table Dialog
+DlgTableTitle		: "Особине табеле",
+DlgTableRows		: "Редова",
+DlgTableColumns		: "Kолона",
+DlgTableBorder		: "Величина оквира",
+DlgTableAlign		: "Равнање",
+DlgTableAlignNotSet	: "<није постављено>",
+DlgTableAlignLeft	: "Лево",
+DlgTableAlignCenter	: "Средина",
+DlgTableAlignRight	: "Десно",
+DlgTableWidth		: "Ширина",
+DlgTableWidthPx		: "пиксела",
+DlgTableWidthPc		: "процената",
+DlgTableHeight		: "Висина",
+DlgTableCellSpace	: "Ћелијски простор",
+DlgTableCellPad		: "Размак ћелија",
+DlgTableCaption		: "Наслов табеле",
+DlgTableSummary		: "Summary",	//MISSING
+
+// Table Cell Dialog
+DlgCellTitle		: "Особине ћелије",
+DlgCellWidth		: "Ширина",
+DlgCellWidthPx		: "пиксела",
+DlgCellWidthPc		: "процената",
+DlgCellHeight		: "Висина",
+DlgCellWordWrap		: "Дељење речи",
+DlgCellWordWrapNotSet	: "<није постављено>",
+DlgCellWordWrapYes	: "Да",
+DlgCellWordWrapNo	: "Не",
+DlgCellHorAlign		: "Водоравно равнање",
+DlgCellHorAlignNotSet	: "<није постављено>",
+DlgCellHorAlignLeft	: "Лево",
+DlgCellHorAlignCenter	: "Средина",
+DlgCellHorAlignRight: "Десно",
+DlgCellVerAlign		: "Вертикално равнање",
+DlgCellVerAlignNotSet	: "<није постављено>",
+DlgCellVerAlignTop	: "Горње",
+DlgCellVerAlignMiddle	: "Средина",
+DlgCellVerAlignBottom	: "Доње",
+DlgCellVerAlignBaseline	: "Базно",
+DlgCellRowSpan		: "Спајање редова",
+DlgCellCollSpan		: "Спајање колона",
+DlgCellBackColor	: "Боја позадине",
+DlgCellBorderColor	: "Боја оквира",
+DlgCellBtnSelect	: "Oдабери...",
+
+// Find and Replace Dialog
+DlgFindAndReplaceTitle	: "Find and Replace",	//MISSING
+
+// Find Dialog
+DlgFindTitle		: "Пронађи",
+DlgFindFindBtn		: "Пронађи",
+DlgFindNotFoundMsg	: "Тражени текст није пронађен.",
+
+// Replace Dialog
+DlgReplaceTitle			: "Замени",
+DlgReplaceFindLbl		: "Пронађи:",
+DlgReplaceReplaceLbl	: "Замени са:",
+DlgReplaceCaseChk		: "Разликуј велика и мала слова",
+DlgReplaceReplaceBtn	: "Замени",
+DlgReplaceReplAllBtn	: "Замени све",
+DlgReplaceWordChk		: "Упореди целе речи",
+
+// Paste Operations / Dialog
+PasteErrorCut	: "Сигурносна подешавања Вашег претраживача не дозвољавају операције аутоматског исецања текста. Молимо Вас да користите пречицу са тастатуре (Ctrl+X).",
+PasteErrorCopy	: "Сигурносна подешавања Вашег претраживача не дозвољавају операције аутоматског копирања текста. Молимо Вас да користите пречицу са тастатуре (Ctrl+C).",
+
+PasteAsText		: "Залепи као чист текст",
+PasteFromWord	: "Залепи из Worda",
+
+DlgPasteMsg2	: "Молимо Вас да залепите унутар доње површине користећи тастатурну пречицу (<STRONG>Ctrl+V</STRONG>) и да притиснете <STRONG>OK</STRONG>.",
+DlgPasteSec		: "Because of your browser security settings, the editor is not able to access your clipboard data directly. You are required to paste it again in this window.",	//MISSING
+DlgPasteIgnoreFont		: "Игнориши Font Face дефиниције",
+DlgPasteRemoveStyles	: "Уклони дефиниције стилова",
+
+// Color Picker
+ColorAutomatic	: "Аутоматски",
+ColorMoreColors	: "Више боја...",
+
+// Document Properties
+DocProps		: "Особине документа",
+
+// Anchor Dialog
+DlgAnchorTitle		: "Особине сидра",
+DlgAnchorName		: "Име сидра",
+DlgAnchorErrorName	: "Молимо Вас да унесете име сидра",
+
+// Speller Pages Dialog
+DlgSpellNotInDic		: "Није у речнику",
+DlgSpellChangeTo		: "Измени",
+DlgSpellBtnIgnore		: "Игнориши",
+DlgSpellBtnIgnoreAll	: "Игнориши све",
+DlgSpellBtnReplace		: "Замени",
+DlgSpellBtnReplaceAll	: "Замени све",
+DlgSpellBtnUndo			: "Врати акцију",
+DlgSpellNoSuggestions	: "- Без сугестија -",
+DlgSpellProgress		: "Провера спеловања у току...",
+DlgSpellNoMispell		: "Провера спеловања завршена: грешке нису пронађене",
+DlgSpellNoChanges		: "Провера спеловања завршена: Није измењена ниједна реч",
+DlgSpellOneChange		: "Провера спеловања завршена: Измењена је једна реч",
+DlgSpellManyChanges		: "Провера спеловања завршена:  %1 реч(и) је измењено",
+
+IeSpellDownload			: "Провера спеловања није инсталирана. Да ли желите да је скинете са Интернета?",
+
+// Button Dialog
+DlgButtonText		: "Текст (вредност)",
+DlgButtonType		: "Tип",
+DlgButtonTypeBtn	: "Button",	//MISSING
+DlgButtonTypeSbm	: "Submit",	//MISSING
+DlgButtonTypeRst	: "Reset",	//MISSING
+
+// Checkbox and Radio Button Dialogs
+DlgCheckboxName		: "Назив",
+DlgCheckboxValue	: "Вредност",
+DlgCheckboxSelected	: "Означено",
+
+// Form Dialog
+DlgFormName		: "Назив",
+DlgFormAction	: "Aкција",
+DlgFormMethod	: "Mетода",
+
+// Select Field Dialog
+DlgSelectName		: "Назив",
+DlgSelectValue		: "Вредност",
+DlgSelectSize		: "Величина",
+DlgSelectLines		: "линија",
+DlgSelectChkMulti	: "Дозволи вишеструку селекцију",
+DlgSelectOpAvail	: "Доступне опције",
+DlgSelectOpText		: "Текст",
+DlgSelectOpValue	: "Вредност",
+DlgSelectBtnAdd		: "Додај",
+DlgSelectBtnModify	: "Измени",
+DlgSelectBtnUp		: "Горе",
+DlgSelectBtnDown	: "Доле",
+DlgSelectBtnSetValue : "Подеси као означену вредност",
+DlgSelectBtnDelete	: "Обриши",
+
+// Textarea Dialog
+DlgTextareaName	: "Назив",
+DlgTextareaCols	: "Број колона",
+DlgTextareaRows	: "Број редова",
+
+// Text Field Dialog
+DlgTextName			: "Назив",
+DlgTextValue		: "Вредност",
+DlgTextCharWidth	: "Ширина (карактера)",
+DlgTextMaxChars		: "Максимално карактера",
+DlgTextType			: "Тип",
+DlgTextTypeText		: "Текст",
+DlgTextTypePass		: "Лозинка",
+
+// Hidden Field Dialog
+DlgHiddenName	: "Назив",
+DlgHiddenValue	: "Вредност",
+
+// Bulleted List Dialog
+BulletedListProp	: "Особине Bulleted листе",
+NumberedListProp	: "Особине набројиве листе",
+DlgLstStart			: "Start",	//MISSING
+DlgLstType			: "Тип",
+DlgLstTypeCircle	: "Круг",
+DlgLstTypeDisc		: "Disc",	//MISSING
+DlgLstTypeSquare	: "Квадрат",
+DlgLstTypeNumbers	: "Бројеви (1, 2, 3)",
+DlgLstTypeLCase		: "мала слова (a, b, c)",
+DlgLstTypeUCase		: "ВЕЛИКА СЛОВА (A, B, C)",
+DlgLstTypeSRoman	: "Мале римске цифре (i, ii, iii)",
+DlgLstTypeLRoman	: "Велике римске цифре (I, II, III)",
+
+// Document Properties Dialog
+DlgDocGeneralTab	: "Опште особине",
+DlgDocBackTab		: "Позадина",
+DlgDocColorsTab		: "Боје и маргине",
+DlgDocMetaTab		: "Метаподаци",
+
+DlgDocPageTitle		: "Наслов странице",
+DlgDocLangDir		: "Смер језика",
+DlgDocLangDirLTR	: "Слева надесно (LTR)",
+DlgDocLangDirRTL	: "Здесна налево (RTL)",
+DlgDocLangCode		: "Шифра језика",
+DlgDocCharSet		: "Кодирање скупа карактера",
+DlgDocCharSetCE		: "Central European",	//MISSING
+DlgDocCharSetCT		: "Chinese Traditional (Big5)",	//MISSING
+DlgDocCharSetCR		: "Cyrillic",	//MISSING
+DlgDocCharSetGR		: "Greek",	//MISSING
+DlgDocCharSetJP		: "Japanese",	//MISSING
+DlgDocCharSetKR		: "Korean",	//MISSING
+DlgDocCharSetTR		: "Turkish",	//MISSING
+DlgDocCharSetUN		: "Unicode (UTF-8)",	//MISSING
+DlgDocCharSetWE		: "Western European",	//MISSING
+DlgDocCharSetOther	: "Остала кодирања скупа карактера",
+
+DlgDocDocType		: "Заглавље типа документа",
+DlgDocDocTypeOther	: "Остала заглавља типа документа",
+DlgDocIncXHTML		: "Улључи XHTML декларације",
+DlgDocBgColor		: "Боја позадине",
+DlgDocBgImage		: "УРЛ позадинске слике",
+DlgDocBgNoScroll	: "Фиксирана позадина",
+DlgDocCText			: "Текст",
+DlgDocCLink			: "Линк",
+DlgDocCVisited		: "Посећени линк",
+DlgDocCActive		: "Активни линк",
+DlgDocMargins		: "Маргине странице",
+DlgDocMaTop			: "Горња",
+DlgDocMaLeft		: "Лева",
+DlgDocMaRight		: "Десна",
+DlgDocMaBottom		: "Доња",
+DlgDocMeIndex		: "Кључне речи за индексирање документа (раздвојене зарезом)",
+DlgDocMeDescr		: "Опис документа",
+DlgDocMeAuthor		: "Аутор",
+DlgDocMeCopy		: "Ауторска права",
+DlgDocPreview		: "Изглед странице",
+
+// Templates Dialog
+Templates			: "Обрасци",
+DlgTemplatesTitle	: "Обрасци за садржај",
+DlgTemplatesSelMsg	: "Молимо Вас да одаберете образац који ће бити примењен на страницу (тренутни садржај ће бити обрисан):",
+DlgTemplatesLoading	: "Учитавам листу образаца. Мало стрпљења...",
+DlgTemplatesNoTpl	: "(Нема дефинисаних образаца)",
+DlgTemplatesReplace	: "Replace actual contents",	//MISSING
+
+// About Dialog
+DlgAboutAboutTab	: "О едитору",
+DlgAboutBrowserInfoTab	: "Информације о претраживачу",
+DlgAboutLicenseTab	: "License",	//MISSING
+DlgAboutVersion		: "верзија",
+DlgAboutInfo		: "За више информација посетите"
+};


Property changes on: announcement/trunk/src/main/webapp/fckeditor/editor/lang/sr.js
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/webapp/fckeditor/editor/lang/sv.js
===================================================================
--- announcement/trunk/src/main/webapp/fckeditor/editor/lang/sv.js	                        (rev 0)
+++ announcement/trunk/src/main/webapp/fckeditor/editor/lang/sv.js	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,515 @@
+/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2008 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * Swedish language file.
+ */
+
+var FCKLang =
+{
+// Language direction : "ltr" (left to right) or "rtl" (right to left).
+Dir					: "ltr",
+
+ToolbarCollapse		: "Dölj verktygsfält",
+ToolbarExpand		: "Visa verktygsfält",
+
+// Toolbar Items and Context Menu
+Save				: "Spara",
+NewPage				: "Ny sida",
+Preview				: "Förhandsgranska",
+Cut					: "Klipp ut",
+Copy				: "Kopiera",
+Paste				: "Klistra in",
+PasteText			: "Klistra in som text",
+PasteWord			: "Klistra in från Word",
+Print				: "Skriv ut",
+SelectAll			: "Markera allt",
+RemoveFormat		: "Radera formatering",
+InsertLinkLbl		: "Länk",
+InsertLink			: "Infoga/Redigera länk",
+RemoveLink			: "Radera länk",
+Anchor				: "Infoga/Redigera ankarlänk",
+AnchorDelete		: "Remove Anchor",	//MISSING
+InsertImageLbl		: "Bild",
+InsertImage			: "Infoga/Redigera bild",
+InsertFlashLbl		: "Flash",
+InsertFlash			: "Infoga/Redigera Flash",
+InsertTableLbl		: "Tabell",
+InsertTable			: "Infoga/Redigera tabell",
+InsertLineLbl		: "Linje",
+InsertLine			: "Infoga horisontal linje",
+InsertSpecialCharLbl: "Utökade tecken",
+InsertSpecialChar	: "Klistra in utökat tecken",
+InsertSmileyLbl		: "Smiley",
+InsertSmiley		: "Infoga Smiley",
+About				: "Om FCKeditor",
+Bold				: "Fet",
+Italic				: "Kursiv",
+Underline			: "Understruken",
+StrikeThrough		: "Genomstruken",
+Subscript			: "Nedsänkta tecken",
+Superscript			: "Upphöjda tecken",
+LeftJustify			: "Vänsterjustera",
+CenterJustify		: "Centrera",
+RightJustify		: "Högerjustera",
+BlockJustify		: "Justera till marginaler",
+DecreaseIndent		: "Minska indrag",
+IncreaseIndent		: "Öka indrag",
+Blockquote			: "Blockquote",	//MISSING
+Undo				: "Ångra",
+Redo				: "Gör om",
+NumberedListLbl		: "Numrerad lista",
+NumberedList		: "Infoga/Radera numrerad lista",
+BulletedListLbl		: "Punktlista",
+BulletedList		: "Infoga/Radera punktlista",
+ShowTableBorders	: "Visa tabellkant",
+ShowDetails			: "Visa radbrytningar",
+Style				: "Anpassad stil",
+FontFormat			: "Teckenformat",
+Font				: "Typsnitt",
+FontSize			: "Storlek",
+TextColor			: "Textfärg",
+BGColor				: "Bakgrundsfärg",
+Source				: "Källa",
+Find				: "Sök",
+Replace				: "Ersätt",
+SpellCheck			: "Stavningskontroll",
+UniversalKeyboard	: "Universellt tangentbord",
+PageBreakLbl		: "Sidbrytning",
+PageBreak			: "Infoga sidbrytning",
+
+Form			: "Formulär",
+Checkbox		: "Kryssruta",
+RadioButton		: "Alternativknapp",
+TextField		: "Textfält",
+Textarea		: "Textruta",
+HiddenField		: "Dolt fält",
+Button			: "Knapp",
+SelectionField	: "Flervalslista",
+ImageButton		: "Bildknapp",
+
+FitWindow		: "Anpassa till fönstrets storlek",
+ShowBlocks		: "Show Blocks",	//MISSING
+
+// Context Menu
+EditLink			: "Redigera länk",
+CellCM				: "Cell",
+RowCM				: "Rad",
+ColumnCM			: "Kolumn",
+InsertRowAfter		: "Insert Row After",	//MISSING
+InsertRowBefore		: "Insert Row Before",	//MISSING
+DeleteRows			: "Radera rad",
+InsertColumnAfter	: "Insert Column After",	//MISSING
+InsertColumnBefore	: "Insert Column Before",	//MISSING
+DeleteColumns		: "Radera kolumn",
+InsertCellAfter		: "Insert Cell After",	//MISSING
+InsertCellBefore	: "Insert Cell Before",	//MISSING
+DeleteCells			: "Radera celler",
+MergeCells			: "Sammanfoga celler",
+MergeRight			: "Merge Right",	//MISSING
+MergeDown			: "Merge Down",	//MISSING
+HorizontalSplitCell	: "Split Cell Horizontally",	//MISSING
+VerticalSplitCell	: "Split Cell Vertically",	//MISSING
+TableDelete			: "Radera tabell",
+CellProperties		: "Cellegenskaper",
+TableProperties		: "Tabellegenskaper",
+ImageProperties		: "Bildegenskaper",
+FlashProperties		: "Flashegenskaper",
+
+AnchorProp			: "Egenskaper för ankarlänk",
+ButtonProp			: "Egenskaper för knapp",
+CheckboxProp		: "Egenskaper för kryssruta",
+HiddenFieldProp		: "Egenskaper för dolt fält",
+RadioButtonProp		: "Egenskaper för alternativknapp",
+ImageButtonProp		: "Egenskaper för bildknapp",
+TextFieldProp		: "Egenskaper för textfält",
+SelectionFieldProp	: "Egenskaper för flervalslista",
+TextareaProp		: "Egenskaper för textruta",
+FormProp			: "Egenskaper för formulär",
+
+FontFormats			: "Normal;Formaterad;Adress;Rubrik 1;Rubrik 2;Rubrik 3;Rubrik 4;Rubrik 5;Rubrik 6;Normal (DIV)",
+
+// Alerts and Messages
+ProcessingXHTML		: "Bearbetar XHTML. Var god vänta...",
+Done				: "Klar",
+PasteWordConfirm	: "Texten du vill klistra in verkar vara kopierad från Word. Vill du rensa innan du klistar in?",
+NotCompatiblePaste	: "Denna åtgärd är inte tillgängligt för Internet Explorer version 5.5 eller högre. Vill du klistra in utan att rensa?",
+UnknownToolbarItem	: "Okänt verktygsfält \"%1\"",
+UnknownCommand		: "Okänt kommando \"%1\"",
+NotImplemented		: "Kommandot finns ej",
+UnknownToolbarSet	: "Verktygsfält \"%1\" finns ej",
+NoActiveX			: "Din webläsares säkerhetsinställningar kan begränsa funktionaliteten. Du bör aktivera \"Kör ActiveX kontroller och plug-ins\". Fel och avsaknad av funktioner kan annars uppstå.",
+BrowseServerBlocked : "Kunde Ej öppna resursfönstret. Var god och avaktivera alla popup-blockerare.",
+DialogBlocked		: "Kunde Ej öppna dialogfönstret. Var god och avaktivera alla popup-blockerare.",
+
+// Dialogs
+DlgBtnOK			: "OK",
+DlgBtnCancel		: "Avbryt",
+DlgBtnClose			: "Stäng",
+DlgBtnBrowseServer	: "Bläddra på server",
+DlgAdvancedTag		: "Avancerad",
+DlgOpOther			: "Övrigt",
+DlgInfoTab			: "Information",
+DlgAlertUrl			: "Var god och ange en URL",
+
+// General Dialogs Labels
+DlgGenNotSet		: "<ej angivet>",
+DlgGenId			: "Id",
+DlgGenLangDir		: "Språkriktning",
+DlgGenLangDirLtr	: "Vänster till Höger (VTH)",
+DlgGenLangDirRtl	: "Höger till Vänster (HTV)",
+DlgGenLangCode		: "Språkkod",
+DlgGenAccessKey		: "Behörighetsnyckel",
+DlgGenName			: "Namn",
+DlgGenTabIndex		: "Tabindex",
+DlgGenLongDescr		: "URL-beskrivning",
+DlgGenClass			: "Stylesheet class",
+DlgGenTitle			: "Titel",
+DlgGenContType		: "Innehållstyp",
+DlgGenLinkCharset	: "Teckenuppställning",
+DlgGenStyle			: "Style",
+
+// Image Dialog
+DlgImgTitle			: "Bildegenskaper",
+DlgImgInfoTab		: "Bildinformation",
+DlgImgBtnUpload		: "Skicka till server",
+DlgImgURL			: "URL",
+DlgImgUpload		: "Ladda upp",
+DlgImgAlt			: "Alternativ text",
+DlgImgWidth			: "Bredd",
+DlgImgHeight		: "Höjd",
+DlgImgLockRatio		: "Lås höjd/bredd förhållanden",
+DlgBtnResetSize		: "Återställ storlek",
+DlgImgBorder		: "Kant",
+DlgImgHSpace		: "Horis. marginal",
+DlgImgVSpace		: "Vert. marginal",
+DlgImgAlign			: "Justering",
+DlgImgAlignLeft		: "Vänster",
+DlgImgAlignAbsBottom: "Absolut nederkant",
+DlgImgAlignAbsMiddle: "Absolut centrering",
+DlgImgAlignBaseline	: "Baslinje",
+DlgImgAlignBottom	: "Nederkant",
+DlgImgAlignMiddle	: "Mitten",
+DlgImgAlignRight	: "Höger",
+DlgImgAlignTextTop	: "Text överkant",
+DlgImgAlignTop		: "Överkant",
+DlgImgPreview		: "Förhandsgranska",
+DlgImgAlertUrl		: "Var god och ange bildens URL",
+DlgImgLinkTab		: "Länk",
+
+// Flash Dialog
+DlgFlashTitle		: "Flashegenskaper",
+DlgFlashChkPlay		: "Automatisk uppspelning",
+DlgFlashChkLoop		: "Upprepa/Loopa",
+DlgFlashChkMenu		: "Aktivera Flashmeny",
+DlgFlashScale		: "Skala",
+DlgFlashScaleAll	: "Visa allt",
+DlgFlashScaleNoBorder	: "Ingen ram",
+DlgFlashScaleFit	: "Exakt passning",
+
+// Link Dialog
+DlgLnkWindowTitle	: "Länk",
+DlgLnkInfoTab		: "Länkinformation",
+DlgLnkTargetTab		: "Mål",
+
+DlgLnkType			: "Länktyp",
+DlgLnkTypeURL		: "URL",
+DlgLnkTypeAnchor	: "Ankare i sidan",
+DlgLnkTypeEMail		: "E-post",
+DlgLnkProto			: "Protokoll",
+DlgLnkProtoOther	: "<övrigt>",
+DlgLnkURL			: "URL",
+DlgLnkAnchorSel		: "Välj ett ankare",
+DlgLnkAnchorByName	: "efter ankarnamn",
+DlgLnkAnchorById	: "efter objektid",
+DlgLnkNoAnchors		: "(Inga ankare kunde hittas)",
+DlgLnkEMail			: "E-postadress",
+DlgLnkEMailSubject	: "Ämne",
+DlgLnkEMailBody		: "Innehåll",
+DlgLnkUpload		: "Ladda upp",
+DlgLnkBtnUpload		: "Skicka till servern",
+
+DlgLnkTarget		: "Mål",
+DlgLnkTargetFrame	: "<ram>",
+DlgLnkTargetPopup	: "<popup-fönster>",
+DlgLnkTargetBlank	: "Nytt fönster (_blank)",
+DlgLnkTargetParent	: "Föregående Window (_parent)",
+DlgLnkTargetSelf	: "Detta fönstret (_self)",
+DlgLnkTargetTop		: "Översta fönstret (_top)",
+DlgLnkTargetFrameName	: "Målets ramnamn",
+DlgLnkPopWinName	: "Popup-fönstrets namn",
+DlgLnkPopWinFeat	: "Popup-fönstrets egenskaper",
+DlgLnkPopResize		: "Kan ändra storlek",
+DlgLnkPopLocation	: "Adressfält",
+DlgLnkPopMenu		: "Menyfält",
+DlgLnkPopScroll		: "Scrolllista",
+DlgLnkPopStatus		: "Statusfält",
+DlgLnkPopToolbar	: "Verktygsfält",
+DlgLnkPopFullScrn	: "Helskärm (endast IE)",
+DlgLnkPopDependent	: "Beroende (endest Netscape)",
+DlgLnkPopWidth		: "Bredd",
+DlgLnkPopHeight		: "Höjd",
+DlgLnkPopLeft		: "Position från vänster",
+DlgLnkPopTop		: "Position från sidans topp",
+
+DlnLnkMsgNoUrl		: "Var god ange länkens URL",
+DlnLnkMsgNoEMail	: "Var god ange E-postadress",
+DlnLnkMsgNoAnchor	: "Var god ange ett ankare",
+DlnLnkMsgInvPopName	: "Popup-rutans namn måste börja med en alfabetisk bokstav och får inte innehålla mellanslag",
+
+// Color Dialog
+DlgColorTitle		: "Välj färg",
+DlgColorBtnClear	: "Rensa",
+DlgColorHighlight	: "Markera",
+DlgColorSelected	: "Vald",
+
+// Smiley Dialog
+DlgSmileyTitle		: "Infoga smiley",
+
+// Special Character Dialog
+DlgSpecialCharTitle	: "Välj utökat tecken",
+
+// Table Dialog
+DlgTableTitle		: "Tabellegenskaper",
+DlgTableRows		: "Rader",
+DlgTableColumns		: "Kolumner",
+DlgTableBorder		: "Kantstorlek",
+DlgTableAlign		: "Justering",
+DlgTableAlignNotSet	: "<ej angivet>",
+DlgTableAlignLeft	: "Vänster",
+DlgTableAlignCenter	: "Centrerad",
+DlgTableAlignRight	: "Höger",
+DlgTableWidth		: "Bredd",
+DlgTableWidthPx		: "pixlar",
+DlgTableWidthPc		: "procent",
+DlgTableHeight		: "Höjd",
+DlgTableCellSpace	: "Cellavstånd",
+DlgTableCellPad		: "Cellutfyllnad",
+DlgTableCaption		: "Rubrik",
+DlgTableSummary		: "Sammanfattning",
+
+// Table Cell Dialog
+DlgCellTitle		: "Cellegenskaper",
+DlgCellWidth		: "Bredd",
+DlgCellWidthPx		: "pixlar",
+DlgCellWidthPc		: "procent",
+DlgCellHeight		: "Höjd",
+DlgCellWordWrap		: "Automatisk radbrytning",
+DlgCellWordWrapNotSet	: "<Ej angivet>",
+DlgCellWordWrapYes	: "Ja",
+DlgCellWordWrapNo	: "Nej",
+DlgCellHorAlign		: "Horisontal justering",
+DlgCellHorAlignNotSet	: "<Ej angivet>",
+DlgCellHorAlignLeft	: "Vänster",
+DlgCellHorAlignCenter	: "Centrerad",
+DlgCellHorAlignRight: "Höger",
+DlgCellVerAlign		: "Vertikal justering",
+DlgCellVerAlignNotSet	: "<Ej angivet>",
+DlgCellVerAlignTop	: "Topp",
+DlgCellVerAlignMiddle	: "Mitten",
+DlgCellVerAlignBottom	: "Nederkant",
+DlgCellVerAlignBaseline	: "Underst",
+DlgCellRowSpan		: "Radomfång",
+DlgCellCollSpan		: "Kolumnomfång",
+DlgCellBackColor	: "Bakgrundsfärg",
+DlgCellBorderColor	: "Kantfärg",
+DlgCellBtnSelect	: "Välj...",
+
+// Find and Replace Dialog
+DlgFindAndReplaceTitle	: "Find and Replace",	//MISSING
+
+// Find Dialog
+DlgFindTitle		: "Sök",
+DlgFindFindBtn		: "Sök",
+DlgFindNotFoundMsg	: "Angiven text kunde ej hittas.",
+
+// Replace Dialog
+DlgReplaceTitle			: "Ersätt",
+DlgReplaceFindLbl		: "Sök efter:",
+DlgReplaceReplaceLbl	: "Ersätt med:",
+DlgReplaceCaseChk		: "Skiftläge",
+DlgReplaceReplaceBtn	: "Ersätt",
+DlgReplaceReplAllBtn	: "Ersätt alla",
+DlgReplaceWordChk		: "Inkludera hela ord",
+
+// Paste Operations / Dialog
+PasteErrorCut	: "Säkerhetsinställningar i Er webläsare tillåter inte åtgården Klipp ut. Använd (Ctrl+X) istället.",
+PasteErrorCopy	: "Säkerhetsinställningar i Er webläsare tillåter inte åtgården Kopiera. Använd (Ctrl+C) istället",
+
+PasteAsText		: "Klistra in som vanlig text",
+PasteFromWord	: "Klistra in från Word",
+
+DlgPasteMsg2	: "Var god och klistra in Er text i rutan nedan genom att använda (<STRONG>Ctrl+V</STRONG>) klicka sen på <STRONG>OK</STRONG>.",
+DlgPasteSec		: "På grund av din webläsares säkerhetsinställningar kan verktyget inte få åtkomst till urklippsdatan. Var god och använd detta fönster istället.",
+DlgPasteIgnoreFont		: "Ignorera typsnittsdefinitioner",
+DlgPasteRemoveStyles	: "Radera Stildefinitioner",
+
+// Color Picker
+ColorAutomatic	: "Automatisk",
+ColorMoreColors	: "Fler färger...",
+
+// Document Properties
+DocProps		: "Dokumentegenskaper",
+
+// Anchor Dialog
+DlgAnchorTitle		: "Ankaregenskaper",
+DlgAnchorName		: "Ankarnamn",
+DlgAnchorErrorName	: "Var god ange ett ankarnamn",
+
+// Speller Pages Dialog
+DlgSpellNotInDic		: "Saknas i ordlistan",
+DlgSpellChangeTo		: "Ändra till",
+DlgSpellBtnIgnore		: "Ignorera",
+DlgSpellBtnIgnoreAll	: "Ignorera alla",
+DlgSpellBtnReplace		: "Ersätt",
+DlgSpellBtnReplaceAll	: "Ersätt alla",
+DlgSpellBtnUndo			: "Ångra",
+DlgSpellNoSuggestions	: "- Förslag saknas -",
+DlgSpellProgress		: "Stavningskontroll pågår...",
+DlgSpellNoMispell		: "Stavningskontroll slutförd: Inga stavfel påträffades.",
+DlgSpellNoChanges		: "Stavningskontroll slutförd: Inga ord rättades.",
+DlgSpellOneChange		: "Stavningskontroll slutförd: Ett ord rättades.",
+DlgSpellManyChanges		: "Stavningskontroll slutförd: %1 ord rättades.",
+
+IeSpellDownload			: "Stavningskontrollen är ej installerad. Vill du göra det nu?",
+
+// Button Dialog
+DlgButtonText		: "Text (Värde)",
+DlgButtonType		: "Typ",
+DlgButtonTypeBtn	: "Knapp",
+DlgButtonTypeSbm	: "Skicka",
+DlgButtonTypeRst	: "Återställ",
+
+// Checkbox and Radio Button Dialogs
+DlgCheckboxName		: "Namn",
+DlgCheckboxValue	: "Värde",
+DlgCheckboxSelected	: "Vald",
+
+// Form Dialog
+DlgFormName		: "Namn",
+DlgFormAction	: "Funktion",
+DlgFormMethod	: "Metod",
+
+// Select Field Dialog
+DlgSelectName		: "Namn",
+DlgSelectValue		: "Värde",
+DlgSelectSize		: "Storlek",
+DlgSelectLines		: "Linjer",
+DlgSelectChkMulti	: "Tillåt flerval",
+DlgSelectOpAvail	: "Befintliga val",
+DlgSelectOpText		: "Text",
+DlgSelectOpValue	: "Värde",
+DlgSelectBtnAdd		: "Lägg till",
+DlgSelectBtnModify	: "Redigera",
+DlgSelectBtnUp		: "Upp",
+DlgSelectBtnDown	: "Ner",
+DlgSelectBtnSetValue : "Markera som valt värde",
+DlgSelectBtnDelete	: "Radera",
+
+// Textarea Dialog
+DlgTextareaName	: "Namn",
+DlgTextareaCols	: "Kolumner",
+DlgTextareaRows	: "Rader",
+
+// Text Field Dialog
+DlgTextName			: "Namn",
+DlgTextValue		: "Värde",
+DlgTextCharWidth	: "Teckenbredd",
+DlgTextMaxChars		: "Max antal tecken",
+DlgTextType			: "Typ",
+DlgTextTypeText		: "Text",
+DlgTextTypePass		: "Lösenord",
+
+// Hidden Field Dialog
+DlgHiddenName	: "Namn",
+DlgHiddenValue	: "Värde",
+
+// Bulleted List Dialog
+BulletedListProp	: "Egenskaper för punktlista",
+NumberedListProp	: "Egenskaper för numrerad lista",
+DlgLstStart			: "Start",	//MISSING
+DlgLstType			: "Typ",
+DlgLstTypeCircle	: "Cirkel",
+DlgLstTypeDisc		: "Punkt",
+DlgLstTypeSquare	: "Ruta",
+DlgLstTypeNumbers	: "Nummer (1, 2, 3)",
+DlgLstTypeLCase		: "Gemener (a, b, c)",
+DlgLstTypeUCase		: "Versaler (A, B, C)",
+DlgLstTypeSRoman	: "Små romerska siffror (i, ii, iii)",
+DlgLstTypeLRoman	: "Stora romerska siffror (I, II, III)",
+
+// Document Properties Dialog
+DlgDocGeneralTab	: "Allmän",
+DlgDocBackTab		: "Bakgrund",
+DlgDocColorsTab		: "Färg och marginal",
+DlgDocMetaTab		: "Metadata",
+
+DlgDocPageTitle		: "Sidtitel",
+DlgDocLangDir		: "Språkriktning",
+DlgDocLangDirLTR	: "Vänster till Höger",
+DlgDocLangDirRTL	: "Höger till Vänster",
+DlgDocLangCode		: "Språkkod",
+DlgDocCharSet		: "Teckenuppsättningar",
+DlgDocCharSetCE		: "Central Europa",
+DlgDocCharSetCT		: "Traditionell Kinesisk (Big5)",
+DlgDocCharSetCR		: "Kyrillisk",
+DlgDocCharSetGR		: "Grekiska",
+DlgDocCharSetJP		: "Japanska",
+DlgDocCharSetKR		: "Koreanska",
+DlgDocCharSetTR		: "Turkiska",
+DlgDocCharSetUN		: "Unicode (UTF-8)",
+DlgDocCharSetWE		: "Väst Europa",
+DlgDocCharSetOther	: "Övriga teckenuppsättningar",
+
+DlgDocDocType		: "Sidhuvud",
+DlgDocDocTypeOther	: "Övriga sidhuvuden",
+DlgDocIncXHTML		: "Inkludera XHTML deklaration",
+DlgDocBgColor		: "Bakgrundsfärg",
+DlgDocBgImage		: "Bakgrundsbildens URL",
+DlgDocBgNoScroll	: "Fast bakgrund",
+DlgDocCText			: "Text",
+DlgDocCLink			: "Länk",
+DlgDocCVisited		: "Besökt länk",
+DlgDocCActive		: "Aktiv länk",
+DlgDocMargins		: "Sidmarginal",
+DlgDocMaTop			: "Topp",
+DlgDocMaLeft		: "Vänster",
+DlgDocMaRight		: "Höger",
+DlgDocMaBottom		: "Botten",
+DlgDocMeIndex		: "Sidans nyckelord",
+DlgDocMeDescr		: "Sidans beskrivning",
+DlgDocMeAuthor		: "Författare",
+DlgDocMeCopy		: "Upphovsrätt",
+DlgDocPreview		: "Förhandsgranska",
+
+// Templates Dialog
+Templates			: "Sidmallar",
+DlgTemplatesTitle	: "Sidmallar",
+DlgTemplatesSelMsg	: "Var god välj en mall att använda med editorn<br>(allt nuvarande innehåll raderas):",
+DlgTemplatesLoading	: "Laddar mallar. Var god vänta...",
+DlgTemplatesNoTpl	: "(Ingen mall är vald)",
+DlgTemplatesReplace	: "Ersätt aktuellt innehåll",
+
+// About Dialog
+DlgAboutAboutTab	: "Om",
+DlgAboutBrowserInfoTab	: "Webläsare",
+DlgAboutLicenseTab	: "Licens",
+DlgAboutVersion		: "version",
+DlgAboutInfo		: "För mer information se"
+};


Property changes on: announcement/trunk/src/main/webapp/fckeditor/editor/lang/sv.js
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/webapp/fckeditor/editor/lang/th.js
===================================================================
--- announcement/trunk/src/main/webapp/fckeditor/editor/lang/th.js	                        (rev 0)
+++ announcement/trunk/src/main/webapp/fckeditor/editor/lang/th.js	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,515 @@
+/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2008 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * Thai language file.
+ */
+
+var FCKLang =
+{
+// Language direction : "ltr" (left to right) or "rtl" (right to left).
+Dir					: "ltr",
+
+ToolbarCollapse		: "ซ่อนแถบเครื่องมือ",
+ToolbarExpand		: "แสดงแถบเครื่องมือ",
+
+// Toolbar Items and Context Menu
+Save				: "บันทึก",
+NewPage				: "สร้างหน้าเอกสารใหม่",
+Preview				: "ดูหน้าเอกสารตัวอย่าง",
+Cut					: "ตัด",
+Copy				: "สำเนา",
+Paste				: "วาง",
+PasteText			: "วางสำเนาจากตัวอักษรธรรมดา",
+PasteWord			: "วางสำเนาจากตัวอักษรเวิร์ด",
+Print				: "สั่งพิมพ์",
+SelectAll			: "เลือกทั้งหมด",
+RemoveFormat		: "ล้างรูปแบบ",
+InsertLinkLbl		: "ลิงค์เชื่อมโยงเว็บ อีเมล์ รูปภาพ หรือไฟล์อื่นๆ",
+InsertLink			: "แทรก/แก้ไข ลิงค์",
+RemoveLink			: "ลบ ลิงค์",
+Anchor				: "แทรก/แก้ไข Anchor",
+AnchorDelete		: "Remove Anchor",	//MISSING
+InsertImageLbl		: "รูปภาพ",
+InsertImage			: "แทรก/แก้ไข รูปภาพ",
+InsertFlashLbl		: "ไฟล์ Flash",
+InsertFlash			: "แทรก/แก้ไข ไฟล์ Flash",
+InsertTableLbl		: "ตาราง",
+InsertTable			: "แทรก/แก้ไข ตาราง",
+InsertLineLbl		: "เส้นคั่นบรรทัด",
+InsertLine			: "แทรกเส้นคั่นบรรทัด",
+InsertSpecialCharLbl: "ตัวอักษรพิเศษ",
+InsertSpecialChar	: "แทรกตัวอักษรพิเศษ",
+InsertSmileyLbl		: "รูปสื่ออารมณ์",
+InsertSmiley		: "แทรกรูปสื่ออารมณ์",
+About				: "เกี่ยวกับโปรแกรม FCKeditor",
+Bold				: "ตัวหนา",
+Italic				: "ตัวเอียง",
+Underline			: "ตัวขีดเส้นใต้",
+StrikeThrough		: "ตัวขีดเส้นทับ",
+Subscript			: "ตัวห้อย",
+Superscript			: "ตัวยก",
+LeftJustify			: "จัดชิดซ้าย",
+CenterJustify		: "จัดกึ่งกลาง",
+RightJustify		: "จัดชิดขวา",
+BlockJustify		: "จัดพอดีหน้ากระดาษ",
+DecreaseIndent		: "ลดระยะย่อหน้า",
+IncreaseIndent		: "เพิ่มระยะย่อหน้า",
+Blockquote			: "Blockquote",	//MISSING
+Undo				: "ยกเลิกคำสั่ง",
+Redo				: "ทำซ้ำคำสั่ง",
+NumberedListLbl		: "ลำดับรายการแบบตัวเลข",
+NumberedList		: "แทรก/แก้ไข ลำดับรายการแบบตัวเลข",
+BulletedListLbl		: "ลำดับรายการแบบสัญลักษณ์",
+BulletedList		: "แทรก/แก้ไข ลำดับรายการแบบสัญลักษณ์",
+ShowTableBorders	: "แสดงขอบของตาราง",
+ShowDetails			: "แสดงรายละเอียด",
+Style				: "ลักษณะ",
+FontFormat			: "รูปแบบ",
+Font				: "แบบอักษร",
+FontSize			: "ขนาด",
+TextColor			: "สีตัวอักษร",
+BGColor				: "สีพื้นหลัง",
+Source				: "ดูรหัส HTML",
+Find				: "ค้นหา",
+Replace				: "ค้นหาและแทนที่",
+SpellCheck			: "ตรวจการสะกดคำ",
+UniversalKeyboard	: "คีย์บอร์ดหลากภาษา",
+PageBreakLbl		: "ใส่ตัวแบ่งหน้า Page Break",
+PageBreak			: "แทรกตัวแบ่งหน้า Page Break",
+
+Form			: "แบบฟอร์ม",
+Checkbox		: "เช็คบ๊อก",
+RadioButton		: "เรดิโอบัตตอน",
+TextField		: "เท็กซ์ฟิลด์",
+Textarea		: "เท็กซ์แอเรีย",
+HiddenField		: "ฮิดเดนฟิลด์",
+Button			: "ปุ่ม",
+SelectionField	: "แถบตัวเลือก",
+ImageButton		: "ปุ่มแบบรูปภาพ",
+
+FitWindow		: "ขยายขนาดตัวอีดิตเตอร์",
+ShowBlocks		: "Show Blocks",	//MISSING
+
+// Context Menu
+EditLink			: "แก้ไข ลิงค์",
+CellCM				: "ช่องตาราง",
+RowCM				: "แถว",
+ColumnCM			: "คอลัมน์",
+InsertRowAfter		: "Insert Row After",	//MISSING
+InsertRowBefore		: "Insert Row Before",	//MISSING
+DeleteRows			: "ลบแถว",
+InsertColumnAfter	: "Insert Column After",	//MISSING
+InsertColumnBefore	: "Insert Column Before",	//MISSING
+DeleteColumns		: "ลบสดมน์",
+InsertCellAfter		: "Insert Cell After",	//MISSING
+InsertCellBefore	: "Insert Cell Before",	//MISSING
+DeleteCells			: "ลบช่อง",
+MergeCells			: "ผสานช่อง",
+MergeRight			: "Merge Right",	//MISSING
+MergeDown			: "Merge Down",	//MISSING
+HorizontalSplitCell	: "Split Cell Horizontally",	//MISSING
+VerticalSplitCell	: "Split Cell Vertically",	//MISSING
+TableDelete			: "ลบตาราง",
+CellProperties		: "คุณสมบัติของช่อง",
+TableProperties		: "คุณสมบัติของตาราง",
+ImageProperties		: "คุณสมบัติของรูปภาพ",
+FlashProperties		: "คุณสมบัติของไฟล์ Flash",
+
+AnchorProp			: "รายละเอียด Anchor",
+ButtonProp			: "รายละเอียดของ ปุ่ม",
+CheckboxProp		: "คุณสมบัติของ เช็คบ๊อก",
+HiddenFieldProp		: "คุณสมบัติของ ฮิดเดนฟิลด์",
+RadioButtonProp		: "คุณสมบัติของ เรดิโอบัตตอน",
+ImageButtonProp		: "คุณสมบัติของ ปุ่มแบบรูปภาพ",
+TextFieldProp		: "คุณสมบัติของ เท็กซ์ฟิลด์",
+SelectionFieldProp	: "คุณสมบัติของ แถบตัวเลือก",
+TextareaProp		: "คุณสมบัติของ เท็กแอเรีย",
+FormProp			: "คุณสมบัติของ แบบฟอร์ม",
+
+FontFormats			: "Normal;Formatted;Address;Heading 1;Heading 2;Heading 3;Heading 4;Heading 5;Heading 6;Paragraph (DIV)",
+
+// Alerts and Messages
+ProcessingXHTML		: "โปรแกรมกำลังทำงานด้วยเทคโนโลยี XHTML กรุณารอสักครู่...",
+Done				: "โปรแกรมทำงานเสร็จสมบูรณ์",
+PasteWordConfirm	: "ข้อมูลที่ท่านต้องการวางลงในแผ่นงาน ถูกจัดรูปแบบจากโปรแกรมเวิร์ด. ท่านต้องการล้างรูปแบบที่มาจากโปรแกรมเวิร์ดหรือไม่?",
+NotCompatiblePaste	: "คำสั่งนี้ทำงานในโปรแกรมท่องเว็บ Internet Explorer version รุ่น 5.5 หรือใหม่กว่าเท่านั้น. ท่านต้องการวางตัวอักษรโดยไม่ล้างรูปแบบที่มาจากโปรแกรมเวิร์ดหรือไม่?",
+UnknownToolbarItem	: "ไม่สามารถระบุปุ่มเครื่องมือได้ \"%1\"",
+UnknownCommand		: "ไม่สามารถระบุชื่อคำสั่งได้ \"%1\"",
+NotImplemented		: "ไม่สามารถใช้งานคำสั่งได้",
+UnknownToolbarSet	: "ไม่มีการติดตั้งชุดคำสั่งในแถบเครื่องมือ \"%1\" กรุณาติดต่อผู้ดูแลระบบ",
+NoActiveX			: "โปรแกรมท่องอินเตอร์เน็ตของท่านไม่อนุญาติให้อีดิตเตอร์ทำงาน \"Run ActiveX controls and plug-ins\". หากไม่อนุญาติให้ใช้งาน ActiveX controls ท่านจะไม่สามารถใช้งานได้อย่างเต็มประสิทธิภาพ.",
+BrowseServerBlocked : "เปิดหน้าต่างป๊อบอัพเพื่อทำงานต่อไม่ได้ กรุณาปิดเครื่องมือป้องกันป๊อบอัพในโปรแกรมท่องอินเตอร์เน็ตของท่านด้วย",
+DialogBlocked		: "เปิดหน้าต่างป๊อบอัพเพื่อทำงานต่อไม่ได้ กรุณาปิดเครื่องมือป้องกันป๊อบอัพในโปรแกรมท่องอินเตอร์เน็ตของท่านด้วย",
+
+// Dialogs
+DlgBtnOK			: "ตกลง",
+DlgBtnCancel		: "ยกเลิก",
+DlgBtnClose			: "ปิด",
+DlgBtnBrowseServer	: "เปิดหน้าต่างจัดการไฟล์อัพโหลด",
+DlgAdvancedTag		: "ขั้นสูง",
+DlgOpOther			: "<อื่นๆ>",
+DlgInfoTab			: "อินโฟ",
+DlgAlertUrl			: "กรุณาระบุ URL",
+
+// General Dialogs Labels
+DlgGenNotSet		: "<ไม่ระบุ>",
+DlgGenId			: "ไอดี",
+DlgGenLangDir		: "การเขียน-อ่านภาษา",
+DlgGenLangDirLtr	: "จากซ้ายไปขวา (LTR)",
+DlgGenLangDirRtl	: "จากขวามาซ้าย (RTL)",
+DlgGenLangCode		: "รหัสภาษา",
+DlgGenAccessKey		: "แอคเซส คีย์",
+DlgGenName			: "ชื่อ",
+DlgGenTabIndex		: "ลำดับของ แท็บ",
+DlgGenLongDescr		: "คำอธิบายประกอบ URL",
+DlgGenClass			: "คลาสของไฟล์กำหนดลักษณะการแสดงผล",
+DlgGenTitle			: "คำเกริ่นนำ",
+DlgGenContType		: "ชนิดของคำเกริ่นนำ",
+DlgGenLinkCharset	: "ลิงค์เชื่อมโยงไปยังชุดตัวอักษร",
+DlgGenStyle			: "ลักษณะการแสดงผล",
+
+// Image Dialog
+DlgImgTitle			: "คุณสมบัติของ รูปภาพ",
+DlgImgInfoTab		: "ข้อมูลของรูปภาพ",
+DlgImgBtnUpload		: "อัพโหลดไฟล์ไปเก็บไว้ที่เครื่องแม่ข่าย (เซิร์ฟเวอร์)",
+DlgImgURL			: "ที่อยู่อ้างอิง URL",
+DlgImgUpload		: "อัพโหลดไฟล์",
+DlgImgAlt			: "คำประกอบรูปภาพ",
+DlgImgWidth			: "ความกว้าง",
+DlgImgHeight		: "ความสูง",
+DlgImgLockRatio		: "กำหนดอัตราส่วน กว้าง-สูง แบบคงที่",
+DlgBtnResetSize		: "กำหนดรูปเท่าขนาดจริง",
+DlgImgBorder		: "ขนาดขอบรูป",
+DlgImgHSpace		: "ระยะแนวนอน",
+DlgImgVSpace		: "ระยะแนวตั้ง",
+DlgImgAlign			: "การจัดวาง",
+DlgImgAlignLeft		: "ชิดซ้าย",
+DlgImgAlignAbsBottom: "ชิดด้านล่างสุด",
+DlgImgAlignAbsMiddle: "กึ่งกลาง",
+DlgImgAlignBaseline	: "ชิดบรรทัด",
+DlgImgAlignBottom	: "ชิดด้านล่าง",
+DlgImgAlignMiddle	: "กึ่งกลางแนวตั้ง",
+DlgImgAlignRight	: "ชิดขวา",
+DlgImgAlignTextTop	: "ใต้ตัวอักษร",
+DlgImgAlignTop		: "บนสุด",
+DlgImgPreview		: "หน้าเอกสารตัวอย่าง",
+DlgImgAlertUrl		: "กรุณาระบุที่อยู่อ้างอิงออนไลน์ของไฟล์รูปภาพ (URL)",
+DlgImgLinkTab		: "ลิ้งค์",
+
+// Flash Dialog
+DlgFlashTitle		: "คุณสมบัติของไฟล์ Flash",
+DlgFlashChkPlay		: "เล่นอัตโนมัติ Auto Play",
+DlgFlashChkLoop		: "เล่นวนรอบ Loop",
+DlgFlashChkMenu		: "ให้ใช้งานเมนูของ Flash",
+DlgFlashScale		: "อัตราส่วน Scale",
+DlgFlashScaleAll	: "แสดงให้เห็นทั้งหมด Show all",
+DlgFlashScaleNoBorder	: "ไม่แสดงเส้นขอบ No Border",
+DlgFlashScaleFit	: "แสดงให้พอดีกับพื้นที่ Exact Fit",
+
+// Link Dialog
+DlgLnkWindowTitle	: "ลิงค์เชื่อมโยงเว็บ อีเมล์ รูปภาพ หรือไฟล์อื่นๆ",
+DlgLnkInfoTab		: "รายละเอียด",
+DlgLnkTargetTab		: "การเปิดหน้าจอ",
+
+DlgLnkType			: "ประเภทของลิงค์",
+DlgLnkTypeURL		: "ที่อยู่อ้างอิงออนไลน์ (URL)",
+DlgLnkTypeAnchor	: "จุดเชื่อมโยง (Anchor)",
+DlgLnkTypeEMail		: "ส่งอีเมล์ (E-Mail)",
+DlgLnkProto			: "โปรโตคอล",
+DlgLnkProtoOther	: "<อื่นๆ>",
+DlgLnkURL			: "ที่อยู่อ้างอิงออนไลน์ (URL)",
+DlgLnkAnchorSel		: "ระบุข้อมูลของจุดเชื่อมโยง (Anchor)",
+DlgLnkAnchorByName	: "ชื่อ",
+DlgLnkAnchorById	: "ไอดี",
+DlgLnkNoAnchors		: "(ยังไม่มีจุดเชื่อมโยงภายในหน้าเอกสารนี้)",
+DlgLnkEMail			: "อีเมล์ (E-Mail)",
+DlgLnkEMailSubject	: "หัวเรื่อง",
+DlgLnkEMailBody		: "ข้อความ",
+DlgLnkUpload		: "อัพโหลดไฟล์",
+DlgLnkBtnUpload		: "บันทึกไฟล์ไว้บนเซิร์ฟเวอร์",
+
+DlgLnkTarget		: "การเปิดหน้าลิงค์",
+DlgLnkTargetFrame	: "<เปิดในเฟรม>",
+DlgLnkTargetPopup	: "<เปิดหน้าจอเล็ก (Pop-up)>",
+DlgLnkTargetBlank	: "เปิดหน้าจอใหม่ (_blank)",
+DlgLnkTargetParent	: "เปิดในหน้าหลัก (_parent)",
+DlgLnkTargetSelf	: "เปิดในหน้าปัจจุบัน (_self)",
+DlgLnkTargetTop		: "เปิดในหน้าบนสุด (_top)",
+DlgLnkTargetFrameName	: "ชื่อทาร์เก็ตเฟรม",
+DlgLnkPopWinName	: "ระบุชื่อหน้าจอเล็ก (Pop-up)",
+DlgLnkPopWinFeat	: "คุณสมบัติของหน้าจอเล็ก (Pop-up)",
+DlgLnkPopResize		: "ปรับขนาดหน้าจอ",
+DlgLnkPopLocation	: "แสดงที่อยู่ของไฟล์",
+DlgLnkPopMenu		: "แสดงแถบเมนู",
+DlgLnkPopScroll		: "แสดงแถบเลื่อน",
+DlgLnkPopStatus		: "แสดงแถบสถานะ",
+DlgLnkPopToolbar	: "แสดงแถบเครื่องมือ",
+DlgLnkPopFullScrn	: "แสดงเต็มหน้าจอ (IE5.5++ เท่านั้น)",
+DlgLnkPopDependent	: "แสดงเต็มหน้าจอ (Netscape)",
+DlgLnkPopWidth		: "กว้าง",
+DlgLnkPopHeight		: "สูง",
+DlgLnkPopLeft		: "พิกัดซ้าย (Left Position)",
+DlgLnkPopTop		: "พิกัดบน (Top Position)",
+
+DlnLnkMsgNoUrl		: "กรุณาระบุที่อยู่อ้างอิงออนไลน์ (URL)",
+DlnLnkMsgNoEMail	: "กรุณาระบุอีเมล์ (E-mail)",
+DlnLnkMsgNoAnchor	: "กรุณาระบุจุดเชื่อมโยง (Anchor)",
+DlnLnkMsgInvPopName	: "ชื่อของหน้าต่างป๊อบอัพ จะต้องขึ้นต้นด้วยตัวอักษรเท่านั้น และต้องไม่มีช่องว่างในชื่อ",
+
+// Color Dialog
+DlgColorTitle		: "เลือกสี",
+DlgColorBtnClear	: "ล้างค่ารหัสสี",
+DlgColorHighlight	: "ตัวอย่างสี",
+DlgColorSelected	: "สีที่เลือก",
+
+// Smiley Dialog
+DlgSmileyTitle		: "แทรกสัญลักษณ์สื่ออารมณ์",
+
+// Special Character Dialog
+DlgSpecialCharTitle	: "แทรกตัวอักษรพิเศษ",
+
+// Table Dialog
+DlgTableTitle		: "คุณสมบัติของ ตาราง",
+DlgTableRows		: "แถว",
+DlgTableColumns		: "สดมน์",
+DlgTableBorder		: "ขนาดเส้นขอบ",
+DlgTableAlign		: "การจัดตำแหน่ง",
+DlgTableAlignNotSet	: "<ไม่ระบุ>",
+DlgTableAlignLeft	: "ชิดซ้าย",
+DlgTableAlignCenter	: "กึ่งกลาง",
+DlgTableAlignRight	: "ชิดขวา",
+DlgTableWidth		: "กว้าง",
+DlgTableWidthPx		: "จุดสี",
+DlgTableWidthPc		: "เปอร์เซ็น",
+DlgTableHeight		: "สูง",
+DlgTableCellSpace	: "ระยะแนวนอนน",
+DlgTableCellPad		: "ระยะแนวตั้ง",
+DlgTableCaption		: "หัวเรื่องของตาราง",
+DlgTableSummary		: "สรุปความ",
+
+// Table Cell Dialog
+DlgCellTitle		: "คุณสมบัติของ ช่อง",
+DlgCellWidth		: "กว้าง",
+DlgCellWidthPx		: "จุดสี",
+DlgCellWidthPc		: "เปอร์เซ็น",
+DlgCellHeight		: "สูง",
+DlgCellWordWrap		: "ตัดบรรทัดอัตโนมัติ",
+DlgCellWordWrapNotSet	: "<ไม่ระบุ>",
+DlgCellWordWrapYes	: "ใ่ช่",
+DlgCellWordWrapNo	: "ไม่",
+DlgCellHorAlign		: "การจัดวางแนวนอน",
+DlgCellHorAlignNotSet	: "<ไม่ระบุ>",
+DlgCellHorAlignLeft	: "ชิดซ้าย",
+DlgCellHorAlignCenter	: "กึ่งกลาง",
+DlgCellHorAlignRight: "ชิดขวา",
+DlgCellVerAlign		: "การจัดวางแนวตั้ง",
+DlgCellVerAlignNotSet	: "<ไม่ระบุ>",
+DlgCellVerAlignTop	: "บนสุด",
+DlgCellVerAlignMiddle	: "กึ่งกลาง",
+DlgCellVerAlignBottom	: "ล่างสุด",
+DlgCellVerAlignBaseline	: "อิงบรรทัด",
+DlgCellRowSpan		: "จำนวนแถวที่คร่อมกัน",
+DlgCellCollSpan		: "จำนวนสดมน์ที่คร่อมกัน",
+DlgCellBackColor	: "สีพื้นหลัง",
+DlgCellBorderColor	: "สีเส้นขอบ",
+DlgCellBtnSelect	: "เลือก..",
+
+// Find and Replace Dialog
+DlgFindAndReplaceTitle	: "Find and Replace",	//MISSING
+
+// Find Dialog
+DlgFindTitle		: "ค้นหา",
+DlgFindFindBtn		: "ค้นหา",
+DlgFindNotFoundMsg	: "ไม่พบคำที่ค้นหา.",
+
+// Replace Dialog
+DlgReplaceTitle			: "ค้นหาและแทนที่",
+DlgReplaceFindLbl		: "ค้นหาคำว่า:",
+DlgReplaceReplaceLbl	: "แทนที่ด้วย:",
+DlgReplaceCaseChk		: "ตัวโหญ่-เล็ก ต้องตรงกัน",
+DlgReplaceReplaceBtn	: "แทนที่",
+DlgReplaceReplAllBtn	: "แทนที่ทั้งหมดที่พบ",
+DlgReplaceWordChk		: "ต้องตรงกันทุกคำ",
+
+// Paste Operations / Dialog
+PasteErrorCut	: "ไม่สามารถตัดข้อความที่เลือกไว้ได้เนื่องจากการกำหนดค่าระดับความปลอดภัย. กรุณาใช้ปุ่มลัดเพื่อวางข้อความแทน (กดปุ่ม Ctrl และตัว X พร้อมกัน).",
+PasteErrorCopy	: "ไม่สามารถสำเนาข้อความที่เลือกไว้ได้เนื่องจากการกำหนดค่าระดับความปลอดภัย. กรุณาใช้ปุ่มลัดเพื่อวางข้อความแทน (กดปุ่ม Ctrl และตัว C พร้อมกัน).",
+
+PasteAsText		: "วางแบบตัวอักษรธรรมดา",
+PasteFromWord	: "วางแบบตัวอักษรจากโปรแกรมเวิร์ด",
+
+DlgPasteMsg2	: "กรุณาใช้คีย์บอร์ดเท่านั้น โดยกดปุ๋ม (<strong>Ctrl และ V</strong>)พร้อมๆกัน และกด <strong>OK</strong>.",
+DlgPasteSec		: "Because of your browser security settings, the editor is not able to access your clipboard data directly. You are required to paste it again in this window.",	//MISSING
+DlgPasteIgnoreFont		: "ไม่สนใจ Font Face definitions",
+DlgPasteRemoveStyles	: "ลบ Styles definitions",
+
+// Color Picker
+ColorAutomatic	: "สีอัตโนมัติ",
+ColorMoreColors	: "เลือกสีอื่นๆ...",
+
+// Document Properties
+DocProps		: "คุณสมบัติของเอกสาร",
+
+// Anchor Dialog
+DlgAnchorTitle		: "คุณสมบัติของ Anchor",
+DlgAnchorName		: "ชื่อ Anchor",
+DlgAnchorErrorName	: "กรุณาระบุชื่อของ Anchor",
+
+// Speller Pages Dialog
+DlgSpellNotInDic		: "ไม่พบในดิกชันนารี",
+DlgSpellChangeTo		: "แก้ไขเป็น",
+DlgSpellBtnIgnore		: "ยกเว้น",
+DlgSpellBtnIgnoreAll	: "ยกเว้นทั้งหมด",
+DlgSpellBtnReplace		: "แทนที่",
+DlgSpellBtnReplaceAll	: "แทนที่ทั้งหมด",
+DlgSpellBtnUndo			: "ยกเลิก",
+DlgSpellNoSuggestions	: "- ไม่มีคำแนะนำใดๆ -",
+DlgSpellProgress		: "กำลังตรวจสอบคำสะกด...",
+DlgSpellNoMispell		: "ตรวจสอบคำสะกดเสร็จสิ้น: ไม่พบคำสะกดผิด",
+DlgSpellNoChanges		: "ตรวจสอบคำสะกดเสร็จสิ้น: ไม่มีการแก้คำใดๆ",
+DlgSpellOneChange		: "ตรวจสอบคำสะกดเสร็จสิ้น: แก้ไข1คำ",
+DlgSpellManyChanges		: "ตรวจสอบคำสะกดเสร็จสิ้น:: แก้ไข %1 คำ",
+
+IeSpellDownload			: "ไม่ได้ติดตั้งระบบตรวจสอบคำสะกด. ต้องการติดตั้งไหมครับ?",
+
+// Button Dialog
+DlgButtonText		: "ข้อความ (ค่าตัวแปร)",
+DlgButtonType		: "ข้อความ",
+DlgButtonTypeBtn	: "Button",
+DlgButtonTypeSbm	: "Submit",
+DlgButtonTypeRst	: "Reset",
+
+// Checkbox and Radio Button Dialogs
+DlgCheckboxName		: "ชื่อ",
+DlgCheckboxValue	: "ค่าตัวแปร",
+DlgCheckboxSelected	: "เลือกเป็นค่าเริ่มต้น",
+
+// Form Dialog
+DlgFormName		: "ชื่อ",
+DlgFormAction	: "แอคชั่น",
+DlgFormMethod	: "เมธอด",
+
+// Select Field Dialog
+DlgSelectName		: "ชื่อ",
+DlgSelectValue		: "ค่าตัวแปร",
+DlgSelectSize		: "ขนาด",
+DlgSelectLines		: "บรรทัด",
+DlgSelectChkMulti	: "เลือกหลายค่าได้",
+DlgSelectOpAvail	: "รายการตัวเลือก",
+DlgSelectOpText		: "ข้อความ",
+DlgSelectOpValue	: "ค่าตัวแปร",
+DlgSelectBtnAdd		: "เพิ่ม",
+DlgSelectBtnModify	: "แก้ไข",
+DlgSelectBtnUp		: "บน",
+DlgSelectBtnDown	: "ล่าง",
+DlgSelectBtnSetValue : "เลือกเป็นค่าเริ่มต้น",
+DlgSelectBtnDelete	: "ลบ",
+
+// Textarea Dialog
+DlgTextareaName	: "ชื่อ",
+DlgTextareaCols	: "สดมภ์",
+DlgTextareaRows	: "แถว",
+
+// Text Field Dialog
+DlgTextName			: "ชื่อ",
+DlgTextValue		: "ค่าตัวแปร",
+DlgTextCharWidth	: "ความกว้าง",
+DlgTextMaxChars		: "จำนวนตัวอักษรสูงสุด",
+DlgTextType			: "ชนิด",
+DlgTextTypeText		: "ข้อความ",
+DlgTextTypePass		: "รหัสผ่าน",
+
+// Hidden Field Dialog
+DlgHiddenName	: "ชื่อ",
+DlgHiddenValue	: "ค่าตัวแปร",
+
+// Bulleted List Dialog
+BulletedListProp	: "คุณสมบัติของ บูลเล็ตลิสต์",
+NumberedListProp	: "คุณสมบัติของ นัมเบอร์ลิสต์",
+DlgLstStart			: "Start",	//MISSING
+DlgLstType			: "ชนิด",
+DlgLstTypeCircle	: "รูปวงกลม",
+DlgLstTypeDisc		: "Disc",	//MISSING
+DlgLstTypeSquare	: "รูปสี่เหลี่ยม",
+DlgLstTypeNumbers	: "หมายเลข (1, 2, 3)",
+DlgLstTypeLCase		: "ตัวพิมพ์เล็ก (a, b, c)",
+DlgLstTypeUCase		: "ตัวพิมพ์ใหญ่ (A, B, C)",
+DlgLstTypeSRoman	: "เลขโรมันพิมพ์เล็ก (i, ii, iii)",
+DlgLstTypeLRoman	: "เลขโรมันพิมพ์ใหญ่ (I, II, III)",
+
+// Document Properties Dialog
+DlgDocGeneralTab	: "ลักษณะทั่วไปของเอกสาร",
+DlgDocBackTab		: "พื้นหลัง",
+DlgDocColorsTab		: "สีและระยะขอบ",
+DlgDocMetaTab		: "ข้อมูลสำหรับเสิร์ชเอนจิ้น",
+
+DlgDocPageTitle		: "ชื่อไตเติ้ล",
+DlgDocLangDir		: "การอ่านภาษา",
+DlgDocLangDirLTR	: "จากซ้ายไปขวา (LTR)",
+DlgDocLangDirRTL	: "จากขวาไปซ้าย (RTL)",
+DlgDocLangCode		: "รหัสภาษา",
+DlgDocCharSet		: "ชุดตัวอักษร",
+DlgDocCharSetCE		: "Central European",
+DlgDocCharSetCT		: "Chinese Traditional (Big5)",
+DlgDocCharSetCR		: "Cyrillic",
+DlgDocCharSetGR		: "Greek",
+DlgDocCharSetJP		: "Japanese",
+DlgDocCharSetKR		: "Korean",
+DlgDocCharSetTR		: "Turkish",
+DlgDocCharSetUN		: "Unicode (UTF-8)",
+DlgDocCharSetWE		: "Western European",
+DlgDocCharSetOther	: "ชุดตัวอักษรอื่นๆ",
+
+DlgDocDocType		: "ประเภทของเอกสาร",
+DlgDocDocTypeOther	: "ประเภทเอกสารอื่นๆ",
+DlgDocIncXHTML		: "รวมเอา  XHTML Declarations ไว้ด้วย",
+DlgDocBgColor		: "สีพื้นหลัง",
+DlgDocBgImage		: "ที่อยู่อ้างอิงออนไลน์ของรูปพื้นหลัง (Image URL)",
+DlgDocBgNoScroll	: "พื้นหลังแบบไม่มีแถบเลื่อน",
+DlgDocCText			: "ข้อความ",
+DlgDocCLink			: "ลิงค์",
+DlgDocCVisited		: "ลิงค์ที่เคยคลิ้กแล้ว Visited Link",
+DlgDocCActive		: "ลิงค์ที่กำลังคลิ้ก Active Link",
+DlgDocMargins		: "ระยะขอบของหน้าเอกสาร",
+DlgDocMaTop			: "ด้านบน",
+DlgDocMaLeft		: "ด้านซ้าย",
+DlgDocMaRight		: "ด้านขวา",
+DlgDocMaBottom		: "ด้านล่าง",
+DlgDocMeIndex		: "คำสำคัญอธิบายเอกสาร (คั่นคำด้วย คอมม่า)",
+DlgDocMeDescr		: "ประโยคอธิบายเกี่ยวกับเอกสาร",
+DlgDocMeAuthor		: "ผู้สร้างเอกสาร",
+DlgDocMeCopy		: "สงวนลิขสิทธิ์",
+DlgDocPreview		: "ตัวอย่างหน้าเอกสาร",
+
+// Templates Dialog
+Templates			: "เทมเพลต",
+DlgTemplatesTitle	: "เทมเพลตของส่วนเนื้อหาเว็บไซต์",
+DlgTemplatesSelMsg	: "กรุณาเลือก เทมเพลต เพื่อนำไปแก้ไขในอีดิตเตอร์<br />(เนื้อหาส่วนนี้จะหายไป):",
+DlgTemplatesLoading	: "กำลังโหลดรายการเทมเพลตทั้งหมด...",
+DlgTemplatesNoTpl	: "(ยังไม่มีการกำหนดเทมเพลต)",
+DlgTemplatesReplace	: "แทนที่เนื้อหาเว็บไซต์ที่เลือก",
+
+// About Dialog
+DlgAboutAboutTab	: "เกี่ยวกับโปรแกรม",
+DlgAboutBrowserInfoTab	: "โปรแกรมท่องเว็บที่ท่านใช้",
+DlgAboutLicenseTab	: "ลิขสิทธิ์",
+DlgAboutVersion		: "รุ่น",
+DlgAboutInfo		: "For further information go to"	//MISSING
+};


Property changes on: announcement/trunk/src/main/webapp/fckeditor/editor/lang/th.js
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/webapp/fckeditor/editor/lang/tr.js
===================================================================
--- announcement/trunk/src/main/webapp/fckeditor/editor/lang/tr.js	                        (rev 0)
+++ announcement/trunk/src/main/webapp/fckeditor/editor/lang/tr.js	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,515 @@
+/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2008 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * Turkish language file.
+ */
+
+var FCKLang =
+{
+// Language direction : "ltr" (left to right) or "rtl" (right to left).
+Dir					: "ltr",
+
+ToolbarCollapse		: "Araç Çubuğunu Kapat",
+ToolbarExpand		: "Araç Çubuğunu Aç",
+
+// Toolbar Items and Context Menu
+Save				: "Kaydet",
+NewPage				: "Yeni Sayfa",
+Preview				: "Ön İzleme",
+Cut					: "Kes",
+Copy				: "Kopyala",
+Paste				: "Yapıştır",
+PasteText			: "Düzyazı Olarak Yapıştır",
+PasteWord			: "Word'den Yapıştır",
+Print				: "Yazdır",
+SelectAll			: "Tümünü Seç",
+RemoveFormat		: "Biçimi Kaldır",
+InsertLinkLbl		: "Köprü",
+InsertLink			: "Köprü Ekle/Düzenle",
+RemoveLink			: "Köprü Kaldır",
+Anchor				: "Çapa Ekle/Düzenle",
+AnchorDelete		: "Remove Anchor",	//MISSING
+InsertImageLbl		: "Resim",
+InsertImage			: "Resim Ekle/Düzenle",
+InsertFlashLbl		: "Flash",
+InsertFlash			: "Flash Ekle/Düzenle",
+InsertTableLbl		: "Tablo",
+InsertTable			: "Tablo Ekle/Düzenle",
+InsertLineLbl		: "Satır",
+InsertLine			: "Yatay Satır Ekle",
+InsertSpecialCharLbl: "Özel Karakter",
+InsertSpecialChar	: "Özel Karakter Ekle",
+InsertSmileyLbl		: "İfade",
+InsertSmiley		: "İfade Ekle",
+About				: "FCKeditor Hakkında",
+Bold				: "Kalın",
+Italic				: "İtalik",
+Underline			: "Altı Çizgili",
+StrikeThrough		: "Üstü Çizgili",
+Subscript			: "Alt Simge",
+Superscript			: "Üst Simge",
+LeftJustify			: "Sola Dayalı",
+CenterJustify		: "Ortalanmış",
+RightJustify		: "Sağa Dayalı",
+BlockJustify		: "İki Kenara Yaslanmış",
+DecreaseIndent		: "Sekme Azalt",
+IncreaseIndent		: "Sekme Arttır",
+Blockquote			: "Blockquote",	//MISSING
+Undo				: "Geri Al",
+Redo				: "Tekrarla",
+NumberedListLbl		: "Numaralı Liste",
+NumberedList		: "Numaralı Liste Ekle/Kaldır",
+BulletedListLbl		: "Simgeli Liste",
+BulletedList		: "Simgeli Liste Ekle/Kaldır",
+ShowTableBorders	: "Tablo Kenarlarını Göster",
+ShowDetails			: "Detayları Göster",
+Style				: "Biçem",
+FontFormat			: "Biçim",
+Font				: "Yazı Türü",
+FontSize			: "Boyut",
+TextColor			: "Yazı Rengi",
+BGColor				: "Arka Renk",
+Source				: "Kaynak",
+Find				: "Bul",
+Replace				: "Değiştir",
+SpellCheck			: "Yazım Denetimi",
+UniversalKeyboard	: "Evrensel Klavye",
+PageBreakLbl		: "Sayfa sonu",
+PageBreak			: "Sayfa Sonu Ekle",
+
+Form			: "Form",
+Checkbox		: "Onay Kutusu",
+RadioButton		: "Seçenek Düğmesi",
+TextField		: "Metin Girişi",
+Textarea		: "Çok Satırlı Metin",
+HiddenField		: "Gizli Veri",
+Button			: "Düğme",
+SelectionField	: "Seçim Menüsü",
+ImageButton		: "Resimli Düğme",
+
+FitWindow		: "Düzenleyici boyutunu büyüt",
+ShowBlocks		: "Show Blocks",	//MISSING
+
+// Context Menu
+EditLink			: "Köprü Düzenle",
+CellCM				: "Hücre",
+RowCM				: "Satır",
+ColumnCM			: "Sütun",
+InsertRowAfter		: "Insert Row After",	//MISSING
+InsertRowBefore		: "Insert Row Before",	//MISSING
+DeleteRows			: "Satır Sil",
+InsertColumnAfter	: "Insert Column After",	//MISSING
+InsertColumnBefore	: "Insert Column Before",	//MISSING
+DeleteColumns		: "Sütun Sil",
+InsertCellAfter		: "Insert Cell After",	//MISSING
+InsertCellBefore	: "Insert Cell Before",	//MISSING
+DeleteCells			: "Hücre Sil",
+MergeCells			: "Hücreleri Birleştir",
+MergeRight			: "Merge Right",	//MISSING
+MergeDown			: "Merge Down",	//MISSING
+HorizontalSplitCell	: "Split Cell Horizontally",	//MISSING
+VerticalSplitCell	: "Split Cell Vertically",	//MISSING
+TableDelete			: "Tabloyu Sil",
+CellProperties		: "Hücre Özellikleri",
+TableProperties		: "Tablo Özellikleri",
+ImageProperties		: "Resim Özellikleri",
+FlashProperties		: "Flash Özellikleri",
+
+AnchorProp			: "Çapa Özellikleri",
+ButtonProp			: "Düğme Özellikleri",
+CheckboxProp		: "Onay Kutusu Özellikleri",
+HiddenFieldProp		: "Gizli Veri Özellikleri",
+RadioButtonProp		: "Seçenek Düğmesi Özellikleri",
+ImageButtonProp		: "Resimli Düğme Özellikleri",
+TextFieldProp		: "Metin Girişi Özellikleri",
+SelectionFieldProp	: "Seçim Menüsü Özellikleri",
+TextareaProp		: "Çok Satırlı Metin Özellikleri",
+FormProp			: "Form Özellikleri",
+
+FontFormats			: "Normal;Biçimli;Adres;Başlık 1;Başlık 2;Başlık 3;Başlık 4;Başlık 5;Başlık 6;Paragraf (DIV)",
+
+// Alerts and Messages
+ProcessingXHTML		: "XHTML işleniyor. Lütfen bekleyin...",
+Done				: "Bitti",
+PasteWordConfirm	: "Yapıştırdığınız yazı Word'den gelmişe benziyor. Yapıştırmadan önce gereksiz eklentileri silmek ister misiniz?",
+NotCompatiblePaste	: "Bu komut Internet Explorer 5.5 ve ileriki sürümleri için mevcuttur. Temizlenmeden yapıştırılmasını ister misiniz ?",
+UnknownToolbarItem	: "Bilinmeyen araç çubugu öğesi \"%1\"",
+UnknownCommand		: "Bilinmeyen komut \"%1\"",
+NotImplemented		: "Komut uyarlanamadı",
+UnknownToolbarSet	: "\"%1\" araç çubuğu öğesi mevcut değil",
+NoActiveX			: "Kullandığınız tarayıcının güvenlik ayarları bazı özelliklerin kullanılmasını engelliyor. Bu özelliklerin çalışması için \"Run ActiveX controls and plug-ins (Activex ve eklentileri çalıştır)\" seçeneğinin aktif yapılması gerekiyor. Kullanılamayan eklentiler ve hatalar konusunda daha fazla bilgi sahibi olun.",
+BrowseServerBlocked : "Kaynak tarayıcısı açılamadı. Tüm \"popup blocker\" programlarının devre dışı olduğundan emin olun. (Yahoo toolbar, Msn toolbar, Google toolbar gibi)",
+DialogBlocked		: "Diyalog açmak mümkün olmadı. Tüm \"Popup Blocker\" programlarının devre dışı olduğundan emin olun.",
+
+// Dialogs
+DlgBtnOK			: "Tamam",
+DlgBtnCancel		: "İptal",
+DlgBtnClose			: "Kapat",
+DlgBtnBrowseServer	: "Sunucuyu Gez",
+DlgAdvancedTag		: "Gelişmiş",
+DlgOpOther			: "<Diğer>",
+DlgInfoTab			: "Bilgi",
+DlgAlertUrl			: "Lütfen URL girin",
+
+// General Dialogs Labels
+DlgGenNotSet		: "<tanımlanmamış>",
+DlgGenId			: "Kimlik",
+DlgGenLangDir		: "Dil Yönü",
+DlgGenLangDirLtr	: "Soldan Sağa (LTR)",
+DlgGenLangDirRtl	: "Sağdan Sola (RTL)",
+DlgGenLangCode		: "Dil Kodlaması",
+DlgGenAccessKey		: "Erişim Tuşu",
+DlgGenName			: "Ad",
+DlgGenTabIndex		: "Sekme İndeksi",
+DlgGenLongDescr		: "Uzun Tanımlı URL",
+DlgGenClass			: "Biçem Sayfası Sınıfları",
+DlgGenTitle			: "Danışma Başlığı",
+DlgGenContType		: "Danışma İçerik Türü",
+DlgGenLinkCharset	: "Bağlı Kaynak Karakter Gurubu",
+DlgGenStyle			: "Biçem",
+
+// Image Dialog
+DlgImgTitle			: "Resim Özellikleri",
+DlgImgInfoTab		: "Resim Bilgisi",
+DlgImgBtnUpload		: "Sunucuya Yolla",
+DlgImgURL			: "URL",
+DlgImgUpload		: "Karşıya Yükle",
+DlgImgAlt			: "Alternatif Yazı",
+DlgImgWidth			: "Genişlik",
+DlgImgHeight		: "Yükseklik",
+DlgImgLockRatio		: "Oranı Kilitle",
+DlgBtnResetSize		: "Boyutu Başa Döndür",
+DlgImgBorder		: "Kenar",
+DlgImgHSpace		: "Yatay Boşluk",
+DlgImgVSpace		: "Dikey Boşluk",
+DlgImgAlign			: "Hizalama",
+DlgImgAlignLeft		: "Sol",
+DlgImgAlignAbsBottom: "Tam Altı",
+DlgImgAlignAbsMiddle: "Tam Ortası",
+DlgImgAlignBaseline	: "Taban Çizgisi",
+DlgImgAlignBottom	: "Alt",
+DlgImgAlignMiddle	: "Orta",
+DlgImgAlignRight	: "Sağ",
+DlgImgAlignTextTop	: "Yazı Tepeye",
+DlgImgAlignTop		: "Tepe",
+DlgImgPreview		: "Ön İzleme",
+DlgImgAlertUrl		: "Lütfen resmin URL'sini yazınız",
+DlgImgLinkTab		: "Köprü",
+
+// Flash Dialog
+DlgFlashTitle		: "Flash Özellikleri",
+DlgFlashChkPlay		: "Otomatik Oynat",
+DlgFlashChkLoop		: "Döngü",
+DlgFlashChkMenu		: "Flash Menüsünü Kullan",
+DlgFlashScale		: "Boyutlandır",
+DlgFlashScaleAll	: "Hepsini Göster",
+DlgFlashScaleNoBorder	: "Kenar Yok",
+DlgFlashScaleFit	: "Tam Sığdır",
+
+// Link Dialog
+DlgLnkWindowTitle	: "Köprü",
+DlgLnkInfoTab		: "Köprü Bilgisi",
+DlgLnkTargetTab		: "Hedef",
+
+DlgLnkType			: "Köprü Türü",
+DlgLnkTypeURL		: "URL",
+DlgLnkTypeAnchor	: "Bu sayfada çapa",
+DlgLnkTypeEMail		: "E-Posta",
+DlgLnkProto			: "Protokol",
+DlgLnkProtoOther	: "<diğer>",
+DlgLnkURL			: "URL",
+DlgLnkAnchorSel		: "Çapa Seç",
+DlgLnkAnchorByName	: "Çapa Adı ile",
+DlgLnkAnchorById	: "Eleman Kimlik Numarası ile",
+DlgLnkNoAnchors		: "(Bu belgede hiç çapa yok)",
+DlgLnkEMail			: "E-Posta Adresi",
+DlgLnkEMailSubject	: "İleti Konusu",
+DlgLnkEMailBody		: "İleti Gövdesi",
+DlgLnkUpload		: "Karşıya Yükle",
+DlgLnkBtnUpload		: "Sunucuya Gönder",
+
+DlgLnkTarget		: "Hedef",
+DlgLnkTargetFrame	: "<çerçeve>",
+DlgLnkTargetPopup	: "<yeni açılan pencere>",
+DlgLnkTargetBlank	: "Yeni Pencere(_blank)",
+DlgLnkTargetParent	: "Anne Pencere (_parent)",
+DlgLnkTargetSelf	: "Kendi Penceresi (_self)",
+DlgLnkTargetTop		: "En Üst Pencere (_top)",
+DlgLnkTargetFrameName	: "Hedef Çerçeve Adı",
+DlgLnkPopWinName	: "Yeni Açılan Pencere Adı",
+DlgLnkPopWinFeat	: "Yeni Açılan Pencere Özellikleri",
+DlgLnkPopResize		: "Boyutlandırılabilir",
+DlgLnkPopLocation	: "Yer Çubuğu",
+DlgLnkPopMenu		: "Menü Çubuğu",
+DlgLnkPopScroll		: "Kaydırma Çubukları",
+DlgLnkPopStatus		: "Durum Çubuğu",
+DlgLnkPopToolbar	: "Araç Çubuğu",
+DlgLnkPopFullScrn	: "Tam Ekran (IE)",
+DlgLnkPopDependent	: "Bağımlı (Netscape)",
+DlgLnkPopWidth		: "Genişlik",
+DlgLnkPopHeight		: "Yükseklik",
+DlgLnkPopLeft		: "Sola Göre Konum",
+DlgLnkPopTop		: "Yukarıya Göre Konum",
+
+DlnLnkMsgNoUrl		: "Lütfen köprü URL'sini yazın",
+DlnLnkMsgNoEMail	: "Lütfen E-posta adresini yazın",
+DlnLnkMsgNoAnchor	: "Lütfen bir çapa seçin",
+DlnLnkMsgInvPopName	: "Açılır pencere adı abecesel bir karakterle başlamalı ve boşluk içermemelidir",
+
+// Color Dialog
+DlgColorTitle		: "Renk Seç",
+DlgColorBtnClear	: "Temizle",
+DlgColorHighlight	: "Vurgula",
+DlgColorSelected	: "Seçilmiş",
+
+// Smiley Dialog
+DlgSmileyTitle		: "İfade Ekle",
+
+// Special Character Dialog
+DlgSpecialCharTitle	: "Özel Karakter Seç",
+
+// Table Dialog
+DlgTableTitle		: "Tablo Özellikleri",
+DlgTableRows		: "Satırlar",
+DlgTableColumns		: "Sütunlar",
+DlgTableBorder		: "Kenar Kalınlığı",
+DlgTableAlign		: "Hizalama",
+DlgTableAlignNotSet	: "<Tanımlanmamış>",
+DlgTableAlignLeft	: "Sol",
+DlgTableAlignCenter	: "Merkez",
+DlgTableAlignRight	: "Sağ",
+DlgTableWidth		: "Genişlik",
+DlgTableWidthPx		: "piksel",
+DlgTableWidthPc		: "yüzde",
+DlgTableHeight		: "Yükseklik",
+DlgTableCellSpace	: "Izgara kalınlığı",
+DlgTableCellPad		: "Izgara yazı arası",
+DlgTableCaption		: "Başlık",
+DlgTableSummary		: "Özet",
+
+// Table Cell Dialog
+DlgCellTitle		: "Hücre Özellikleri",
+DlgCellWidth		: "Genişlik",
+DlgCellWidthPx		: "piksel",
+DlgCellWidthPc		: "yüzde",
+DlgCellHeight		: "Yükseklik",
+DlgCellWordWrap		: "Sözcük Kaydır",
+DlgCellWordWrapNotSet	: "<Tanımlanmamış>",
+DlgCellWordWrapYes	: "Evet",
+DlgCellWordWrapNo	: "Hayır",
+DlgCellHorAlign		: "Yatay Hizalama",
+DlgCellHorAlignNotSet	: "<Tanımlanmamış>",
+DlgCellHorAlignLeft	: "Sol",
+DlgCellHorAlignCenter	: "Merkez",
+DlgCellHorAlignRight: "Sağ",
+DlgCellVerAlign		: "Dikey Hizalama",
+DlgCellVerAlignNotSet	: "<Tanımlanmamış>",
+DlgCellVerAlignTop	: "Tepe",
+DlgCellVerAlignMiddle	: "Orta",
+DlgCellVerAlignBottom	: "Alt",
+DlgCellVerAlignBaseline	: "Taban Çizgisi",
+DlgCellRowSpan		: "Satır Kapla",
+DlgCellCollSpan		: "Sütun Kapla",
+DlgCellBackColor	: "Arka Plan Rengi",
+DlgCellBorderColor	: "Kenar Rengi",
+DlgCellBtnSelect	: "Seç...",
+
+// Find and Replace Dialog
+DlgFindAndReplaceTitle	: "Find and Replace",	//MISSING
+
+// Find Dialog
+DlgFindTitle		: "Bul",
+DlgFindFindBtn		: "Bul",
+DlgFindNotFoundMsg	: "Belirtilen yazı bulunamadı.",
+
+// Replace Dialog
+DlgReplaceTitle			: "Değiştir",
+DlgReplaceFindLbl		: "Aranan:",
+DlgReplaceReplaceLbl	: "Bununla değiştir:",
+DlgReplaceCaseChk		: "Büyük/küçük harf duyarlı",
+DlgReplaceReplaceBtn	: "Değiştir",
+DlgReplaceReplAllBtn	: "Tümünü Değiştir",
+DlgReplaceWordChk		: "Kelimenin tamamı uysun",
+
+// Paste Operations / Dialog
+PasteErrorCut	: "Gezgin yazılımınızın güvenlik ayarları düzenleyicinin otomatik kesme işlemine izin vermiyor. İşlem için (Ctrl+X) tuşlarını kullanın.",
+PasteErrorCopy	: "Gezgin yazılımınızın güvenlik ayarları düzenleyicinin otomatik kopyalama işlemine izin vermiyor. İşlem için (Ctrl+C) tuşlarını kullanın.",
+
+PasteAsText		: "Düz Metin Olarak Yapıştır",
+PasteFromWord	: "Word'den yapıştır",
+
+DlgPasteMsg2	: "Lütfen aşağıdaki kutunun içine yapıştırın. (<STRONG>Ctrl+V</STRONG>) ve <STRONG>Tamam</STRONG> butonunu tıklayın.",
+DlgPasteSec		: "Because of your browser security settings, the editor is not able to access your clipboard data directly. You are required to paste it again in this window.",	//MISSING
+DlgPasteIgnoreFont		: "Yazı Tipi tanımlarını yoksay",
+DlgPasteRemoveStyles	: "Biçem Tanımlarını çıkar",
+
+// Color Picker
+ColorAutomatic	: "Otomatik",
+ColorMoreColors	: "Diğer renkler...",
+
+// Document Properties
+DocProps		: "Belge Özellikleri",
+
+// Anchor Dialog
+DlgAnchorTitle		: "Çapa Özellikleri",
+DlgAnchorName		: "Çapa Adı",
+DlgAnchorErrorName	: "Lütfen çapa için ad giriniz",
+
+// Speller Pages Dialog
+DlgSpellNotInDic		: "Sözlükte Yok",
+DlgSpellChangeTo		: "Şuna değiştir:",
+DlgSpellBtnIgnore		: "Yoksay",
+DlgSpellBtnIgnoreAll	: "Tümünü Yoksay",
+DlgSpellBtnReplace		: "Değiştir",
+DlgSpellBtnReplaceAll	: "Tümünü Değiştir",
+DlgSpellBtnUndo			: "Geri Al",
+DlgSpellNoSuggestions	: "- Öneri Yok -",
+DlgSpellProgress		: "Yazım denetimi işlemde...",
+DlgSpellNoMispell		: "Yazım denetimi tamamlandı: Yanlış yazıma rastlanmadı",
+DlgSpellNoChanges		: "Yazım denetimi tamamlandı: Hiçbir kelime değiştirilmedi",
+DlgSpellOneChange		: "Yazım denetimi tamamlandı: Bir kelime değiştirildi",
+DlgSpellManyChanges		: "Yazım denetimi tamamlandı: %1 kelime değiştirildi",
+
+IeSpellDownload			: "Yazım denetimi yüklenmemiş. Şimdi yüklemek ister misiniz?",
+
+// Button Dialog
+DlgButtonText		: "Metin (Değer)",
+DlgButtonType		: "Tip",
+DlgButtonTypeBtn	: "Düğme",
+DlgButtonTypeSbm	: "Gönder",
+DlgButtonTypeRst	: "Sıfırla",
+
+// Checkbox and Radio Button Dialogs
+DlgCheckboxName		: "Ad",
+DlgCheckboxValue	: "Değer",
+DlgCheckboxSelected	: "Seçili",
+
+// Form Dialog
+DlgFormName		: "Ad",
+DlgFormAction	: "İşlem",
+DlgFormMethod	: "Yöntem",
+
+// Select Field Dialog
+DlgSelectName		: "Ad",
+DlgSelectValue		: "Değer",
+DlgSelectSize		: "Boyut",
+DlgSelectLines		: "satır",
+DlgSelectChkMulti	: "Çoklu seçime izin ver",
+DlgSelectOpAvail	: "Mevcut Seçenekler",
+DlgSelectOpText		: "Metin",
+DlgSelectOpValue	: "Değer",
+DlgSelectBtnAdd		: "Ekle",
+DlgSelectBtnModify	: "Düzenle",
+DlgSelectBtnUp		: "Yukarı",
+DlgSelectBtnDown	: "Aşağı",
+DlgSelectBtnSetValue : "Seçili değer olarak ata",
+DlgSelectBtnDelete	: "Sil",
+
+// Textarea Dialog
+DlgTextareaName	: "Ad",
+DlgTextareaCols	: "Sütunlar",
+DlgTextareaRows	: "Satırlar",
+
+// Text Field Dialog
+DlgTextName			: "Ad",
+DlgTextValue		: "Değer",
+DlgTextCharWidth	: "Karakter Genişliği",
+DlgTextMaxChars		: "En Fazla Karakter",
+DlgTextType			: "Tür",
+DlgTextTypeText		: "Metin",
+DlgTextTypePass		: "Parola",
+
+// Hidden Field Dialog
+DlgHiddenName	: "Ad",
+DlgHiddenValue	: "Değer",
+
+// Bulleted List Dialog
+BulletedListProp	: "Simgeli Liste Özellikleri",
+NumberedListProp	: "Numaralı Liste Özellikleri",
+DlgLstStart			: "Başlangıç",
+DlgLstType			: "Tip",
+DlgLstTypeCircle	: "Çember",
+DlgLstTypeDisc		: "Disk",
+DlgLstTypeSquare	: "Kare",
+DlgLstTypeNumbers	: "Sayılar (1, 2, 3)",
+DlgLstTypeLCase		: "Küçük Harfler (a, b, c)",
+DlgLstTypeUCase		: "Büyük Harfler (A, B, C)",
+DlgLstTypeSRoman	: "Küçük Romen Rakamları (i, ii, iii)",
+DlgLstTypeLRoman	: "Büyük Romen Rakamları (I, II, III)",
+
+// Document Properties Dialog
+DlgDocGeneralTab	: "Genel",
+DlgDocBackTab		: "Arka Plan",
+DlgDocColorsTab		: "Renkler ve Kenar Boşlukları",
+DlgDocMetaTab		: "Tanım Bilgisi (Meta)",
+
+DlgDocPageTitle		: "Sayfa Başlığı",
+DlgDocLangDir		: "Dil Yönü",
+DlgDocLangDirLTR	: "Soldan Sağa (LTR)",
+DlgDocLangDirRTL	: "Sağdan Sola (RTL)",
+DlgDocLangCode		: "Dil Kodu",
+DlgDocCharSet		: "Karakter Kümesi Kodlaması",
+DlgDocCharSetCE		: "Orta Avrupa",
+DlgDocCharSetCT		: "Geleneksel Çince (Big5)",
+DlgDocCharSetCR		: "Kiril",
+DlgDocCharSetGR		: "Yunanca",
+DlgDocCharSetJP		: "Japonca",
+DlgDocCharSetKR		: "Korece",
+DlgDocCharSetTR		: "Türkçe",
+DlgDocCharSetUN		: "Unicode (UTF-8)",
+DlgDocCharSetWE		: "Batı Avrupa",
+DlgDocCharSetOther	: "Diğer Karakter Kümesi Kodlaması",
+
+DlgDocDocType		: "Belge Türü Başlığı",
+DlgDocDocTypeOther	: "Diğer Belge Türü Başlığı",
+DlgDocIncXHTML		: "XHTML Bildirimlerini Dahil Et",
+DlgDocBgColor		: "Arka Plan Rengi",
+DlgDocBgImage		: "Arka Plan Resim URLsi",
+DlgDocBgNoScroll	: "Sabit Arka Plan",
+DlgDocCText			: "Metin",
+DlgDocCLink			: "Köprü",
+DlgDocCVisited		: "Ziyaret Edilmiş Köprü",
+DlgDocCActive		: "Etkin Köprü",
+DlgDocMargins		: "Kenar Boşlukları",
+DlgDocMaTop			: "Tepe",
+DlgDocMaLeft		: "Sol",
+DlgDocMaRight		: "Sağ",
+DlgDocMaBottom		: "Alt",
+DlgDocMeIndex		: "Belge Dizinleme Anahtar Kelimeleri (virgülle ayrılmış)",
+DlgDocMeDescr		: "Belge Tanımı",
+DlgDocMeAuthor		: "Yazar",
+DlgDocMeCopy		: "Telif",
+DlgDocPreview		: "Ön İzleme",
+
+// Templates Dialog
+Templates			: "Şablonlar",
+DlgTemplatesTitle	: "İçerik Şablonları",
+DlgTemplatesSelMsg	: "Düzenleyicide açmak için lütfen bir şablon seçin.<br>(hali hazırdaki içerik kaybolacaktır.):",
+DlgTemplatesLoading	: "Şablon listesi yüklenmekte. Lütfen bekleyiniz...",
+DlgTemplatesNoTpl	: "(Belirli bir şablon seçilmedi)",
+DlgTemplatesReplace	: "Mevcut içerik ile değiştir",
+
+// About Dialog
+DlgAboutAboutTab	: "Hakkında",
+DlgAboutBrowserInfoTab	: "Gezgin Bilgisi",
+DlgAboutLicenseTab	: "Lisans",
+DlgAboutVersion		: "sürüm",
+DlgAboutInfo		: "Daha fazla bilgi için:"
+};


Property changes on: announcement/trunk/src/main/webapp/fckeditor/editor/lang/tr.js
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/webapp/fckeditor/editor/lang/uk.js
===================================================================
--- announcement/trunk/src/main/webapp/fckeditor/editor/lang/uk.js	                        (rev 0)
+++ announcement/trunk/src/main/webapp/fckeditor/editor/lang/uk.js	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,515 @@
+/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2008 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * Ukrainian language file.
+ */
+
+var FCKLang =
+{
+// Language direction : "ltr" (left to right) or "rtl" (right to left).
+Dir					: "ltr",
+
+ToolbarCollapse		: "Згорнути панель інструментів",
+ToolbarExpand		: "Розгорнути панель інструментів",
+
+// Toolbar Items and Context Menu
+Save				: "Зберегти",
+NewPage				: "Нова сторінка",
+Preview				: "Попередній перегляд",
+Cut					: "Вирізати",
+Copy				: "Копіювати",
+Paste				: "Вставити",
+PasteText			: "Вставити тільки текст",
+PasteWord			: "Вставити з Word",
+Print				: "Друк",
+SelectAll			: "Виділити все",
+RemoveFormat		: "Прибрати форматування",
+InsertLinkLbl		: "Посилання",
+InsertLink			: "Вставити/Редагувати посилання",
+RemoveLink			: "Знищити посилання",
+Anchor				: "Вставити/Редагувати якір",
+AnchorDelete		: "Remove Anchor",	//MISSING
+InsertImageLbl		: "Зображення",
+InsertImage			: "Вставити/Редагувати зображення",
+InsertFlashLbl		: "Flash",
+InsertFlash			: "Вставити/Редагувати Flash",
+InsertTableLbl		: "Таблиця",
+InsertTable			: "Вставити/Редагувати таблицю",
+InsertLineLbl		: "Лінія",
+InsertLine			: "Вставити горизонтальну лінію",
+InsertSpecialCharLbl: "Спеціальний символ",
+InsertSpecialChar	: "Вставити спеціальний символ",
+InsertSmileyLbl		: "Смайлик",
+InsertSmiley		: "Вставити смайлик",
+About				: "Про FCKeditor",
+Bold				: "Жирний",
+Italic				: "Курсив",
+Underline			: "Підкреслений",
+StrikeThrough		: "Закреслений",
+Subscript			: "Підрядковий індекс",
+Superscript			: "Надрядковий индекс",
+LeftJustify			: "По лівому краю",
+CenterJustify		: "По центру",
+RightJustify		: "По правому краю",
+BlockJustify		: "По ширині",
+DecreaseIndent		: "Зменшити відступ",
+IncreaseIndent		: "Збільшити відступ",
+Blockquote			: "Blockquote",	//MISSING
+Undo				: "Повернути",
+Redo				: "Повторити",
+NumberedListLbl		: "Нумерований список",
+NumberedList		: "Вставити/Видалити нумерований список",
+BulletedListLbl		: "Маркований список",
+BulletedList		: "Вставити/Видалити маркований список",
+ShowTableBorders	: "Показати бордюри таблиці",
+ShowDetails			: "Показати деталі",
+Style				: "Стиль",
+FontFormat			: "Форматування",
+Font				: "Шрифт",
+FontSize			: "Розмір",
+TextColor			: "Колір тексту",
+BGColor				: "Колір фону",
+Source				: "Джерело",
+Find				: "Пошук",
+Replace				: "Заміна",
+SpellCheck			: "Перевірити орфографію",
+UniversalKeyboard	: "Універсальна клавіатура",
+PageBreakLbl		: "Розривши сторінки",
+PageBreak			: "Вставити розривши сторінки",
+
+Form			: "Форма",
+Checkbox		: "Флагова кнопка",
+RadioButton		: "Кнопка вибору",
+TextField		: "Текстове поле",
+Textarea		: "Текстова область",
+HiddenField		: "Приховане поле",
+Button			: "Кнопка",
+SelectionField	: "Список",
+ImageButton		: "Кнопка із зображенням",
+
+FitWindow		: "Розвернути вікно редактора",
+ShowBlocks		: "Show Blocks",	//MISSING
+
+// Context Menu
+EditLink			: "Вставити посилання",
+CellCM				: "Осередок",
+RowCM				: "Рядок",
+ColumnCM			: "Колонка",
+InsertRowAfter		: "Insert Row After",	//MISSING
+InsertRowBefore		: "Insert Row Before",	//MISSING
+DeleteRows			: "Видалити строки",
+InsertColumnAfter	: "Insert Column After",	//MISSING
+InsertColumnBefore	: "Insert Column Before",	//MISSING
+DeleteColumns		: "Видалити колонки",
+InsertCellAfter		: "Insert Cell After",	//MISSING
+InsertCellBefore	: "Insert Cell Before",	//MISSING
+DeleteCells			: "Видалити комірки",
+MergeCells			: "Об'єднати комірки",
+MergeRight			: "Merge Right",	//MISSING
+MergeDown			: "Merge Down",	//MISSING
+HorizontalSplitCell	: "Split Cell Horizontally",	//MISSING
+VerticalSplitCell	: "Split Cell Vertically",	//MISSING
+TableDelete			: "Видалити таблицю",
+CellProperties		: "Властивості комірки",
+TableProperties		: "Властивості таблиці",
+ImageProperties		: "Властивості зображення",
+FlashProperties		: "Властивості Flash",
+
+AnchorProp			: "Властивості якоря",
+ButtonProp			: "Властивості кнопки",
+CheckboxProp		: "Властивості флагової кнопки",
+HiddenFieldProp		: "Властивості прихованого поля",
+RadioButtonProp		: "Властивості кнопки вибору",
+ImageButtonProp		: "Властивості кнопки із зображенням",
+TextFieldProp		: "Властивості текстового поля",
+SelectionFieldProp	: "Властивості списку",
+TextareaProp		: "Властивості текстової області",
+FormProp			: "Властивості форми",
+
+FontFormats			: "Нормальний;Форматований;Адреса;Заголовок 1;Заголовок 2;Заголовок 3;Заголовок 4;Заголовок 5;Заголовок 6;Нормальний (DIV)",
+
+// Alerts and Messages
+ProcessingXHTML		: "Обробка XHTML. Зачекайте, будь ласка...",
+Done				: "Зроблено",
+PasteWordConfirm	: "Текст, що ви хочете вставити, схожий на копійований з Word. Ви хочете очистити його перед вставкою?",
+NotCompatiblePaste	: "Ця команда доступна для Internet Explorer версії 5.5 або вище. Ви хочете вставити без очищення?",
+UnknownToolbarItem	: "Невідомий елемент панелі інструментів \"%1\"",
+UnknownCommand		: "Невідоме ім'я команди \"%1\"",
+NotImplemented		: "Команда не реалізована",
+UnknownToolbarSet	: "Панель інструментів \"%1\" не існує",
+NoActiveX			: "Настройки безпеки вашого браузера можуть обмежувати деякі властивості редактора. Ви повинні включити опцію \"Запускати елементи управління ACTIVEX і плугіни\". Ви можете бачити помилки і помічати відсутність можливостей.",
+BrowseServerBlocked : "Ресурси браузера не можуть бути відкриті. Перевірте що блокування спливаючих вікон вимкнені.",
+DialogBlocked		: "Не можливо відкрити вікно діалогу. Перевірте що блокування спливаючих вікон вимкнені.",
+
+// Dialogs
+DlgBtnOK			: "ОК",
+DlgBtnCancel		: "Скасувати",
+DlgBtnClose			: "Зачинити",
+DlgBtnBrowseServer	: "Передивитися на сервері",
+DlgAdvancedTag		: "Розширений",
+DlgOpOther			: "<Інше>",
+DlgInfoTab			: "Інфо",
+DlgAlertUrl			: "Вставте, будь-ласка, URL",
+
+// General Dialogs Labels
+DlgGenNotSet		: "<не визначено>",
+DlgGenId			: "Ідентифікатор",
+DlgGenLangDir		: "Напрямок мови",
+DlgGenLangDirLtr	: "Зліва на право (LTR)",
+DlgGenLangDirRtl	: "Зправа на ліво (RTL)",
+DlgGenLangCode		: "Мова",
+DlgGenAccessKey		: "Гаряча клавіша",
+DlgGenName			: "Им'я",
+DlgGenTabIndex		: "Послідовність переходу",
+DlgGenLongDescr		: "Довгий опис URL",
+DlgGenClass			: "Клас CSS",
+DlgGenTitle			: "Заголовок",
+DlgGenContType		: "Тип вмісту",
+DlgGenLinkCharset	: "Кодировка",
+DlgGenStyle			: "Стиль CSS",
+
+// Image Dialog
+DlgImgTitle			: "Властивості зображення",
+DlgImgInfoTab		: "Інформація про изображении",
+DlgImgBtnUpload		: "Надіслати на сервер",
+DlgImgURL			: "URL",
+DlgImgUpload		: "Закачати",
+DlgImgAlt			: "Альтернативний текст",
+DlgImgWidth			: "Ширина",
+DlgImgHeight		: "Висота",
+DlgImgLockRatio		: "Зберегти пропорції",
+DlgBtnResetSize		: "Скинути розмір",
+DlgImgBorder		: "Бордюр",
+DlgImgHSpace		: "Горизонтальний відступ",
+DlgImgVSpace		: "Вертикальний відступ",
+DlgImgAlign			: "Вирівнювання",
+DlgImgAlignLeft		: "По лівому краю",
+DlgImgAlignAbsBottom: "Абс по низу",
+DlgImgAlignAbsMiddle: "Абс по середині",
+DlgImgAlignBaseline	: "По базовій лінії",
+DlgImgAlignBottom	: "По низу",
+DlgImgAlignMiddle	: "По середині",
+DlgImgAlignRight	: "По правому краю",
+DlgImgAlignTextTop	: "Текст на верху",
+DlgImgAlignTop		: "По верху",
+DlgImgPreview		: "Попередній перегляд",
+DlgImgAlertUrl		: "Будь ласка, введіть URL зображення",
+DlgImgLinkTab		: "Посилання",
+
+// Flash Dialog
+DlgFlashTitle		: "Властивості Flash",
+DlgFlashChkPlay		: "Авто програвання",
+DlgFlashChkLoop		: "Зациклити",
+DlgFlashChkMenu		: "Дозволити меню Flash",
+DlgFlashScale		: "Масштаб",
+DlgFlashScaleAll	: "Показати всі",
+DlgFlashScaleNoBorder	: "Без рамки",
+DlgFlashScaleFit	: "Дійсний розмір",
+
+// Link Dialog
+DlgLnkWindowTitle	: "Посилання",
+DlgLnkInfoTab		: "Інформація посилання",
+DlgLnkTargetTab		: "Ціль",
+
+DlgLnkType			: "Тип посилання",
+DlgLnkTypeURL		: "URL",
+DlgLnkTypeAnchor	: "Якір на цю сторінку",
+DlgLnkTypeEMail		: "Эл. пошта",
+DlgLnkProto			: "Протокол",
+DlgLnkProtoOther	: "<інше>",
+DlgLnkURL			: "URL",
+DlgLnkAnchorSel		: "Оберіть якір",
+DlgLnkAnchorByName	: "За ім'ям якоря",
+DlgLnkAnchorById	: "За ідентифікатором елемента",
+DlgLnkNoAnchors		: "(Немає якорів доступних в цьому документі)",
+DlgLnkEMail			: "Адреса ел. пошти",
+DlgLnkEMailSubject	: "Тема листа",
+DlgLnkEMailBody		: "Тіло повідомлення",
+DlgLnkUpload		: "Закачати",
+DlgLnkBtnUpload		: "Переслати на сервер",
+
+DlgLnkTarget		: "Ціль",
+DlgLnkTargetFrame	: "<фрейм>",
+DlgLnkTargetPopup	: "<спливаюче вікно>",
+DlgLnkTargetBlank	: "Нове вікно (_blank)",
+DlgLnkTargetParent	: "Батьківське вікно (_parent)",
+DlgLnkTargetSelf	: "Теж вікно (_self)",
+DlgLnkTargetTop		: "Найвище вікно (_top)",
+DlgLnkTargetFrameName	: "Ім'я целевого фрейма",
+DlgLnkPopWinName	: "Ім'я спливаючого вікна",
+DlgLnkPopWinFeat	: "Властивості спливаючого вікна",
+DlgLnkPopResize		: "Змінюється в розмірах",
+DlgLnkPopLocation	: "Панель локації",
+DlgLnkPopMenu		: "Панель меню",
+DlgLnkPopScroll		: "Полоси прокрутки",
+DlgLnkPopStatus		: "Строка статусу",
+DlgLnkPopToolbar	: "Панель інструментів",
+DlgLnkPopFullScrn	: "Повний екран (IE)",
+DlgLnkPopDependent	: "Залежний (Netscape)",
+DlgLnkPopWidth		: "Ширина",
+DlgLnkPopHeight		: "Висота",
+DlgLnkPopLeft		: "Позиція зліва",
+DlgLnkPopTop		: "Позиція зверху",
+
+DlnLnkMsgNoUrl		: "Будь ласка, занесіть URL посилання",
+DlnLnkMsgNoEMail	: "Будь ласка, занесіть адрес эл. почты",
+DlnLnkMsgNoAnchor	: "Будь ласка, оберіть якір",
+DlnLnkMsgInvPopName	: "Назва спливаючого вікна повинна починатися букви і не може містити пропусків",
+
+// Color Dialog
+DlgColorTitle		: "Оберіть колір",
+DlgColorBtnClear	: "Очистити",
+DlgColorHighlight	: "Підсвічений",
+DlgColorSelected	: "Обраний",
+
+// Smiley Dialog
+DlgSmileyTitle		: "Вставити смайлик",
+
+// Special Character Dialog
+DlgSpecialCharTitle	: "Оберіть спеціальний символ",
+
+// Table Dialog
+DlgTableTitle		: "Властивості таблиці",
+DlgTableRows		: "Строки",
+DlgTableColumns		: "Колонки",
+DlgTableBorder		: "Розмір бордюра",
+DlgTableAlign		: "Вирівнювання",
+DlgTableAlignNotSet	: "<Не вст.>",
+DlgTableAlignLeft	: "Зліва",
+DlgTableAlignCenter	: "По центру",
+DlgTableAlignRight	: "Зправа",
+DlgTableWidth		: "Ширина",
+DlgTableWidthPx		: "пікселів",
+DlgTableWidthPc		: "відсотків",
+DlgTableHeight		: "Висота",
+DlgTableCellSpace	: "Проміжок (spacing)",
+DlgTableCellPad		: "Відступ (padding)",
+DlgTableCaption		: "Заголовок",
+DlgTableSummary		: "Резюме",
+
+// Table Cell Dialog
+DlgCellTitle		: "Властивості комірки",
+DlgCellWidth		: "Ширина",
+DlgCellWidthPx		: "пікселів",
+DlgCellWidthPc		: "відсотків",
+DlgCellHeight		: "Висота",
+DlgCellWordWrap		: "Згортання текста",
+DlgCellWordWrapNotSet	: "<Не вст.>",
+DlgCellWordWrapYes	: "Так",
+DlgCellWordWrapNo	: "Ні",
+DlgCellHorAlign		: "Горизонтальне вирівнювання",
+DlgCellHorAlignNotSet	: "<Не вст.>",
+DlgCellHorAlignLeft	: "Зліва",
+DlgCellHorAlignCenter	: "По центру",
+DlgCellHorAlignRight: "Зправа",
+DlgCellVerAlign		: "Вертикальное вирівнювання",
+DlgCellVerAlignNotSet	: "<Не вст.>",
+DlgCellVerAlignTop	: "Зверху",
+DlgCellVerAlignMiddle	: "Посередині",
+DlgCellVerAlignBottom	: "Знизу",
+DlgCellVerAlignBaseline	: "По базовій лінії",
+DlgCellRowSpan		: "Діапазон строк (span)",
+DlgCellCollSpan		: "Діапазон колонок (span)",
+DlgCellBackColor	: "Колір фона",
+DlgCellBorderColor	: "Колір бордюра",
+DlgCellBtnSelect	: "Оберіть...",
+
+// Find and Replace Dialog
+DlgFindAndReplaceTitle	: "Find and Replace",	//MISSING
+
+// Find Dialog
+DlgFindTitle		: "Пошук",
+DlgFindFindBtn		: "Пошук",
+DlgFindNotFoundMsg	: "Вказаний текст не знайдений.",
+
+// Replace Dialog
+DlgReplaceTitle			: "Замінити",
+DlgReplaceFindLbl		: "Шукати:",
+DlgReplaceReplaceLbl	: "Замінити на:",
+DlgReplaceCaseChk		: "Учитывать регистр",
+DlgReplaceReplaceBtn	: "Замінити",
+DlgReplaceReplAllBtn	: "Замінити все",
+DlgReplaceWordChk		: "Збіг цілих слів",
+
+// Paste Operations / Dialog
+PasteErrorCut	: "Настройки безпеки вашого браузера не дозволяють редактору автоматично виконувати операції вирізування. Будь ласка, використовуйте клавіатуру для цього (Ctrl+X).",
+PasteErrorCopy	: "Настройки безпеки вашого браузера не дозволяють редактору автоматично виконувати операції копіювання. Будь ласка, використовуйте клавіатуру для цього (Ctrl+C).",
+
+PasteAsText		: "Вставити тільки текст",
+PasteFromWord	: "Вставити з Word",
+
+DlgPasteMsg2	: "Будь-ласка, вставте з буфера обміну в цю область, користуючись комбінацією клавіш (<STRONG>Ctrl+V</STRONG>) та натисніть <STRONG>OK</STRONG>.",
+DlgPasteSec		: "Редактор не може отримати прямий доступ до буферу обміну у зв'язку з налаштуваннями вашого браузера. Вам потрібно вставити інформацію повторно в це вікно.",
+DlgPasteIgnoreFont		: "Ігнорувати налаштування шрифтів",
+DlgPasteRemoveStyles	: "Видалити налаштування стилів",
+
+// Color Picker
+ColorAutomatic	: "Автоматичний",
+ColorMoreColors	: "Кольори...",
+
+// Document Properties
+DocProps		: "Властивості документа",
+
+// Anchor Dialog
+DlgAnchorTitle		: "Властивості якоря",
+DlgAnchorName		: "Ім'я якоря",
+DlgAnchorErrorName	: "Будь ласка, занесіть ім'я якоря",
+
+// Speller Pages Dialog
+DlgSpellNotInDic		: "Не має в словнику",
+DlgSpellChangeTo		: "Замінити на",
+DlgSpellBtnIgnore		: "Ігнорувати",
+DlgSpellBtnIgnoreAll	: "Ігнорувати все",
+DlgSpellBtnReplace		: "Замінити",
+DlgSpellBtnReplaceAll	: "Замінити все",
+DlgSpellBtnUndo			: "Назад",
+DlgSpellNoSuggestions	: "- Немає припущень -",
+DlgSpellProgress		: "Виконується перевірка орфографії...",
+DlgSpellNoMispell		: "Перевірку орфографії завершено: помилок не знайдено",
+DlgSpellNoChanges		: "Перевірку орфографії завершено: жодне слово не змінено",
+DlgSpellOneChange		: "Перевірку орфографії завершено: змінено одно слово",
+DlgSpellManyChanges		: "Перевірку орфографії завершено: 1% слів змінено",
+
+IeSpellDownload			: "Модуль перевірки орфографії не встановлено. Бажаєтн завантажити його зараз?",
+
+// Button Dialog
+DlgButtonText		: "Текст (Значення)",
+DlgButtonType		: "Тип",
+DlgButtonTypeBtn	: "Кнопка",
+DlgButtonTypeSbm	: "Відправити",
+DlgButtonTypeRst	: "Скинути",
+
+// Checkbox and Radio Button Dialogs
+DlgCheckboxName		: "Ім'я",
+DlgCheckboxValue	: "Значення",
+DlgCheckboxSelected	: "Обрана",
+
+// Form Dialog
+DlgFormName		: "Ім'я",
+DlgFormAction	: "Дія",
+DlgFormMethod	: "Метод",
+
+// Select Field Dialog
+DlgSelectName		: "Ім'я",
+DlgSelectValue		: "Значення",
+DlgSelectSize		: "Розмір",
+DlgSelectLines		: "лінії",
+DlgSelectChkMulti	: "Дозволити обрання декількох позицій",
+DlgSelectOpAvail	: "Доступні варіанти",
+DlgSelectOpText		: "Текст",
+DlgSelectOpValue	: "Значення",
+DlgSelectBtnAdd		: "Добавити",
+DlgSelectBtnModify	: "Змінити",
+DlgSelectBtnUp		: "Вгору",
+DlgSelectBtnDown	: "Вниз",
+DlgSelectBtnSetValue : "Встановити як вибране значення",
+DlgSelectBtnDelete	: "Видалити",
+
+// Textarea Dialog
+DlgTextareaName	: "Ім'я",
+DlgTextareaCols	: "Колонки",
+DlgTextareaRows	: "Строки",
+
+// Text Field Dialog
+DlgTextName			: "Ім'я",
+DlgTextValue		: "Значення",
+DlgTextCharWidth	: "Ширина",
+DlgTextMaxChars		: "Макс. кіл-ть символів",
+DlgTextType			: "Тип",
+DlgTextTypeText		: "Текст",
+DlgTextTypePass		: "Пароль",
+
+// Hidden Field Dialog
+DlgHiddenName	: "Ім'я",
+DlgHiddenValue	: "Значення",
+
+// Bulleted List Dialog
+BulletedListProp	: "Властивості маркованого списка",
+NumberedListProp	: "Властивості нумерованного списка",
+DlgLstStart			: "Початок",
+DlgLstType			: "Тип",
+DlgLstTypeCircle	: "Коло",
+DlgLstTypeDisc		: "Диск",
+DlgLstTypeSquare	: "Квадрат",
+DlgLstTypeNumbers	: "Номери (1, 2, 3)",
+DlgLstTypeLCase		: "Літери нижнього регістра(a, b, c)",
+DlgLstTypeUCase		: "Букви верхнього регістра (A, B, C)",
+DlgLstTypeSRoman	: "Малі римські літери (i, ii, iii)",
+DlgLstTypeLRoman	: "Великі римські літери (I, II, III)",
+
+// Document Properties Dialog
+DlgDocGeneralTab	: "Загальні",
+DlgDocBackTab		: "Заднє тло",
+DlgDocColorsTab		: "Кольори та відступи",
+DlgDocMetaTab		: "Мета дані",
+
+DlgDocPageTitle		: "Заголовок сторінки",
+DlgDocLangDir		: "Напрямок тексту",
+DlgDocLangDirLTR	: "Зліва на право (LTR)",
+DlgDocLangDirRTL	: "Зправа на лево (RTL)",
+DlgDocLangCode		: "Код мови",
+DlgDocCharSet		: "Кодування набору символів",
+DlgDocCharSetCE		: "Центрально-європейська",
+DlgDocCharSetCT		: "Китайська традиційна (Big5)",
+DlgDocCharSetCR		: "Кирилиця",
+DlgDocCharSetGR		: "Грецька",
+DlgDocCharSetJP		: "Японська",
+DlgDocCharSetKR		: "Корейська",
+DlgDocCharSetTR		: "Турецька",
+DlgDocCharSetUN		: "Юнікод (UTF-8)",
+DlgDocCharSetWE		: "Західно-европейская",
+DlgDocCharSetOther	: "Інше кодування набору символів",
+
+DlgDocDocType		: "Заголовок типу документу",
+DlgDocDocTypeOther	: "Інший заголовок типу документу",
+DlgDocIncXHTML		: "Ввімкнути XHTML оголошення",
+DlgDocBgColor		: "Колір тла",
+DlgDocBgImage		: "URL зображення тла",
+DlgDocBgNoScroll	: "Тло без прокрутки",
+DlgDocCText			: "Текст",
+DlgDocCLink			: "Посилання",
+DlgDocCVisited		: "Відвідане посилання",
+DlgDocCActive		: "Активне посилання",
+DlgDocMargins		: "Відступи сторінки",
+DlgDocMaTop			: "Верхній",
+DlgDocMaLeft		: "Лівий",
+DlgDocMaRight		: "Правий",
+DlgDocMaBottom		: "Нижній",
+DlgDocMeIndex		: "Ключові слова документа (розділені комами)",
+DlgDocMeDescr		: "Опис документа",
+DlgDocMeAuthor		: "Автор",
+DlgDocMeCopy		: "Авторські права",
+DlgDocPreview		: "Попередній перегляд",
+
+// Templates Dialog
+Templates			: "Шаблони",
+DlgTemplatesTitle	: "Шаблони змісту",
+DlgTemplatesSelMsg	: "Оберіть, будь ласка, шаблон для відкриття в редакторі<br>(поточний зміст буде втрачено):",
+DlgTemplatesLoading	: "Завантаження списку шаблонів. Зачекайте, будь ласка...",
+DlgTemplatesNoTpl	: "(Не визначено жодного шаблону)",
+DlgTemplatesReplace	: "Замінити поточний вміст",
+
+// About Dialog
+DlgAboutAboutTab	: "Про програму",
+DlgAboutBrowserInfoTab	: "Інформація браузера",
+DlgAboutLicenseTab	: "Ліцензія",
+DlgAboutVersion		: "Версія",
+DlgAboutInfo		: "Додаткову інформацію дивіться на "
+};


Property changes on: announcement/trunk/src/main/webapp/fckeditor/editor/lang/uk.js
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/webapp/fckeditor/editor/lang/vi.js
===================================================================
--- announcement/trunk/src/main/webapp/fckeditor/editor/lang/vi.js	                        (rev 0)
+++ announcement/trunk/src/main/webapp/fckeditor/editor/lang/vi.js	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,515 @@
+/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2008 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * Vietnamese language file.
+ */
+
+var FCKLang =
+{
+// Language direction : "ltr" (left to right) or "rtl" (right to left).
+Dir					: "ltr",
+
+ToolbarCollapse		: "Thu gọn Thanh công cụ",
+ToolbarExpand		: "Mở rộng Thanh công cụ",
+
+// Toolbar Items and Context Menu
+Save				: "Lưu",
+NewPage				: "Trang mới",
+Preview				: "Xem trước",
+Cut					: "Cắt",
+Copy				: "Sao chép",
+Paste				: "Dán",
+PasteText			: "Dán theo dạng văn bản thuần",
+PasteWord			: "Dán với định dạng Word",
+Print				: "In",
+SelectAll			: "Chọn Tất cả",
+RemoveFormat		: "Xoá Định dạng",
+InsertLinkLbl		: "Liên kết",
+InsertLink			: "Chèn/Sửa Liên kết",
+RemoveLink			: "Xoá Liên kết",
+Anchor				: "Chèn/Sửa Neo",
+AnchorDelete		: "Remove Anchor",	//MISSING
+InsertImageLbl		: "Hình ảnh",
+InsertImage			: "Chèn/Sửa Hình ảnh",
+InsertFlashLbl		: "Flash",
+InsertFlash			: "Chèn/Sửa Flash",
+InsertTableLbl		: "Bảng",
+InsertTable			: "Chèn/Sửa Bảng",
+InsertLineLbl		: "Đường phân cách ngang",
+InsertLine			: "Chèn Đường phân cách ngang",
+InsertSpecialCharLbl: "Ký tự đặc biệt",
+InsertSpecialChar	: "Chèn Ký tự đặc biệt",
+InsertSmileyLbl		: "Hình biểu lộ cảm xúc (mặt cười)",
+InsertSmiley		: "Chèn Hình biểu lộ cảm xúc (mặt cười)",
+About				: "Giới thiệu về FCKeditor",
+Bold				: "Đậm",
+Italic				: "Nghiêng",
+Underline			: "Gạch chân",
+StrikeThrough		: "Gạch xuyên ngang",
+Subscript			: "Chỉ số dưới",
+Superscript			: "Chỉ số trên",
+LeftJustify			: "Canh trái",
+CenterJustify		: "Canh giữa",
+RightJustify		: "Canh phải",
+BlockJustify		: "Canh đều",
+DecreaseIndent		: "Dịch ra ngoài",
+IncreaseIndent		: "Dịch vào trong",
+Blockquote			: "Blockquote",	//MISSING
+Undo				: "Khôi phục thao tác",
+Redo				: "Làm lại thao tác",
+NumberedListLbl		: "Danh sách có thứ tự",
+NumberedList		: "Chèn/Xoá Danh sách có thứ tự",
+BulletedListLbl		: "Danh sách không thứ tự",
+BulletedList		: "Chèn/Xoá Danh sách không thứ tự",
+ShowTableBorders	: "Hiển thị Đường viền bảng",
+ShowDetails			: "Hiển thị Chi tiết",
+Style				: "Mẫu",
+FontFormat			: "Định dạng",
+Font				: "Phông",
+FontSize			: "Cỡ chữ",
+TextColor			: "Màu chữ",
+BGColor				: "Màu nền",
+Source				: "Mã HTML",
+Find				: "Tìm kiếm",
+Replace				: "Thay thế",
+SpellCheck			: "Kiểm tra Chính tả",
+UniversalKeyboard	: "Bàn phím Quốc tế",
+PageBreakLbl		: "Ngắt trang",
+PageBreak			: "Chèn Ngắt trang",
+
+Form			: "Biểu mẫu",
+Checkbox		: "Nút kiểm",
+RadioButton		: "Nút chọn",
+TextField		: "Trường văn bản",
+Textarea		: "Vùng văn bản",
+HiddenField		: "Trường ẩn",
+Button			: "Nút",
+SelectionField	: "Ô chọn",
+ImageButton		: "Nút hình ảnh",
+
+FitWindow		: "Mở rộng tối đa kích thước trình biên tập",
+ShowBlocks		: "Show Blocks",	//MISSING
+
+// Context Menu
+EditLink			: "Sửa Liên kết",
+CellCM				: "Ô",
+RowCM				: "Hàng",
+ColumnCM			: "Cột",
+InsertRowAfter		: "Insert Row After",	//MISSING
+InsertRowBefore		: "Insert Row Before",	//MISSING
+DeleteRows			: "Xoá Hàng",
+InsertColumnAfter	: "Insert Column After",	//MISSING
+InsertColumnBefore	: "Insert Column Before",	//MISSING
+DeleteColumns		: "Xoá Cột",
+InsertCellAfter		: "Insert Cell After",	//MISSING
+InsertCellBefore	: "Insert Cell Before",	//MISSING
+DeleteCells			: "Xoá Ô",
+MergeCells			: "Trộn Ô",
+MergeRight			: "Merge Right",	//MISSING
+MergeDown			: "Merge Down",	//MISSING
+HorizontalSplitCell	: "Split Cell Horizontally",	//MISSING
+VerticalSplitCell	: "Split Cell Vertically",	//MISSING
+TableDelete			: "Xóa Bảng",
+CellProperties		: "Thuộc tính Ô",
+TableProperties		: "Thuộc tính Bảng",
+ImageProperties		: "Thuộc tính Hình ảnh",
+FlashProperties		: "Thuộc tính Flash",
+
+AnchorProp			: "Thuộc tính Neo",
+ButtonProp			: "Thuộc tính Nút",
+CheckboxProp		: "Thuộc tính Nút kiểm",
+HiddenFieldProp		: "Thuộc tính Trường ẩn",
+RadioButtonProp		: "Thuộc tính Nút chọn",
+ImageButtonProp		: "Thuộc tính Nút hình ảnh",
+TextFieldProp		: "Thuộc tính Trường văn bản",
+SelectionFieldProp	: "Thuộc tính Ô chọn",
+TextareaProp		: "Thuộc tính Vùng văn bản",
+FormProp			: "Thuộc tính Biểu mẫu",
+
+FontFormats			: "Normal;Formatted;Address;Heading 1;Heading 2;Heading 3;Heading 4;Heading 5;Heading 6;Normal (DIV)",
+
+// Alerts and Messages
+ProcessingXHTML		: "Đang xử lý XHTML. Vui lòng đợi trong giây lát...",
+Done				: "Đã hoàn thành",
+PasteWordConfirm	: "Văn bản bạn muốn dán có kèm định dạng của Word. Bạn có muốn loại bỏ định dạng Word trước khi dán?",
+NotCompatiblePaste	: "Lệnh này chỉ được hỗ trợ từ trình duyệt Internet Explorer phiên bản 5.5 hoặc mới hơn. Bạn có muốn dán nguyên mẫu?",
+UnknownToolbarItem	: "Không rõ mục trên thanh công cụ \"%1\"",
+UnknownCommand		: "Không rõ lệnh \"%1\"",
+NotImplemented		: "Lệnh không được thực hiện",
+UnknownToolbarSet	: "Thanh công cụ \"%1\" không tồn tại",
+NoActiveX			: "Các thiết lập bảo mật của trình duyệt có thể giới hạn một số chức năng của trình biên tập. Bạn phải bật tùy chọn \"Run ActiveX controls and plug-ins\". Bạn có thể gặp một số lỗi và thấy thiếu đi một số chức năng.",
+BrowseServerBlocked : "Không thể mở được bộ duyệt tài nguyên. Hãy đảm bảo chức năng chặn popup đã bị vô hiệu hóa.",
+DialogBlocked		: "Không thể mở được cửa sổ hộp thoại. Hãy đảm bảo chức năng chặn popup đã bị vô hiệu hóa.",
+
+// Dialogs
+DlgBtnOK			: "Đồng ý",
+DlgBtnCancel		: "Bỏ qua",
+DlgBtnClose			: "Đóng",
+DlgBtnBrowseServer	: "Duyệt trên máy chủ",
+DlgAdvancedTag		: "Mở rộng",
+DlgOpOther			: "<Khác>",
+DlgInfoTab			: "Thông tin",
+DlgAlertUrl			: "Hãy nhập vào một URL",
+
+// General Dialogs Labels
+DlgGenNotSet		: "<không thiết lập>",
+DlgGenId			: "Định danh",
+DlgGenLangDir		: "Đường dẫn Ngôn ngữ",
+DlgGenLangDirLtr	: "Trái sang Phải (LTR)",
+DlgGenLangDirRtl	: "Phải sang Trái (RTL)",
+DlgGenLangCode		: "Mã Ngôn ngữ",
+DlgGenAccessKey		: "Phím Hỗ trợ truy cập",
+DlgGenName			: "Tên",
+DlgGenTabIndex		: "Chỉ số của Tab",
+DlgGenLongDescr		: "Mô tả URL",
+DlgGenClass			: "Lớp Stylesheet",
+DlgGenTitle			: "Advisory Title",
+DlgGenContType		: "Advisory Content Type",
+DlgGenLinkCharset	: "Bảng mã của tài nguyên được liên kết đến",
+DlgGenStyle			: "Mẫu",
+
+// Image Dialog
+DlgImgTitle			: "Thuộc tính Hình ảnh",
+DlgImgInfoTab		: "Thông tin Hình ảnh",
+DlgImgBtnUpload		: "Tải lên Máy chủ",
+DlgImgURL			: "URL",
+DlgImgUpload		: "Tải lên",
+DlgImgAlt			: "Chú thích Hình ảnh",
+DlgImgWidth			: "Rộng",
+DlgImgHeight		: "Cao",
+DlgImgLockRatio		: "Giữ tỷ lệ",
+DlgBtnResetSize		: "Kích thước gốc",
+DlgImgBorder		: "Đường viền",
+DlgImgHSpace		: "HSpace",
+DlgImgVSpace		: "VSpace",
+DlgImgAlign			: "Vị trí",
+DlgImgAlignLeft		: "Trái",
+DlgImgAlignAbsBottom: "Dưới tuyệt đối",
+DlgImgAlignAbsMiddle: "Giữa tuyệt đối",
+DlgImgAlignBaseline	: "Baseline",
+DlgImgAlignBottom	: "Dưới",
+DlgImgAlignMiddle	: "Giữa",
+DlgImgAlignRight	: "Phải",
+DlgImgAlignTextTop	: "Phía trên chữ",
+DlgImgAlignTop		: "Trên",
+DlgImgPreview		: "Xem trước",
+DlgImgAlertUrl		: "Hãy đưa vào URL của hình ảnh",
+DlgImgLinkTab		: "Liên kết",
+
+// Flash Dialog
+DlgFlashTitle		: "Thuộc tính Flash",
+DlgFlashChkPlay		: "Tự động chạy",
+DlgFlashChkLoop		: "Lặp",
+DlgFlashChkMenu		: "Cho phép bật Menu của Flash",
+DlgFlashScale		: "Tỷ lệ",
+DlgFlashScaleAll	: "Hiển thị tất cả",
+DlgFlashScaleNoBorder	: "Không đường viền",
+DlgFlashScaleFit	: "Vừa vặn",
+
+// Link Dialog
+DlgLnkWindowTitle	: "Liên kết",
+DlgLnkInfoTab		: "Thông tin Liên kết",
+DlgLnkTargetTab		: "Đích",
+
+DlgLnkType			: "Kiểu Liên kết",
+DlgLnkTypeURL		: "URL",
+DlgLnkTypeAnchor	: "Neo trong trang này",
+DlgLnkTypeEMail		: "Thư điện tử",
+DlgLnkProto			: "Giao thức",
+DlgLnkProtoOther	: "<khác>",
+DlgLnkURL			: "URL",
+DlgLnkAnchorSel		: "Chọn một Neo",
+DlgLnkAnchorByName	: "Theo Tên Neo",
+DlgLnkAnchorById	: "Theo Định danh Element",
+DlgLnkNoAnchors		: "(Không có Neo nào trong tài liệu)",
+DlgLnkEMail			: "Thư điện tử",
+DlgLnkEMailSubject	: "Tiêu đề Thông điệp",
+DlgLnkEMailBody		: "Nội dung Thông điệp",
+DlgLnkUpload		: "Tải lên",
+DlgLnkBtnUpload		: "Tải lên Máy chủ",
+
+DlgLnkTarget		: "Đích",
+DlgLnkTargetFrame	: "<khung>",
+DlgLnkTargetPopup	: "<cửa sổ popup>",
+DlgLnkTargetBlank	: "Cửa sổ mới (_blank)",
+DlgLnkTargetParent	: "Cửa sổ cha (_parent)",
+DlgLnkTargetSelf	: "Cùng cửa sổ (_self)",
+DlgLnkTargetTop		: "Cửa sổ trên cùng(_top)",
+DlgLnkTargetFrameName	: "Tên Khung đích",
+DlgLnkPopWinName	: "Tên Cửa sổ Popup",
+DlgLnkPopWinFeat	: "Đặc điểm của Cửa sổ Popup",
+DlgLnkPopResize		: "Kích thước thay đổi",
+DlgLnkPopLocation	: "Thanh vị trí",
+DlgLnkPopMenu		: "Thanh Menu",
+DlgLnkPopScroll		: "Thanh cuộn",
+DlgLnkPopStatus		: "Thanh trạng thái",
+DlgLnkPopToolbar	: "Thanh công cụ",
+DlgLnkPopFullScrn	: "Toàn màn hình (IE)",
+DlgLnkPopDependent	: "Phụ thuộc (Netscape)",
+DlgLnkPopWidth		: "Rộng",
+DlgLnkPopHeight		: "Cao",
+DlgLnkPopLeft		: "Vị trí Trái",
+DlgLnkPopTop		: "Vị trí Trên",
+
+DlnLnkMsgNoUrl		: "Hãy đưa vào Liên kết URL",
+DlnLnkMsgNoEMail	: "Hãy đưa vào địa chỉ thư điện tử",
+DlnLnkMsgNoAnchor	: "Hãy chọn một Neo",
+DlnLnkMsgInvPopName	: "Tên của cửa sổ Popup phải bắt đầu bằng một ký tự và không được chứa khoảng trắng",
+
+// Color Dialog
+DlgColorTitle		: "Chọn màu",
+DlgColorBtnClear	: "Xoá",
+DlgColorHighlight	: "Tô sáng",
+DlgColorSelected	: "Đã chọn",
+
+// Smiley Dialog
+DlgSmileyTitle		: "Chèn Hình biểu lộ cảm xúc (mặt cười)",
+
+// Special Character Dialog
+DlgSpecialCharTitle	: "Hãy chọn Ký tự đặc biệt",
+
+// Table Dialog
+DlgTableTitle		: "Thuộc tính bảng",
+DlgTableRows		: "Hàng",
+DlgTableColumns		: "Cột",
+DlgTableBorder		: "Cỡ Đường viền",
+DlgTableAlign		: "Canh lề",
+DlgTableAlignNotSet	: "<Chưa thiết lập>",
+DlgTableAlignLeft	: "Trái",
+DlgTableAlignCenter	: "Giữa",
+DlgTableAlignRight	: "Phải",
+DlgTableWidth		: "Rộng",
+DlgTableWidthPx		: "điểm (px)",
+DlgTableWidthPc		: "%",
+DlgTableHeight		: "Cao",
+DlgTableCellSpace	: "Khoảng cách Ô",
+DlgTableCellPad		: "Đệm Ô",
+DlgTableCaption		: "Đầu đề",
+DlgTableSummary		: "Tóm lược",
+
+// Table Cell Dialog
+DlgCellTitle		: "Thuộc tính Ô",
+DlgCellWidth		: "Rộng",
+DlgCellWidthPx		: "điểm (px)",
+DlgCellWidthPc		: "%",
+DlgCellHeight		: "Cao",
+DlgCellWordWrap		: "Bọc từ",
+DlgCellWordWrapNotSet	: "<Chưa thiết lập>",
+DlgCellWordWrapYes	: "Đồng ý",
+DlgCellWordWrapNo	: "Không",
+DlgCellHorAlign		: "Canh theo Chiều ngang",
+DlgCellHorAlignNotSet	: "<Chưa thiết lập>",
+DlgCellHorAlignLeft	: "Trái",
+DlgCellHorAlignCenter	: "Giữa",
+DlgCellHorAlignRight: "Phải",
+DlgCellVerAlign		: "Canh theo Chiều dọc",
+DlgCellVerAlignNotSet	: "<Chưa thiết lập>",
+DlgCellVerAlignTop	: "Trên",
+DlgCellVerAlignMiddle	: "Giữa",
+DlgCellVerAlignBottom	: "Dưới",
+DlgCellVerAlignBaseline	: "Baseline",
+DlgCellRowSpan		: "Nối Hàng",
+DlgCellCollSpan		: "Nối Cột",
+DlgCellBackColor	: "Màu nền",
+DlgCellBorderColor	: "Màu viền",
+DlgCellBtnSelect	: "Chọn...",
+
+// Find and Replace Dialog
+DlgFindAndReplaceTitle	: "Find and Replace",	//MISSING
+
+// Find Dialog
+DlgFindTitle		: "Tìm kiếm",
+DlgFindFindBtn		: "Tìm kiếm",
+DlgFindNotFoundMsg	: "Không tìm thấy chuỗi cần tìm.",
+
+// Replace Dialog
+DlgReplaceTitle			: "Thay thế",
+DlgReplaceFindLbl		: "Tìm chuỗi:",
+DlgReplaceReplaceLbl	: "Thay bằng:",
+DlgReplaceCaseChk		: "Phân biệt chữ hoa/thường",
+DlgReplaceReplaceBtn	: "Thay thế",
+DlgReplaceReplAllBtn	: "Thay thế Tất cả",
+DlgReplaceWordChk		: "Đúng toàn bộ từ",
+
+// Paste Operations / Dialog
+PasteErrorCut	: "Các thiết lập bảo mật của trình duyệt không cho phép trình biên tập tự động thực thi lệnh cắt. Hãy sử dụng bàn phím cho lệnh này (Ctrl+X).",
+PasteErrorCopy	: "Các thiết lập bảo mật của trình duyệt không cho phép trình biên tập tự động thực thi lệnh sao chép. Hãy sử dụng bàn phím cho lệnh này (Ctrl+C).",
+
+PasteAsText		: "Dán theo định dạng văn bản thuần",
+PasteFromWord	: "Dán với định dạng Word",
+
+DlgPasteMsg2	: "Hãy dán nội dung vào trong khung bên dưới, sử dụng tổ hợp phím (<STRONG>Ctrl+V</STRONG>) và nhấn vào nút <STRONG>Đồng ý</STRONG>.",
+DlgPasteSec		: "Because of your browser security settings, the editor is not able to access your clipboard data directly. You are required to paste it again in this window.",	//MISSING
+DlgPasteIgnoreFont		: "Chấp nhận các định dạng phông",
+DlgPasteRemoveStyles	: "Gỡ bỏ các định dạng Styles",
+
+// Color Picker
+ColorAutomatic	: "Tự động",
+ColorMoreColors	: "Màu khác...",
+
+// Document Properties
+DocProps		: "Thuộc tính Tài liệu",
+
+// Anchor Dialog
+DlgAnchorTitle		: "Thuộc tính Neo",
+DlgAnchorName		: "Tên của Neo",
+DlgAnchorErrorName	: "Hãy đưa vào tên của Neo",
+
+// Speller Pages Dialog
+DlgSpellNotInDic		: "Không có trong từ điển",
+DlgSpellChangeTo		: "Chuyển thành",
+DlgSpellBtnIgnore		: "Bỏ qua",
+DlgSpellBtnIgnoreAll	: "Bỏ qua Tất cả",
+DlgSpellBtnReplace		: "Thay thế",
+DlgSpellBtnReplaceAll	: "Thay thế Tất cả",
+DlgSpellBtnUndo			: "Phục hồi lại",
+DlgSpellNoSuggestions	: "- Không đưa ra gợi ý về từ -",
+DlgSpellProgress		: "Đang tiến hành kiểm tra chính tả...",
+DlgSpellNoMispell		: "Hoàn tất kiểm tra chính tả: Không có lỗi chính tả",
+DlgSpellNoChanges		: "Hoàn tất kiểm tra chính tả: Không có từ nào được thay đổi",
+DlgSpellOneChange		: "Hoàn tất kiểm tra chính tả: Một từ đã được thay đổi",
+DlgSpellManyChanges		: "Hoàn tất kiểm tra chính tả: %1 từ đã được thay đổi",
+
+IeSpellDownload			: "Chức năng kiểm tra chính tả chưa được cài đặt. Bạn có muốn tải về ngay bây giờ?",
+
+// Button Dialog
+DlgButtonText		: "Chuỗi hiển thị (Giá trị)",
+DlgButtonType		: "Kiểu",
+DlgButtonTypeBtn	: "Nút Bấm",
+DlgButtonTypeSbm	: "Nút Gửi",
+DlgButtonTypeRst	: "Nút Nhập lại",
+
+// Checkbox and Radio Button Dialogs
+DlgCheckboxName		: "Tên",
+DlgCheckboxValue	: "Giá trị",
+DlgCheckboxSelected	: "Được chọn",
+
+// Form Dialog
+DlgFormName		: "Tên",
+DlgFormAction	: "Hành động",
+DlgFormMethod	: "Phương thức",
+
+// Select Field Dialog
+DlgSelectName		: "Tên",
+DlgSelectValue		: "Giá trị",
+DlgSelectSize		: "Kích cỡ",
+DlgSelectLines		: "dòng",
+DlgSelectChkMulti	: "Cho phép chọn nhiều",
+DlgSelectOpAvail	: "Các tùy chọn có thể sử dụng",
+DlgSelectOpText		: "Văn bản",
+DlgSelectOpValue	: "Giá trị",
+DlgSelectBtnAdd		: "Thêm",
+DlgSelectBtnModify	: "Thay đổi",
+DlgSelectBtnUp		: "Lên",
+DlgSelectBtnDown	: "Xuống",
+DlgSelectBtnSetValue : "Giá trị được chọn",
+DlgSelectBtnDelete	: "Xoá",
+
+// Textarea Dialog
+DlgTextareaName	: "Tên",
+DlgTextareaCols	: "Cột",
+DlgTextareaRows	: "Hàng",
+
+// Text Field Dialog
+DlgTextName			: "Tên",
+DlgTextValue		: "Giá trị",
+DlgTextCharWidth	: "Rộng",
+DlgTextMaxChars		: "Số Ký tự tối đa",
+DlgTextType			: "Kiểu",
+DlgTextTypeText		: "Ký tự",
+DlgTextTypePass		: "Mật khẩu",
+
+// Hidden Field Dialog
+DlgHiddenName	: "Tên",
+DlgHiddenValue	: "Giá trị",
+
+// Bulleted List Dialog
+BulletedListProp	: "Thuộc tính Danh sách không thứ tự",
+NumberedListProp	: "Thuộc tính Danh sách có thứ tự",
+DlgLstStart			: "Bắt đầu",
+DlgLstType			: "Kiểu",
+DlgLstTypeCircle	: "Hình tròn",
+DlgLstTypeDisc		: "Hình đĩa",
+DlgLstTypeSquare	: "Hình vuông",
+DlgLstTypeNumbers	: "Số thứ tự (1, 2, 3)",
+DlgLstTypeLCase		: "Chữ cái thường (a, b, c)",
+DlgLstTypeUCase		: "Chữ cái hoa (A, B, C)",
+DlgLstTypeSRoman	: "Số La Mã thường (i, ii, iii)",
+DlgLstTypeLRoman	: "Số La Mã hoa (I, II, III)",
+
+// Document Properties Dialog
+DlgDocGeneralTab	: "Toàn thể",
+DlgDocBackTab		: "Nền",
+DlgDocColorsTab		: "Màu sắc và Đường biên",
+DlgDocMetaTab		: "Siêu dữ liệu",
+
+DlgDocPageTitle		: "Tiêu đề Trang",
+DlgDocLangDir		: "Đường dẫn Ngôn ngữ",
+DlgDocLangDirLTR	: "Trái sang Phải (LTR)",
+DlgDocLangDirRTL	: "Phải sang Trái (RTL)",
+DlgDocLangCode		: "Mã Ngôn ngữ",
+DlgDocCharSet		: "Bảng mã ký tự",
+DlgDocCharSetCE		: "Trung Âu",
+DlgDocCharSetCT		: "Tiếng Trung Quốc (Big5)",
+DlgDocCharSetCR		: "Tiếng Kirin",
+DlgDocCharSetGR		: "Tiếng Hy Lạp",
+DlgDocCharSetJP		: "Tiếng Nhật",
+DlgDocCharSetKR		: "Tiếng Hàn",
+DlgDocCharSetTR		: "Tiếng Thổ Nhĩ Kỳ",
+DlgDocCharSetUN		: "Unicode (UTF-8)",
+DlgDocCharSetWE		: "Tây Âu",
+DlgDocCharSetOther	: "Bảng mã ký tự khác",
+
+DlgDocDocType		: "Kiểu Đề mục Tài liệu",
+DlgDocDocTypeOther	: "Kiểu Đề mục Tài liệu khác",
+DlgDocIncXHTML		: "Bao gồm cả định nghĩa XHTML",
+DlgDocBgColor		: "Màu nền",
+DlgDocBgImage		: "URL của Hình ảnh nền",
+DlgDocBgNoScroll	: "Không cuộn nền",
+DlgDocCText			: "Văn bản",
+DlgDocCLink			: "Liên kết",
+DlgDocCVisited		: "Liên kết Đã ghé thăm",
+DlgDocCActive		: "Liên kết Hiện hành",
+DlgDocMargins		: "Đường biên của Trang",
+DlgDocMaTop			: "Trên",
+DlgDocMaLeft		: "Trái",
+DlgDocMaRight		: "Phải",
+DlgDocMaBottom		: "Dưới",
+DlgDocMeIndex		: "Các từ khóa chỉ mục tài liệu (phân cách bởi dấu phẩy)",
+DlgDocMeDescr		: "Mô tả tài liệu",
+DlgDocMeAuthor		: "Tác giả",
+DlgDocMeCopy		: "Bản quyền",
+DlgDocPreview		: "Xem trước",
+
+// Templates Dialog
+Templates			: "Mẫu dựng sẵn",
+DlgTemplatesTitle	: "Nội dung Mẫu dựng sẵn",
+DlgTemplatesSelMsg	: "Hãy chọn Mẫu dựng sẵn để mở trong trình biên tập<br>(nội dung hiện tại sẽ bị mất):",
+DlgTemplatesLoading	: "Đang nạp Danh sách Mẫu dựng sẵn. Vui lòng đợi trong giây lát...",
+DlgTemplatesNoTpl	: "(Không có Mẫu dựng sẵn nào được định nghĩa)",
+DlgTemplatesReplace	: "Thay thế nội dung hiện tại",
+
+// About Dialog
+DlgAboutAboutTab	: "Giới thiệu",
+DlgAboutBrowserInfoTab	: "Thông tin trình duyệt",
+DlgAboutLicenseTab	: "Giấy phép",
+DlgAboutVersion		: "phiên bản",
+DlgAboutInfo		: "Để biết thêm thông tin, hãy truy cập"
+};


Property changes on: announcement/trunk/src/main/webapp/fckeditor/editor/lang/vi.js
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/webapp/fckeditor/editor/lang/zh-cn.js
===================================================================
--- announcement/trunk/src/main/webapp/fckeditor/editor/lang/zh-cn.js	                        (rev 0)
+++ announcement/trunk/src/main/webapp/fckeditor/editor/lang/zh-cn.js	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,515 @@
+/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2008 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * Chinese Simplified language file.
+ */
+
+var FCKLang =
+{
+// Language direction : "ltr" (left to right) or "rtl" (right to left).
+Dir					: "ltr",
+
+ToolbarCollapse		: "折叠工具栏",
+ToolbarExpand		: "展开工具栏",
+
+// Toolbar Items and Context Menu
+Save				: "保存",
+NewPage				: "新建",
+Preview				: "预览",
+Cut					: "剪切",
+Copy				: "复制",
+Paste				: "粘贴",
+PasteText			: "粘贴为无格式文本",
+PasteWord			: "从 MS Word 粘贴",
+Print				: "打印",
+SelectAll			: "全选",
+RemoveFormat		: "清除格式",
+InsertLinkLbl		: "超链接",
+InsertLink			: "插入/编辑超链接",
+RemoveLink			: "取消超链接",
+Anchor				: "插入/编辑锚点链接",
+AnchorDelete		: "清除锚点链接",
+InsertImageLbl		: "图象",
+InsertImage			: "插入/编辑图象",
+InsertFlashLbl		: "Flash",
+InsertFlash			: "插入/编辑 Flash",
+InsertTableLbl		: "表格",
+InsertTable			: "插入/编辑表格",
+InsertLineLbl		: "水平线",
+InsertLine			: "插入水平线",
+InsertSpecialCharLbl: "特殊符号",
+InsertSpecialChar	: "插入特殊符号",
+InsertSmileyLbl		: "表情符",
+InsertSmiley		: "插入表情图标",
+About				: "关于 FCKeditor",
+Bold				: "加粗",
+Italic				: "倾斜",
+Underline			: "下划线",
+StrikeThrough		: "删除线",
+Subscript			: "下标",
+Superscript			: "上标",
+LeftJustify			: "左对齐",
+CenterJustify		: "居中对齐",
+RightJustify		: "右对齐",
+BlockJustify		: "两端对齐",
+DecreaseIndent		: "减少缩进量",
+IncreaseIndent		: "增加缩进量",
+Blockquote			: "引用文字",
+Undo				: "撤消",
+Redo				: "重做",
+NumberedListLbl		: "编号列表",
+NumberedList		: "插入/删除编号列表",
+BulletedListLbl		: "项目列表",
+BulletedList		: "插入/删除项目列表",
+ShowTableBorders	: "显示表格边框",
+ShowDetails			: "显示详细资料",
+Style				: "样式",
+FontFormat			: "格式",
+Font				: "字体",
+FontSize			: "大小",
+TextColor			: "文本颜色",
+BGColor				: "背景颜色",
+Source				: "源代码",
+Find				: "查找",
+Replace				: "替换",
+SpellCheck			: "拼写检查",
+UniversalKeyboard	: "软键盘",
+PageBreakLbl		: "分页符",
+PageBreak			: "插入分页符",
+
+Form			: "表单",
+Checkbox		: "复选框",
+RadioButton		: "单选按钮",
+TextField		: "单行文本",
+Textarea		: "多行文本",
+HiddenField		: "隐藏域",
+Button			: "按钮",
+SelectionField	: "列表/菜单",
+ImageButton		: "图像域",
+
+FitWindow		: "全屏编辑",
+ShowBlocks		: "显示区块",
+
+// Context Menu
+EditLink			: "编辑超链接",
+CellCM				: "单元格",
+RowCM				: "行",
+ColumnCM			: "列",
+InsertRowAfter		: "下插入行",
+InsertRowBefore		: "上插入行",
+DeleteRows			: "删除行",
+InsertColumnAfter	: "右插入列",
+InsertColumnBefore	: "左插入列",
+DeleteColumns		: "删除列",
+InsertCellAfter		: "右插入单元格",
+InsertCellBefore	: "左插入单元格",
+DeleteCells			: "删除单元格",
+MergeCells			: "合并单元格",
+MergeRight			: "右合并单元格",
+MergeDown			: "下合并单元格",
+HorizontalSplitCell	: "橫拆分单元格",
+VerticalSplitCell	: "縱拆分单元格",
+TableDelete			: "删除表格",
+CellProperties		: "单元格属性",
+TableProperties		: "表格属性",
+ImageProperties		: "图象属性",
+FlashProperties		: "Flash 属性",
+
+AnchorProp			: "锚点链接属性",
+ButtonProp			: "按钮属性",
+CheckboxProp		: "复选框属性",
+HiddenFieldProp		: "隐藏域属性",
+RadioButtonProp		: "单选按钮属性",
+ImageButtonProp		: "图像域属性",
+TextFieldProp		: "单行文本属性",
+SelectionFieldProp	: "菜单/列表属性",
+TextareaProp		: "多行文本属性",
+FormProp			: "表单属性",
+
+FontFormats			: "普通;已编排格式;地址;标题 1;标题 2;标题 3;标题 4;标题 5;标题 6;段落(DIV)",
+
+// Alerts and Messages
+ProcessingXHTML		: "正在处理 XHTML,请稍等...",
+Done				: "完成",
+PasteWordConfirm	: "您要粘贴的内容好像是来自 MS Word,是否要清除 MS Word 格式后再粘贴?",
+NotCompatiblePaste	: "该命令需要 Internet Explorer 5.5 或更高版本的支持,是否按常规粘贴进行?",
+UnknownToolbarItem	: "未知工具栏项目 \"%1\"",
+UnknownCommand		: "未知命令名称 \"%1\"",
+NotImplemented		: "命令无法执行",
+UnknownToolbarSet	: "工具栏设置 \"%1\" 不存在",
+NoActiveX			: "浏览器安全设置限制了本编辑器的某些功能。您必须启用安全设置中的“运行 ActiveX 控件和插件”,否则将出现某些错误并缺少功能。",
+BrowseServerBlocked : "无法打开资源浏览器,请确认是否启用了禁止弹出窗口。",
+DialogBlocked		: "无法打开对话框窗口,请确认是否启用了禁止弹出窗口或网页对话框(IE)。",
+
+// Dialogs
+DlgBtnOK			: "确定",
+DlgBtnCancel		: "取消",
+DlgBtnClose			: "关闭",
+DlgBtnBrowseServer	: "浏览服务器",
+DlgAdvancedTag		: "高级",
+DlgOpOther			: "<其它>",
+DlgInfoTab			: "信息",
+DlgAlertUrl			: "请插入 URL",
+
+// General Dialogs Labels
+DlgGenNotSet		: "<没有设置>",
+DlgGenId			: "ID",
+DlgGenLangDir		: "语言方向",
+DlgGenLangDirLtr	: "从左到右 (LTR)",
+DlgGenLangDirRtl	: "从右到左 (RTL)",
+DlgGenLangCode		: "语言代码",
+DlgGenAccessKey		: "访问键",
+DlgGenName			: "名称",
+DlgGenTabIndex		: "Tab 键次序",
+DlgGenLongDescr		: "详细说明地址",
+DlgGenClass			: "样式类名称",
+DlgGenTitle			: "标题",
+DlgGenContType		: "内容类型",
+DlgGenLinkCharset	: "字符编码",
+DlgGenStyle			: "行内样式",
+
+// Image Dialog
+DlgImgTitle			: "图象属性",
+DlgImgInfoTab		: "图象",
+DlgImgBtnUpload		: "发送到服务器上",
+DlgImgURL			: "源文件",
+DlgImgUpload		: "上传",
+DlgImgAlt			: "替换文本",
+DlgImgWidth			: "宽度",
+DlgImgHeight		: "高度",
+DlgImgLockRatio		: "锁定比例",
+DlgBtnResetSize		: "恢复尺寸",
+DlgImgBorder		: "边框大小",
+DlgImgHSpace		: "水平间距",
+DlgImgVSpace		: "垂直间距",
+DlgImgAlign			: "对齐方式",
+DlgImgAlignLeft		: "左对齐",
+DlgImgAlignAbsBottom: "绝对底边",
+DlgImgAlignAbsMiddle: "绝对居中",
+DlgImgAlignBaseline	: "基线",
+DlgImgAlignBottom	: "底边",
+DlgImgAlignMiddle	: "居中",
+DlgImgAlignRight	: "右对齐",
+DlgImgAlignTextTop	: "文本上方",
+DlgImgAlignTop		: "顶端",
+DlgImgPreview		: "预览",
+DlgImgAlertUrl		: "请输入图象地址",
+DlgImgLinkTab		: "链接",
+
+// Flash Dialog
+DlgFlashTitle		: "Flash 属性",
+DlgFlashChkPlay		: "自动播放",
+DlgFlashChkLoop		: "循环",
+DlgFlashChkMenu		: "启用 Flash 菜单",
+DlgFlashScale		: "缩放",
+DlgFlashScaleAll	: "全部显示",
+DlgFlashScaleNoBorder	: "无边框",
+DlgFlashScaleFit	: "严格匹配",
+
+// Link Dialog
+DlgLnkWindowTitle	: "超链接",
+DlgLnkInfoTab		: "超链接信息",
+DlgLnkTargetTab		: "目标",
+
+DlgLnkType			: "超链接类型",
+DlgLnkTypeURL		: "超链接",
+DlgLnkTypeAnchor	: "页内锚点链接",
+DlgLnkTypeEMail		: "电子邮件",
+DlgLnkProto			: "协议",
+DlgLnkProtoOther	: "<其它>",
+DlgLnkURL			: "地址",
+DlgLnkAnchorSel		: "选择一个锚点",
+DlgLnkAnchorByName	: "按锚点名称",
+DlgLnkAnchorById	: "按锚点 ID",
+DlgLnkNoAnchors		: "(此文档没有可用的锚点)",
+DlgLnkEMail			: "地址",
+DlgLnkEMailSubject	: "主题",
+DlgLnkEMailBody		: "内容",
+DlgLnkUpload		: "上传",
+DlgLnkBtnUpload		: "发送到服务器上",
+
+DlgLnkTarget		: "目标",
+DlgLnkTargetFrame	: "<框架>",
+DlgLnkTargetPopup	: "<弹出窗口>",
+DlgLnkTargetBlank	: "新窗口 (_blank)",
+DlgLnkTargetParent	: "父窗口 (_parent)",
+DlgLnkTargetSelf	: "本窗口 (_self)",
+DlgLnkTargetTop		: "整页 (_top)",
+DlgLnkTargetFrameName	: "目标框架名称",
+DlgLnkPopWinName	: "弹出窗口名称",
+DlgLnkPopWinFeat	: "弹出窗口属性",
+DlgLnkPopResize		: "调整大小",
+DlgLnkPopLocation	: "地址栏",
+DlgLnkPopMenu		: "菜单栏",
+DlgLnkPopScroll		: "滚动条",
+DlgLnkPopStatus		: "状态栏",
+DlgLnkPopToolbar	: "工具栏",
+DlgLnkPopFullScrn	: "全屏 (IE)",
+DlgLnkPopDependent	: "依附 (NS)",
+DlgLnkPopWidth		: "宽",
+DlgLnkPopHeight		: "高",
+DlgLnkPopLeft		: "左",
+DlgLnkPopTop		: "右",
+
+DlnLnkMsgNoUrl		: "请输入超链接地址",
+DlnLnkMsgNoEMail	: "请输入电子邮件地址",
+DlnLnkMsgNoAnchor	: "请选择一个锚点",
+DlnLnkMsgInvPopName	: "弹出窗口名称必须以字母开头,并且不能含有空格。",
+
+// Color Dialog
+DlgColorTitle		: "选择颜色",
+DlgColorBtnClear	: "清除",
+DlgColorHighlight	: "预览",
+DlgColorSelected	: "选择",
+
+// Smiley Dialog
+DlgSmileyTitle		: "插入表情图标",
+
+// Special Character Dialog
+DlgSpecialCharTitle	: "选择特殊符号",
+
+// Table Dialog
+DlgTableTitle		: "表格属性",
+DlgTableRows		: "行数",
+DlgTableColumns		: "列数",
+DlgTableBorder		: "边框",
+DlgTableAlign		: "对齐",
+DlgTableAlignNotSet	: "<没有设置>",
+DlgTableAlignLeft	: "左对齐",
+DlgTableAlignCenter	: "居中",
+DlgTableAlignRight	: "右对齐",
+DlgTableWidth		: "宽度",
+DlgTableWidthPx		: "像素",
+DlgTableWidthPc		: "百分比",
+DlgTableHeight		: "高度",
+DlgTableCellSpace	: "间距",
+DlgTableCellPad		: "边距",
+DlgTableCaption		: "标题",
+DlgTableSummary		: "摘要",
+
+// Table Cell Dialog
+DlgCellTitle		: "单元格属性",
+DlgCellWidth		: "宽度",
+DlgCellWidthPx		: "像素",
+DlgCellWidthPc		: "百分比",
+DlgCellHeight		: "高度",
+DlgCellWordWrap		: "自动换行",
+DlgCellWordWrapNotSet	: "<没有设置>",
+DlgCellWordWrapYes	: "是",
+DlgCellWordWrapNo	: "否",
+DlgCellHorAlign		: "水平对齐",
+DlgCellHorAlignNotSet	: "<没有设置>",
+DlgCellHorAlignLeft	: "左对齐",
+DlgCellHorAlignCenter	: "居中",
+DlgCellHorAlignRight: "右对齐",
+DlgCellVerAlign		: "垂直对齐",
+DlgCellVerAlignNotSet	: "<没有设置>",
+DlgCellVerAlignTop	: "顶端",
+DlgCellVerAlignMiddle	: "居中",
+DlgCellVerAlignBottom	: "底部",
+DlgCellVerAlignBaseline	: "基线",
+DlgCellRowSpan		: "纵跨行数",
+DlgCellCollSpan		: "横跨列数",
+DlgCellBackColor	: "背景颜色",
+DlgCellBorderColor	: "边框颜色",
+DlgCellBtnSelect	: "选择...",
+
+// Find and Replace Dialog
+DlgFindAndReplaceTitle	: "查找和替换",
+
+// Find Dialog
+DlgFindTitle		: "查找",
+DlgFindFindBtn		: "查找",
+DlgFindNotFoundMsg	: "指定文本没有找到。",
+
+// Replace Dialog
+DlgReplaceTitle			: "替换",
+DlgReplaceFindLbl		: "查找:",
+DlgReplaceReplaceLbl	: "替换:",
+DlgReplaceCaseChk		: "区分大小写",
+DlgReplaceReplaceBtn	: "替换",
+DlgReplaceReplAllBtn	: "全部替换",
+DlgReplaceWordChk		: "全字匹配",
+
+// Paste Operations / Dialog
+PasteErrorCut	: "您的浏览器安全设置不允许编辑器自动执行剪切操作,请使用键盘快捷键(Ctrl+X)来完成。",
+PasteErrorCopy	: "您的浏览器安全设置不允许编辑器自动执行复制操作,请使用键盘快捷键(Ctrl+C)来完成。",
+
+PasteAsText		: "粘贴为无格式文本",
+PasteFromWord	: "从 MS Word 粘贴",
+
+DlgPasteMsg2	: "请使用键盘快捷键(<STRONG>Ctrl+V</STRONG>)把内容粘贴到下面的方框里,再按 <STRONG>确定</STRONG>。",
+DlgPasteSec		: "因为你的浏览器的安全设置原因,本编辑器不能直接访问你的剪贴板内容,你需要在本窗口重新粘贴一次。",
+DlgPasteIgnoreFont		: "忽略 Font 标签",
+DlgPasteRemoveStyles	: "清理 CSS 样式",
+
+// Color Picker
+ColorAutomatic	: "自动",
+ColorMoreColors	: "其它颜色...",
+
+// Document Properties
+DocProps		: "页面属性",
+
+// Anchor Dialog
+DlgAnchorTitle		: "命名锚点",
+DlgAnchorName		: "锚点名称",
+DlgAnchorErrorName	: "请输入锚点名称",
+
+// Speller Pages Dialog
+DlgSpellNotInDic		: "没有在字典里",
+DlgSpellChangeTo		: "更改为",
+DlgSpellBtnIgnore		: "忽略",
+DlgSpellBtnIgnoreAll	: "全部忽略",
+DlgSpellBtnReplace		: "替换",
+DlgSpellBtnReplaceAll	: "全部替换",
+DlgSpellBtnUndo			: "撤消",
+DlgSpellNoSuggestions	: "- 没有建议 -",
+DlgSpellProgress		: "正在进行拼写检查...",
+DlgSpellNoMispell		: "拼写检查完成:没有发现拼写错误",
+DlgSpellNoChanges		: "拼写检查完成:没有更改任何单词",
+DlgSpellOneChange		: "拼写检查完成:更改了一个单词",
+DlgSpellManyChanges		: "拼写检查完成:更改了 %1 个单词",
+
+IeSpellDownload			: "拼写检查插件还没安装,你是否想现在就下载?",
+
+// Button Dialog
+DlgButtonText		: "标签(值)",
+DlgButtonType		: "类型",
+DlgButtonTypeBtn	: "按钮",
+DlgButtonTypeSbm	: "提交",
+DlgButtonTypeRst	: "重设",
+
+// Checkbox and Radio Button Dialogs
+DlgCheckboxName		: "名称",
+DlgCheckboxValue	: "选定值",
+DlgCheckboxSelected	: "已勾选",
+
+// Form Dialog
+DlgFormName		: "名称",
+DlgFormAction	: "动作",
+DlgFormMethod	: "方法",
+
+// Select Field Dialog
+DlgSelectName		: "名称",
+DlgSelectValue		: "选定",
+DlgSelectSize		: "高度",
+DlgSelectLines		: "行",
+DlgSelectChkMulti	: "允许多选",
+DlgSelectOpAvail	: "列表值",
+DlgSelectOpText		: "标签",
+DlgSelectOpValue	: "值",
+DlgSelectBtnAdd		: "新增",
+DlgSelectBtnModify	: "修改",
+DlgSelectBtnUp		: "上移",
+DlgSelectBtnDown	: "下移",
+DlgSelectBtnSetValue : "设为初始化时选定",
+DlgSelectBtnDelete	: "删除",
+
+// Textarea Dialog
+DlgTextareaName	: "名称",
+DlgTextareaCols	: "字符宽度",
+DlgTextareaRows	: "行数",
+
+// Text Field Dialog
+DlgTextName			: "名称",
+DlgTextValue		: "初始值",
+DlgTextCharWidth	: "字符宽度",
+DlgTextMaxChars		: "最多字符数",
+DlgTextType			: "类型",
+DlgTextTypeText		: "文本",
+DlgTextTypePass		: "密码",
+
+// Hidden Field Dialog
+DlgHiddenName	: "名称",
+DlgHiddenValue	: "初始值",
+
+// Bulleted List Dialog
+BulletedListProp	: "项目列表属性",
+NumberedListProp	: "编号列表属性",
+DlgLstStart			: "开始序号",
+DlgLstType			: "列表类型",
+DlgLstTypeCircle	: "圆圈",
+DlgLstTypeDisc		: "圆点",
+DlgLstTypeSquare	: "方块",
+DlgLstTypeNumbers	: "数字 (1, 2, 3)",
+DlgLstTypeLCase		: "小写字母 (a, b, c)",
+DlgLstTypeUCase		: "大写字母 (A, B, C)",
+DlgLstTypeSRoman	: "小写罗马数字 (i, ii, iii)",
+DlgLstTypeLRoman	: "大写罗马数字 (I, II, III)",
+
+// Document Properties Dialog
+DlgDocGeneralTab	: "常规",
+DlgDocBackTab		: "背景",
+DlgDocColorsTab		: "颜色和边距",
+DlgDocMetaTab		: "Meta 数据",
+
+DlgDocPageTitle		: "页面标题",
+DlgDocLangDir		: "语言方向",
+DlgDocLangDirLTR	: "从左到右 (LTR)",
+DlgDocLangDirRTL	: "从右到左 (RTL)",
+DlgDocLangCode		: "语言代码",
+DlgDocCharSet		: "字符编码",
+DlgDocCharSetCE		: "中欧",
+DlgDocCharSetCT		: "繁体中文 (Big5)",
+DlgDocCharSetCR		: "西里尔文",
+DlgDocCharSetGR		: "希腊文",
+DlgDocCharSetJP		: "日文",
+DlgDocCharSetKR		: "韩文",
+DlgDocCharSetTR		: "土耳其文",
+DlgDocCharSetUN		: "Unicode (UTF-8)",
+DlgDocCharSetWE		: "西欧",
+DlgDocCharSetOther	: "其它字符编码",
+
+DlgDocDocType		: "文档类型",
+DlgDocDocTypeOther	: "其它文档类型",
+DlgDocIncXHTML		: "包含 XHTML 声明",
+DlgDocBgColor		: "背景颜色",
+DlgDocBgImage		: "背景图像",
+DlgDocBgNoScroll	: "不滚动背景图像",
+DlgDocCText			: "文本",
+DlgDocCLink			: "超链接",
+DlgDocCVisited		: "已访问的超链接",
+DlgDocCActive		: "活动超链接",
+DlgDocMargins		: "页面边距",
+DlgDocMaTop			: "上",
+DlgDocMaLeft		: "左",
+DlgDocMaRight		: "右",
+DlgDocMaBottom		: "下",
+DlgDocMeIndex		: "页面索引关键字 (用半角逗号[,]分隔)",
+DlgDocMeDescr		: "页面说明",
+DlgDocMeAuthor		: "作者",
+DlgDocMeCopy		: "版权",
+DlgDocPreview		: "预览",
+
+// Templates Dialog
+Templates			: "模板",
+DlgTemplatesTitle	: "内容模板",
+DlgTemplatesSelMsg	: "请选择编辑器内容模板<br>(当前内容将会被清除替换):",
+DlgTemplatesLoading	: "正在加载模板列表,请稍等...",
+DlgTemplatesNoTpl	: "(没有模板)",
+DlgTemplatesReplace	: "替换当前内容",
+
+// About Dialog
+DlgAboutAboutTab	: "关于",
+DlgAboutBrowserInfoTab	: "浏览器信息",
+DlgAboutLicenseTab	: "许可证",
+DlgAboutVersion		: "版本",
+DlgAboutInfo		: "要获得更多信息请访问 "
+};


Property changes on: announcement/trunk/src/main/webapp/fckeditor/editor/lang/zh-cn.js
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/webapp/fckeditor/editor/lang/zh.js
===================================================================
--- announcement/trunk/src/main/webapp/fckeditor/editor/lang/zh.js	                        (rev 0)
+++ announcement/trunk/src/main/webapp/fckeditor/editor/lang/zh.js	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,515 @@
+/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2008 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * Chinese Traditional language file.
+ */
+
+var FCKLang =
+{
+// Language direction : "ltr" (left to right) or "rtl" (right to left).
+Dir					: "ltr",
+
+ToolbarCollapse		: "隱藏面板",
+ToolbarExpand		: "顯示面板",
+
+// Toolbar Items and Context Menu
+Save				: "儲存",
+NewPage				: "開新檔案",
+Preview				: "預覽",
+Cut					: "剪下",
+Copy				: "複製",
+Paste				: "貼上",
+PasteText			: "貼為純文字格式",
+PasteWord			: "自 Word 貼上",
+Print				: "列印",
+SelectAll			: "全選",
+RemoveFormat		: "清除格式",
+InsertLinkLbl		: "超連結",
+InsertLink			: "插入/編輯超連結",
+RemoveLink			: "移除超連結",
+Anchor				: "插入/編輯錨點",
+AnchorDelete		: "移除錨點",
+InsertImageLbl		: "影像",
+InsertImage			: "插入/編輯影像",
+InsertFlashLbl		: "Flash",
+InsertFlash			: "插入/編輯 Flash",
+InsertTableLbl		: "表格",
+InsertTable			: "插入/編輯表格",
+InsertLineLbl		: "水平線",
+InsertLine			: "插入水平線",
+InsertSpecialCharLbl: "特殊符號",
+InsertSpecialChar	: "插入特殊符號",
+InsertSmileyLbl		: "表情符號",
+InsertSmiley		: "插入表情符號",
+About				: "關於 FCKeditor",
+Bold				: "粗體",
+Italic				: "斜體",
+Underline			: "底線",
+StrikeThrough		: "刪除線",
+Subscript			: "下標",
+Superscript			: "上標",
+LeftJustify			: "靠左對齊",
+CenterJustify		: "置中",
+RightJustify		: "靠右對齊",
+BlockJustify		: "左右對齊",
+DecreaseIndent		: "減少縮排",
+IncreaseIndent		: "增加縮排",
+Blockquote			: "块引用",
+Undo				: "復原",
+Redo				: "重複",
+NumberedListLbl		: "編號清單",
+NumberedList		: "插入/移除編號清單",
+BulletedListLbl		: "項目清單",
+BulletedList		: "插入/移除項目清單",
+ShowTableBorders	: "顯示表格邊框",
+ShowDetails			: "顯示詳細資料",
+Style				: "樣式",
+FontFormat			: "格式",
+Font				: "字體",
+FontSize			: "大小",
+TextColor			: "文字顏色",
+BGColor				: "背景顏色",
+Source				: "原始碼",
+Find				: "尋找",
+Replace				: "取代",
+SpellCheck			: "拼字檢查",
+UniversalKeyboard	: "萬國鍵盤",
+PageBreakLbl		: "分頁符號",
+PageBreak			: "插入分頁符號",
+
+Form			: "表單",
+Checkbox		: "核取方塊",
+RadioButton		: "選項按鈕",
+TextField		: "文字方塊",
+Textarea		: "文字區域",
+HiddenField		: "隱藏欄位",
+Button			: "按鈕",
+SelectionField	: "清單/選單",
+ImageButton		: "影像按鈕",
+
+FitWindow		: "編輯器最大化",
+ShowBlocks		: "顯示區塊",
+
+// Context Menu
+EditLink			: "編輯超連結",
+CellCM				: "儲存格",
+RowCM				: "列",
+ColumnCM			: "欄",
+InsertRowAfter		: "向下插入列",
+InsertRowBefore		: "向上插入列",
+DeleteRows			: "刪除列",
+InsertColumnAfter	: "向右插入欄",
+InsertColumnBefore	: "向左插入欄",
+DeleteColumns		: "刪除欄",
+InsertCellAfter		: "向右插入儲存格",
+InsertCellBefore	: "向左插入儲存格",
+DeleteCells			: "刪除儲存格",
+MergeCells			: "合併儲存格",
+MergeRight			: "向右合併儲存格",
+MergeDown			: "向下合併儲存格",
+HorizontalSplitCell	: "橫向分割儲存格",
+VerticalSplitCell	: "縱向分割儲存格",
+TableDelete			: "刪除表格",
+CellProperties		: "儲存格屬性",
+TableProperties		: "表格屬性",
+ImageProperties		: "影像屬性",
+FlashProperties		: "Flash 屬性",
+
+AnchorProp			: "錨點屬性",
+ButtonProp			: "按鈕屬性",
+CheckboxProp		: "核取方塊屬性",
+HiddenFieldProp		: "隱藏欄位屬性",
+RadioButtonProp		: "選項按鈕屬性",
+ImageButtonProp		: "影像按鈕屬性",
+TextFieldProp		: "文字方塊屬性",
+SelectionFieldProp	: "清單/選單屬性",
+TextareaProp		: "文字區域屬性",
+FormProp			: "表單屬性",
+
+FontFormats			: "一般;已格式化;位址;標題 1;標題 2;標題 3;標題 4;標題 5;標題 6;一般 (DIV)",
+
+// Alerts and Messages
+ProcessingXHTML		: "處理 XHTML 中,請稍候…",
+Done				: "完成",
+PasteWordConfirm	: "您想貼上的文字似乎是自 Word 複製而來,請問您是否要先清除 Word 的格式後再行貼上?",
+NotCompatiblePaste	: "此指令僅在 Internet Explorer 5.5 或以上的版本有效。請問您是否同意不清除格式即貼上?",
+UnknownToolbarItem	: "未知工具列項目 \"%1\"",
+UnknownCommand		: "未知指令名稱 \"%1\"",
+NotImplemented		: "尚未安裝此指令",
+UnknownToolbarSet	: "工具列設定 \"%1\" 不存在",
+NoActiveX			: "瀏覽器的安全性設定限制了本編輯器的某些功能。您必須啟用安全性設定中的「執行ActiveX控制項與外掛程式」項目,否則本編輯器將會出現錯誤並缺少某些功能",
+BrowseServerBlocked : "無法開啟資源瀏覽器,請確定所有快顯視窗封鎖程式是否關閉",
+DialogBlocked		: "無法開啟對話視窗,請確定所有快顯視窗封鎖程式是否關閉",
+
+// Dialogs
+DlgBtnOK			: "確定",
+DlgBtnCancel		: "取消",
+DlgBtnClose			: "關閉",
+DlgBtnBrowseServer	: "瀏覽伺服器端",
+DlgAdvancedTag		: "進階",
+DlgOpOther			: "<其他>",
+DlgInfoTab			: "資訊",
+DlgAlertUrl			: "請插入 URL",
+
+// General Dialogs Labels
+DlgGenNotSet		: "<尚未設定>",
+DlgGenId			: "ID",
+DlgGenLangDir		: "語言方向",
+DlgGenLangDirLtr	: "由左而右 (LTR)",
+DlgGenLangDirRtl	: "由右而左 (RTL)",
+DlgGenLangCode		: "語言代碼",
+DlgGenAccessKey		: "存取鍵",
+DlgGenName			: "名稱",
+DlgGenTabIndex		: "定位順序",
+DlgGenLongDescr		: "詳細 URL",
+DlgGenClass			: "樣式表類別",
+DlgGenTitle			: "標題",
+DlgGenContType		: "內容類型",
+DlgGenLinkCharset	: "連結資源之編碼",
+DlgGenStyle			: "樣式",
+
+// Image Dialog
+DlgImgTitle			: "影像屬性",
+DlgImgInfoTab		: "影像資訊",
+DlgImgBtnUpload		: "上傳至伺服器",
+DlgImgURL			: "URL",
+DlgImgUpload		: "上傳",
+DlgImgAlt			: "替代文字",
+DlgImgWidth			: "寬度",
+DlgImgHeight		: "高度",
+DlgImgLockRatio		: "等比例",
+DlgBtnResetSize		: "重設為原大小",
+DlgImgBorder		: "邊框",
+DlgImgHSpace		: "水平距離",
+DlgImgVSpace		: "垂直距離",
+DlgImgAlign			: "對齊",
+DlgImgAlignLeft		: "靠左對齊",
+DlgImgAlignAbsBottom: "絕對下方",
+DlgImgAlignAbsMiddle: "絕對中間",
+DlgImgAlignBaseline	: "基準線",
+DlgImgAlignBottom	: "靠下對齊",
+DlgImgAlignMiddle	: "置中對齊",
+DlgImgAlignRight	: "靠右對齊",
+DlgImgAlignTextTop	: "文字上方",
+DlgImgAlignTop		: "靠上對齊",
+DlgImgPreview		: "預覽",
+DlgImgAlertUrl		: "請輸入影像 URL",
+DlgImgLinkTab		: "超連結",
+
+// Flash Dialog
+DlgFlashTitle		: "Flash 屬性",
+DlgFlashChkPlay		: "自動播放",
+DlgFlashChkLoop		: "重複",
+DlgFlashChkMenu		: "開啟選單",
+DlgFlashScale		: "縮放",
+DlgFlashScaleAll	: "全部顯示",
+DlgFlashScaleNoBorder	: "無邊框",
+DlgFlashScaleFit	: "精確符合",
+
+// Link Dialog
+DlgLnkWindowTitle	: "超連結",
+DlgLnkInfoTab		: "超連結資訊",
+DlgLnkTargetTab		: "目標",
+
+DlgLnkType			: "超連接類型",
+DlgLnkTypeURL		: "URL",
+DlgLnkTypeAnchor	: "本頁錨點",
+DlgLnkTypeEMail		: "電子郵件",
+DlgLnkProto			: "通訊協定",
+DlgLnkProtoOther	: "<其他>",
+DlgLnkURL			: "URL",
+DlgLnkAnchorSel		: "請選擇錨點",
+DlgLnkAnchorByName	: "依錨點名稱",
+DlgLnkAnchorById	: "依元件 ID",
+DlgLnkNoAnchors		: "(本文件尚無可用之錨點)",
+DlgLnkEMail			: "電子郵件",
+DlgLnkEMailSubject	: "郵件主旨",
+DlgLnkEMailBody		: "郵件內容",
+DlgLnkUpload		: "上傳",
+DlgLnkBtnUpload		: "傳送至伺服器",
+
+DlgLnkTarget		: "目標",
+DlgLnkTargetFrame	: "<框架>",
+DlgLnkTargetPopup	: "<快顯視窗>",
+DlgLnkTargetBlank	: "新視窗 (_blank)",
+DlgLnkTargetParent	: "父視窗 (_parent)",
+DlgLnkTargetSelf	: "本視窗 (_self)",
+DlgLnkTargetTop		: "最上層視窗 (_top)",
+DlgLnkTargetFrameName	: "目標框架名稱",
+DlgLnkPopWinName	: "快顯視窗名稱",
+DlgLnkPopWinFeat	: "快顯視窗屬性",
+DlgLnkPopResize		: "可調整大小",
+DlgLnkPopLocation	: "網址列",
+DlgLnkPopMenu		: "選單列",
+DlgLnkPopScroll		: "捲軸",
+DlgLnkPopStatus		: "狀態列",
+DlgLnkPopToolbar	: "工具列",
+DlgLnkPopFullScrn	: "全螢幕 (IE)",
+DlgLnkPopDependent	: "從屬 (NS)",
+DlgLnkPopWidth		: "寬",
+DlgLnkPopHeight		: "高",
+DlgLnkPopLeft		: "左",
+DlgLnkPopTop		: "右",
+
+DlnLnkMsgNoUrl		: "請輸入欲連結的 URL",
+DlnLnkMsgNoEMail	: "請輸入電子郵件位址",
+DlnLnkMsgNoAnchor	: "請選擇錨點",
+DlnLnkMsgInvPopName	: "快顯名稱必須以「英文字母」為開頭,且不得含有空白",
+
+// Color Dialog
+DlgColorTitle		: "請選擇顏色",
+DlgColorBtnClear	: "清除",
+DlgColorHighlight	: "預覽",
+DlgColorSelected	: "選擇",
+
+// Smiley Dialog
+DlgSmileyTitle		: "插入表情符號",
+
+// Special Character Dialog
+DlgSpecialCharTitle	: "請選擇特殊符號",
+
+// Table Dialog
+DlgTableTitle		: "表格屬性",
+DlgTableRows		: "列數",
+DlgTableColumns		: "欄數",
+DlgTableBorder		: "邊框",
+DlgTableAlign		: "對齊",
+DlgTableAlignNotSet	: "<未設定>",
+DlgTableAlignLeft	: "靠左對齊",
+DlgTableAlignCenter	: "置中",
+DlgTableAlignRight	: "靠右對齊",
+DlgTableWidth		: "寬度",
+DlgTableWidthPx		: "像素",
+DlgTableWidthPc		: "百分比",
+DlgTableHeight		: "高度",
+DlgTableCellSpace	: "間距",
+DlgTableCellPad		: "內距",
+DlgTableCaption		: "標題",
+DlgTableSummary		: "摘要",
+
+// Table Cell Dialog
+DlgCellTitle		: "儲存格屬性",
+DlgCellWidth		: "寬度",
+DlgCellWidthPx		: "像素",
+DlgCellWidthPc		: "百分比",
+DlgCellHeight		: "高度",
+DlgCellWordWrap		: "自動換行",
+DlgCellWordWrapNotSet	: "<尚未設定>",
+DlgCellWordWrapYes	: "是",
+DlgCellWordWrapNo	: "否",
+DlgCellHorAlign		: "水平對齊",
+DlgCellHorAlignNotSet	: "<尚未設定>",
+DlgCellHorAlignLeft	: "靠左對齊",
+DlgCellHorAlignCenter	: "置中",
+DlgCellHorAlignRight: "靠右對齊",
+DlgCellVerAlign		: "垂直對齊",
+DlgCellVerAlignNotSet	: "<尚未設定>",
+DlgCellVerAlignTop	: "靠上對齊",
+DlgCellVerAlignMiddle	: "置中",
+DlgCellVerAlignBottom	: "靠下對齊",
+DlgCellVerAlignBaseline	: "基準線",
+DlgCellRowSpan		: "合併列數",
+DlgCellCollSpan		: "合併欄数",
+DlgCellBackColor	: "背景顏色",
+DlgCellBorderColor	: "邊框顏色",
+DlgCellBtnSelect	: "請選擇…",
+
+// Find and Replace Dialog
+DlgFindAndReplaceTitle	: "尋找與取代",
+
+// Find Dialog
+DlgFindTitle		: "尋找",
+DlgFindFindBtn		: "尋找",
+DlgFindNotFoundMsg	: "未找到指定的文字。",
+
+// Replace Dialog
+DlgReplaceTitle			: "取代",
+DlgReplaceFindLbl		: "尋找:",
+DlgReplaceReplaceLbl	: "取代:",
+DlgReplaceCaseChk		: "大小寫須相符",
+DlgReplaceReplaceBtn	: "取代",
+DlgReplaceReplAllBtn	: "全部取代",
+DlgReplaceWordChk		: "全字相符",
+
+// Paste Operations / Dialog
+PasteErrorCut	: "瀏覽器的安全性設定不允許編輯器自動執行剪下動作。請使用快捷鍵 (Ctrl+X) 剪下。",
+PasteErrorCopy	: "瀏覽器的安全性設定不允許編輯器自動執行複製動作。請使用快捷鍵 (Ctrl+C) 複製。",
+
+PasteAsText		: "貼為純文字格式",
+PasteFromWord	: "自 Word 貼上",
+
+DlgPasteMsg2	: "請使用快捷鍵 (<strong>Ctrl+V</strong>) 貼到下方區域中並按下 <strong>確定</strong>",
+DlgPasteSec		: "因為瀏覽器的安全性設定,本編輯器無法直接存取您的剪貼簿資料,請您自行在本視窗進行貼上動作。",
+DlgPasteIgnoreFont		: "移除字型設定",
+DlgPasteRemoveStyles	: "移除樣式設定",
+
+// Color Picker
+ColorAutomatic	: "自動",
+ColorMoreColors	: "更多顏色…",
+
+// Document Properties
+DocProps		: "文件屬性",
+
+// Anchor Dialog
+DlgAnchorTitle		: "命名錨點",
+DlgAnchorName		: "錨點名稱",
+DlgAnchorErrorName	: "請輸入錨點名稱",
+
+// Speller Pages Dialog
+DlgSpellNotInDic		: "不在字典中",
+DlgSpellChangeTo		: "更改為",
+DlgSpellBtnIgnore		: "忽略",
+DlgSpellBtnIgnoreAll	: "全部忽略",
+DlgSpellBtnReplace		: "取代",
+DlgSpellBtnReplaceAll	: "全部取代",
+DlgSpellBtnUndo			: "復原",
+DlgSpellNoSuggestions	: "- 無建議值 -",
+DlgSpellProgress		: "進行拼字檢查中…",
+DlgSpellNoMispell		: "拼字檢查完成:未發現拼字錯誤",
+DlgSpellNoChanges		: "拼字檢查完成:未更改任何單字",
+DlgSpellOneChange		: "拼字檢查完成:更改了 1 個單字",
+DlgSpellManyChanges		: "拼字檢查完成:更改了 %1 個單字",
+
+IeSpellDownload			: "尚未安裝拼字檢查元件。您是否想要現在下載?",
+
+// Button Dialog
+DlgButtonText		: "顯示文字 (值)",
+DlgButtonType		: "類型",
+DlgButtonTypeBtn	: "按鈕 (Button)",
+DlgButtonTypeSbm	: "送出 (Submit)",
+DlgButtonTypeRst	: "重設 (Reset)",
+
+// Checkbox and Radio Button Dialogs
+DlgCheckboxName		: "名稱",
+DlgCheckboxValue	: "選取值",
+DlgCheckboxSelected	: "已選取",
+
+// Form Dialog
+DlgFormName		: "名稱",
+DlgFormAction	: "動作",
+DlgFormMethod	: "方法",
+
+// Select Field Dialog
+DlgSelectName		: "名稱",
+DlgSelectValue		: "選取值",
+DlgSelectSize		: "大小",
+DlgSelectLines		: "行",
+DlgSelectChkMulti	: "可多選",
+DlgSelectOpAvail	: "可用選項",
+DlgSelectOpText		: "顯示文字",
+DlgSelectOpValue	: "值",
+DlgSelectBtnAdd		: "新增",
+DlgSelectBtnModify	: "修改",
+DlgSelectBtnUp		: "上移",
+DlgSelectBtnDown	: "下移",
+DlgSelectBtnSetValue : "設為預設值",
+DlgSelectBtnDelete	: "刪除",
+
+// Textarea Dialog
+DlgTextareaName	: "名稱",
+DlgTextareaCols	: "字元寬度",
+DlgTextareaRows	: "列數",
+
+// Text Field Dialog
+DlgTextName			: "名稱",
+DlgTextValue		: "值",
+DlgTextCharWidth	: "字元寬度",
+DlgTextMaxChars		: "最多字元數",
+DlgTextType			: "類型",
+DlgTextTypeText		: "文字",
+DlgTextTypePass		: "密碼",
+
+// Hidden Field Dialog
+DlgHiddenName	: "名稱",
+DlgHiddenValue	: "值",
+
+// Bulleted List Dialog
+BulletedListProp	: "項目清單屬性",
+NumberedListProp	: "編號清單屬性",
+DlgLstStart			: "起始編號",
+DlgLstType			: "清單類型",
+DlgLstTypeCircle	: "圓圈",
+DlgLstTypeDisc		: "圓點",
+DlgLstTypeSquare	: "方塊",
+DlgLstTypeNumbers	: "數字 (1, 2, 3)",
+DlgLstTypeLCase		: "小寫字母 (a, b, c)",
+DlgLstTypeUCase		: "大寫字母 (A, B, C)",
+DlgLstTypeSRoman	: "小寫羅馬數字 (i, ii, iii)",
+DlgLstTypeLRoman	: "大寫羅馬數字 (I, II, III)",
+
+// Document Properties Dialog
+DlgDocGeneralTab	: "一般",
+DlgDocBackTab		: "背景",
+DlgDocColorsTab		: "顯色與邊界",
+DlgDocMetaTab		: "Meta 資料",
+
+DlgDocPageTitle		: "頁面標題",
+DlgDocLangDir		: "語言方向",
+DlgDocLangDirLTR	: "由左而右 (LTR)",
+DlgDocLangDirRTL	: "由右而左 (RTL)",
+DlgDocLangCode		: "語言代碼",
+DlgDocCharSet		: "字元編碼",
+DlgDocCharSetCE		: "中歐語系",
+DlgDocCharSetCT		: "正體中文 (Big5)",
+DlgDocCharSetCR		: "斯拉夫文",
+DlgDocCharSetGR		: "希臘文",
+DlgDocCharSetJP		: "日文",
+DlgDocCharSetKR		: "韓文",
+DlgDocCharSetTR		: "土耳其文",
+DlgDocCharSetUN		: "Unicode (UTF-8)",
+DlgDocCharSetWE		: "西歐語系",
+DlgDocCharSetOther	: "其他字元編碼",
+
+DlgDocDocType		: "文件類型",
+DlgDocDocTypeOther	: "其他文件類型",
+DlgDocIncXHTML		: "包含 XHTML 定義",
+DlgDocBgColor		: "背景顏色",
+DlgDocBgImage		: "背景影像",
+DlgDocBgNoScroll	: "浮水印",
+DlgDocCText			: "文字",
+DlgDocCLink			: "超連結",
+DlgDocCVisited		: "已瀏覽過的超連結",
+DlgDocCActive		: "作用中的超連結",
+DlgDocMargins		: "頁面邊界",
+DlgDocMaTop			: "上",
+DlgDocMaLeft		: "左",
+DlgDocMaRight		: "右",
+DlgDocMaBottom		: "下",
+DlgDocMeIndex		: "文件索引關鍵字 (用半形逗號[,]分隔)",
+DlgDocMeDescr		: "文件說明",
+DlgDocMeAuthor		: "作者",
+DlgDocMeCopy		: "版權所有",
+DlgDocPreview		: "預覽",
+
+// Templates Dialog
+Templates			: "樣版",
+DlgTemplatesTitle	: "內容樣版",
+DlgTemplatesSelMsg	: "請選擇欲開啟的樣版<br> (原有的內容將會被清除):",
+DlgTemplatesLoading	: "讀取樣版清單中,請稍候…",
+DlgTemplatesNoTpl	: "(無樣版)",
+DlgTemplatesReplace	: "取代原有內容",
+
+// About Dialog
+DlgAboutAboutTab	: "關於",
+DlgAboutBrowserInfoTab	: "瀏覽器資訊",
+DlgAboutLicenseTab	: "許可證",
+DlgAboutVersion		: "版本",
+DlgAboutInfo		: "想獲得更多資訊請至 "
+};


Property changes on: announcement/trunk/src/main/webapp/fckeditor/editor/lang/zh.js
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/webapp/fckeditor/editor/plugins/autogrow/fckplugin.js
===================================================================
--- announcement/trunk/src/main/webapp/fckeditor/editor/plugins/autogrow/fckplugin.js	                        (rev 0)
+++ announcement/trunk/src/main/webapp/fckeditor/editor/plugins/autogrow/fckplugin.js	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,99 @@
+/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2008 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * Plugin: automatically resizes the editor until a configurable maximun
+ * height (FCKConfig.AutoGrowMax), based on its contents.
+ */
+
+var FCKAutoGrow_Min = window.frameElement.offsetHeight ;
+
+function FCKAutoGrow_Check()
+{
+	var oInnerDoc = FCK.EditorDocument ;
+
+	var iFrameHeight, iInnerHeight ;
+
+	if ( FCKBrowserInfo.IsIE )
+	{
+		iFrameHeight = FCK.EditorWindow.frameElement.offsetHeight ;
+		iInnerHeight = oInnerDoc.body.scrollHeight ;
+	}
+	else
+	{
+		iFrameHeight = FCK.EditorWindow.innerHeight ;
+		iInnerHeight = oInnerDoc.body.offsetHeight ;
+	}
+
+	var iDiff = iInnerHeight - iFrameHeight ;
+
+	if ( iDiff != 0 )
+	{
+		var iMainFrameSize = window.frameElement.offsetHeight ;
+
+		if ( iDiff > 0 && iMainFrameSize < FCKConfig.AutoGrowMax )
+		{
+			iMainFrameSize += iDiff ;
+			if ( iMainFrameSize > FCKConfig.AutoGrowMax )
+				iMainFrameSize = FCKConfig.AutoGrowMax ;
+		}
+		else if ( iDiff < 0 && iMainFrameSize > FCKAutoGrow_Min )
+		{
+			iMainFrameSize += iDiff ;
+			if ( iMainFrameSize < FCKAutoGrow_Min )
+				iMainFrameSize = FCKAutoGrow_Min ;
+		}
+		else
+			return ;
+
+		window.frameElement.height = iMainFrameSize ;
+
+		// Gecko browsers use an onresize handler to update the innermost
+		// IFRAME's height. If the document is modified before the onresize
+		// is triggered, the plugin will miscalculate the new height. Thus,
+		// forcibly trigger onresize. #1336
+		if ( typeof window.onresize == 'function' )
+			window.onresize() ;
+	}
+}
+
+FCK.AttachToOnSelectionChange( FCKAutoGrow_Check ) ;
+
+function FCKAutoGrow_SetListeners()
+{
+	if ( FCK.EditMode != FCK_EDITMODE_WYSIWYG )
+		return ;
+
+	FCK.EditorWindow.attachEvent( 'onscroll', FCKAutoGrow_Check ) ;
+	FCK.EditorDocument.attachEvent( 'onkeyup', FCKAutoGrow_Check ) ;
+}
+
+if ( FCKBrowserInfo.IsIE )
+{
+//	FCKAutoGrow_SetListeners() ;
+	FCK.Events.AttachEvent( 'OnAfterSetHTML', FCKAutoGrow_SetListeners ) ;
+}
+
+function FCKAutoGrow_CheckEditorStatus( sender, status )
+{
+	if ( status == FCK_STATUS_COMPLETE )
+		FCKAutoGrow_Check() ;
+}
+
+FCK.Events.AttachEvent( 'OnStatusChange', FCKAutoGrow_CheckEditorStatus ) ;


Property changes on: announcement/trunk/src/main/webapp/fckeditor/editor/plugins/autogrow/fckplugin.js
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/webapp/fckeditor/editor/plugins/bbcode/_sample/sample.config.js
===================================================================
--- announcement/trunk/src/main/webapp/fckeditor/editor/plugins/bbcode/_sample/sample.config.js	                        (rev 0)
+++ announcement/trunk/src/main/webapp/fckeditor/editor/plugins/bbcode/_sample/sample.config.js	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,26 @@
+/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2008 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * Sample custom configuration settings used by the BBCode plugin. It simply
+ * loads the plugin. All the rest is done by the plugin itself.
+ */
+
+// Add the BBCode plugin.
+FCKConfig.Plugins.Add( 'bbcode' ) ;


Property changes on: announcement/trunk/src/main/webapp/fckeditor/editor/plugins/bbcode/_sample/sample.config.js
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/webapp/fckeditor/editor/plugins/bbcode/_sample/sample.html
===================================================================
--- announcement/trunk/src/main/webapp/fckeditor/editor/plugins/bbcode/_sample/sample.html	                        (rev 0)
+++ announcement/trunk/src/main/webapp/fckeditor/editor/plugins/bbcode/_sample/sample.html	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,67 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<!--
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2008 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * Sample page.
+-->
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+	<title>FCKeditor - BBCode Sample</title>
+	<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+	<meta name="robots" content="noindex, nofollow" />
+	<link href="../../../../_samples/sample.css" rel="stylesheet" type="text/css" />
+	<script type="text/javascript" src="../../../../fckeditor.js"></script>
+</head>
+<body>
+	<h1>
+		FCKeditor - BBCode Sample</h1>
+	<p>
+		This is a sample of custom Data Processor implementation for (very) basic BBCode
+		syntax. Only <strong>[b]</strong>, <strong>[i]</strong>, <strong>[u]</strong> and
+		<strong>[url]</strong> may be used. It may be extended, but this is out of this
+		sample purpose.
+	</p>
+	<p>
+		Note that the input and output of the editor is not HTML, but BBCode
+	</p>
+	<hr />
+	<form action="../../../../_samples/html/sampleposteddata.asp" method="post" target="_blank">
+		<script type="text/javascript">
+<!--
+// Automatically calculates the editor base path based on the _samples directory.
+// This is usefull only for these samples. A real application should use something like this:
+// oFCKeditor.BasePath = '/fckeditor/' ;	// '/fckeditor/' is the default value.
+var sBasePath = document.location.pathname.substring(0,document.location.pathname.lastIndexOf('editor')) ;
+
+var oFCKeditor = new FCKeditor( 'FCKeditor1' ) ;
+oFCKeditor.BasePath	= sBasePath ;
+
+// Set the custom configurations file path (in this way the original file is mantained).
+oFCKeditor.Config['CustomConfigurationsPath'] = sBasePath + 'editor/plugins/bbcode/_sample/sample.config.js' ;
+
+oFCKeditor.Value = 'This is some [b]sample text[/b]. You are using [url=http://www.fckeditor.net/]FCKeditor[/url].' ;
+oFCKeditor.Create() ;
+//-->
+		</script>
+		<br />
+		<input type="submit" value="Submit" />
+	</form>
+</body>
+</html>


Property changes on: announcement/trunk/src/main/webapp/fckeditor/editor/plugins/bbcode/_sample/sample.html
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/webapp/fckeditor/editor/plugins/bbcode/fckplugin.js
===================================================================
--- announcement/trunk/src/main/webapp/fckeditor/editor/plugins/bbcode/fckplugin.js	                        (rev 0)
+++ announcement/trunk/src/main/webapp/fckeditor/editor/plugins/bbcode/fckplugin.js	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,123 @@
+/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2008 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * This is a sample implementation for a custom Data Processor for basic BBCode.
+ */
+
+FCK.DataProcessor =
+{
+	/*
+	 * Returns a string representing the HTML format of "data". The returned
+	 * value will be loaded in the editor.
+	 * The HTML must be from <html> to </html>, eventually including
+	 * the DOCTYPE.
+	 *     @param {String} data The data to be converted in the
+	 *            DataProcessor specific format.
+	 */
+	ConvertToHtml : function( data )
+	{
+		// Convert < and > to their HTML entities.
+        data = data.replace( /</g, '&lt;' ) ;
+        data = data.replace( />/g, '&gt;' ) ;
+
+        // Convert line breaks to <br>.
+        data = data.replace( /(?:\r\n|\n|\r)/g, '<br>' ) ;
+
+        // [url]
+        data = data.replace( /\[url\](.+?)\[\/url]/gi, '<a href="$1">$1</a>' ) ;
+        data = data.replace( /\[url\=([^\]]+)](.+?)\[\/url]/gi, '<a href="$1">$2</a>' ) ;
+
+        // [b]
+        data = data.replace( /\[b\](.+?)\[\/b]/gi, '<b>$1</b>' ) ;
+
+        // [i]
+        data = data.replace( /\[i\](.+?)\[\/i]/gi, '<i>$1</i>' ) ;
+
+        // [u]
+        data = data.replace( /\[u\](.+?)\[\/u]/gi, '<u>$1</u>' ) ;
+
+		return '<html><head><title></title></head><body>' + data + '</body></html>' ;
+	},
+
+	/*
+	 * Converts a DOM (sub-)tree to a string in the data format.
+	 *     @param {Object} rootNode The node that contains the DOM tree to be
+	 *            converted to the data format.
+	 *     @param {Boolean} excludeRoot Indicates that the root node must not
+	 *            be included in the conversion, only its children.
+	 *     @param {Boolean} format Indicates that the data must be formatted
+	 *            for human reading. Not all Data Processors may provide it.
+	 */
+	ConvertToDataFormat : function( rootNode, excludeRoot, ignoreIfEmptyParagraph, format )
+	{
+		var data = rootNode.innerHTML ;
+
+		// Convert <br> to line breaks.
+		data = data.replace( /<br(?=[ \/>]).*?>/gi, '\r\n') ;
+
+		// [url]
+		data = data.replace( /<a .*?href=(["'])(.+?)\1.*?>(.+?)<\/a>/gi, '[url=$2]$3[/url]') ;
+
+		// [b]
+		data = data.replace( /<(?:b|strong)>/gi, '[b]') ;
+		data = data.replace( /<\/(?:b|strong)>/gi, '[/b]') ;
+
+		// [i]
+		data = data.replace( /<(?:i|em)>/gi, '[i]') ;
+		data = data.replace( /<\/(?:i|em)>/gi, '[/i]') ;
+
+		// [u]
+		data = data.replace( /<u>/gi, '[u]') ;
+		data = data.replace( /<\/u>/gi, '[/u]') ;
+
+		// Remove remaining tags.
+		data = data.replace( /<[^>]+>/g, '') ;
+
+		return data ;
+	},
+
+	/*
+	 * Makes any necessary changes to a piece of HTML for insertion in the
+	 * editor selection position.
+	 *     @param {String} html The HTML to be fixed.
+	 */
+	FixHtml : function( html )
+	{
+		return html ;
+	}
+} ;
+
+// This Data Processor doesn't support <p>, so let's use <br>.
+FCKConfig.EnterMode = 'br' ;
+
+// To avoid pasting invalid markup (which is discarded in any case), let's
+// force pasting to plain text.
+FCKConfig.ForcePasteAsPlainText	= true ;
+
+// Rename the "Source" buttom to "BBCode".
+FCKToolbarItems.RegisterItem( 'Source', new FCKToolbarButton( 'Source', 'BBCode', null, FCK_TOOLBARITEM_ICONTEXT, true, true, 1 ) ) ;
+
+// Let's enforce the toolbar to the limits of this Data Processor. A custom
+// toolbar set may be defined in the configuration file with more or less entries.
+FCKConfig.ToolbarSets["Default"] = [
+	['Source'],
+	['Bold','Italic','Underline','-','Link'],
+	['About']
+] ;


Property changes on: announcement/trunk/src/main/webapp/fckeditor/editor/plugins/bbcode/fckplugin.js
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/webapp/fckeditor/editor/plugins/dragresizetable/fckplugin.js
===================================================================
--- announcement/trunk/src/main/webapp/fckeditor/editor/plugins/dragresizetable/fckplugin.js	                        (rev 0)
+++ announcement/trunk/src/main/webapp/fckeditor/editor/plugins/dragresizetable/fckplugin.js	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,524 @@
+var FCKDragTableHandler =
+{
+	"_DragState" : 0,
+	"_LeftCell" : null,
+	"_RightCell" : null,
+	"_MouseMoveMode" : 0,	// 0 - find candidate cells for resizing, 1 - drag to resize
+	"_ResizeBar" : null,
+	"_OriginalX" : null,
+	"_MinimumX" : null,
+	"_MaximumX" : null,
+	"_LastX" : null,
+	"_TableMap" : null,
+	"_doc" : document,
+	"_IsInsideNode" : function( w, domNode, pos )
+	{
+		var myCoords = FCKTools.GetWindowPosition( w, domNode ) ;
+		var xMin = myCoords.x ;
+		var yMin = myCoords.y ;
+		var xMax = parseInt( xMin, 10 ) + parseInt( domNode.offsetWidth, 10 ) ;
+		var yMax = parseInt( yMin, 10 ) + parseInt( domNode.offsetHeight, 10 ) ;
+		if ( pos.x >= xMin && pos.x <= xMax && pos.y >= yMin && pos.y <= yMax )
+			return true;
+		return false;
+	},
+	"_GetBorderCells" : function( w, tableNode, tableMap, mouse )
+	{
+		// Enumerate all the cells in the table.
+		var cells = [] ;
+		for ( var i = 0 ; i < tableNode.rows.length ; i++ )
+		{
+			var r = tableNode.rows[i] ;
+			for ( var j = 0 ; j < r.cells.length ; j++ )
+				cells.push( r.cells[j] ) ;
+		}
+
+		if ( cells.length < 1 )
+			return null ;
+
+		// Get the cells whose right or left border is nearest to the mouse cursor's x coordinate.
+		var minRxDist = null ;
+		var lxDist = null ;
+		var minYDist = null ;
+		var rbCell = null ;
+		var lbCell = null ;
+		for ( var i = 0 ; i < cells.length ; i++ )
+		{
+			var pos = FCKTools.GetWindowPosition( w, cells[i] ) ;
+			var rightX = pos.x + parseInt( cells[i].clientWidth, 10 ) ;
+			var rxDist = mouse.x - rightX ;
+			var yDist = mouse.y - ( pos.y + ( cells[i].clientHeight / 2 ) ) ;
+			if ( minRxDist == null ||
+					( Math.abs( rxDist ) <= Math.abs( minRxDist ) &&
+					  ( minYDist == null || Math.abs( yDist ) <= Math.abs( minYDist ) ) ) )
+			{
+				minRxDist = rxDist ;
+				minYDist = yDist ;
+				rbCell = cells[i] ;
+			}
+		}
+		/*
+		var rowNode = FCKTools.GetElementAscensor( rbCell, "tr" ) ;
+		var cellIndex = rbCell.cellIndex + 1 ;
+		if ( cellIndex >= rowNode.cells.length )
+			return null ;
+		lbCell = rowNode.cells.item( cellIndex ) ;
+		*/
+		var rowIdx = rbCell.parentNode.rowIndex ;
+		var colIdx = FCKTableHandler._GetCellIndexSpan( tableMap, rowIdx, rbCell ) ;
+		var colSpan = isNaN( rbCell.colSpan ) ? 1 : rbCell.colSpan ;
+		lbCell = tableMap[rowIdx][colIdx + colSpan] ;
+
+		if ( ! lbCell )
+			return null ;
+
+		// Abort if too far from the border.
+		lxDist = mouse.x - FCKTools.GetWindowPosition( w, lbCell ).x ;
+		if ( lxDist < 0 && minRxDist < 0 && minRxDist < -2 )
+			return null ;
+		if ( lxDist > 0 && minRxDist > 0 && lxDist > 3 )
+			return null ;
+
+		return { "leftCell" : rbCell, "rightCell" : lbCell } ;
+	},
+	"_GetResizeBarPosition" : function()
+	{
+		var row = FCKTools.GetElementAscensor( this._RightCell, "tr" ) ;
+		return FCKTableHandler._GetCellIndexSpan( this._TableMap, row.rowIndex, this._RightCell ) ;
+	},
+	"_ResizeBarMouseDownListener" : function( evt )
+	{
+		if ( FCKDragTableHandler._LeftCell )
+			FCKDragTableHandler._MouseMoveMode = 1 ;
+		if ( FCKBrowserInfo.IsIE )
+			FCKDragTableHandler._ResizeBar.filters.item("DXImageTransform.Microsoft.Alpha").opacity = 50 ;
+		else
+			FCKDragTableHandler._ResizeBar.style.opacity = 0.5 ;
+		FCKDragTableHandler._OriginalX = evt.clientX ;
+
+		// Calculate maximum and minimum x-coordinate delta.
+		var borderIndex = FCKDragTableHandler._GetResizeBarPosition() ;
+		var offset = FCKDragTableHandler._GetIframeOffset();
+		var table = FCKTools.GetElementAscensor( FCKDragTableHandler._LeftCell, "table" );
+		var minX = null ;
+		var maxX = null ;
+		for ( var r = 0 ; r < FCKDragTableHandler._TableMap.length ; r++ )
+		{
+			var leftCell = FCKDragTableHandler._TableMap[r][borderIndex - 1] ;
+			var rightCell = FCKDragTableHandler._TableMap[r][borderIndex] ;
+			var leftPosition = FCKTools.GetWindowPosition( FCK.EditorWindow, leftCell ) ;
+			var rightPosition = FCKTools.GetWindowPosition( FCK.EditorWindow, rightCell ) ;
+			var leftPadding = FCKDragTableHandler._GetCellPadding( table, leftCell ) ;
+			var rightPadding = FCKDragTableHandler._GetCellPadding( table, rightCell ) ;
+			if ( minX == null || leftPosition.x + leftPadding > minX )
+				minX = leftPosition.x + leftPadding ;
+			if ( maxX == null || rightPosition.x + rightCell.clientWidth - rightPadding < maxX )
+				maxX = rightPosition.x + rightCell.clientWidth - rightPadding ;
+		}
+
+		FCKDragTableHandler._MinimumX = minX + offset.x ;
+		FCKDragTableHandler._MaximumX = maxX + offset.x ;
+		FCKDragTableHandler._LastX = null ;
+
+		if (evt.preventDefault)
+			evt.preventDefault();
+		else
+			evt.returnValue = false;
+	},
+	"_ResizeBarMouseUpListener" : function( evt )
+	{
+		FCKDragTableHandler._MouseMoveMode = 0 ;
+		FCKDragTableHandler._HideResizeBar() ;
+
+		if ( FCKDragTableHandler._LastX == null )
+			return ;
+
+		// Calculate the delta value.
+		var deltaX = FCKDragTableHandler._LastX - FCKDragTableHandler._OriginalX ;
+
+		// Then, build an array of current column width values.
+		// This algorithm can be very slow if the cells have insane colSpan values. (e.g. colSpan=1000).
+		var table = FCKTools.GetElementAscensor( FCKDragTableHandler._LeftCell, "table" ) ;
+		var colArray = [] ;
+		var tableMap = FCKDragTableHandler._TableMap ;
+		for ( var i = 0 ; i < tableMap.length ; i++ )
+		{
+			for ( var j = 0 ; j < tableMap[i].length ; j++ )
+			{
+				var cell = tableMap[i][j] ;
+				var width = FCKDragTableHandler._GetCellWidth( table, cell ) ;
+				var colSpan = isNaN( cell.colSpan) ? 1 : cell.colSpan ;
+				if ( colArray.length <= j )
+					colArray.push( { width : width / colSpan, colSpan : colSpan } ) ;
+				else
+				{
+					var guessItem = colArray[j] ;
+					if ( guessItem.colSpan > colSpan )
+					{
+						guessItem.width = width / colSpan ;
+						guessItem.colSpan = colSpan ;
+					}
+				}
+			}
+		}
+
+		// Find out the equivalent column index of the two cells selected for resizing.
+		colIndex = FCKDragTableHandler._GetResizeBarPosition() ;
+
+		// Note that colIndex must be at least 1 here, so it's safe to subtract 1 from it.
+		colIndex-- ;
+
+		// Modify the widths in the colArray according to the mouse coordinate delta value.
+		colArray[colIndex].width += deltaX ;
+		colArray[colIndex + 1].width -= deltaX ;
+
+		// Clear all cell widths, delete all <col> elements from the table.
+		for ( var r = 0 ; r < table.rows.length ; r++ )
+		{
+			var row = table.rows.item( r ) ;
+			for ( var c = 0 ; c < row.cells.length ; c++ )
+			{
+				var cell = row.cells.item( c ) ;
+				cell.width = "" ;
+				cell.style.width = "" ;
+			}
+		}
+		var colElements = table.getElementsByTagName( "col" ) ;
+		for ( var i = colElements.length - 1 ; i >= 0 ; i-- )
+			colElements[i].parentNode.removeChild( colElements[i] ) ;
+
+		// Set new cell widths.
+		var processedCells = [] ;
+		for ( var i = 0 ; i < tableMap.length ; i++ )
+		{
+			for ( var j = 0 ; j < tableMap[i].length ; j++ )
+			{
+				var cell = tableMap[i][j] ;
+				if ( cell._Processed )
+					continue ;
+				if ( tableMap[i][j-1] != cell )
+					cell.width = colArray[j].width ;
+				else
+					cell.width = parseInt( cell.width, 10 ) + parseInt( colArray[j].width, 10 ) ;
+				if ( tableMap[i][j+1] != cell )
+				{
+					processedCells.push( cell ) ;
+					cell._Processed = true ;
+				}
+			}
+		}
+		for ( var i = 0 ; i < processedCells.length ; i++ )
+		{
+			if ( FCKBrowserInfo.IsIE )
+				processedCells[i].removeAttribute( '_Processed' ) ;
+			else
+				delete processedCells[i]._Processed ;
+		}
+
+		FCKDragTableHandler._LastX = null ;
+	},
+	"_ResizeBarMouseMoveListener" : function( evt )
+	{
+		if ( FCKDragTableHandler._MouseMoveMode == 0 )
+			return FCKDragTableHandler._MouseFindHandler( FCK, evt ) ;
+		else
+			return FCKDragTableHandler._MouseDragHandler( FCK, evt ) ;
+	},
+	// Calculate the padding of a table cell.
+	// It returns the value of paddingLeft + paddingRight of a table cell.
+	// This function is used, in part, to calculate the width parameter that should be used for setting cell widths.
+	// The equation in question is clientWidth = paddingLeft + paddingRight + width.
+	// So that width = clientWidth - paddingLeft - paddingRight.
+	// The return value of this function must be pixel accurate acorss all supported browsers, so be careful if you need to modify it.
+	"_GetCellPadding" : function( table, cell )
+	{
+		var attrGuess = parseInt( table.cellPadding, 10 ) * 2 ;
+		var cssGuess = null ;
+		if ( typeof( window.getComputedStyle ) == "function" )
+		{
+			var styleObj = window.getComputedStyle( cell, null ) ;
+			cssGuess = parseInt( styleObj.getPropertyValue( "padding-left" ), 10 ) +
+				parseInt( styleObj.getPropertyValue( "padding-right" ), 10 ) ;
+		}
+		else
+			cssGuess = parseInt( cell.currentStyle.paddingLeft, 10 ) + parseInt (cell.currentStyle.paddingRight, 10 ) ;
+
+		var cssRuntime = cell.style.padding ;
+		if ( isFinite( cssRuntime ) )
+			cssGuess = parseInt( cssRuntime, 10 ) * 2 ;
+		else
+		{
+			cssRuntime = cell.style.paddingLeft ;
+			if ( isFinite( cssRuntime ) )
+				cssGuess = parseInt( cssRuntime, 10 ) ;
+			cssRuntime = cell.style.paddingRight ;
+			if ( isFinite( cssRuntime ) )
+				cssGuess += parseInt( cssRuntime, 10 ) ;
+		}
+
+		attrGuess = parseInt( attrGuess, 10 ) ;
+		cssGuess = parseInt( cssGuess, 10 ) ;
+		if ( isNaN( attrGuess ) )
+			attrGuess = 0 ;
+		if ( isNaN( cssGuess ) )
+			cssGuess = 0 ;
+		return Math.max( attrGuess, cssGuess ) ;
+	},
+	// Calculate the real width of the table cell.
+	// The real width of the table cell is the pixel width that you can set to the width attribute of the table cell and after
+	// that, the table cell should be of exactly the same width as before.
+	// The real width of a table cell can be calculated as:
+	// width = clientWidth - paddingLeft - paddingRight.
+	"_GetCellWidth" : function( table, cell )
+	{
+		var clientWidth = cell.clientWidth ;
+		if ( isNaN( clientWidth ) )
+			clientWidth = 0 ;
+		return clientWidth - this._GetCellPadding( table, cell ) ;
+	},
+	"MouseMoveListener" : function( FCK, evt )
+	{
+		if ( FCKDragTableHandler._MouseMoveMode == 0 )
+			return FCKDragTableHandler._MouseFindHandler( FCK, evt ) ;
+		else
+			return FCKDragTableHandler._MouseDragHandler( FCK, evt ) ;
+	},
+	"_MouseFindHandler" : function( FCK, evt )
+	{
+		if ( FCK.MouseDownFlag )
+			return ;
+		var node = evt.srcElement || evt.target ;
+		try
+		{
+			if ( ! node || node.nodeType != 1 )
+			{
+				this._HideResizeBar() ;
+				return ;
+			}
+		}
+		catch ( e )
+		{
+			this._HideResizeBar() ;
+			return ;
+		}
+
+		// Since this function might be called from the editing area iframe or the outer fckeditor iframe,
+		// the mouse point coordinates from evt.clientX/Y can have different reference points.
+		// We need to resolve the mouse pointer position relative to the editing area iframe.
+		var mouseX = evt.clientX ;
+		var mouseY = evt.clientY ;
+		if ( FCKTools.GetElementDocument( node ) == document )
+		{
+			var offset = this._GetIframeOffset() ;
+			mouseX -= offset.x ;
+			mouseY -= offset.y ;
+		}
+
+
+		if ( this._ResizeBar && this._LeftCell )
+		{
+			var leftPos = FCKTools.GetWindowPosition( FCK.EditorWindow, this._LeftCell ) ;
+			var rightPos = FCKTools.GetWindowPosition( FCK.EditorWindow, this._RightCell ) ;
+			var rxDist = mouseX - ( leftPos.x + this._LeftCell.clientWidth ) ;
+			var lxDist = mouseX - rightPos.x ;
+			var inRangeFlag = false ;
+			if ( lxDist >= 0 && rxDist <= 0 )
+				inRangeFlag = true ;
+			else if ( rxDist > 0 && lxDist <= 3 )
+				inRangeFlag = true ;
+			else if ( lxDist < 0 && rxDist >= -2 )
+				inRangeFlag = true ;
+			if ( inRangeFlag )
+			{
+				this._ShowResizeBar( FCK.EditorWindow,
+					FCKTools.GetElementAscensor( this._LeftCell, "table" ),
+					{ "x" : mouseX, "y" : mouseY } ) ;
+				return ;
+			}
+		}
+
+		var tagName = node.tagName.toLowerCase() ;
+		if ( tagName != "table" && tagName != "td" && tagName != "th" )
+		{
+			if ( this._LeftCell )
+				this._LeftCell = this._RightCell = this._TableMap = null ;
+			this._HideResizeBar() ;
+			return ;
+		}
+		node = FCKTools.GetElementAscensor( node, "table" ) ;
+		var tableMap = FCKTableHandler._CreateTableMap( node ) ;
+		var cellTuple = this._GetBorderCells( FCK.EditorWindow, node, tableMap, { "x" : mouseX, "y" : mouseY } ) ;
+
+		if ( cellTuple == null )
+		{
+			if ( this._LeftCell )
+				this._LeftCell = this._RightCell = this._TableMap = null ;
+			this._HideResizeBar() ;
+		}
+		else
+		{
+			this._LeftCell = cellTuple["leftCell"] ;
+			this._RightCell = cellTuple["rightCell"] ;
+			this._TableMap = tableMap ;
+			this._ShowResizeBar( FCK.EditorWindow,
+					FCKTools.GetElementAscensor( this._LeftCell, "table" ),
+					{ "x" : mouseX, "y" : mouseY } ) ;
+		}
+	},
+	"_MouseDragHandler" : function( FCK, evt )
+	{
+		var mouse = { "x" : evt.clientX, "y" : evt.clientY } ;
+
+		// Convert mouse coordinates in reference to the outer iframe.
+		var node = evt.srcElement || evt.target ;
+		if ( FCKTools.GetElementDocument( node ) == FCK.EditorDocument )
+		{
+			var offset = this._GetIframeOffset() ;
+			mouse.x += offset.x ;
+			mouse.y += offset.y ;
+		}
+
+		// Calculate the mouse position delta and see if we've gone out of range.
+		if ( mouse.x >= this._MaximumX - 5 )
+			mouse.x = this._MaximumX - 5 ;
+		if ( mouse.x <= this._MinimumX + 5 )
+			mouse.x = this._MinimumX + 5 ;
+
+		var docX = mouse.x + FCKTools.GetScrollPosition( window ).X ;
+		this._ResizeBar.style.left = ( docX - this._ResizeBar.offsetWidth / 2 ) + "px" ;
+		this._LastX = mouse.x ;
+	},
+	"_ShowResizeBar" : function( w, table, mouse )
+	{
+		if ( this._ResizeBar == null )
+		{
+			this._ResizeBar = this._doc.createElement( "div" ) ;
+			var paddingBar = this._ResizeBar ;
+			var paddingStyles = { 'position' : 'absolute', 'cursor' : 'e-resize' } ;
+			if ( FCKBrowserInfo.IsIE )
+				paddingStyles.filter = "progid:DXImageTransform.Microsoft.Alpha(opacity=10,enabled=true)" ;
+			else
+				paddingStyles.opacity = 0.10 ;
+			FCKDomTools.SetElementStyles( paddingBar, paddingStyles ) ;
+			this._avoidStyles( paddingBar );
+			paddingBar.setAttribute('_fcktemp', true);
+			this._doc.body.appendChild( paddingBar ) ;
+			FCKTools.AddEventListener( paddingBar, "mousemove", this._ResizeBarMouseMoveListener ) ;
+			FCKTools.AddEventListener( paddingBar, "mousedown", this._ResizeBarMouseDownListener ) ;
+			FCKTools.AddEventListener( document, "mouseup", this._ResizeBarMouseUpListener ) ;
+			FCKTools.AddEventListener( FCK.EditorDocument, "mouseup", this._ResizeBarMouseUpListener ) ;
+
+			// IE doesn't let the tranparent part of the padding block to receive mouse events unless there's something inside.
+			// So we need to create a spacer image to fill the block up.
+			var filler = this._doc.createElement( "img" ) ;
+			filler.setAttribute('_fcktemp', true);
+			filler.border = 0 ;
+			filler.src = FCKConfig.BasePath + "images/spacer.gif" ;
+			filler.style.position = "absolute" ;
+			paddingBar.appendChild( filler ) ;
+
+			// Disable drag and drop, and selection for the filler image.
+			var disabledListener = function( evt )
+			{
+				if ( evt.preventDefault )
+					evt.preventDefault() ;
+				else
+					evt.returnValue = false ;
+			}
+			FCKTools.AddEventListener( filler, "dragstart", disabledListener ) ;
+			FCKTools.AddEventListener( filler, "selectstart", disabledListener ) ;
+		}
+
+		var paddingBar = this._ResizeBar ;
+		var offset = this._GetIframeOffset() ;
+		var tablePos = this._GetTablePosition( w, table ) ;
+		var barHeight = table.offsetHeight ;
+		var barTop = offset.y + tablePos.y ;
+		// Do not let the resize bar intrude into the toolbar area.
+		if ( tablePos.y < 0 )
+		{
+			barHeight += tablePos.y ;
+			barTop -= tablePos.y ;
+		}
+		var bw = parseInt( table.border, 10 ) ;
+		if ( isNaN( bw ) )
+			bw = 0 ;
+		var cs = parseInt( table.cellSpacing, 10 ) ;
+		if ( isNaN( cs ) )
+			cs = 0 ;
+		var barWidth = Math.max( bw+100, cs+100 ) ;
+		var paddingStyles =
+		{
+			'top'		: barTop + 'px',
+			'height'	: barHeight + 'px',
+			'width'		: barWidth + 'px',
+			'left'		: ( offset.x + mouse.x + FCKTools.GetScrollPosition( w ).X - barWidth / 2 ) + 'px'
+		} ;
+		if ( FCKBrowserInfo.IsIE )
+			paddingBar.filters.item("DXImageTransform.Microsoft.Alpha").opacity = 10 ;
+		else
+			paddingStyles.opacity = 0.1 ;
+
+		FCKDomTools.SetElementStyles( paddingBar, paddingStyles ) ;
+		var filler = paddingBar.getElementsByTagName( "img" )[0] ;
+
+		FCKDomTools.SetElementStyles( filler,
+			{
+				width	: paddingBar.offsetWidth + 'px',
+				height	: barHeight + 'px'
+			} ) ;
+
+		barWidth = Math.max( bw, cs, 3 ) ;
+		var visibleBar = null ;
+		if ( paddingBar.getElementsByTagName( "div" ).length < 1 )
+		{
+			visibleBar = this._doc.createElement( "div" ) ;
+			this._avoidStyles( visibleBar );
+			visibleBar.setAttribute('_fcktemp', true);
+			paddingBar.appendChild( visibleBar ) ;
+		}
+		else
+			visibleBar = paddingBar.getElementsByTagName( "div" )[0] ;
+
+		FCKDomTools.SetElementStyles( visibleBar,
+			{
+				position		: 'absolute',
+				backgroundColor	: 'blue',
+				width			: barWidth + 'px',
+				height			: barHeight + 'px',
+				left			: '50px',
+				top				: '0px'
+			} ) ;
+	},
+	"_HideResizeBar" : function()
+	{
+		if ( this._ResizeBar )
+			// IE bug: display : none does not hide the resize bar for some reason.
+			// so set the position to somewhere invisible.
+			FCKDomTools.SetElementStyles( this._ResizeBar,
+				{
+					top		: '-100000px',
+					left	: '-100000px'
+				} ) ;
+	},
+	"_GetIframeOffset" : function ()
+	{
+		return FCKTools.GetDocumentPosition( window, FCK.EditingArea.IFrame ) ;
+	},
+	"_GetTablePosition" : function ( w, table )
+	{
+		return FCKTools.GetWindowPosition( w, table ) ;
+	},
+	"_avoidStyles" : function( element )
+	{
+		FCKDomTools.SetElementStyles( element,
+			{
+				padding		: '0',
+				backgroundImage	: 'none',
+				border		: '0'
+			} ) ;
+	}
+
+};
+
+FCK.Events.AttachEvent( "OnMouseMove", FCKDragTableHandler.MouseMoveListener ) ;


Property changes on: announcement/trunk/src/main/webapp/fckeditor/editor/plugins/dragresizetable/fckplugin.js
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/webapp/fckeditor/editor/plugins/placeholder/fck_placeholder.html
===================================================================
--- announcement/trunk/src/main/webapp/fckeditor/editor/plugins/placeholder/fck_placeholder.html	                        (rev 0)
+++ announcement/trunk/src/main/webapp/fckeditor/editor/plugins/placeholder/fck_placeholder.html	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,105 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<!--
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2008 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * Placeholder Plugin.
+-->
+<html>
+	<head>
+		<title>Placeholder Properties</title>
+		<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+		<meta content="noindex, nofollow" name="robots">
+		<script src="../../dialog/common/fck_dialog_common.js" type="text/javascript"></script>
+		<script language="javascript">
+
+var dialog = window.parent ;
+var oEditor = dialog.InnerDialogLoaded() ;
+var FCKLang = oEditor.FCKLang ;
+var FCKPlaceholders = oEditor.FCKPlaceholders ;
+
+window.onload = function ()
+{
+	// First of all, translate the dialog box texts
+	oEditor.FCKLanguageManager.TranslatePage( document ) ;
+
+	LoadSelected() ;
+
+	// Show the "Ok" button.
+	dialog.SetOkButton( true ) ;
+
+	// Select text field on load.
+	SelectField( 'txtName' ) ;
+}
+
+var eSelected = dialog.Selection.GetSelectedElement() ;
+
+function LoadSelected()
+{
+	if ( !eSelected )
+		return ;
+
+	if ( eSelected.tagName == 'SPAN' && eSelected._fckplaceholder )
+		document.getElementById('txtName').value = eSelected._fckplaceholder ;
+	else
+		eSelected == null ;
+}
+
+function Ok()
+{
+	var sValue = document.getElementById('txtName').value ;
+
+	if ( eSelected && eSelected._fckplaceholder == sValue )
+		return true ;
+
+	if ( sValue.length == 0 )
+	{
+		alert( FCKLang.PlaceholderErrNoName ) ;
+		return false ;
+	}
+
+	if ( FCKPlaceholders.Exist( sValue ) )
+	{
+		alert( FCKLang.PlaceholderErrNameInUse ) ;
+		return false ;
+	}
+
+	FCKPlaceholders.Add( sValue ) ;
+	return true ;
+}
+
+		</script>
+	</head>
+	<body scroll="no" style="OVERFLOW: hidden">
+		<table height="100%" cellSpacing="0" cellPadding="0" width="100%" border="0">
+			<tr>
+				<td>
+					<table cellSpacing="0" cellPadding="0" align="center" border="0">
+						<tr>
+							<td>
+								<span fckLang="PlaceholderDlgName">Placeholder Name</span><br>
+								<input id="txtName" type="text">
+							</td>
+						</tr>
+					</table>
+				</td>
+			</tr>
+		</table>
+	</body>
+</html>


Property changes on: announcement/trunk/src/main/webapp/fckeditor/editor/plugins/placeholder/fck_placeholder.html
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/webapp/fckeditor/editor/plugins/placeholder/fckplugin.js
===================================================================
--- announcement/trunk/src/main/webapp/fckeditor/editor/plugins/placeholder/fckplugin.js	                        (rev 0)
+++ announcement/trunk/src/main/webapp/fckeditor/editor/plugins/placeholder/fckplugin.js	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,187 @@
+/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2008 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * Plugin to insert "Placeholders" in the editor.
+ */
+
+// Register the related command.
+FCKCommands.RegisterCommand( 'Placeholder', new FCKDialogCommand( 'Placeholder', FCKLang.PlaceholderDlgTitle, FCKPlugins.Items['placeholder'].Path + 'fck_placeholder.html', 340, 160 ) ) ;
+
+// Create the "Plaholder" toolbar button.
+var oPlaceholderItem = new FCKToolbarButton( 'Placeholder', FCKLang.PlaceholderBtn ) ;
+oPlaceholderItem.IconPath = FCKPlugins.Items['placeholder'].Path + 'placeholder.gif' ;
+
+FCKToolbarItems.RegisterItem( 'Placeholder', oPlaceholderItem ) ;
+
+
+// The object used for all Placeholder operations.
+var FCKPlaceholders = new Object() ;
+
+// Add a new placeholder at the actual selection.
+FCKPlaceholders.Add = function( name )
+{
+	var oSpan = FCK.InsertElement( 'span' ) ;
+	this.SetupSpan( oSpan, name ) ;
+}
+
+FCKPlaceholders.SetupSpan = function( span, name )
+{
+	span.innerHTML = '[[ ' + name + ' ]]' ;
+
+	span.style.backgroundColor = '#ffff00' ;
+	span.style.color = '#000000' ;
+
+	if ( FCKBrowserInfo.IsGecko )
+		span.style.cursor = 'default' ;
+
+	span._fckplaceholder = name ;
+	span.contentEditable = false ;
+
+	// To avoid it to be resized.
+	span.onresizestart = function()
+	{
+		FCK.EditorWindow.event.returnValue = false ;
+		return false ;
+	}
+}
+
+// On Gecko we must do this trick so the user select all the SPAN when clicking on it.
+FCKPlaceholders._SetupClickListener = function()
+{
+	FCKPlaceholders._ClickListener = function( e )
+	{
+		if ( e.target.tagName == 'SPAN' && e.target._fckplaceholder )
+			FCKSelection.SelectNode( e.target ) ;
+	}
+
+	FCK.EditorDocument.addEventListener( 'click', FCKPlaceholders._ClickListener, true ) ;
+}
+
+// Open the Placeholder dialog on double click.
+FCKPlaceholders.OnDoubleClick = function( span )
+{
+	if ( span.tagName == 'SPAN' && span._fckplaceholder )
+		FCKCommands.GetCommand( 'Placeholder' ).Execute() ;
+}
+
+FCK.RegisterDoubleClickHandler( FCKPlaceholders.OnDoubleClick, 'SPAN' ) ;
+
+// Check if a Placholder name is already in use.
+FCKPlaceholders.Exist = function( name )
+{
+	var aSpans = FCK.EditorDocument.getElementsByTagName( 'SPAN' ) ;
+
+	for ( var i = 0 ; i < aSpans.length ; i++ )
+	{
+		if ( aSpans[i]._fckplaceholder == name )
+			return true ;
+	}
+
+	return false ;
+}
+
+if ( FCKBrowserInfo.IsIE )
+{
+	FCKPlaceholders.Redraw = function()
+	{
+		if ( FCK.EditMode != FCK_EDITMODE_WYSIWYG )
+			return ;
+
+		var aPlaholders = FCK.EditorDocument.body.innerText.match( /\[\[[^\[\]]+\]\]/g ) ;
+		if ( !aPlaholders )
+			return ;
+
+		var oRange = FCK.EditorDocument.body.createTextRange() ;
+
+		for ( var i = 0 ; i < aPlaholders.length ; i++ )
+		{
+			if ( oRange.findText( aPlaholders[i] ) )
+			{
+				var sName = aPlaholders[i].match( /\[\[\s*([^\]]*?)\s*\]\]/ )[1] ;
+				oRange.pasteHTML( '<span style="color: #000000; background-color: #ffff00" contenteditable="false" _fckplaceholder="' + sName + '">' + aPlaholders[i] + '</span>' ) ;
+			}
+		}
+	}
+}
+else
+{
+	FCKPlaceholders.Redraw = function()
+	{
+		if ( FCK.EditMode != FCK_EDITMODE_WYSIWYG )
+			return ;
+
+		var oInteractor = FCK.EditorDocument.createTreeWalker( FCK.EditorDocument.body, NodeFilter.SHOW_TEXT, FCKPlaceholders._AcceptNode, true ) ;
+
+		var	aNodes = new Array() ;
+
+		while ( ( oNode = oInteractor.nextNode() ) )
+		{
+			aNodes[ aNodes.length ] = oNode ;
+		}
+
+		for ( var n = 0 ; n < aNodes.length ; n++ )
+		{
+			var aPieces = aNodes[n].nodeValue.split( /(\[\[[^\[\]]+\]\])/g ) ;
+
+			for ( var i = 0 ; i < aPieces.length ; i++ )
+			{
+				if ( aPieces[i].length > 0 )
+				{
+					if ( aPieces[i].indexOf( '[[' ) == 0 )
+					{
+						var sName = aPieces[i].match( /\[\[\s*([^\]]*?)\s*\]\]/ )[1] ;
+
+						var oSpan = FCK.EditorDocument.createElement( 'span' ) ;
+						FCKPlaceholders.SetupSpan( oSpan, sName ) ;
+
+						aNodes[n].parentNode.insertBefore( oSpan, aNodes[n] ) ;
+					}
+					else
+						aNodes[n].parentNode.insertBefore( FCK.EditorDocument.createTextNode( aPieces[i] ) , aNodes[n] ) ;
+				}
+			}
+
+			aNodes[n].parentNode.removeChild( aNodes[n] ) ;
+		}
+
+		FCKPlaceholders._SetupClickListener() ;
+	}
+
+	FCKPlaceholders._AcceptNode = function( node )
+	{
+		if ( /\[\[[^\[\]]+\]\]/.test( node.nodeValue ) )
+			return NodeFilter.FILTER_ACCEPT ;
+		else
+			return NodeFilter.FILTER_SKIP ;
+	}
+}
+
+FCK.Events.AttachEvent( 'OnAfterSetHTML', FCKPlaceholders.Redraw ) ;
+
+// We must process the SPAN tags to replace then with the real resulting value of the placeholder.
+FCKXHtml.TagProcessors['span'] = function( node, htmlNode )
+{
+	if ( htmlNode._fckplaceholder )
+		node = FCKXHtml.XML.createTextNode( '[[' + htmlNode._fckplaceholder + ']]' ) ;
+	else
+		FCKXHtml._AppendChildNodes( node, htmlNode, false ) ;
+
+	return node ;
+}


Property changes on: announcement/trunk/src/main/webapp/fckeditor/editor/plugins/placeholder/fckplugin.js
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/webapp/fckeditor/editor/plugins/placeholder/lang/de.js
===================================================================
--- announcement/trunk/src/main/webapp/fckeditor/editor/plugins/placeholder/lang/de.js	                        (rev 0)
+++ announcement/trunk/src/main/webapp/fckeditor/editor/plugins/placeholder/lang/de.js	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,27 @@
+/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2008 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * Placholder German language file.
+ */
+FCKLang.PlaceholderBtn			= 'Einfügen/editieren Platzhalter' ;
+FCKLang.PlaceholderDlgTitle		= 'Platzhalter Eigenschaften' ;
+FCKLang.PlaceholderDlgName		= 'Platzhalter Name' ;
+FCKLang.PlaceholderErrNoName	= 'Bitte den Namen des Platzhalters schreiben' ;
+FCKLang.PlaceholderErrNameInUse	= 'Der angegebene Namen ist schon in Gebrauch' ;


Property changes on: announcement/trunk/src/main/webapp/fckeditor/editor/plugins/placeholder/lang/de.js
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/webapp/fckeditor/editor/plugins/placeholder/lang/en.js
===================================================================
--- announcement/trunk/src/main/webapp/fckeditor/editor/plugins/placeholder/lang/en.js	                        (rev 0)
+++ announcement/trunk/src/main/webapp/fckeditor/editor/plugins/placeholder/lang/en.js	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,27 @@
+/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2008 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * Placholder English language file.
+ */
+FCKLang.PlaceholderBtn			= 'Insert/Edit Placeholder' ;
+FCKLang.PlaceholderDlgTitle		= 'Placeholder Properties' ;
+FCKLang.PlaceholderDlgName		= 'Placeholder Name' ;
+FCKLang.PlaceholderErrNoName	= 'Please type the placeholder name' ;
+FCKLang.PlaceholderErrNameInUse	= 'The specified name is already in use' ;


Property changes on: announcement/trunk/src/main/webapp/fckeditor/editor/plugins/placeholder/lang/en.js
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/webapp/fckeditor/editor/plugins/placeholder/lang/es.js
===================================================================
--- announcement/trunk/src/main/webapp/fckeditor/editor/plugins/placeholder/lang/es.js	                        (rev 0)
+++ announcement/trunk/src/main/webapp/fckeditor/editor/plugins/placeholder/lang/es.js	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,27 @@
+/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2008 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * Placholder Spanish language file.
+ */
+FCKLang.PlaceholderBtn			= 'Insertar/Editar contenedor' ;
+FCKLang.PlaceholderDlgTitle		= 'Propiedades del contenedor ' ;
+FCKLang.PlaceholderDlgName		= 'Nombre de contenedor' ;
+FCKLang.PlaceholderErrNoName	= 'Por favor escriba el nombre de contenedor' ;
+FCKLang.PlaceholderErrNameInUse	= 'El nombre especificado ya esta en uso' ;


Property changes on: announcement/trunk/src/main/webapp/fckeditor/editor/plugins/placeholder/lang/es.js
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/webapp/fckeditor/editor/plugins/placeholder/lang/fr.js
===================================================================
--- announcement/trunk/src/main/webapp/fckeditor/editor/plugins/placeholder/lang/fr.js	                        (rev 0)
+++ announcement/trunk/src/main/webapp/fckeditor/editor/plugins/placeholder/lang/fr.js	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,27 @@
+/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2008 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * Placeholder French language file.
+ */
+FCKLang.PlaceholderBtn			= "Insérer/Modifier l'Espace réservé" ;
+FCKLang.PlaceholderDlgTitle		= "Propriétés de l'Espace réservé" ;
+FCKLang.PlaceholderDlgName		= "Nom de l'Espace réservé" ;
+FCKLang.PlaceholderErrNoName	= "Veuillez saisir le nom de l'Espace réservé" ;
+FCKLang.PlaceholderErrNameInUse	= "Ce nom est déjà utilisé" ;


Property changes on: announcement/trunk/src/main/webapp/fckeditor/editor/plugins/placeholder/lang/fr.js
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/webapp/fckeditor/editor/plugins/placeholder/lang/it.js
===================================================================
--- announcement/trunk/src/main/webapp/fckeditor/editor/plugins/placeholder/lang/it.js	                        (rev 0)
+++ announcement/trunk/src/main/webapp/fckeditor/editor/plugins/placeholder/lang/it.js	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,27 @@
+/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2008 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * Placholder Italian language file.
+ */
+FCKLang.PlaceholderBtn			= 'Aggiungi/Modifica Placeholder' ;
+FCKLang.PlaceholderDlgTitle		= 'Proprietà del Placeholder' ;
+FCKLang.PlaceholderDlgName		= 'Nome del Placeholder' ;
+FCKLang.PlaceholderErrNoName	= 'Digitare il nome del placeholder' ;
+FCKLang.PlaceholderErrNameInUse	= 'Il nome inserito è già in uso' ;


Property changes on: announcement/trunk/src/main/webapp/fckeditor/editor/plugins/placeholder/lang/it.js
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/webapp/fckeditor/editor/plugins/placeholder/lang/pl.js
===================================================================
--- announcement/trunk/src/main/webapp/fckeditor/editor/plugins/placeholder/lang/pl.js	                        (rev 0)
+++ announcement/trunk/src/main/webapp/fckeditor/editor/plugins/placeholder/lang/pl.js	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,27 @@
+/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2008 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * Placholder Polish language file.
+ */
+FCKLang.PlaceholderBtn			= 'Wstaw/Edytuj nagłówek' ;
+FCKLang.PlaceholderDlgTitle		= 'Właśności nagłówka' ;
+FCKLang.PlaceholderDlgName		= 'Nazwa nagłówka' ;
+FCKLang.PlaceholderErrNoName	= 'Proszę wprowadzić nazwę nagłówka' ;
+FCKLang.PlaceholderErrNameInUse	= 'Podana nazwa jest już w użyciu' ;


Property changes on: announcement/trunk/src/main/webapp/fckeditor/editor/plugins/placeholder/lang/pl.js
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/webapp/fckeditor/editor/plugins/placeholder/placeholder.gif
===================================================================
(Binary files differ)


Property changes on: announcement/trunk/src/main/webapp/fckeditor/editor/plugins/placeholder/placeholder.gif
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: announcement/trunk/src/main/webapp/fckeditor/editor/plugins/simplecommands/fckplugin.js
===================================================================
--- announcement/trunk/src/main/webapp/fckeditor/editor/plugins/simplecommands/fckplugin.js	                        (rev 0)
+++ announcement/trunk/src/main/webapp/fckeditor/editor/plugins/simplecommands/fckplugin.js	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,29 @@
+/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2008 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * This plugin register Toolbar items for the combos modifying the style to
+ * not show the box.
+ */
+
+FCKToolbarItems.RegisterItem( 'SourceSimple'	, new FCKToolbarButton( 'Source', FCKLang.Source, null, FCK_TOOLBARITEM_ONLYICON, true, true, 1 ) ) ;
+FCKToolbarItems.RegisterItem( 'StyleSimple'		, new FCKToolbarStyleCombo( null, FCK_TOOLBARITEM_ONLYTEXT ) ) ;
+FCKToolbarItems.RegisterItem( 'FontNameSimple'	, new FCKToolbarFontsCombo( null, FCK_TOOLBARITEM_ONLYTEXT ) ) ;
+FCKToolbarItems.RegisterItem( 'FontSizeSimple'	, new FCKToolbarFontSizeCombo( null, FCK_TOOLBARITEM_ONLYTEXT ) ) ;
+FCKToolbarItems.RegisterItem( 'FontFormatSimple', new FCKToolbarFontFormatCombo( null, FCK_TOOLBARITEM_ONLYTEXT ) ) ;


Property changes on: announcement/trunk/src/main/webapp/fckeditor/editor/plugins/simplecommands/fckplugin.js
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/webapp/fckeditor/editor/plugins/tablecommands/fckplugin.js
===================================================================
--- announcement/trunk/src/main/webapp/fckeditor/editor/plugins/tablecommands/fckplugin.js	                        (rev 0)
+++ announcement/trunk/src/main/webapp/fckeditor/editor/plugins/tablecommands/fckplugin.js	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,33 @@
+/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2008 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * This plugin register the required Toolbar items to be able to insert the
+ * table commands in the toolbar.
+ */
+
+FCKToolbarItems.RegisterItem( 'TableInsertRowAfter'		, new FCKToolbarButton( 'TableInsertRowAfter'	, FCKLang.InsertRowAfter, null, null, null, true, 62 ) ) ;
+FCKToolbarItems.RegisterItem( 'TableDeleteRows'		, new FCKToolbarButton( 'TableDeleteRows'	, FCKLang.DeleteRows, null, null, null, true, 63 ) ) ;
+FCKToolbarItems.RegisterItem( 'TableInsertColumnAfter'	, new FCKToolbarButton( 'TableInsertColumnAfter'	, FCKLang.InsertColumnAfter, null, null, null, true, 64 ) ) ;
+FCKToolbarItems.RegisterItem( 'TableDeleteColumns'	, new FCKToolbarButton( 'TableDeleteColumns', FCKLang.DeleteColumns, null, null, null, true, 65 ) ) ;
+FCKToolbarItems.RegisterItem( 'TableInsertCellAfter'		, new FCKToolbarButton( 'TableInsertCellAfter'	, FCKLang.InsertCellAfter, null, null, null, true, 58 ) ) ;
+FCKToolbarItems.RegisterItem( 'TableDeleteCells'	, new FCKToolbarButton( 'TableDeleteCells'	, FCKLang.DeleteCells, null, null, null, true, 59 ) ) ;
+FCKToolbarItems.RegisterItem( 'TableMergeCells'		, new FCKToolbarButton( 'TableMergeCells'	, FCKLang.MergeCells, null, null, null, true, 60 ) ) ;
+FCKToolbarItems.RegisterItem( 'TableHorizontalSplitCell'		, new FCKToolbarButton( 'TableHorizontalSplitCell'	, FCKLang.SplitCell, null, null, null, true, 61 ) ) ;
+FCKToolbarItems.RegisterItem( 'TableCellProp'		, new FCKToolbarButton( 'TableCellProp'	, FCKLang.CellProperties, null, null, null, true, 57 ) ) ;


Property changes on: announcement/trunk/src/main/webapp/fckeditor/editor/plugins/tablecommands/fckplugin.js
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/webapp/fckeditor/editor/skins/_fckviewstrips.html
===================================================================
--- announcement/trunk/src/main/webapp/fckeditor/editor/skins/_fckviewstrips.html	                        (rev 0)
+++ announcement/trunk/src/main/webapp/fckeditor/editor/skins/_fckviewstrips.html	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,121 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<!--
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2008 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * Useful page that enumerates all icons in the skins strips.
+-->
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+	<title>FCKeditor - View Icons Strips</title>
+	<style type="text/css">
+		.TB_Button_Image
+		{
+			overflow: hidden;
+			width: 16px;
+			height: 16px;
+			margin: 3px;
+			background-repeat: no-repeat;
+		}
+
+		.TB_Button_Image img
+		{
+			position: relative;
+		}
+	</style>
+	<script type="text/javascript">
+
+window.onload = function()
+{
+	var eImg1 = document.createElement( 'img' ) ;
+	eImg1.onload = Img_OnLoad ;
+	eImg1.src = 'default/fck_strip.gif' ;
+
+	var eImg2 = document.createElement( 'img' ) ;
+	eImg2.onload = Img_OnLoad ;
+	eImg2.src = 'office2003/fck_strip.gif' ;
+
+	var eImg3 = document.createElement( 'img' ) ;
+	eImg3.onload = Img_OnLoad ;
+	eImg3.src = 'silver/fck_strip.gif' ;
+}
+
+var iTotalStrips = 3 ;
+var iMaxHeight = 0 ;
+
+function Img_OnLoad()
+{
+	if ( iMaxHeight < this.height )
+		iMaxHeight = this.height ;
+
+	iTotalStrips-- ;
+
+	if ( iTotalStrips == 0 )
+		LoadIcons( iMaxHeight / 16 ) ;
+}
+
+function LoadIcons( total )
+{
+	var xIconsTable = document.getElementById( 'xIconsTable' ) ;
+
+	for ( var i = 0 ; i < total ; i++ )
+	{
+		var eRow = xIconsTable.insertRow(-1) ;
+
+		var eCell = eRow.insertCell(-1) ;
+		eCell.innerHTML = i + 1 ;
+
+		eCell = eRow.insertCell(-1) ;
+		eCell.align = 'center' ;
+		eCell.style.border = '#dcdcdc 1px solid' ;
+		eCell.innerHTML = '<div class="TB_Button_Image"><img src="default/fck_strip.gif" style="top:-' + ( i * 16 ) + 'px;"><\/div>' ;
+
+		eCell = eRow.insertCell(-1) ;
+		eCell.align = 'center' ;
+		eCell.style.border = '#dcdcdc 1px solid' ;
+		eCell.innerHTML = '<div class="TB_Button_Image"><img src="office2003/fck_strip.gif" style="top:-' + ( i * 16 ) + 'px;"><\/div>' ;
+
+		eCell = eRow.insertCell(-1) ;
+		eCell.align = 'center' ;
+		eCell.style.border = '#dcdcdc 1px solid' ;
+		eCell.innerHTML = '<div class="TB_Button_Image"><img src="silver/fck_strip.gif" style="top:-' + ( i * 16 ) + 'px;"><\/div>' ;
+	}
+}
+
+	</script>
+</head>
+<body>
+	<table id="xIconsTable">
+		<tr>
+			<td rowspan="2">
+				Index</td>
+			<td align="center" colspan="3">
+				Skins</td>
+		</tr>
+		<tr>
+			<td width="80" align="center">
+				default</td>
+			<td width="80" align="center">
+				office2003</td>
+			<td width="80" align="center">
+				silver</td>
+		</tr>
+	</table>
+</body>
+</html>


Property changes on: announcement/trunk/src/main/webapp/fckeditor/editor/skins/_fckviewstrips.html
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/webapp/fckeditor/editor/skins/default/fck_dialog.css
===================================================================
--- announcement/trunk/src/main/webapp/fckeditor/editor/skins/default/fck_dialog.css	                        (rev 0)
+++ announcement/trunk/src/main/webapp/fckeditor/editor/skins/default/fck_dialog.css	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,402 @@
+/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2008 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * Styles used by the dialog boxes.
+ */
+
+html, body
+{
+	background-color: transparent;
+	margin: 0px;
+	padding: 0px;
+}
+
+body
+{
+	padding: 10px;
+}
+
+body, td, input, select, textarea
+{
+	font-size: 11px;
+	font-family: 'Microsoft Sans Serif' , Arial, Helvetica, Verdana;
+}
+
+body, .BackColor
+{
+	background-color: #f1f1e3;
+}
+
+.PopupBody
+{
+	height: 100%;
+	width: 100%;
+	overflow: hidden;
+	background-color: transparent;
+	padding: 0px;
+}
+
+#header
+{
+	cursor: move;
+}
+
+.PopupTitle
+{
+	font-weight: bold;
+	font-size: 14pt;
+	color: #737357;
+	background-color: #e3e3c7;
+	padding: 3px 10px 3px 10px;
+}
+
+.PopupButtons
+{
+	position: absolute;
+	right: 0px;
+	left: 0px;
+	bottom: 0px;
+	border-top: #d5d59d 1px solid;
+	background-color: #e3e3c7;
+	padding: 7px 10px 7px 10px;
+}
+
+.Button
+{
+	border: #737357 1px solid;
+	color: #3b3b1f;
+	background-color: #c7c78f;
+}
+
+#btnOk
+{
+	width: 100px;
+}
+
+.DarkBackground
+{
+	background-color: #eaead1;
+}
+
+.LightBackground
+{
+	background-color: #ffffbe;
+}
+
+.PopupTitleBorder
+{
+	border-bottom: #d5d59d 1px solid;
+}
+
+.PopupTabArea
+{
+	color: #737357;
+	background-color: #e3e3c7;
+}
+
+.PopupTabEmptyArea
+{
+	padding-left: 10px;
+	border-bottom: #d5d59d 1px solid;
+}
+
+.PopupTab, .PopupTabSelected
+{
+	border-right: #d5d59d 1px solid;
+	border-top: #d5d59d 1px solid;
+	border-left: #d5d59d 1px solid;
+	padding: 3px 5px 3px 5px;
+	color: #737357;
+}
+
+.PopupTab
+{
+	margin-top: 1px;
+	border-bottom: #d5d59d 1px solid;
+	cursor: pointer;
+	cursor: hand;
+}
+
+.PopupTabSelected
+{
+	font-weight: bold;
+	cursor: default;
+	padding-top: 4px;
+	border-bottom: #f1f1e3 1px solid;
+	background-color: #f1f1e3;
+}
+
+.PopupSelectionBox
+{
+	border: #ff9933 1px solid !important;
+	background-color: #fffacd !important;
+	cursor: pointer;
+	cursor: hand;
+}
+
+#tdBrowse
+{
+	vertical-align: bottom;
+}
+
+/**
+ * Dialog frame related styles.
+ */
+
+.contents
+{
+	position: absolute;
+	top: 2px;
+	left: 16px;
+	right: 16px;
+	bottom: 20px;
+	background-color: #f1f1e3;
+	overflow: hidden;
+	z-index: 1;
+}
+
+.tl, .tr, .tc, .bl, .br, .bc
+{
+	position: absolute;
+	background-image: url(images/sprites.png);
+	background-repeat: no-repeat;
+}
+
+* html .tl, * html .tr, * html .tc, * html .bl, * html .br, * html .bc
+{
+	background-image: url(images/sprites.gif);
+}
+
+.ml, .mr
+{
+	position: absolute;
+	background-image: url(images/dialog.sides.png);
+	background-repeat: repeat-y;
+}
+
+* html .ml, * html .mr
+{
+	background-image: url(images/dialog.sides.gif);
+}
+
+.rtl .ml, .rtl .mr
+{
+	position: absolute;
+	background-image: url(images/dialog.sides.rtl.png);
+	background-repeat: repeat-y;
+}
+
+* html .rtl .ml, * html .rtl .mr
+{
+	background-image: url(images/dialog.sides.gif);
+}
+
+.tl
+{
+	top: 0px;
+	left: 0px;
+	width: 16px;
+	height: 16px;
+	background-position: -16px -16px;
+}
+
+.rtl .tl
+{
+	background-position: -16px -397px;
+}
+
+.tr
+{
+	top: 0px;
+	right: 0px;
+	width: 16px;
+	height: 16px;
+	background-position: -16px -76px;
+}
+
+.rtl .tr
+{
+	background-position: -16px -457px;
+}
+
+.tc
+{
+	top: 0px;
+	right: 16px;
+	left: 16px;
+	height: 16px;
+	background-position: 0px -136px;
+	background-repeat: repeat-x;
+}
+
+.ml
+{
+	top: 16px;
+	left: 0px;
+	width: 16px;
+	bottom: 51px;
+	background-position: 0px 0px;
+}
+
+.mr
+{
+	top: 16px;
+	right: 0px;
+	width: 16px;
+	bottom: 51px;
+	background-position: -16px 0px;
+}
+
+.bl
+{
+	bottom: 0px;
+	left: 0px;
+	width: 30px;
+	height: 51px;
+	background-position: -16px -196px;
+}
+
+.rtl .bl
+{
+	background-position: -16px -517px;
+}
+
+.br
+{
+	bottom: 0px;
+	right: 0px;
+	width: 30px;
+	height: 51px;
+	background-position: -16px -263px;
+}
+
+.rtl .br
+{
+	background-position: -16px -584px;
+}
+
+.bc
+{
+	bottom: 0px;
+	right: 30px;
+	left: 30px;
+	height: 51px;
+	background-position: 0px -330px;
+	background-repeat: repeat-x;
+}
+
+/* For IE6. Do not change it. */
+* html .blocker
+{
+	position: absolute;
+	width: 100%;
+	height: 100%;
+	z-index: 12;
+	filter: progid:DXImageTransform.Microsoft.Alpha(opacity=0);
+}
+
+/* The layer used to cover the dialog when opening a child dialog. */
+.cover
+{
+	position: absolute;
+	top: 0px;
+	left: 14px;
+	right: 14px;
+	bottom: 18px;
+	z-index: 11;
+}
+
+#closeButton
+{
+	position: absolute;
+	right: 0px;
+	top: 0px;
+	margin-top: 5px;
+	margin-right: 10px;
+	width: 20px;
+	height: 20px;
+	cursor: pointer;
+	background-image: url(images/sprites.png);
+	background-repeat: no-repeat;
+	background-position: -16px -651px;
+}
+
+* html #closeButton
+{
+	cursor: hand;
+	background-image: url(images/sprites.gif);
+}
+
+.rtl #closeButton
+{
+	right: auto;
+	left: 10px;
+	margin-right: 0px;
+}
+
+#closeButton:hover
+{
+	background-position: -16px -687px;
+}
+
+#throbberBlock
+{
+	z-index: 10;
+}
+
+#throbberBlock div
+{
+	float: left;
+	width: 8px;
+	height: 9px;
+	margin-left: 2px;
+	margin-right: 2px;
+	font-size: 1px;	/* IE6 */
+}
+
+/*
+	Color Gradient Generator:
+	http://www.herethere.net/~samson/php/color_gradient/?cbegin=737357&cend=E3E3C7&steps=4
+*/
+
+.throbber_1
+{
+	background-color: #737357;
+}
+
+.throbber_2
+{
+	background-color: #8f8f73;
+}
+
+.throbber_3
+{
+	background-color: #abab8f;
+}
+
+.throbber_4
+{
+	background-color: #c7c7ab;
+}
+
+.throbber_5
+{
+	background-color: #e3e3c7;
+}


Property changes on: announcement/trunk/src/main/webapp/fckeditor/editor/skins/default/fck_dialog.css
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/webapp/fckeditor/editor/skins/default/fck_dialog_ie6.js
===================================================================
--- announcement/trunk/src/main/webapp/fckeditor/editor/skins/default/fck_dialog_ie6.js	                        (rev 0)
+++ announcement/trunk/src/main/webapp/fckeditor/editor/skins/default/fck_dialog_ie6.js	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,110 @@
+/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2008 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ */
+
+(function()
+{
+	// IE6 doens't handle absolute positioning properly (it is always in quirks
+	// mode). This function fixes the sizes and positions of many elements that
+	// compose the skin (this is skin specific).
+	var fixSizes = window.DoResizeFixes = function()
+	{
+		var fckDlg = window.document.body ;
+
+		for ( var i = 0 ; i < fckDlg.childNodes.length ; i++ )
+		{
+			var child = fckDlg.childNodes[i] ;
+			switch ( child.className )
+			{
+				case 'contents' :
+					child.style.width = Math.max( 0, fckDlg.offsetWidth - 16 - 16 ) ;	// -left -right
+					child.style.height = Math.max( 0, fckDlg.clientHeight - 20 - 2 ) ;	// -bottom -top
+					break ;
+
+				case 'blocker' :
+				case 'cover' :
+					child.style.width = Math.max( 0, fckDlg.offsetWidth - 16 - 16 + 4 ) ;	// -left -right + 4
+					child.style.height = Math.max( 0, fckDlg.clientHeight - 20 - 2 + 4 ) ;	// -bottom -top + 4
+					break ;
+
+				case 'tr' :
+					child.style.left = Math.max( 0, fckDlg.clientWidth - 16 ) ;
+					break ;
+
+				case 'tc' :
+					child.style.width = Math.max( 0, fckDlg.clientWidth - 16 - 16 ) ;
+					break ;
+
+				case 'ml' :
+					child.style.height = Math.max( 0, fckDlg.clientHeight - 16 - 51 ) ;
+					break ;
+
+				case 'mr' :
+					child.style.left = Math.max( 0, fckDlg.clientWidth - 16 ) ;
+					child.style.height = Math.max( 0, fckDlg.clientHeight - 16 - 51 ) ;
+					break ;
+
+				case 'bl' :
+					child.style.top = Math.max( 0, fckDlg.clientHeight - 51 ) ;
+					break ;
+
+				case 'br' :
+					child.style.left = Math.max( 0, fckDlg.clientWidth - 30 ) ;
+					child.style.top = Math.max( 0, fckDlg.clientHeight - 51 ) ;
+					break ;
+
+				case 'bc' :
+					child.style.width = Math.max( 0, fckDlg.clientWidth - 30 - 30 ) ;
+					child.style.top = Math.max( 0, fckDlg.clientHeight - 51 ) ;
+					break ;
+			}
+		}
+	}
+
+	var closeButtonOver = function()
+	{
+		this.style.backgroundPosition = '-16px -687px' ;
+	} ;
+
+	var closeButtonOut = function()
+	{
+		this.style.backgroundPosition = '-16px -651px' ;
+	} ;
+
+	var fixCloseButton = function()
+	{
+		var closeButton = document.getElementById ( 'closeButton' ) ;
+
+		closeButton.onmouseover	= closeButtonOver ;
+		closeButton.onmouseout	= closeButtonOut ;
+	}
+
+	var onLoad = function()
+	{
+		fixSizes() ;
+		fixCloseButton() ;
+
+		window.attachEvent( 'onresize', fixSizes ) ;
+		window.detachEvent( 'onload', onLoad ) ;
+	}
+
+	window.attachEvent( 'onload', onLoad ) ;
+
+})() ;


Property changes on: announcement/trunk/src/main/webapp/fckeditor/editor/skins/default/fck_dialog_ie6.js
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/webapp/fckeditor/editor/skins/default/fck_editor.css
===================================================================
--- announcement/trunk/src/main/webapp/fckeditor/editor/skins/default/fck_editor.css	                        (rev 0)
+++ announcement/trunk/src/main/webapp/fckeditor/editor/skins/default/fck_editor.css	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,464 @@
+/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2008 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * Styles used by the editor IFRAME and Toolbar.
+ */
+
+/*
+	### Basic Editor IFRAME Styles.
+*/
+
+body
+{
+	padding: 1px;
+	margin: 0;
+	background-color: #ffffff;
+}
+
+#xEditingArea
+{
+    border: #696969 1px solid;
+}
+
+.SourceField
+{
+    padding: 5px;
+    margin: 0px;
+    font-family: Monospace;
+}
+
+/*
+	Toolbar
+*/
+
+.TB_ToolbarSet, .TB_Expand, .TB_Collapse
+{
+    cursor: default;
+    background-color: #efefde;
+}
+
+.TB_ToolbarSet
+{
+    border-top: #efefde 1px outset;
+    border-bottom: #efefde 1px outset;
+}
+
+.TB_ToolbarSet TD
+{
+    font-size: 11px;
+    font-family: 'Microsoft Sans Serif' , Tahoma, Arial, Verdana, Sans-Serif;
+}
+
+.TB_Toolbar
+{
+	height: 24px;
+    display: inline-table;	/* inline = Opera jumping buttons bug */
+}
+
+.TB_Separator
+{
+    width: 1px;
+    height: 16px;
+    margin: 2px;
+    background-color: #999966;
+}
+
+.TB_Start
+{
+    background-image: url(images/toolbar.start.gif);
+    margin: 2px;
+    width: 3px;
+    background-repeat: no-repeat;
+    height: 16px;
+}
+
+.TB_End
+{
+    display: none;
+}
+
+.TB_ExpandImg
+{
+    background-image: url(images/toolbar.expand.gif);
+    background-repeat: no-repeat;
+}
+
+.TB_CollapseImg
+{
+    background-image: url(images/toolbar.collapse.gif);
+    background-repeat: no-repeat;
+}
+
+.TB_SideBorder
+{
+    background-color: #696969;
+}
+
+.TB_Expand, .TB_Collapse
+{
+    padding: 2px 2px 2px 2px;
+    border: #efefde 1px outset;
+}
+
+.TB_Collapse
+{
+    width: 5px;
+}
+
+.TB_Break
+{
+    height: 24px; /* IE needs the height to be set, otherwise no break */
+}
+
+/*
+	Toolbar Button
+*/
+
+.TB_Button_On, .TB_Button_Off, .TB_Button_On_Over, .TB_Button_Off_Over, .TB_Button_Disabled
+{
+    border: #efefde 1px solid; /* This is the default border */
+    height: 22px; /* The height is necessary, otherwise IE will not apply the alpha */
+}
+
+.TB_Button_On
+{
+    border: #316ac5 1px solid;
+    background-color: #c1d2ee;
+}
+
+.TB_Button_On_Over, .TB_Button_Off_Over
+{
+    border: #316ac5 1px solid;
+    background-color: #dff1ff;
+}
+
+.TB_Button_Off
+{
+    filter: alpha(opacity=70); /* IE */
+    opacity: 0.70; /* Safari, Opera and Mozilla */
+}
+
+.TB_Button_Disabled
+{
+    filter: gray() alpha(opacity=30); /* IE */
+    opacity: 0.30; /* Safari, Opera and Mozilla */
+}
+
+.TB_Button_Padding
+{
+    visibility: hidden;
+    width: 3px;
+    height: 22px;
+}
+
+.TB_Button_Image
+{
+    overflow: hidden;
+    width: 16px;
+    height: 16px;
+    margin: 3px;
+    background-repeat: no-repeat;
+}
+
+.TB_Button_Image img
+{
+    position: relative;
+}
+
+.TB_Button_Off .TB_Button_Text
+{
+   	background-color: #efefde;  /* Needed because of a bug on Clear Type */
+}
+
+.TB_ConnectionLine
+{
+    background-color: #ffffff;
+    height: 1px;
+    margin-left: 1px;   /* ltr */
+    margin-right: 1px;  /* rtl */
+}
+
+.TB_Text
+{
+	height: 22px;
+}
+
+.TB_Button_Off .TB_Text
+{
+   	background-color: #efefde ;  /* Needed because of a bug on ClearType */
+}
+
+.TB_Button_On_Over .TB_Text
+{
+   	background-color: #dff1ff ;  /* Needed because of a bug on ClearType */
+}
+
+/*
+	Menu
+*/
+
+.MN_Menu
+{
+    border: 1px solid #8f8f73;
+    padding: 2px;
+    background-color: #ffffff;
+    cursor: default;
+}
+
+.MN_Menu, .MN_Menu .MN_Label
+{
+    font-size: 11px;
+    font-family: 'Microsoft Sans Serif' , Tahoma, Arial, Verdana, Sans-Serif;
+}
+
+.MN_Item_Padding
+{
+    visibility: hidden;
+    width: 3px;
+    height: 20px;
+}
+
+.MN_Icon
+{
+    background-color: #e3e3c7;
+    text-align: center;
+    height: 20px;
+}
+
+.MN_Label
+{
+    padding-left: 3px;
+    padding-right: 3px;
+}
+
+.MN_Separator
+{
+    height: 3px;
+}
+
+.MN_Separator_Line
+{
+    border-top: #b9b99d 1px solid;
+}
+
+.MN_Item .MN_Icon IMG
+{
+    filter: alpha(opacity=70);
+    opacity: 0.70;
+}
+
+.MN_Item_Over
+{
+    color: #ffffff;
+    background-color: #8f8f73;
+}
+
+.MN_Item_Over .MN_Icon
+{
+    background-color: #737357;
+}
+
+.MN_Item_Disabled IMG
+{
+    filter: gray() alpha(opacity=30); /* IE */
+    opacity: 0.30; /* Safari, Opera and Mozilla */
+}
+
+.MN_Item_Disabled .MN_Label
+{
+    color: #b7b7b7;
+}
+
+.MN_Arrow
+{
+    padding-right: 3px;
+    padding-left: 3px;
+}
+
+.MN_ConnectionLine
+{
+    background-color: #ffffff;
+}
+
+.Menu .TB_Button_On, .Menu .TB_Button_On_Over
+{
+    border: #8f8f73 1px solid;
+    background-color: #ffffff;
+}
+
+/*
+	### Panel Styles
+*/
+
+.FCK_Panel
+{
+    border: #8f8f73 1px solid;
+    padding: 2px;
+    background-color: #ffffff;
+}
+
+.FCK_Panel, .FCK_Panel TD
+{
+    font-family: 'Microsoft Sans Serif' , Tahoma, Arial, Verdana, Sans-Serif;
+    font-size: 11px;
+}
+
+/*
+	### Special Combos
+*/
+
+.SC_Panel
+{
+    overflow: auto;
+    white-space: nowrap;
+    cursor: default;
+    border: 1px solid #8f8f73;
+    padding-left: 2px;
+    padding-right: 2px;
+}
+
+.SC_Panel, .SC_Panel TD
+{
+    font-size: 11px;
+    font-family: 'Microsoft Sans Serif' , Tahoma, Arial, Verdana, Sans-Serif;
+}
+
+.SC_Item, .SC_ItemSelected
+{
+    margin-top: 2px;
+    margin-bottom: 2px;
+    background-position: left center;
+    padding-left: 11px;
+    padding-right: 3px;
+    padding-top: 2px;
+    padding-bottom: 2px;
+    text-overflow: ellipsis;
+    overflow: hidden;
+    background-repeat: no-repeat;
+    border: #dddddd 1px solid;
+}
+
+.SC_Item *, .SC_ItemSelected *
+{
+    margin-top: 0px;
+    margin-bottom: 0px;
+}
+
+.SC_ItemSelected
+{
+    border: #9a9afb 1px solid;
+    background-image: url(images/toolbar.arrowright.gif);
+}
+
+.SC_ItemOver
+{
+    border: #316ac5 1px solid;
+}
+
+.SC_Field
+{
+    border: #b7b7a6 1px solid;
+    cursor: default;
+}
+
+.SC_FieldCaption
+{
+    overflow: visible;
+    padding-right: 5px;
+    padding-left: 5px;
+    opacity: 0.75; /* Safari, Opera and Mozilla */
+    filter: alpha(opacity=70); /* IE */ /* -moz-opacity: 0.75; Mozilla (Old) */
+    height: 23px;
+    background-color: #efefde;
+}
+
+.SC_FieldLabel
+{
+    white-space: nowrap;
+    padding: 2px;
+    width: 100%;
+    cursor: default;
+    background-color: #ffffff;
+    text-overflow: ellipsis;
+    overflow: hidden;
+}
+
+.SC_FieldButton
+{
+    background-position: center center;
+    background-image: url(images/toolbar.buttonarrow.gif);
+    border-left: #b7b7a6 1px solid;
+    width: 14px;
+    background-repeat: no-repeat;
+}
+
+.SC_FieldDisabled .SC_FieldButton, .SC_FieldDisabled .SC_FieldCaption, .SC_FieldDisabled .TB_ButtonType_Text
+{
+    opacity: 0.30; /* Safari, Opera and Mozilla */
+    filter: gray() alpha(opacity=30); /* IE */ /* -moz-opacity: 0.30; Mozilla (Old) */
+}
+
+.SC_FieldOver
+{
+    border: #316ac5 1px solid;
+}
+
+.SC_FieldOver .SC_FieldButton
+{
+    border-left: #316ac5 1px solid;
+}
+
+/*
+	### Color Selector Panel
+*/
+
+.ColorBoxBorder
+{
+    border: #808080 1px solid;
+    position: static;
+}
+
+.ColorBox
+{
+    font-size: 1px;
+    width: 10px;
+    position: static;
+    height: 10px;
+}
+
+.ColorDeselected, .ColorSelected
+{
+    cursor: default;
+}
+
+.ColorDeselected
+{
+    border: #ffffff 1px solid;
+    padding: 2px;
+    float: left;
+}
+
+.ColorSelected
+{
+    border: #330066 1px solid;
+    padding: 2px;
+    float: left;
+    background-color: #c4cdd6;
+}


Property changes on: announcement/trunk/src/main/webapp/fckeditor/editor/skins/default/fck_editor.css
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/webapp/fckeditor/editor/skins/default/fck_strip.gif
===================================================================
(Binary files differ)


Property changes on: announcement/trunk/src/main/webapp/fckeditor/editor/skins/default/fck_strip.gif
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: announcement/trunk/src/main/webapp/fckeditor/editor/skins/default/images/dialog.sides.gif
===================================================================
(Binary files differ)


Property changes on: announcement/trunk/src/main/webapp/fckeditor/editor/skins/default/images/dialog.sides.gif
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: announcement/trunk/src/main/webapp/fckeditor/editor/skins/default/images/dialog.sides.png
===================================================================
(Binary files differ)


Property changes on: announcement/trunk/src/main/webapp/fckeditor/editor/skins/default/images/dialog.sides.png
___________________________________________________________________
Name: svn:mime-type
   + image/png

Added: announcement/trunk/src/main/webapp/fckeditor/editor/skins/default/images/dialog.sides.rtl.png
===================================================================
(Binary files differ)


Property changes on: announcement/trunk/src/main/webapp/fckeditor/editor/skins/default/images/dialog.sides.rtl.png
___________________________________________________________________
Name: svn:mime-type
   + image/png

Added: announcement/trunk/src/main/webapp/fckeditor/editor/skins/default/images/sprites.gif
===================================================================
(Binary files differ)


Property changes on: announcement/trunk/src/main/webapp/fckeditor/editor/skins/default/images/sprites.gif
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: announcement/trunk/src/main/webapp/fckeditor/editor/skins/default/images/sprites.png
===================================================================
(Binary files differ)


Property changes on: announcement/trunk/src/main/webapp/fckeditor/editor/skins/default/images/sprites.png
___________________________________________________________________
Name: svn:mime-type
   + image/png

Added: announcement/trunk/src/main/webapp/fckeditor/editor/skins/default/images/toolbar.arrowright.gif
===================================================================
(Binary files differ)


Property changes on: announcement/trunk/src/main/webapp/fckeditor/editor/skins/default/images/toolbar.arrowright.gif
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: announcement/trunk/src/main/webapp/fckeditor/editor/skins/default/images/toolbar.buttonarrow.gif
===================================================================
(Binary files differ)


Property changes on: announcement/trunk/src/main/webapp/fckeditor/editor/skins/default/images/toolbar.buttonarrow.gif
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: announcement/trunk/src/main/webapp/fckeditor/editor/skins/default/images/toolbar.collapse.gif
===================================================================
(Binary files differ)


Property changes on: announcement/trunk/src/main/webapp/fckeditor/editor/skins/default/images/toolbar.collapse.gif
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: announcement/trunk/src/main/webapp/fckeditor/editor/skins/default/images/toolbar.end.gif
===================================================================
(Binary files differ)


Property changes on: announcement/trunk/src/main/webapp/fckeditor/editor/skins/default/images/toolbar.end.gif
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: announcement/trunk/src/main/webapp/fckeditor/editor/skins/default/images/toolbar.expand.gif
===================================================================
(Binary files differ)


Property changes on: announcement/trunk/src/main/webapp/fckeditor/editor/skins/default/images/toolbar.expand.gif
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: announcement/trunk/src/main/webapp/fckeditor/editor/skins/default/images/toolbar.separator.gif
===================================================================
(Binary files differ)


Property changes on: announcement/trunk/src/main/webapp/fckeditor/editor/skins/default/images/toolbar.separator.gif
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: announcement/trunk/src/main/webapp/fckeditor/editor/skins/default/images/toolbar.start.gif
===================================================================
(Binary files differ)


Property changes on: announcement/trunk/src/main/webapp/fckeditor/editor/skins/default/images/toolbar.start.gif
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: announcement/trunk/src/main/webapp/fckeditor/editor/skins/office2003/fck_dialog.css
===================================================================
--- announcement/trunk/src/main/webapp/fckeditor/editor/skins/office2003/fck_dialog.css	                        (rev 0)
+++ announcement/trunk/src/main/webapp/fckeditor/editor/skins/office2003/fck_dialog.css	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,402 @@
+/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2008 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * Styles used by the dialog boxes.
+ */
+
+html, body
+{
+	background-color: transparent;
+	margin: 0px;
+	padding: 0px;
+}
+
+body
+{
+	padding: 10px;
+}
+
+body, td, input, select, textarea
+{
+	font-size: 11px;
+	font-family: 'Microsoft Sans Serif' , Arial, Helvetica, Verdana;
+}
+
+body, .BackColor
+{
+	background-color: #f7f8fd;
+}
+
+.PopupBody
+{
+	height: 100%;
+	width: 100%;
+	overflow: hidden;
+	background-color: transparent;
+	padding: 0px;
+}
+
+#header
+{
+	cursor: move;
+}
+
+.PopupTitle
+{
+	font-weight: bold;
+	font-size: 14pt;
+	color: #0e3460;
+	background-color: #8cb2fd;
+	padding: 3px 10px 3px 10px;
+}
+
+.PopupButtons
+{
+	position: absolute;
+	right: 0px;
+	left: 0px;
+	bottom: 0px;
+	border-top: #466ca6 1px solid;
+	background-color: #8cb2fd;
+	padding: 7px 10px 7px 10px;
+}
+
+.Button
+{
+	border: #1c3460 1px solid;
+	color: #000a28;
+	background-color: #7096d3;
+}
+
+#btnOk
+{
+	width: 100px;
+}
+
+.DarkBackground
+{
+	background-color: #eaf2f8;
+}
+
+.LightBackground
+{
+	background-color: #ffffbe;
+}
+
+.PopupTitleBorder
+{
+	border-bottom: #d5d59d 1px solid;
+}
+
+.PopupTabArea
+{
+	color: #0e3460;
+	background-color: #8cb2fd;
+}
+
+.PopupTabEmptyArea
+{
+	padding-left: 10px ;
+	border-bottom: #466ca6 1px solid;
+}
+
+.PopupTab, .PopupTabSelected
+{
+	border-right: #466ca6 1px solid;
+	border-top: #466ca6 1px solid;
+	border-left: #466ca6 1px solid;
+	padding: 3px 5px 3px 5px;
+	color: #0e3460;
+}
+
+.PopupTab
+{
+	margin-top: 1px;
+	border-bottom: #466ca6 1px solid;
+	cursor: pointer;
+	cursor: hand;
+}
+
+.PopupTabSelected
+{
+	font-weight: bold;
+	cursor: default;
+	padding-top: 4px;
+	border-bottom: #f7f8fd 1px solid;
+	background-color: #f7f8fd;
+}
+
+.PopupSelectionBox
+{
+	border: #1e90ff 1px solid !important;
+	background-color: #add8e6 !important;
+	cursor: pointer;
+	cursor: hand;
+}
+
+#tdBrowse
+{
+	vertical-align: bottom;
+}
+
+/**
+ * Dialog frame related styles.
+ */
+
+.contents
+{
+	position: absolute;
+	top: 2px;
+	left: 16px;
+	right: 16px;
+	bottom: 20px;
+	background-color: #f7f8fD;
+	overflow: hidden;
+	z-index: 1;
+}
+
+.tl, .tr, .tc, .bl, .br, .bc
+{
+	position: absolute;
+	background-image: url(images/sprites.png);
+	background-repeat: no-repeat;
+}
+
+* html .tl, * html .tr, * html .tc, * html .bl, * html .br, * html .bc
+{
+	background-image: url(images/sprites.gif);
+}
+
+.ml, .mr
+{
+	position: absolute;
+	background-image: url(images/dialog.sides.png);
+	background-repeat: repeat-y;
+}
+
+* html .ml, * html .mr
+{
+	background-image: url(images/dialog.sides.gif);
+}
+
+.rtl .ml, .rtl .mr
+{
+	position: absolute;
+	background-image: url(images/dialog.sides.rtl.png);
+	background-repeat: repeat-y;
+}
+
+* html .rtl .ml, * html .rtl .mr
+{
+	background-image: url(images/dialog.sides.gif);
+}
+
+.tl
+{
+	top: 0px;
+	left: 0px;
+	width: 16px;
+	height: 16px;
+	background-position: -16px -16px;
+}
+
+.rtl .tl
+{
+	background-position: -16px -397px;
+}
+
+.tr
+{
+	top: 0px;
+	right: 0px;
+	width: 16px;
+	height: 16px;
+	background-position: -16px -76px;
+}
+
+.rtl .tr
+{
+	background-position: -16px -457px;
+}
+
+.tc
+{
+	top: 0px;
+	right: 16px;
+	left: 16px;
+	height: 16px;
+	background-position: 0px -136px;
+	background-repeat: repeat-x;
+}
+
+.ml
+{
+	top: 16px;
+	left: 0px;
+	width: 16px;
+	bottom: 51px;
+	background-position: 0px 0px;
+}
+
+.mr
+{
+	top: 16px;
+	right: 0px;
+	width: 16px;
+	bottom: 51px;
+	background-position: -16px 0px;
+}
+
+.bl
+{
+	bottom: 0px;
+	left: 0px;
+	width: 30px;
+	height: 51px;
+	background-position: -16px -196px;
+}
+
+.rtl .bl
+{
+	background-position: -16px -517px;
+}
+
+.br
+{
+	bottom: 0px;
+	right: 0px;
+	width: 30px;
+	height: 51px;
+	background-position: -16px -263px;
+}
+
+.rtl .br
+{
+	background-position: -16px -584px;
+}
+
+.bc
+{
+	bottom: 0px;
+	right: 30px;
+	left: 30px;
+	height: 51px;
+	background-position: 0px -330px;
+	background-repeat: repeat-x;
+}
+
+/* For IE6. Do not change it. */
+* html .blocker
+{
+	position: absolute;
+	width: 100%;
+	height: 100%;
+	z-index: 12;
+	filter: progid:DXImageTransform.Microsoft.Alpha(opacity=0);
+}
+
+/* The layer used to cover the dialog when opening a child dialog. */
+.cover
+{
+	position: absolute;
+	top: 0px;
+	left: 14px;
+	right: 14px;
+	bottom: 18px;
+	z-index: 11;
+}
+
+#closeButton
+{
+	position: absolute;
+	right: 0px;
+	top: 0px;
+	margin-top: 5px;
+	margin-right: 10px;
+	width: 20px;
+	height: 20px;
+	cursor: pointer;
+	background-image: url(images/sprites.png);
+	background-repeat: no-repeat;
+	background-position: -16px -651px;
+}
+
+* html #closeButton
+{
+	cursor: hand;
+	background-image: url(images/sprites.gif);
+}
+
+.rtl #closeButton
+{
+	right: auto;
+	left: 10px;
+	margin-right: 0px;
+}
+
+#closeButton:hover
+{
+	background-position: -16px -687px;
+}
+
+#throbberBlock
+{
+	z-index: 10;
+}
+
+#throbberBlock div
+{
+	float: left;
+	width: 8px;
+	height: 9px;
+	margin-left: 2px;
+	margin-right: 2px;
+	font-size: 1px;	/* IE6 */
+}
+
+/*
+	Color Gradient Generator:
+	http://www.herethere.net/~samson/php/color_gradient/?cbegin=0E3460&cend=8cb2fd&steps=4
+*/
+
+.throbber_1
+{
+	background-color: #0E3460;
+}
+
+.throbber_2
+{
+	background-color: #2D5387;
+}
+
+.throbber_3
+{
+	background-color: #4D73AE;
+}
+
+.throbber_4
+{
+	background-color: #6C92D5;
+}
+
+.throbber_5
+{
+	background-color: #8CB2FD;
+}


Property changes on: announcement/trunk/src/main/webapp/fckeditor/editor/skins/office2003/fck_dialog.css
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/webapp/fckeditor/editor/skins/office2003/fck_dialog_ie6.js
===================================================================
--- announcement/trunk/src/main/webapp/fckeditor/editor/skins/office2003/fck_dialog_ie6.js	                        (rev 0)
+++ announcement/trunk/src/main/webapp/fckeditor/editor/skins/office2003/fck_dialog_ie6.js	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,110 @@
+/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2008 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ */
+
+(function()
+{
+	// IE6 doens't handle absolute positioning properly (it is always in quirks
+	// mode). This function fixes the sizes and positions of many elements that
+	// compose the skin (this is skin specific).
+	var fixSizes = window.DoResizeFixes = function()
+	{
+		var fckDlg = window.document.body ;
+
+		for ( var i = 0 ; i < fckDlg.childNodes.length ; i++ )
+		{
+			var child = fckDlg.childNodes[i] ;
+			switch ( child.className )
+			{
+				case 'contents' :
+					child.style.width = Math.max( 0, fckDlg.offsetWidth - 16 - 16 ) ;	// -left -right
+					child.style.height = Math.max( 0, fckDlg.clientHeight - 20 - 2 ) ;	// -bottom -top
+					break ;
+
+				case 'blocker' :
+				case 'cover' :
+					child.style.width = Math.max( 0, fckDlg.offsetWidth - 16 - 16 + 4 ) ;	// -left -right + 4
+					child.style.height = Math.max( 0, fckDlg.clientHeight - 20 - 2 + 4 ) ;	// -bottom -top + 4
+					break ;
+
+				case 'tr' :
+					child.style.left = Math.max( 0, fckDlg.clientWidth - 16 ) ;
+					break ;
+
+				case 'tc' :
+					child.style.width = Math.max( 0, fckDlg.clientWidth - 16 - 16 ) ;
+					break ;
+
+				case 'ml' :
+					child.style.height = Math.max( 0, fckDlg.clientHeight - 16 - 51 ) ;
+					break ;
+
+				case 'mr' :
+					child.style.left = Math.max( 0, fckDlg.clientWidth - 16 ) ;
+					child.style.height = Math.max( 0, fckDlg.clientHeight - 16 - 51 ) ;
+					break ;
+
+				case 'bl' :
+					child.style.top = Math.max( 0, fckDlg.clientHeight - 51 ) ;
+					break ;
+
+				case 'br' :
+					child.style.left = Math.max( 0, fckDlg.clientWidth - 30 ) ;
+					child.style.top = Math.max( 0, fckDlg.clientHeight - 51 ) ;
+					break ;
+
+				case 'bc' :
+					child.style.width = Math.max( 0, fckDlg.clientWidth - 30 - 30 ) ;
+					child.style.top = Math.max( 0, fckDlg.clientHeight - 51 ) ;
+					break ;
+			}
+		}
+	}
+
+	var closeButtonOver = function()
+	{
+		this.style.backgroundPosition = '-16px -687px' ;
+	} ;
+
+	var closeButtonOut = function()
+	{
+		this.style.backgroundPosition = '-16px -651px' ;
+	} ;
+
+	var fixCloseButton = function()
+	{
+		var closeButton = document.getElementById ( 'closeButton' ) ;
+
+		closeButton.onmouseover	= closeButtonOver ;
+		closeButton.onmouseout	= closeButtonOut ;
+	}
+
+	var onLoad = function()
+	{
+		fixSizes() ;
+		fixCloseButton() ;
+
+		window.attachEvent( 'onresize', fixSizes ) ;
+		window.detachEvent( 'onload', onLoad ) ;
+	}
+
+	window.attachEvent( 'onload', onLoad ) ;
+
+})() ;


Property changes on: announcement/trunk/src/main/webapp/fckeditor/editor/skins/office2003/fck_dialog_ie6.js
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/webapp/fckeditor/editor/skins/office2003/fck_editor.css
===================================================================
--- announcement/trunk/src/main/webapp/fckeditor/editor/skins/office2003/fck_editor.css	                        (rev 0)
+++ announcement/trunk/src/main/webapp/fckeditor/editor/skins/office2003/fck_editor.css	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,476 @@
+/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2008 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * Styles used by the editor IFRAME and Toolbar.
+ */
+
+/*
+	### Basic Editor IFRAME Styles.
+*/
+
+body
+{
+	padding: 1px;
+	margin: 0;
+	background-color: #ffffff;
+}
+
+#xEditingArea
+{
+    border: #696969 1px solid;
+}
+
+.SourceField
+{
+    padding: 5px;
+    margin: 0px;
+    font-family: Monospace;
+}
+
+/*
+	Toolbar
+*/
+
+.TB_ToolbarSet, .TB_Expand, .TB_Collapse
+{
+    cursor: default;
+    background-color: #f7f8fd;
+}
+
+.TB_ToolbarSet
+{
+    border-top: #f7f8fd 1px outset;
+    border-bottom: #f7f8fd 1px outset;
+}
+
+.TB_ToolbarSet TD
+{
+    font-size: 11px;
+    font-family: 'Microsoft Sans Serif' , Tahoma, Arial, Verdana, Sans-Serif;
+}
+
+.TB_Toolbar
+{
+   	background-color: #d6dff7;
+	background-image: url(images/toolbar.bg.gif);
+	background-repeat: repeat-x;
+    display: inline-table;
+}
+
+.TB_Separator
+{
+    width: 1px;
+    height: 16px;
+    margin: 2px;
+    background-color: #B2CBFF;
+}
+
+.TB_Start
+{
+    background-image: url(images/toolbar.start.gif);
+    background-repeat: no-repeat;
+    background-position: center center;
+    margin: 0px;
+    width: 7px;
+    height: 24px;
+}
+
+.TB_End
+{
+    background-image: url(images/toolbar.end.gif);
+    background-repeat: no-repeat;
+    background-position: center left;
+    height: 24px;
+    width: 4px;
+}
+
+.TB_ExpandImg
+{
+    background-image: url(images/toolbar.expand.gif);
+    background-repeat: no-repeat;
+}
+
+.TB_CollapseImg
+{
+    background-image: url(images/toolbar.collapse.gif);
+    background-repeat: no-repeat;
+}
+
+.TB_SideBorder
+{
+    background-color: #696969;
+}
+
+.TB_Expand, .TB_Collapse
+{
+    padding: 2px 2px 2px 2px;
+    border: #f7f8fd 1px outset;
+}
+
+.TB_Collapse
+{
+    width: 5px;
+}
+
+.TB_Break
+{
+    height: 24px; /* IE needs the height to be set, otherwise no break */
+}
+
+/*
+	Toolbar Button
+*/
+
+.TB_Button_On, .TB_Button_Off, .TB_Button_On_Over, .TB_Button_Off_Over, .TB_Button_Disabled
+{
+    margin: 1px;
+    height: 22px; /* The height is necessary, otherwise IE will not apply the alpha */
+}
+
+.TB_Button_On
+{
+    margin: 0px;
+    border: #316ac5 1px solid;
+    background-color: #c1d2ee;
+}
+
+.TB_Button_On_Over, .TB_Button_Off_Over
+{
+    margin: 0px ;
+    border: #316ac5 1px solid;
+    background-color: #dff1ff;
+}
+
+.TB_Button_Off
+{
+    filter: alpha(opacity=70); /* IE */
+    opacity: 0.70; /* Safari, Opera and Mozilla */
+}
+
+.TB_Button_Disabled
+{
+    filter: gray() alpha(opacity=30); /* IE */
+    opacity: 0.30; /* Safari, Opera and Mozilla */
+}
+
+.TB_Button_Padding
+{
+    visibility: hidden;
+    width: 3px;
+    height: 22px;
+}
+
+.TB_Button_Image
+{
+    overflow: hidden;
+    width: 16px;
+    height: 16px;
+    margin: 3px;
+    background-repeat: no-repeat;
+}
+
+.TB_Button_Image img
+{
+    position: relative;
+}
+
+.TB_Button_Off .TB_Button_Text
+{
+   	background-color: #d6dff7;  /* Needed because of a bug on ClearType */
+	background-image: url(images/toolbar.bg.gif);
+	background-repeat: repeat-x;
+}
+
+.TB_ConnectionLine
+{
+    background-color: #f7f8fd;
+    height: 1px;
+    margin-left: 1px;   /* ltr */
+    margin-right: 1px;  /* rtl */
+}
+
+.TB_Button_Off .TB_Text
+{
+   	background-color: #d6dff7;  /* Needed because of a bug on ClearType */
+	background-image: url(images/toolbar.bg.gif);
+	background-repeat: repeat-x;
+}
+
+.TB_Button_On_Over .TB_Text
+{
+   	background-color: #dff1ff ;  /* Needed because of a bug on ClearType */
+}
+
+/*
+	Menu
+*/
+
+.MN_Menu
+{
+    border: 1px solid #8f8f73;
+    padding: 2px;
+    background-color: #f7f8fd;
+    cursor: default;
+}
+
+.MN_Menu, .MN_Menu .MN_Label
+{
+    font-size: 11px;
+    font-family: 'Microsoft Sans Serif' , Tahoma, Arial, Verdana, Sans-Serif;
+}
+
+.MN_Item_Padding
+{
+    visibility: hidden;
+    width: 3px;
+    height: 20px;
+}
+
+.MN_Icon
+{
+    background-color: #d6dff7;
+    text-align: center;
+    height: 20px;
+}
+
+.MN_Label
+{
+    padding-left: 3px;
+    padding-right: 3px;
+}
+
+.MN_Separator
+{
+    height: 3px;
+}
+
+.MN_Separator_Line
+{
+    border-top: #b9b99d 1px solid;
+}
+
+.MN_Item .MN_Icon IMG
+{
+    filter: alpha(opacity=70);
+    opacity: 0.70;
+}
+
+.MN_Item_Over
+{
+    color: #ffffff;
+    background-color: #7096FA;
+}
+
+.MN_Item_Over .MN_Icon
+{
+    background-color: #466ca6;
+}
+
+.MN_Item_Disabled IMG
+{
+    filter: gray() alpha(opacity=30); /* IE */
+    opacity: 0.30; /* Safari, Opera and Mozilla */
+}
+
+.MN_Item_Disabled .MN_Label
+{
+    color: #b7b7b7;
+}
+
+.MN_Arrow
+{
+    padding-right: 3px;
+    padding-left: 3px;
+}
+
+.MN_ConnectionLine
+{
+    background-color: #f7f8fd;
+}
+
+.Menu .TB_Button_On, .Menu .TB_Button_On_Over
+{
+    border: #8f8f73 1px solid;
+    background-color: #f7f8fd;
+}
+
+/*
+	### Panel Styles
+*/
+
+.FCK_Panel
+{
+    border: #8f8f73 1px solid;
+    padding: 2px;
+    background-color: #f7f8fd;
+}
+
+.FCK_Panel, .FCK_Panel TD
+{
+    font-family: 'Microsoft Sans Serif' , Tahoma, Arial, Verdana, Sans-Serif;
+    font-size: 11px;
+}
+
+/*
+	### Special Combos
+*/
+
+.SC_Panel
+{
+    overflow: auto;
+    white-space: nowrap;
+    cursor: default;
+    border: 1px solid #8f8f73;
+    padding-left: 2px;
+    padding-right: 2px;
+}
+
+.SC_Panel, .SC_Panel TD
+{
+    font-size: 11px;
+    font-family: 'Microsoft Sans Serif' , Tahoma, Arial, Verdana, Sans-Serif;
+}
+
+.SC_Item, .SC_ItemSelected
+{
+    margin-top: 2px;
+    margin-bottom: 2px;
+    background-position: left center;
+    padding-left: 11px;
+    padding-right: 3px;
+    padding-top: 2px;
+    padding-bottom: 2px;
+    text-overflow: ellipsis;
+    overflow: hidden;
+    background-repeat: no-repeat;
+    border: #dddddd 1px solid;
+}
+
+.SC_Item *, .SC_ItemSelected *
+{
+    margin-top: 0px;
+    margin-bottom: 0px;
+}
+
+.SC_ItemSelected
+{
+    border: #9a9afb 1px solid;
+    background-image: url(images/toolbar.arrowright.gif);
+}
+
+.SC_ItemOver
+{
+    border: #316ac5 1px solid;
+}
+
+.SC_Field
+{
+    margin-top: 2px ;
+    border: #b7b7a6 1px solid;
+    cursor: default;
+}
+
+.SC_FieldCaption
+{
+    overflow: visible;
+    padding-right: 5px;
+    padding-left: 5px;
+    opacity: 0.75; /* Safari, Opera and Mozilla */
+    filter: alpha(opacity=70); /* IE */ /* -moz-opacity: 0.75; Mozilla (Old) */
+    height: 23px;
+   	background-color: #d6dff7;  /* Needed because of a bug on ClearType */
+	background-image: url(images/toolbar.bg.gif);
+	background-repeat: repeat-x;
+/*    background-color:  inherit;     Maybe this is needed wait to check */
+}
+
+.SC_FieldLabel
+{
+    white-space: nowrap;
+    padding: 2px;
+    width: 100%;
+    cursor: default;
+    background-color: #ffffff;
+    text-overflow: ellipsis;
+    overflow: hidden;
+}
+
+.SC_FieldButton
+{
+    background-position: center center;
+    background-image: url(images/toolbar.buttonarrow.gif);
+    border-left: #b7b7a6 1px solid;
+    width: 14px;
+    background-repeat: no-repeat;
+}
+
+.SC_FieldDisabled .SC_FieldButton, .SC_FieldDisabled .SC_FieldCaption, .SC_FieldDisabled .TB_ButtonType_Text
+{
+    opacity: 0.30; /* Safari, Opera and Mozilla */
+    filter: gray() alpha(opacity=30); /* IE */ /* -moz-opacity: 0.30; Mozilla (Old) */
+}
+
+.SC_FieldOver
+{
+    border: #316ac5 1px solid;
+}
+
+.SC_FieldOver .SC_FieldButton
+{
+    border-left: #316ac5 1px solid;
+}
+
+/*
+	### Color Selector Panel
+*/
+
+.ColorBoxBorder
+{
+    border: #808080 1px solid;
+    position: static;
+}
+
+.ColorBox
+{
+    font-size: 1px;
+    width: 10px;
+    position: static;
+    height: 10px;
+}
+
+.ColorDeselected, .ColorSelected
+{
+    cursor: default;
+}
+
+.ColorDeselected
+{
+    border: #ffffff 1px solid;
+    padding: 2px;
+    float: left;
+}
+
+.ColorSelected
+{
+    border: #330066 1px solid;
+    padding: 2px;
+    float: left;
+    background-color: #c4cdd6;
+}


Property changes on: announcement/trunk/src/main/webapp/fckeditor/editor/skins/office2003/fck_editor.css
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/webapp/fckeditor/editor/skins/office2003/fck_strip.gif
===================================================================
(Binary files differ)


Property changes on: announcement/trunk/src/main/webapp/fckeditor/editor/skins/office2003/fck_strip.gif
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: announcement/trunk/src/main/webapp/fckeditor/editor/skins/office2003/images/dialog.sides.gif
===================================================================
(Binary files differ)


Property changes on: announcement/trunk/src/main/webapp/fckeditor/editor/skins/office2003/images/dialog.sides.gif
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: announcement/trunk/src/main/webapp/fckeditor/editor/skins/office2003/images/dialog.sides.png
===================================================================
(Binary files differ)


Property changes on: announcement/trunk/src/main/webapp/fckeditor/editor/skins/office2003/images/dialog.sides.png
___________________________________________________________________
Name: svn:mime-type
   + image/png

Added: announcement/trunk/src/main/webapp/fckeditor/editor/skins/office2003/images/dialog.sides.rtl.png
===================================================================
(Binary files differ)


Property changes on: announcement/trunk/src/main/webapp/fckeditor/editor/skins/office2003/images/dialog.sides.rtl.png
___________________________________________________________________
Name: svn:mime-type
   + image/png

Added: announcement/trunk/src/main/webapp/fckeditor/editor/skins/office2003/images/sprites.gif
===================================================================
(Binary files differ)


Property changes on: announcement/trunk/src/main/webapp/fckeditor/editor/skins/office2003/images/sprites.gif
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: announcement/trunk/src/main/webapp/fckeditor/editor/skins/office2003/images/sprites.png
===================================================================
(Binary files differ)


Property changes on: announcement/trunk/src/main/webapp/fckeditor/editor/skins/office2003/images/sprites.png
___________________________________________________________________
Name: svn:mime-type
   + image/png

Added: announcement/trunk/src/main/webapp/fckeditor/editor/skins/office2003/images/toolbar.arrowright.gif
===================================================================
(Binary files differ)


Property changes on: announcement/trunk/src/main/webapp/fckeditor/editor/skins/office2003/images/toolbar.arrowright.gif
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: announcement/trunk/src/main/webapp/fckeditor/editor/skins/office2003/images/toolbar.bg.gif
===================================================================
(Binary files differ)


Property changes on: announcement/trunk/src/main/webapp/fckeditor/editor/skins/office2003/images/toolbar.bg.gif
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: announcement/trunk/src/main/webapp/fckeditor/editor/skins/office2003/images/toolbar.buttonarrow.gif
===================================================================
(Binary files differ)


Property changes on: announcement/trunk/src/main/webapp/fckeditor/editor/skins/office2003/images/toolbar.buttonarrow.gif
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: announcement/trunk/src/main/webapp/fckeditor/editor/skins/office2003/images/toolbar.collapse.gif
===================================================================
(Binary files differ)


Property changes on: announcement/trunk/src/main/webapp/fckeditor/editor/skins/office2003/images/toolbar.collapse.gif
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: announcement/trunk/src/main/webapp/fckeditor/editor/skins/office2003/images/toolbar.end.gif
===================================================================
(Binary files differ)


Property changes on: announcement/trunk/src/main/webapp/fckeditor/editor/skins/office2003/images/toolbar.end.gif
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: announcement/trunk/src/main/webapp/fckeditor/editor/skins/office2003/images/toolbar.expand.gif
===================================================================
(Binary files differ)


Property changes on: announcement/trunk/src/main/webapp/fckeditor/editor/skins/office2003/images/toolbar.expand.gif
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: announcement/trunk/src/main/webapp/fckeditor/editor/skins/office2003/images/toolbar.separator.gif
===================================================================
(Binary files differ)


Property changes on: announcement/trunk/src/main/webapp/fckeditor/editor/skins/office2003/images/toolbar.separator.gif
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: announcement/trunk/src/main/webapp/fckeditor/editor/skins/office2003/images/toolbar.start.gif
===================================================================
(Binary files differ)


Property changes on: announcement/trunk/src/main/webapp/fckeditor/editor/skins/office2003/images/toolbar.start.gif
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: announcement/trunk/src/main/webapp/fckeditor/editor/skins/silver/fck_dialog.css
===================================================================
--- announcement/trunk/src/main/webapp/fckeditor/editor/skins/silver/fck_dialog.css	                        (rev 0)
+++ announcement/trunk/src/main/webapp/fckeditor/editor/skins/silver/fck_dialog.css	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,402 @@
+/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2008 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * Styles used by the dialog boxes.
+ */
+
+html, body
+{
+	background-color: transparent;
+	margin: 0px;
+	padding: 0px;
+}
+
+body
+{
+	padding: 10px;
+}
+
+body, td, input, select, textarea
+{
+	font-size: 11px;
+	font-family: 'Microsoft Sans Serif' , Arial, Helvetica, Verdana;
+}
+
+body, .BackColor
+{
+	background-color: #f7f7f7;
+}
+
+.PopupBody
+{
+	height: 100%;
+	width: 100%;
+	overflow: hidden;
+	background-color: transparent;
+	padding: 0px;
+}
+
+#header
+{
+	cursor: move;
+}
+
+.PopupTitle
+{
+	font-weight: bold;
+	font-size: 14pt;
+	color: #504845;
+	background-color: #dedede;
+	padding: 3px 10px 3px 10px;
+}
+
+.PopupButtons
+{
+	position: absolute;
+	right: 0px;
+	left: 0px;
+	bottom: 0px;
+	border-top: #cec6b5 1px solid;
+	background-color: #DEDEDE;
+	padding: 7px 10px 7px 10px;
+}
+
+.Button
+{
+	border: #7a7261 1px solid;
+	color: #504845;
+	background-color: #cec6b5;
+}
+
+#btnOk
+{
+	width: 100px;
+}
+
+.DarkBackground
+{
+	background-color: #f2f2f2;
+}
+
+.LightBackground
+{
+	background-color: #ffffbe;
+}
+
+.PopupTitleBorder
+{
+	border-bottom: #cec6b5 1px solid;
+}
+
+.PopupTabArea
+{
+	color: #504845;
+	background-color: #DEDEDE;
+}
+
+.PopupTabEmptyArea
+{
+	padding-left: 10px ;
+	border-bottom: #cec6b5 1px solid;
+}
+
+.PopupTab, .PopupTabSelected
+{
+	border-right: #cec6b5 1px solid;
+	border-top: #cec6b5 1px solid;
+	border-left: #cec6b5 1px solid;
+	padding: 3px 5px 3px 5px;
+	color: #504845;
+}
+
+.PopupTab
+{
+	margin-top: 1px;
+	border-bottom: #cec6b5 1px solid;
+	cursor: pointer;
+	cursor: hand;
+}
+
+.PopupTabSelected
+{
+	font-weight:bold;
+	cursor: default;
+	padding-top: 4px;
+	border-bottom: #f1f1e3 1px solid;
+	background-color: #f7f7f7;
+}
+
+.PopupSelectionBox
+{
+	border: #a9a9a9 1px solid !important;
+	background-color: #dcdcdc !important;
+	cursor: pointer;
+	cursor: hand;
+}
+
+#tdBrowse
+{
+	vertical-align: bottom;
+}
+
+/**
+ * Dialog frame related styles.
+ */
+
+.contents
+{
+	position: absolute;
+	top: 2px;
+	left: 16px;
+	right: 16px;
+	bottom: 20px;
+	background-color: #f7f7f7;
+	overflow: hidden;
+	z-index: 1;
+}
+
+.tl, .tr, .tc, .bl, .br, .bc
+{
+	position: absolute;
+	background-image: url(images/sprites.png);
+	background-repeat: no-repeat;
+}
+
+* html .tl, * html .tr, * html .tc, * html .bl, * html .br, * html .bc
+{
+	background-image: url(images/sprites.gif);
+}
+
+.ml, .mr
+{
+	position: absolute;
+	background-image: url(images/dialog.sides.png);
+	background-repeat: repeat-y;
+}
+
+* html .ml, * html .mr
+{
+	background-image: url(images/dialog.sides.gif);
+}
+
+.rtl .ml, .rtl .mr
+{
+	position: absolute;
+	background-image: url(images/dialog.sides.rtl.png);
+	background-repeat: repeat-y;
+}
+
+* html .rtl .ml, * html .rtl .mr
+{
+	background-image: url(images/dialog.sides.gif);
+}
+
+.tl
+{
+	top: 0px;
+	left: 0px;
+	width: 16px;
+	height: 16px;
+	background-position: -16px -16px;
+}
+
+.rtl .tl
+{
+	background-position: -16px -397px;
+}
+
+.tr
+{
+	top: 0px;
+	right: 0px;
+	width: 16px;
+	height: 16px;
+	background-position: -16px -76px;
+}
+
+.rtl .tr
+{
+	background-position: -16px -457px;
+}
+
+.tc
+{
+	top: 0px;
+	right: 16px;
+	left: 16px;
+	height: 16px;
+	background-position: 0px -136px;
+	background-repeat: repeat-x;
+}
+
+.ml
+{
+	top: 16px;
+	left: 0px;
+	width: 16px;
+	bottom: 51px;
+	background-position: 0px 0px;
+}
+
+.mr
+{
+	top: 16px;
+	right: 0px;
+	width: 16px;
+	bottom: 51px;
+	background-position: -16px 0px;
+}
+
+.bl
+{
+	bottom: 0px;
+	left: 0px;
+	width: 30px;
+	height: 51px;
+	background-position: -16px -196px;
+}
+
+.rtl .bl
+{
+	background-position: -16px -517px;
+}
+
+.br
+{
+	bottom: 0px;
+	right: 0px;
+	width: 30px;
+	height: 51px;
+	background-position: -16px -263px;
+}
+
+.rtl .br
+{
+	background-position: -16px -584px;
+}
+
+.bc
+{
+	bottom: 0px;
+	right: 30px;
+	left: 30px;
+	height: 51px;
+	background-position: 0px -330px;
+	background-repeat: repeat-x;
+}
+
+/* For IE6. Do not change it. */
+* html .blocker
+{
+	position: absolute;
+	width: 100%;
+	height: 100%;
+	z-index: 12;
+	filter: progid:DXImageTransform.Microsoft.Alpha(opacity=0);
+}
+
+/* The layer used to cover the dialog when opening a child dialog. */
+.cover
+{
+	position: absolute;
+	top: 0px;
+	left: 14px;
+	right: 14px;
+	bottom: 18px;
+	z-index: 11;
+}
+
+#closeButton
+{
+	position: absolute;
+	right: 0px;
+	top: 0px;
+	margin-top: 5px;
+	margin-right: 10px;
+	width: 20px;
+	height: 20px;
+	cursor: pointer;
+	background-image: url(images/sprites.png);
+	background-repeat: no-repeat;
+	background-position: -16px -651px;
+}
+
+* html #closeButton
+{
+	cursor: hand;
+	background-image: url(images/sprites.gif);
+}
+
+.rtl #closeButton
+{
+	right: auto;
+	left: 10px;
+	margin-right: 0px;
+}
+
+#closeButton:hover
+{
+	background-position: -16px -687px;
+}
+
+#throbberBlock
+{
+	z-index: 10;
+}
+
+#throbberBlock div
+{
+	float: left;
+	width: 8px;
+	height: 9px;
+	margin-left: 2px;
+	margin-right: 2px;
+	font-size: 1px;	/* IE6 */
+}
+
+/*
+	Color Gradient Generator:
+	http://www.herethere.net/~samson/php/color_gradient/?cbegin=504845&cend=DEDEDE&steps=4
+*/
+
+.throbber_1
+{
+	background-color: #504845;
+}
+
+.throbber_2
+{
+	background-color: #736D6B;
+}
+
+.throbber_3
+{
+	background-color: #979391;
+}
+
+.throbber_4
+{
+	background-color: #BAB8B7;
+}
+
+.throbber_5
+{
+	background-color: #DEDEDE;
+}


Property changes on: announcement/trunk/src/main/webapp/fckeditor/editor/skins/silver/fck_dialog.css
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/webapp/fckeditor/editor/skins/silver/fck_dialog_ie6.js
===================================================================
--- announcement/trunk/src/main/webapp/fckeditor/editor/skins/silver/fck_dialog_ie6.js	                        (rev 0)
+++ announcement/trunk/src/main/webapp/fckeditor/editor/skins/silver/fck_dialog_ie6.js	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,110 @@
+/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2008 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ */
+
+(function()
+{
+	// IE6 doens't handle absolute positioning properly (it is always in quirks
+	// mode). This function fixes the sizes and positions of many elements that
+	// compose the skin (this is skin specific).
+	var fixSizes = window.DoResizeFixes = function()
+	{
+		var fckDlg = window.document.body ;
+
+		for ( var i = 0 ; i < fckDlg.childNodes.length ; i++ )
+		{
+			var child = fckDlg.childNodes[i] ;
+			switch ( child.className )
+			{
+				case 'contents' :
+					child.style.width = Math.max( 0, fckDlg.offsetWidth - 16 - 16 ) ;	// -left -right
+					child.style.height = Math.max( 0, fckDlg.clientHeight - 20 - 2 ) ;	// -bottom -top
+					break ;
+
+				case 'blocker' :
+				case 'cover' :
+					child.style.width = Math.max( 0, fckDlg.offsetWidth - 16 - 16 + 4 ) ;	// -left -right + 4
+					child.style.height = Math.max( 0, fckDlg.clientHeight - 20 - 2 + 4 ) ;	// -bottom -top + 4
+					break ;
+
+				case 'tr' :
+					child.style.left = Math.max( 0, fckDlg.clientWidth - 16 ) ;
+					break ;
+
+				case 'tc' :
+					child.style.width = Math.max( 0, fckDlg.clientWidth - 16 - 16 ) ;
+					break ;
+
+				case 'ml' :
+					child.style.height = Math.max( 0, fckDlg.clientHeight - 16 - 51 ) ;
+					break ;
+
+				case 'mr' :
+					child.style.left = Math.max( 0, fckDlg.clientWidth - 16 ) ;
+					child.style.height = Math.max( 0, fckDlg.clientHeight - 16 - 51 ) ;
+					break ;
+
+				case 'bl' :
+					child.style.top = Math.max( 0, fckDlg.clientHeight - 51 ) ;
+					break ;
+
+				case 'br' :
+					child.style.left = Math.max( 0, fckDlg.clientWidth - 30 ) ;
+					child.style.top = Math.max( 0, fckDlg.clientHeight - 51 ) ;
+					break ;
+
+				case 'bc' :
+					child.style.width = Math.max( 0, fckDlg.clientWidth - 30 - 30 ) ;
+					child.style.top = Math.max( 0, fckDlg.clientHeight - 51 ) ;
+					break ;
+			}
+		}
+	}
+
+	var closeButtonOver = function()
+	{
+		this.style.backgroundPosition = '-16px -687px' ;
+	} ;
+
+	var closeButtonOut = function()
+	{
+		this.style.backgroundPosition = '-16px -651px' ;
+	} ;
+
+	var fixCloseButton = function()
+	{
+		var closeButton = document.getElementById ( 'closeButton' ) ;
+
+		closeButton.onmouseover	= closeButtonOver ;
+		closeButton.onmouseout	= closeButtonOut ;
+	}
+
+	var onLoad = function()
+	{
+		fixSizes() ;
+		fixCloseButton() ;
+
+		window.attachEvent( 'onresize', fixSizes ) ;
+		window.detachEvent( 'onload', onLoad ) ;
+	}
+
+	window.attachEvent( 'onload', onLoad ) ;
+
+})() ;


Property changes on: announcement/trunk/src/main/webapp/fckeditor/editor/skins/silver/fck_dialog_ie6.js
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/webapp/fckeditor/editor/skins/silver/fck_editor.css
===================================================================
--- announcement/trunk/src/main/webapp/fckeditor/editor/skins/silver/fck_editor.css	                        (rev 0)
+++ announcement/trunk/src/main/webapp/fckeditor/editor/skins/silver/fck_editor.css	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,473 @@
+/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2008 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * Styles used by the editor IFRAME and Toolbar.
+ */
+
+/*
+	### Basic Editor IFRAME Styles.
+*/
+
+body
+{
+	padding: 1px;
+	margin: 0;
+	background-color: #ffffff;
+}
+
+#xEditingArea
+{
+	border: #696969 1px solid;
+}
+
+.SourceField
+{
+	padding: 5px;
+	margin: 0px;
+	font-family: Monospace;
+}
+
+/*
+	Toolbar
+*/
+
+.TB_ToolbarSet, .TB_Expand, .TB_Collapse
+{
+    cursor: default;
+	background-color: #f7f7f7;
+}
+
+.TB_ToolbarSet
+{
+	padding: 1px;
+	border-top: #efefde 1px outset;
+	border-bottom: #efefde 1px outset;
+}
+
+.TB_ToolbarSet TD
+{
+	font-size: 11px;
+	font-family: 'Microsoft Sans Serif' , Tahoma, Arial, Verdana, Sans-Serif;
+}
+
+.TB_Toolbar
+{
+    display: inline-table;
+}
+
+.TB_Separator
+{
+    width: 1px;
+    height: 21px;
+    margin: 2px;
+    background-color: #C6C3BD;
+}
+
+.TB_Start
+{
+    background-image: url(images/toolbar.start.gif);
+    margin-left: 2px;
+    margin-right: 2px;
+    width: 3px;
+    background-repeat: no-repeat;
+    height: 27px;
+    background-position: center center;
+}
+
+.TB_End
+{
+	display: none;
+}
+
+.TB_ExpandImg
+{
+	background-image: url(images/toolbar.expand.gif);
+	background-repeat: no-repeat;
+}
+
+.TB_CollapseImg
+{
+	background-image: url(images/toolbar.collapse.gif);
+	background-repeat: no-repeat;
+}
+
+.TB_SideBorder
+{
+	background-color: #696969;
+}
+
+.TB_Expand, .TB_Collapse
+{
+	padding: 2px 2px 2px 2px;
+	border: #efefde 1px outset;
+}
+
+.TB_Collapse
+{
+	border: #efefde 1px outset;
+	width: 5px;
+}
+
+.TB_Break
+{
+	height: 27px;
+}
+
+/*
+	Toolbar Button
+*/
+
+.TB_Button_On, .TB_Button_Off, .TB_Button_On_Over, .TB_Button_Off_Over, .TB_Button_Disabled
+{
+	padding: 1px ;
+	margin:1px;
+	height: 21px;
+}
+
+.TB_Button_On, .TB_Button_Off, .TB_Button_On_Over, .TB_Button_Off_Over, .TB_Button_Disabled
+{
+	border: #cec6b5 1px solid;
+}
+
+.TB_Button_On
+{
+	border-color: #316ac5;
+	background-color: #c1d2ee;
+}
+
+.TB_Button_On_Over, .TB_Button_Off_Over
+{
+    border: #316ac5 1px solid;
+    background-color: #dff1ff;
+}
+
+.TB_Button_Off
+{
+	background: #efefef url(images/toolbar.buttonbg.gif) repeat-x;
+}
+
+.TB_Button_Off, .TB_Combo_Off
+{
+	opacity: 0.70; /* Safari, Opera and Mozilla */
+	filter: alpha(opacity=70); /* IE */
+	/* -moz-opacity: 0.70; Mozilla (Old) */
+}
+
+.TB_Button_Disabled
+{
+    opacity: 0.30; /* Safari, Opera and Mozilla */
+    filter: gray() alpha(opacity=30); /* IE */
+}
+
+.TB_Button_Padding
+{
+    visibility: hidden;
+    width: 3px;
+    height: 21px;
+}
+
+.TB_Button_Image
+{
+    overflow: hidden;
+    width: 16px;
+    height: 16px;
+    margin: 3px;
+    margin-top: 4px;
+    margin-bottom: 2px;
+    background-repeat: no-repeat;
+}
+
+/* For composed button ( icon + text, icon + arrow ), we must compensate the table */
+.TB_Button_On TABLE .TB_Button_Image,
+.TB_Button_Off TABLE .TB_Button_Image,
+.TB_Button_On_Over TABLE .TB_Button_Image,
+.TB_Button_Off_Over TABLE .TB_Button_Image,
+.TB_Button_Disabled TABLE .TB_Button_Image
+{
+    margin-top: 3px;
+}
+
+.TB_Button_Image img
+{
+    position: relative;
+}
+
+.TB_ConnectionLine
+{
+    background-color: #ffffff;
+    height: 1px;
+    margin-left: 1px;   /* ltr */
+    margin-right: 1px;  /* rtl */
+}
+
+/*
+	Menu
+*/
+
+.MN_Menu
+{
+    border: 1px solid #8f8f73;
+    padding: 2px;
+    background-color: #f7f7f7;
+    cursor: default;
+}
+
+.MN_Menu, .MN_Menu .MN_Label
+{
+    font-size: 11px;
+    font-family: 'Microsoft Sans Serif' , Tahoma, Arial, Verdana, Sans-Serif;
+}
+
+.MN_Item_Padding
+{
+    visibility: hidden;
+    width: 3px;
+    height: 20px;
+}
+
+.MN_Icon
+{
+    background-color: #dedede;
+    text-align: center;
+    height: 20px;
+}
+
+.MN_Label
+{
+    padding-left: 3px;
+    padding-right: 3px;
+}
+
+.MN_Separator
+{
+    height: 3px;
+}
+
+.MN_Separator_Line
+{
+    border-top: #b9b99d 1px solid;
+}
+
+.MN_Item .MN_Icon IMG
+{
+    filter: alpha(opacity=70);
+    opacity: 0.70;
+}
+
+.MN_Item_Over
+{
+    color: #ffffff;
+    background-color: #8a857d;
+}
+
+.MN_Item_Over .MN_Icon
+{
+    background-color: #6c6761;
+}
+
+.MN_Item_Disabled IMG
+{
+    filter: gray() alpha(opacity=30); /* IE */
+    opacity: 0.30; /* Safari, Opera and Mozilla */
+}
+
+.MN_Item_Disabled .MN_Label
+{
+    color: #b7b7b7;
+}
+
+.MN_Arrow
+{
+    padding-right: 3px;
+    padding-left: 3px;
+}
+
+.MN_ConnectionLine
+{
+    background-color: #ffffff;
+}
+
+.Menu .TB_Button_On, .Menu .TB_Button_On_Over
+{
+    border: #8f8f73 1px solid;
+    background-color: #ffffff;
+}
+
+/*
+	### Panel Styles
+*/
+
+.FCK_Panel
+{
+    border: #8f8f73 1px solid;
+    padding: 2px;
+    background-color: #ffffff;
+}
+
+.FCK_Panel, .FCK_Panel TD
+{
+    font-family: 'Microsoft Sans Serif' , Tahoma, Arial, Verdana, Sans-Serif;
+    font-size: 11px;
+}
+
+/*
+	### Special Combos
+*/
+
+.SC_Panel
+{
+    overflow: auto;
+    white-space: nowrap;
+    cursor: default;
+    border: 1px solid #8f8f73;
+    padding-left: 2px;
+    padding-right: 2px;
+}
+
+.SC_Panel, .SC_Panel TD
+{
+    font-size: 11px;
+    font-family: 'Microsoft Sans Serif' , Tahoma, Arial, Verdana, Sans-Serif;
+}
+
+.SC_Item, .SC_ItemSelected
+{
+    margin-top: 2px;
+    margin-bottom: 2px;
+    background-position: left center;
+    padding-left: 11px;
+    padding-right: 3px;
+    padding-top: 2px;
+    padding-bottom: 2px;
+    text-overflow: ellipsis;
+    overflow: hidden;
+    background-repeat: no-repeat;
+    border: #dddddd 1px solid;
+}
+
+.SC_Item *, .SC_ItemSelected *
+{
+    margin-top: 0px;
+    margin-bottom: 0px;
+}
+
+.SC_ItemSelected
+{
+    border: #9a9afb 1px solid;
+    background-image: url(images/toolbar.arrowright.gif);
+}
+
+.SC_ItemOver
+{
+    border: #316ac5 1px solid;
+}
+
+.SC_Field
+{
+    margin-top:1px ;
+    border: #b7b7a6 1px solid;
+    cursor: default;
+}
+
+.SC_FieldCaption
+{
+    padding-top: 1px ;
+    overflow: visible;
+    padding-right: 5px;
+    padding-left: 5px;
+    opacity: 0.75; /* Safari, Opera and Mozilla */
+    filter: alpha(opacity=70); /* IE */ /* -moz-opacity: 0.75; Mozilla (Old) */
+    height: 23px;
+    background-color: #f7f7f7;
+}
+
+.SC_FieldLabel
+{
+    white-space: nowrap;
+    padding: 2px;
+    width: 100%;
+    cursor: default;
+    background-color: #ffffff;
+    text-overflow: ellipsis;
+    overflow: hidden;
+}
+
+.SC_FieldButton
+{
+    background-position: center center;
+    background-image: url(images/toolbar.buttonarrow.gif);
+    border-left: #b7b7a6 1px solid;
+    width: 14px;
+    background-repeat: no-repeat;
+}
+
+.SC_FieldDisabled .SC_FieldButton, .SC_FieldDisabled .SC_FieldCaption, .SC_FieldDisabled .TB_ButtonType_Text
+{
+    opacity: 0.30; /* Safari, Opera and Mozilla */
+    filter: gray() alpha(opacity=30); /* IE */ /* -moz-opacity: 0.30; Mozilla (Old) */
+}
+
+.SC_FieldOver
+{
+    border: #316ac5 1px solid;
+}
+
+.SC_FieldOver .SC_FieldButton
+{
+    border-left: #316ac5 1px solid;
+}
+
+/*
+	### Color Selector Panel
+*/
+
+.ColorBoxBorder
+{
+    border: #808080 1px solid;
+    position: static;
+}
+
+.ColorBox
+{
+    font-size: 1px;
+    width: 10px;
+    position: static;
+    height: 10px;
+}
+
+.ColorDeselected, .ColorSelected
+{
+    cursor: default;
+}
+
+.ColorDeselected
+{
+    border: #ffffff 1px solid;
+    padding: 2px;
+    float: left;
+}
+
+.ColorSelected
+{
+    border: #316ac5 1px solid;
+    padding: 2px;
+    float: left;
+    background-color: #c1d2ee;
+}


Property changes on: announcement/trunk/src/main/webapp/fckeditor/editor/skins/silver/fck_editor.css
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/webapp/fckeditor/editor/skins/silver/fck_strip.gif
===================================================================
(Binary files differ)


Property changes on: announcement/trunk/src/main/webapp/fckeditor/editor/skins/silver/fck_strip.gif
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: announcement/trunk/src/main/webapp/fckeditor/editor/skins/silver/images/dialog.sides.gif
===================================================================
(Binary files differ)


Property changes on: announcement/trunk/src/main/webapp/fckeditor/editor/skins/silver/images/dialog.sides.gif
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: announcement/trunk/src/main/webapp/fckeditor/editor/skins/silver/images/dialog.sides.png
===================================================================
(Binary files differ)


Property changes on: announcement/trunk/src/main/webapp/fckeditor/editor/skins/silver/images/dialog.sides.png
___________________________________________________________________
Name: svn:mime-type
   + image/png

Added: announcement/trunk/src/main/webapp/fckeditor/editor/skins/silver/images/dialog.sides.rtl.png
===================================================================
(Binary files differ)


Property changes on: announcement/trunk/src/main/webapp/fckeditor/editor/skins/silver/images/dialog.sides.rtl.png
___________________________________________________________________
Name: svn:mime-type
   + image/png

Added: announcement/trunk/src/main/webapp/fckeditor/editor/skins/silver/images/sprites.gif
===================================================================
(Binary files differ)


Property changes on: announcement/trunk/src/main/webapp/fckeditor/editor/skins/silver/images/sprites.gif
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: announcement/trunk/src/main/webapp/fckeditor/editor/skins/silver/images/sprites.png
===================================================================
(Binary files differ)


Property changes on: announcement/trunk/src/main/webapp/fckeditor/editor/skins/silver/images/sprites.png
___________________________________________________________________
Name: svn:mime-type
   + image/png

Added: announcement/trunk/src/main/webapp/fckeditor/editor/skins/silver/images/toolbar.arrowright.gif
===================================================================
(Binary files differ)


Property changes on: announcement/trunk/src/main/webapp/fckeditor/editor/skins/silver/images/toolbar.arrowright.gif
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: announcement/trunk/src/main/webapp/fckeditor/editor/skins/silver/images/toolbar.buttonarrow.gif
===================================================================
(Binary files differ)


Property changes on: announcement/trunk/src/main/webapp/fckeditor/editor/skins/silver/images/toolbar.buttonarrow.gif
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: announcement/trunk/src/main/webapp/fckeditor/editor/skins/silver/images/toolbar.buttonbg.gif
===================================================================
(Binary files differ)


Property changes on: announcement/trunk/src/main/webapp/fckeditor/editor/skins/silver/images/toolbar.buttonbg.gif
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: announcement/trunk/src/main/webapp/fckeditor/editor/skins/silver/images/toolbar.collapse.gif
===================================================================
(Binary files differ)


Property changes on: announcement/trunk/src/main/webapp/fckeditor/editor/skins/silver/images/toolbar.collapse.gif
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: announcement/trunk/src/main/webapp/fckeditor/editor/skins/silver/images/toolbar.end.gif
===================================================================
(Binary files differ)


Property changes on: announcement/trunk/src/main/webapp/fckeditor/editor/skins/silver/images/toolbar.end.gif
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: announcement/trunk/src/main/webapp/fckeditor/editor/skins/silver/images/toolbar.expand.gif
===================================================================
(Binary files differ)


Property changes on: announcement/trunk/src/main/webapp/fckeditor/editor/skins/silver/images/toolbar.expand.gif
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: announcement/trunk/src/main/webapp/fckeditor/editor/skins/silver/images/toolbar.separator.gif
===================================================================
(Binary files differ)


Property changes on: announcement/trunk/src/main/webapp/fckeditor/editor/skins/silver/images/toolbar.separator.gif
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: announcement/trunk/src/main/webapp/fckeditor/editor/skins/silver/images/toolbar.start.gif
===================================================================
(Binary files differ)


Property changes on: announcement/trunk/src/main/webapp/fckeditor/editor/skins/silver/images/toolbar.start.gif
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: announcement/trunk/src/main/webapp/fckeditor/fckconfig.js
===================================================================
--- announcement/trunk/src/main/webapp/fckeditor/fckconfig.js	                        (rev 0)
+++ announcement/trunk/src/main/webapp/fckeditor/fckconfig.js	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,321 @@
+/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2008 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * Editor configuration settings.
+ *
+ * Follow this link for more information:
+ * http://docs.fckeditor.net/FCKeditor_2.x/Developers_Guide/Configuration/Configuration_Options
+ */
+
+FCKConfig.CustomConfigurationsPath = '' ;
+
+FCKConfig.EditorAreaCSS = FCKConfig.BasePath + 'css/fck_editorarea.css' ;
+FCKConfig.EditorAreaStyles = '' ;
+FCKConfig.ToolbarComboPreviewCSS = '' ;
+
+FCKConfig.DocType = '' ;
+
+FCKConfig.BaseHref = '' ;
+
+FCKConfig.FullPage = false ;
+
+// The following option determines whether the "Show Blocks" feature is enabled or not at startup.
+FCKConfig.StartupShowBlocks = false ;
+
+FCKConfig.Debug = false ;
+FCKConfig.AllowQueryStringDebug = true ;
+
+FCKConfig.SkinPath = FCKConfig.BasePath + 'skins/default/' ;
+FCKConfig.SkinEditorCSS = '' ;	// FCKConfig.SkinPath + "|<minified css>" ;
+FCKConfig.SkinDialogCSS = '' ;	// FCKConfig.SkinPath + "|<minified css>" ;
+
+FCKConfig.PreloadImages = [ FCKConfig.SkinPath + 'images/toolbar.start.gif', FCKConfig.SkinPath + 'images/toolbar.buttonarrow.gif' ] ;
+
+FCKConfig.PluginsPath = FCKConfig.BasePath + 'plugins/' ;
+
+// FCKConfig.Plugins.Add( 'autogrow' ) ;
+// FCKConfig.Plugins.Add( 'dragresizetable' );
+FCKConfig.AutoGrowMax = 400 ;
+
+// FCKConfig.ProtectedSource.Add( /<%[\s\S]*?%>/g ) ;	// ASP style server side code <%...%>
+// FCKConfig.ProtectedSource.Add( /<\?[\s\S]*?\?>/g ) ;	// PHP style server side code
+// FCKConfig.ProtectedSource.Add( /(<asp:[^\>]+>[\s|\S]*?<\/asp:[^\>]+>)|(<asp:[^\>]+\/>)/gi ) ;	// ASP.Net style tags <asp:control>
+
+FCKConfig.AutoDetectLanguage	= true ;
+FCKConfig.DefaultLanguage		= 'en' ;
+FCKConfig.ContentLangDirection	= 'ltr' ;
+
+FCKConfig.ProcessHTMLEntities	= true ;
+FCKConfig.IncludeLatinEntities	= true ;
+FCKConfig.IncludeGreekEntities	= true ;
+
+FCKConfig.ProcessNumericEntities = false ;
+
+FCKConfig.AdditionalNumericEntities = ''  ;		// Single Quote: "'"
+
+FCKConfig.FillEmptyBlocks	= true ;
+
+FCKConfig.FormatSource		= true ;
+FCKConfig.FormatOutput		= true ;
+FCKConfig.FormatIndentator	= '    ' ;
+
+FCKConfig.StartupFocus	= false ;
+FCKConfig.ForcePasteAsPlainText	= false ;
+FCKConfig.AutoDetectPasteFromWord = true ;	// IE only.
+FCKConfig.ShowDropDialog = true ;
+FCKConfig.ForceSimpleAmpersand	= false ;
+FCKConfig.TabSpaces		= 0 ;
+FCKConfig.ShowBorders	= true ;
+FCKConfig.SourcePopup	= false ;
+FCKConfig.ToolbarStartExpanded	= true ;
+FCKConfig.ToolbarCanCollapse	= true ;
+FCKConfig.IgnoreEmptyParagraphValue = true ;
+FCKConfig.FloatingPanelsZIndex = 10000 ;
+FCKConfig.HtmlEncodeOutput = false ;
+
+FCKConfig.TemplateReplaceAll = true ;
+FCKConfig.TemplateReplaceCheckbox = true ;
+
+FCKConfig.ToolbarLocation = 'In' ;
+
+FCKConfig.ToolbarSets["Default"] = [
+	['Source','DocProps','-','Save','NewPage','Preview','-','Templates'],
+	['Cut','Copy','Paste','PasteText','PasteWord','-','Print','SpellCheck'],
+	['Undo','Redo','-','Find','Replace','-','SelectAll','RemoveFormat'],
+	['Form','Checkbox','Radio','TextField','Textarea','Select','Button','ImageButton','HiddenField'],
+	'/',
+	['Bold','Italic','Underline','StrikeThrough','-','Subscript','Superscript'],
+	['OrderedList','UnorderedList','-','Outdent','Indent','Blockquote'],
+	['JustifyLeft','JustifyCenter','JustifyRight','JustifyFull'],
+	['Link','Unlink','Anchor'],
+	['Image','Flash','Table','Rule','Smiley','SpecialChar','PageBreak'],
+	'/',
+	['Style','FontFormat','FontName','FontSize'],
+	['TextColor','BGColor'],
+	['FitWindow','ShowBlocks','-','About']		// No comma for the last row.
+] ;
+
+FCKConfig.ToolbarSets["Basic"] = [
+	['Bold','Italic','-','OrderedList','UnorderedList','-','Link','Unlink','-','About']
+] ;
+
+FCKConfig.EnterMode = 'p' ;			// p | div | br
+FCKConfig.ShiftEnterMode = 'br' ;	// p | div | br
+
+FCKConfig.Keystrokes = [
+	[ CTRL + 65 /*A*/, true ],
+	[ CTRL + 67 /*C*/, true ],
+	[ CTRL + 70 /*F*/, true ],
+	[ CTRL + 83 /*S*/, true ],
+	[ CTRL + 84 /*T*/, true ],
+	[ CTRL + 88 /*X*/, true ],
+	[ CTRL + 86 /*V*/, 'Paste' ],
+	[ CTRL + 45 /*INS*/, true ],
+	[ SHIFT + 45 /*INS*/, 'Paste' ],
+	[ CTRL + 88 /*X*/, 'Cut' ],
+	[ SHIFT + 46 /*DEL*/, 'Cut' ],
+	[ CTRL + 90 /*Z*/, 'Undo' ],
+	[ CTRL + 89 /*Y*/, 'Redo' ],
+	[ CTRL + SHIFT + 90 /*Z*/, 'Redo' ],
+	[ CTRL + 76 /*L*/, 'Link' ],
+	[ CTRL + 66 /*B*/, 'Bold' ],
+	[ CTRL + 73 /*I*/, 'Italic' ],
+	[ CTRL + 85 /*U*/, 'Underline' ],
+	[ CTRL + SHIFT + 83 /*S*/, 'Save' ],
+	[ CTRL + ALT + 13 /*ENTER*/, 'FitWindow' ]
+] ;
+
+FCKConfig.ContextMenu = ['Generic','Link','Anchor','Image','Flash','Select','Textarea','Checkbox','Radio','TextField','HiddenField','ImageButton','Button','BulletedList','NumberedList','Table','Form'] ;
+FCKConfig.BrowserContextMenuOnCtrl = false ;
+
+FCKConfig.EnableMoreFontColors = true ;
+FCKConfig.FontColors = '000000,993300,333300,003300,003366,000080,333399,333333,800000,FF6600,808000,808080,008080,0000FF,666699,808080,FF0000,FF9900,99CC00,339966,33CCCC,3366FF,800080,999999,FF00FF,FFCC00,FFFF00,00FF00,00FFFF,00CCFF,993366,C0C0C0,FF99CC,FFCC99,FFFF99,CCFFCC,CCFFFF,99CCFF,CC99FF,FFFFFF' ;
+
+FCKConfig.FontFormats	= 'p;h1;h2;h3;h4;h5;h6;pre;address;div' ;
+FCKConfig.FontNames		= 'Arial;Comic Sans MS;Courier New;Tahoma;Times New Roman;Verdana' ;
+FCKConfig.FontSizes		= 'smaller;larger;xx-small;x-small;small;medium;large;x-large;xx-large' ;
+
+FCKConfig.StylesXmlPath		= FCKConfig.EditorPath + 'fckstyles.xml' ;
+FCKConfig.TemplatesXmlPath	= FCKConfig.EditorPath + 'fcktemplates.xml' ;
+
+FCKConfig.SpellChecker			= 'ieSpell' ;	// 'ieSpell' | 'SpellerPages'
+FCKConfig.IeSpellDownloadUrl	= 'http://www.iespell.com/download.php' ;
+FCKConfig.SpellerPagesServerScript = 'server-scripts/spellchecker.php' ;	// Available extension: .php .cfm .pl
+FCKConfig.FirefoxSpellChecker	= false ;
+
+FCKConfig.MaxUndoLevels = 15 ;
+
+FCKConfig.DisableObjectResizing = false ;
+FCKConfig.DisableFFTableHandles = true ;
+
+FCKConfig.LinkDlgHideTarget		= false ;
+FCKConfig.LinkDlgHideAdvanced	= false ;
+
+FCKConfig.ImageDlgHideLink		= false ;
+FCKConfig.ImageDlgHideAdvanced	= false ;
+
+FCKConfig.FlashDlgHideAdvanced	= false ;
+
+FCKConfig.ProtectedTags = '' ;
+
+// This will be applied to the body element of the editor
+FCKConfig.BodyId = '' ;
+FCKConfig.BodyClass = '' ;
+
+FCKConfig.DefaultStyleLabel = '' ;
+FCKConfig.DefaultFontFormatLabel = '' ;
+FCKConfig.DefaultFontLabel = '' ;
+FCKConfig.DefaultFontSizeLabel = '' ;
+
+FCKConfig.DefaultLinkTarget = '' ;
+
+// The option switches between trying to keep the html structure or do the changes so the content looks like it was in Word
+FCKConfig.CleanWordKeepsStructure = false ;
+
+// Only inline elements are valid.
+FCKConfig.RemoveFormatTags = 'b,big,code,del,dfn,em,font,i,ins,kbd,q,samp,small,span,strike,strong,sub,sup,tt,u,var' ;
+
+// Attributes that will be removed
+FCKConfig.RemoveAttributes = 'class,style,lang,width,height,align,hspace,valign' ;
+
+FCKConfig.CustomStyles =
+{
+	'Red Title'	: { Element : 'h3', Styles : { 'color' : 'Red' } }
+};
+
+// Do not add, rename or remove styles here. Only apply definition changes.
+FCKConfig.CoreStyles =
+{
+	// Basic Inline Styles.
+	'Bold'			: { Element : 'strong', Overrides : 'b' },
+	'Italic'		: { Element : 'em', Overrides : 'i' },
+	'Underline'		: { Element : 'u' },
+	'StrikeThrough'	: { Element : 'strike' },
+	'Subscript'		: { Element : 'sub' },
+	'Superscript'	: { Element : 'sup' },
+
+	// Basic Block Styles (Font Format Combo).
+	'p'				: { Element : 'p' },
+	'div'			: { Element : 'div' },
+	'pre'			: { Element : 'pre' },
+	'address'		: { Element : 'address' },
+	'h1'			: { Element : 'h1' },
+	'h2'			: { Element : 'h2' },
+	'h3'			: { Element : 'h3' },
+	'h4'			: { Element : 'h4' },
+	'h5'			: { Element : 'h5' },
+	'h6'			: { Element : 'h6' },
+
+	// Other formatting features.
+	'FontFace' :
+	{
+		Element		: 'span',
+		Styles		: { 'font-family' : '#("Font")' },
+		Overrides	: [ { Element : 'font', Attributes : { 'face' : null } } ]
+	},
+
+	'Size' :
+	{
+		Element		: 'span',
+		Styles		: { 'font-size' : '#("Size","fontSize")' },
+		Overrides	: [ { Element : 'font', Attributes : { 'size' : null } } ]
+	},
+
+	'Color' :
+	{
+		Element		: 'span',
+		Styles		: { 'color' : '#("Color","color")' },
+		Overrides	: [ { Element : 'font', Attributes : { 'color' : null } } ]
+	},
+
+	'BackColor'		: { Element : 'span', Styles : { 'background-color' : '#("Color","color")' } },
+
+	'SelectionHighlight' : { Element : 'span', Styles : { 'background-color' : 'navy', 'color' : 'white' } }
+};
+
+// The distance of an indentation step.
+FCKConfig.IndentLength = 40 ;
+FCKConfig.IndentUnit = 'px' ;
+
+// Alternatively, FCKeditor allows the use of CSS classes for block indentation.
+// This overrides the IndentLength/IndentUnit settings.
+FCKConfig.IndentClasses = [] ;
+
+// [ Left, Center, Right, Justified ]
+FCKConfig.JustifyClasses = [] ;
+
+// The following value defines which File Browser connector and Quick Upload
+// "uploader" to use. It is valid for the default implementaion and it is here
+// just to make this configuration file cleaner.
+// It is not possible to change this value using an external file or even
+// inline when creating the editor instance. In that cases you must set the
+// values of LinkBrowserURL, ImageBrowserURL and so on.
+// Custom implementations should just ignore it.
+var _FileBrowserLanguage	= 'php' ;	// asp | aspx | cfm | lasso | perl | php | py
+var _QuickUploadLanguage	= 'php' ;	// asp | aspx | cfm | lasso | perl | php | py
+
+// Don't care about the following two lines. It just calculates the correct connector
+// extension to use for the default File Browser (Perl uses "cgi").
+var _FileBrowserExtension = _FileBrowserLanguage == 'perl' ? 'cgi' : _FileBrowserLanguage ;
+var _QuickUploadExtension = _QuickUploadLanguage == 'perl' ? 'cgi' : _QuickUploadLanguage ;
+
+FCKConfig.LinkBrowser = true ;
+FCKConfig.LinkBrowserURL = FCKConfig.BasePath + 'filemanager/browser/default/browser.html?Connector=' + encodeURIComponent( FCKConfig.BasePath + 'filemanager/connectors/' + _FileBrowserLanguage + '/connector.' + _FileBrowserExtension ) ;
+FCKConfig.LinkBrowserWindowWidth	= FCKConfig.ScreenWidth * 0.7 ;		// 70%
+FCKConfig.LinkBrowserWindowHeight	= FCKConfig.ScreenHeight * 0.7 ;	// 70%
+
+FCKConfig.ImageBrowser = true ;
+FCKConfig.ImageBrowserURL = FCKConfig.BasePath + 'filemanager/browser/default/browser.html?Type=Image&Connector=' + encodeURIComponent( FCKConfig.BasePath + 'filemanager/connectors/' + _FileBrowserLanguage + '/connector.' + _FileBrowserExtension ) ;
+FCKConfig.ImageBrowserWindowWidth  = FCKConfig.ScreenWidth * 0.7 ;	// 70% ;
+FCKConfig.ImageBrowserWindowHeight = FCKConfig.ScreenHeight * 0.7 ;	// 70% ;
+
+FCKConfig.FlashBrowser = true ;
+FCKConfig.FlashBrowserURL = FCKConfig.BasePath + 'filemanager/browser/default/browser.html?Type=Flash&Connector=' + encodeURIComponent( FCKConfig.BasePath + 'filemanager/connectors/' + _FileBrowserLanguage + '/connector.' + _FileBrowserExtension ) ;
+FCKConfig.FlashBrowserWindowWidth  = FCKConfig.ScreenWidth * 0.7 ;	//70% ;
+FCKConfig.FlashBrowserWindowHeight = FCKConfig.ScreenHeight * 0.7 ;	//70% ;
+
+//FCKConfig.LinkUpload = true ;
+FCKConfig.LinkUpload = false ;
+FCKConfig.LinkUploadURL = FCKConfig.BasePath + 'filemanager/connectors/' + _QuickUploadLanguage + '/upload.' + _QuickUploadExtension ;
+FCKConfig.LinkUploadAllowedExtensions	= ".(7z|aiff|asf|avi|bmp|csv|doc|fla|flv|gif|gz|gzip|jpeg|jpg|mid|mov|mp3|mp4|mpc|mpeg|mpg|ods|odt|pdf|png|ppt|pxd|qt|ram|rar|rm|rmi|rmvb|rtf|sdc|sitd|swf|sxc|sxw|tar|tgz|tif|tiff|txt|vsd|wav|wma|wmv|xls|xml|zip)$" ;			// empty for all
+FCKConfig.LinkUploadDeniedExtensions	= "" ;	// empty for no one
+
+//FCKConfig.ImageUpload = true ;
+FCKConfig.ImageUpload = false ;
+FCKConfig.ImageUploadURL = FCKConfig.BasePath + 'filemanager/connectors/' + _QuickUploadLanguage + '/upload.' + _QuickUploadExtension + '?Type=Image' ;
+FCKConfig.ImageUploadAllowedExtensions	= ".(jpg|gif|jpeg|png|bmp)$" ;		// empty for all
+FCKConfig.ImageUploadDeniedExtensions	= "" ;							// empty for no one
+
+//FCKConfig.FlashUpload = true ;
+FCKConfig.FlashUpload = false ;
+FCKConfig.FlashUploadURL = FCKConfig.BasePath + 'filemanager/connectors/' + _QuickUploadLanguage + '/upload.' + _QuickUploadExtension + '?Type=Flash' ;
+FCKConfig.FlashUploadAllowedExtensions	= ".(swf|flv)$" ;		// empty for all
+FCKConfig.FlashUploadDeniedExtensions	= "" ;					// empty for no one
+
+FCKConfig.SmileyPath	= FCKConfig.BasePath + 'images/smiley/msn/' ;
+FCKConfig.SmileyImages	= ['regular_smile.gif','sad_smile.gif','wink_smile.gif','teeth_smile.gif','confused_smile.gif','tounge_smile.gif','embaressed_smile.gif','omg_smile.gif','whatchutalkingabout_smile.gif','angry_smile.gif','angel_smile.gif','shades_smile.gif','devil_smile.gif','cry_smile.gif','lightbulb.gif','thumbs_down.gif','thumbs_up.gif','heart.gif','broken_heart.gif','kiss.gif','envelope.gif'] ;
+FCKConfig.SmileyColumns = 8 ;
+FCKConfig.SmileyWindowWidth		= 320 ;
+FCKConfig.SmileyWindowHeight	= 210 ;
+
+FCKConfig.BackgroundBlockerColor = '#ffffff' ;
+FCKConfig.BackgroundBlockerOpacity = 0.50 ;
+
+FCKConfig.MsWebBrowserControlCompat = false ;


Property changes on: announcement/trunk/src/main/webapp/fckeditor/fckconfig.js
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/webapp/fckeditor/fckeditor.afp
===================================================================
--- announcement/trunk/src/main/webapp/fckeditor/fckeditor.afp	                        (rev 0)
+++ announcement/trunk/src/main/webapp/fckeditor/fckeditor.afp	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,159 @@
+<%
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2008 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * This is the integration file for Active FoxPro Pages.
+ *
+
+DEFINE CLASS goFckeditor AS CONTAINER OLEPUBLIC
+
+	cInstanceName =""
+	BasePath =""
+	cWIDTH =""
+	cHEIGHT =""
+	ToolbarSet =""
+	cValue=""
+	DIMENSION aConfig(10,2)
+
+&& -----------------------------------------------------------------------
+	FUNCTION fckeditor( tcInstanceName )
+		LOCAL lnLoop,lnLoop2
+		THIS.cInstanceName	= tcInstanceName
+		THIS.BasePath	= '/fckeditor/'
+		THIS.cWIDTH		= '100%'
+		THIS.cHEIGHT	= '200'
+		THIS.ToolbarSet	= 'Default'
+		THIS.cValue		= ''
+		FOR lnLoop=1 TO 10
+			FOR lnLoop2=1 TO 2
+				THIS.aConfig(lnLoop,lnLoop2)	= ""
+			NEXT
+		NEXT
+		RETURN
+	ENDFUNC
+
+
+&& -----------------------------------------------------------------------
+	FUNCTION CREATE()
+		? THIS.CreateHtml()
+		RETURN
+	ENDFUNC
+
+&& -----------------------------------------------------------------------
+	FUNCTION CreateHtml()
+		LOCAL html
+		LOCAL lcLink
+
+		HtmlValue = THIS.cValue		&& HTMLSPECIALCHARS()
+
+		html = []
+		IF THIS.IsCompatible()
+			lcLink = THIS.BasePath+[editor/fckeditor.html?InstanceName=]+THIS.cInstanceName
+
+			IF ( !THIS.ToolbarSet == '' )
+				lcLink = lcLink + [&Toolbar=]+THIS.ToolbarSet
+			ENDIF
+
+			&& Render the LINKED HIDDEN FIELD.
+			html = html + [<input type="hidden" id="]+THIS.cInstanceName +[" name="]+THIS.cInstanceName +[" value="]+HtmlValue+[" style="display:none" />]
+
+			&& Render the configurations HIDDEN FIELD.
+			html = html + [<input type="hidden" id="]+THIS.cInstanceName +[___Config" value="]+THIS.GetConfigFieldString() + [" style="display:none" />] +CHR(13)+CHR(10)
+
+			&& Render the EDITOR IFRAME.
+			html = html + [<iframe id="]+THIS.cInstanceName +[___Frame" src="Link" width="]+THIS.cWIDTH+[" height="]+THIS.cHEIGHT+[" frameborder="0" scrolling="no"></iframe>]
+		ELSE
+			IF ( AT("%", THIS.cWIDTH)=0 )
+				WidthCSS = THIS.cWIDTH + 'px'
+			ELSE
+				WidthCSS = THIS.cWIDTH
+			ENDIF
+
+			IF ( AT("%",THIS.cHEIGHT)=0  )
+				HeightCSS = THIS.cHEIGHT + 'px'
+			ELSE
+				HeightCSS = THIS.cHEIGHT
+			ENDIF
+
+			html = html + [<textarea name="]+THIS.cInstanceName +[" rows="4" cols="40" style="width: ]+WidthCSS+[ height: ]+HeightCSS+[">]+HtmlValue+[</textarea>]
+		ENDIF
+
+		RETURN (html)
+	ENDFUNC
+
+
+&& -----------------------------------------------------------------------
+	FUNCTION IsCompatible()
+		LOCAL llRetval
+		LOCAL sAgent
+
+		llRetval=.F.
+
+		SET POINT TO "."
+
+		sAgent = LOWER(ALLTRIM(request.servervariables("HTTP_USER_AGENT")))
+
+		IF AT("msie",sAgent) >0 .AND. AT("mac",sAgent)=0 .AND. AT("opera",sAgent)=0
+			iVersion=VAL(SUBSTR(sAgent,AT("msie",sAgent)+5,3))
+			llRetval= iVersion > 5.5
+		ELSE
+			IF AT("gecko/",sAgent)>0
+				iVersion=VAL(SUBSTR(sAgent,AT("gecko/",sAgent)+6,8))
+				llRetval =iVersion > 20030210
+			ENDIF
+		ELSE
+			IF AT("opera/",sAgent)>0
+				iVersion=VAL(SUBSTR(sAgent,AT("opera/",sAgent)+6,4))
+				llRetval =iVersion >= 9.5
+			ENDIF
+		ELSE
+			IF AT("applewebkit/",sAgent)>0
+				iVersion=VAL(SUBSTR(sAgent,AT("applewebkit/",sAgent)+12,3))
+				llRetval =iVersion >= 522
+			ENDIF
+		ENDIF
+
+		SET POINT TO
+
+		RETURN (llRetval)
+	ENDFUNC
+
+&& -----------------------------------------------------------------------
+	FUNCTION GetConfigFieldString()
+		LOCAL sParams
+		LOCAL bFirst
+		LOCAL sKey
+		sParams = ""
+		bFirst = .T.
+		FOR lnLoop=1 TO 10 && ALEN(this.aconfig)
+			IF !EMPTY(THIS.aConfig(lnLoop,1))
+				IF bFirst = .F.
+					sParams = sParams + "&"
+				ELSE
+					bFirst = .F.
+				ENDIF
+				sParams = sParams +THIS.aConfig(lnLoop,1)+[=]+THIS.aConfig(lnLoop,2)
+			ELSE
+				EXIT
+			ENDIF
+		NEXT
+		RETURN(sParams)
+	ENDFUNC
+ENDDEFINE
+%>

Added: announcement/trunk/src/main/webapp/fckeditor/fckeditor.asp
===================================================================
--- announcement/trunk/src/main/webapp/fckeditor/fckeditor.asp	                        (rev 0)
+++ announcement/trunk/src/main/webapp/fckeditor/fckeditor.asp	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,235 @@
+<!--
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2008 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * This is the integration file for ASP.
+ *
+ * It defines the FCKeditor class that can be used to create editor
+ * instances in ASP pages on server side.
+-->
+<%
+Class FCKeditor
+
+	private sBasePath
+	private sInstanceName
+	private sWidth
+	private sHeight
+	private sToolbarSet
+	private sValue
+
+	private oConfig
+
+	Private Sub Class_Initialize()
+		sBasePath		= "/fckeditor/"
+		sWidth			= "100%"
+		sHeight			= "200"
+		sToolbarSet		= "Default"
+		sValue			= ""
+
+		Set oConfig = CreateObject("Scripting.Dictionary")
+	End Sub
+
+	Public Property Let BasePath( basePathValue )
+		sBasePath = basePathValue
+	End Property
+
+	Public Property Let InstanceName( instanceNameValue )
+		sInstanceName = instanceNameValue
+	End Property
+
+	Public Property Let Width( widthValue )
+		sWidth = widthValue
+	End Property
+
+	Public Property Let Height( heightValue )
+		sHeight = heightValue
+	End Property
+
+	Public Property Let ToolbarSet( toolbarSetValue )
+		sToolbarSet = toolbarSetValue
+	End Property
+
+	Public Property Let Value( newValue )
+		If ( IsNull( newValue ) OR IsEmpty( newValue ) ) Then
+			sValue = ""
+		Else
+			sValue = newValue
+		End If
+	End Property
+
+	Public Property Let Config( configKey, configValue )
+		oConfig.Add configKey, configValue
+	End Property
+
+	' Generates the instace of the editor in the HTML output of the page.
+	Public Sub Create( instanceName )
+		response.write CreateHtml( instanceName )
+	end Sub
+
+	' Returns the html code that must be used to generate an instance of FCKeditor.
+	Public Function CreateHtml( instanceName )
+		dim html
+
+		If IsCompatible() Then
+
+			Dim sFile, sLink
+			If Request.QueryString( "fcksource" ) = "true" Then
+				sFile = "fckeditor.original.html"
+			Else
+				sFile = "fckeditor.html"
+			End If
+
+			sLink = sBasePath & "editor/" & sFile & "?InstanceName=" + instanceName
+
+			If (sToolbarSet & "") <> "" Then
+				sLink = sLink + "&amp;Toolbar=" & sToolbarSet
+			End If
+
+			html = ""
+			' Render the linked hidden field.
+			html = html & "<input type=""hidden"" id=""" & instanceName & """ name=""" & instanceName & """ value=""" & Server.HTMLEncode( sValue ) & """ style=""display:none"" />"
+
+			' Render the configurations hidden field.
+			html = html & "<input type=""hidden"" id=""" & instanceName & "___Config"" value=""" & GetConfigFieldString() & """ style=""display:none"" />"
+
+			' Render the editor IFRAME.
+			html = html & "<iframe id=""" & instanceName & "___Frame"" src=""" & sLink & """ width=""" & sWidth & """ height=""" & sHeight & """ frameborder=""0"" scrolling=""no""></iframe>"
+
+		Else
+
+			Dim sWidthCSS, sHeightCSS
+
+			If InStr( sWidth, "%" ) > 0  Then
+				sWidthCSS = sWidth
+			Else
+				sWidthCSS = sWidth & "px"
+			End If
+
+			If InStr( sHeight, "%" ) > 0  Then
+				sHeightCSS = sHeight
+			Else
+				sHeightCSS = sHeight & "px"
+			End If
+
+			html = "<textarea name=""" & instanceName & """ rows=""4"" cols=""40"" style=""width: " & sWidthCSS & "; height: " & sHeightCSS & """>" & Server.HTMLEncode( sValue ) & "</textarea>"
+
+		End If
+
+		CreateHtml = html
+
+	End Function
+
+	Private Function IsCompatible()
+
+		IsCompatible = FCKeditor_IsCompatibleBrowser()
+
+	End Function
+
+	Private Function GetConfigFieldString()
+
+		Dim sParams
+
+		Dim bFirst
+		bFirst = True
+
+		Dim sKey
+		For Each sKey in oConfig
+
+			If bFirst = False Then
+				sParams = sParams & "&amp;"
+			Else
+				bFirst = False
+			End If
+
+			sParams = sParams & EncodeConfig( sKey ) & "=" & EncodeConfig( oConfig(sKey) )
+
+		Next
+
+		GetConfigFieldString = sParams
+
+	End Function
+
+	Private Function EncodeConfig( valueToEncode )
+		' The locale of the asp server makes the conversion of a boolean to string different to "true" or "false"
+		' so we must do it manually
+    If vartype(valueToEncode) = vbBoolean then
+			If valueToEncode=True Then
+				EncodeConfig="True"
+			Else
+				EncodeConfig="False"
+			End If
+		Else
+			EncodeConfig = Replace( valueToEncode, "&", "%26" )
+			EncodeConfig = Replace( EncodeConfig , "=", "%3D" )
+			EncodeConfig = Replace( EncodeConfig , """", "%22" )
+		End if
+
+	End Function
+
+End Class
+
+
+' A function that can be used to check if the current browser is compatible with FCKeditor
+' without the need to create an instance of the class.
+Function FCKeditor_IsCompatibleBrowser()
+
+
+	Dim sAgent
+	sAgent = Request.ServerVariables("HTTP_USER_AGENT")
+
+	Dim iVersion
+	Dim re, Matches
+
+	If InStr(sAgent, "MSIE") > 0 AND InStr(sAgent, "mac") <= 0  AND InStr(sAgent, "Opera") <= 0 Then
+		iVersion = CInt( FCKeditor_ToNumericFormat( Mid(sAgent, InStr(sAgent, "MSIE") + 5, 3) ) )
+		FCKeditor_IsCompatibleBrowser = ( iVersion >= 5.5 )
+	ElseIf InStr(sAgent, "Gecko/") > 0 Then
+		iVersion = CLng( Mid( sAgent, InStr( sAgent, "Gecko/" ) + 6, 8 ) )
+		FCKeditor_IsCompatibleBrowser = ( iVersion >= 20030210 )
+	ElseIf InStr(sAgent, "Opera/") > 0 Then
+		iVersion = CSng( FCKeditor_ToNumericFormat( Mid( sAgent, InStr( sAgent, "Opera/" ) + 6, 4 ) ) )
+		FCKeditor_IsCompatibleBrowser = ( iVersion >= 9.5 )
+	ElseIf InStr(sAgent, "AppleWebKit/") > 0 Then
+		Set re = new RegExp
+		re.IgnoreCase = true
+		re.global = false
+		re.Pattern = "AppleWebKit/(\d+)"
+		Set Matches = re.Execute(sAgent)
+		FCKeditor_IsCompatibleBrowser = ( re.Replace(Matches.Item(0).Value, "$1") >= 522 )
+	Else
+		FCKeditor_IsCompatibleBrowser = False
+	End If
+
+End Function
+
+
+' By Agrotic
+' On ASP, when converting string to numbers, the number decimal separator is localized
+' so 5.5 will not work on systems were the separator is "," and vice versa.
+Private Function FCKeditor_ToNumericFormat( numberStr )
+
+	If IsNumeric( "5.5" ) Then
+		FCKeditor_ToNumericFormat = Replace( numberStr, ",", ".")
+	Else
+		FCKeditor_ToNumericFormat = Replace( numberStr, ".", ",")
+	End If
+
+End Function
+
+%>

Added: announcement/trunk/src/main/webapp/fckeditor/fckeditor.cfc
===================================================================
--- announcement/trunk/src/main/webapp/fckeditor/fckeditor.cfc	                        (rev 0)
+++ announcement/trunk/src/main/webapp/fckeditor/fckeditor.cfc	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,232 @@
+<cfcomponent output="false" displayname="FCKeditor" hint="Create an instance of the FCKeditor.">
+
+<!---
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2008 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * ColdFusion MX integration.
+ * Note this CFC is created for use only with Coldfusion MX and above.
+ * For older version, check the fckeditor.cfm.
+ *
+ * Syntax:
+ *
+ * <cfscript>
+ * 		fckEditor = createObject("component", "fckeditor.fckeditor");
+ * 		fckEditor.instanceName="myEditor";
+ * 		fckEditor.basePath="/fckeditor/";
+ * 		fckEditor.value="<p>This is my <strong>initial</strong> html text.</p>";
+ * 		fckEditor.width="100%";
+ * 		fckEditor.height="200";
+ * 	 	// ... additional parameters ...
+ * 		fckEditor.create(); // create instance now.
+ * </cfscript>
+ *
+ * See your macromedia coldfusion mx documentation for more info.
+ *
+ * *** Note:
+ * Do not use path names with a "." (dot) in the name. This is a coldfusion
+ * limitation with the cfc invocation.
+--->
+
+<cfinclude template="fckutils.cfm">
+
+<cffunction
+	name="Create"
+	access="public"
+	output="true"
+	returntype="void"
+	hint="Outputs the editor HTML in the place where the function is called"
+>
+	<cfoutput>#CreateHtml()#</cfoutput>
+</cffunction>
+
+<cffunction
+	name="CreateHtml"
+	access="public"
+	output="false"
+	returntype="string"
+	hint="Retrieves the editor HTML"
+>
+
+	<cfparam name="this.instanceName" type="string" />
+	<cfparam name="this.width" type="string" default="100%" />
+	<cfparam name="this.height" type="string" default="200" />
+	<cfparam name="this.toolbarSet" type="string" default="Default" />
+	<cfparam name="this.value" type="string" default="" />
+	<cfparam name="this.basePath" type="string" default="/fckeditor/" />
+	<cfparam name="this.checkBrowser" type="boolean" default="true" />
+	<cfparam name="this.config" type="struct" default="#structNew()#" />
+
+	<cfscript>
+	// display the html editor or a plain textarea?
+	if( isCompatible() )
+		return getHtmlEditor();
+	else
+		return getTextArea();
+	</cfscript>
+
+</cffunction>
+
+<cffunction
+	name="isCompatible"
+	access="private"
+	output="false"
+	returnType="boolean"
+	hint="Check browser compatibility via HTTP_USER_AGENT, if checkBrowser is true"
+>
+
+	<cfscript>
+	var sAgent = lCase( cgi.HTTP_USER_AGENT );
+	var stResult = "";
+	var sBrowserVersion = "";
+
+	// do not check if argument "checkBrowser" is false
+	if( not this.checkBrowser )
+		return true;
+
+	return FCKeditor_IsCompatibleBrowser();
+	</cfscript>
+</cffunction>
+
+<cffunction
+	name="getTextArea"
+	access="private"
+	output="false"
+	returnType="string"
+	hint="Create a textarea field for non-compatible browsers."
+>
+	<cfset var result = "" />
+	<cfset var sWidthCSS = "" />
+	<cfset var sHeightCSS = "" />
+
+	<cfscript>
+	if( Find( "%", this.width ) gt 0)
+		sWidthCSS = this.width;
+	else
+		sWidthCSS = this.width & "px";
+
+	if( Find( "%", this.width ) gt 0)
+		sHeightCSS = this.height;
+	else
+		sHeightCSS = this.height & "px";
+
+	result = "<textarea name=""#this.instanceName#"" rows=""4"" cols=""40"" style=""width: #sWidthCSS#; height: #sHeightCSS#"">#HTMLEditFormat(this.value)#</textarea>" & chr(13) & chr(10);
+	</cfscript>
+	<cfreturn result />
+</cffunction>
+
+<cffunction
+	name="getHtmlEditor"
+	access="private"
+	output="false"
+	returnType="string"
+	hint="Create the html editor instance for compatible browsers."
+>
+	<cfset var sURL = "" />
+	<cfset var result = "" />
+
+	<cfscript>
+	// try to fix the basePath, if ending slash is missing
+	if( len( this.basePath) and right( this.basePath, 1 ) is not "/" )
+		this.basePath = this.basePath & "/";
+
+	// construct the url
+	sURL = this.basePath & "editor/fckeditor.html?InstanceName=" & this.instanceName;
+
+	// append toolbarset name to the url
+	if( len( this.toolbarSet ) )
+		sURL = sURL & "&amp;Toolbar=" & this.toolbarSet;
+	</cfscript>
+
+	<cfscript>
+	result = result & "<input type=""hidden"" id=""#this.instanceName#"" name=""#this.instanceName#"" value=""#HTMLEditFormat(this.value)#"" style=""display:none"" />" & chr(13) & chr(10);
+	result = result & "<input type=""hidden"" id=""#this.instanceName#___Config"" value=""#GetConfigFieldString()#"" style=""display:none"" />" & chr(13) & chr(10);
+	result = result & "<iframe id=""#this.instanceName#___Frame"" src=""#sURL#"" width=""#this.width#"" height=""#this.height#"" frameborder=""0"" scrolling=""no""></iframe>" & chr(13) & chr(10);
+	</cfscript>
+	<cfreturn result />
+</cffunction>
+
+<cffunction
+	name="GetConfigFieldString"
+	access="private"
+	output="false"
+	returnType="string"
+	hint="Create configuration string: Key1=Value1&Key2=Value2&... (Key/Value:HTML encoded)"
+>
+	<cfset var sParams = "" />
+	<cfset var key = "" />
+	<cfset var fieldValue = "" />
+	<cfset var fieldLabel = "" />
+	<cfset var lConfigKeys = "" />
+	<cfset var iPos = "" />
+
+	<cfscript>
+	/**
+	 * CFML doesn't store casesensitive names for structure keys, but the configuration names must be casesensitive for js.
+	 * So we need to find out the correct case for the configuration keys.
+	 * We "fix" this by comparing the caseless configuration keys to a list of all available configuration options in the correct case.
+	 * changed 20041206 hk****@lwd***** (improvements are welcome!)
+	 */
+	lConfigKeys = lConfigKeys & "CustomConfigurationsPath,EditorAreaCSS,ToolbarComboPreviewCSS,DocType";
+	lConfigKeys = lConfigKeys & ",BaseHref,FullPage,Debug,AllowQueryStringDebug,SkinPath";
+	lConfigKeys = lConfigKeys & ",PreloadImages,PluginsPath,AutoDetectLanguage,DefaultLanguage,ContentLangDirection";
+	lConfigKeys = lConfigKeys & ",ProcessHTMLEntities,IncludeLatinEntities,IncludeGreekEntities,ProcessNumericEntities,AdditionalNumericEntities";
+	lConfigKeys = lConfigKeys & ",FillEmptyBlocks,FormatSource,FormatOutput,FormatIndentator";
+	lConfigKeys = lConfigKeys & ",StartupFocus,ForcePasteAsPlainText,AutoDetectPasteFromWord,ForceSimpleAmpersand";
+	lConfigKeys = lConfigKeys & ",TabSpaces,ShowBorders,SourcePopup,ToolbarStartExpanded,ToolbarCanCollapse";
+	lConfigKeys = lConfigKeys & ",IgnoreEmptyParagraphValue,FloatingPanelsZIndex,TemplateReplaceAll,TemplateReplaceCheckbox";
+	lConfigKeys = lConfigKeys & ",ToolbarLocation,ToolbarSets,EnterMode,ShiftEnterMode,Keystrokes";
+	lConfigKeys = lConfigKeys & ",ContextMenu,BrowserContextMenuOnCtrl,FontColors,FontNames,FontSizes";
+	lConfigKeys = lConfigKeys & ",FontFormats,StylesXmlPath,TemplatesXmlPath,SpellChecker,IeSpellDownloadUrl";
+	lConfigKeys = lConfigKeys & ",SpellerPagesServerScript,FirefoxSpellChecker,MaxUndoLevels,DisableObjectResizing,DisableFFTableHandles";
+	lConfigKeys = lConfigKeys & ",LinkDlgHideTarget,LinkDlgHideAdvanced,ImageDlgHideLink,ImageDlgHideAdvanced,FlashDlgHideAdvanced";
+	lConfigKeys = lConfigKeys & ",ProtectedTags,BodyId,BodyClass,DefaultLinkTarget,CleanWordKeepsStructure";
+	lConfigKeys = lConfigKeys & ",LinkBrowser,LinkBrowserURL,LinkBrowserWindowWidth,LinkBrowserWindowHeight,ImageBrowser";
+	lConfigKeys = lConfigKeys & ",ImageBrowserURL,ImageBrowserWindowWidth,ImageBrowserWindowHeight,FlashBrowser,FlashBrowserURL";
+	lConfigKeys = lConfigKeys & ",FlashBrowserWindowWidth,FlashBrowserWindowHeight,LinkUpload,LinkUploadURL,LinkUploadWindowWidth";
+	lConfigKeys = lConfigKeys & ",LinkUploadWindowHeight,LinkUploadAllowedExtensions,LinkUploadDeniedExtensions,ImageUpload,ImageUploadURL";
+	lConfigKeys = lConfigKeys & ",ImageUploadAllowedExtensions,ImageUploadDeniedExtensions,FlashUpload,FlashUploadURL,FlashUploadAllowedExtensions";
+	lConfigKeys = lConfigKeys & ",FlashUploadDeniedExtensions,SmileyPath,SmileyImages,SmileyColumns,SmileyWindowWidth,SmileyWindowHeight";
+
+	for( key in this.config )
+	{
+		iPos = listFindNoCase( lConfigKeys, key );
+		if( iPos GT 0 )
+		{
+			if( len( sParams ) )
+				sParams = sParams & "&amp;";
+
+			fieldValue = this.config[key];
+			fieldName = listGetAt( lConfigKeys, iPos );
+
+			// set all boolean possibilities in CFML to true/false values
+			if( isBoolean( fieldValue) and fieldValue )
+				fieldValue = "true";
+			else if( isBoolean( fieldValue) )
+				fieldValue = "false";
+
+			sParams = sParams & HTMLEditFormat( fieldName ) & '=' & HTMLEditFormat( fieldValue );
+		}
+	}
+	return sParams;
+	</cfscript>
+
+</cffunction>
+
+</cfcomponent>

Added: announcement/trunk/src/main/webapp/fckeditor/fckeditor.cfm
===================================================================
--- announcement/trunk/src/main/webapp/fckeditor/fckeditor.cfm	                        (rev 0)
+++ announcement/trunk/src/main/webapp/fckeditor/fckeditor.cfm	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,159 @@
+<cfsetting enablecfoutputonly="Yes">
+<!---
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2008 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * ColdFusion integration.
+ * Note this module is created for use with Coldfusion 4.52 and above.
+ * For a cfc version for coldfusion mx check the fckeditor.cfc.
+ *
+ * Syntax:
+ *
+ * <cfmodule name="path/to/cfc/fckeditor"
+ * 	instanceName="myEditor"
+ * 	toolbarSet="..."
+ * 	width="..."
+ * 	height="..:"
+ * 	value="..."
+ * 	config="..."
+ * >
+--->
+<!--- ::
+	 * 	Attribute validation
+	:: --->
+<cfparam name="attributes.instanceName" type="string">
+<cfparam name="attributes.width" 		type="string" default="100%">
+<cfparam name="attributes.height" 		type="string" default="200">
+<cfparam name="attributes.toolbarSet" 	type="string" default="Default">
+<cfparam name="attributes.value" 		type="string" default="">
+<cfparam name="attributes.basePath" 	type="string" default="/fckeditor/">
+<cfparam name="attributes.checkBrowser" type="boolean" default="true">
+<cfparam name="attributes.config" 		type="struct" default="#structNew()#">
+<cfinclude template="fckutils.cfm">
+
+<!--- ::
+	 * check browser compatibility via HTTP_USER_AGENT, if checkBrowser is true
+	:: --->
+
+<cfscript>
+if( attributes.checkBrowser )
+{
+	isCompatibleBrowser = FCKeditor_IsCompatibleBrowser();
+}
+else
+{
+	// If we should not check browser compatibility, assume true
+	isCompatibleBrowser = true;
+}
+</cfscript>
+
+<cfif isCompatibleBrowser>
+
+	<!--- ::
+		 * show html editor area for compatible browser
+		:: --->
+
+	<cfscript>
+		// try to fix the basePath, if ending slash is missing
+		if( len( attributes.basePath) and right( attributes.basePath, 1 ) is not "/" )
+			attributes.basePath = attributes.basePath & "/";
+
+		// construct the url
+		sURL = attributes.basePath & "editor/fckeditor.html?InstanceName=" & attributes.instanceName;
+
+		// append toolbarset name to the url
+		if( len( attributes.toolbarSet ) )
+			sURL = sURL & "&amp;Toolbar=" & attributes.toolbarSet;
+
+		// create configuration string: Key1=Value1&Key2=Value2&... (Key/Value:HTML encoded)
+
+		/**
+		 * CFML doesn't store casesensitive names for structure keys, but the configuration names must be casesensitive for js.
+		 * So we need to find out the correct case for the configuration keys.
+		 * We "fix" this by comparing the caseless configuration keys to a list of all available configuration options in the correct case.
+		 * changed 20041206 hk****@lwd***** (improvements are welcome!)
+		 */
+		lConfigKeys = "";
+		lConfigKeys = lConfigKeys & "CustomConfigurationsPath,EditorAreaCSS,ToolbarComboPreviewCSS,DocType";
+		lConfigKeys = lConfigKeys & ",BaseHref,FullPage,Debug,AllowQueryStringDebug,SkinPath";
+		lConfigKeys = lConfigKeys & ",PreloadImages,PluginsPath,AutoDetectLanguage,DefaultLanguage,ContentLangDirection";
+		lConfigKeys = lConfigKeys & ",ProcessHTMLEntities,IncludeLatinEntities,IncludeGreekEntities,ProcessNumericEntities,AdditionalNumericEntities";
+		lConfigKeys = lConfigKeys & ",FillEmptyBlocks,FormatSource,FormatOutput,FormatIndentator";
+		lConfigKeys = lConfigKeys & ",StartupFocus,ForcePasteAsPlainText,AutoDetectPasteFromWord,ForceSimpleAmpersand";
+		lConfigKeys = lConfigKeys & ",TabSpaces,ShowBorders,SourcePopup,ToolbarStartExpanded,ToolbarCanCollapse";
+		lConfigKeys = lConfigKeys & ",IgnoreEmptyParagraphValue,FloatingPanelsZIndex,TemplateReplaceAll,TemplateReplaceCheckbox";
+		lConfigKeys = lConfigKeys & ",ToolbarLocation,ToolbarSets,EnterMode,ShiftEnterMode,Keystrokes";
+		lConfigKeys = lConfigKeys & ",ContextMenu,BrowserContextMenuOnCtrl,FontColors,FontNames,FontSizes";
+		lConfigKeys = lConfigKeys & ",FontFormats,StylesXmlPath,TemplatesXmlPath,SpellChecker,IeSpellDownloadUrl";
+		lConfigKeys = lConfigKeys & ",SpellerPagesServerScript,FirefoxSpellChecker,MaxUndoLevels,DisableObjectResizing,DisableFFTableHandles";
+		lConfigKeys = lConfigKeys & ",LinkDlgHideTarget	,LinkDlgHideAdvanced,ImageDlgHideLink	,ImageDlgHideAdvanced,FlashDlgHideAdvanced";
+		lConfigKeys = lConfigKeys & ",ProtectedTags,BodyId,BodyClass,DefaultLinkTarget,CleanWordKeepsStructure";
+		lConfigKeys = lConfigKeys & ",LinkBrowser,LinkBrowserURL,LinkBrowserWindowWidth,LinkBrowserWindowHeight,ImageBrowser";
+		lConfigKeys = lConfigKeys & ",ImageBrowserURL,ImageBrowserWindowWidth,ImageBrowserWindowHeight,FlashBrowser,FlashBrowserURL";
+		lConfigKeys = lConfigKeys & ",FlashBrowserWindowWidth ,FlashBrowserWindowHeight,LinkUpload,LinkUploadURL,LinkUploadWindowWidth";
+		lConfigKeys = lConfigKeys & ",LinkUploadWindowHeight,LinkUploadAllowedExtensions,LinkUploadDeniedExtensions,ImageUpload,ImageUploadURL";
+		lConfigKeys = lConfigKeys & ",ImageUploadAllowedExtensions,ImageUploadDeniedExtensions,FlashUpload,FlashUploadURL,FlashUploadAllowedExtensions";
+		lConfigKeys = lConfigKeys & ",FlashUploadDeniedExtensions,SmileyPath,SmileyImages,SmileyColumns,SmileyWindowWidth,SmileyWindowHeight";
+
+		sConfig = "";
+
+		for( key in attributes.config )
+		{
+			iPos = listFindNoCase( lConfigKeys, key );
+			if( iPos GT 0 )
+			{
+				if( len( sConfig ) )
+					sConfig = sConfig & "&amp;";
+
+				fieldValue = attributes.config[key];
+				fieldName = listGetAt( lConfigKeys, iPos );
+
+				sConfig = sConfig & urlEncodedFormat( fieldName ) & '=' & urlEncodedFormat( fieldValue );
+			}
+		}
+	</cfscript>
+
+	<cfoutput>
+	<input type="hidden" id="#attributes.instanceName#" name="#attributes.instanceName#" value="#HTMLEditFormat(attributes.value)#" style="display:none" />
+	<input type="hidden" id="#attributes.instanceName#___Config" value="#sConfig#" style="display:none" />
+	<iframe id="#attributes.instanceName#___Frame" src="#sURL#" width="#attributes.width#" height="#attributes.height#" frameborder="0" scrolling="no"></iframe>
+	</cfoutput>
+
+<cfelse>
+
+	<!--- ::
+		 * show	plain textarea for non compatible browser
+		:: --->
+
+	<cfscript>
+		// append unit "px" for numeric width and/or height values
+		if( isNumeric( attributes.width ) )
+			attributes.width = attributes.width & "px";
+		if( isNumeric( attributes.height ) )
+			attributes.height = attributes.height & "px";
+	</cfscript>
+
+	<!--- Fixed Bug ##1075166. hk****@lwd***** 20041206 --->
+	<cfoutput>
+	<textarea name="#attributes.instanceName#" rows="4" cols="40" style="WIDTH: #attributes.width#; HEIGHT: #attributes.height#">#HTMLEditFormat(attributes.value)#</textarea>
+	</cfoutput>
+
+</cfif>
+
+<cfsetting enablecfoutputonly="No"><cfexit method="exittag">

Added: announcement/trunk/src/main/webapp/fckeditor/fckeditor.js
===================================================================
--- announcement/trunk/src/main/webapp/fckeditor/fckeditor.js	                        (rev 0)
+++ announcement/trunk/src/main/webapp/fckeditor/fckeditor.js	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,328 @@
+/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2008 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * This is the integration file for JavaScript.
+ *
+ * It defines the FCKeditor class that can be used to create editor
+ * instances in a HTML page in the client side. For server side
+ * operations, use the specific integration system.
+ */
+
+// FCKeditor Class
+var FCKeditor = function( instanceName, width, height, toolbarSet, value )
+{
+	// Properties
+	this.InstanceName	= instanceName ;
+	this.Width			= width			|| '100%' ;
+	this.Height			= height		|| '200' ;
+	this.ToolbarSet		= toolbarSet	|| 'Default' ;
+	this.Value			= value			|| '' ;
+	this.BasePath		= FCKeditor.BasePath ;
+	this.CheckBrowser	= true ;
+	this.DisplayErrors	= true ;
+
+	this.Config			= new Object() ;
+
+	// Events
+	this.OnError		= null ;	// function( source, errorNumber, errorDescription )
+}
+
+/**
+ * This is the default BasePath used by all editor instances.
+ */
+FCKeditor.BasePath = '/fckeditor/' ;
+
+/**
+ * The minimum height used when replacing textareas.
+ */
+FCKeditor.MinHeight = 200 ;
+
+/**
+ * The minimum width used when replacing textareas.
+ */
+FCKeditor.MinWidth = 750 ;
+
+FCKeditor.prototype.Version			= '2.6.2' ;
+FCKeditor.prototype.VersionBuild	= '19417' ;
+
+FCKeditor.prototype.Create = function()
+{
+	document.write( this.CreateHtml() ) ;
+}
+
+FCKeditor.prototype.CreateHtml = function()
+{
+	// Check for errors
+	if ( !this.InstanceName || this.InstanceName.length == 0 )
+	{
+		this._ThrowError( 701, 'You must specify an instance name.' ) ;
+		return '' ;
+	}
+
+	var sHtml = '' ;
+
+	if ( !this.CheckBrowser || this._IsCompatibleBrowser() )
+	{
+		sHtml += '<input type="hidden" id="' + this.InstanceName + '" name="' + this.InstanceName + '" value="' + this._HTMLEncode( this.Value ) + '" style="display:none" />' ;
+		sHtml += this._GetConfigHtml() ;
+		sHtml += this._GetIFrameHtml() ;
+	}
+	else
+	{
+		var sWidth  = this.Width.toString().indexOf('%')  > 0 ? this.Width  : this.Width  + 'px' ;
+		var sHeight = this.Height.toString().indexOf('%') > 0 ? this.Height : this.Height + 'px' ;
+
+		sHtml += '<textarea name="' + this.InstanceName +
+			'" rows="4" cols="40" style="width:' + sWidth +
+			';height:' + sHeight ;
+
+		if ( this.TabIndex )
+			sHtml += '" tabindex="' + this.TabIndex ;
+
+		sHtml += '">' +
+			this._HTMLEncode( this.Value ) +
+			'<\/textarea>' ;
+	}
+
+	return sHtml ;
+}
+
+FCKeditor.prototype.ReplaceTextarea = function()
+{
+	if ( !this.CheckBrowser || this._IsCompatibleBrowser() )
+	{
+		// We must check the elements firstly using the Id and then the name.
+		var oTextarea = document.getElementById( this.InstanceName ) ;
+		var colElementsByName = document.getElementsByName( this.InstanceName ) ;
+		var i = 0;
+		while ( oTextarea || i == 0 )
+		{
+			if ( oTextarea && oTextarea.tagName.toLowerCase() == 'textarea' )
+				break ;
+			oTextarea = colElementsByName[i++] ;
+		}
+
+		if ( !oTextarea )
+		{
+			alert( 'Error: The TEXTAREA with id or name set to "' + this.InstanceName + '" was not found' ) ;
+			return ;
+		}
+
+		oTextarea.style.display = 'none' ;
+
+		if ( oTextarea.tabIndex )
+			this.TabIndex = oTextarea.tabIndex ;
+
+		this._InsertHtmlBefore( this._GetConfigHtml(), oTextarea ) ;
+		this._InsertHtmlBefore( this._GetIFrameHtml(), oTextarea ) ;
+	}
+}
+
+FCKeditor.prototype._InsertHtmlBefore = function( html, element )
+{
+	if ( element.insertAdjacentHTML )	// IE
+		element.insertAdjacentHTML( 'beforeBegin', html ) ;
+	else								// Gecko
+	{
+		var oRange = document.createRange() ;
+		oRange.setStartBefore( element ) ;
+		var oFragment = oRange.createContextualFragment( html );
+		element.parentNode.insertBefore( oFragment, element ) ;
+	}
+}
+
+FCKeditor.prototype._GetConfigHtml = function()
+{
+	var sConfig = '' ;
+	for ( var o in this.Config )
+	{
+		if ( sConfig.length > 0 ) sConfig += '&amp;' ;
+		sConfig += encodeURIComponent( o ) + '=' + encodeURIComponent( this.Config[o] ) ;
+	}
+
+	return '<input type="hidden" id="' + this.InstanceName + '___Config" value="' + sConfig + '" style="display:none" />' ;
+}
+
+FCKeditor.prototype._GetIFrameHtml = function()
+{
+	var sFile = 'fckeditor.html' ;
+
+	try
+	{
+		if ( (/fcksource=true/i).test( window.top.location.search ) )
+			sFile = 'fckeditor.original.html' ;
+	}
+	catch (e) { /* Ignore it. Much probably we are inside a FRAME where the "top" is in another domain (security error). */ }
+
+	var sLink = this.BasePath + 'editor/' + sFile + '?InstanceName=' + encodeURIComponent( this.InstanceName ) ;
+	if (this.ToolbarSet)
+		sLink += '&amp;Toolbar=' + this.ToolbarSet ;
+
+	html = '<iframe id="' + this.InstanceName +
+		'___Frame" src="' + sLink +
+		'" width="' + this.Width +
+		'" height="' + this.Height ;
+
+	if ( this.TabIndex )
+		html += '" tabindex="' + this.TabIndex ;
+
+	html += '" frameborder="0" scrolling="no"></iframe>' ;
+
+	return html ;
+}
+
+FCKeditor.prototype._IsCompatibleBrowser = function()
+{
+	return FCKeditor_IsCompatibleBrowser() ;
+}
+
+FCKeditor.prototype._ThrowError = function( errorNumber, errorDescription )
+{
+	this.ErrorNumber		= errorNumber ;
+	this.ErrorDescription	= errorDescription ;
+
+	if ( this.DisplayErrors )
+	{
+		document.write( '<div style="COLOR: #ff0000">' ) ;
+		document.write( '[ FCKeditor Error ' + this.ErrorNumber + ': ' + this.ErrorDescription + ' ]' ) ;
+		document.write( '</div>' ) ;
+	}
+
+	if ( typeof( this.OnError ) == 'function' )
+		this.OnError( this, errorNumber, errorDescription ) ;
+}
+
+FCKeditor.prototype._HTMLEncode = function( text )
+{
+	if ( typeof( text ) != "string" )
+		text = text.toString() ;
+
+	text = text.replace(
+		/&/g, "&amp;").replace(
+		/"/g, "&quot;").replace(
+		/</g, "&lt;").replace(
+		/>/g, "&gt;") ;
+
+	return text ;
+}
+
+;(function()
+{
+	var textareaToEditor = function( textarea )
+	{
+		var editor = new FCKeditor( textarea.name ) ;
+
+		editor.Width = Math.max( textarea.offsetWidth, FCKeditor.MinWidth ) ;
+		editor.Height = Math.max( textarea.offsetHeight, FCKeditor.MinHeight ) ;
+
+		return editor ;
+	}
+
+	/**
+	 * Replace all <textarea> elements available in the document with FCKeditor
+	 * instances.
+	 *
+	 *	// Replace all <textarea> elements in the page.
+	 *	FCKeditor.ReplaceAllTextareas() ;
+	 *
+	 *	// Replace all <textarea class="myClassName"> elements in the page.
+	 *	FCKeditor.ReplaceAllTextareas( 'myClassName' ) ;
+	 *
+	 *	// Selectively replace <textarea> elements, based on custom assertions.
+	 *	FCKeditor.ReplaceAllTextareas( function( textarea, editor )
+	 *		{
+	 *			// Custom code to evaluate the replace, returning false if it
+	 *			// must not be done.
+	 *			// It also passes the "editor" parameter, so the developer can
+	 *			// customize the instance.
+	 *		} ) ;
+	 */
+	FCKeditor.ReplaceAllTextareas = function()
+	{
+		var textareas = document.getElementsByTagName( 'textarea' ) ;
+
+		for ( var i = 0 ; i < textareas.length ; i++ )
+		{
+			var editor = null ;
+			var textarea = textareas[i] ;
+			var name = textarea.name ;
+
+			// The "name" attribute must exist.
+			if ( !name || name.length == 0 )
+				continue ;
+
+			if ( typeof arguments[0] == 'string' )
+			{
+				// The textarea class name could be passed as the function
+				// parameter.
+
+				var classRegex = new RegExp( '(?:^| )' + arguments[0] + '(?:$| )' ) ;
+
+				if ( !classRegex.test( textarea.className ) )
+					continue ;
+			}
+			else if ( typeof arguments[0] == 'function' )
+			{
+				// An assertion function could be passed as the function parameter.
+				// It must explicitly return "false" to ignore a specific <textarea>.
+				editor = textareaToEditor( textarea ) ;
+				if ( arguments[0]( textarea, editor ) === false )
+					continue ;
+			}
+
+			if ( !editor )
+				editor = textareaToEditor( textarea ) ;
+
+			editor.ReplaceTextarea() ;
+		}
+	}
+})() ;
+
+function FCKeditor_IsCompatibleBrowser()
+{
+	var sAgent = navigator.userAgent.toLowerCase() ;
+
+	// Internet Explorer 5.5+
+	if ( /*@cc_on!@*/false && sAgent.indexOf("mac") == -1 )
+	{
+		var sBrowserVersion = navigator.appVersion.match(/MSIE (.\..)/)[1] ;
+		return ( sBrowserVersion >= 5.5 ) ;
+	}
+
+	// Gecko (Opera 9 tries to behave like Gecko at this point).
+	if ( navigator.product == "Gecko" && navigator.productSub >= 20030210 && !( typeof(opera) == 'object' && opera.postError ) )
+		return true ;
+
+	// Opera 9.50+
+	if ( window.opera && window.opera.version && parseFloat( window.opera.version() ) >= 9.5 )
+		return true ;
+
+	// Adobe AIR
+	// Checked before Safari because AIR have the WebKit rich text editor
+	// features from Safari 3.0.4, but the version reported is 420.
+	if ( sAgent.indexOf( ' adobeair/' ) != -1 )
+		return ( sAgent.match( / adobeair\/(\d+)/ )[1] >= 1 ) ;	// Build must be at least v1
+
+	// Safari 3+
+	if ( sAgent.indexOf( ' applewebkit/' ) != -1 )
+		return ( sAgent.match( / applewebkit\/(\d+)/ )[1] >= 522 ) ;	// Build must be at least 522 (v3)
+
+	return false ;
+}


Property changes on: announcement/trunk/src/main/webapp/fckeditor/fckeditor.js
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/webapp/fckeditor/fckeditor.lasso
===================================================================
--- announcement/trunk/src/main/webapp/fckeditor/fckeditor.lasso	                        (rev 0)
+++ announcement/trunk/src/main/webapp/fckeditor/fckeditor.lasso	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,108 @@
+[//lasso
+/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2008 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * This is the integration file for Lasso.
+ *
+ * It defines the FCKeditor class ("custom type" in Lasso terms) that can
+ * be used to create editor instances in Lasso pages on server side.
+ */
+
+	define_type(
+		'editor',
+		-namespace='fck_',
+		-description='Creates an instance of FCKEditor.'
+	);
+		local(
+			'instancename'	=	'FCKEditor1',
+			'width'			=	'100%',
+			'height'		=	'200',
+			'toolbarset'	=	'Default',
+			'initialvalue'	=	string,
+			'basepath'		=	'/fckeditor/',
+			'config'		=	array,
+			'checkbrowser'	=	true,
+			'displayerrors'	=	false
+		);
+
+		define_tag(
+			'onCreate',
+			-required='instancename', -type='string',
+			-optional='width', -type='string',
+			-optional='height', -type='string',
+			-optional='toolbarset', -type='string',
+			-optional='initialvalue', -type='string',
+			-optional='basepath', -type='string',
+			-optional='config', -type='array'
+		);
+			self->instancename = #instancename;
+			local_defined('width') ? self->width = #width;
+			local_defined('height') ? self->height = #height;
+			local_defined('toolbarset') ? self->toolbarset = #toolbarset;
+			local_defined('initialvalue') ? self->initialvalue = #initialvalue;
+			local_defined('basepath') ? self->basepath = #basepath;
+			local_defined('config') ? self->config = #config;
+		/define_tag;
+
+		define_tag('create');
+			if(self->isCompatibleBrowser);
+				local('out' = '
+						<input type="hidden" id="' + self->instancename + '" name="' + self->instancename + '" value="' + encode_html(self->initialvalue) + '" style="display:none" />
+						' + self->parseConfig + '
+						<iframe id="' + self->instancename + '___Frame" src="' + self->basepath + 'editor/fckeditor.html?InstanceName=' + self->instancename + '&Toolbar=' + self->toolbarset + '" width="' + self->width + '" height="' + self->height + '" frameborder="0" scrolling="no"></iframe>
+				');
+			else;
+				local('out' = '
+						<textarea name="' + self->instancename + '" rows="4" cols="40" style="width: ' + self->width + '; height: ' + self->height + '">' + encode_html(self->initialvalue) + '</textarea>
+				');
+			/if;
+			return(@#out);
+		/define_tag;
+
+		define_tag('isCompatibleBrowser');
+			local('result' = false);
+			if (client_browser->Find("MSIE") && !client_browser->Find("mac") && !client_browser->Find("Opera"));
+				#result = client_browser->Substring(client_browser->Find("MSIE")+5,3)>=5.5;
+			/if;
+			if (client_browser->Find("Gecko/"));
+				#result = client_browser->Substring(client_browser->Find("Gecko/")+6,8)>=20030210;
+			/if;
+			if (client_browser->Find("Opera/"));
+				#result = client_browser->Substring(client_browser->Find("Opera/")+6,4)>=9.5;
+			/if;
+			if (client_browser->Find("AppleWebKit/"));
+				#result = client_browser->Substring(client_browser->Find("AppleWebKit/")+12,3)>=522;
+			/if;
+			return(#result);
+		/define_tag;
+
+		define_tag('parseConfig');
+			if(self->config->size);
+				local('out' = '<input type="hidden" id="' + self->instancename + '___Config" value="');
+				iterate(self->config, local('this'));
+					loop_count > 1 ? #out += '&amp;';
+					#out += encode_html(#this->first) + '=' + encode_html(#this->second);
+				/iterate;
+				#out += '" style="display:none" />\n';
+				return(@#out);
+			/if;
+		/define_tag;
+	/define_type;
+]

Added: announcement/trunk/src/main/webapp/fckeditor/fckeditor.php
===================================================================
--- announcement/trunk/src/main/webapp/fckeditor/fckeditor.php	                        (rev 0)
+++ announcement/trunk/src/main/webapp/fckeditor/fckeditor.php	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,31 @@
+<?php
+/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2008 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * This is the integration file for PHP (All versions).
+ *
+ * It loads the correct integration file based on the PHP version (avoiding
+ * strict error messages with PHP 5).
+ */
+
+if ( !function_exists('version_compare') || version_compare( phpversion(), '5', '<' ) )
+	include_once( 'fckeditor_php4.php' ) ;
+else
+	include_once( 'fckeditor_php5.php' ) ;

Added: announcement/trunk/src/main/webapp/fckeditor/fckeditor.pl
===================================================================
--- announcement/trunk/src/main/webapp/fckeditor/fckeditor.pl	                        (rev 0)
+++ announcement/trunk/src/main/webapp/fckeditor/fckeditor.pl	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,143 @@
+#####
+#  FCKeditor - The text editor for Internet - http://www.fckeditor.net
+#  Copyright (C) 2003-2008 Frederico Caldeira Knabben
+#
+#  == BEGIN LICENSE ==
+#
+#  Licensed under the terms of any of the following licenses at your
+#  choice:
+#
+#   - GNU General Public License Version 2 or later (the "GPL")
+#     http://www.gnu.org/licenses/gpl.html
+#
+#   - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+#     http://www.gnu.org/licenses/lgpl.html
+#
+#   - Mozilla Public License Version 1.1 or later (the "MPL")
+#     http://www.mozilla.org/MPL/MPL-1.1.html
+#
+#  == END LICENSE ==
+#
+#  This is the integration file for Perl.
+#####
+
+#my $InstanceName;
+#my $BasePath;
+#my $Width;
+#my $Height;
+#my $ToolbarSet;
+#my $Value;
+#my %Config;
+
+sub FCKeditor
+{
+
+	local($instanceName) = @_;
+	$InstanceName	= $instanceName;
+	$BasePath		= '/fckeditor/';
+	$Width			= '100%';
+	$Height			= '200';
+	$ToolbarSet		= 'Default';
+	$Value			= '';
+}
+
+sub Create
+{
+	print &CreateHtml();
+}
+
+sub specialchar_cnv
+{
+
+	local($ch) = @_;
+
+	$ch =~ s/&/&amp;/g;		# &
+	$ch =~ s/\"/&quot;/g;	#"
+	$ch =~ s/\'/&#39;/g;	# '
+	$ch =~ s/</&lt;/g;		# <
+	$ch =~ s/>/&gt;/g;		# >
+	return($ch);
+}
+
+sub CreateHtml
+{
+
+	$HtmlValue = &specialchar_cnv($Value);
+	$Html = '' ;
+	if(&IsCompatible()) {
+		$Link = $BasePath . "editor/fckeditor.html?InstanceName=$InstanceName";
+		if($ToolbarSet ne '') {
+			$Link .= "&amp;Toolbar=$ToolbarSet";
+		}
+		#// Render the linked hidden field.
+		$Html .= "<input type=\"hidden\" id=\"$InstanceName\" name=\"$InstanceName\" value=\"$HtmlValue\" style=\"display:none\" />" ;
+
+		#// Render the configurations hidden field.
+		$cfgstr = &GetConfigFieldString();
+		$wk = $InstanceName."___Config";
+		$Html .= "<input type=\"hidden\" id=\"$wk\" value=\"$cfgstr\" style=\"display:none\" />" ;
+
+		#// Render the editor IFRAME.
+		$wk = $InstanceName."___Frame";
+		$Html .= "<iframe id=\"$wk\" src=\"$Link\" width=\"$Width\" height=\"$Height\" frameborder=\"0\" scrolling=\"no\"></iframe>";
+	} else {
+		if($Width =~ /\%/g){
+			$WidthCSS = $Width;
+		} else {
+			$WidthCSS = $Width . 'px';
+		}
+		if($Height =~ /\%/g){
+			$HeightCSS = $Height;
+		} else {
+			$HeightCSS = $Height . 'px';
+		}
+		$Html .= "<textarea name=\"$InstanceName\" rows=\"4\" cols=\"40\" style=\"width: $WidthCSS; height: $HeightCSS\">$HtmlValue</textarea>";
+	}
+	return($Html);
+}
+
+sub IsCompatible
+{
+
+	$sAgent = $ENV{'HTTP_USER_AGENT'};
+	if(($sAgent =~ /MSIE/i) && !($sAgent =~ /mac/i) && !($sAgent =~ /Opera/i)) {
+		$iVersion = substr($sAgent,index($sAgent,'MSIE') + 5,3);
+		return($iVersion >= 5.5) ;
+	} elsif($sAgent =~ /Gecko\//i) {
+		$iVersion = substr($sAgent,index($sAgent,'Gecko/') + 6,8);
+		return($iVersion >= 20030210) ;
+	} elsif($sAgent =~ /Opera\//i) {
+		$iVersion = substr($sAgent,index($sAgent,'Opera/') + 6,4);
+		return($iVersion >= 9.5) ;
+	} elsif($sAgent =~ /AppleWebKit\/(\d+)/i) {
+		return($1 >= 522) ;
+	} else {
+		return(0);		# 2.0 PR fix
+	}
+}
+
+sub GetConfigFieldString
+{
+	$sParams = '';
+	$bFirst = 0;
+	foreach $sKey (keys %Config) {
+		$sValue = $Config{$sKey};
+		if($bFirst == 1) {
+			$sParams .= '&amp;';
+		} else {
+			$bFirst = 1;
+		}
+		$k = &specialchar_cnv($sKey);
+		$v = &specialchar_cnv($sValue);
+		if($sValue eq "true") {
+			$sParams .= "$k=true";
+		} elsif($sValue eq "false") {
+			$sParams .= "$k=false";
+		} else {
+			$sParams .= "$k=$v";
+		}
+	}
+	return($sParams);
+}
+
+1;


Property changes on: announcement/trunk/src/main/webapp/fckeditor/fckeditor.pl
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/webapp/fckeditor/fckeditor.py
===================================================================
--- announcement/trunk/src/main/webapp/fckeditor/fckeditor.py	                        (rev 0)
+++ announcement/trunk/src/main/webapp/fckeditor/fckeditor.py	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,160 @@
+"""
+FCKeditor - The text editor for Internet - http://www.fckeditor.net
+Copyright (C) 2003-2008 Frederico Caldeira Knabben
+
+== BEGIN LICENSE ==
+
+Licensed under the terms of any of the following licenses at your
+choice:
+
+ - GNU General Public License Version 2 or later (the "GPL")
+   http://www.gnu.org/licenses/gpl.html
+
+ - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+   http://www.gnu.org/licenses/lgpl.html
+
+ - Mozilla Public License Version 1.1 or later (the "MPL")
+   http://www.mozilla.org/MPL/MPL-1.1.html
+
+== END LICENSE ==
+
+This is the integration file for Python.
+"""
+
+import cgi
+import os
+import re
+import string
+
+def escape(text, replace=string.replace):
+    """Converts the special characters '<', '>', and '&'.
+
+    RFC 1866 specifies that these characters be represented
+    in HTML as &lt; &gt; and &amp; respectively. In Python
+    1.5 we use the new string.replace() function for speed.
+    """
+    text = replace(text, '&', '&amp;') # must be done 1st
+    text = replace(text, '<', '&lt;')
+    text = replace(text, '>', '&gt;')
+    text = replace(text, '"', '&quot;')
+    text = replace(text, "'", '&#39;')
+    return text
+
+# The FCKeditor class
+class FCKeditor(object):
+	def __init__(self, instanceName):
+		self.InstanceName = instanceName
+		self.BasePath = '/fckeditor/'
+		self.Width = '100%'
+		self.Height = '200'
+		self.ToolbarSet = 'Default'
+		self.Value = '';
+
+		self.Config = {}
+
+	def Create(self):
+		return self.CreateHtml()
+
+	def CreateHtml(self):
+		HtmlValue = escape(self.Value)
+		Html = ""
+
+		if (self.IsCompatible()):
+			File = "fckeditor.html"
+			Link = "%seditor/%s?InstanceName=%s" % (
+					self.BasePath,
+					File,
+					self.InstanceName
+					)
+			if (self.ToolbarSet is not None):
+				Link += "&amp;Toolbar=%s" % self.ToolbarSet
+
+			# Render the linked hidden field
+			Html += "<input type=\"hidden\" id=\"%s\" name=\"%s\" value=\"%s\" style=\"display:none\" />" % (
+					self.InstanceName,
+					self.InstanceName,
+					HtmlValue
+					)
+
+			# Render the configurations hidden field
+			Html += "<input type=\"hidden\" id=\"%s___Config\" value=\"%s\" style=\"display:none\" />" % (
+					self.InstanceName,
+					self.GetConfigFieldString()
+					)
+
+			# Render the editor iframe
+			Html += "<iframe id=\"%s\__Frame\" src=\"%s\" width=\"%s\" height=\"%s\" frameborder=\"0\" scrolling=\"no\"></iframe>" % (
+					self.InstanceName,
+					Link,
+					self.Width,
+					self.Height
+					)
+		else:
+			if (self.Width.find("%%") < 0):
+				WidthCSS = "%spx" % self.Width
+			else:
+				WidthCSS = self.Width
+			if (self.Height.find("%%") < 0):
+				HeightCSS = "%spx" % self.Height
+			else:
+				HeightCSS = self.Height
+
+			Html += "<textarea name=\"%s\" rows=\"4\" cols=\"40\" style=\"width: %s; height: %s;\" wrap=\"virtual\">%s</textarea>" % (
+					self.InstanceName,
+					WidthCSS,
+					HeightCSS,
+					HtmlValue
+					)
+		return Html
+
+	def IsCompatible(self):
+		if (os.environ.has_key("HTTP_USER_AGENT")):
+			sAgent = os.environ.get("HTTP_USER_AGENT", "")
+		else:
+			sAgent = ""
+		if (sAgent.find("MSIE") >= 0) and (sAgent.find("mac") < 0) and (sAgent.find("Opera") < 0):
+			i = sAgent.find("MSIE")
+			iVersion = float(sAgent[i+5:i+5+3])
+			if (iVersion >= 5.5):
+				return True
+			return False
+		elif (sAgent.find("Gecko/") >= 0):
+			i = sAgent.find("Gecko/")
+			iVersion = int(sAgent[i+6:i+6+8])
+			if (iVersion >= 20030210):
+				return True
+			return False
+		elif (sAgent.find("Opera/") >= 0):
+			i = sAgent.find("Opera/")
+			iVersion = float(sAgent[i+6:i+6+4])
+			if (iVersion >= 9.5):
+				return True
+			return False
+		elif (sAgent.find("AppleWebKit/") >= 0):
+			p = re.compile('AppleWebKit\/(\d+)', re.IGNORECASE)
+			m = p.search(sAgent)
+			if (m.group(1) >= 522):
+				return True
+			return False
+		else:
+			return False
+
+	def GetConfigFieldString(self):
+		sParams = ""
+		bFirst = True
+		for sKey in self.Config.keys():
+			sValue = self.Config[sKey]
+			if (not bFirst):
+				sParams += "&amp;"
+			else:
+				bFirst = False
+			if (sValue):
+				k = escape(sKey)
+				v = escape(sValue)
+				if (sValue == "true"):
+					sParams += "%s=true" % k
+				elif (sValue == "false"):
+					sParams += "%s=false" % k
+				else:
+					sParams += "%s=%s" % (k, v)
+		return sParams


Property changes on: announcement/trunk/src/main/webapp/fckeditor/fckeditor.py
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/webapp/fckeditor/fckeditor_php4.php
===================================================================
--- announcement/trunk/src/main/webapp/fckeditor/fckeditor_php4.php	                        (rev 0)
+++ announcement/trunk/src/main/webapp/fckeditor/fckeditor_php4.php	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,262 @@
+<?php
+/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2008 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * This is the integration file for PHP 4.
+ *
+ * It defines the FCKeditor class that can be used to create editor
+ * instances in PHP pages on server side.
+ */
+
+/**
+ * Check if browser is compatible with FCKeditor.
+ * Return true if is compatible.
+ *
+ * @return boolean
+ */
+function FCKeditor_IsCompatibleBrowser()
+{
+	if ( isset( $_SERVER ) ) {
+		$sAgent = $_SERVER['HTTP_USER_AGENT'] ;
+	}
+	else {
+		global $HTTP_SERVER_VARS ;
+		if ( isset( $HTTP_SERVER_VARS ) ) {
+			$sAgent = $HTTP_SERVER_VARS['HTTP_USER_AGENT'] ;
+		}
+		else {
+			global $HTTP_USER_AGENT ;
+			$sAgent = $HTTP_USER_AGENT ;
+		}
+	}
+
+	if ( strpos($sAgent, 'MSIE') !== false && strpos($sAgent, 'mac') === false && strpos($sAgent, 'Opera') === false )
+	{
+		$iVersion = (float)substr($sAgent, strpos($sAgent, 'MSIE') + 5, 3) ;
+		return ($iVersion >= 5.5) ;
+	}
+	else if ( strpos($sAgent, 'Gecko/') !== false )
+	{
+		$iVersion = (int)substr($sAgent, strpos($sAgent, 'Gecko/') + 6, 8) ;
+		return ($iVersion >= 20030210) ;
+	}
+	else if ( strpos($sAgent, 'Opera/') !== false )
+	{
+		$fVersion = (float)substr($sAgent, strpos($sAgent, 'Opera/') + 6, 4) ;
+		return ($fVersion >= 9.5) ;
+	}
+	else if ( preg_match( "|AppleWebKit/(\d+)|i", $sAgent, $matches ) )
+	{
+		$iVersion = $matches[1] ;
+		return ( $matches[1] >= 522 ) ;
+	}
+	else
+		return false ;
+}
+
+class FCKeditor
+{
+	/**
+	 * Name of the FCKeditor instance.
+	 *
+	 * @access protected
+	 * @var string
+	 */
+	var $InstanceName ;
+	/**
+	 * Path to FCKeditor relative to the document root.
+	 *
+	 * @var string
+	 */
+	var $BasePath ;
+	/**
+	 * Width of the FCKeditor.
+	 * Examples: 100%, 600
+	 *
+	 * @var mixed
+	 */
+	var $Width ;
+	/**
+	 * Height of the FCKeditor.
+	 * Examples: 400, 50%
+	 *
+	 * @var mixed
+	 */
+	var $Height ;
+	/**
+	 * Name of the toolbar to load.
+	 *
+	 * @var string
+	 */
+	var $ToolbarSet ;
+	/**
+	 * Initial value.
+	 *
+	 * @var string
+	 */
+	var $Value ;
+	/**
+	 * This is where additional configuration can be passed.
+	 * Example:
+	 * $oFCKeditor->Config['EnterMode'] = 'br';
+	 *
+	 * @var array
+	 */
+	var $Config ;
+
+	/**
+	 * Main Constructor.
+	 * Refer to the _samples/php directory for examples.
+	 *
+	 * @param string $instanceName
+	 */
+	function FCKeditor( $instanceName )
+	{
+		$this->InstanceName	= $instanceName ;
+		$this->BasePath		= '/fckeditor/' ;
+		$this->Width		= '100%' ;
+		$this->Height		= '200' ;
+		$this->ToolbarSet	= 'Default' ;
+		$this->Value		= '' ;
+
+		$this->Config		= array() ;
+	}
+
+	/**
+	 * Display FCKeditor.
+	 *
+	 */
+	function Create()
+	{
+		echo $this->CreateHtml() ;
+	}
+
+	/**
+	 * Return the HTML code required to run FCKeditor.
+	 *
+	 * @return string
+	 */
+	function CreateHtml()
+	{
+		$HtmlValue = htmlspecialchars( $this->Value ) ;
+
+		$Html = '' ;
+
+		if ( !isset( $_GET ) ) {
+			global $HTTP_GET_VARS ;
+			$_GET = $HTTP_GET_VARS ;
+		}
+
+		if ( $this->IsCompatible() )
+		{
+			if ( isset( $_GET['fcksource'] ) && $_GET['fcksource'] == "true" )
+				$File = 'fckeditor.original.html' ;
+			else
+				$File = 'fckeditor.html' ;
+
+			$Link = "{$this->BasePath}editor/{$File}?InstanceName={$this->InstanceName}" ;
+
+			if ( $this->ToolbarSet != '' )
+				$Link .= "&amp;Toolbar={$this->ToolbarSet}" ;
+
+			// Render the linked hidden field.
+			$Html .= "<input type=\"hidden\" id=\"{$this->InstanceName}\" name=\"{$this->InstanceName}\" value=\"{$HtmlValue}\" style=\"display:none\" />" ;
+
+			// Render the configurations hidden field.
+			$Html .= "<input type=\"hidden\" id=\"{$this->InstanceName}___Config\" value=\"" . $this->GetConfigFieldString() . "\" style=\"display:none\" />" ;
+
+			// Render the editor IFRAME.
+			$Html .= "<iframe id=\"{$this->InstanceName}___Frame\" src=\"{$Link}\" width=\"{$this->Width}\" height=\"{$this->Height}\" frameborder=\"0\" scrolling=\"no\"></iframe>" ;
+		}
+		else
+		{
+			if ( strpos( $this->Width, '%' ) === false )
+				$WidthCSS = $this->Width . 'px' ;
+			else
+				$WidthCSS = $this->Width ;
+
+			if ( strpos( $this->Height, '%' ) === false )
+				$HeightCSS = $this->Height . 'px' ;
+			else
+				$HeightCSS = $this->Height ;
+
+			$Html .= "<textarea name=\"{$this->InstanceName}\" rows=\"4\" cols=\"40\" style=\"width: {$WidthCSS}; height: {$HeightCSS}\">{$HtmlValue}</textarea>" ;
+		}
+
+		return $Html ;
+	}
+
+	/**
+	 * Returns true if browser is compatible with FCKeditor.
+	 *
+	 * @return boolean
+	 */
+	function IsCompatible()
+	{
+		return FCKeditor_IsCompatibleBrowser() ;
+	}
+
+	/**
+	 * Get settings from Config array as a single string.
+	 *
+	 * @access protected
+	 * @return string
+	 */
+	function GetConfigFieldString()
+	{
+		$sParams = '' ;
+		$bFirst = true ;
+
+		foreach ( $this->Config as $sKey => $sValue )
+		{
+			if ( $bFirst == false )
+				$sParams .= '&amp;' ;
+			else
+				$bFirst = false ;
+
+			if ( $sValue === true )
+				$sParams .= $this->EncodeConfig( $sKey ) . '=true' ;
+			else if ( $sValue === false )
+				$sParams .= $this->EncodeConfig( $sKey ) . '=false' ;
+			else
+				$sParams .= $this->EncodeConfig( $sKey ) . '=' . $this->EncodeConfig( $sValue ) ;
+		}
+
+		return $sParams ;
+	}
+
+	/**
+	 * Encode characters that may break the configuration string
+	 * generated by GetConfigFieldString().
+	 *
+	 * @access protected
+	 * @param string $valueToEncode
+	 * @return string
+	 */
+	function EncodeConfig( $valueToEncode )
+	{
+		$chars = array(
+			'&' => '%26',
+			'=' => '%3D',
+			'"' => '%22' ) ;
+
+		return strtr( $valueToEncode,  $chars ) ;
+	}
+}

Added: announcement/trunk/src/main/webapp/fckeditor/fckeditor_php5.php
===================================================================
--- announcement/trunk/src/main/webapp/fckeditor/fckeditor_php5.php	                        (rev 0)
+++ announcement/trunk/src/main/webapp/fckeditor/fckeditor_php5.php	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,257 @@
+<?php
+/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2008 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * This is the integration file for PHP 5.
+ *
+ * It defines the FCKeditor class that can be used to create editor
+ * instances in PHP pages on server side.
+ */
+
+/**
+ * Check if browser is compatible with FCKeditor.
+ * Return true if is compatible.
+ *
+ * @return boolean
+ */
+function FCKeditor_IsCompatibleBrowser()
+{
+	if ( isset( $_SERVER ) ) {
+		$sAgent = $_SERVER['HTTP_USER_AGENT'] ;
+	}
+	else {
+		global $HTTP_SERVER_VARS ;
+		if ( isset( $HTTP_SERVER_VARS ) ) {
+			$sAgent = $HTTP_SERVER_VARS['HTTP_USER_AGENT'] ;
+		}
+		else {
+			global $HTTP_USER_AGENT ;
+			$sAgent = $HTTP_USER_AGENT ;
+		}
+	}
+
+	if ( strpos($sAgent, 'MSIE') !== false && strpos($sAgent, 'mac') === false && strpos($sAgent, 'Opera') === false )
+	{
+		$iVersion = (float)substr($sAgent, strpos($sAgent, 'MSIE') + 5, 3) ;
+		return ($iVersion >= 5.5) ;
+	}
+	else if ( strpos($sAgent, 'Gecko/') !== false )
+	{
+		$iVersion = (int)substr($sAgent, strpos($sAgent, 'Gecko/') + 6, 8) ;
+		return ($iVersion >= 20030210) ;
+	}
+	else if ( strpos($sAgent, 'Opera/') !== false )
+	{
+		$fVersion = (float)substr($sAgent, strpos($sAgent, 'Opera/') + 6, 4) ;
+		return ($fVersion >= 9.5) ;
+	}
+	else if ( preg_match( "|AppleWebKit/(\d+)|i", $sAgent, $matches ) )
+	{
+		$iVersion = $matches[1] ;
+		return ( $matches[1] >= 522 ) ;
+	}
+	else
+		return false ;
+}
+
+class FCKeditor
+{
+	/**
+	 * Name of the FCKeditor instance.
+	 *
+	 * @access protected
+	 * @var string
+	 */
+	public $InstanceName ;
+	/**
+	 * Path to FCKeditor relative to the document root.
+	 *
+	 * @var string
+	 */
+	public $BasePath ;
+	/**
+	 * Width of the FCKeditor.
+	 * Examples: 100%, 600
+	 *
+	 * @var mixed
+	 */
+	public $Width ;
+	/**
+	 * Height of the FCKeditor.
+	 * Examples: 400, 50%
+	 *
+	 * @var mixed
+	 */
+	public $Height ;
+	/**
+	 * Name of the toolbar to load.
+	 *
+	 * @var string
+	 */
+	public $ToolbarSet ;
+	/**
+	 * Initial value.
+	 *
+	 * @var string
+	 */
+	public $Value ;
+	/**
+	 * This is where additional configuration can be passed.
+	 * Example:
+	 * $oFCKeditor->Config['EnterMode'] = 'br';
+	 *
+	 * @var array
+	 */
+	public $Config ;
+
+	/**
+	 * Main Constructor.
+	 * Refer to the _samples/php directory for examples.
+	 *
+	 * @param string $instanceName
+	 */
+	public function __construct( $instanceName )
+ 	{
+		$this->InstanceName	= $instanceName ;
+		$this->BasePath		= '/fckeditor/' ;
+		$this->Width		= '100%' ;
+		$this->Height		= '200' ;
+		$this->ToolbarSet	= 'Default' ;
+		$this->Value		= '' ;
+
+		$this->Config		= array() ;
+	}
+
+	/**
+	 * Display FCKeditor.
+	 *
+	 */
+	public function Create()
+	{
+		echo $this->CreateHtml() ;
+	}
+
+	/**
+	 * Return the HTML code required to run FCKeditor.
+	 *
+	 * @return string
+	 */
+	public function CreateHtml()
+	{
+		$HtmlValue = htmlspecialchars( $this->Value ) ;
+
+		$Html = '' ;
+
+		if ( $this->IsCompatible() )
+		{
+			if ( isset( $_GET['fcksource'] ) && $_GET['fcksource'] == "true" )
+				$File = 'fckeditor.original.html' ;
+			else
+				$File = 'fckeditor.html' ;
+
+			$Link = "{$this->BasePath}editor/{$File}?InstanceName={$this->InstanceName}" ;
+
+			if ( $this->ToolbarSet != '' )
+				$Link .= "&amp;Toolbar={$this->ToolbarSet}" ;
+
+			// Render the linked hidden field.
+			$Html .= "<input type=\"hidden\" id=\"{$this->InstanceName}\" name=\"{$this->InstanceName}\" value=\"{$HtmlValue}\" style=\"display:none\" />" ;
+
+			// Render the configurations hidden field.
+			$Html .= "<input type=\"hidden\" id=\"{$this->InstanceName}___Config\" value=\"" . $this->GetConfigFieldString() . "\" style=\"display:none\" />" ;
+
+			// Render the editor IFRAME.
+			$Html .= "<iframe id=\"{$this->InstanceName}___Frame\" src=\"{$Link}\" width=\"{$this->Width}\" height=\"{$this->Height}\" frameborder=\"0\" scrolling=\"no\"></iframe>" ;
+		}
+		else
+		{
+			if ( strpos( $this->Width, '%' ) === false )
+				$WidthCSS = $this->Width . 'px' ;
+			else
+				$WidthCSS = $this->Width ;
+
+			if ( strpos( $this->Height, '%' ) === false )
+				$HeightCSS = $this->Height . 'px' ;
+			else
+				$HeightCSS = $this->Height ;
+
+			$Html .= "<textarea name=\"{$this->InstanceName}\" rows=\"4\" cols=\"40\" style=\"width: {$WidthCSS}; height: {$HeightCSS}\">{$HtmlValue}</textarea>" ;
+		}
+
+		return $Html ;
+	}
+
+	/**
+	 * Returns true if browser is compatible with FCKeditor.
+	 *
+	 * @return boolean
+	 */
+	public function IsCompatible()
+	{
+		return FCKeditor_IsCompatibleBrowser() ;
+	}
+
+	/**
+	 * Get settings from Config array as a single string.
+	 *
+	 * @access protected
+	 * @return string
+	 */
+	public function GetConfigFieldString()
+	{
+		$sParams = '' ;
+		$bFirst = true ;
+
+		foreach ( $this->Config as $sKey => $sValue )
+		{
+			if ( $bFirst == false )
+				$sParams .= '&amp;' ;
+			else
+				$bFirst = false ;
+
+			if ( $sValue === true )
+				$sParams .= $this->EncodeConfig( $sKey ) . '=true' ;
+			else if ( $sValue === false )
+				$sParams .= $this->EncodeConfig( $sKey ) . '=false' ;
+			else
+				$sParams .= $this->EncodeConfig( $sKey ) . '=' . $this->EncodeConfig( $sValue ) ;
+		}
+
+		return $sParams ;
+	}
+
+	/**
+	 * Encode characters that may break the configuration string
+	 * generated by GetConfigFieldString().
+	 *
+	 * @access protected
+	 * @param string $valueToEncode
+	 * @return string
+	 */
+	public function EncodeConfig( $valueToEncode )
+	{
+		$chars = array(
+			'&' => '%26',
+			'=' => '%3D',
+			'"' => '%22' ) ;
+
+		return strtr( $valueToEncode,  $chars ) ;
+	}
+}

Added: announcement/trunk/src/main/webapp/fckeditor/fckpackager.xml
===================================================================
--- announcement/trunk/src/main/webapp/fckeditor/fckpackager.xml	                        (rev 0)
+++ announcement/trunk/src/main/webapp/fckeditor/fckpackager.xml	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,262 @@
+<?xml version="1.0" encoding="utf-8" ?>
+<!--
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2008 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * This is the configuration file to be used with FCKpackager to generate the
+ * compressed code files in the "js" folder.
+ *
+ * Please check http://www.fckeditor.net for more info.
+-->
+<Package>
+	<Header><![CDATA[/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2008 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * This file has been compressed for better performance. The original source
+ * can be found at "editor/_source".
+ */
+]]></Header>
+	<Constants removeDeclaration="false">
+		<Constant name="FCK_STATUS_NOTLOADED" value="0" />
+		<Constant name="FCK_STATUS_ACTIVE" value="1" />
+		<Constant name="FCK_STATUS_COMPLETE" value="2" />
+		<Constant name="FCK_TRISTATE_OFF" value="0" />
+		<Constant name="FCK_TRISTATE_ON" value="1" />
+		<Constant name="FCK_TRISTATE_DISABLED" value="-1" />
+		<Constant name="FCK_UNKNOWN" value="-9" />
+		<Constant name="FCK_TOOLBARITEM_ONLYICON" value="0" />
+		<Constant name="FCK_TOOLBARITEM_ONLYTEXT" value="1" />
+		<Constant name="FCK_TOOLBARITEM_ICONTEXT" value="2" />
+		<Constant name="FCK_EDITMODE_WYSIWYG" value="0" />
+		<Constant name="FCK_EDITMODE_SOURCE" value="1" />
+		<Constant name="FCK_STYLE_BLOCK" value="0" />
+		<Constant name="FCK_STYLE_INLINE" value="1" />
+		<Constant name="FCK_STYLE_OBJECT" value="2" />
+	</Constants>
+	<PackageFile path="editor/js/fckeditorcode_ie.js">
+		<File path="editor/_source/fckconstants.js" />
+		<File path="editor/_source/fckjscoreextensions.js" />
+		<File path="editor/_source/classes/fckiecleanup.js" />
+		<File path="editor/_source/internals/fckbrowserinfo.js" />
+		<File path="editor/_source/internals/fckurlparams.js" />
+		<File path="editor/_source/classes/fckevents.js" />
+		<File path="editor/_source/classes/fckdataprocessor.js" />
+		<File path="editor/_source/internals/fck.js" />
+		<File path="editor/_source/internals/fck_ie.js" />
+		<File path="editor/_source/internals/fckconfig.js" />
+		<File path="editor/_source/internals/fckdebug_empty.js" />
+		<File path="editor/_source/internals/fckdomtools.js" />
+		<File path="editor/_source/internals/fcktools.js" />
+		<File path="editor/_source/internals/fcktools_ie.js" />
+		<File path="editor/_source/fckeditorapi.js" />
+		<File path="editor/_source/classes/fckimagepreloader.js" />
+
+		<File path="editor/_source/internals/fckregexlib.js" />
+		<File path="editor/_source/internals/fcklistslib.js" />
+		<File path="editor/_source/internals/fcklanguagemanager.js" />
+		<File path="editor/_source/internals/fckxhtmlentities.js" />
+		<File path="editor/_source/internals/fckxhtml.js" />
+		<File path="editor/_source/internals/fckxhtml_ie.js" />
+		<File path="editor/_source/internals/fckcodeformatter.js" />
+		<File path="editor/_source/internals/fckundo.js" />
+		<File path="editor/_source/classes/fckeditingarea.js" />
+		<File path="editor/_source/classes/fckkeystrokehandler.js" />
+
+		<File path="editor/dtd/fck_xhtml10transitional.js" />
+		<File path="editor/_source/classes/fckstyle.js" />
+		<File path="editor/_source/internals/fckstyles.js" />
+
+		<File path="editor/_source/internals/fcklisthandler.js" />
+		<File path="editor/_source/classes/fckelementpath.js" />
+		<File path="editor/_source/classes/fckdomrange.js" />
+		<File path="editor/_source/classes/fckdomrange_ie.js" />
+		<File path="editor/_source/classes/fckdomrangeiterator.js" />
+		<File path="editor/_source/classes/fckdocumentfragment_ie.js" />
+		<File path="editor/_source/classes/fckw3crange.js" />
+		<File path="editor/_source/classes/fckenterkey.js" />
+
+		<File path="editor/_source/internals/fckdocumentprocessor.js" />
+		<File path="editor/_source/internals/fckselection.js" />
+		<File path="editor/_source/internals/fckselection_ie.js" />
+
+		<File path="editor/_source/internals/fcktablehandler.js" />
+		<File path="editor/_source/internals/fcktablehandler_ie.js" />
+		<File path="editor/_source/classes/fckxml.js" />
+		<File path="editor/_source/classes/fckxml_ie.js" />
+
+		<File path="editor/_source/commandclasses/fcknamedcommand.js" />
+		<File path="editor/_source/commandclasses/fckstylecommand.js" />
+		<File path="editor/_source/commandclasses/fck_othercommands.js" />
+		<File path="editor/_source/commandclasses/fckshowblocks.js" />
+		<File path="editor/_source/commandclasses/fckspellcheckcommand_ie.js" />
+		<File path="editor/_source/commandclasses/fcktextcolorcommand.js" />
+		<File path="editor/_source/commandclasses/fckpasteplaintextcommand.js" />
+		<File path="editor/_source/commandclasses/fckpastewordcommand.js" />
+		<File path="editor/_source/commandclasses/fcktablecommand.js" />
+		<File path="editor/_source/commandclasses/fckfitwindow.js" />
+		<File path="editor/_source/commandclasses/fcklistcommands.js" />
+		<File path="editor/_source/commandclasses/fckjustifycommands.js" />
+		<File path="editor/_source/commandclasses/fckindentcommands.js" />
+		<File path="editor/_source/commandclasses/fckblockquotecommand.js" />
+		<File path="editor/_source/commandclasses/fckcorestylecommand.js" />
+		<File path="editor/_source/commandclasses/fckremoveformatcommand.js" />
+		<File path="editor/_source/internals/fckcommands.js" />
+
+		<File path="editor/_source/classes/fckpanel.js" />
+		<File path="editor/_source/classes/fckicon.js" />
+		<File path="editor/_source/classes/fcktoolbarbuttonui.js" />
+		<File path="editor/_source/classes/fcktoolbarbutton.js" />
+		<File path="editor/_source/classes/fckspecialcombo.js" />
+		<File path="editor/_source/classes/fcktoolbarspecialcombo.js" />
+		<File path="editor/_source/classes/fcktoolbarstylecombo.js" />
+		<File path="editor/_source/classes/fcktoolbarfontformatcombo.js" />
+		<File path="editor/_source/classes/fcktoolbarfontscombo.js" />
+		<File path="editor/_source/classes/fcktoolbarfontsizecombo.js" />
+		<File path="editor/_source/classes/fcktoolbarpanelbutton.js" />
+		<File path="editor/_source/internals/fcktoolbaritems.js" />
+		<File path="editor/_source/classes/fcktoolbar.js" />
+		<File path="editor/_source/classes/fcktoolbarbreak_ie.js" />
+		<File path="editor/_source/internals/fcktoolbarset.js" />
+		<File path="editor/_source/internals/fckdialog.js" />
+
+		<File path="editor/_source/classes/fckmenuitem.js" />
+		<File path="editor/_source/classes/fckmenublock.js" />
+		<File path="editor/_source/classes/fckmenublockpanel.js" />
+		<File path="editor/_source/classes/fckcontextmenu.js" />
+		<File path="editor/_source/internals/fck_contextmenu.js" />
+		<File path="editor/_source/classes/fckhtmliterator.js" />
+
+		<File path="editor/_source/classes/fckplugin.js" />
+		<File path="editor/_source/internals/fckplugins.js" />
+	</PackageFile>
+
+	<PackageFile path="editor/js/fckeditorcode_gecko.js">
+		<File path="editor/_source/fckconstants.js" />
+		<File path="editor/_source/fckjscoreextensions.js" />
+		<File path="editor/_source/internals/fckbrowserinfo.js" />
+		<File path="editor/_source/internals/fckurlparams.js" />
+		<File path="editor/_source/classes/fckevents.js" />
+		<File path="editor/_source/classes/fckdataprocessor.js" />
+		<File path="editor/_source/internals/fck.js" />
+		<File path="editor/_source/internals/fck_gecko.js" />
+		<File path="editor/_source/internals/fckconfig.js" />
+		<File path="editor/_source/internals/fckdebug_empty.js" />
+		<File path="editor/_source/internals/fckdomtools.js" />
+		<File path="editor/_source/internals/fcktools.js" />
+		<File path="editor/_source/internals/fcktools_gecko.js" />
+		<File path="editor/_source/fckeditorapi.js" />
+		<File path="editor/_source/classes/fckimagepreloader.js" />
+
+		<File path="editor/_source/internals/fckregexlib.js" />
+		<File path="editor/_source/internals/fcklistslib.js" />
+		<File path="editor/_source/internals/fcklanguagemanager.js" />
+		<File path="editor/_source/internals/fckxhtmlentities.js" />
+		<File path="editor/_source/internals/fckxhtml.js" />
+		<File path="editor/_source/internals/fckxhtml_gecko.js" />
+		<File path="editor/_source/internals/fckcodeformatter.js" />
+		<File path="editor/_source/internals/fckundo.js" />
+		<File path="editor/_source/classes/fckeditingarea.js" />
+		<File path="editor/_source/classes/fckkeystrokehandler.js" />
+
+		<File path="editor/dtd/fck_xhtml10transitional.js" />
+		<File path="editor/_source/classes/fckstyle.js" />
+		<File path="editor/_source/internals/fckstyles.js" />
+
+		<File path="editor/_source/internals/fcklisthandler.js" />
+		<File path="editor/_source/classes/fckelementpath.js" />
+		<File path="editor/_source/classes/fckdomrange.js" />
+		<File path="editor/_source/classes/fckdomrange_gecko.js" />
+		<File path="editor/_source/classes/fckdomrangeiterator.js" />
+		<File path="editor/_source/classes/fckdocumentfragment_gecko.js" />
+		<File path="editor/_source/classes/fckw3crange.js" />
+		<File path="editor/_source/classes/fckenterkey.js" />
+
+		<File path="editor/_source/internals/fckdocumentprocessor.js" />
+		<File path="editor/_source/internals/fckselection.js" />
+		<File path="editor/_source/internals/fckselection_gecko.js" />
+
+		<File path="editor/_source/internals/fcktablehandler.js" />
+		<File path="editor/_source/internals/fcktablehandler_gecko.js" />
+		<File path="editor/_source/classes/fckxml.js" />
+		<File path="editor/_source/classes/fckxml_gecko.js" />
+
+		<File path="editor/_source/commandclasses/fcknamedcommand.js" />
+		<File path="editor/_source/commandclasses/fckstylecommand.js" />
+		<File path="editor/_source/commandclasses/fck_othercommands.js" />
+		<File path="editor/_source/commandclasses/fckshowblocks.js" />
+		<File path="editor/_source/commandclasses/fckspellcheckcommand_gecko.js" />
+		<File path="editor/_source/commandclasses/fcktextcolorcommand.js" />
+		<File path="editor/_source/commandclasses/fckpasteplaintextcommand.js" />
+		<File path="editor/_source/commandclasses/fckpastewordcommand.js" />
+		<File path="editor/_source/commandclasses/fcktablecommand.js" />
+		<File path="editor/_source/commandclasses/fckfitwindow.js" />
+		<File path="editor/_source/commandclasses/fcklistcommands.js" />
+		<File path="editor/_source/commandclasses/fckjustifycommands.js" />
+		<File path="editor/_source/commandclasses/fckindentcommands.js" />
+		<File path="editor/_source/commandclasses/fckblockquotecommand.js" />
+		<File path="editor/_source/commandclasses/fckcorestylecommand.js" />
+		<File path="editor/_source/commandclasses/fckremoveformatcommand.js" />
+		<File path="editor/_source/internals/fckcommands.js" />
+
+		<File path="editor/_source/classes/fckpanel.js" />
+		<File path="editor/_source/classes/fckicon.js" />
+		<File path="editor/_source/classes/fcktoolbarbuttonui.js" />
+		<File path="editor/_source/classes/fcktoolbarbutton.js" />
+		<File path="editor/_source/classes/fckspecialcombo.js" />
+		<File path="editor/_source/classes/fcktoolbarspecialcombo.js" />
+		<File path="editor/_source/classes/fcktoolbarstylecombo.js" />
+		<File path="editor/_source/classes/fcktoolbarfontformatcombo.js" />
+		<File path="editor/_source/classes/fcktoolbarfontscombo.js" />
+		<File path="editor/_source/classes/fcktoolbarfontsizecombo.js" />
+		<File path="editor/_source/classes/fcktoolbarpanelbutton.js" />
+		<File path="editor/_source/internals/fcktoolbaritems.js" />
+		<File path="editor/_source/classes/fcktoolbar.js" />
+		<File path="editor/_source/classes/fcktoolbarbreak_gecko.js" />
+		<File path="editor/_source/internals/fcktoolbarset.js" />
+		<File path="editor/_source/internals/fckdialog.js" />
+
+		<File path="editor/_source/classes/fckmenuitem.js" />
+		<File path="editor/_source/classes/fckmenublock.js" />
+		<File path="editor/_source/classes/fckmenublockpanel.js" />
+		<File path="editor/_source/classes/fckcontextmenu.js" />
+		<File path="editor/_source/internals/fck_contextmenu.js" />
+		<File path="editor/_source/classes/fckhtmliterator.js" />
+
+		<File path="editor/_source/classes/fckplugin.js" />
+		<File path="editor/_source/internals/fckplugins.js" />
+	</PackageFile>
+
+</Package>


Property changes on: announcement/trunk/src/main/webapp/fckeditor/fckpackager.xml
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/webapp/fckeditor/fckstyles.xml
===================================================================
--- announcement/trunk/src/main/webapp/fckeditor/fckstyles.xml	                        (rev 0)
+++ announcement/trunk/src/main/webapp/fckeditor/fckstyles.xml	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,111 @@
+<?xml version="1.0" encoding="utf-8" ?>
+<!--
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2008 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * This is the sample style definitions file. It makes the styles combo
+ * completely customizable.
+ *
+ * See FCKConfig.StylesXmlPath in the configuration file.
+-->
+<Styles>
+
+	<!-- Block Styles -->
+
+	<!--
+	# These styles are already available in the "Format" combo, so they are not
+	# needed here by default.
+
+	<Style name="Heading 1" element="h1" />
+	<Style name="Heading 2" element="h2" />
+	<Style name="Heading 3" element="h3" />
+	<Style name="Heading 4" element="h4" />
+	<Style name="Heading 5" element="h5" />
+	<Style name="Heading 6" element="h6" />
+	<Style name="Paragraph" element="p" />
+	<Style name="Document Block" element="div" />
+	<Style name="Preformatted Text" element="pre" />
+	<Style name="Address" element="address" />
+	-->
+
+	<!-- Inline Styles -->
+
+	<!--
+	# These are core styles available as toolbar buttons.
+
+	<Style name="Bold" element="b">
+		<Override element="strong" />
+	</Style>
+	<Style name="Italic" element="i">
+		<Override element="em" />
+	</Style>
+	<Style name="Underline" element="u" />
+	<Style name="Strikethrough" element="strike" />
+	<Style name="Subscript" element="sub" />
+	<Style name="Superscript" element="sup" />
+	-->
+
+	<Style name="Marker: Yellow" element="span">
+		<Style name="background-color" value="Yellow" />
+	</Style>
+	<Style name="Marker: Green" element="span">
+		<Style name="background-color" value="Lime" />
+	</Style>
+
+	<Style name="Big" element="big" />
+	<Style name="Small" element="small" />
+	<Style name="Typewriter" element="tt" />
+
+	<Style name="Computer Code" element="code" />
+	<Style name="Keyboard Phrase" element="kbd" />
+	<Style name="Sample Text" element="samp" />
+	<Style name="Variable" element="var" />
+
+	<Style name="Deleted Text" element="del" />
+	<Style name="Inserted Text" element="ins" />
+
+	<Style name="Cited Work" element="cite" />
+	<Style name="Inline Quotation" element="q" />
+
+	<Style name="Language: RTL" element="span">
+		<Attribute name="dir" value="rtl" />
+	</Style>
+	<Style name="Language: LTR" element="span">
+		<Attribute name="dir" value="ltr" />
+	</Style>
+	<Style name="Language: RTL Strong" element="bdo">
+		<Attribute name="dir" value="rtl" />
+	</Style>
+	<Style name="Language: LTR Strong" element="bdo">
+		<Attribute name="dir" value="ltr" />
+	</Style>
+
+	<!-- Object Styles -->
+
+	<Style name="Image on Left" element="img">
+		<Attribute name="style" value="padding: 5px; margin-right: 5px" />
+		<Attribute name="border" value="2" />
+		<Attribute name="align" value="left" />
+	</Style>
+	<Style name="Image on Right" element="img">
+		<Attribute name="style" value="padding: 5px; margin-left: 5px" />
+		<Attribute name="border" value="2" />
+		<Attribute name="align" value="right" />
+	</Style>
+</Styles>


Property changes on: announcement/trunk/src/main/webapp/fckeditor/fckstyles.xml
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/webapp/fckeditor/fcktemplates.xml
===================================================================
--- announcement/trunk/src/main/webapp/fckeditor/fcktemplates.xml	                        (rev 0)
+++ announcement/trunk/src/main/webapp/fckeditor/fcktemplates.xml	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,103 @@
+<?xml version="1.0" encoding="utf-8" ?>
+<!--
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2008 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * This is the sample templates definitions file. It makes the "templates"
+ * command completely customizable.
+ *
+ * See FCKConfig.TemplatesXmlPath in the configuration file.
+-->
+<Templates imagesBasePath="fck_template/images/">
+	<Template title="Image and Title" image="template1.gif">
+		<Description>One main image with a title and text that surround the image.</Description>
+		<Html>
+			<![CDATA[
+				<img style="MARGIN-RIGHT: 10px" height="100" alt="" width="100" align="left"/>
+				<h3>Type the title here</h3>
+				Type the text here
+			]]>
+		</Html>
+	</Template>
+	<Template title="Strange Template" image="template2.gif">
+		<Description>A template that defines two colums, each one with a title, and some text.</Description>
+		<Html>
+			<![CDATA[
+				<table cellspacing="0" cellpadding="0" width="100%" border="0">
+					<tbody>
+						<tr>
+							<td width="50%">
+							<h3>Title 1</h3>
+							</td>
+							<td>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </td>
+							<td width="50%">
+							<h3>Title 2</h3>
+							</td>
+						</tr>
+						<tr>
+							<td>Text 1</td>
+							<td>&nbsp;</td>
+							<td>Text 2</td>
+						</tr>
+					</tbody>
+				</table>
+				More text goes here.
+			]]>
+		</Html>
+	</Template>
+	<Template title="Text and Table" image="template3.gif">
+		<Description>A title with some text and a table.</Description>
+		<Html>
+			<![CDATA[
+				<table align="left" width="80%" border="0" cellspacing="0" cellpadding="0"><tr><td>
+					<h3>Title goes here</h3>
+					<p>
+					<table style="FLOAT: right" cellspacing="0" cellpadding="0" width="150" border="1">
+						<tbody>
+							<tr>
+								<td align="center" colspan="3"><strong>Table title</strong></td>
+							</tr>
+							<tr>
+								<td>&nbsp;</td>
+								<td>&nbsp;</td>
+								<td>&nbsp;</td>
+							</tr>
+							<tr>
+								<td>&nbsp;</td>
+								<td>&nbsp;</td>
+								<td>&nbsp;</td>
+							</tr>
+							<tr>
+								<td>&nbsp;</td>
+								<td>&nbsp;</td>
+								<td>&nbsp;</td>
+							</tr>
+							<tr>
+								<td>&nbsp;</td>
+								<td>&nbsp;</td>
+								<td>&nbsp;</td>
+							</tr>
+						</tbody>
+					</table>
+					Type the text here</p>
+				</td></tr></table>
+			]]>
+		</Html>
+	</Template>
+</Templates>


Property changes on: announcement/trunk/src/main/webapp/fckeditor/fcktemplates.xml
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/webapp/fckeditor/fckutils.cfm
===================================================================
--- announcement/trunk/src/main/webapp/fckeditor/fckutils.cfm	                        (rev 0)
+++ announcement/trunk/src/main/webapp/fckeditor/fckutils.cfm	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,78 @@
+<!---
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2008 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * ColdFusion integration.
+ * This function is used by FCKeditor module to check browser compatibility
+ --->
+<cfscript>
+function FCKeditor_IsCompatibleBrowser()
+{
+	sAgent = lCase( cgi.HTTP_USER_AGENT );
+	isCompatibleBrowser = false;
+
+	// check for Internet Explorer ( >= 5.5 )
+	if( find( "msie", sAgent ) and not find( "mac", sAgent ) and not find( "opera", sAgent ) )
+	{
+		// try to extract IE version
+		stResult = reFind( "msie ([5-9]\.[0-9])", sAgent, 1, true );
+		if( arrayLen( stResult.pos ) eq 2 )
+		{
+			// get IE Version
+			sBrowserVersion = mid( sAgent, stResult.pos[2], stResult.len[2] );
+			if( sBrowserVersion GTE 5.5 )
+				isCompatibleBrowser = true;
+		}
+	}
+	// check for Gecko ( >= 20030210+ )
+	else if( find( "gecko/", sAgent ) )
+	{
+		// try to extract Gecko version date
+		stResult = reFind( "gecko/(200[3-9][0-1][0-9][0-3][0-9])", sAgent, 1, true );
+		if( arrayLen( stResult.pos ) eq 2 )
+		{
+			// get Gecko build (i18n date)
+			sBrowserVersion = mid( sAgent, stResult.pos[2], stResult.len[2] );
+			if( sBrowserVersion GTE 20030210 )
+				isCompatibleBrowser = true;
+		}
+	}
+	else if( find( "opera/", sAgent ) )
+	{
+		// try to extract Opera version
+		stResult = reFind( "opera/([0-9]+\.[0-9]+)", sAgent, 1, true );
+		if( arrayLen( stResult.pos ) eq 2 )
+		{
+			if ( mid( sAgent, stResult.pos[2], stResult.len[2] ) gte 9.5)
+				isCompatibleBrowser = true;
+		}
+	}
+	else if( find( "applewebkit", sAgent ) )
+	{
+		// try to extract Gecko version date
+		stResult = reFind( "applewebkit/([0-9]+)", sAgent, 1, true );
+		if( arrayLen( stResult.pos ) eq 2 )
+		{
+			if( mid( sAgent, stResult.pos[2], stResult.len[2] ) gte 522 )
+				isCompatibleBrowser = true;
+		}
+	}
+	return isCompatibleBrowser;
+}
+</cfscript>

Added: announcement/trunk/src/main/webapp/fckeditor/license.txt
===================================================================
--- announcement/trunk/src/main/webapp/fckeditor/license.txt	                        (rev 0)
+++ announcement/trunk/src/main/webapp/fckeditor/license.txt	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,1246 @@
+FCKeditor - The text editor for Internet - http://www.fckeditor.net
+Copyright (C) 2003-2008 Frederico Caldeira Knabben
+
+Licensed under the terms of any of the following licenses at your
+choice:
+
+ - GNU General Public License Version 2 or later (the "GPL")
+   http://www.gnu.org/licenses/gpl.html
+   (See Appendix A)
+
+ - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+   http://www.gnu.org/licenses/lgpl.html
+   (See Appendix B)
+
+ - Mozilla Public License Version 1.1 or later (the "MPL")
+   http://www.mozilla.org/MPL/MPL-1.1.html
+   (See Appendix C)
+
+You are not required to, but if you want to explicitly declare the
+license you have chosen to be bound to when using, reproducing,
+modifying and distributing this software, just include a text file
+titled "legal.txt" in your version of this software, indicating your
+license choice. In any case, your choice will not restrict any
+recipient of your version of this software to use, reproduce, modify
+and distribute this software under any of the above licenses.
+
+Appendix A: The GPL License
+===========================
+
+		    GNU GENERAL PUBLIC LICENSE
+		       Version 2, June 1991
+
+ Copyright (C) 1989, 1991 Free Software Foundation, Inc.,
+ 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+			    Preamble
+
+  The licenses for most software are designed to take away your
+freedom to share and change it.  By contrast, the GNU General Public
+License is intended to guarantee your freedom to share and change free
+software--to make sure the software is free for all its users.  This
+General Public License applies to most of the Free Software
+Foundation's software and to any other program whose authors commit to
+using it.  (Some other Free Software Foundation software is covered by
+the GNU Lesser General Public License instead.)  You can apply it to
+your programs, too.
+
+  When we speak of free software, we are referring to freedom, not
+price.  Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+this service if you wish), that you receive source code or can get it
+if you want it, that you can change the software or use pieces of it
+in new free programs; and that you know you can do these things.
+
+  To protect your rights, we need to make restrictions that forbid
+anyone to deny you these rights or to ask you to surrender the rights.
+These restrictions translate to certain responsibilities for you if you
+distribute copies of the software, or if you modify it.
+
+  For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must give the recipients all the rights that
+you have.  You must make sure that they, too, receive or can get the
+source code.  And you must show them these terms so they know their
+rights.
+
+  We protect your rights with two steps: (1) copyright the software, and
+(2) offer you this license which gives you legal permission to copy,
+distribute and/or modify the software.
+
+  Also, for each author's protection and ours, we want to make certain
+that everyone understands that there is no warranty for this free
+software.  If the software is modified by someone else and passed on, we
+want its recipients to know that what they have is not the original, so
+that any problems introduced by others will not reflect on the original
+authors' reputations.
+
+  Finally, any free program is threatened constantly by software
+patents.  We wish to avoid the danger that redistributors of a free
+program will individually obtain patent licenses, in effect making the
+program proprietary.  To prevent this, we have made it clear that any
+patent must be licensed for everyone's free use or not licensed at all.
+
+  The precise terms and conditions for copying, distribution and
+modification follow.
+
+		    GNU GENERAL PUBLIC LICENSE
+   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+  0. This License applies to any program or other work which contains
+a notice placed by the copyright holder saying it may be distributed
+under the terms of this General Public License.  The "Program", below,
+refers to any such program or work, and a "work based on the Program"
+means either the Program or any derivative work under copyright law:
+that is to say, a work containing the Program or a portion of it,
+either verbatim or with modifications and/or translated into another
+language.  (Hereinafter, translation is included without limitation in
+the term "modification".)  Each licensee is addressed as "you".
+
+Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope.  The act of
+running the Program is not restricted, and the output from the Program
+is covered only if its contents constitute a work based on the
+Program (independent of having been made by running the Program).
+Whether that is true depends on what the Program does.
+
+  1. You may copy and distribute verbatim copies of the Program's
+source code as you receive it, in any medium, provided that you
+conspicuously and appropriately publish on each copy an appropriate
+copyright notice and disclaimer of warranty; keep intact all the
+notices that refer to this License and to the absence of any warranty;
+and give any other recipients of the Program a copy of this License
+along with the Program.
+
+You may charge a fee for the physical act of transferring a copy, and
+you may at your option offer warranty protection in exchange for a fee.
+
+  2. You may modify your copy or copies of the Program or any portion
+of it, thus forming a work based on the Program, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+    a) You must cause the modified files to carry prominent notices
+    stating that you changed the files and the date of any change.
+
+    b) You must cause any work that you distribute or publish, that in
+    whole or in part contains or is derived from the Program or any
+    part thereof, to be licensed as a whole at no charge to all third
+    parties under the terms of this License.
+
+    c) If the modified program normally reads commands interactively
+    when run, you must cause it, when started running for such
+    interactive use in the most ordinary way, to print or display an
+    announcement including an appropriate copyright notice and a
+    notice that there is no warranty (or else, saying that you provide
+    a warranty) and that users may redistribute the program under
+    these conditions, and telling the user how to view a copy of this
+    License.  (Exception: if the Program itself is interactive but
+    does not normally print such an announcement, your work based on
+    the Program is not required to print an announcement.)
+
+These requirements apply to the modified work as a whole.  If
+identifiable sections of that work are not derived from the Program,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works.  But when you
+distribute the same sections as part of a whole which is a work based
+on the Program, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Program.
+
+In addition, mere aggregation of another work not based on the Program
+with the Program (or with a work based on the Program) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+  3. You may copy and distribute the Program (or a work based on it,
+under Section 2) in object code or executable form under the terms of
+Sections 1 and 2 above provided that you also do one of the following:
+
+    a) Accompany it with the complete corresponding machine-readable
+    source code, which must be distributed under the terms of Sections
+    1 and 2 above on a medium customarily used for software interchange; or,
+
+    b) Accompany it with a written offer, valid for at least three
+    years, to give any third party, for a charge no more than your
+    cost of physically performing source distribution, a complete
+    machine-readable copy of the corresponding source code, to be
+    distributed under the terms of Sections 1 and 2 above on a medium
+    customarily used for software interchange; or,
+
+    c) Accompany it with the information you received as to the offer
+    to distribute corresponding source code.  (This alternative is
+    allowed only for noncommercial distribution and only if you
+    received the program in object code or executable form with such
+    an offer, in accord with Subsection b above.)
+
+The source code for a work means the preferred form of the work for
+making modifications to it.  For an executable work, complete source
+code means all the source code for all modules it contains, plus any
+associated interface definition files, plus the scripts used to
+control compilation and installation of the executable.  However, as a
+special exception, the source code distributed need not include
+anything that is normally distributed (in either source or binary
+form) with the major components (compiler, kernel, and so on) of the
+operating system on which the executable runs, unless that component
+itself accompanies the executable.
+
+If distribution of executable or object code is made by offering
+access to copy from a designated place, then offering equivalent
+access to copy the source code from the same place counts as
+distribution of the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+  4. You may not copy, modify, sublicense, or distribute the Program
+except as expressly provided under this License.  Any attempt
+otherwise to copy, modify, sublicense or distribute the Program is
+void, and will automatically terminate your rights under this License.
+However, parties who have received copies, or rights, from you under
+this License will not have their licenses terminated so long as such
+parties remain in full compliance.
+
+  5. You are not required to accept this License, since you have not
+signed it.  However, nothing else grants you permission to modify or
+distribute the Program or its derivative works.  These actions are
+prohibited by law if you do not accept this License.  Therefore, by
+modifying or distributing the Program (or any work based on the
+Program), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Program or works based on it.
+
+  6. Each time you redistribute the Program (or any work based on the
+Program), the recipient automatically receives a license from the
+original licensor to copy, distribute or modify the Program subject to
+these terms and conditions.  You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties to
+this License.
+
+  7. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License.  If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Program at all.  For example, if a patent
+license would not permit royalty-free redistribution of the Program by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Program.
+
+If any portion of this section is held invalid or unenforceable under
+any particular circumstance, the balance of the section is intended to
+apply and the section as a whole is intended to apply in other
+circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system, which is
+implemented by public license practices.  Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+
+  8. If the distribution and/or use of the Program is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Program under this License
+may add an explicit geographical distribution limitation excluding
+those countries, so that distribution is permitted only in or among
+countries not thus excluded.  In such case, this License incorporates
+the limitation as if written in the body of this License.
+
+  9. The Free Software Foundation may publish revised and/or new versions
+of the General Public License from time to time.  Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+Each version is given a distinguishing version number.  If the Program
+specifies a version number of this License which applies to it and "any
+later version", you have the option of following the terms and conditions
+either of that version or of any later version published by the Free
+Software Foundation.  If the Program does not specify a version number of
+this License, you may choose any version ever published by the Free Software
+Foundation.
+
+  10. If you wish to incorporate parts of the Program into other free
+programs whose distribution conditions are different, write to the author
+to ask for permission.  For software which is copyrighted by the Free
+Software Foundation, write to the Free Software Foundation; we sometimes
+make exceptions for this.  Our decision will be guided by the two goals
+of preserving the free status of all derivatives of our free software and
+of promoting the sharing and reuse of software generally.
+
+			    NO WARRANTY
+
+  11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
+FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW.  EXCEPT WHEN
+OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
+PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
+OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.  THE ENTIRE RISK AS
+TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU.  SHOULD THE
+PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
+REPAIR OR CORRECTION.
+
+  12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
+REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
+INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
+OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
+TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
+YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
+PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGES.
+
+		     END OF TERMS AND CONDITIONS
+
+
+Appendix B: The LGPL License
+============================
+
+		  GNU LESSER GENERAL PUBLIC LICENSE
+		       Version 2.1, February 1999
+
+ Copyright (C) 1991, 1999 Free Software Foundation, Inc.
+     59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+[This is the first released version of the Lesser GPL.  It also counts
+ as the successor of the GNU Library Public License, version 2, hence
+ the version number 2.1.]
+
+			    Preamble
+
+  The licenses for most software are designed to take away your
+freedom to share and change it.  By contrast, the GNU General Public
+Licenses are intended to guarantee your freedom to share and change
+free software--to make sure the software is free for all its users.
+
+  This license, the Lesser General Public License, applies to some
+specially designated software packages--typically libraries--of the
+Free Software Foundation and other authors who decide to use it.  You
+can use it too, but we suggest you first think carefully about whether
+this license or the ordinary General Public License is the better
+strategy to use in any particular case, based on the explanations below.
+
+  When we speak of free software, we are referring to freedom of use,
+not price.  Our General Public Licenses are designed to make sure that
+you have the freedom to distribute copies of free software (and charge
+for this service if you wish); that you receive source code or can get
+it if you want it; that you can change the software and use pieces of
+it in new free programs; and that you are informed that you can do
+these things.
+
+  To protect your rights, we need to make restrictions that forbid
+distributors to deny you these rights or to ask you to surrender these
+rights.  These restrictions translate to certain responsibilities for
+you if you distribute copies of the library or if you modify it.
+
+  For example, if you distribute copies of the library, whether gratis
+or for a fee, you must give the recipients all the rights that we gave
+you.  You must make sure that they, too, receive or can get the source
+code.  If you link other code with the library, you must provide
+complete object files to the recipients, so that they can relink them
+with the library after making changes to the library and recompiling
+it.  And you must show them these terms so they know their rights.
+
+  We protect your rights with a two-step method: (1) we copyright the
+library, and (2) we offer you this license, which gives you legal
+permission to copy, distribute and/or modify the library.
+
+  To protect each distributor, we want to make it very clear that
+there is no warranty for the free library.  Also, if the library is
+modified by someone else and passed on, the recipients should know
+that what they have is not the original version, so that the original
+author's reputation will not be affected by problems that might be
+introduced by others.
+
+  Finally, software patents pose a constant threat to the existence of
+any free program.  We wish to make sure that a company cannot
+effectively restrict the users of a free program by obtaining a
+restrictive license from a patent holder.  Therefore, we insist that
+any patent license obtained for a version of the library must be
+consistent with the full freedom of use specified in this license.
+
+  Most GNU software, including some libraries, is covered by the
+ordinary GNU General Public License.  This license, the GNU Lesser
+General Public License, applies to certain designated libraries, and
+is quite different from the ordinary General Public License.  We use
+this license for certain libraries in order to permit linking those
+libraries into non-free programs.
+
+  When a program is linked with a library, whether statically or using
+a shared library, the combination of the two is legally speaking a
+combined work, a derivative of the original library.  The ordinary
+General Public License therefore permits such linking only if the
+entire combination fits its criteria of freedom.  The Lesser General
+Public License permits more lax criteria for linking other code with
+the library.
+
+  We call this license the "Lesser" General Public License because it
+does Less to protect the user's freedom than the ordinary General
+Public License.  It also provides other free software developers Less
+of an advantage over competing non-free programs.  These disadvantages
+are the reason we use the ordinary General Public License for many
+libraries.  However, the Lesser license provides advantages in certain
+special circumstances.
+
+  For example, on rare occasions, there may be a special need to
+encourage the widest possible use of a certain library, so that it becomes
+a de-facto standard.  To achieve this, non-free programs must be
+allowed to use the library.  A more frequent case is that a free
+library does the same job as widely used non-free libraries.  In this
+case, there is little to gain by limiting the free library to free
+software only, so we use the Lesser General Public License.
+
+  In other cases, permission to use a particular library in non-free
+programs enables a greater number of people to use a large body of
+free software.  For example, permission to use the GNU C Library in
+non-free programs enables many more people to use the whole GNU
+operating system, as well as its variant, the GNU/Linux operating
+system.
+
+  Although the Lesser General Public License is Less protective of the
+users' freedom, it does ensure that the user of a program that is
+linked with the Library has the freedom and the wherewithal to run
+that program using a modified version of the Library.
+
+  The precise terms and conditions for copying, distribution and
+modification follow.  Pay close attention to the difference between a
+"work based on the library" and a "work that uses the library".  The
+former contains code derived from the library, whereas the latter must
+be combined with the library in order to run.
+
+		  GNU LESSER GENERAL PUBLIC LICENSE
+   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+  0. This License Agreement applies to any software library or other
+program which contains a notice placed by the copyright holder or
+other authorized party saying it may be distributed under the terms of
+this Lesser General Public License (also called "this License").
+Each licensee is addressed as "you".
+
+  A "library" means a collection of software functions and/or data
+prepared so as to be conveniently linked with application programs
+(which use some of those functions and data) to form executables.
+
+  The "Library", below, refers to any such software library or work
+which has been distributed under these terms.  A "work based on the
+Library" means either the Library or any derivative work under
+copyright law: that is to say, a work containing the Library or a
+portion of it, either verbatim or with modifications and/or translated
+straightforwardly into another language.  (Hereinafter, translation is
+included without limitation in the term "modification".)
+
+  "Source code" for a work means the preferred form of the work for
+making modifications to it.  For a library, complete source code means
+all the source code for all modules it contains, plus any associated
+interface definition files, plus the scripts used to control compilation
+and installation of the library.
+
+  Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope.  The act of
+running a program using the Library is not restricted, and output from
+such a program is covered only if its contents constitute a work based
+on the Library (independent of the use of the Library in a tool for
+writing it).  Whether that is true depends on what the Library does
+and what the program that uses the Library does.
+
+  1. You may copy and distribute verbatim copies of the Library's
+complete source code as you receive it, in any medium, provided that
+you conspicuously and appropriately publish on each copy an
+appropriate copyright notice and disclaimer of warranty; keep intact
+all the notices that refer to this License and to the absence of any
+warranty; and distribute a copy of this License along with the
+Library.
+
+  You may charge a fee for the physical act of transferring a copy,
+and you may at your option offer warranty protection in exchange for a
+fee.
+
+  2. You may modify your copy or copies of the Library or any portion
+of it, thus forming a work based on the Library, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+    a) The modified work must itself be a software library.
+
+    b) You must cause the files modified to carry prominent notices
+    stating that you changed the files and the date of any change.
+
+    c) You must cause the whole of the work to be licensed at no
+    charge to all third parties under the terms of this License.
+
+    d) If a facility in the modified Library refers to a function or a
+    table of data to be supplied by an application program that uses
+    the facility, other than as an argument passed when the facility
+    is invoked, then you must make a good faith effort to ensure that,
+    in the event an application does not supply such function or
+    table, the facility still operates, and performs whatever part of
+    its purpose remains meaningful.
+
+    (For example, a function in a library to compute square roots has
+    a purpose that is entirely well-defined independent of the
+    application.  Therefore, Subsection 2d requires that any
+    application-supplied function or table used by this function must
+    be optional: if the application does not supply it, the square
+    root function must still compute square roots.)
+
+These requirements apply to the modified work as a whole.  If
+identifiable sections of that work are not derived from the Library,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works.  But when you
+distribute the same sections as part of a whole which is a work based
+on the Library, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote
+it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Library.
+
+In addition, mere aggregation of another work not based on the Library
+with the Library (or with a work based on the Library) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+  3. You may opt to apply the terms of the ordinary GNU General Public
+License instead of this License to a given copy of the Library.  To do
+this, you must alter all the notices that refer to this License, so
+that they refer to the ordinary GNU General Public License, version 2,
+instead of to this License.  (If a newer version than version 2 of the
+ordinary GNU General Public License has appeared, then you can specify
+that version instead if you wish.)  Do not make any other change in
+these notices.
+
+  Once this change is made in a given copy, it is irreversible for
+that copy, so the ordinary GNU General Public License applies to all
+subsequent copies and derivative works made from that copy.
+
+  This option is useful when you wish to copy part of the code of
+the Library into a program that is not a library.
+
+  4. You may copy and distribute the Library (or a portion or
+derivative of it, under Section 2) in object code or executable form
+under the terms of Sections 1 and 2 above provided that you accompany
+it with the complete corresponding machine-readable source code, which
+must be distributed under the terms of Sections 1 and 2 above on a
+medium customarily used for software interchange.
+
+  If distribution of object code is made by offering access to copy
+from a designated place, then offering equivalent access to copy the
+source code from the same place satisfies the requirement to
+distribute the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+  5. A program that contains no derivative of any portion of the
+Library, but is designed to work with the Library by being compiled or
+linked with it, is called a "work that uses the Library".  Such a
+work, in isolation, is not a derivative work of the Library, and
+therefore falls outside the scope of this License.
+
+  However, linking a "work that uses the Library" with the Library
+creates an executable that is a derivative of the Library (because it
+contains portions of the Library), rather than a "work that uses the
+library".  The executable is therefore covered by this License.
+Section 6 states terms for distribution of such executables.
+
+  When a "work that uses the Library" uses material from a header file
+that is part of the Library, the object code for the work may be a
+derivative work of the Library even though the source code is not.
+Whether this is true is especially significant if the work can be
+linked without the Library, or if the work is itself a library.  The
+threshold for this to be true is not precisely defined by law.
+
+  If such an object file uses only numerical parameters, data
+structure layouts and accessors, and small macros and small inline
+functions (ten lines or less in length), then the use of the object
+file is unrestricted, regardless of whether it is legally a derivative
+work.  (Executables containing this object code plus portions of the
+Library will still fall under Section 6.)
+
+  Otherwise, if the work is a derivative of the Library, you may
+distribute the object code for the work under the terms of Section 6.
+Any executables containing that work also fall under Section 6,
+whether or not they are linked directly with the Library itself.
+
+  6. As an exception to the Sections above, you may also combine or
+link a "work that uses the Library" with the Library to produce a
+work containing portions of the Library, and distribute that work
+under terms of your choice, provided that the terms permit
+modification of the work for the customer's own use and reverse
+engineering for debugging such modifications.
+
+  You must give prominent notice with each copy of the work that the
+Library is used in it and that the Library and its use are covered by
+this License.  You must supply a copy of this License.  If the work
+during execution displays copyright notices, you must include the
+copyright notice for the Library among them, as well as a reference
+directing the user to the copy of this License.  Also, you must do one
+of these things:
+
+    a) Accompany the work with the complete corresponding
+    machine-readable source code for the Library including whatever
+    changes were used in the work (which must be distributed under
+    Sections 1 and 2 above); and, if the work is an executable linked
+    with the Library, with the complete machine-readable "work that
+    uses the Library", as object code and/or source code, so that the
+    user can modify the Library and then relink to produce a modified
+    executable containing the modified Library.  (It is understood
+    that the user who changes the contents of definitions files in the
+    Library will not necessarily be able to recompile the application
+    to use the modified definitions.)
+
+    b) Use a suitable shared library mechanism for linking with the
+    Library.  A suitable mechanism is one that (1) uses at run time a
+    copy of the library already present on the user's computer system,
+    rather than copying library functions into the executable, and (2)
+    will operate properly with a modified version of the library, if
+    the user installs one, as long as the modified version is
+    interface-compatible with the version that the work was made with.
+
+    c) Accompany the work with a written offer, valid for at
+    least three years, to give the same user the materials
+    specified in Subsection 6a, above, for a charge no more
+    than the cost of performing this distribution.
+
+    d) If distribution of the work is made by offering access to copy
+    from a designated place, offer equivalent access to copy the above
+    specified materials from the same place.
+
+    e) Verify that the user has already received a copy of these
+    materials or that you have already sent this user a copy.
+
+  For an executable, the required form of the "work that uses the
+Library" must include any data and utility programs needed for
+reproducing the executable from it.  However, as a special exception,
+the materials to be distributed need not include anything that is
+normally distributed (in either source or binary form) with the major
+components (compiler, kernel, and so on) of the operating system on
+which the executable runs, unless that component itself accompanies
+the executable.
+
+  It may happen that this requirement contradicts the license
+restrictions of other proprietary libraries that do not normally
+accompany the operating system.  Such a contradiction means you cannot
+use both them and the Library together in an executable that you
+distribute.
+
+  7. You may place library facilities that are a work based on the
+Library side-by-side in a single library together with other library
+facilities not covered by this License, and distribute such a combined
+library, provided that the separate distribution of the work based on
+the Library and of the other library facilities is otherwise
+permitted, and provided that you do these two things:
+
+    a) Accompany the combined library with a copy of the same work
+    based on the Library, uncombined with any other library
+    facilities.  This must be distributed under the terms of the
+    Sections above.
+
+    b) Give prominent notice with the combined library of the fact
+    that part of it is a work based on the Library, and explaining
+    where to find the accompanying uncombined form of the same work.
+
+  8. You may not copy, modify, sublicense, link with, or distribute
+the Library except as expressly provided under this License.  Any
+attempt otherwise to copy, modify, sublicense, link with, or
+distribute the Library is void, and will automatically terminate your
+rights under this License.  However, parties who have received copies,
+or rights, from you under this License will not have their licenses
+terminated so long as such parties remain in full compliance.
+
+  9. You are not required to accept this License, since you have not
+signed it.  However, nothing else grants you permission to modify or
+distribute the Library or its derivative works.  These actions are
+prohibited by law if you do not accept this License.  Therefore, by
+modifying or distributing the Library (or any work based on the
+Library), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Library or works based on it.
+
+  10. Each time you redistribute the Library (or any work based on the
+Library), the recipient automatically receives a license from the
+original licensor to copy, distribute, link with or modify the Library
+subject to these terms and conditions.  You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties with
+this License.
+
+  11. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License.  If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Library at all.  For example, if a patent
+license would not permit royalty-free redistribution of the Library by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Library.
+
+If any portion of this section is held invalid or unenforceable under any
+particular circumstance, the balance of the section is intended to apply,
+and the section as a whole is intended to apply in other circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system which is
+implemented by public license practices.  Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+
+  12. If the distribution and/or use of the Library is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Library under this License may add
+an explicit geographical distribution limitation excluding those countries,
+so that distribution is permitted only in or among countries not thus
+excluded.  In such case, this License incorporates the limitation as if
+written in the body of this License.
+
+  13. The Free Software Foundation may publish revised and/or new
+versions of the Lesser General Public License from time to time.
+Such new versions will be similar in spirit to the present version,
+but may differ in detail to address new problems or concerns.
+
+Each version is given a distinguishing version number.  If the Library
+specifies a version number of this License which applies to it and
+"any later version", you have the option of following the terms and
+conditions either of that version or of any later version published by
+the Free Software Foundation.  If the Library does not specify a
+license version number, you may choose any version ever published by
+the Free Software Foundation.
+
+  14. If you wish to incorporate parts of the Library into other free
+programs whose distribution conditions are incompatible with these,
+write to the author to ask for permission.  For software which is
+copyrighted by the Free Software Foundation, write to the Free
+Software Foundation; we sometimes make exceptions for this.  Our
+decision will be guided by the two goals of preserving the free status
+of all derivatives of our free software and of promoting the sharing
+and reuse of software generally.
+
+			    NO WARRANTY
+
+  15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO
+WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW.
+EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR
+OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY
+KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE
+LIBRARY IS WITH YOU.  SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME
+THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
+
+  16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
+WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY
+AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU
+FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR
+CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE
+LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING
+RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A
+FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF
+SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
+DAMAGES.
+
+		     END OF TERMS AND CONDITIONS
+
+
+Appendix C: The MPL License
+===========================
+
+                          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.]


Property changes on: announcement/trunk/src/main/webapp/fckeditor/license.txt
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/webapp/fckeditor/myconfig.js
===================================================================
--- announcement/trunk/src/main/webapp/fckeditor/myconfig.js	                        (rev 0)
+++ announcement/trunk/src/main/webapp/fckeditor/myconfig.js	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,17 @@
+FCKConfig.ToolbarSets["AnnouncementToolbar"] = [
+['Source'/*,'DocProps','-','Save','NewPage','Preview','-','Templates'*/],
+['Cut','Copy','Paste','PasteText','PasteWord','-','Print'/*,'SpellCheck'*/],
+['Undo','Redo','-','Find','Replace','-','SelectAll'/*,'RemoveFormat'*/],
+['Form','Checkbox','Radio','TextField','Textarea','Select','Button','ImageButton','HiddenField'],
+'/',
+['Bold','Italic','Underline','StrikeThrough','-','Subscript','Superscript'],
+['OrderedList','UnorderedList','-','Outdent','Indent','Blockquote'],
+['JustifyLeft','JustifyCenter','JustifyRight','JustifyFull'],
+['Link','Unlink','Anchor'],
+[/*'Image','Flash',*/'Table','Rule','Smiley','SpecialChar','PageBreak'],
+'/',
+['Style','FontFormat','FontName','FontSize'],
+['TextColor','BGColor'],
+['FitWindow','ShowBlocks'/*,'-','About'*/] // No comma for the last row.
+] ;
+


Property changes on: announcement/trunk/src/main/webapp/fckeditor/myconfig.js
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/webapp/view/edit/editContent.html
===================================================================
--- announcement/trunk/src/main/webapp/view/edit/editContent.html	                        (rev 0)
+++ announcement/trunk/src/main/webapp/view/edit/editContent.html	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,73 @@
+<?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">
+<html xmlns="http://www.w3.org/1999/xhtml" xmlns:te="http://www.seasar.org/teeda/extension">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+<link rel="stylesheet" type="text/css" href="../../css/global.css"/>
+</head>
+<body>
+<form id="editContentForm">
+<div class="message"><span id="allMessages" te:fatalClass="portlet-msg-error" te:errorClass="portlet-msg-error" te:warnClass="portlet-msg-alert" te:infoClass="portlet-msg-info"></span></div>
+<script id="fckeditorScript" type="text/javascript" src="/fckeditor/fckeditor.js"></script>
+<div class="announcementEdit">
+  <input id="id" type="hidden" />
+  <p class="announcementBlock">
+    <label id="titleInput" class="announcementLabel">Title:</label>
+    <input id="title" class="announcementField"/>
+  </p>
+  <div class="announcementSeparator"> </div>
+    <p class="announcementBlock">
+    <label id="releaseDateInput" class="announcementLabel">Release Date:</label>
+    <input id="startDate" class="announcementField" size="10"/>
+    -
+    <input id="endDate" class="announcementField" size="10"/>
+  </p>
+  <div class="announcementSeparator"> </div>
+  <p class="announcementBlock">
+    <label id="roleInput" class="announcementLabel">Role:</label>
+    <input id="role" class="announcementField"/>
+  </p>
+  <div class="announcementSeparator"> </div>
+  <textarea id="content" rows="10" cols="80"></textarea>
+  <br/>
+  <input id="doFinishSave" type="submit" value="Save"/>
+  <input id="doFinishCreateNew" type="submit" value="New"/>
+<span id="fckeditorContent" te:omittag="true" te:escape="false">
+<script type="text/javascript">
+<!--
+var FCKeditor = new FCKeditor("");
+FCKeditor.BasePath = "/fckeditor/";
+FCKeditor.ReplaceTextarea();
+//-->
+</script>
+</span>
+</div>
+<div class="announcementListSeparator"> </div>
+<div class="announcementList">
+<table class="announcementTable">
+  <thead class="announcementHead">
+    <tr class="announcementRow">
+      <th class="announcementTitleColumn"><label id="listTitle">Title</label></th>
+      <th class="announcementStartDateColumn"><label id="listStartDate">Start Date</label></th>
+      <th class="announcementEndDateColumn"><label id="listEndDate">End Date</label></th>
+      <th class="announcementRoleColumn"><label id="listRole">Role</label></th>
+      <th class="announcementActionColumn"><label id="listAction">Action</label></th>
+    </tr>
+  </thead>
+  <tbody id="announcementItems" class="announcementBody">
+    <tr class="announcementRow">
+      <td class="announcementTitleColumn"><span id="title-list">A</span></td>
+      <td class="announcementStartDateColumn"><span id="startDate-list">B</span></td>
+      <td class="announcementEndDateColumn"><span id="endDate-list">C</span></td>
+      <td class="announcementRoleColumn"><span id="role-list">D</span></td>
+      <td class="announcementActionColumn">
+        <a id="goEditContent-edit" href="editContent.html?id=1&amp;fixed_mode=edit"><span id="editLabel">Edit</span></a>
+        <a id="goEditContent-delete" href="editContent.html?id=1&amp;fixed_mode=delete"><span id="deleteLabel">Delete</span></a>
+      </td>
+    </tr>
+  </tbody>
+</table>
+</div>
+</form>
+</body>
+</html>


Property changes on: announcement/trunk/src/main/webapp/view/edit/editContent.html
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/webapp/view/error/error.html
===================================================================
--- announcement/trunk/src/main/webapp/view/error/error.html	                        (rev 0)
+++ announcement/trunk/src/main/webapp/view/error/error.html	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,13 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+<title>AppFacesException Error Page</title>
+</head>
+<body>
+<form id="errorForm">
+<div>
+<span id="allMessages" fatalClass="portlet-msg-error" errorClass="portlet-msg-error" warnClass="portlet-msg-alert" infoClass="portlet-msg-info"></span>
+</div>
+</form>
+</body>
+</html>
\ No newline at end of file


Property changes on: announcement/trunk/src/main/webapp/view/error/error.html
___________________________________________________________________
Name: svn:eol-style
   + native

Added: announcement/trunk/src/main/webapp/view/view/displayContent.html
===================================================================
--- announcement/trunk/src/main/webapp/view/view/displayContent.html	                        (rev 0)
+++ announcement/trunk/src/main/webapp/view/view/displayContent.html	2008-06-30 02:54:27 UTC (rev 1002)
@@ -0,0 +1,12 @@
+<?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">
+<html xmlns="http://www.w3.org/1999/xhtml" xmlns:te="http://www.seasar.org/teeda/extension">
+  <head>
+    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+    <link rel="stylesheet" type="text/css" href="../../css/global.css" />
+  </head>
+<body>
+<div class="message"><span id="allMessages" te:fatalClass="portlet-msg-error" te:errorClass="portlet-msg-error" te:warnClass="portlet-msg-alert" te:infoClass="portlet-msg-info"></span></div>
+<span id="content" te:escape="false"></span>
+</body>
+</html>


Property changes on: announcement/trunk/src/main/webapp/view/view/displayContent.html
___________________________________________________________________
Name: svn:eol-style
   + native


pal-cvs メーリングリストの案内
アーカイブの一覧に戻る