[Joomla-commits] r18741 - in development/branches/jcamp: installation installation/language/en-GB installation/language/en-US installation/models installation/sql/mysql language/en-GB language/xx-XX libraries/joomla libraries/joomla/application/component libraries/joomla/application/module libraries/joomla/cache libraries/joomla/cache/controller libraries/joomla/database libraries/joomla/database/database libraries/joomla/database/table libraries/joomla/document libraries/joomla/document/feed/renderer libraries/joomla/document/html libraries/joomla/environment libraries/joomla/filesystem libraries/joomla/form libraries/joomla/form/fields libraries/joomla/form/rules libraries/joomla/html libraries/joomla/html/html libraries/joomla/html/toolbar/button libraries/joomla/installer/adapters libraries/joomla/language libraries/joomla/mail libraries/joomla/utilities libraries/phpmailer libraries/phputf8 media/system/js modules/mod_footer modules/mod_random_image/tmpl plugins/content/emailcloak templates/beez5/css templates/beez5/html/com_content/archive templates/beez5/html/com_content/category templates/beez5/html/com_content/form templates/beez5/javascript templates/beez_20/css templates/beez_20/html/com_content/archive templates/beez_20/html/com_content/category templates/beez_20/html/com_content/form templates/beez_20/javascript templates/rhuk_milkyway/_html/com_contact/category templates/rhuk_milkyway/_html/com_content/article templates/rhuk_milkyway/_html/com_content/category templates/rhuk_milkyway/_html/com_newsfeeds/category templates/rhuk_milkyway/_html/com_weblinks/category tests tests/system tests/system/suite tests/system/suite/control_panel tests/system/suite/language tests/unit/suite/libraries/joomla/database tests/unit/suite/libraries/joomla/document/feed/renderer tests/unit/suite/libraries/joomla/form/fields tests/unit/suite/libraries/joomla/form/rules tests/unit/suite/libraries/joomla/html tests/unit/suite/libraries/joomla/installer tests/unit/suite/libraries/joomla/language tests/unit/suite/libraries/! joomla/mail tests/unit/suite/libraries/joomla/user tests/unit/suite/libraries/joomla/utilities

0 views
Skip to first unread message

3den...@jcode001.directrouter.com

unread,
Aug 31, 2010, 3:24:29 PM8/31/10
to joomla-...@joomlacode.org
Author: 3dentech
Date: 2010-08-31 14:24:28 -0500 (Tue, 31 Aug 2010)
New Revision: 18741

Modified:
development/branches/jcamp/installation/CHANGELOG
development/branches/jcamp/installation/configuration.php-dist
development/branches/jcamp/installation/language/en-GB/en-GB.ini
development/branches/jcamp/installation/language/en-US/en-US.ini
development/branches/jcamp/installation/models/configuration.php
development/branches/jcamp/installation/sql/mysql/joomla.sql
development/branches/jcamp/installation/sql/mysql/sample_data.sql
development/branches/jcamp/language/en-GB/en-GB.com_contact.ini
development/branches/jcamp/language/en-GB/en-GB.com_content.ini
development/branches/jcamp/language/en-GB/en-GB.com_mailto.ini
development/branches/jcamp/language/en-GB/en-GB.com_newsfeeds.ini
development/branches/jcamp/language/en-GB/en-GB.com_users.ini
development/branches/jcamp/language/en-GB/en-GB.com_weblinks.ini
development/branches/jcamp/language/en-GB/en-GB.ini
development/branches/jcamp/language/en-GB/en-GB.localise.php
development/branches/jcamp/language/xx-XX/xx-XX.com_contact.ini
development/branches/jcamp/language/xx-XX/xx-XX.com_content.ini
development/branches/jcamp/language/xx-XX/xx-XX.com_mailto.ini
development/branches/jcamp/language/xx-XX/xx-XX.com_newsfeeds.ini
development/branches/jcamp/language/xx-XX/xx-XX.com_users.ini
development/branches/jcamp/language/xx-XX/xx-XX.com_weblinks.ini
development/branches/jcamp/language/xx-XX/xx-XX.ini
development/branches/jcamp/language/xx-XX/xx-XX.localise.php
development/branches/jcamp/libraries/joomla/application/component/modeladmin.php
development/branches/jcamp/libraries/joomla/application/module/helper.php
development/branches/jcamp/libraries/joomla/cache/controller.php
development/branches/jcamp/libraries/joomla/cache/controller/callback.php
development/branches/jcamp/libraries/joomla/database/database/mysql.php
development/branches/jcamp/libraries/joomla/database/database/mysqli.php
development/branches/jcamp/libraries/joomla/database/table/usergroup.php
development/branches/jcamp/libraries/joomla/database/tablenested.php
development/branches/jcamp/libraries/joomla/document/document.php
development/branches/jcamp/libraries/joomla/document/feed/renderer/atom.php
development/branches/jcamp/libraries/joomla/document/feed/renderer/rss.php
development/branches/jcamp/libraries/joomla/document/html/html.php
development/branches/jcamp/libraries/joomla/environment/response.php
development/branches/jcamp/libraries/joomla/factory.php
development/branches/jcamp/libraries/joomla/filesystem/path.php
development/branches/jcamp/libraries/joomla/form/fields/groupedlist.php
development/branches/jcamp/libraries/joomla/form/formfield.php
development/branches/jcamp/libraries/joomla/form/rules/email.php
development/branches/jcamp/libraries/joomla/html/html.php
development/branches/jcamp/libraries/joomla/html/html/rules.php
development/branches/jcamp/libraries/joomla/html/html/string.php
development/branches/jcamp/libraries/joomla/html/toolbar/button/link.php
development/branches/jcamp/libraries/joomla/installer/adapters/module.php
development/branches/jcamp/libraries/joomla/language/language.php
development/branches/jcamp/libraries/joomla/mail/helper.php
development/branches/jcamp/libraries/joomla/mail/mail.php
development/branches/jcamp/libraries/joomla/methods.php
development/branches/jcamp/libraries/joomla/utilities/string.php
development/branches/jcamp/libraries/joomla/utilities/utility.php
development/branches/jcamp/libraries/joomla/version.php
development/branches/jcamp/libraries/phpmailer/phpmailer.php
development/branches/jcamp/libraries/phpmailer/smtp.php
development/branches/jcamp/libraries/phputf8/stristr.php
development/branches/jcamp/media/system/js/mootools-more-uncompressed.js
development/branches/jcamp/media/system/js/mootools-more.js
development/branches/jcamp/media/system/js/validate.js
development/branches/jcamp/modules/mod_footer/mod_footer.php
development/branches/jcamp/modules/mod_random_image/tmpl/default.php
development/branches/jcamp/plugins/content/emailcloak/emailcloak.php
development/branches/jcamp/templates/beez5/css/layout.css
development/branches/jcamp/templates/beez5/html/com_content/archive/default_items.php
development/branches/jcamp/templates/beez5/html/com_content/category/blog_children.php
development/branches/jcamp/templates/beez5/html/com_content/category/default_articles.php
development/branches/jcamp/templates/beez5/html/com_content/category/default_children.php
development/branches/jcamp/templates/beez5/html/com_content/form/edit.php
development/branches/jcamp/templates/beez5/javascript/md_stylechanger.js
development/branches/jcamp/templates/beez_20/css/layout.css
development/branches/jcamp/templates/beez_20/html/com_content/archive/default_items.php
development/branches/jcamp/templates/beez_20/html/com_content/category/blog_children.php
development/branches/jcamp/templates/beez_20/html/com_content/category/default_articles.php
development/branches/jcamp/templates/beez_20/html/com_content/category/default_children.php
development/branches/jcamp/templates/beez_20/html/com_content/form/edit.php
development/branches/jcamp/templates/beez_20/javascript/md_stylechanger.js
development/branches/jcamp/templates/rhuk_milkyway/_html/com_contact/category/default.php
development/branches/jcamp/templates/rhuk_milkyway/_html/com_content/article/form.php
development/branches/jcamp/templates/rhuk_milkyway/_html/com_content/category/default_items.php
development/branches/jcamp/templates/rhuk_milkyway/_html/com_newsfeeds/category/default_items.php
development/branches/jcamp/templates/rhuk_milkyway/_html/com_weblinks/category/default_items.php
development/branches/jcamp/tests/CHANGELOG
development/branches/jcamp/tests/system/SeleniumJoomlaTestCase.php
development/branches/jcamp/tests/system/resetdb.sql
development/branches/jcamp/tests/system/suite/TestSuite.php
development/branches/jcamp/tests/system/suite/control_panel/control_panel0004Test.php
development/branches/jcamp/tests/system/suite/language/language0001Test.php
development/branches/jcamp/tests/unit/suite/libraries/joomla/database/JTableNestedTest.php
development/branches/jcamp/tests/unit/suite/libraries/joomla/document/feed/renderer/JDocumentRendererRSSTest.php
development/branches/jcamp/tests/unit/suite/libraries/joomla/form/fields/JFormFieldCalendarTest.php
development/branches/jcamp/tests/unit/suite/libraries/joomla/form/rules/JFormRuleEmailTest.php
development/branches/jcamp/tests/unit/suite/libraries/joomla/html/JHtmlTest.php
development/branches/jcamp/tests/unit/suite/libraries/joomla/installer/JInstallerTest.php
development/branches/jcamp/tests/unit/suite/libraries/joomla/language/JLanguageTest.php
development/branches/jcamp/tests/unit/suite/libraries/joomla/mail/JMailTest.php
development/branches/jcamp/tests/unit/suite/libraries/joomla/user/JUserHelperTest.php
development/branches/jcamp/tests/unit/suite/libraries/joomla/user/JUserTest.php
development/branches/jcamp/tests/unit/suite/libraries/joomla/utilities/JSimpleCryptTest.php
Log:


Modified: development/branches/jcamp/installation/CHANGELOG
===================================================================
--- development/branches/jcamp/installation/CHANGELOG 2010-08-31 19:21:09 UTC (rev 18740)
+++ development/branches/jcamp/installation/CHANGELOG 2010-08-31 19:24:28 UTC (rev 18741)
@@ -27,15 +27,179 @@
- -> Removed
! -> Note

+31-Aug-2010 Jean-Marie Simonet
+ # [#22150] hathor menu type - unable to select type. Thanks Bill.
+ # [#22161] edit article - show icons and + param missing
+ # [#21932] checkall-toggle does not work with Hathor template on User Manager: Users screen. Thanks Andrea.
+ # [#20920] Featured Button Missing on Front End Article Submission. Thanks Hannes.
+ $ Reordered front-end en-GB.ini strings
+ $ Modified publish/unpublish to enable/disable in Extension Manager->Manage toolbars
+ $ [#22156] edit weblink - order description missing. Thanks Bill.
+ $ [#22152] permissions edit terms inconsistency. Thanks Bill.
+
+30-Aug-2010 Jean-Marie Simonet
+ # [#22050] useful joomla links menu. Thanks Bill.
+ # [#22046] cannot unblock users. Thanks Michael and Dennis.
+
+30-Aug-2010 Andrew Eddie
+ # Fixed issue [#21952] JButtonLink does not set toolbar id correctly (Daniel Reibelt, Hannes Papenberg).
+ # Fixed issue [#21868] 500 bad query error on saving a template style not assigned to anything (Elin Waring).
+ # Fixed issue [#20468] Featured Articles editing returns to articles pages (Greg Daynes, Hannes Papenberg).
+ # Fixed issue [#21999] Error on creating a group with an existing name (Elin Waring).
+ # Fixed issue [#22102] E-mail field in contact editing does not validate (Roland Dalmulder).
+
+29-Aug-2010 Jean-Marie Simonet
+ # [#22023] Enlarge inputbox for article title on modal select.
+ # [#22104] hathor col fix. Thanks Bill.
+
+28-Aug-2010 Mark Dexter
+ # [#17689] Menu Creation - "Contained in Menu" set to main menu
+ # [#21819] Cannot save editted article using frontend with cache enabled
+
+28-Aug-2010 Jean-Marie Simonet
+ # [#22048] manager column order inconsistency. Thanks Bill.
+ # [#21891] Refactoring Article Options. Thanks Bill.
+
+27-Aug-2010 Mark Dexter
+ # Revert issue [#17689] Menu Creation - "Contained in Menu" set to main menu
+
+27-Aug-2010 Jean-Marie Simonet
+ # [#22020] Move Template Positions Parameter tp=1 into Template Options from Global Configuration. Thanks Amy, Hannes, Michael.
+ $ [#22084] Publishing Options Language changes and inconsistencies. Thanks Bill.
+
+27-Aug-2010 Andrew Eddie
+ # Fixed issue [#17689] Menu Creation - "Contained in Menu" set to main menu (Christopher Garvis, Ian MacLennan, Mark Dexter).
+ # Fixed issue [#22088] Cannot change default language in Language Manager: Installed Languages view (Michael Babker).
+ # Fixed issue [#22054] extra tip in contact form (Brian Teeman, Bill Richardson).
+ # Fixed issue [#22043] Manager layout consistency (Brian Teeman, Bill Richardson).
+ # Fixed issue [#22055] Email or e-mail inconsistency (Brian Teeman, Bill Richardson).
+ # Fixed issue [#20847] Remove _self in mod_random_image (Amy Stephen, Rouven Weßling).
+ # Fixed issue [#9627] Installation of admin e-mail with plus symbol not validating (Richard Vazquez, Hannes Papenberg, Christophe Demko, Ian MacLennan).
+ # Fixed issue [#21924] form element "hidden" not entirely hidden (Boris Baddenoff, Bill Richardson).
+
+27-Aug-2010 Sam Moffatt
+ # Fixed issue with com_admin XML manifest file (excessive new line)
+ + Added joomla.xml file for future updates and tracking
+
+26-Aug-2010 Ian MacLennan
+ # [!21949] Reverted systematic elimination of DS as directory separator
+
+26-Aug-2010 Jean-Marie Simonet
+ # [#22044] Menu level filter wording. Thanks Bill.
+ # [#22056] incomplete language strings in admin contact. Thanks Bill.
+ # [#21888] Forbidden keys in language files not properly handled. Thanks Nikolai, Hannes, Andrew.
+
+26-Aug-2010 Andrew Eddie
+ # Fixed issue [#22064] Non-functional, unfinished, duplicated and outdated form field: mediamanager (Artyom Bisyarin).
+ # Fixed issue [#21977] Warning: Invalid argument supplied for foreach() in \libraries\joomla\document\html\html.php on line 161 (Ronald Pijpers, Bill Richardson).
+ # Fixed issue [#21717] Create action in installer permissions configuration (Sander Potjer, Michael Babker).
+ # Fixed issue [#22060] Banners Options refactoring- Code missing (Jean-Marie Simonet).
+ # Fixed issue [#22063] Select with optgroup not works in admin component form (Tomasz Narloch, Bill Richardson).
+ # Fixed issue [#22045] block users error message (Brian Teeman, Bill Richardson, Michael Babker).
+ # Fixed issue [#22079] Installer item types hard coded (Samuel Moffatt).
+ # Fixed issue [#22078] Install Data update for extension update (Samuel Moffatt).
+
+25-Aug-2010 Andrew Eddie
+ # Fixed issue [#22032] Category editing gives error on saving/canceling (Roland Dalmulder).
+ # Fixed issue [#21976] deprecated function ereg_replace mod_footer (Ronald Pijpers, Bill Richardson).
+ # Fixed issue [#18506] Category Manager / Edit Category: Edit Groups + Reset to Inherit links do not work (Andy Tasch, Bill Richardson).
+ # Fixed issue [#21132] User Registration Duplicate Page Headings (Amy Stephen, Bill Richardson).
+
+-------------------- 1.6.0 Beta8 Release [23-Aug-2010] ------------------
+
+23-Aug-2010 Ian MacLennan
+ # [#21251] Hathor RTL CSS fixes
+ # [#21449] Add ACL Create, Edit, & Edit State checks to Menu Manager
+ # [#21540] pre-check=0, post-check=0 should not be added to Cache-Control HTTP header
+ # [#21561] Display/Function of ordering arrows when sorted in descending order
+ # [#21588] Readonly calendar field pops up
+ # [#21613] Add an id of the same value for every form that only has a name
+ # [#21614] Make administrator login work with the XML serialization and bring the form closer to XHTML strict
+ # [#21767] Make pagebreak well formed
+ # [#21795] Articles - Newsflash and Banners: Invalid argument
+ # [#21817] JDocumentHTML::mergeHeadData() inappropriate use of array_unique
+ # [#21833] Point in time to render the submenu of components
+ # [#21838] TODO Raise error for missing category or parent category
+ # [#21866] Notice in template style save method
+ # [#21899] Bug in utf8_stristr()
+ # [#21962] Add display of missing edit icons
+ # [#21967] Language files are not loaded for a 3pd extension in com_categories if a 'section' is specified
+ # [#21986] Use atom:link on rss feeds to identify the feeds url
+ # [#22010] Apply 22005 changes to Hathor com_categories override
+
+23-Aug-2010 Mark Dexter
+ # Sample Data fixes (Elin Waring)
+
+23-Aug-2010 Andrew Eddie
+ # Fixed issue [#21721] ACL settings not working on language manager (Sander Potjer, Michael Babker).
+
+22-Aug-2010 Mark Dexter
+ # [#22005] Regression on categories ordering (broken with #21980)
+ # [#21441] Error ordering items
+
+22-Aug-2010 Ian MacLennan
+ # [#21980] Clean up ACL back end for people with create and not edit and edit and not create
+
+22-Aug-2010 Jean-Marie Simonet
+ # [#21659] Beez 2 template (default) restless. Thanks Rouven
+ $ [#21973] Inconsistant labels for dropdown lists in Template Manager. Normalizing string. Creating new JGlobal
+ # [#21981] Add ability to display all modules for both site and admin to Module Manager. Thanks Michael
+ $ [#21984] Template Manager: Templates Language String Fix. Thanks Michael.
+ # [#21989] Filters - correct position. Thanks Bill.
+ # [#21983] Reverse filter order in Template Manager: Styles on Hathor Template. Thanks Michael.
+ $ Normalizing some string.
+ # [#21941] Full Path Disclosure. Thanks all.
+
+21-Aug-2010 Ian MacLennan
+ # [#21949] Systematic elimination of DS as directory separator
+
+21-Aug-2010 Jean-Marie Simonet
+ # [#21964] Help menu item visible in edit mode if hidden in module settings. Thanks Sander and Bill.
+ # [#21921] coding remnant left in module.php. Thanks Troy.
+ # [#21915] SEF URL Defaults. Thanks Amy.
+ # [#21861] Incorrect plural of "suffix" in method names. Thanks Chris.
+ # [#21737] Password reset tokens stored plaintext in the database. Thanks Ian.
+ # [#21971] Backend Cache Settings Tooltip Typo. Thanks Rouven.
+ # [#21969] Space for label User Name on login page (+ module). Thanks Marijke.
+ # [#21968] dot after reset token. Thanks Marijke.
+ $ Typos/redundancies in some lang strings.
+
+20-Aug-2010 Ian MacLennan
+ # [#21951] Action URLs missing in half of the backend forms
+ # [#21953] Registration form can be displayed and submitted if registration is disabled
+ # [#19223] MySQL strict mode incompatibility
+ # [#20343] Update phpmailer to v5.1 (latest version) for php5
+ # [#21462] Sample Data Typo
+ # [#21474] UTF8 trim lib throws warning if char list is empty
+ # [#21580] E_STRICT error in JCacheCallback due to JHtmlString::truncate() being non-static
+
+20-Aug-2010 Mark Dexter
+ # [#21774] patch for failing system tests [cache related]
+
+20-Aug-2010 Jean-Marie Simonet
+ # [#21947] Banner Client Editing missing Save & New icon and text. Thanks Roland
+ #$ Wrong key in Hathor.
+ # [#21912] Inconsistencies with submenus in Bluestork admin menus. Thanks Klas.
+ # [#21872] Categories overview & Menu items indentations. Thanks Michael.
+ # [#21906] SMTP without authentication not working. Thanks Roland and Ian.
+ # [#21954] Registration form data gets lost if save fails. Thanks Nikolai
+
+19-Aug-2010 Jean-Marie Simonet
+ # [#21929] Language String Error. Thanks Prasit
+ # [#21913] Banner ad component issues. Thanks Prasit
+
+18-Aug-2010 Jean-Marie Simonet
+ ^# [#21917] Mootools more needs updating to 1.2.4.4. Thanks Matt.
+
17-Aug-2010 Jean-Marie Simonet
[#21812] contact form not sending email. Thanks Joseph.
-
+
17-Aug-2010 Andrew Eddie
# Fixed issue [#21380] session timeout while editing template style in backend, keepalive issue (Elin Waring, Michael Babker).

16-Aug-2010 Jean-Marie Simonet
$ Customizing a global string in weblinks, newsfeeds, contacts
-
+
16-Aug-2010 Mark Dexter
# Reverted [#21558] since it breaks JDateTest unit tests
# [#21558] Feed datetime formats are invalid (with updated unit test)
@@ -60,14 +224,14 @@

15-Aug-2010 Mark Dexter
# [#21558] Feed datetime formats are invalid
- # [#21756] Notices when a contact is unpublished but linked
+ # [#21756] Notices when a contact is unpublished but linked

15-Aug-2010 Jean-Marie Simonet
# [#21832] Submenu renders <a>-tag without link. Thanks Hannes.
# [#21834] Featured contact only showing items from the root category and ignoring state. Thanks Elin.
$ Correcting a string value.
# [#21856] Unpublished items showing in weblinks and news feed category views. Thanks Elin.
-
+
13-Aug-2010 Mark Dexter
# Sample data fixes (spelling errors and rebuild #__menus)
# Oops! Fixed syntax error in sample_data.sql.
@@ -116,13 +280,13 @@

08-Aug-2010 Ron Severdia
# Cleaned up Atomic template (ready to go once sample data is committed).
-
+
07-Aug-2010 Jean-Marie Simonet
# [#21750] Default module position
# [#21744] Implementing drill-down options for weblinks and newsfeeds categorieS menu items
# [#21749] IE7 patches to the Options modal. Thanks Andrea.
# [#21628] unpublish core extensions. Thanks Mark
-
+
06-Aug-2010 Ian MacLennan
# [#21598] Unable to logout ( front end ) if cache enabled
# [#21630] Dropdown order in plug in manager
@@ -143,7 +307,7 @@

04-Aug-2010 Jean-Marie Simonet
[#21662] Single contact view not treating category access issue correctly. Thanks Elin.
-
+
04-Aug-2010 Andrew Eddie
# Fixed issue [#21536] admin/com_users: report view. Is this being used or worked on?
# Fixed issue [#20899] Changing 'Home' to a 'External Link' or 'Menu Item Alias' causes '404 Component Not Found' error on homepage (Zach Garner, Tim Plummer, Christophe, Michael Babker).
@@ -156,7 +320,7 @@
# [#21706] Modifying [#21159] to let cat have the same name/alias when not in same tree when save&copy
#$ [#21712] Weblinks /menu-items params correction. Thanks Bill.
# [#21694] Beez Templates xml files reference to language folder
-
+
03-Aug-2010 Andrew Eddie
# Fixed issue [#21346] Error in loading order of JS scripts in components (g p).
# Fixed issue [#21704] *Re-enabling Published state per default when creating new items (Jean-Marie Simonet).
@@ -170,20 +334,20 @@
^ Fixed CSS ordering for BlueStork (table styles out of place)
^ Separated out IE7 & IE8 CSS files (BlueStork)
^ Fixed module positions, chrome & overrides for Atomic
-
+
01-Aug-2010 Jean-Marie Simonet
# [#21646] Text fields do not accept html tags
$ [#21636] home menu error string. Thanks Bill.
# [#21673] Patch committed (17913) without placing the image in the right folder
-
+
31-Jul-2010 Ian MacLennan
# [#21588] Reverting commit that broke unit tests.
-
+
31-Jul-2010 Jean-Marie Simonet
# [#21653] Mod_login redirections
# [#21576] Missing code when mod_rewrite is off. Thanks Cherif
$ Correcting mod_login string value.
-
+
30-Jul-2010 Louis Landry
# [#21576] Language switcher don't affect document language - sef routing issue

@@ -191,7 +355,7 @@
# [#21588] Readonly calendar field pops up. Thanks Roland
# [#20628] Titles of hidden fields are shown in module edit page, menu edit page, article edit page. Thanks Artyom.
$ Correcting some inis. Deleted redundant one.
-
+
29-Jul-2010 Mark Dexter
# Remove trashed category from sample data

@@ -284,10 +448,10 @@
# [#21517] modSearchHelper's methods should be public static (Franklin Tse).
# [#20879] missing functionality Save and New (Rob Joyce, Joseph LeBlanc).
# [#21515] ContentHelperQuery's methods should be public static (Franklin Tse).
-
+
21-Jul-2010 Jean-Marie Simonet
$ Changing all occurences of :: to : : in strings' values to avoid breaking tooltips
-
+
21-Jul-2010 Andrew Eddie
# [#21430] User Manager - Blank page if new password and confirmation do not match (Al Kent).
# [#21451] Article field "xreference" available in views in 1.5 but missing in 1.6 (Andrea Tarr).
@@ -318,25 +482,25 @@
# [#21357] Newsfeed categories - routing error with sef enabled. Thanks Mathavan.
$ Deleting useless JText in grid
# [#21437] Rename garbagecron.php to .txt.
-
+
16-Jul-2010 Andrew Eddie
# [#20929] CategoriesControllerCategories Improvements (Omar Ramos).
# Partial [#20933] Banner, Contact, Newsfeed, and Weblink Controller Improvements (Omar Ramos).
# [#21337] Framework: JControllerForm does not preserve form data on validation error (Anders Knutsson, Bill Richardson).

15-Jul-2010 Jean-Marie Simonet
- # [#21422] Content Category metadata not displayed
+ # [#21422] Content Category metadata not displayed
# [#21423] Enabling metadata for newsfeed, contacts, weblinks category
# [#21417] Extra < in <script... tag
# [#21426] Enabling metadata for single contact
-
+
14-Jul-2010 Jean-Marie Simonet
# [#21398] [Hathor] saveOrder should be $saveOrder. Thanks Viet.
# [#21342] JDocumentRendererHead can generate empty meta description. Thanks Janich.
# [#21374] Updates to Hathor that were not done when core was updated. Thanks Andrea and Michael.
# [#21329] com_modules save-as-new with wrong icon
$ [#21412] Untranslated strings: Default captions for JHtmlSelect::booleanlist. Thanks CY Lee
- # [#21401] Template beez20 Layout.css issue
+ # [#21401] Template beez20 Layout.css issue
# [#21415] Restoring deleted title in Hathor. Thanks Michael.

14-Jul-2010 Mark Dexter
@@ -351,7 +515,7 @@
# [#21382] Fallback template is rhuk_milkyway, not beez_20, and doesn't load properly.
# [#21371] Restore 1.5 ability for multiple categories for Latest Articles Module. Thanks Amy
# [#21215] Consistency in module layouts. Thanks Bill.
-
+
13-Jul-2010 Mark Dexter
# [#21083] Category List menu link to unpublished category gives error

@@ -382,10 +546,10 @@
# [#21373] Restore 1.5 ability for multiple categories for Most Read Content. Thanks Amy.
# [#21372] Restore 1.5 ability for multiple categories for Module Article Newsflash. Thanks Amy.
$ Consolidated some strings
-
+
11-Jul-2010 Chris Davenport
# Follow up to [#21311] - add missing key references for 3 menu items
-
+
11-Jul-2010 Mark Dexter
# Sample data fixes to assets table to clean up misc. acl issues (Elin Waring)
# [#21311] Context Sensitive Help Problem
@@ -413,11 +577,11 @@
# [#21330] Com_contact Patch. Thanks Angie.
^ [#21266] Clean up code for removal of Uncategorised content
# [#21333] com_languages views with wrong id on filter
-
+
07-Jul-2010 Jean-Marie Simonet
$ [#21313] String in Banner.ini. Thanks Joseph.
#$ [#21325] Ordering parameter in frontend edit doesn't make sense
-
+
06-Jul-2010 Andrew Eddie
# [#20926] Fields in jos_user_profile not removed when user is deleted (Boris Baddenoff, Omar Ramos).

@@ -441,13 +605,13 @@
# [#20796] Joomla! caches ALL HTML in 1 file. Thanks Klas.
# [#21285] Missing "State" filter for page Extension Manager: Manage
$ Correcting some ini/keys
-
+
02-Jul-2010 Jean-Marie Simonet
# [#21284] Language sorting by id broken
# [#20836] Missing icon in Messages toolbar (missing from original patch)
$ [#21279] COM_USERS_GROUPS_NO_ITEM_SELECTED and others similar message undefined
$ Adding missing string.
-
+
02-Jul-2010 Mark Dexter
# [#20634] Typo from earlier patch.

@@ -505,7 +669,7 @@
# [#21233] New Category Image Window Not 100%. Thanks Bill.
$ Creating keys/strings for Authentification plugins errors.
# [#21229] Article titles not displayed in category list. Thanks Elin.
-
+
-------------------- 1.6.0 Beta4 Release [28-Jun-2010] ------------------

28-Jun-2010 Ian MacLennan
@@ -537,7 +701,7 @@
27-Jun-2010 Mark Dexter
# [#20372] components options (IE 8 test)
# [#20793] FTP installation features not working as expected
- # Fix checkall toggle bug in User Manager caused by [#20372]
+ # Fix checkall toggle bug in User Manager caused by [#20372]
# [#20862] Show Profile in contact not working
# Sample data fixes for contact (Elin Waring)
# [#20937] non validated fields when creating banners
@@ -572,7 +736,7 @@
23-Jun-2010 Andrew Eddie
# Fixed issue [#20617] installer doesn't allow . in database name (Rob Joyce, Troy Hall).
# Partial fixes to [#20907] Making Joomla more compliant to PHP strict standard.
-
+
22-Jun-2010 Ian MacLennan
# [#21129] JHtml::_('behavior.keepalive'); Does not work (Phil Snell)

@@ -583,7 +747,7 @@
# Fixed issue [#20971] Add getCaching method (Klas Berlič1).
# Fixed issue [#20993] Token key word is not user friendly (Troy Hall).
# Fixed issue [#20401] [PATCH] JError::handleDie() does not cause application termination in CLI-program (Artyom Bisyarin).
-
+
21-Jun-2010 Mark Dexter
# Beez template fixes (Angie Radtke)

@@ -637,14 +801,14 @@
# [#21049] frontpage editor image upload string error (Thanks Bill)
$ Adding strings in com_media.ini frontend
# [#21062] admin com_media language file is loaded in frontend. Thanks Christophe. + some missing strings .
-
+
17-Jun-2010 Jean-Marie Simonet
# [#21019] Language field moved in a not visible position Thanks Airton.
# [#21041] Adjust JModelList list.start accordingly. Thanks Sven

17-Jun-2010 Christophe Demko
# Correcting a small issue in JHtml::_includeRelativeFiles
-
+
16-Jun-2010 Christophe Demko
# Fixed issue [#20941] incorrect selection after creating user account (Rune Sjøen)
^ Reformatting docblock comments
@@ -663,7 +827,7 @@
15-Jun-2010 Jean-Marie Simonet
$# Correcting a key/string
# [#20944] Cannot create new user - IE8. Thanks Christophe.
- #$ [#21018] Adding lang field in submit weblink.
+ #$ [#21018] Adding lang field in submit weblink.
#+[#21006] Error in modal css template. Thanks Christophe

15-Jun-2010 Christophe Demko
@@ -712,7 +876,7 @@
# Fixed category header (Thanks Babs Gosgens)
^ Fixed weblinks header icon (Thanks Tim Plummer)
^ Move language dropdown to panel (Thanks Tim Plummer)
- ^ [#20618] Fixed IE login bug
+ ^ [#20618] Fixed IE login bug
# Fixed modal widths (contents still need love)
# [#20640] Fixed favicon MIME type (Thanks Rouven Wesling)
^ Changed order icon to bg CSS and added inactive state
@@ -800,7 +964,7 @@
# [#20887] Creating account from front-end does not use default group. Thanks Rune
$ Modified string
# [#20885] non localized field deleting trash in banners Tracks. Thanks Bill.
-
+
07-Jun-2010 Christophe Demko
# Fixed issue [#20873] modules are'nt displayed in admin when using the root_user feature
# Fixed issue [#20870] Security issue concerning the root_user feature
@@ -815,20 +979,20 @@

06-Jun-2010 Jean-Marie Simonet
# [#20853] Sorting by author in Category list. Thanks Phil.
- # [#20861] plg_user_joomla missing language declaration in manifest.
+ # [#20861] plg_user_joomla missing language declaration in manifest.
# [#20858] Administrator Editor Media Dialog modal-box height requires scrolling Thansk Bill.and Ofer.
# [#20843] wrong constant specified for error message in controllerform.php - missing language key. Thanks Bill and Nikolai. + some
# [#20864] Missing cache language strings, cache_lite detection bug [patch]. Thanks Klas. WIP: do sesssion.
# [#20754] missing language string
# [#19430] Cannot change ordering of items (in fact string typo)
-
+
05-Jun-2010 Jean-Marie Simonet
# [#20846] Corrected strings for contact creator. Thanks Elin.
# [#20815] When a contact is created automatically via contact creator plugin. Thanks Radek and Phil.
#$ Corrected wrong sprintf
# [#20484] Requested for joomla.json download after uploading image. Thanks John.
# [#20321] Email functions not working properly. Partly fixed only.
-
+
04-Jun-2010 Jean-Marie Simonet
# [#20768] It is possible to create a single-contact menu entry without selecting a contact. Thanks Artyom and Phil.
$ Added missing string
@@ -856,7 +1020,7 @@
# [#20677] duplicate key error. Thanks Nicholas.
# [#20506] Field required: cache_handler - message in Global Config. Thanks Christophe and Klas
# [#20809] Unable to run installation in IE8. Thanks Ian
-
+
02-Jun-2010 Andrew Eddie
# Fixed issue [#20771] validate.js causing problems with IE8 (Bill Richardson, Phil Snell).
# Fixed issue [#20788] Error when saving template style for administrator template.
@@ -990,7 +1154,7 @@
# Fixed names of sample data images

25-May-2010 Christophe Demko
- # Fixed [#20567] Com_Redirect save as copy does not work (tries to save with same name) (thanks Elin Waring, Tim Plummer,Christopher Garvis and Amy Stephen)
+ # Fixed [#20567] Com_Redirect save as copy does not work (tries to save with same name) (thanks Elin Waring, Tim Plummer,Christopher Garvis and Amy Stephen)
# Fixed autodetect ftp path in installation
# Fixed css for hathor and bluestork template (missing image http://joomlacode.org/gf/project/joomla/tracker/?action=TrackerItemEdit&tracker_item_id=20632)
# Fixed UI in language manager
@@ -1011,7 +1175,7 @@
# Fixed issue [#20622] [patch] Fixes to Hathor to prevent buttons wrapping on small screen (Andy Tarr).
# Fixed issue [#20302] com_config application view loads a duplicate of switcher javascript (Phil Snell).
# Fixed issue [#20619] Global configuration allows you to save an invalid email (Elin Waring).
-
+
24-May-2010 Jean-Marie Simonet
# [#20580] Fatal error when saving module and editing "Publish Start" or "Publish Finish". Thanks Radek.
# [#20569] mod_login.xml manifest cites incorrect index file. Thanks Jeremy.
@@ -1041,7 +1205,7 @@
$ Adding missing string. Sorting some main ini strings.
# [#20556] Home menu items are routed with alias if language switcher plugin is off. Thanks Dennis
$ [#20566] Change "Other Informations" to "Other Information". Thanks Michael.
-
+
21-May-2010 Jean-Marie Simonet
# Sample data error [20550]. Thanks Radek.
$ Adapted some com_search strings to different languages
@@ -1244,7 +1408,7 @@
^ Reworked forms in frontend user component.
# Fix rouge short-tags.
# Fix bug in backend user edit form where custom user profile would not save for a new user.
- # Fixed bug in backend com_content where featured setting in the article would not take.
+ # Fixed bug in backend com_content where featured setting in the article would not take.

12-May-2010 Christophe Demko
$ Correcting some strings/language in beez
@@ -1351,7 +1515,7 @@
# Fix escaping javascript string in JHtmlBehavior::_calendarTranslation
# Fix link menu item disabled when type is not url
# Fix [#19878] Global Config/Site Name in titles not working
- # Fix [#20006] Invalid Token if install sample data twice
+ # Fix [#20006] Invalid Token if install sample data twice
+ Change the second parameter of JText::script to be a boolean or an array of options
+ Add two optional parameter at the end of JText::_ function to interprete backslashes and to indicate a string to push into the javascript strings
+ Add an optional array parameter at the end of JText::plural and JText::sprintf.
@@ -1573,7 +1737,7 @@

23-Apr-2010 Mark Dexter
^ Added UI for new fields in contacts, newsfeeds, weblinks (Elin Waring)
- ^ Added publish_up and publish_down checks to models (Elin Waring)
+ ^ Added publish_up and publish_down checks to models (Elin Waring)

23-Apr-2010 Jean-Marie Simonet
# Bug fix + new string

Modified: development/branches/jcamp/installation/configuration.php-dist
===================================================================
--- development/branches/jcamp/installation/configuration.php-dist 2010-08-31 19:21:09 UTC (rev 18740)
+++ development/branches/jcamp/installation/configuration.php-dist 2010-08-31 19:24:28 UTC (rev 18741)
@@ -78,7 +78,6 @@
/* Debug Settings */
public $debug = '0';
public $debug_lang = '0';
- public $debug_modules = '1';

/* Meta Settings */
public $MetaDesc = 'Joomla! - the dynamic portal engine and content management system';
@@ -87,9 +86,9 @@
public $MetaAuthor = '1';

/* SEO Settings */
- public $sef = '0';
+ public $sef = '1';
public $sef_rewrite = '0';
- public $sef_suffix = '';
+ public $sef_suffix = '0';
public $unicodeslugs = '0';

/* Feed Settings */

Modified: development/branches/jcamp/installation/language/en-GB/en-GB.ini
===================================================================
--- development/branches/jcamp/installation/language/en-GB/en-GB.ini 2010-08-31 19:21:09 UTC (rev 18740)
+++ development/branches/jcamp/installation/language/en-GB/en-GB.ini 2010-08-31 19:24:28 UTC (rev 18741)
@@ -69,14 +69,14 @@

;Site View
INSTL_SITE="Main Configuration"
-INSTL_ADMIN_EMAIL_LABEL="Your E-mail"
+INSTL_ADMIN_EMAIL_LABEL="Your Email"
INSTL_ADMIN_PASSWORD_LABEL="Admin Password"
INSTL_ADMIN_PASSWORD2_LABEL="Confirm Admin Password"
INSTL_ADMIN_USER_LABEL="Admin Username"
INSTL_SITE_NAME_TITLE="Site Name"
INSTL_SITE_NAME_DESC="Enter the name of your Joomla! site."
-INSTL_SITE_CONF_TITLE="Confirm the Admin E-mail and Password."
-INSTL_SITE_CONF_DESC="Enter your e-mail address. This will be the e-mail address of the Web site Super Administrator.<br />Enter a new password and then confirm it in the appropriate fields. You may change the default username <strong>admin</strong>. These will be the Username and password that you will use to login to the Administrator Control Panel at the end of the installation.<br /> If you are migrating, you can ignore this section. Your current settings will be automatically migrated."
+INSTL_SITE_CONF_TITLE="Confirm the Admin email and Password."
+INSTL_SITE_CONF_DESC="Enter your email address. This will be the email address of the Web site Super Administrator.<br />Enter a new password and then confirm it in the appropriate fields. You may change the default username <strong>admin</strong>. These will be the Username and password that you will use to login to the Administrator Control Panel at the end of the installation.<br /> If you are migrating, you can ignore this section. Your current settings will be automatically migrated."
INSTL_SITE_LOAD_SAMPLE_TITLE="Load sample data"
INSTL_SITE_LOAD_SAMPLE_DESC1="<strong>Important!</strong>: It is strongly recommended that new Joomla! users install the default sample data. To do this click on the button <i>before</i> moving to the next stage."
INSTL_SITE_LOAD_SAMPLE_DESC2="Before leaving the installation, you can populate the site database with data. There are three ways to do this:"
@@ -84,7 +84,7 @@
INSTL_SITE_LOAD_SAMPLE_DESC4="<strong>2a. A Joomla! 1.6.x compatible SQL script file</strong> can be uploaded from a localhost and executed on the site. This could be for installing localised sample data or restoring a Joomla! 1.5.x backup. The script should have the correct table prefixes, be in UTF-8 encoding and comply with the Joomla! 1.5.x database schema."
INSTL_SITE_LOAD_SAMPLE_DESC5="<strong>2b. Migrate content from previous versions of Joomla!</strong>. Selecting the Load Migration Script option enables support for the migration of older Joomla! 1.0.x version database dumps to a new Joomla! 1.5.x site. The required conversions are performed on-the-fly and the migration script file can be created on the older site by using the <code>com_migrator</code> component.<br/> For further information about the component and the migration procedure, please see the <a href="_QQ_"http://docs.joomla.org/Migrating_from_1.0.x_to_1.5_Stable"_QQ_" target="_QQ_"blank"_QQ_">Joomla! 1.5 Migration Guide</a>."
INSTL_SITE_LOAD_SAMPLE_DESC6="You can upload uncompressed SQL script files, zip-packed script files and gz-packed script files. Packed files may contain only one SQL script file. If your file is too big to handle or causing memory and time limit errors, upload the uncompressed file into the /installation/sql/migration/ folder. Rename it <code>migrate.sql</code> and then tick the "_QQ_"I have already uploaded..."_QQ_" option.<br />"
-INSTL_SITE_LOAD_SAMPLE_DESC7="<strong>3. Clean Installation</strong>: If you wish to perform a clean installation, enter the site name, admin e-mail and choose a password. Then proceed to the final step by clicking <em>Next</em>."
+INSTL_SITE_LOAD_SAMPLE_DESC7="<strong>3. Clean Installation</strong>: If you wish to perform a clean installation, enter the site name, admin email and choose a password. Then proceed to the final step by clicking <em>Next</em>."
INSTL_SITE_INSTALL_SAMPLE_LABEL="Install Sample Data"
INSTL_SITE_INSTALL_SAMPLE_DESC="Installing sample data is strongly recommended for beginners. This will install sample content that is included in the Joomla! installation package."
INSTL_SITE_SAMPLE_LOADED="Sample Data Installed Successfully."
@@ -198,7 +198,7 @@
JLIB_DATABASE_ERROR_LOAD_DATABASE_DRIVER="Unable to load Database Driver: %s"

;Necessary for errors
-ADMIN_EMAIL="Your e-mail"
+ADMIN_EMAIL="Your email"
ADMIN_PASSWORD="Admin Password"
ADMIN_PASSWORD2="Confirm Admin Password"
SITE_NAME="Site Name"

Modified: development/branches/jcamp/installation/language/en-US/en-US.ini
===================================================================
--- development/branches/jcamp/installation/language/en-US/en-US.ini 2010-08-31 19:21:09 UTC (rev 18740)
+++ development/branches/jcamp/installation/language/en-US/en-US.ini 2010-08-31 19:24:28 UTC (rev 18741)
@@ -69,14 +69,14 @@

;Site View
INSTL_SITE="Main Configuration"
-INSTL_ADMIN_EMAIL_LABEL="Your E-mail"
+INSTL_ADMIN_EMAIL_LABEL="Your Email"
INSTL_ADMIN_PASSWORD_LABEL="Admin Password"
INSTL_ADMIN_PASSWORD2_LABEL="Confirm Admin Password"
INSTL_ADMIN_USER_LABEL="Admin Username"
INSTL_SITE_NAME_TITLE="Site Name"
INSTL_SITE_NAME_DESC="Enter the name of your Joomla! site."
-INSTL_SITE_CONF_TITLE="Confirm the Admin E-mail and Password."
-INSTL_SITE_CONF_DESC="Enter your e-mail address. This will be the e-mail address of the Web site Super Administrator.<br />Enter a new password and then confirm it in the appropriate fields. You may change the default username <strong>admin</strong>. These will be the Username and password that you will use to login to the Administrator Control Panel at the end of the installation.<br /> If you are migrating, you can ignore this section. Your current settings will be automatically migrated."
+INSTL_SITE_CONF_TITLE="Confirm the Admin email and Password."
+INSTL_SITE_CONF_DESC="Enter your email address. This will be the email address of the Web site Super Administrator.<br />Enter a new password and then confirm it in the appropriate fields. You may change the default username <strong>admin</strong>. These will be the Username and password that you will use to login to the Administrator Control Panel at the end of the installation.<br /> If you are migrating, you can ignore this section. Your current settings will be automatically migrated."
INSTL_SITE_LOAD_SAMPLE_TITLE="Load sample data"
INSTL_SITE_LOAD_SAMPLE_DESC1="<strong>Important!</strong>: It is strongly recommended that new Joomla! users install the default sample data. To do this click on the button <i>before</i> moving to the next stage."
INSTL_SITE_LOAD_SAMPLE_DESC2="Before leaving the installation, you can populate the site database with data. There are three ways to do this:"
@@ -84,7 +84,7 @@
INSTL_SITE_LOAD_SAMPLE_DESC4="<strong>2a. A Joomla! 1.6.x compatible SQL script file</strong> can be uploaded from a localhost and executed on the site. This could be for installing localised sample data or restoring a Joomla! 1.5.x backup. The script should have the correct table prefixes, be in UTF-8 encoding and comply with the Joomla! 1.5.x database schema."
INSTL_SITE_LOAD_SAMPLE_DESC5="<strong>2b. Migrate content from previous versions of Joomla!</strong>. Selecting the Load Migration Script option enables support for the migration of older Joomla! 1.0.x version database dumps to a new Joomla! 1.5.x site. The required conversions are performed on-the-fly and the migration script file can be created on the older site by using the <code>com_migrator</code> component.<br/> For further information about the component and the migration procedure, please see the <a href="_QQ_"http://docs.joomla.org/Migrating_from_1.0.x_to_1.5_Stable"_QQ_" target="_QQ_"blank"_QQ_">Joomla! 1.5 Migration Guide</a>."
INSTL_SITE_LOAD_SAMPLE_DESC6="You can upload uncompressed SQL script files, zip-packed script files and gz-packed script files. Packed files may contain only one SQL script file. If your file is too big to handle or causing memory and time limit errors, upload the uncompressed file into the /installation/sql/migration/ folder. Rename it <code>migrate.sql</code> and then tick the "_QQ_"I have already uploaded..."_QQ_" option.<br />"
-INSTL_SITE_LOAD_SAMPLE_DESC7="<strong>3. Clean Installation</strong>: If you wish to perform a clean installation, enter the site name, admin e-mail and choose a password. Then proceed to the final step by clicking <em>Next</em>."
+INSTL_SITE_LOAD_SAMPLE_DESC7="<strong>3. Clean Installation</strong>: If you wish to perform a clean installation, enter the site name, admin email and choose a password. Then proceed to the final step by clicking <em>Next</em>."
INSTL_SITE_INSTALL_SAMPLE_LABEL="Install Sample Data"
INSTL_SITE_INSTALL_SAMPLE_DESC="Installing sample data is strongly recommended for beginners. This will install sample content that is included in the Joomla! installation package."
INSTL_SITE_SAMPLE_LOADED="Sample Data Installed Successfully."
@@ -201,7 +201,7 @@


;Necessary for errors
-ADMIN_EMAIL="Your e-mail"
+ADMIN_EMAIL="Your email"
ADMIN_PASSWORD="Admin Password"
ADMIN_PASSWORD2="Confirm Admin Password"
SITE_NAME="Site Name"

Modified: development/branches/jcamp/installation/models/configuration.php
===================================================================
--- development/branches/jcamp/installation/models/configuration.php 2010-08-31 19:21:09 UTC (rev 18740)
+++ development/branches/jcamp/installation/models/configuration.php 2010-08-31 19:24:28 UTC (rev 18741)
@@ -57,7 +57,6 @@
/* Debug Settings */
$registry->set('debug', 0);
$registry->set('debug_lang', 0);
- $registry->set('debug_modules', 0);

/* Database Settings */
$registry->set('dbtype', $options->db_type);
@@ -111,7 +110,7 @@
/* SEO Settings */
$registry->set('sef', 1);
$registry->set('sef_rewrite', 0);
- $registry->set('sef_suffix', 1);
+ $registry->set('sef_suffix', 0);
$registry->set('unicodeslugs', 0);

/* Feed Settings */

Modified: development/branches/jcamp/installation/sql/mysql/joomla.sql
===================================================================
--- development/branches/jcamp/installation/sql/mysql/joomla.sql 2010-08-31 19:21:09 UTC (rev 18740)
+++ development/branches/jcamp/installation/sql/mysql/joomla.sql 2010-08-31 19:24:28 UTC (rev 18741)
@@ -42,10 +42,10 @@
(14,1,31,32,1,'com_massmail','com_massmail','{}'),
(15,1,33,34,1,'com_media','com_media','{"core.admin":{"7":1},"core.manage":{"6":1},"core.create":{"3":1},"core.delete":{"5":1},"core.edit":[],"core.edit.state":[]}'),
(16,1,35,36,1,'com_menus','com_menus','{"core.admin":{"7":1},"core.manage":[],"core.create":[],"core.delete":[],"core.edit":[],"core.edit.state":[]}'),
- (17,1,37,38,1,'com_messages','com_messages','{}'),
+ (17,1,37,38,1,'com_messages','com_messages','{"core.admin":{"7":1},"core.manage":{"7":1}}'),
(18,1,39,40,1,'com_modules','com_modules','{"core.admin":{"7":1},"core.manage":[],"core.create":[],"core.delete":[],"core.edit":[],"core.edit.state":[]}'),
(19,1,41,44,1,'com_newsfeeds','com_newsfeeds','{"core.admin":{"7":1},"core.manage":{"6":1},"core.create":[],"core.delete":[],"core.edit":[],"core.edit.state":[]}'),
- (20,1,45,46,1,'com_plugins','com_plugins','{"core.admin":{"7":1},"core.manage":[],"core.create":[],"core.delete":[],"core.edit":[],"core.edit.state":[]}'),
+ (20,1,45,46,1,'com_plugins','com_plugins','{"core.admin":{"7":1},"core.manage":[],"core.edit":[],"core.edit.state":[]}'),
(21,1,47,48,1,'com_redirect','com_redirect','{"core.admin":{"7":1},"core.manage":[]}'),
(22,1,49,50,1,'com_search','com_search','{"core.admin":{"7":1},"core.manage":{"6":1}}'),
(23,1,51,52,1,'com_templates','com_templates','{"core.admin":{"7":1},"core.manage":[],"core.create":[],"core.delete":[],"core.edit":[],"core.edit.state":[]}'),
@@ -406,11 +406,10 @@

# Libraries
INSERT INTO `#__extensions` (`extension_id`, `name`, `type`, `element`, `folder`, `client_id`, `enabled`, `access`, `protected`, `manifest_cache`, `params`, `custom_data`, `system_data`, `checked_out`, `checked_out_time`, `ordering`, `state`) VALUES
-(100, 'Joomla! Web Application Framework', 'library', 'joomla', '', 0, 1, 1, 1, '', '', '', '', 0, '0000-00-00 00:00:00', 0, 0),
-(101, 'PHPMailer', 'library', 'phpmailer', '', 0, 1, 1, 1, '', '', '', '', 0, '0000-00-00 00:00:00', 0, 0),
-(102, 'SimplePie', 'library', 'simplepie', '', 0, 1, 1, 1, '', '', '', '', 0, '0000-00-00 00:00:00', 0, 0),
-(103, 'Bitfolge', 'library', 'simplepie', '', 0, 1, 1, 1, '', '', '', '', 0, '0000-00-00 00:00:00', 0, 0),
-(104, 'phputf8', 'library', 'simplepie', '', 0, 1, 1, 1, '', '', '', '', 0, '0000-00-00 00:00:00', 0, 0);
+(100, 'PHPMailer', 'library', 'phpmailer', '', 0, 1, 1, 1, '', '', '', '', 0, '0000-00-00 00:00:00', 0, 0),
+(101, 'SimplePie', 'library', 'simplepie', '', 0, 1, 1, 1, '', '', '', '', 0, '0000-00-00 00:00:00', 0, 0),
+(102, 'Bitfolge', 'library', 'simplepie', '', 0, 1, 1, 1, '', '', '', '', 0, '0000-00-00 00:00:00', 0, 0),
+(103, 'phputf8', 'library', 'simplepie', '', 0, 1, 1, 1, '', '', '', '', 0, '0000-00-00 00:00:00', 0, 0);

# Modules
## Site
@@ -510,6 +509,9 @@
(604, 'XXTestLang', 'language', 'xx-XX', '', 1, 1, 1, 0, '', '', '', '', 0, '0000-00-00 00:00:00', 0, 0),
(605, 'XXTestLang', 'language', 'xx-XX', '', 0, 1, 1, 0, '', '', '', '', 0, '0000-00-00 00:00:00', 0, 0);

+INSERT INTO `#__extensions` (`extension_id`, `name`, `type`, `element`, `folder`, `client_id`, `enabled`, `access`, `protected`, `manifest_cache`, `params`, `custom_data`, `system_data`, `checked_out`, `checked_out_time`, `ordering`, `state`) VALUES
+(700, 'Joomla! CMS', 'file', 'joomla', '', 0, 1, 1, 1, '', '', '', '', 0, '0000-00-00 00:00:00', 0, 0);
+
# -------------------------------------------------------

#
@@ -687,11 +689,11 @@
(8, 'Toolbar', '', '', 1, 'toolbar', 0, '0000-00-00 00:00:00', '0000-00-00 00:00:00', '0000-00-00 00:00:00', 1, 'mod_toolbar', 3, 1, '', 1, '*'),
(9, 'Quick Icons', '', '', 1, 'icon', 0, '0000-00-00 00:00:00', '0000-00-00 00:00:00', '0000-00-00 00:00:00', 1, 'mod_quickicon', 3, 1, '', 1, '*'),
(10, 'Logged-in Users', '', '', 2, 'cpanel', 0, '0000-00-00 00:00:00', '0000-00-00 00:00:00', '0000-00-00 00:00:00', 1, 'mod_logged', 3, 1, '', 1, '*'),
-(12, 'Admin Menu', '', '', 1, 'menu', 0, '0000-00-00 00:00:00', '0000-00-00 00:00:00', '0000-00-00 00:00:00', 1, 'mod_menu', 3, 1, '', 1, '*'),
+(12, 'Admin Menu', '', '', 1, 'menu', 0, '0000-00-00 00:00:00', '0000-00-00 00:00:00', '0000-00-00 00:00:00', 1, 'mod_menu', 3, 1, '{"layout":"","moduleclass_sfx":"","shownew":"1","showhelp":"1","cache":"0"}', 1, '*'),
(13, 'Admin Submenu', '', '', 1, 'submenu', 0, '0000-00-00 00:00:00', '0000-00-00 00:00:00', '0000-00-00 00:00:00', 1, 'mod_submenu', 3, 1, '', 1, '*'),
(14, 'User Status', '', '', 1, 'status', 0, '0000-00-00 00:00:00', '0000-00-00 00:00:00', '0000-00-00 00:00:00', 1, 'mod_status', 3, 1, '', 1, '*'),
(15, 'Title', '', '', 1, 'title', 0, '0000-00-00 00:00:00', '0000-00-00 00:00:00', '0000-00-00 00:00:00', 1, 'mod_title', 3, 1, '', 1, '*'),
-(16, 'Login Form', '', '', 8, 'position-7', 0, '0000-00-00 00:00:00', '0000-00-00 00:00:00', '0000-00-00 00:00:00', 1, 'mod_login', 1, 1, '{"greeting":"1","name":"0"}', 0, '*'),
+(16, 'Login Form', '', '', 7, 'position-7', 0, '0000-00-00 00:00:00', '0000-00-00 00:00:00', '0000-00-00 00:00:00', 1, 'mod_login', 1, 1, '{"greeting":"1","name":"0"}', 0, '*'),
(17, 'Breadcrumbs', '', '', 1, 'position-2', 0, '0000-00-00 00:00:00', '0000-00-00 00:00:00', '0000-00-00 00:00:00', 1, 'mod_breadcrumbs', 1, 1, '{"moduleclass_sfx":"","showHome":"1","homeText":"Home","showComponent":"1","separator":"","cache":"1","cache_time":"900","cachemode":"itemid"}', 0, '*'),
(18, 'Banners', '', '', 1, 'position-5', 0, '0000-00-00 00:00:00', '0000-00-00 00:00:00', '0000-00-00 00:00:00', 0, 'mod_banners', 1, 1, '{"target":"1","count":"1","cid":"1","catid":["27"],"tag_search":"0","ordering":"0","header_text":"","footer_text":"","layout":"","moduleclass_sfx":"","cache":"1","cache_time":"900"}', 0, '*');

@@ -716,13 +718,11 @@
(2,0),
(3,0),
(4,0),
-(5,0),
(6,0),
(7,0),
(8,0),
(9,0),
(10,0),
-(11,0),
(12,0),
(13,0),
(14,0),
@@ -860,12 +860,21 @@
PRIMARY KEY (`update_site_id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COMMENT='Update Sites';

+INSERT INTO `#__update_sites` VALUES
+(1, 'Joomla Core', 'collection', 'http://update.joomla.org/core/list.xml', 1),
+(2, 'Joomla Extension Directory', 'collection', 'http://update.joomla.org/jed/list.xml', 1);
+
CREATE TABLE `#__update_sites_extensions` (
`update_site_id` INT DEFAULT 0,
`extension_id` INT DEFAULT 0,
- INDEX `newindex`(`update_site_id`, `extension_id`)
+ PRIMARY KEY(`update_site_id`, `extension_id`)
) ENGINE = MYISAM CHARACTER SET utf8 COMMENT = 'Links extensions to update sites';

+INSERT INTO `#__update_sites_extensions` VALUES
+(1, 700),
+(2, 700);
+
+
CREATE TABLE `#__update_categories` (
`categoryid` int(11) NOT NULL auto_increment,
`name` varchar(20) default '',

Modified: development/branches/jcamp/installation/sql/mysql/sample_data.sql
===================================================================
--- development/branches/jcamp/installation/sql/mysql/sample_data.sql 2010-08-31 19:21:09 UTC (rev 18740)
+++ development/branches/jcamp/installation/sql/mysql/sample_data.sql 2010-08-31 19:24:28 UTC (rev 18741)
@@ -7,57 +7,57 @@
-- Dumping data for table `#__assets`
--
INSERT INTO `#__assets` (`id`, `parent_id`, `lft`, `rgt`, `level`, `name`, `title`, `rules`) VALUES
-(1, 0, 1, 412, 0, 'root.1', 'Root Asset', '{"core.login.site":{"6":1,"2":1},"core.login.admin":{"6":1},"core.admin":{"8":1},"core.manage":{"7":1},"core.create":{"6":1,"3":1},"core.delete":{"6":1},"core.edit":{"6":1,"4":1},"core.edit.state":{"6":1,"5":1}}'),
+(1, 0, 1, 414, 0, 'root.1', 'Root Asset', '{"core.login.site":{"6":1,"2":1},"core.login.admin":{"6":1},"core.admin":{"8":1},"core.manage":{"7":1},"core.create":{"6":1,"3":1},"core.delete":{"6":1},"core.edit":{"6":1,"4":1},"core.edit.state":{"6":1,"5":1}}'),
(2, 1, 2, 3, 1, 'com_admin', 'com_admin', '{}'),
(3, 1, 4, 11, 1, 'com_banners', 'com_banners', '{"core.admin":{"7":1},"core.manage":{"6":1},"core.create":[],"core.delete":[],"core.edit":[],"core.edit.state":[]}'),
(4, 1, 12, 13, 1, 'com_cache', 'com_cache', '{"core.admin":{"7":1},"core.manage":{"7":1}}'),
(5, 1, 14, 15, 1, 'com_checkin', 'com_checkin', '{"core.admin":{"7":1},"core.manage":{"7":1}}'),
(6, 1, 16, 17, 1, 'com_config', 'com_config', '{}'),
(7, 1, 18, 87, 1, 'com_contact', 'com_contact', '{"core.admin":{"7":1},"core.manage":{"6":1},"core.create":[],"core.delete":[],"core.edit":[],"core.edit.state":[]}'),
-(8, 1, 88, 291, 1, 'com_content', 'com_content', '{"core.admin":{"7":1},"core.manage":{"6":1},"core.create":{"3":1,"12":1},"core.delete":[],"core.edit":{"4":1},"core.edit.state":{"5":1}}'),
-(9, 1, 292, 293, 1, 'com_cpanel', 'com_cpanel', '{}'),
-(10, 1, 294, 295, 1, 'com_installer', 'com_installer', '{"core.admin":{"7":1},"core.manage":{"7":1},"core.create":[],"core.delete":[],"core.edit.state":[]}'),
-(11, 1, 296, 297, 1, 'com_languages', 'com_languages', '{"core.admin":{"7":1},"core.manage":[],"core.create":[],"core.delete":[],"core.edit":[],"core.edit.state":[]}'),
-(12, 1, 298, 299, 1, 'com_login', 'com_login', '{}'),
-(13, 1, 300, 301, 1, 'com_mailto', 'com_mailto', '{}'),
-(14, 1, 302, 303, 1, 'com_massmail', 'com_massmail', '{}'),
-(15, 1, 304, 305, 1, 'com_media', 'com_media', '{"core.admin":{"7":1},"core.manage":{"6":1},"core.create":{"3":1},"core.delete":{"5":1},"core.edit":[],"core.edit.state":[]}'),
-(16, 1, 306, 307, 1, 'com_menus', 'com_menus', '{"core.admin":{"7":1},"core.manage":[],"core.create":[],"core.delete":[],"core.edit":[],"core.edit.state":[]}'),
-(17, 1, 308, 309, 1, 'com_messages', 'com_messages', '{}'),
-(18, 1, 310, 311, 1, 'com_modules', 'com_modules', '{"core.admin":{"7":1},"core.manage":[],"core.create":[],"core.delete":[],"core.edit":[],"core.edit.state":[]}'),
-(19, 1, 312, 319, 1, 'com_newsfeeds', 'com_newsfeeds', '{"core.admin":{"7":1},"core.manage":{"6":1},"core.create":[],"core.delete":[],"core.edit":[],"core.edit.state":[]}'),
-(20, 1, 320, 321, 1, 'com_plugins', 'com_plugins', '{"core.admin":{"7":1},"core.manage":[],"core.create":[],"core.delete":[],"core.edit":[],"core.edit.state":[]}'),
-(21, 1, 322, 323, 1, 'com_redirect', 'com_redirect', '{"core.admin":{"7":1},"core.manage":[]}'),
-(22, 1, 324, 325, 1, 'com_search', 'com_search', '{"core.admin":{"7":1},"core.manage":{"6":1}}'),
-(23, 1, 326, 327, 1, 'com_templates', 'com_templates', '{"core.admin":{"7":1},"core.manage":[],"core.create":[],"core.delete":[],"core.edit":[],"core.edit.state":[]}'),
-(24, 1, 328, 329, 1, 'com_users', 'com_users', '{"core.admin":{"7":1},"core.manage":[],"core.create":[],"core.delete":[],"core.edit":[],"core.edit.state":[]}'),
-(25, 1, 330, 347, 1, 'com_weblinks', 'com_weblinks', '{"core.admin":{"7":1},"core.manage":{"6":1},"core.create":{"3":1,"10":0,"12":0},"core.delete":[],"core.edit":{"4":1},"core.edit.state":{"5":1}}'),
-(26, 1, 348, 349, 1, 'com_wrapper', 'com_wrapper', '{}'),
-(39, 8, 107, 290, 2, 'com_content.category.14', 'Sample Data-Articles', '{"core.create":[],"core.delete":[],"core.edit":[],"core.edit.state":[]}'),
-(38, 25, 337, 338, 2, 'com_weblinks.category.13', 'Uncategorised', '{"core.create":[],"core.delete":[],"core.edit":[],"core.edit.state":[]}'),
-(37, 19, 315, 316, 2, 'com_newsfeeds.category.12', 'Uncategorised', '{"core.create":[],"core.delete":[],"core.edit":[],"core.edit.state":[]}'),
+(8, 1, 88, 293, 1, 'com_content', 'com_content', '{"core.admin":{"7":1},"core.manage":{"6":1},"core.create":{"3":1,"12":1},"core.delete":[],"core.edit":{"4":1},"core.edit.state":{"5":1}}'),
+(9, 1, 294, 295, 1, 'com_cpanel', 'com_cpanel', '{}'),
+(10, 1, 296, 297, 1, 'com_installer', 'com_installer', '{"core.admin":{"7":1},"core.manage":{"7":1},"core.create":[],"core.delete":[],"core.edit.state":[]}'),
+(11, 1, 298, 299, 1, 'com_languages', 'com_languages', '{"core.admin":{"7":1},"core.manage":[],"core.create":[],"core.delete":[],"core.edit":[],"core.edit.state":[]}'),
+(12, 1, 300, 301, 1, 'com_login', 'com_login', '{}'),
+(13, 1, 302, 303, 1, 'com_mailto', 'com_mailto', '{}'),
+(14, 1, 304, 305, 1, 'com_massmail', 'com_massmail', '{}'),
+(15, 1, 306, 307, 1, 'com_media', 'com_media', '{"core.admin":{"7":1},"core.manage":{"6":1},"core.create":{"3":1},"core.delete":{"5":1},"core.edit":[],"core.edit.state":[]}'),
+(16, 1, 308, 309, 1, 'com_menus', 'com_menus', '{"core.admin":{"7":1},"core.manage":[],"core.create":[],"core.delete":[],"core.edit":[],"core.edit.state":[]}'),
+(17,1,37,38,1,'com_messages','com_messages','{"core.admin":{"7":1},"core.manage":{"7":1}}'),
+(18, 1, 312, 313, 1, 'com_modules', 'com_modules', '{"core.admin":{"7":1},"core.manage":[],"core.create":[],"core.delete":[],"core.edit":[],"core.edit.state":[]}'),
+(19, 1, 314, 321, 1, 'com_newsfeeds', 'com_newsfeeds', '{"core.admin":{"7":1},"core.manage":{"6":1},"core.create":[],"core.delete":[],"core.edit":[],"core.edit.state":[]}'),
+(20, 1, 322, 323, 1, 'com_plugins', 'com_plugins', '{"core.admin":{"7":1},"core.manage":[],"core.create":[],"core.delete":[],"core.edit":[],"core.edit.state":[]}'),
+(21, 1, 324, 325, 1, 'com_redirect', 'com_redirect', '{"core.admin":{"7":1},"core.manage":[]}'),
+(22, 1, 326, 327, 1, 'com_search', 'com_search', '{"core.admin":{"7":1},"core.manage":{"6":1}}'),
+(23, 1, 328, 329, 1, 'com_templates', 'com_templates', '{"core.admin":{"7":1},"core.manage":[],"core.create":[],"core.delete":[],"core.edit":[],"core.edit.state":[]}'),
+(24, 1, 330, 331, 1, 'com_users', 'com_users', '{"core.admin":{"7":1},"core.manage":[],"core.create":[],"core.delete":[],"core.edit":[],"core.edit.state":[]}'),
+(25, 1, 332, 349, 1, 'com_weblinks', 'com_weblinks', '{"core.admin":{"7":1},"core.manage":{"6":1},"core.create":{"3":1,"10":0,"12":0},"core.delete":[],"core.edit":{"4":1},"core.edit.state":{"5":1}}'),
+(26, 1, 350, 351, 1, 'com_wrapper', 'com_wrapper', '{}'),
+(39, 8, 109, 292, 2, 'com_content.category.14', 'Sample Data-Articles', '{"core.create":[],"core.delete":[],"core.edit":[],"core.edit.state":[]}'),
+(38, 25, 339, 340, 2, 'com_weblinks.category.13', 'Uncategorised', '{"core.create":[],"core.delete":[],"core.edit":[],"core.edit.state":[]}'),
+(37, 19, 317, 318, 2, 'com_newsfeeds.category.12', 'Uncategorised', '{"core.create":[],"core.delete":[],"core.edit":[],"core.edit.state":[]}'),
(36, 7, 23, 24, 2, 'com_contact.category.11', 'Uncategorised', '{"core.create":[],"core.delete":[],"core.edit":[],"core.edit.state":[]}'),
(35, 3, 7, 8, 2, 'com_banners.category.10', 'Uncategorised', '{"core.create":[],"core.delete":[],"core.edit":[],"core.edit.state":[]}'),
-(34, 8, 105, 106, 2, 'com_content.category.9', 'Uncategorised', '{"core.create":{"10":0,"12":0},"core.delete":[],"core.edit":[],"core.edit.state":[]}'),
+(34, 8, 105, 108, 2, 'com_content.category.9', 'Uncategorised', '{"core.create":{"10":0,"12":0},"core.delete":[],"core.edit":[],"core.edit.state":[]}'),
(40, 3, 9, 10, 2, 'com_banners.category.15', 'Sample Data-Banners', '{"core.create":[],"core.delete":[],"core.edit":[],"core.edit.state":[]}'),
(41, 7, 25, 86, 2, 'com_contact.category.16', 'Sample Data-Contact', '{"core.create":[],"core.delete":[],"core.edit":[],"core.edit.state":[]}'),
-(42, 19, 317, 318, 2, 'com_newsfeeds.category.17', 'Sample Data-Newsfeeds', '{"core.create":[],"core.delete":[],"core.edit":[],"core.edit.state":[]}'),
-(43, 25, 339, 346, 2, 'com_weblinks.category.18', 'Sample Data-Weblinks', '{"core.create":[],"core.delete":[],"core.edit":[],"core.edit.state":[]}'),
-(44, 39, 108, 239, 3, 'com_content.category.19', 'Joomla!', '{"core.create":{"1":1,"10":0,"12":0},"core.delete":[],"core.edit":{"1":0},"core.edit.state":[]}'),
-(45, 44, 109, 216, 4, 'com_content.category.20', 'Extensions', '{"core.create":[],"core.delete":[],"core.edit":[],"core.edit.state":[]}'),
-(46, 45, 110, 125, 5, 'com_content.category.21', 'Components', '{"core.create":[],"core.delete":[],"core.edit":[],"core.edit.state":[]}'),
-(47, 45, 126, 185, 5, 'com_content.category.22', 'Modules', '{"core.create":[],"core.delete":[],"core.edit":[],"core.edit.state":[]}'),
-(48, 45, 186, 197, 5, 'com_content.category.23', 'Templates', '{"core.create":[],"core.delete":[],"core.edit":[],"core.edit.state":[]}'),
-(49, 45, 198, 199, 5, 'com_content.category.24', 'Languages', '{"core.create":[],"core.delete":[],"core.edit":[],"core.edit.state":[]}'),
-(50, 45, 200, 215, 5, 'com_content.category.25', 'Plugins', '{"core.create":[],"core.delete":[],"core.edit":[],"core.edit.state":[]}'),
-(51, 39, 240, 271, 3, 'com_content.category.26', 'Park Site', '{"core.create":{"10":0,"12":0},"core.delete":[],"core.edit":[],"core.edit.state":[]}'),
-(52, 51, 241, 246, 4, 'com_content.category.27', 'Park Blog', '{"core.create":[],"core.delete":[],"core.edit":[],"core.edit.state":[]}'),
-(53, 51, 247, 268, 4, 'com_content.category.28', 'Photo Gallery', '{"core.create":[],"core.delete":[],"core.edit":[],"core.edit.state":[]}'),
-(54, 39, 272, 285, 3, 'com_content.category.29', 'Fruit Shop Site', '{"core.create":[],"core.delete":[],"core.edit":[],"core.edit.state":[]}'),
-(55, 54, 273, 278, 4, 'com_content.category.30', 'Growers', '{"core.create":{"12":0},"core.delete":[],"core.edit":[],"core.edit.state":[]}'),
-(56, 43, 340, 341, 3, 'com_weblinks.category.31', 'Park Links', '{"core.create":[],"core.delete":[],"core.edit":[],"core.edit.state":[]}'),
-(57, 43, 342, 345, 3, 'com_weblinks.category.32', 'Joomla! Specific Links', '{"core.create":[],"core.delete":[],"core.edit":[],"core.edit.state":[]}'),
-(58, 57, 343, 344, 4, 'com_weblinks.category.33', 'Other Resources', '{"core.create":[],"core.delete":[],"core.edit":[],"core.edit.state":[]}'),
+(42, 19, 319, 320, 2, 'com_newsfeeds.category.17', 'Sample Data-Newsfeeds', '{"core.create":[],"core.delete":[],"core.edit":[],"core.edit.state":[]}'),
+(43, 25, 341, 348, 2, 'com_weblinks.category.18', 'Sample Data-Weblinks', '{"core.create":[],"core.delete":[],"core.edit":[],"core.edit.state":[]}'),
+(44, 39, 110, 241, 3, 'com_content.category.19', 'Joomla!', '{"core.create":{"10":0,"12":0},"core.delete":[],"core.edit":[],"core.edit.state":[]}'),
+(45, 44, 111, 218, 4, 'com_content.category.20', 'Extensions', '{"core.create":[],"core.delete":[],"core.edit":[],"core.edit.state":[]}'),
+(46, 45, 112, 127, 5, 'com_content.category.21', 'Components', '{"core.create":[],"core.delete":[],"core.edit":[],"core.edit.state":[]}'),
+(47, 45, 128, 187, 5, 'com_content.category.22', 'Modules', '{"core.create":[],"core.delete":[],"core.edit":[],"core.edit.state":[]}'),
+(48, 45, 188, 199, 5, 'com_content.category.23', 'Templates', '{"core.create":[],"core.delete":[],"core.edit":[],"core.edit.state":[]}'),
+(49, 45, 200, 201, 5, 'com_content.category.24', 'Languages', '{"core.create":[],"core.delete":[],"core.edit":[],"core.edit.state":[]}'),
+(50, 45, 202, 217, 5, 'com_content.category.25', 'Plugins', '{"core.create":[],"core.delete":[],"core.edit":[],"core.edit.state":[]}'),
+(51, 39, 242, 273, 3, 'com_content.category.26', 'Park Site', '{"core.create":{"10":0,"12":0},"core.delete":[],"core.edit":[],"core.edit.state":[]}'),
+(52, 51, 243, 248, 4, 'com_content.category.27', 'Park Blog', '{"core.create":[],"core.delete":[],"core.edit":[],"core.edit.state":[]}'),
+(53, 51, 249, 270, 4, 'com_content.category.28', 'Photo Gallery', '{"core.create":[],"core.delete":[],"core.edit":[],"core.edit.state":[]}'),
+(54, 39, 274, 287, 3, 'com_content.category.29', 'Fruit Shop Site', '{"core.create":[],"core.delete":[],"core.edit":[],"core.edit.state":[]}'),
+(55, 54, 275, 280, 4, 'com_content.category.30', 'Growers', '{"core.create":{"12":0},"core.delete":[],"core.edit":[],"core.edit.state":[]}'),
+(56, 43, 342, 343, 3, 'com_weblinks.category.31', 'Park Links', '{"core.create":[],"core.delete":[],"core.edit":[],"core.edit.state":[]}'),
+(57, 43, 344, 347, 3, 'com_weblinks.category.32', 'Joomla! Specific Links', '{"core.create":[],"core.delete":[],"core.edit":[],"core.edit.state":[]}'),
+(58, 57, 345, 346, 4, 'com_weblinks.category.33', 'Other Resources', '{"core.create":[],"core.delete":[],"core.edit":[],"core.edit.state":[]}'),
(59, 41, 26, 27, 3, 'com_contact.category.34', 'Park Site', '{"core.create":[],"core.delete":[],"core.edit":[],"core.edit.state":[]}'),
(60, 41, 28, 85, 3, 'com_contact.category.35', 'Shop Site', '{"core.create":[],"core.delete":[],"core.edit":[],"core.edit.state":[]}'),
(61, 60, 29, 30, 4, 'com_contact.category.36', 'Staff', '{"core.create":[],"core.delete":[],"core.edit":[],"core.edit.state":[]}'),
@@ -88,91 +88,92 @@
(86, 62, 78, 79, 5, 'com_contact.category.61', 'X', '{"core.create":[],"core.delete":[],"core.edit":[],"core.edit.state":[]}'),
(87, 62, 80, 81, 5, 'com_contact.category.62', 'Y', '{"core.create":[],"core.delete":[],"core.edit":[],"core.edit.state":[]}'),
(88, 62, 82, 83, 5, 'com_contact.category.63', 'Z', '{"core.create":[],"core.delete":[],"core.edit":[],"core.edit.state":[]}'),
-(89, 46, 111, 112, 6, 'com_content.article.1', 'Administrator Components', '{"core.delete":[],"core.edit":[],"core.edit.state":[]}'),
-(90, 93, 128, 129, 7, 'com_content.article.2', 'Archive Module', '{"core.delete":[],"core.edit":[],"core.edit.state":[]}'),
-(91, 93, 130, 131, 7, 'com_content.article.3', 'Article Categories Module', '{"core.delete":[],"core.edit":[],"core.edit.state":[]}'),
-(92, 93, 132, 133, 7, 'com_content.article.4', 'Articles Category Module', '{"core.delete":[],"core.edit":[],"core.edit.state":[]}'),
-(93, 47, 127, 142, 6, 'com_content.category.64', 'Content Modules', '{"core.create":[],"core.delete":[],"core.edit":[],"core.edit.state":[]}'),
-(94, 47, 143, 150, 6, 'com_content.category.65', 'User Modules', '{"core.create":[],"core.delete":[],"core.edit":[],"core.edit.state":[]}'),
-(95, 47, 151, 164, 6, 'com_content.category.66', 'Display Modules', '{"core.create":[],"core.delete":[],"core.edit":[],"core.edit.state":[]}'),
-(96, 47, 165, 178, 6, 'com_content.category.67', 'Utility Modules', '{"core.create":[],"core.delete":[],"core.edit":[],"core.edit.state":[]}'),
-(97, 48, 187, 188, 6, 'com_content.category.68', 'Atomic', '{"core.create":[],"core.delete":[],"core.edit":[],"core.edit.state":[]}'),
-(98, 48, 189, 190, 6, 'com_content.category.69', 'Beez 20', '{"core.create":[],"core.delete":[],"core.edit":[],"core.edit.state":[]}'),
-(99, 48, 191, 192, 6, 'com_content.category.70', 'Beez5', '{"core.create":[],"core.delete":[],"core.edit":[],"core.edit.state":[]}'),
-(100, 48, 193, 194, 6, 'com_content.category.71', 'Milky Way', '{"core.create":[],"core.delete":[],"core.edit":[],"core.edit.state":[]}'),
-(101, 50, 201, 202, 6, 'com_content.article.5', 'Authentication', '{"core.delete":[],"core.edit":[],"core.edit.state":[]}'),
-(102, 51, 269, 270, 4, 'com_content.article.6', 'Australian Parks ', '{"core.delete":[],"core.edit":{"2":1},"core.edit.state":[]}'),
-(103, 95, 152, 153, 7, 'com_content.article.7', 'Banner Module', '{"core.delete":[],"core.edit":[],"core.edit.state":[]}'),
-(104, 44, 217, 218, 4, 'com_content.article.8', 'Beginners', '{"core.delete":[],"core.edit":[],"core.edit.state":[]}'),
-(105, 46, 113, 114, 6, 'com_content.article.9', 'Contact', '{"core.delete":[],"core.edit":[],"core.edit.state":[]}'),
-(106, 46, 115, 116, 6, 'com_content.article.10', 'Content', '{"core.delete":[],"core.edit":[],"core.edit.state":[]}'),
-(107, 109, 259, 260, 6, 'com_content.article.11', 'Cradle Mountain', '{"core.delete":[],"core.edit":[],"core.edit.state":[]}'),
-(108, 53, 248, 257, 5, 'com_content.category.72', 'Animals', '{"core.create":[],"core.delete":[],"core.edit":[],"core.edit.state":[]}'),
-(109, 53, 258, 267, 5, 'com_content.category.73', 'Scenery', '{"core.create":[],"core.delete":[],"core.edit":[],"core.edit.state":[]}'),
-(110, 95, 154, 155, 7, 'com_content.article.12', 'Custom HTML Module', '{"core.delete":[],"core.edit":[],"core.edit.state":[]}'),
-(111, 54, 279, 280, 4, 'com_content.article.13', 'Directions', '{"core.delete":[],"core.edit":[],"core.edit.state":[]}'),
-(112, 50, 203, 204, 6, 'com_content.article.14', 'Editors', '{"core.delete":[],"core.edit":[],"core.edit.state":[]}'),
-(113, 50, 205, 206, 6, 'com_content.article.15', 'Editors-xtd', '{"core.delete":[],"core.edit":[],"core.edit.state":[]}'),
-(114, 95, 156, 157, 7, 'com_content.article.16', 'Feed Display', '{"core.delete":[],"core.edit":[],"core.edit.state":[]}'),
-(115, 52, 242, 243, 5, 'com_content.article.17', 'First Blog Post', '{"core.delete":[],"core.edit":[],"core.edit.state":[]}'),
-(116, 52, 244, 245, 5, 'com_content.article.18', 'Second Blog Post', '{"core.delete":[],"core.edit":[],"core.edit.state":[]}'),
-(117, 95, 158, 159, 7, 'com_content.article.19', 'Footer Module', '{"core.delete":[],"core.edit":[],"core.edit.state":[]}'),
-(118, 54, 281, 282, 4, 'com_content.article.20', 'Fruit Shop', '{"core.delete":[],"core.edit":[],"core.edit.state":[]}'),
-(119, 44, 219, 220, 4, 'com_content.article.21', 'Getting help', '{"core.delete":[],"core.edit":[],"core.edit.state":[]}'),
-(120, 44, 221, 222, 4, 'com_content.article.22', 'Getting Started', '{"core.delete":[],"core.edit":[],"core.edit.state":[]}'),
-(121, 55, 274, 275, 5, 'com_content.article.23', 'Happy Orange Orchard', '{"core.delete":[],"core.edit":[],"core.edit.state":[]}'),
-(122, 44, 223, 224, 4, 'com_content.article.24', 'Joomla!', '{"core.delete":[],"core.edit":[],"core.edit.state":[]}'),
-(123, 108, 249, 250, 6, 'com_content.article.25', 'Koala', '{"core.delete":[],"core.edit":[],"core.edit.state":[]}'),
-(124, 96, 166, 167, 7, 'com_content.article.26', 'Language Switcher', '{"core.delete":[],"core.edit":[],"core.edit.state":[]}'),
-(125, 93, 134, 135, 7, 'com_content.article.27', 'Latest Articles Module', '{"core.delete":[],"core.edit":[],"core.edit.state":[]}'),
-(126, 94, 144, 145, 7, 'com_content.article.28', 'Login Module', '{"core.delete":[],"core.edit":[],"core.edit.state":[]}'),
-(127, 166, 182, 183, 7, 'com_content.article.29', 'Menu Module', '{"core.delete":[],"core.edit":[],"core.edit.state":[]}'),
-(128, 93, 136, 137, 7, 'com_content.article.30', 'Most Read Content', '{"core.delete":[],"core.edit":[],"core.edit.state":[]}'),
-(129, 93, 138, 139, 7, 'com_content.article.31', 'News Flash', '{"core.delete":[],"core.edit":[],"core.edit.state":[]}'),
-(130, 44, 225, 226, 4, 'com_content.article.32', 'Parameters', '{"core.delete":[],"core.edit":[],"core.edit.state":[]}'),
-(131, 108, 251, 252, 6, 'com_content.article.33', 'Phyllopteryx', '{"core.delete":[],"core.edit":[],"core.edit.state":[]}'),
-(132, 109, 261, 262, 6, 'com_content.article.34', 'Pinnacles', '{"core.delete":[],"core.edit":[],"core.edit.state":[]}'),
-(133, 44, 227, 228, 4, 'com_content.article.35', 'Professionals', '{"core.delete":[],"core.edit":[],"core.edit.state":[]}'),
-(134, 95, 160, 161, 7, 'com_content.article.36', 'Random Image Module', '{"core.delete":[],"core.edit":[],"core.edit.state":[]}'),
-(135, 93, 140, 141, 7, 'com_content.article.37', 'Related Items Module', '{"core.delete":[],"core.edit":[],"core.edit.state":[]}'),
-(136, 44, 229, 230, 4, 'com_content.article.38', 'Sample Sites', '{"core.delete":[],"core.edit":[],"core.edit.state":[]}'),
-(137, 46, 117, 118, 6, 'com_content.article.39', 'Search', '{"core.delete":[],"core.edit":[],"core.edit.state":[]}'),
-(138, 96, 168, 169, 7, 'com_content.article.40', 'Search Module', '{"core.delete":[],"core.edit":[],"core.edit.state":[]}'),
-(139, 50, 207, 208, 6, 'com_content.article.41', 'Search ', '{"core.delete":[],"core.edit":[],"core.edit.state":[]}'),
-(140, 39, 286, 287, 3, 'com_content.article.42', 'Site Map', '{"core.delete":[],"core.edit":[],"core.edit.state":[]}'),
-(141, 108, 253, 254, 6, 'com_content.article.43', 'Spotted Quoll', '{"core.delete":[],"core.edit":[],"core.edit.state":[]}'),
-(142, 96, 170, 171, 7, 'com_content.article.44', 'Statistics Module', '{"core.delete":[],"core.edit":[],"core.edit.state":[]}'),
-(143, 96, 172, 173, 7, 'com_content.article.45', 'Syndicate Module', '{"core.delete":[],"core.edit":[],"core.edit.state":[]}'),
-(144, 50, 209, 210, 6, 'com_content.article.46', 'System', '{"core.delete":[],"core.edit":[],"core.edit.state":[]}'),
-(145, 44, 231, 232, 4, 'com_content.article.47', 'The Joomla! Community', '{"core.delete":[],"core.edit":[],"core.edit.state":[]}'),
-(146, 44, 233, 234, 4, 'com_content.article.48', 'The Joomla! Project', '{"core.delete":[],"core.edit":[],"core.edit.state":[]}'),
-(147, 48, 195, 196, 6, 'com_content.article.49', 'Typography', '{"core.delete":[],"core.edit":[],"core.edit.state":[]}'),
-(148, 44, 235, 236, 4, 'com_content.article.50', 'Upgraders', '{"core.delete":[],"core.edit":[],"core.edit.state":[]}'),
-(149, 50, 211, 212, 6, 'com_content.article.51', 'User', '{"core.delete":[],"core.edit":[],"core.edit.state":[]}'),
-(150, 46, 119, 120, 6, 'com_content.article.52', 'Users', '{"core.delete":[],"core.edit":[],"core.edit.state":[]}'),
-(151, 44, 237, 238, 4, 'com_content.article.53', 'Using Joomla!', '{"core.delete":[],"core.edit":[],"core.edit.state":[]}'),
-(152, 46, 121, 122, 6, 'com_content.article.54', 'Weblinks', '{"core.delete":[],"core.edit":[],"core.edit.state":[]}'),
-(153, 95, 162, 163, 7, 'com_content.article.55', 'Weblinks Module', '{"core.delete":[],"core.edit":[],"core.edit.state":[]}'),
-(154, 94, 146, 147, 7, 'com_content.article.56', 'Who''s Online', '{"core.delete":[],"core.edit":[],"core.edit.state":[]}'),
-(155, 108, 255, 256, 6, 'com_content.article.57', 'Wobbegone', '{"core.delete":[],"core.edit":[],"core.edit.state":[]}'),
-(156, 55, 276, 277, 5, 'com_content.article.58', 'Wonderful Watermelon', '{"core.delete":[],"core.edit":[],"core.edit.state":[]}'),
-(157, 96, 174, 175, 7, 'com_content.article.59', 'Wrapper Module', '{"core.delete":[],"core.edit":[],"core.edit.state":[]}'),
-(158, 46, 123, 124, 6, 'com_content.article.60', 'News Feeds', '{"core.delete":[],"core.edit":[],"core.edit.state":[]}'),
-(159, 96, 176, 177, 7, 'com_content.article.61', 'Breadcrumbs Module', '{"core.delete":[],"core.edit":[],"core.edit.state":[]}'),
-(160, 50, 213, 214, 6, 'com_content.article.62', 'Content', '{"core.delete":[],"core.edit":[],"core.edit.state":[]}'),
-(162, 109, 263, 264, 6, 'com_content.article.64', 'Blue Mountain Rain Forest', '{"core.delete":[],"core.edit":[],"core.edit.state":[]}'),
-(163, 109, 265, 266, 6, 'com_content.article.65', 'Ormiston Pound', '{"core.delete":[],"core.edit":[],"core.edit.state":[]}'),
-(165, 94, 148, 149, 7, 'com_content.article.66', 'Latest Users Module', '{"core.delete":[],"core.edit":[],"core.edit.state":[]}'),
-(166, 47, 181, 184, 6, 'com_content.category.75', 'Menu Module', '{"core.create":[],"core.delete":[],"core.edit":[],"core.edit.state":[]}'),
-(167, 54, 283, 284, 4, 'com_content.category.76', 'Recipes', '{"core.create":{"12":1},"core.delete":[],"core.edit":[],"core.edit.state":[]}');
+(89, 46, 113, 114, 6, 'com_content.article.1', 'Administrator Components', '{"core.delete":[],"core.edit":[],"core.edit.state":[]}'),
+(90, 93, 130, 131, 7, 'com_content.article.2', 'Archive Module', '{"core.delete":[],"core.edit":[],"core.edit.state":[]}'),
+(91, 93, 132, 133, 7, 'com_content.article.3', 'Article Categories Module', '{"core.delete":[],"core.edit":[],"core.edit.state":[]}'),
+(92, 93, 134, 135, 7, 'com_content.article.4', 'Articles Category Module', '{"core.delete":[],"core.edit":[],"core.edit.state":[]}'),
+(93, 47, 129, 144, 6, 'com_content.category.64', 'Content Modules', '{"core.create":[],"core.delete":[],"core.edit":[],"core.edit.state":[]}'),
+(94, 47, 145, 152, 6, 'com_content.category.65', 'User Modules', '{"core.create":[],"core.delete":[],"core.edit":[],"core.edit.state":[]}'),
+(95, 47, 153, 166, 6, 'com_content.category.66', 'Display Modules', '{"core.create":[],"core.delete":[],"core.edit":[],"core.edit.state":[]}'),
+(96, 47, 167, 180, 6, 'com_content.category.67', 'Utility Modules', '{"core.create":[],"core.delete":[],"core.edit":[],"core.edit.state":[]}'),
+(97, 48, 189, 190, 6, 'com_content.category.68', 'Atomic', '{"core.create":[],"core.delete":[],"core.edit":[],"core.edit.state":[]}'),
+(98, 48, 191, 192, 6, 'com_content.category.69', 'Beez 20', '{"core.create":[],"core.delete":[],"core.edit":[],"core.edit.state":[]}'),
+(99, 48, 193, 194, 6, 'com_content.category.70', 'Beez5', '{"core.create":[],"core.delete":[],"core.edit":[],"core.edit.state":[]}'),
+(100, 48, 195, 196, 6, 'com_content.category.71', 'Milky Way', '{"core.create":[],"core.delete":[],"core.edit":[],"core.edit.state":[]}'),
+(101, 50, 203, 204, 6, 'com_content.article.5', 'Authentication', '{"core.delete":[],"core.edit":[],"core.edit.state":[]}'),
+(102, 51, 271, 272, 4, 'com_content.article.6', 'Australian Parks ', '{"core.delete":[],"core.edit":{"2":1},"core.edit.state":[]}'),
+(103, 95, 154, 155, 7, 'com_content.article.7', 'Banner Module', '{"core.delete":[],"core.edit":[],"core.edit.state":[]}'),
+(104, 44, 219, 220, 4, 'com_content.article.8', 'Beginners', '{"core.delete":[],"core.edit":[],"core.edit.state":[]}'),
+(105, 46, 115, 116, 6, 'com_content.article.9', 'Contact', '{"core.delete":[],"core.edit":[],"core.edit.state":[]}'),
+(106, 46, 117, 118, 6, 'com_content.article.10', 'Content', '{"core.delete":[],"core.edit":[],"core.edit.state":[]}'),
+(107, 109, 261, 262, 6, 'com_content.article.11', 'Cradle Mountain', '{"core.delete":[],"core.edit":[],"core.edit.state":[]}'),
+(108, 53, 250, 259, 5, 'com_content.category.72', 'Animals', '{"core.create":[],"core.delete":[],"core.edit":[],"core.edit.state":[]}'),
+(109, 53, 260, 269, 5, 'com_content.category.73', 'Scenery', '{"core.create":[],"core.delete":[],"core.edit":[],"core.edit.state":[]}'),
+(110, 95, 156, 157, 7, 'com_content.article.12', 'Custom HTML Module', '{"core.delete":[],"core.edit":[],"core.edit.state":[]}'),
+(111, 54, 281, 282, 4, 'com_content.article.13', 'Directions', '{"core.delete":[],"core.edit":[],"core.edit.state":[]}'),
+(112, 50, 205, 206, 6, 'com_content.article.14', 'Editors', '{"core.delete":[],"core.edit":[],"core.edit.state":[]}'),
+(113, 50, 207, 208, 6, 'com_content.article.15', 'Editors-xtd', '{"core.delete":[],"core.edit":[],"core.edit.state":[]}'),
+(114, 95, 158, 159, 7, 'com_content.article.16', 'Feed Display', '{"core.delete":[],"core.edit":[],"core.edit.state":[]}'),
+(115, 52, 244, 245, 5, 'com_content.article.17', 'First Blog Post', '{"core.delete":[],"core.edit":[],"core.edit.state":[]}'),
+(116, 52, 246, 247, 5, 'com_content.article.18', 'Second Blog Post', '{"core.delete":[],"core.edit":[],"core.edit.state":[]}'),
+(117, 95, 160, 161, 7, 'com_content.article.19', 'Footer Module', '{"core.delete":[],"core.edit":[],"core.edit.state":[]}'),
+(118, 54, 283, 284, 4, 'com_content.article.20', 'Fruit Shop', '{"core.delete":[],"core.edit":[],"core.edit.state":[]}'),
+(119, 44, 221, 222, 4, 'com_content.article.21', 'Getting help', '{"core.delete":[],"core.edit":[],"core.edit.state":[]}'),
+(120, 44, 223, 224, 4, 'com_content.article.22', 'Getting Started', '{"core.delete":[],"core.edit":[],"core.edit.state":[]}'),
+(121, 55, 276, 277, 5, 'com_content.article.23', 'Happy Orange Orchard', '{"core.delete":[],"core.edit":[],"core.edit.state":[]}'),
+(122, 44, 225, 226, 4, 'com_content.article.24', 'Joomla!', '{"core.delete":[],"core.edit":[],"core.edit.state":[]}'),
+(123, 108, 251, 252, 6, 'com_content.article.25', 'Koala', '{"core.delete":[],"core.edit":[],"core.edit.state":[]}'),
+(124, 96, 168, 169, 7, 'com_content.article.26', 'Language Switcher', '{"core.delete":[],"core.edit":[],"core.edit.state":[]}'),
+(125, 93, 136, 137, 7, 'com_content.article.27', 'Latest Articles Module', '{"core.delete":[],"core.edit":[],"core.edit.state":[]}'),
+(126, 94, 146, 147, 7, 'com_content.article.28', 'Login Module', '{"core.delete":[],"core.edit":[],"core.edit.state":[]}'),
+(127, 166, 184, 185, 7, 'com_content.article.29', 'Menu Module', '{"core.delete":[],"core.edit":[],"core.edit.state":[]}'),
+(128, 93, 138, 139, 7, 'com_content.article.30', 'Most Read Content', '{"core.delete":[],"core.edit":[],"core.edit.state":[]}'),
+(129, 93, 140, 141, 7, 'com_content.article.31', 'News Flash', '{"core.delete":[],"core.edit":[],"core.edit.state":[]}'),
+(130, 44, 227, 228, 4, 'com_content.article.32', 'Parameters', '{"core.delete":[],"core.edit":[],"core.edit.state":[]}'),
+(131, 108, 253, 254, 6, 'com_content.article.33', 'Phyllopteryx', '{"core.delete":[],"core.edit":[],"core.edit.state":[]}'),
+(132, 109, 263, 264, 6, 'com_content.article.34', 'Pinnacles', '{"core.delete":[],"core.edit":[],"core.edit.state":[]}'),
+(133, 44, 229, 230, 4, 'com_content.article.35', 'Professionals', '{"core.delete":[],"core.edit":[],"core.edit.state":[]}'),
+(134, 95, 162, 163, 7, 'com_content.article.36', 'Random Image Module', '{"core.delete":[],"core.edit":[],"core.edit.state":[]}'),
+(135, 93, 142, 143, 7, 'com_content.article.37', 'Related Items Module', '{"core.delete":[],"core.edit":[],"core.edit.state":[]}'),
+(136, 44, 231, 232, 4, 'com_content.article.38', 'Sample Sites', '{"core.delete":[],"core.edit":[],"core.edit.state":[]}'),
+(137, 46, 119, 120, 6, 'com_content.article.39', 'Search', '{"core.delete":[],"core.edit":[],"core.edit.state":[]}'),
+(138, 96, 170, 171, 7, 'com_content.article.40', 'Search Module', '{"core.delete":[],"core.edit":[],"core.edit.state":[]}'),
+(139, 50, 209, 210, 6, 'com_content.article.41', 'Search ', '{"core.delete":[],"core.edit":[],"core.edit.state":[]}'),
+(140, 39, 288, 289, 3, 'com_content.article.42', 'Site Map', '{"core.delete":[],"core.edit":[],"core.edit.state":[]}'),
+(141, 108, 255, 256, 6, 'com_content.article.43', 'Spotted Quoll', '{"core.delete":[],"core.edit":[],"core.edit.state":[]}'),
+(142, 96, 172, 173, 7, 'com_content.article.44', 'Statistics Module', '{"core.delete":[],"core.edit":[],"core.edit.state":[]}'),
+(143, 96, 174, 175, 7, 'com_content.article.45', 'Syndicate Module', '{"core.delete":[],"core.edit":[],"core.edit.state":[]}'),
+(144, 50, 211, 212, 6, 'com_content.article.46', 'System', '{"core.delete":[],"core.edit":[],"core.edit.state":[]}'),
+(145, 44, 233, 234, 4, 'com_content.article.47', 'The Joomla! Community', '{"core.delete":[],"core.edit":[],"core.edit.state":[]}'),
+(146, 44, 235, 236, 4, 'com_content.article.48', 'The Joomla! Project', '{"core.delete":[],"core.edit":[],"core.edit.state":[]}'),
+(147, 48, 197, 198, 6, 'com_content.article.49', 'Typography', '{"core.delete":[],"core.edit":[],"core.edit.state":[]}'),
+(148, 44, 237, 238, 4, 'com_content.article.50', 'Upgraders', '{"core.delete":[],"core.edit":[],"core.edit.state":[]}'),
+(149, 50, 213, 214, 6, 'com_content.article.51', 'User', '{"core.delete":[],"core.edit":[],"core.edit.state":[]}'),
+(150, 46, 121, 122, 6, 'com_content.article.52', 'Users', '{"core.delete":[],"core.edit":[],"core.edit.state":[]}'),
+(151, 44, 239, 240, 4, 'com_content.article.53', 'Using Joomla!', '{"core.delete":[],"core.edit":[],"core.edit.state":[]}'),
+(152, 46, 123, 124, 6, 'com_content.article.54', 'Weblinks', '{"core.delete":[],"core.edit":[],"core.edit.state":[]}'),
+(153, 95, 164, 165, 7, 'com_content.article.55', 'Weblinks Module', '{"core.delete":[],"core.edit":[],"core.edit.state":[]}'),
+(154, 94, 148, 149, 7, 'com_content.article.56', 'Who''s Online', '{"core.delete":[],"core.edit":[],"core.edit.state":[]}'),
+(155, 108, 257, 258, 6, 'com_content.article.57', 'Wobbegone', '{"core.delete":[],"core.edit":[],"core.edit.state":[]}'),
+(156, 55, 278, 279, 5, 'com_content.article.58', 'Wonderful Watermelon', '{"core.delete":[],"core.edit":[],"core.edit.state":[]}'),
+(157, 96, 176, 177, 7, 'com_content.article.59', 'Wrapper Module', '{"core.delete":[],"core.edit":[],"core.edit.state":[]}'),
+(158, 46, 125, 126, 6, 'com_content.article.60', 'News Feeds', '{"core.delete":[],"core.edit":[],"core.edit.state":[]}'),
+(159, 96, 178, 179, 7, 'com_content.article.61', 'Breadcrumbs Module', '{"core.delete":[],"core.edit":[],"core.edit.state":[]}'),
+(160, 50, 215, 216, 6, 'com_content.article.62', 'Content', '{"core.delete":[],"core.edit":[],"core.edit.state":[]}'),
+(162, 109, 265, 266, 6, 'com_content.article.64', 'Blue Mountain Rain Forest', '{"core.delete":[],"core.edit":[],"core.edit.state":[]}'),
+(163, 109, 267, 268, 6, 'com_content.article.65', 'Ormiston Pound', '{"core.delete":[],"core.edit":[],"core.edit.state":[]}'),
+(165, 94, 150, 151, 7, 'com_content.article.66', 'Latest Users Module', '{"core.delete":[],"core.edit":[],"core.edit.state":[]}'),
+(166, 47, 183, 186, 6, 'com_content.category.75', 'Menu Module', '{"core.create":[],"core.delete":[],"core.edit":[],"core.edit.state":[]}'),
+(167, 54, 285, 286, 4, 'com_content.category.76', 'Recipes', '{"core.create":{"12":1},"core.delete":[],"core.edit":[],"core.edit.state":[]}'),
+(168, 34, 106, 107, 3, 'com_content.article.67', 'What''s New in 1.5?', '{"core.delete":[],"core.edit":[],"core.edit.state":[]}');
--
-- Dumping data for table `#__banners`
--

INSERT IGNORE INTO `#__banners` VALUES
(2, 1, 0, 'Shop 1', 'shop-1', 0, 16, 0, 'http://shop.joomla.org/amazoncom-bookstores.html', 1, 15, 'Get books about Joomla! at the Joomla! book shop.', '', 0, 1, '', '{"imageurl":"images\\/banners\\/shop-ad-books.jpg","width":"","height":"","alt":"Joomla! Books"}', 0, '', -1, 0, 0, 0, '0000-00-00 00:00:00', '0000-00-00 00:00:00', '0000-00-00 00:00:00', '0000-00-00 00:00:00', '2010-01-12 00:25:24', 'en-GB'),
-(3, 1, 0, 'Shop 2', 'shop-2', 0, 22, 0, 'http://shop.joomla.org', 1, 15, 'T Shirts, caps and more from the Joomla! Shop.', '', 0, 1, '', '{"imageurl":"images\\/banners\\/shop-ad.jpg","width":"","height":"","alt":"Joomla! Shop"}', 0, '', -1, 0, 0, 0, '0000-00-00 00:00:00', '0000-00-00 00:00:00', '0000-00-00 00:00:00', '0000-00-00 00:00:00', '2010-01-12 00:35:30', 'en-GB'),
-(4, 1, 0, 'Support Joomla!', 'support-joomla', 0, 19, 0, 'http://contribute.joomla.org', 1, 15, 'Your contributions of time, talent and money make Joomla! possible.', '', 0, 1, '', '{"imageurl":"images\\/banners\\/white.png","width":"","height":"","alt":""}', 0, '', -1, 0, 0, 0, '0000-00-00 00:00:00', '0000-00-00 00:00:00', '0000-00-00 00:00:00', '0000-00-00 00:00:00', '2010-01-12 00:55:54', 'en-GB');
+(3, 1, 0, 'Shop 2', 'shop-2', 0, 22, 0, 'http://shop.joomla.org', 1, 15, 'T Shirts, caps and more from the Joomla! Shop.', '', 0, 2, '', '{"imageurl":"images\\/banners\\/shop-ad.jpg","width":"","height":"","alt":"Joomla! Shop"}', 0, '', -1, 0, 0, 0, '0000-00-00 00:00:00', '0000-00-00 00:00:00', '0000-00-00 00:00:00', '0000-00-00 00:00:00', '2010-01-12 00:35:30', 'en-GB'),
+(4, 1, 0, 'Support Joomla!', 'support-joomla', 0, 19, 0, 'http://contribute.joomla.org', 1, 15, 'Your contributions of time, talent and money make Joomla! possible.', '', 0, 3, '', '{"imageurl":"images\\/banners\\/white.png","width":"","height":"","alt":""}', 0, '', -1, 0, 0, 0, '0000-00-00 00:00:00', '0000-00-00 00:00:00', '0000-00-00 00:00:00', '0000-00-00 00:00:00', '2010-01-12 00:55:54', 'en-GB');


--
@@ -218,7 +219,7 @@
(34, 59, 16, 68, 69, 2, 'sample-data-contact/park-site', 'com_contact', 'Park Site', 'park-site', '', '', 1, 0, '0000-00-00 00:00:00', 1, '{"target":"","image":""}', '', '', '{"page_title":"","author":"","robots":""}', 42, '2010-07-10 16:28:06', 42, '2010-07-11 22:35:55', 0, 'en-GB'),
(35, 60, 16, 70, 127, 2, 'sample-data-contact/shop-site', 'com_contact', 'Shop Site', 'shop-site', '', '', 1, 0, '0000-00-00 00:00:00', 1, '{"target":"","image":""}', '', '', '{"page_title":"","author":"","robots":""}', 42, '2010-07-10 16:28:20', 0, '0000-00-00 00:00:00', 0, '*'),
(36, 61, 35, 71, 72, 3, 'sample-data-contact/shop-site/staff', 'com_contact', 'Staff', 'staff', '', '<p>Please feel free to contact our staff at any time should you need assistance.</p>', 1, 0, '0000-00-00 00:00:00', 1, '{"target":"","image":""}', '', '', '{"page_title":"","author":"","robots":""}', 42, '2010-07-10 16:29:22', 0, '0000-00-00 00:00:00', 0, '*'),
-(37, 62, 35, 73, 126, 3, 'sample-data-contact/shop-site/fruit-encyclopedia', 'com_contact', 'Fruit Encyclopedia', 'fruit-encyclopedia', '', '<p> </p><p>Our directory of information about different kinds of fruit.</p><p>We love fruit and want the world to know more about all of its many varieties.</p><p>Although it is small now, we work on it whenever we have a chance.</p><p>All of the images can be found in <a href="http://commons.wikimedia.org/wiki/Main_Page">Wikimedia Commons</a>.</p><p><img src="images/sampledata/fruitshop/apple.jpg" border="0" alt="Apples" title="Apples" /></p><p><em>This encyclopedia is implemented using the contact component, each fruit a separate contact and a category for each letter. A CSS style is used to create the horizontal layout of the alphabet headings. </em></p><p><em>If you wanted to, you could allow some users (such as your growers0 to have access to just this category in the contact component and let them help you to create new content !
for the encyclopedia.</em></p><p> </p>', 1, 0, '0000-00-00 00:00:00', 1, '{"target":"","image":""}', '', '', '{"page_title":"","author":"","robots":""}', 42, '2010-07-10 16:41:12', 0, '0000-00-00 00:00:00', 0, '*'),
+(37, 62, 35, 73, 126, 3, 'sample-data-contact/shop-site/fruit-encyclopedia', 'com_contact', 'Fruit Encyclopedia', 'fruit-encyclopedia', '', '<p> </p><p>Our directory of information about different kinds of fruit.</p><p>We love fruit and want the world to know more about all of its many varieties.</p><p>Although it is small now, we work on it whenever we have a chance.</p><p>All of the images can be found in <a href="http://commons.wikimedia.org/wiki/Main_Page">Wikimedia Commons</a>.</p><p><img src="images/sampledata/fruitshop/apple.jpg" border="0" alt="Apples" title="Apples" /></p><p><em>This encyclopedia is implemented using the contact component, each fruit a separate contact and a category for each letter. A CSS style is used to create the horizontal layout of the alphabet headings. </em></p><p><em>If you wanted to, you could allow some users (such as your growers) to have access to just this category in the contact component and let them help you to create new content !
for the encyclopedia.</em></p><p> </p>', 1, 0, '0000-00-00 00:00:00', 1, '{"target":"","image":""}', '', '', '{"page_title":"","author":"","robots":""}', 42, '2010-07-10 16:41:12', 0, '0000-00-00 00:00:00', 0, '*'),
(38, 63, 37, 74, 75, 4, 'sample-data-contact/shop-site/fruit-encyclopedia/a', 'com_contact', 'A', 'a', '', '', 1, 0, '0000-00-00 00:00:00', 1, '{"target":"","image":""}', '', '', '{"page_title":"","author":"","robots":""}', 42, '2010-07-10 16:43:24', 0, '0000-00-00 00:00:00', 0, '*'),
(39, 64, 37, 76, 77, 4, 'sample-data-contact/shop-site/fruit-encyclopedia/b', 'com_contact', 'B', 'b', '', '', 1, 0, '0000-00-00 00:00:00', 1, '{"target":"","image":""}', '', '', '{"page_title":"","author":"","robots":""}', 42, '2010-07-10 16:44:46', 0, '0000-00-00 00:00:00', 0, '*'),
(40, 65, 37, 78, 79, 4, 'sample-data-contact/shop-site/fruit-encyclopedia/c', 'com_contact', 'C', 'c', '', '', 1, 0, '0000-00-00 00:00:00', 1, '{"target":"","image":""}', '', '', '{"page_title":"","author":"","robots":""}', 42, '2010-07-10 16:45:10', 0, '0000-00-00 00:00:00', 0, '*'),
@@ -269,85 +270,86 @@

INSERT IGNORE INTO `#__contact_details` VALUES
(1, 'Contact Name Here', 'name', 'Position', 'Street Address', 'Suburb', 'State', 'Country', 'Zip Code', 'Telephone', 'Fax', '<p>Information about or by the contact.</p>', 'images/powered_by.png', 'top', 'em...@email.com', 1, 1, 0, '0000-00-00 00:00:00', 1, '{"show_contact_category":"","show_contact_list":"","presentation_style":"","show_name":"","show_position":"","show_email":"","show_street_address":"","show_suburb":"","show_state":"","show_postcode":"","show_country":"","show_telephone":"","show_mobile":"","show_fax":"","show_webpage":"","show_misc":"","show_image":"","allow_vcard":"","show_articles":"","show_profile":"","show_links":"","linka_name":"Twitter","linka":"http:\\/\\/twitter.com\\/joomla","linkb_name":"YouTube","linkb":"http:\\/\\/www.youtube.com\\/user\\/joomla","linkc_name":"Ustream","linkc":"http:\\/\\/www.ustream.tv\\/joomla","linkd_name":"FriendFeed","linkd":"http:\\/\\/friendfeed.com\\/joomla","linke_name":"Scribed","linke":"http:\\/\\/www.scribd.com\\!
/people\\/view\\/504592-joomla","show_email_form":"","show_email_copy":"","banned_email":"","banned_subject":"","banned_text":"","validate_session":"","custom_reply":"","redirect":""}', 0, 16, 1, '', '', 'last', 'first', 'middle', 'en-GB', '0000-00-00 00:00:00', 0, '', '2010-07-11 13:07:29', 42, '', '', '{"robots":"","rights":""}', 1, '', '0000-00-00 00:00:00', '0000-00-00 00:00:00'),
-(2, 'Webmaster', 'webmaster', '', '', '', '', '', '', '', '', '', '', NULL, 'webm...@example.com', 0, 1, 0, '0000-00-00 00:00:00', 0, '{"show_contact_category":"","show_contact_list":"","presentation_style":"","show_name":"","show_position":"","show_email":"","show_street_address":"","show_suburb":"","show_state":"","show_postcode":"","show_country":"","show_telephone":"","show_mobile":"","show_fax":"","show_webpage":"","show_misc":"","show_image":"","allow_vcard":"","show_articles":"","show_profile":"","show_links":"","linka_name":"","linka":"","linkb_name":"","linkb":"","linkc_name":"","linkc":"","linkd_name":"","linkd":"","linke_name":"","linke":"","show_email_form":"1","show_email_copy":"1","banned_email":"","banned_subject":"","banned_text":"","validate_session":"1","custom_reply":"","redirect":""}', 0, 34, 1, '', '', '', '', '', 'en-GB', '0000-00-00 00:00:00', 0, '', '2010-07-11 13:07:12', 42, '', '', '{"robots":"","rights":""}', 1, '', '0000-00-00 00:00:00', '0000-!
00-00 00:00:00'),
+(2, 'Webmaster', 'webmaster', '', '', '', '', '', '', '', '', '', '', NULL, 'webm...@example.com', 0, 1, 0, '0000-00-00 00:00:00', 1, '{"show_contact_category":"","show_contact_list":"","presentation_style":"","show_name":"","show_position":"","show_email":"","show_street_address":"","show_suburb":"","show_state":"","show_postcode":"","show_country":"","show_telephone":"","show_mobile":"","show_fax":"","show_webpage":"","show_misc":"","show_image":"","allow_vcard":"","show_articles":"","show_profile":"","show_links":"","linka_name":"","linka":"","linkb_name":"","linkb":"","linkc_name":"","linkc":"","linkd_name":"","linkd":"","linke_name":"","linke":"","show_email_form":"1","show_email_copy":"1","banned_email":"","banned_subject":"","banned_text":"","validate_session":"1","custom_reply":"","redirect":""}', 0, 34, 1, '', '', '', '', '', 'en-GB', '0000-00-00 00:00:00', 0, '', '2010-08-23 03:03:54', 42, '', '', '{"robots":"","rights":""}', 1, '', '0000-00-00 00:00:00', '0000-!
00-00 00:00:00'),
(3, 'Owner', 'owner', '', '', '', '', '', '', '', '', '<p>I''m the owner of this store.</p>', '', NULL, '', 0, 1, 0, '0000-00-00 00:00:00', 2, '{"show_contact_category":"","show_contact_list":"","presentation_style":"","show_name":"","show_position":"","show_email":"","show_street_address":"","show_suburb":"","show_state":"","show_postcode":"","show_country":"","show_telephone":"","show_mobile":"","show_fax":"","show_webpage":"","show_misc":"","show_image":"","allow_vcard":"","show_articles":"","show_profile":"","show_links":"","linka_name":"","linka":"","linkb_name":"","linkb":"","linkc_name":"","linkc":"","linkd_name":"","linkd":"","linke_name":"","linke":"","show_email_form":"","show_email_copy":"","banned_email":"","banned_subject":"","banned_text":"","validate_session":"","custom_reply":"","redirect":""}', 0, 36, 1, '', '', '', '', '', '*', '0000-00-00 00:00:00', 0, '', '2010-07-11 13:07:22', 42, '', '', '{"robots":"","rights":""}', 1, '', '0000-00-00 00:00:00', '0000-!
00-00 00:00:00'),
(4, 'Buyer', 'buyer', '', '', '', '', '', '', '', '', '<p>I am in charge of buying fruit. If you sell good fruit, contact me.</p>', '', NULL, '', 0, 1, 0, '0000-00-00 00:00:00', 1, '{"show_contact_category":"","show_contact_list":"","presentation_style":"","show_name":"","show_position":"","show_email":"","show_street_address":"","show_suburb":"","show_state":"","show_postcode":"","show_country":"","show_telephone":"","show_mobile":"","show_fax":"","show_webpage":"","show_misc":"","show_image":"","allow_vcard":"","show_articles":"","show_profile":"","show_links":"0","linka_name":"","linka":"","linkb_name":"","linkb":"","linkc_name":"","linkc":"","linkd_name":"","linkd":"","linke_name":"","linke":"","show_email_form":"","show_email_copy":"","banned_email":"","banned_subject":"","banned_text":"","validate_session":"","custom_reply":"","redirect":""}', 0, 36, 1, '', '', '', '', '', '*', '0000-00-00 00:00:00', 0, '', '2010-07-10 23:48:49', 42, '', '', '{"robots":"","rights":""}!
', 1, '', '0000-00-00 00:00:00', '0000-00-00 00:00:00'),
(5, 'Bananas', 'bananas', '', '', '', '', '', '', '', '', '<p>Bananas are a great source of potassium.</p><p> </p>', 'images/sampledata/fruitshop/bananas_2.jpg', NULL, '', 0, 1, 0, '0000-00-00 00:00:00', 1, '{"show_contact_category":"","show_contact_list":"","presentation_style":"plain","show_name":"","show_position":"","show_email":"","show_street_address":"","show_suburb":"","show_state":"","show_postcode":"","show_country":"","show_telephone":"","show_mobile":"","show_fax":"","show_webpage":"","show_misc":"","show_image":"","allow_vcard":"","show_articles":"","show_profile":"","show_links":"0","linka_name":"","linka":"","linkb_name":"","linkb":"","linkc_name":"","linkc":"","linkd_name":"","linkd":"","linke_name":"","linke":"","show_email_form":"","show_email_copy":"","banned_email":"","banned_subject":"","banned_text":"","validate_session":"","custom_reply":"","redirect":""}', 0, 39, 1, '', 'http://en.wikipedia.org/wiki/Banana', '', '', '', '*', '0000-00-00 00:00:00', 0!
, '', '2010-07-10 23:49:11', 42, '', '', '{"robots":"","rights":""}', 0, '', '0000-00-00 00:00:00', '0000-00-00 00:00:00'),
(6, 'Apples', 'apples', '', '', '', '', '', '', '', '', '<p>Applies are a versatile fruit, used for eating, cooking, and preserving.</p><p>There are more that 7500 different kinds of apples grown around the world.</p>', 'images/sampledata/fruitshop/apple.jpg', NULL, '', 0, 1, 0, '0000-00-00 00:00:00', 1, '{"show_contact_category":"","show_contact_list":"","presentation_style":"plain","show_name":"","show_position":"","show_email":"","show_street_address":"","show_suburb":"","show_state":"","show_postcode":"","show_country":"","show_telephone":"","show_mobile":"","show_fax":"","show_webpage":"","show_misc":"","show_image":"","allow_vcard":"","show_articles":"","show_profile":"","show_links":"0","linka_name":"","linka":"","linkb_name":"","linkb":"","linkc_name":"","linkc":"","linkd_name":"","linkd":"","linke_name":"","linke":"","show_email_form":"","show_email_copy":"","banned_email":"","banned_subject":"","banned_text":"","validate_session":"","custom_reply":"","redirect":""!
}', 0, 38, 1, '', 'http://en.wikipedia.org/wiki/Apple', '', '', '', '*', '0000-00-00 00:00:00', 0, '', '2010-07-10 23:49:11', 42, '', '', '{"robots":"","rights":""}', 0, '', '0000-00-00 00:00:00', '0000-00-00 00:00:00'),
(7, 'Tamarind', 'tamarind', '', '', '', '', '', '', '', '', '<p>Tamarinds are a versatile fruit used around the world. In its young form it is used in hot sauces; ripened it is the basis for many freshing drinks.</p><p> </p>', 'images/sampledata/fruitshop/tamarind.jpg', NULL, '', 0, 1, 0, '0000-00-00 00:00:00', 1, '{"show_contact_category":"","show_contact_list":"","presentation_style":"plain","show_name":"","show_position":"","show_email":"","show_street_address":"","show_suburb":"","show_state":"","show_postcode":"","show_country":"","show_telephone":"","show_mobile":"","show_fax":"","show_webpage":"","show_misc":"","show_image":"","allow_vcard":"","show_articles":"","show_profile":"","show_links":"","linka_name":"","linka":"","linkb_name":"","linkb":"","linkc_name":"","linkc":"","linkd_name":"","linkd":"","linke_name":"","linke":"","show_email_form":"","show_email_copy":"","banned_email":"","banned_subject":"","banned_text":"","validate_session":"","custom_reply":"","re!
direct":""}', 0, 57, 1, '', 'http://en.wikipedia.org/wiki/Tamarind', '', '', '', '*', '0000-00-00 00:00:00', 0, '', '2010-07-10 23:49:11', 42, '', '', '{"robots":"","rights":""}', 0, '', '0000-00-00 00:00:00', '0000-00-00 00:00:00'),
-(8, 'Shop Address', 'shop-address', '', '', 'Our City', 'Our Province', 'Our Country', '', '555-555-5555', '', '<p>Here are directions for how to get to our shop.</p>', '', NULL, '', 0, 1, 0, '0000-00-00 00:00:00', 0, '{"show_contact_category":"","show_contact_list":"","presentation_style":"","show_name":"","show_position":"","show_email":"","show_street_address":"","show_suburb":"","show_state":"","show_postcode":"","show_country":"","show_telephone":"","show_mobile":"","show_fax":"","show_webpage":"","show_misc":"","show_image":"","allow_vcard":"","show_articles":"","show_profile":"","show_links":"","linka_name":"","linka":"","linkb_name":"","linkb":"","linkc_name":"","linkc":"","linkd_name":"","linkd":"","linke_name":"","linke":"","show_email_form":"","show_email_copy":"","banned_email":"","banned_subject":"","banned_text":"","validate_session":"","custom_reply":"","redirect":""}', 0, 35, 1, '', '', '', '', '', '*', '0000-00-00 00:00:00', 0, '', '2010-07-10 23:39:23', 42!
, '', '', '{"robots":"","rights":""}', 1, '', '0000-00-00 00:00:00', '0000-00-00 00:00:00');
-
+(8, 'Shop Address', 'shop-address', '', '', 'Our City', 'Our Province', 'Our Country', '', '555-555-5555', '', '<p>Here are directions for how to get to our shop.</p>', '', NULL, '', 0, 1, 0, '0000-00-00 00:00:00', 1, '{"show_contact_category":"","show_contact_list":"","presentation_style":"","show_name":"","show_position":"","show_email":"","show_street_address":"","show_suburb":"","show_state":"","show_postcode":"","show_country":"","show_telephone":"","show_mobile":"","show_fax":"","show_webpage":"","show_misc":"","show_image":"","allow_vcard":"","show_articles":"","show_profile":"","show_links":"","linka_name":"","linka":"","linkb_name":"","linkb":"","linkc_name":"","linkc":"","linkd_name":"","linkd":"","linke_name":"","linke":"","show_email_form":"","show_email_copy":"","banned_email":"","banned_subject":"","banned_text":"","validate_session":"","custom_reply":"","redirect":""}', 0, 35, 1, '', '', '', '', '', '*', '0000-00-00 00:00:00', 0, '', '2010-08-23 03:03:54', 42!
, '', '', '{"robots":"","rights":""}', 1, '', '0000-00-00 00:00:00', '0000-00-00 00:00:00');
--
-- Dumping data for table `#__content`
--

INSERT IGNORE INTO `#__content` VALUES
-(1, 89, 'Administrator Components', 'administrator-components', '', '<p>All components also are used in the administrator area of your website. In addition to the ones listed here, there are components in the administrator that do not have direct front end displays, but do help shape your site. The most important ones for most users are</p><ul><li>Media Manager</li><li>Extensions Manager</li><li>Menu Manager</li><li>Configuration</li><li>Banners</li></ul><hr title="Media Manager" alt="Media Manager" class="system-pagebreak" style="color: gray; border: 1px dashed gray;" /><p> </p><h3>Media Manager</h3><p>The media manager component lets you upload and insert images into content throughout your site. Optionally, you can enable the flash uploader which will allow you to to upload multiple images. Help</p><hr title="Extensions Manager" alt="Extensions Manager" class="system-pagebreak" style="color: gray; border: 1px dashed gray;" /><h3>Extensions Manager</h3><p>The extensions!
manager lets you install, update, uninstall and manage all of your extensions. The extensions manager has been extensively redesigned for Joomla! 1.6, although the core install and uninstall functionality remains the same as in Joomla 1.5. Help</p><hr title="Menu Manager" alt="Menu Manager" class="system-pagebreak" style="color: gray; border: 1px dashed gray;" /><h3>Menu Manager</h3><p>The menu manager lets you create the menus you see displayed on your site. It also allows you to assign modules and template styles to specific menu links.  Help</p><hr title="Global Configuration" alt="Global Configuration" class="system-pagebreak" style="color: gray; border: 1px dashed gray;" /><h3>Global Configuration</h3><p>The global configuration is where the site administrator configures things such as whether search engine friendly urls are enabled, the site meta data (descriptive text used by search engines an indexers) and other functions. For many beginning users simply leaving t!
he settings on default is a good way to begin, although when y!
our site
is ready for the public you will want to change the meta data to match its content. Help</p><hr title="Banners" alt="Banners" class="system-pagebreak" style="color: gray; border: 1px dashed gray;" /><h3>Banners</h3><p>The banners component provides a simple way to display a rotating image in a module and, if you wish to have advertising, a way to track the number of times an image is viewed and clicked. Help</p>', '', 1, 0, 0, 21, '2010-07-10 18:03:52', 42, 'Joomla!', '2010-07-10 23:14:32', 42, 0, '0000-00-00 00:00:00', '2010-07-10 18:03:52', '0000-00-00 00:00:00', '', '', '{"show_title":"","link_titles":"","show_intro":"","show_category":"","link_category":"","show_parent_category":"","link_parent_category":"","show_author":"","show_create_date":"","show_modify_date":"","show_publish_date":"","show_readmore":"","show_print_icon":"","show_email_icon":"","show_hits":"","page_title":"","alternative_readmore":"","layout":""}', 5, 0, 6, '', '', 1, 7, '', 0, '*', ''),
-(8, 104, 'Beginners', 'beginners', '', '<p>If this is your first Joomla site or your first web site, you have come to the right place. Joomla will help you get your website up and running quickly and easily.</p><p>Start off using your site by logging in using the administrator account you created when you installed Joomla!.</p>', '<p>Explore the articles and other resources right here on your site data to learn more about how Joomla works.(When you''re done reading, you can delete or archive all of this.) You will also probably want to visit the beginners'' areas of the <a href="http://docs.joomla.org">Joomla documentation</a> and <a href="http://forum.joomla.org">support forums</a>.</p><p>You''ll also want to sign up for the Joomla Security Mailing list and the Announcements mailing list. For inspiration visit the Joomla Site Showcase to see an amazing array of ways people use Joomla to tell their stories on the web.</p><p>The basic Joomla! installation will let you get a !
great site up and running, but when you are ready for more features the power of Joomla! is in the creative ways that developers have extended it to do all kinds of things. Visit the Joomla! Extensions Directory to see thousands of extensions that can do almost anything you could want on a website. Can''t find what you need? You may want to find a Joomla professional on the Joomla! Resources Directory.</p><p>Want to learn more? Consider attending a Joomla! Day or other event or joining a local Joomla! Users Group. Can''t find one near you? Start one yourself.</p>', 1, 0, 0, 19, '2010-07-10 19:50:02', 42, 'Joomla!', '2010-07-10 19:50:53', 42, 0, '0000-00-00 00:00:00', '2010-07-10 19:50:53', '0000-00-00 00:00:00', '', '', '{"show_title":"","link_titles":"","show_intro":"","show_category":"","link_category":"","show_parent_category":"","link_parent_category":"","show_author":"","show_create_date":"","show_modify_date":"","show_publish_date":"","show_readmore":"","show_print_ic!
on":"","show_email_icon":"","show_hits":"","page_title":"","al!
ternativ
e_readmore":"","layout":""}', 3, 0, 0, '', '', 1, 0, '', 1, '*', ''),
-(2, 90, 'Archive Module', 'archive-module', '', '<p>This module shows a list of the calendar months containing archived articles. After you have changed the status of an article to archived, this list will be automatically generated. <a href="http://docs.joomla.org/Screen.modulessite.edit.15#Archived_Content" title="Archive Module">Help</a></p><p>{loadposition archiveload}</p>', '', 1, 0, 0, 64, '2010-07-10 18:05:32', 42, 'Joomla!', '2010-07-10 19:50:13', 42, 0, '0000-00-00 00:00:00', '2010-07-10 18:37:13', '0000-00-00 00:00:00', '', '', '{"show_title":"","link_titles":"","show_intro":"","show_category":"","link_category":"","show_parent_category":"","link_parent_category":"","show_author":"","show_create_date":"","show_modify_date":"","show_publish_date":"","show_readmore":"","show_print_icon":"","show_email_icon":"","show_hits":"","page_title":"","alternative_readmore":"","layout":""}', 5, 0, 1, '', '', 1, 2, '', 0, '*', ''),
-(7, 103, 'Banner Module', 'banner-module', '', '<p>The banner module is used to display the banners that are managed by the banners component in the site administrator.</p><p>{loadposition bannersload}</p>', '', 1, 0, 0, 66, '2010-07-10 19:47:47', 42, 'Joomla!', '2010-07-10 19:50:44', 42, 0, '0000-00-00 00:00:00', '2010-07-10 19:47:47', '0000-00-00 00:00:00', '', '', '{"show_title":"","link_titles":"","show_intro":"","show_category":"","link_category":"","show_parent_category":"","link_parent_category":"","show_author":"","show_create_date":"","show_modify_date":"","show_publish_date":"","show_readmore":"","show_print_icon":"","show_email_icon":"","show_hits":"","page_title":"","alternative_readmore":"","layout":""}', 3, 0, 0, '', '', 1, 3, '', 0, '*', ''),
-(3, 91, 'Article Categories Module', 'article-categories-module', '', '<p>This module displays a list of categories from one parent category. <a href="http://docs.joomla.org/Help15:Screen.modulessite.edit.15#Categories" title="Categories Module">Help</a></p><p>{loadposition articlescategoriesload}</p></div><p> </p>', '', 1, 0, 0, 64, '2010-07-10 18:12:46', 42, '', '2010-07-10 19:40:09', 42, 0, '0000-00-00 00:00:00', '2010-07-10 18:14:22', '0000-00-00 00:00:00', '', '', '{"show_title":"","link_titles":"","show_intro":"","show_category":"","link_category":"","show_parent_category":"","link_parent_category":"","show_author":"","show_create_date":"","show_modify_date":"","show_publish_date":"","show_readmore":"","show_print_icon":"","show_email_icon":"","show_hits":"","page_title":"","alternative_readmore":"","layout":""}', 4, 0, 2, '', '', 1, 1, '', 0, '*', ''),
-(4, 92, 'Articles Category Module', 'articles-category-module', '', '<p>This module allows you to display the articles in a specific category. Help.</p><p>{loadposition articlescategoryload}</p>', '', 1, 0, 0, 64, '2010-07-10 18:14:09', 42, 'Joomla!', '2010-07-10 19:50:27', 42, 0, '0000-00-00 00:00:00', '2010-07-10 18:14:09', '0000-00-00 00:00:00', '', '', '{"show_title":"","link_titles":"","show_intro":"","show_category":"","link_category":"","show_parent_category":"","link_parent_category":"","show_author":"","show_create_date":"","show_modify_date":"","show_publish_date":"","show_readmore":"","show_print_icon":"","show_email_icon":"","show_hits":"","page_title":"","alternative_readmore":"","layout":""}', 5, 0, 3, '', '', 1, 2, '', 0, '*', ''),
-(5, 101, 'Authentication', 'authentication', '', '<p>The authentication plugins operate when users login to your site or administrator. The Joomla! authentication is in operation by default but you can enable Gmail or LDAP or install a plugin for a different system. An example is included that may be used to create a new authentication plugin.</p><p>Default on:</p><ul><li>Joomla</li></ul><p>Default off:</p><ul><li>Gmail</li><li>LDAP</li></ul>', '', 1, 0, 0, 25, '2010-07-10 19:19:17', 42, 'Joomla!', '2010-07-10 19:51:19', 42, 0, '0000-00-00 00:00:00', '2010-07-10 19:39:58', '0000-00-00 00:00:00', '', '', '{"show_title":"","link_titles":"","show_intro":"","show_category":"","link_category":"","show_parent_category":"","link_parent_category":"","show_author":"","show_create_date":"","show_modify_date":"","show_publish_date":"","show_readmore":"","show_print_icon":"","show_email_icon":"","show_hits":"","page_title":"","alternative_readmore":"","layout":""}', 4, 0, 1, '', '', 1,!
2, '', 0, '*', ''),
-(6, 102, 'Australian Parks ', 'australian-parks', '', '<p><img src="images/sampledata/parks/banner_cradle.jpg" border="0" alt="Cradle Park Banner" /></p><p>Welcome!</p><p>This is a basic site about the beautiful and fascinating parks of Australia.</p><p>On this site you can read all about my travels to different parks, see photos, and find links to park websites.</p><p><em>This sample site is an example of using the core of Joomla! to create a basic website, whether a "brochure site,"  a personal blog, or as a way to present information on a topic you are interested in.</em></p><p><em> Read more about the site in the About Parks module.</em></p><p> </p>', '', 1, 0, 0, 26, '2010-07-10 19:24:58', 42, 'Parks webmaster', '2010-07-10 19:51:09', 42, 0, '0000-00-00 00:00:00', '2010-07-10 19:39:52', '0000-00-00 00:00:00', '', '', '{"show_title":"","link_titles":"","show_intro":"","show_category":"","link_category":"","show_parent_category":"","link_parent_category":"","show_autho!
r":"","show_create_date":"","show_modify_date":"","show_publish_date":"","show_readmore":"","show_print_icon":"","show_email_icon":"","show_hits":"","page_title":"","alternative_readmore":"","layout":""}', 4, 0, 1, '', '', 1, 6, '', 0, '*', ''),
+(1, 89, 'Administrator Components', 'administrator-components', '', '<p>All components also are used in the administrator area of your website. In addition to the ones listed here, there are components in the administrator that do not have direct front end displays, but do help shape your site. The most important ones for most users are</p><ul><li>Media Manager</li><li>Extensions Manager</li><li>Menu Manager</li><li>Configuration</li><li>Banners</li></ul><hr title="Media Manager" alt="Media Manager" class="system-pagebreak" style="color: gray; border: 1px dashed gray;" /><p> </p><h3>Media Manager</h3><p>The media manager component lets you upload and insert images into content throughout your site. Optionally, you can enable the flash uploader which will allow you to to upload multiple images. Help</p><hr title="Extensions Manager" alt="Extensions Manager" class="system-pagebreak" style="color: gray; border: 1px dashed gray;" /><h3>Extensions Manager</h3><p>The extensions!
manager lets you install, update, uninstall and manage all of your extensions. The extensions manager has been extensively redesigned for Joomla! 1.6, although the core install and uninstall functionality remains the same as in Joomla 1.5. Help</p><hr title="Menu Manager" alt="Menu Manager" class="system-pagebreak" style="color: gray; border: 1px dashed gray;" /><h3>Menu Manager</h3><p>The menu manager lets you create the menus you see displayed on your site. It also allows you to assign modules and template styles to specific menu links.  Help</p><hr title="Global Configuration" alt="Global Configuration" class="system-pagebreak" style="color: gray; border: 1px dashed gray;" /><h3>Global Configuration</h3><p>The global configuration is where the site administrator configures things such as whether search engine friendly urls are enabled, the site meta data (descriptive text used by search engines an indexers) and other functions. For many beginning users simply leaving t!
he settings on default is a good way to begin, although when y!
our site
is ready for the public you will want to change the meta data to match its content. Help</p><hr title="Banners" alt="Banners" class="system-pagebreak" style="color: gray; border: 1px dashed gray;" /><h3>Banners</h3><p>The banners component provides a simple way to display a rotating image in a module and, if you wish to have advertising, a way to track the number of times an image is viewed and clicked. Help</p>', '', 1, 0, 0, 21, '2010-07-10 18:03:52', 42, 'Joomla!', '2010-08-23 03:00:39', 42, 0, '0000-00-00 00:00:00', '2010-07-10 18:03:52', '0000-00-00 00:00:00', '', '', '{"show_title":"","link_titles":"","show_intro":"","show_category":"","link_category":"","show_parent_category":"","link_parent_category":"","show_author":"","show_create_date":"","show_modify_date":"","show_publish_date":"","show_readmore":"","show_print_icon":"","show_email_icon":"","show_hits":"","page_title":"","alternative_readmore":"","layout":""}', 5, 0, 7, '', '', 1, 7, '', 0, '*', ''),
+(8, 104, 'Beginners', 'beginners', '', '<p>If this is your first Joomla site or your first web site, you have come to the right place. Joomla will help you get your website up and running quickly and easily.</p><p>Start off using your site by logging in using the administrator account you created when you installed Joomla!.</p>', '<p>Explore the articles and other resources right here on your site data to learn more about how Joomla works.(When you''re done reading, you can delete or archive all of this.) You will also probably want to visit the beginners'' areas of the <a href="http://docs.joomla.org">Joomla documentation</a> and <a href="http://forum.joomla.org">support forums</a>.</p><p>You''ll also want to sign up for the Joomla Security Mailing list and the Announcements mailing list. For inspiration visit the Joomla Site Showcase to see an amazing array of ways people use Joomla to tell their stories on the web.</p><p>The basic Joomla! installation will let you get a !
great site up and running, but when you are ready for more features the power of Joomla! is in the creative ways that developers have extended it to do all kinds of things. Visit the Joomla! Extensions Directory to see thousands of extensions that can do almost anything you could want on a website. Can''t find what you need? You may want to find a Joomla professional on the Joomla! Resources Directory.</p><p>Want to learn more? Consider attending a Joomla! Day or other event or joining a local Joomla! Users Group. Can''t find one near you? Start one yourself.</p>', 1, 0, 0, 19, '2010-07-10 19:50:02', 42, 'Joomla!', '2010-08-23 03:02:28', 42, 0, '0000-00-00 00:00:00', '2010-07-10 19:50:53', '0000-00-00 00:00:00', '', '', '{"show_title":"","link_titles":"","show_intro":"","show_category":"","link_category":"","show_parent_category":"","link_parent_category":"","show_author":"","show_create_date":"","show_modify_date":"","show_publish_date":"","show_readmore":"","show_print_ic!
on":"","show_email_icon":"","show_hits":"","page_title":"","al!
ternativ
e_readmore":"","layout":""}', 3, 0, 3, '', '', 1, 0, '', 1, '*', ''),
+(2, 90, 'Archive Module', 'archive-module', '', '<p>This module shows a list of the calendar months containing archived articles. After you have changed the status of an article to archived, this list will be automatically generated. <a href="http://docs.joomla.org/Screen.modulessite.edit.15#Archived_Content" title="Archive Module">Help</a></p><p>{loadposition archiveload}</p>', '', 1, 0, 0, 64, '2010-07-10 18:05:32', 42, 'Joomla!', '2010-08-23 03:00:39', 42, 0, '0000-00-00 00:00:00', '2010-07-10 18:37:13', '0000-00-00 00:00:00', '', '', '{"show_title":"","link_titles":"","show_intro":"","show_category":"","link_category":"","show_parent_category":"","link_parent_category":"","show_author":"","show_create_date":"","show_modify_date":"","show_publish_date":"","show_readmore":"","show_print_icon":"","show_email_icon":"","show_hits":"","page_title":"","alternative_readmore":"","layout":""}', 5, 0, 5, '', '', 1, 2, '', 0, '*', ''),
+(7, 103, 'Banner Module', 'banner-module', '', '<p>The banner module is used to display the banners that are managed by the banners component in the site administrator.</p><p>{loadposition bannersload}</p>', '', 1, 0, 0, 66, '2010-07-10 19:47:47', 42, 'Joomla!', '2010-08-23 03:00:39', 42, 0, '0000-00-00 00:00:00', '2010-07-10 19:47:47', '0000-00-00 00:00:00', '', '', '{"show_title":"","link_titles":"","show_intro":"","show_category":"","link_category":"","show_parent_category":"","link_parent_category":"","show_author":"","show_create_date":"","show_modify_date":"","show_publish_date":"","show_readmore":"","show_print_icon":"","show_email_icon":"","show_hits":"","page_title":"","alternative_readmore":"","layout":""}', 3, 0, 6, '', '', 1, 3, '', 0, '*', ''),
+(3, 91, 'Article Categories Module', 'article-categories-module', '', '<p>This module displays a list of categories from one parent category. <a href="http://docs.joomla.org/Help15:Screen.modulessite.edit.15#Categories" title="Categories Module">Help</a></p><p>{loadposition articlescategoriesload}</p></div><p> </p>', '', 1, 0, 0, 64, '2010-07-10 18:12:46', 42, '', '2010-08-23 03:00:39', 42, 0, '0000-00-00 00:00:00', '2010-07-10 18:14:22', '0000-00-00 00:00:00', '', '', '{"show_title":"","link_titles":"","show_intro":"","show_category":"","link_category":"","show_parent_category":"","link_parent_category":"","show_author":"","show_create_date":"","show_modify_date":"","show_publish_date":"","show_readmore":"","show_print_icon":"","show_email_icon":"","show_hits":"","page_title":"","alternative_readmore":"","layout":""}', 4, 0, 6, '', '', 1, 1, '', 0, '*', ''),
+(4, 92, 'Articles Category Module', 'articles-category-module', '', '<p>This module allows you to display the articles in a specific category. Help.</p><p>{loadposition articlescategoryload}</p>', '', 1, 0, 0, 64, '2010-07-10 18:14:09', 42, 'Joomla!', '2010-08-23 03:00:39', 42, 0, '0000-00-00 00:00:00', '2010-07-10 18:14:09', '0000-00-00 00:00:00', '', '', '{"show_title":"","link_titles":"","show_intro":"","show_category":"","link_category":"","show_parent_category":"","link_parent_category":"","show_author":"","show_create_date":"","show_modify_date":"","show_publish_date":"","show_readmore":"","show_print_icon":"","show_email_icon":"","show_hits":"","page_title":"","alternative_readmore":"","layout":""}', 5, 0, 7, '', '', 1, 2, '', 0, '*', ''),
+(5, 101, 'Authentication', 'authentication', '', '<p>The authentication plugins operate when users login to your site or administrator. The Joomla! authentication is in operation by default but you can enable Gmail or LDAP or install a plugin for a different system. An example is included that may be used to create a new authentication plugin.</p><p>Default on:</p><ul><li>Joomla</li></ul><p>Default off:</p><ul><li>Gmail</li><li>LDAP</li></ul>', '', 1, 0, 0, 25, '2010-07-10 19:19:17', 42, 'Joomla!', '2010-07-10 19:51:19', 42, 0, '0000-00-00 00:00:00', '2010-07-10 19:39:58', '0000-00-00 00:00:00', '', '', '{"show_title":"","link_titles":"","show_intro":"","show_category":"","link_category":"","show_parent_category":"","link_parent_category":"","show_author":"","show_create_date":"","show_modify_date":"","show_publish_date":"","show_readmore":"","show_print_icon":"","show_email_icon":"","show_hits":"","page_title":"","alternative_readmore":"","layout":""}', 4, 0, 3, '', '', 1,!
2, '', 0, '*', ''),
+(6, 102, 'Australian Parks ', 'australian-parks', '', '<p><img src="images/sampledata/parks/banner_cradle.jpg" border="0" alt="Cradle Park Banner" /></p><p>Welcome!</p><p>This is a basic site about the beautiful and fascinating parks of Australia.</p><p>On this site you can read all about my travels to different parks, see photos, and find links to park websites.</p><p><em>This sample site is an example of using the core of Joomla! to create a basic website, whether a "brochure site,"  a personal blog, or as a way to present information on a topic you are interested in.</em></p><p><em> Read more about the site in the About Parks module.</em></p><p> </p>', '', 1, 0, 0, 26, '2010-07-10 19:24:58', 42, 'Parks webmaster', '2010-07-10 19:51:09', 42, 0, '0000-00-00 00:00:00', '2010-07-10 19:39:52', '0000-00-00 00:00:00', '', '', '{"show_title":"","link_titles":"","show_intro":"","show_category":"","link_category":"","show_parent_category":"","link_parent_category":"","show_autho!
r":"","show_create_date":"","show_modify_date":"","show_publish_date":"","show_readmore":"","show_print_icon":"","show_email_icon":"","show_hits":"","page_title":"","alternative_readmore":"","layout":""}', 4, 0, 1, '', '', 1, 7, '', 0, '*', ''),
(9, 105, 'Contact', 'contact', '', '<p>The contact component provides a way to provide contact forms and information for your site or to create a complex directory that can be used for many different purposes. Help</p>', '', 1, 0, 0, 21, '2010-07-10 19:54:09', 42, 'Joomla!', '2010-07-10 23:13:05', 42, 0, '0000-00-00 00:00:00', '2010-07-10 23:13:05', '0000-00-00 00:00:00', '', '', '{"show_title":"","link_titles":"","show_intro":"","show_category":"","link_category":"","show_parent_category":"","link_parent_category":"","show_author":"","show_create_date":"","show_modify_date":"","show_publish_date":"","show_readmore":"","show_print_icon":"","show_email_icon":"","show_hits":"","page_title":"","alternative_readmore":"","layout":""}', 3, 0, 2, '', '', 1, 4, '', 0, '*', ''),
(10, 106, 'Content', 'content', '', '<p>The content component (com_content) is what you use to write articles. It is extremely flexible and has the largest number of built in views. Articles can be created an edited from the front end, making content the easiest component to use to create your site content. Help</p>', '', 1, 0, 0, 21, '2010-07-10 19:56:38', 42, '', '2010-07-10 23:13:20', 42, 0, '0000-00-00 00:00:00', '2010-07-10 23:13:20', '0000-00-00 00:00:00', '', '', '{"show_title":"","link_titles":"","show_intro":"","show_category":"","link_category":"","show_parent_category":"","link_parent_category":"","show_author":"","show_create_date":"","show_modify_date":"","show_publish_date":"","show_readmore":"","show_print_icon":"","show_email_icon":"","show_hits":"","page_title":"","alternative_readmore":"","layout":""}', 4, 0, 1, '', '', 1, 5, '', 0, '*', ''),
-(11, 107, 'Cradle Mountain', 'cradle-mountain', '', '<p><img src="images/sampledata/parks/landscape/250px_cradle_mountain_seen_from_barn_bluff.jpg" border="0" alt="Cradle Mountain" style="vertical-align: middle;" /></p>', '<p><img src="images/sampledata/parks/landscape/800px_cradle_mountain_seen_from_barn_bluff.jpg" border="0" alt="Cradle Mountain" style="vertical-align: middle;" /></p><p> </p><p class="caption">Source: http://commons.wikimedia.org/wiki/File:Rainforest,bluemountainsNSW.jpg</p><p class="caption">Author: Alan J.W.C.</p><p class="caption">License: GNU Free Documentation License v . 1.2 or later</p>', 1, 0, 0, 73, '2010-07-10 20:01:42', 42, 'Parks Webmaster', '2010-07-10 20:28:25', 42, 0, '0000-00-00 00:00:00', '2010-07-10 20:06:01', '0000-00-00 00:00:00', '', '', '{"show_title":"","link_titles":"","show_intro":"","show_category":"","link_category":"","show_parent_category":"","link_parent_category":"","show_author":"","show_create_date":"","show_modify_date":!
"","show_publish_date":"","show_readmore":"","show_print_icon":"","show_email_icon":"","show_hits":"","page_title":"","alternative_readmore":"","layout":""}', 4, 0, 0, '', '', 1, 0, '', 0, '*', ''),
-(12, 110, 'Custom HTML Module', 'custom-html-module', '', '<p>This Module allows you to create your own HTML Module using a WYSIWYG editor. <a href="http://docs.joomla.org/Help15:Screen.modulessite.edit.15#Custom_HTML" title="Custom HTML Module">Help</a></p><p>{loadposition customload}</p>', '', 1, 0, 0, 66, '2010-07-10 20:07:23', 42, '', '0000-00-00 00:00:00', 0, 0, '0000-00-00 00:00:00', '2010-07-10 20:07:23', '0000-00-00 00:00:00', '', '', '{"show_title":"","link_titles":"","show_intro":"","show_category":"","link_category":"","show_parent_category":"","link_parent_category":"","show_author":"","show_create_date":"","show_modify_date":"","show_publish_date":"","show_readmore":"","show_print_icon":"","show_email_icon":"","show_hits":"","page_title":"","alternative_readmore":"","layout":""}', 2, 0, 0, '', '', 1, 4, '', 0, '*', ''),
-(13, 111, 'Directions', 'directions', '', '<p>Here''s how to find our shop.</p><p>By car</p><p>Drive along Main Street to the intersection with First Avenue.  Look for our sign.</p><p>By foot</p><p>From the center of town, walk north on Main Street until you see our sign.</p><p>By bus</p><p>Take the #73 Bus to the last stop. We are on the north east corner.</p>', '', 1, 0, 0, 29, '2010-07-10 20:12:32', 42, 'Fruit Shop Webmaster', '2010-07-10 20:28:03', 42, 0, '0000-00-00 00:00:00', '2010-07-10 20:12:32', '0000-00-00 00:00:00', '', '', '{"show_title":"","link_titles":"","show_intro":"","show_category":"","link_category":"","show_parent_category":"","link_parent_category":"","show_author":"","show_create_date":"","show_modify_date":"","show_publish_date":"","show_readmore":"","show_print_icon":"","show_email_icon":"","show_hits":"","page_title":"","alternative_readmore":"","layout":""}', 3, 0, 0, '', '', 1, 3, '', 0, '*', ''),
-(14, 112, 'Editors', 'editors', '', '<p>Editors are used thoughout Joomla! where content is created. TinyMCE is the default choice in most locations although CodeMirror is used in the template manager. No Editor provides a text box for html content.</p><p>Default on:</p><ul><li>CodeMirror Help</li><li>TinyMCE Help</li><li>No Editor Help</li></ul><p>Default off:</p><ul><li>None</li></ul>', '', 1, 0, 0, 25, '2010-07-10 20:26:06', 42, 'Joomla!', '2010-07-10 23:15:11', 42, 0, '0000-00-00 00:00:00', '2010-07-10 20:26:06', '0000-00-00 00:00:00', '', '', '{"show_title":"","link_titles":"","show_intro":"","show_category":"","link_category":"","show_parent_category":"","link_parent_category":"","show_author":"","show_create_date":"","show_modify_date":"","show_publish_date":"","show_readmore":"","show_print_icon":"","show_email_icon":"","show_hits":"","page_title":"","alternative_readmore":"","layout":""}', 4, 0, 0, '', '', 1, 3, '', 0, '*', ''),
-(15, 113, 'Editors-xtd', 'editors-xtd', '', '<p>These plugins are behind the buttons found beneath your editor. They only run when an editor plugin runs.</p><p>Default on:</p><ul><li>Editor Button: Image</li><li>Editor Button: Readmore</li><li>Editor Button: Page Break</li><li>Editor Button: Article</li></ul><p>Default off:</p><ul><li>None</li></ul>', '', 1, 0, 0, 25, '2010-07-10 20:27:20', 42, 'Joomla!', '0000-00-00 00:00:00', 0, 0, '0000-00-00 00:00:00', '2010-07-10 20:27:20', '0000-00-00 00:00:00', '', '', '{"show_title":"","link_titles":"","show_intro":"","show_category":"","link_category":"","show_parent_category":"","link_parent_category":"","show_author":"","show_create_date":"","show_modify_date":"","show_publish_date":"","show_readmore":"","show_print_icon":"","show_email_icon":"","show_hits":"","page_title":"","alternative_readmore":"","layout":""}', 2, 0, 0, '', '', 1, 2, '', 0, '*', ''),
-(16, 114, 'Feed Display', 'feed-display', '', '<p>This module allows the displaying of a syndicated feed. <a href="http://docs.joomla.org/Help15:Screen.modulessite.edit.15#Feed_Display" title="Feed Display Module">Help</a></p><p>{loadposition feeddisplayload}</p>', '', 1, 0, 0, 66, '2010-07-10 20:29:29', 42, '', '0000-00-00 00:00:00', 0, 0, '0000-00-00 00:00:00', '0000-00-00 00:00:00', '0000-00-00 00:00:00', '', '', '{"show_title":"","link_titles":"","show_intro":"","show_category":"","link_category":"","show_parent_category":"","link_parent_category":"","show_author":"","show_create_date":"","show_modify_date":"","show_publish_date":"","show_readmore":"","show_print_icon":"","show_email_icon":"","show_hits":"","page_title":"","alternative_readmore":"","layout":""}', 2, 0, 0, '', '', 1, 4, '', 0, '*', ''),
+(11, 107, 'Cradle Mountain', 'cradle-mountain', '', '<p><img src="images/sampledata/parks/landscape/250px_cradle_mountain_seen_from_barn_bluff.jpg" border="0" alt="Cradle Mountain" style="vertical-align: middle;" /></p>', '<p><img src="images/sampledata/parks/landscape/800px_cradle_mountain_seen_from_barn_bluff.jpg" border="0" alt="Cradle Mountain" style="vertical-align: middle;" /></p><p> </p><p class="caption">Source: http://commons.wikimedia.org/wiki/File:Rainforest,bluemountainsNSW.jpg</p><p class="caption">Author: Alan J.W.C.</p><p class="caption">License: GNU Free Documentation License v . 1.2 or later</p>', 1, 0, 0, 73, '2010-07-10 20:01:42', 42, 'Parks Webmaster', '2010-08-23 02:58:49', 42, 0, '0000-00-00 00:00:00', '2010-07-10 20:06:01', '0000-00-00 00:00:00', '', '', '{"show_title":"","link_titles":"","show_intro":"","show_category":"","link_category":"","show_parent_category":"","link_parent_category":"","show_author":"","show_create_date":"","show_modify_date":!
"","show_publish_date":"","show_readmore":"","show_print_icon":"","show_email_icon":"","show_hits":"","page_title":"","alternative_readmore":"","layout":""}', 4, 0, 1, '', '', 1, 0, '', 0, '*', ''),
+(12, 110, 'Custom HTML Module', 'custom-html-module', '', '<p>This Module allows you to create your own HTML Module using a WYSIWYG editor. <a href="http://docs.joomla.org/Help15:Screen.modulessite.edit.15#Custom_HTML" title="Custom HTML Module">Help</a></p><p>{loadposition customload}</p>', '', 1, 0, 0, 66, '2010-07-10 20:07:23', 42, '', '0000-00-00 00:00:00', 0, 0, '0000-00-00 00:00:00', '2010-07-10 20:07:23', '0000-00-00 00:00:00', '', '', '{"show_title":"","link_titles":"","show_intro":"","show_category":"","link_category":"","show_parent_category":"","link_parent_category":"","show_author":"","show_create_date":"","show_modify_date":"","show_publish_date":"","show_readmore":"","show_print_icon":"","show_email_icon":"","show_hits":"","page_title":"","alternative_readmore":"","layout":""}', 2, 0, 1, '', '', 1, 4, '', 0, '*', ''),
+(13, 111, 'Directions', 'directions', '', '<p>Here''s how to find our shop.</p><p>By car</p><p>Drive along Main Street to the intersection with First Avenue.  Look for our sign.</p><p>By foot</p><p>From the center of town, walk north on Main Street until you see our sign.</p><p>By bus</p><p>Take the #73 Bus to the last stop. We are on the north east corner.</p>', '', 1, 0, 0, 29, '2010-07-10 20:12:32', 42, 'Fruit Shop Webmaster', '2010-08-23 03:02:28', 42, 0, '0000-00-00 00:00:00', '2010-07-10 20:12:32', '0000-00-00 00:00:00', '', '', '{"show_title":"","link_titles":"","show_intro":"","show_category":"","link_category":"","show_parent_category":"","link_parent_category":"","show_author":"","show_create_date":"","show_modify_date":"","show_publish_date":"","show_readmore":"","show_print_icon":"","show_email_icon":"","show_hits":"","page_title":"","alternative_readmore":"","layout":""}', 3, 0, 2, '', '', 1, 3, '', 0, '*', ''),
+(14, 112, 'Editors', 'editors', '', '<p>Editors are used thoughout Joomla! where content is created. TinyMCE is the default choice in most locations although CodeMirror is used in the template manager. No Editor provides a text box for html content.</p><p>Default on:</p><ul><li>CodeMirror Help</li><li>TinyMCE Help</li><li>No Editor Help</li></ul><p>Default off:</p><ul><li>None</li></ul>', '', 1, 0, 0, 25, '2010-07-10 20:26:06', 42, 'Joomla!', '2010-08-23 02:58:49', 42, 0, '0000-00-00 00:00:00', '2010-07-10 20:26:06', '0000-00-00 00:00:00', '', '', '{"show_title":"","link_titles":"","show_intro":"","show_category":"","link_category":"","show_parent_category":"","link_parent_category":"","show_author":"","show_create_date":"","show_modify_date":"","show_publish_date":"","show_readmore":"","show_print_icon":"","show_email_icon":"","show_hits":"","page_title":"","alternative_readmore":"","layout":""}', 4, 0, 5, '', '', 1, 3, '', 0, '*', ''),
+(15, 113, 'Editors-xtd', 'editors-xtd', '', '<p>These plugins are behind the buttons found beneath your editor. They only run when an editor plugin runs.</p><p>Default on:</p><ul><li>Editor Button: Image</li><li>Editor Button: Readmore</li><li>Editor Button: Page Break</li><li>Editor Button: Article</li></ul><p>Default off:</p><ul><li>None</li></ul>', '', 1, 0, 0, 25, '2010-07-10 20:27:20', 42, 'Joomla!', '2010-08-23 02:58:49', 42, 0, '0000-00-00 00:00:00', '2010-07-10 20:27:20', '0000-00-00 00:00:00', '', '', '{"show_title":"","link_titles":"","show_intro":"","show_category":"","link_category":"","show_parent_category":"","link_parent_category":"","show_author":"","show_create_date":"","show_modify_date":"","show_publish_date":"","show_readmore":"","show_print_icon":"","show_email_icon":"","show_hits":"","page_title":"","alternative_readmore":"","layout":""}', 2, 0, 6, '', '', 1, 2, '', 0, '*', ''),
+(16, 114, 'Feed Display', 'feed-display', '', '<p>This module allows the displaying of a syndicated feed. <a href="http://docs.joomla.org/Help15:Screen.modulessite.edit.15#Feed_Display" title="Feed Display Module">Help</a></p><p>{loadposition feeddisplayload}</p>', '', 1, 0, 0, 66, '2010-07-10 20:29:29', 42, '', '0000-00-00 00:00:00', 0, 0, '0000-00-00 00:00:00', '0000-00-00 00:00:00', '0000-00-00 00:00:00', '', '', '{"show_title":"","link_titles":"","show_intro":"","show_category":"","link_category":"","show_parent_category":"","link_parent_category":"","show_author":"","show_create_date":"","show_modify_date":"","show_publish_date":"","show_readmore":"","show_print_icon":"","show_email_icon":"","show_hits":"","page_title":"","alternative_readmore":"","layout":""}', 2, 0, 2, '', '', 1, 4, '', 0, '*', ''),
(17, 115, 'First Blog Post', 'first-blog-post', '', '<p><em>Lorem Ipsum is filler text that is commonly used by designers before the content for a new site is ready.</em></p><p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed faucibus purus vitae diam posuere nec eleifend elit dictum. Aenean sit amet erat purus, id fermentum lorem. Integer elementum tristique lectus, non posuere quam pretium sed. Quisque scelerisque erat at urna condimentum euismod. Fusce vestibulum facilisis est, a accumsan massa aliquam in. In auctor interdum mauris a luctus. Morbi euismod tempor dapibus. Duis dapibus posuere quam. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. In eu est nec erat sollicitudin hendrerit. Pellentesque sed turpis nunc, sit amet laoreet velit. Praesent vulputate semper nulla nec varius. Aenean aliquam, justo at blandit sodales, mauris leo viverra orci, sed sodales mauris orci vitae magna.</p>', '<p>Quisque a massa sed!
libero tristique suscipit. Morbi tristique molestie metus, vel vehicula nisl ultrices pretium. Sed sit amet est et sapien condimentum viverra. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Phasellus viverra tortor porta orci convallis ac cursus erat sagittis. Vivamus aliquam, purus non luctus adipiscing, orci urna imperdiet eros, sed tincidunt neque sapien et leo. Cras fermentum, dolor id tempor vestibulum, neque lectus luctus mauris, nec congue tellus arcu nec augue. Nulla quis mi arcu, in bibendum quam. Sed placerat laoreet fermentum. In varius lobortis consequat. Proin vulputate felis ac arcu lacinia adipiscing. Morbi molestie, massa id sagittis luctus, sem sapien sollicitudin quam, in vehicula quam lectus quis augue. Integer orci lectus, bibendum in fringilla sit amet, rutrum eget enim. Curabitur at libero vitae lectus gravida luctus. Nam mattis, ligula sit amet vestibulum feugiat, eros sem sodales mi, nec dignissim ante !
elit quis nisi. Nulla nec magna ut leo convallis sagittis ac n!
on erat.
Etiam in augue nulla, sed tristique orci. Vestibulum quis eleifend sapien.</p><p>Nam ut orci vel felis feugiat posuere ut eu lorem. In risus tellus, sodales eu eleifend sed, imperdiet id nulla. Nunc at enim lacus. Etiam dignissim, arcu quis accumsan varius, dui dui faucibus erat, in molestie mauris diam ac lacus. Sed sit amet egestas nunc. Nam sollicitudin lacinia sapien, non gravida eros convallis vitae. Integer vehicula dui a elit placerat venenatis. Nullam tincidunt ligula aliquet dui interdum feugiat. Maecenas ultricies, lacus quis facilisis vehicula, lectus diam consequat nunc, euismod eleifend metus felis eu mauris. Aliquam dapibus, ipsum a dapibus commodo, dolor arcu accumsan neque, et tempor metus arcu ut massa. Curabitur non risus vitae nisl ornare pellentesque. Pellentesque nec ipsum eu dolor sodales aliquet. Vestibulum egestas scelerisque tincidunt. Integer adipiscing ultrices erat vel rhoncus.</p><p>Integer ac lectus ligula. Nam ornare nisl id magna tincidunt ul!
trices. Phasellus est nisi, condimentum at sollicitudin vel, consequat eu ipsum. In venenatis ipsum in ligula tincidunt bibendum id et leo. Vivamus quis purus massa. Ut enim magna, pharetra ut condimentum malesuada, auctor ut ligula. Proin mollis, urna a aliquam rutrum, risus erat cursus odio, a convallis enim lectus ut lorem. Nullam semper egestas quam non mattis. Vestibulum venenatis aliquet arcu, consectetur pretium erat pulvinar vel. Vestibulum in aliquet arcu. Ut dolor sem, pellentesque sit amet vestibulum nec, tristique in orci. Sed lacinia metus vel purus pretium sit amet commodo neque condimentum.</p><p>Aenean laoreet aliquet ullamcorper. Nunc tincidunt luctus tellus, eu lobortis sapien tincidunt sed. Donec luctus accumsan sem, at porttitor arcu vestibulum in. Sed suscipit malesuada arcu, ac porttitor orci volutpat in. Vestibulum consectetur vulputate eros ut porttitor. Aenean dictum urna quis erat rutrum nec malesuada tellus elementum. Quisque faucibus, turpis nec !
consectetur vulputate, mi enim semper mi, nec porttitor libero!
magna u
t lacus. Quisque sodales, leo ut fermentum ullamcorper, tellus augue gravida magna, eget ultricies felis dolor vitae justo. Vestibulum blandit placerat neque, imperdiet ornare ipsum malesuada sed. Quisque bibendum quam porta diam molestie luctus. Sed metus lectus, ornare eu vulputate vel, eleifend facilisis augue. Maecenas eget urna velit, ac volutpat velit. Nam id bibendum ligula. Donec pellentesque, velit eu convallis sodales, nisi dui egestas nunc, et scelerisque lectus quam ut ipsum.</p>', 1, 0, 0, 27, '2010-07-10 20:31:31', 42, '', '2010-07-10 20:34:02', 42, 0, '0000-00-00 00:00:00', '2010-07-10 20:33:58', '0000-00-00 00:00:00', '', '', '{"show_title":"","link_titles":"","show_intro":"","show_category":"","link_category":"","show_parent_category":"","link_parent_category":"","show_author":"","show_create_date":"","show_modify_date":"","show_publish_date":"","show_readmore":"","show_print_icon":"","show_email_icon":"","show_hits":"","page_title":"","alternative_readmore"!
:"","layout":""}', 4, 0, 0, '', '', 1, 5, '', 0, '*', ''),
(18, 116, 'Second Blog Post', 'second-blog-post', '', '<p><em>Lorem Ipsum is text that is traditionally used by designers when working on a site before the content is ready.</em></p><p>Pellentesque bibendum metus ut dolor fermentum ut pulvinar tortor hendrerit. Nam vel odio vel diam tempus iaculis in non urna. Curabitur scelerisque, nunc id interdum vestibulum, felis elit luctus dui, ac dapibus tellus mauris tempus augue. Duis congue facilisis lobortis. Phasellus neque erat, tincidunt non lacinia sit amet, rutrum vitae nunc. Sed placerat lacinia fermentum. Integer justo sem, cursus id tristique eget, accumsan vel sapien. Curabitur ipsum neque, elementum vel vestibulum ut, lobortis a nisl. Fusce malesuada mollis purus consectetur auctor. Morbi tellus nunc, dapibus sit amet rutrum vel, laoreet quis mauris. Aenean nec sem nec purus bibendum venenatis. Mauris auctor commodo libero, in adipiscing dui adipiscing eu. Praesent eget orci ac nunc sodales varius.</p>', '<p>Nam eget ve!
nenatis lorem. Vestibulum a interdum sapien. Suspendisse potenti. Quisque auctor purus nec sapien venenatis vehicula malesuada velit vehicula. Fusce vel diam dolor, quis facilisis tortor. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Pellentesque libero nisi, pellentesque quis cursus sit amet, vehicula vitae nisl. Curabitur nec nunc ac sem tincidunt auctor. Phasellus in mattis magna. Donec consequat orci eget tortor ultricies rutrum. Mauris luctus vulputate molestie. Proin tincidunt vehicula euismod. Nam congue leo non erat cursus a adipiscing ipsum congue. Nulla iaculis purus sit amet turpis aliquam sit amet dapibus odio tincidunt. Ut augue diam, congue ut commodo pellentesque, fermentum mattis leo. Sed iaculis urna id enim dignissim sodales at a ipsum. Quisque varius lobortis mollis. Nunc purus magna, pellentesque pellentesque convallis sed, varius id ipsum. Etiam commodo mi mollis erat scelerisque fringilla. Nullam bibendum m!
assa sagittis diam ornare rutrum.</p><p>Praesent convallis met!
us ut el
it faucibus tempus in quis dui. Donec fringilla imperdiet nibh, sit amet fringilla velit congue et. Quisque commodo luctus ligula, vitae porttitor eros venenatis in. Praesent aliquet commodo orci id varius. Nulla nulla nibh, varius id volutpat nec, sagittis nec eros. Cras et dui justo. Curabitur malesuada facilisis neque, sed tempus massa tincidunt ut. Sed suscipit odio in lacus auctor vehicula non ut lacus. In hac habitasse platea dictumst. Sed nulla nisi, lacinia in viverra at, blandit vel tellus. Nulla metus erat, ultrices non pretium vel, varius nec sem. Morbi sollicitudin mattis lacus quis pharetra. Donec tincidunt mollis pretium. Proin non libero justo, vitae mattis diam. Integer vel elit in enim varius posuere sed vitae magna. Duis blandit tempor elementum. Vestibulum molestie dui nisi.</p><p>Curabitur volutpat interdum lorem sed tempus. Sed placerat quam non ligula lacinia sodales. Cras ultrices justo at nisi luctus hendrerit. Quisque sit amet placerat justo. In id s!
apien eu neque varius pharetra sed in sapien. Etiam nisl nunc, suscipit sed gravida sed, scelerisque ut nisl. Mauris quis massa nisl, aliquet posuere ligula. Etiam eget tortor mauris. Sed pellentesque vestibulum commodo. Mauris vitae est a libero dapibus dictum fringilla vitae magna.</p><p>Nulla facilisi. Praesent eget elit et mauris gravida lobortis ac nec risus. Ut vulputate ullamcorper est, volutpat feugiat lacus convallis non. Maecenas quis sem odio, et aliquam libero. Integer vel tortor eget orci tincidunt pulvinar interdum at erat. Integer ullamcorper consequat eros a pellentesque. Cras sagittis interdum enim in malesuada. Etiam non nunc neque. Fusce non ligula at tellus porta venenatis. Praesent tortor orci, fermentum sed tincidunt vel, varius vel dui. Duis pulvinar luctus odio, eget porta justo vulputate ac. Nulla varius feugiat lorem sed tempor. Phasellus pulvinar dapibus magna eget egestas. In malesuada lectus at justo pellentesque vitae rhoncus nulla ultrices. Pr!
oin ut sem sem. Donec eu suscipit ipsum. Cras eu arcu porttito!
r massa
feugiat aliquet at quis nisl.</p>', 1, 0, 0, 27, '2010-07-10 20:33:28', 42, '', '0000-00-00 00:00:00', 0, 0, '0000-00-00 00:00:00', '2010-07-10 20:33:28', '0000-00-00 00:00:00', '', '', '{"show_title":"","link_titles":"","show_intro":"","show_category":"","link_category":"","show_parent_category":"","link_parent_category":"","show_author":"","show_create_date":"","show_modify_date":"","show_publish_date":"","show_readmore":"","show_print_icon":"","show_email_icon":"","show_hits":"","page_title":"","alternative_readmore":"","layout":""}', 2, 0, 0, '', '', 1, 0, '', 0, '*', ''),
-(19, 117, 'Footer Module', 'footer-module', '', '<p>This module shows the Joomla! copyright information. <a href="http://docs.joomla.org/Help15:Screen.modulessite.edit.15#Footer" title="Footer Module">Help</a></p><p>{loadposition footerload}</p>', '', 1, 0, 0, 66, '2010-07-10 20:53:39', 42, 'Joomla!', '2010-07-10 20:56:22', 42, 0, '0000-00-00 00:00:00', '2010-07-10 20:56:22', '0000-00-00 00:00:00', '', '', '{"show_title":"","link_titles":"","show_intro":"","show_category":"","link_category":"","show_parent_category":"","link_parent_category":"","show_author":"","show_create_date":"","show_modify_date":"","show_publish_date":"","show_readmore":"","show_print_icon":"","show_email_icon":"","show_hits":"","page_title":"","alternative_readmore":"","layout":""}', 3, 0, 0, '', '', 1, 1, '', 0, '*', ''),
-(20, 118, 'Fruit Shop', 'fruit-shop', '', '<h2>Welcome to the Fruit Shop</h2><p>We sell fruits from around the world. Please use our website to learn more about our business. We hope you will come to our shop and buy some fruit.</p><p ><em>This mini site will show you how you might want to set up a site for a business, in this case one selling fruit. It shows how to use access controls to manage your site content. If you were building a real site, you would might want to extend it with e-commerce, a catalog, mailing lists or other enhancements, many of which are available through the</em><a href="http://extensions.joomla.org"><em> Joomla! Extensions Directory</em></a>.</p><p><em>To understand this site you will probably want to make one user with groups set to customer and one with group set to grower. By logging in with different privileges you can see how access control works.</em></p>', '', 1, 0, 0, 29, '2010-07-10 20:54:54', 42, 'Fruit Shop Webmaster', '2010-07-10 20:5!
6:32', 42, 0, '0000-00-00 00:00:00', '2010-07-10 20:56:32', '0000-00-00 00:00:00', '', '', '{"show_title":"","link_titles":"","show_intro":"","show_category":"","link_category":"","show_parent_category":"","link_parent_category":"","show_author":"","show_create_date":"","show_modify_date":"","show_publish_date":"","show_readmore":"","show_print_icon":"","show_email_icon":"","show_hits":"","page_title":"","alternative_readmore":"","layout":""}', 3, 0, 0, '', '', 1, 4, '', 0, '*', ''),
-(21, 119, 'Getting help', 'getting-help', '', '<p>There are lots of places you can get help with Joomla!.</p><p>In many places you will see the help icon [image]. Click on this for more information about the options and functions of items on your screen.</p><ul><li><a href="http://forum.joomla.org">Support Forums</a></li><li><a href="http://docs.joomla.org">Documentation</a></li><li><a href="http://resoures.joomla.org">Professionals</a></li><li><a href="http://shop.joomla.org/amazoncom-bookstores.html">Books</a></li></ul>', '', 1, 0, 0, 19, '2010-07-10 20:55:56', 42, 'Joomla!', '2010-07-10 20:56:43', 42, 0, '0000-00-00 00:00:00', '2010-07-10 20:55:56', '0000-00-00 00:00:00', '', '', '{"show_title":"","link_titles":"","show_intro":"","show_category":"","link_category":"","show_parent_category":"","link_parent_category":"","show_author":"","show_create_date":"","show_modify_date":"","show_publish_date":"","show_readmore":"","show_print_icon":"","show_email_icon":"","show_hits!
":"","page_title":"","alternative_readmore":"","layout":""}', 3, 0, 0, '', '', 1, 9, '', 0, '*', ''),
-(22, 120, 'Getting Started', 'getting-started', '', '<p>It''s easy to get started creating your website. Knowing some of the basics will help.</p><h3>What is a Content Management System?</h3><p>A content management system is software that allows you to create and manage webpages easily by separating the creation of your content from the mechanics required to present it on the web.</p><p>In this site, the content is stored in a <em>database</em>. The look and feel are created by a <em>template</em>. The Joomla! software brings together the template and the content to create web pages.</p><h3>Site and Administrator</h3><p>Your site actually has two separate sites. The site (also called the front end) is what visitors to your site will see. The administrator (also called the back end) is only used by people managing your site. You can access the administrator by clicking the "Site Administrator" link on the "This Site" menu or by adding /administrator to the end of you domain!
name.</p><p>Log in to the administrator using the username and password created during the installation of Joomla!.</p><h3>Logging in</h3><p>To login to the front end of your site use the login form or the login menu link on the "This Site" menu. Use the user name an password that were created as part of the installation process. Once logged in you will be able to create and edit articles.</p><p>In managing your site, you will be able to create content that only logged in users are able to see.</p><h3>Creating an article</h3><p>Once you are logged in, a new menu will be visible. To create a new article, click on the "submit article" link on that menu.</p><p>The new article interface gives you a lot of options, but all you need to do is add a title an put something in the content area. To make it easy to find, set the state to published an put it in the Joomla! category.</p><div>You can edit an existing article by clicking on the edit icon (if available).</div><h3>Learn m!
ore</h3><p>There is much more to learn about how to use Joomla!
! to cre
ate the web site you envision. You can learn much more at the <a href="http://docs.joomla.org">Joomla! documentation site</a> and on the<a href="http://forum.joomla.org"> Joomla! forums</a>.</p>', '', 1, 0, 0, 19, '2010-07-10 20:57:51', 42, 'Joomla!', '0000-00-00 00:00:00', 0, 0, '0000-00-00 00:00:00', '0000-00-00 00:00:00', '0000-00-00 00:00:00', '', '', '{"show_title":"","link_titles":"","show_intro":"","show_category":"","link_category":"","show_parent_category":"","link_parent_category":"","show_author":"","show_create_date":"","show_modify_date":"","show_publish_date":"","show_readmore":"","show_print_icon":"","show_email_icon":"","show_hits":"","page_title":"","alternative_readmore":"","layout":""}', 2, 0, 0, '', '', 1, 7, '', 0, '*', ''),
-(23, 121, 'Happy Orange Orchard', 'happy-orange-orchard', '', '<p>At our orchard we grow the world''s best oranges as well as other citrus fruit such as lemons and grapefruit. Our family has been tending this orchard for generations.</p>', '', 1, 0, 0, 30, '2010-07-10 20:58:46', 42, 'Fruit Shop Webmaster', '0000-00-00 00:00:00', 0, 0, '0000-00-00 00:00:00', '2010-07-10 20:58:46', '0000-00-00 00:00:00', '', '', '{"show_title":"","link_titles":"","show_intro":"","show_category":"","link_category":"","show_parent_category":"","link_parent_category":"","show_author":"","show_create_date":"","show_modify_date":"","show_publish_date":"","show_readmore":"","show_print_icon":"","show_email_icon":"","show_hits":"","page_title":"","alternative_readmore":"","layout":""}', 2, 0, 0, '', '', 1, 1, '', 0, '*', ''),
-(24, 122, 'Joomla!', 'joomla', '', '<p>Congratulations! You have a Joomla! site! Joomla! makes your site easy to build a website just the way you want it and keep it simple to update and maintain.</p><p>Joomla! is a flexible and powerful platform, whether you are building a small site for yourself or a huge site with hundreds of thousands of visitors. Joomla is open source, which means you can make it work just the way you want it to.</p>', '', 1, 0, 0, 19, '2010-07-10 21:00:06', 42, 'Joomla!', '0000-00-00 00:00:00', 0, 0, '0000-00-00 00:00:00', '2010-07-10 21:00:06', '0000-00-00 00:00:00', '', '', '{"show_title":"","link_titles":"","show_intro":"","show_category":"","link_category":"","show_parent_category":"","link_parent_category":"","show_author":"","show_create_date":"","show_modify_date":"","show_publish_date":"","show_readmore":"","show_print_icon":"","show_email_icon":"","show_hits":"","page_title":"","alternative_readmore":"","layout":""}', 2, 0, 0, '', '', 1, 1, '!
', 1, '*', ''),
-(25, 123, 'Koala', 'koala', '', '<p><img src="images/sampledata/parks/animals/180px_koala_ag1.jpg" border="0" alt="Koala Thumbnail" width="180" height="123" style="vertical-align: middle; border: 0;" /></p>', '<p><img src="images/sampledata/parks/animals/800px_koala_ag1.jpg" border="0" alt="Koala Climbing Tree" width="500" height="341" style="vertical-align: middle; border: 0;" /></p><p> </p><p> </p><p class="caption">Source: http://commons.wikimedia.org/wiki/File:Koala-ag1.jpg</p><p class="caption">Author: Arnaud Gaillard</p><p><span class="caption">License: Creative Commons Share Alike Attribution Generic 1.0</span></p>', 1, 0, 0, 72, '2010-07-10 21:02:10', 42, 'Parks Webmaster', '2010-07-10 21:02:28', 42, 0, '0000-00-00 00:00:00', '2010-07-10 21:02:28', '0000-00-00 00:00:00', '', '', '{"show_title":"","link_titles":"","show_intro":"","show_category":"","link_category":"","show_parent_category":"","link_parent_category":"","show_author":"","show_create_date":"","show_m!
odify_date":"","show_publish_date":"","show_readmore":"","show_print_icon":"","show_email_icon":"","show_hits":"","page_title":"","alternative_readmore":"","layout":""}', 3, 0, 0, '', '', 1, 0, '', 0, '*', ''),
-(26, 124, 'Language Switcher', 'language-switcher', '', '<p>The language switcher module allows you to take advantage of the language tags that are available when content, modules and menu links are created.</p><p>This module displays a list of available Content Languages for switching between them.</p><p>When switching languages, it redirects to the Home page defined for the chosen language. Thereafter, the navigation will be the one defined for that language.</p><p><strong>The language filter plugin must be enabled for this module to work properly.</strong></p><p><strong></strong> <a href="http://docs.joomla.org/Help15:Screen.modulessite.edit.15#Language_Switcher" title="Language Switcher Module">Help</a></p><p>To view an example of the language switch moduler module, go to the site administrator and enable the language filter plugin and the language switcher module labellled "language switcher" and visit the fruit shop or park sample sites. Then follow<a href="http://doc!
s.joomla.org/Language_Switcher_Tutorial_for_Joomla_1.6"> the instructions in this tutorial</a>.</p>', '', 1, 0, 0, 67, '2010-07-10 21:07:16', 42, 'Joomla!', '0000-00-00 00:00:00', 0, 0, '0000-00-00 00:00:00', '2010-07-10 21:07:16', '0000-00-00 00:00:00', '', '', '{"show_title":"","link_titles":"","show_intro":"","show_category":"","link_category":"","show_parent_category":"","link_parent_category":"","show_author":"","show_create_date":"","show_modify_date":"","show_publish_date":"","show_readmore":"","show_print_icon":"","show_email_icon":"","show_hits":"","page_title":"","alternative_readmore":"","layout":""}', 2, 0, 0, '', '', 1, 2, '', 0, '*', ''),
-(27, 125, 'Latest Articles Module', 'latest-articles-module', '', '<p>This Module shows a list of the most recently published and current Articles. Some that are shown may have expired even though they are the most recent. <a href="http://docs.joomla.org/Help15:Screen.modulessite.edit.15#Latest_News" title="Latest Articles">Help</a></p><p>{loadposition articleslatestload}</p>', '', 1, 0, 0, 64, '2010-07-10 21:08:42', 42, '', '0000-00-00 00:00:00', 0, 0, '0000-00-00 00:00:00', '0000-00-00 00:00:00', '0000-00-00 00:00:00', '', '', '{"show_title":"","link_titles":"","show_intro":"","show_category":"","link_category":"","show_parent_category":"","link_parent_category":"","show_author":"","show_create_date":"","show_modify_date":"","show_publish_date":"","show_readmore":"","show_print_icon":"","show_email_icon":"","show_hits":"","page_title":"","alternative_readmore":"","layout":""}', 2, 0, 0, '', '', 1, 2, '', 0, '*', ''),
-(28, 126, 'Login Module', 'login-module', '', '<p>This module displays a username and password login form. It also displays a link to retrieve a forgotten password. If user registration is enabled (in the Global Configuration settings), another link will be shown to enable self-registration for users. <a href="http://docs.joomla.org/Help15:Screen.modulessite.edit.15#Login" title="Login">Help</a></p><p>{loadposition loginload}</p>', '', 1, 0, 0, 65, '2010-07-10 21:10:16', 42, 'Joomla!', '2010-07-10 21:10:40', 42, 0, '0000-00-00 00:00:00', '2010-07-10 21:10:16', '0000-00-00 00:00:00', '', '', '{"show_title":"","link_titles":"","show_intro":"","show_category":"","link_category":"","show_parent_category":"","link_parent_category":"","show_author":"","show_create_date":"","show_modify_date":"","show_publish_date":"","show_readmore":"","show_print_icon":"","show_email_icon":"","show_hits":"","page_title":"","alternative_readmore":"","layout":""}', 3, 0, 0, '', '', 1, 3, '', 0, '*!
', ''),
-(29, 127, 'Menu Module', 'menu-module', '', '<p>This module displays a menu on the site (frontend).  Menus can be displayed in a wide variety of ways by using the menu options and css menu styles.</p>\r\n<p>{loadposition menuload}</p>', '', 1, 0, 0, 75, '2010-07-10 21:21:52', 42, 'Joomla!', '2010-07-11 14:59:41', 42, 0, '0000-00-00 00:00:00', '2010-07-11 14:59:41', '0000-00-00 00:00:00', '', '', '{"show_title":"","link_titles":"","show_intro":"","show_category":"","link_category":"","show_parent_category":"","link_parent_category":"","show_author":"","show_create_date":"","show_modify_date":"","show_publish_date":"","show_readmore":"","show_print_icon":"","show_email_icon":"","show_hits":"","page_title":"","alternative_readmore":"","layout":""}', 3, 0, 0, '', '', 1, 2, '', 0, '*', ''),
-(30, 128, 'Most Read Content', 'most-read-content', '', '<p>This Module shows a list of the currently published Articles which have the highest number of page views. <a href="http://docs.joomla.org/Help15:Screen.modulessite.edit.15#Most_Read_Content" title="Most Read Content">Help</a></p><p>{loadposition articlespopularload}</p>', '', 1, 0, 0, 64, '2010-07-10 21:25:23', 42, 'Joomla!', '0000-00-00 00:00:00', 0, 0, '0000-00-00 00:00:00', '2010-07-10 21:25:23', '0000-00-00 00:00:00', '', '', '{"show_title":"","link_titles":"","show_intro":"","show_category":"","link_category":"","show_parent_category":"","link_parent_category":"","show_author":"","show_create_date":"","show_modify_date":"","show_publish_date":"","show_readmore":"","show_print_icon":"","show_email_icon":"","show_hits":"","page_title":"","alternative_readmore":"","layout":""}', 2, 0, 0, '', '', 1, 0, '', 0, '*', ''),
-(31, 129, 'News Flash', 'news-flash', '', '<p>Displays a set number of articles from a category based on date or random selection. <a href="http://docs.joomla.org/Help15:Screen.modulessite.edit.15#NewsFlash" title="News Flash Module">Help</a></p><p>{loadposition newsflashload}</p>', '', 1, 0, 0, 64, '2010-07-10 21:28:50', 42, '', '0000-00-00 00:00:00', 0, 0, '0000-00-00 00:00:00', '0000-00-00 00:00:00', '0000-00-00 00:00:00', '', '', '{"show_title":"","link_titles":"","show_intro":"","show_category":"","link_category":"","show_parent_category":"","link_parent_category":"","show_author":"","show_create_date":"","show_modify_date":"","show_publish_date":"","show_readmore":"","show_print_icon":"","show_email_icon":"","show_hits":"","page_title":"","alternative_readmore":"","layout":""}', 2, 0, 0, '', '', 1, 2, '', 0, '*', ''),
-(32, 130, 'Parameters', 'parameters', '', '<p>As you make your Joomla! site using the extension you will control the details of the display using <em>parameter</em><strong>s</strong>. Parameters control everything from whether the author''s name is displayed to who can view what to the number of items shown on a list.</p><p>Default parameters for each components are changed using the Options button on the component toolbar.</p><p>Parameters can also be set on an individual item, such as an article or contact and in menu links.</p><p>If you are happy with how your site looks, it is fine to leave all of the parameters set to the defaults that were created when your site was installed. As you become more experienced with Joomla! you will use parameters more.</p><p> </p>', '', 1, 0, 0, 19, '2010-07-10 21:35:48', 42, 'Joomla!', '0000-00-00 00:00:00', 0, 0, '0000-00-00 00:00:00', '0000-00-00 00:00:00', '0000-00-00 00:00:00', '', '', '{"show_title":"","link_titles":"","show_intro!
":"","show_category":"","link_category":"","show_parent_category":"","link_parent_category":"","show_author":"","show_create_date":"","show_modify_date":"","show_publish_date":"","show_readmore":"","show_print_icon":"","show_email_icon":"","show_hits":"","page_title":"","alternative_readmore":"","layout":""}', 2, 0, 0, '', '', 1, 10, '', 0, '*', ''),
-(33, 131, 'Phyllopteryx', 'phyllopteryx', '', '<p><img src="images/sampledata/parks/animals/200px_phyllopteryx_taeniolatus1.jpg" border="0" style="vertical-align: middle;" /></p><p> </p>', '<p><img src="images/sampledata/parks/animals/800px_phyllopteryx_taeniolatus1.jpg" border="0" style="vertical-align: middle;" /></p><p> </p><p>Source: http://en.wikipedia.org/wiki/File:Phyllopteryx_taeniolatus1.jpg</p><p>Author: Richard Ling</p><p>License: GNU Free Documentation License v 1.2 or later</p>', 1, 0, 0, 72, '2010-07-10 21:37:12', 42, 'Parks Webmaster', '0000-00-00 00:00:00', 0, 0, '0000-00-00 00:00:00', '2010-07-10 21:37:12', '0000-00-00 00:00:00', '', '', '{"show_title":"","link_titles":"","show_intro":"","show_category":"","link_category":"","show_parent_category":"","link_parent_category":"","show_author":"","show_create_date":"","show_modify_date":"","show_publish_date":"","show_readmore":"","show_print_icon":"","show_email_icon":"","show_hits":"","page_title":"","alter!
native_readmore":"","layout":""}', 2, 0, 0, '', '', 1, 0, '', 0, '*', ''),
-(34, 132, 'Pinnacles', 'pinnacles', '', '<p><img src="images/sampledata/parks/landscape/120px_pinnacles_western_australia.jpg" border="0" alt="Kings Canyon" width="120" height="90" style="vertical-align: middle; border: 0;" /></p>', '<p><img src="images/sampledata/parks/landscape/800px_pinnacles_western_australia.jpg" border="0" alt="King''s Canyon" width="500" height="374" style="vertical-align: middle; border: 0;" /></p><p> </p><p class="caption">Source: http://commons.wikimedia.org/wiki/File:Pinnacles_Western_Australia.jpg</p><p class="caption">Author: <a class="new" href="http://commons.wikimedia.org/w/index.php?title=User:Markdoe&action=edit&redlink=1" title="User:Markdoe (page does not exist)"></a>Martin Gloss</p><p class="caption">License: GNU Free Documentation license v 1.2 or later.</p>', 1, 0, 0, 73, '2010-07-10 21:38:36', 42, 'Parks Webmaster', '2010-07-11 07:21:29', 42, 0, '0000-00-00 00:00:00', '2010-07-11 07:21:29', '0000-00-00 00:00:00', '', '', '{"show_tit!
le":"","link_titles":"","show_intro":"","show_category":"","link_category":"","show_parent_category":"","link_parent_category":"","show_author":"","show_create_date":"","show_modify_date":"","show_publish_date":"","show_readmore":"","show_print_icon":"","show_email_icon":"","show_hits":"","page_title":"","alternative_readmore":"","layout":""}', 3, 0, 0, '', '', 1, 1, '', 0, '*', ''),
-(35, 133, 'Professionals', 'professionals', '', '<p>Joomla! 1.6 continues development of the Joomla Framework and CMS as a powerful and flexible way to bring your vision of the web to reality. With the administrator now fully MVC, the ability to control its look and the management of extensions is now complete.</p>', '<p>Working with multiple template styles and overrides for the same views, creating the design you want is easier than it has ever been. Limiting support to PHP 5.x and above and ending legacy support for Joomla 1.0 extensions makes Joomla! lighter and faster than ever. Languages files can now be overridden without having your changes lost during an upgrade.  With the proper xml your users update extensions with a single click.</p><p>Access control lists are now incorporated using a new system developed for Joomla!. The ACL system is designed with developers in mind, so it is easy to incorporate into your extensions. The new nested sets libraries allow you t!
o incorporate infinitely deep categories but also to use nested sets in a variety of other ways.</p><p>A new forms library makes creating all kinds of user interaction simple. MooTools 1.2 provides a highly flexible javascript framework that is a major advance over MooTools 1.0.</p><p>New events throughout the core make integration of your plugins where you want them a snap.</p><p>Learn about:</p><ul><li>[Working with ACL] </li><li>[Working with nested categories] </li><li>[Using the forms library] </li><li>[Working with Mootools 1.2] </li><li>[Using the override system] </li><li>[Joomla! API]</li><li>[Using JDatabaseQuery] </li><li>[Triggers] </li><li>[Xmlrpc] </li><li>[Installing and updating extensions]</li><li>[Setting up your development environment]</li></ul>', 1, 0, 0, 19, '2010-07-10 21:47:11', 42, 'Joomla!', '2010-07-10 21:50:33', 42, 0, '0000-00-00 00:00:00', '0000-00-00 00:00:00', '0000-00-00 00:00:00', '', '', '{"show_title":"","link_titles":"","show_intro":"","!
show_category":"","link_category":"","show_parent_category":""!
,"link_p
arent_category":"","show_author":"","show_create_date":"","show_modify_date":"","show_publish_date":"","show_readmore":"","show_print_icon":"","show_email_icon":"","show_hits":"","page_title":"","alternative_readmore":"","layout":""}', 3, 0, 0, '', '', 1, 0, '', 1, '*', ''),
-(36, 134, 'Random Image Module', 'random-image-module', '', '<p>This Module displays a random image from your chosen image directory. <a href="http://docs.joomla.org/Help15:Screen.modulessite.edit.15#Random_Image" title="Random Image Module">Help</a></p><p>{loadposition randomimageload}</p>', '', 1, 0, 0, 66, '2010-07-10 21:51:54', 42, '', '0000-00-00 00:00:00', 0, 0, '0000-00-00 00:00:00', '0000-00-00 00:00:00', '0000-00-00 00:00:00', '', '', '{"show_title":"","link_titles":"","show_intro":"","show_category":"","link_category":"","show_parent_category":"","link_parent_category":"","show_author":"","show_create_date":"","show_modify_date":"","show_publish_date":"","show_readmore":"","show_print_icon":"","show_email_icon":"","show_hits":"","page_title":"","alternative_readmore":"","layout":""}', 2, 0, 0, '', '', 1, 1, '', 0, '*', ''),
-(37, 135, 'Related Items Module', 'related-items-module', '', '<p>This Module displays other Articles that are related to the one currently being viewed. These relations are established by the Meta Keywords.  All the keywords of the current Article are searched against all the keywords of all other published articles. <a href="http://docs.joomla.org/Help15:Screen.modulessite.edit.15#Related_Articles" title="Related Items Module">Help</a></p><p>{loadposition relateditemsload}</p>', '', 1, 0, 0, 64, '2010-07-10 21:53:14', 42, 'Joomla!', '0000-00-00 00:00:00', 0, 0, '0000-00-00 00:00:00', '0000-00-00 00:00:00', '0000-00-00 00:00:00', '', '', '{"show_title":"","link_titles":"","show_intro":"","show_category":"","link_category":"","show_parent_category":"","link_parent_category":"","show_author":"","show_create_date":"","show_modify_date":"","show_publish_date":"","show_readmore":"","show_print_icon":"","show_email_icon":"","show_hits":"","page_title":"","alternative_readmore"!
:"","layout":""}', 2, 0, 0, '', '', 1, 1, '', 0, '*', ''),
-(38, 136, 'Sample Sites', 'sample-sites', '', '<p>Your installation includes sample data, designed to show you some of the options you have for building your website. In addition to information about Joomla! there are two sample "sites within a site" designed to help you get started with builidng your own site.</p><p>The first site is a simple site about <a href="index.php?Itemid=243">Australian Parks</a>. It shows you you an quickly and easily build a personal site with just the building blocks that are part of Joomla!. It includes a personal blog, weblinks, and a very simple image gallery.</p><p>The second site is slightly more complex and represents what you might do if you are building a site for a small business, in this case a <a href="index.php/welcome.html"></a><a href="index.php?Itemid=429">Fruit Shop</a>.</p><p>In building either style site, or something completely different, you will probably want to add <a href="http://extensions.joomla.org">extensions</a> and e!
ither create or purchase your own template. Many Joomla! users start off by modifying the <a href="http://docs.joomla.org/How_do_you_modify_a_template%3F">templates</a> that come with the core distribution so that they include special images and other design elements that relate to their site''s focus.</p>', '', 1, 0, 0, 19, '2010-07-10 21:55:29', 42, 'Joomla!', '2010-07-10 21:55:41', 42, 0, '0000-00-00 00:00:00', '2010-07-10 21:55:41', '0000-00-00 00:00:00', '', '', '{"show_title":"","link_titles":"","show_intro":"","show_category":"","link_category":"","show_parent_category":"","link_parent_category":"","show_author":"","show_create_date":"","show_modify_date":"","show_publish_date":"","show_readmore":"","show_print_icon":"","show_email_icon":"","show_hits":"","page_title":"","alternative_readmore":"","layout":""}', 3, 0, 0, '', '', 1, 6, '', 0, '*', ''),
+(19, 117, 'Footer Module', 'footer-module', '', '<p>This module shows the Joomla! copyright information. <a href="http://docs.joomla.org/Help15:Screen.modulessite.edit.15#Footer" title="Footer Module">Help</a></p><p>{loadposition footerload}</p>', '', 1, 0, 0, 66, '2010-07-10 20:53:39', 42, 'Joomla!', '2010-07-10 20:56:22', 42, 0, '0000-00-00 00:00:00', '2010-07-10 20:56:22', '0000-00-00 00:00:00', '', '', '{"show_title":"","link_titles":"","show_intro":"","show_category":"","link_category":"","show_parent_category":"","link_parent_category":"","show_author":"","show_create_date":"","show_modify_date":"","show_publish_date":"","show_readmore":"","show_print_icon":"","show_email_icon":"","show_hits":"","page_title":"","alternative_readmore":"","layout":""}', 3, 0, 3, '', '', 1, 1, '', 0, '*', ''),
+(20, 118, 'Fruit Shop', 'fruit-shop', '', '<h2>Welcome to the Fruit Shop</h2><p>We sell fruits from around the world. Please use our website to learn more about our business. We hope you will come to our shop and buy some fruit.</p><p ><em>This mini site will show you how you might want to set up a site for a business, in this case one selling fruit. It shows how to use access controls to manage your site content. If you were building a real site, you would might want to extend it with e-commerce, a catalog, mailing lists or other enhancements, many of which are available through the</em><a href="http://extensions.joomla.org"><em> Joomla! Extensions Directory</em></a>.</p><p><em>To understand this site you will probably want to make one user with groups set to customer and one with group set to grower. By logging in with different privileges you can see how access control works.</em></p>', '', 1, 0, 0, 29, '2010-07-10 20:54:54', 42, 'Fruit Shop Webmaster', '2010-08-23 03:0!
2:28', 42, 0, '0000-00-00 00:00:00', '2010-07-10 20:56:32', '0000-00-00 00:00:00', '', '', '{"show_title":"","link_titles":"","show_intro":"","show_category":"","link_category":"","show_parent_category":"","link_parent_category":"","show_author":"","show_create_date":"","show_modify_date":"","show_publish_date":"","show_readmore":"","show_print_icon":"","show_email_icon":"","show_hits":"","page_title":"","alternative_readmore":"","layout":""}', 3, 0, 1, '', '', 1, 4, '', 0, '*', ''),
+(21, 119, 'Getting help', 'getting-help', '', '<p>There are lots of places you can get help with Joomla!.</p><p>In many places you will see the help icon [image]. Click on this for more information about the options and functions of items on your screen.</p><ul><li><a href="http://forum.joomla.org">Support Forums</a></li><li><a href="http://docs.joomla.org">Documentation</a></li><li><a href="http://resoures.joomla.org">Professionals</a></li><li><a href="http://shop.joomla.org/amazoncom-bookstores.html">Books</a></li></ul>', '', 1, 0, 0, 19, '2010-07-10 20:55:56', 42, 'Joomla!', '2010-08-23 03:02:28', 42, 0, '0000-00-00 00:00:00', '2010-07-10 20:55:56', '0000-00-00 00:00:00', '', '', '{"show_title":"","link_titles":"","show_intro":"","show_category":"","link_category":"","show_parent_category":"","link_parent_category":"","show_author":"","show_create_date":"","show_modify_date":"","show_publish_date":"","show_readmore":"","show_print_icon":"","show_email_icon":"","show_hits!
":"","page_title":"","alternative_readmore":"","layout":""}', 3, 0, 8, '', '', 1, 9, '', 0, '*', ''),
+(22, 120, 'Getting Started', 'getting-started', '', '<p>It''s easy to get started creating your website. Knowing some of the basics will help.</p><h3>What is a Content Management System?</h3><p>A content management system is software that allows you to create and manage webpages easily by separating the creation of your content from the mechanics required to present it on the web.</p><p>In this site, the content is stored in a <em>database</em>. The look and feel are created by a <em>template</em>. The Joomla! software brings together the template and the content to create web pages.</p><h3>Site and Administrator</h3><p>Your site actually has two separate sites. The site (also called the front end) is what visitors to your site will see. The administrator (also called the back end) is only used by people managing your site. You can access the administrator by clicking the "Site Administrator" link on the "This Site" menu or by adding /administrator to the end of you domain!
name.</p><p>Log in to the administrator using the username and password created during the installation of Joomla!.</p><h3>Logging in</h3><p>To login to the front end of your site use the login form or the login menu link on the "This Site" menu. Use the user name an password that were created as part of the installation process. Once logged in you will be able to create and edit articles.</p><p>In managing your site, you will be able to create content that only logged in users are able to see.</p><h3>Creating an article</h3><p>Once you are logged in, a new menu will be visible. To create a new article, click on the "submit article" link on that menu.</p><p>The new article interface gives you a lot of options, but all you need to do is add a title an put something in the content area. To make it easy to find, set the state to published an put it in the Joomla! category.</p><div>You can edit an existing article by clicking on the edit icon (if available).</div><h3>Learn m!
ore</h3><p>There is much more to learn about how to use Joomla!
! to cre
ate the web site you envision. You can learn much more at the <a href="http://docs.joomla.org">Joomla! documentation site</a> and on the<a href="http://forum.joomla.org"> Joomla! forums</a>.</p>', '', 1, 0, 0, 19, '2010-07-10 20:57:51', 42, 'Joomla!', '2010-08-23 03:02:28', 42, 0, '0000-00-00 00:00:00', '0000-00-00 00:00:00', '0000-00-00 00:00:00', '', '', '{"show_title":"","link_titles":"","show_intro":"","show_category":"","link_category":"","show_parent_category":"","link_parent_category":"","show_author":"","show_create_date":"","show_modify_date":"","show_publish_date":"","show_readmore":"","show_print_icon":"","show_email_icon":"","show_hits":"","page_title":"","alternative_readmore":"","layout":""}', 2, 0, 9, '', '', 1, 7, '', 0, '*', ''),
+(23, 121, 'Happy Orange Orchard', 'happy-orange-orchard', '', '<p>At our orchard we grow the world''s best oranges as well as other citrus fruit such as lemons and grapefruit. Our family has been tending this orchard for generations.</p>', '', 1, 0, 0, 30, '2010-07-10 20:58:46', 42, 'Fruit Shop Webmaster', '2010-08-23 03:02:28', 42, 0, '0000-00-00 00:00:00', '2010-07-10 20:58:46', '0000-00-00 00:00:00', '', '', '{"show_title":"","link_titles":"","show_intro":"","show_category":"","link_category":"","show_parent_category":"","link_parent_category":"","show_author":"","show_create_date":"","show_modify_date":"","show_publish_date":"","show_readmore":"","show_print_icon":"","show_email_icon":"","show_hits":"","page_title":"","alternative_readmore":"","layout":""}', 2, 0, 2, '', '', 1, 1, '', 0, '*', ''),
+(24, 122, 'Joomla!', 'joomla', '', '<p>Congratulations! You have a Joomla! site! Joomla! makes your site easy to build a website just the way you want it and keep it simple to update and maintain.</p><p>Joomla! is a flexible and powerful platform, whether you are building a small site for yourself or a huge site with hundreds of thousands of visitors. Joomla is open source, which means you can make it work just the way you want it to.</p>', '', 1, 0, 0, 19, '2010-07-10 21:00:06', 42, 'Joomla!', '2010-08-23 03:02:28', 42, 0, '0000-00-00 00:00:00', '2010-07-10 21:00:06', '0000-00-00 00:00:00', '', '', '{"show_title":"","link_titles":"","show_intro":"","show_category":"","link_category":"","show_parent_category":"","link_parent_category":"","show_author":"","show_create_date":"","show_modify_date":"","show_publish_date":"","show_readmore":"","show_print_icon":"","show_email_icon":"","show_hits":"","page_title":"","alternative_readmore":"","layout":""}', 2, 0, 2, '', '', 1, 1, !
'', 1, '*', ''),
+(25, 123, 'Koala', 'koala', '', '<p><img src="images/sampledata/parks/animals/180px_koala_ag1.jpg" border="0" alt="Koala Thumbnail" width="180" height="123" style="vertical-align: middle; border: 0;" /></p>', '<p><img src="images/sampledata/parks/animals/800px_koala_ag1.jpg" border="0" alt="Koala Climbing Tree" width="500" height="341" style="vertical-align: middle; border: 0;" /></p><p> </p><p> </p><p class="caption">Source: http://commons.wikimedia.org/wiki/File:Koala-ag1.jpg</p><p class="caption">Author: Arnaud Gaillard</p><p><span class="caption">License: Creative Commons Share Alike Attribution Generic 1.0</span></p>', 1, 0, 0, 72, '2010-07-10 21:02:10', 42, 'Parks Webmaster', '2010-08-23 03:00:39', 42, 0, '0000-00-00 00:00:00', '2010-07-10 21:02:28', '0000-00-00 00:00:00', '', '', '{"show_title":"","link_titles":"","show_intro":"","show_category":"","link_category":"","show_parent_category":"","link_parent_category":"","show_author":"","show_create_date":"","show_m!
odify_date":"","show_publish_date":"","show_readmore":"","show_print_icon":"","show_email_icon":"","show_hits":"","page_title":"","alternative_readmore":"","layout":""}', 3, 0, 2, '', '', 1, 0, '', 0, '*', ''),
+(26, 124, 'Language Switcher', 'language-switcher', '', '<p>The language switcher module allows you to take advantage of the language tags that are available when content, modules and menu links are created.</p><p>This module displays a list of available Content Languages for switching between them.</p><p>When switching languages, it redirects to the Home page defined for the chosen language. Thereafter, the navigation will be the one defined for that language.</p><p><strong>The language filter plugin must be enabled for this module to work properly.</strong></p><p><strong></strong> <a href="http://docs.joomla.org/Help15:Screen.modulessite.edit.15#Language_Switcher" title="Language Switcher Module">Help</a></p><p>To view an example of the language switch moduler module, go to the site administrator and enable the language filter plugin and the language switcher module labellled "language switcher" and visit the fruit shop or park sample sites. Then follow<a href="http://doc!
s.joomla.org/Language_Switcher_Tutorial_for_Joomla_1.6"> the instructions in this tutorial</a>.</p>', '', 1, 0, 0, 67, '2010-07-10 21:07:16', 42, 'Joomla!', '2010-08-23 02:58:49', 42, 0, '0000-00-00 00:00:00', '2010-07-10 21:07:16', '0000-00-00 00:00:00', '', '', '{"show_title":"","link_titles":"","show_intro":"","show_category":"","link_category":"","show_parent_category":"","link_parent_category":"","show_author":"","show_create_date":"","show_modify_date":"","show_publish_date":"","show_readmore":"","show_print_icon":"","show_email_icon":"","show_hits":"","page_title":"","alternative_readmore":"","layout":""}', 2, 0, 3, '', '', 1, 2, '', 0, '*', ''),
+(27, 125, 'Latest Articles Module', 'latest-articles-module', '', '<p>This Module shows a list of the most recently published and current Articles. Some that are shown may have expired even though they are the most recent. <a href="http://docs.joomla.org/Help15:Screen.modulessite.edit.15#Latest_News" title="Latest Articles">Help</a></p><p>{loadposition articleslatestload}</p>', '', 1, 0, 0, 64, '2010-07-10 21:08:42', 42, '', '2010-08-23 03:00:39', 42, 0, '0000-00-00 00:00:00', '0000-00-00 00:00:00', '0000-00-00 00:00:00', '', '', '{"show_title":"","link_titles":"","show_intro":"","show_category":"","link_category":"","show_parent_category":"","link_parent_category":"","show_author":"","show_create_date":"","show_modify_date":"","show_publish_date":"","show_readmore":"","show_print_icon":"","show_email_icon":"","show_hits":"","page_title":"","alternative_readmore":"","layout":""}', 2, 0, 1, '', '', 1, 2, '', 0, '*', ''),
+(28, 126, 'Login Module', 'login-module', '', '<p>This module displays a username and password login form. It also displays a link to retrieve a forgotten password. If user registration is enabled (in the Global Configuration settings), another link will be shown to enable self-registration for users. <a href="http://docs.joomla.org/Help15:Screen.modulessite.edit.15#Login" title="Login">Help</a></p><p>{loadposition loginload}</p>', '', 1, 0, 0, 65, '2010-07-10 21:10:16', 42, 'Joomla!', '2010-08-23 02:58:49', 42, 0, '0000-00-00 00:00:00', '2010-07-10 21:10:16', '0000-00-00 00:00:00', '', '', '{"show_title":"","link_titles":"","show_intro":"","show_category":"","link_category":"","show_parent_category":"","link_parent_category":"","show_author":"","show_create_date":"","show_modify_date":"","show_publish_date":"","show_readmore":"","show_print_icon":"","show_email_icon":"","show_hits":"","page_title":"","alternative_readmore":"","layout":""}', 3, 0, 2, '', '', 1, 3, '', 0, '*!
', ''),
+(29, 127, 'Menu Module', 'menu-module', '', '<p>This module displays a menu on the site (frontend).  Menus can be displayed in a wide variety of ways by using the menu options and css menu styles.</p>\r\n<p>{loadposition menuload}</p>', '', 1, 0, 0, 75, '2010-07-10 21:21:52', 42, 'Joomla!', '2010-08-23 03:02:54', 42, 0, '0000-00-00 00:00:00', '2010-07-11 14:59:41', '0000-00-00 00:00:00', '', '', '{"show_title":"","link_titles":"","show_intro":"","show_category":"","link_category":"","show_parent_category":"","link_parent_category":"","show_author":"","show_create_date":"","show_modify_date":"","show_publish_date":"","show_readmore":"","show_print_icon":"","show_email_icon":"","show_hits":"","page_title":"","alternative_readmore":"","layout":""}', 3, 0, 1, '', '', 1, 2, '', 0, '*', ''),
+(30, 128, 'Most Read Content', 'most-read-content', '', '<p>This Module shows a list of the currently published Articles which have the highest number of page views. <a href="http://docs.joomla.org/Help15:Screen.modulessite.edit.15#Most_Read_Content" title="Most Read Content">Help</a></p><p>{loadposition articlespopularload}</p>', '', 1, 0, 0, 64, '2010-07-10 21:25:23', 42, 'Joomla!', '2010-08-23 03:00:39', 42, 0, '0000-00-00 00:00:00', '2010-07-10 21:25:23', '0000-00-00 00:00:00', '', '', '{"show_title":"","link_titles":"","show_intro":"","show_category":"","link_category":"","show_parent_category":"","link_parent_category":"","show_author":"","show_create_date":"","show_modify_date":"","show_publish_date":"","show_readmore":"","show_print_icon":"","show_email_icon":"","show_hits":"","page_title":"","alternative_readmore":"","layout":""}', 2, 0, 2, '', '', 1, 0, '', 0, '*', ''),
+(31, 129, 'News Flash', 'news-flash', '', '<p>Displays a set number of articles from a category based on date or random selection. <a href="http://docs.joomla.org/Help15:Screen.modulessite.edit.15#NewsFlash" title="News Flash Module">Help</a></p><p>{loadposition newsflashload}</p>', '', 1, 0, 0, 64, '2010-07-10 21:28:50', 42, '', '2010-08-23 03:00:39', 42, 0, '0000-00-00 00:00:00', '0000-00-00 00:00:00', '0000-00-00 00:00:00', '', '', '{"show_title":"","link_titles":"","show_intro":"","show_category":"","link_category":"","show_parent_category":"","link_parent_category":"","show_author":"","show_create_date":"","show_modify_date":"","show_publish_date":"","show_readmore":"","show_print_icon":"","show_email_icon":"","show_hits":"","page_title":"","alternative_readmore":"","layout":""}', 2, 0, 3, '', '', 1, 2, '', 0, '*', ''),
+(32, 130, 'Parameters', 'parameters', '', '<p>As you make your Joomla! site using the extension you will control the details of the display using <em>parameter</em><strong>s</strong>. Parameters control everything from whether the author''s name is displayed to who can view what to the number of items shown on a list.</p><p>Default parameters for each components are changed using the Options button on the component toolbar.</p><p>Parameters can also be set on an individual item, such as an article or contact and in menu links.</p><p>If you are happy with how your site looks, it is fine to leave all of the parameters set to the defaults that were created when your site was installed. As you become more experienced with Joomla! you will use parameters more.</p><p> </p>', '', 1, 0, 0, 19, '2010-07-10 21:35:48', 42, 'Joomla!', '2010-08-23 03:02:28', 42, 0, '0000-00-00 00:00:00', '0000-00-00 00:00:00', '0000-00-00 00:00:00', '', '', '{"show_title":"","link_titles":"","show_intr!
o":"","show_category":"","link_category":"","show_parent_category":"","link_parent_category":"","show_author":"","show_create_date":"","show_modify_date":"","show_publish_date":"","show_readmore":"","show_print_icon":"","show_email_icon":"","show_hits":"","page_title":"","alternative_readmore":"","layout":""}', 2, 0, 10, '', '', 1, 10, '', 0, '*', ''),
+(33, 131, 'Phyllopteryx', 'phyllopteryx', '', '<p><img src="images/sampledata/parks/animals/200px_phyllopteryx_taeniolatus1.jpg" border="0" style="vertical-align: middle;" /></p><p> </p>', '<p><img src="images/sampledata/parks/animals/800px_phyllopteryx_taeniolatus1.jpg" border="0" style="vertical-align: middle;" /></p><p> </p><p>Source: http://en.wikipedia.org/wiki/File:Phyllopteryx_taeniolatus1.jpg</p><p>Author: Richard Ling</p><p>License: GNU Free Documentation License v 1.2 or later</p>', 1, 0, 0, 72, '2010-07-10 21:37:12', 42, 'Parks Webmaster', '2010-08-23 03:00:39', 42, 0, '0000-00-00 00:00:00', '2010-07-10 21:37:12', '0000-00-00 00:00:00', '', '', '{"show_title":"","link_titles":"","show_intro":"","show_category":"","link_category":"","show_parent_category":"","link_parent_category":"","show_author":"","show_create_date":"","show_modify_date":"","show_publish_date":"","show_readmore":"","show_print_icon":"","show_email_icon":"","show_hits":"","page_title":"","alte!
rnative_readmore":"","layout":""}', 2, 0, 3, '', '', 1, 0, '', 0, '*', ''),
+(34, 132, 'Pinnacles', 'pinnacles', '', '<p><img src="images/sampledata/parks/landscape/120px_pinnacles_western_australia.jpg" border="0" alt="Kings Canyon" width="120" height="90" style="vertical-align: middle; border: 0;" /></p>', '<p><img src="images/sampledata/parks/landscape/800px_pinnacles_western_australia.jpg" border="0" alt="King''s Canyon" width="500" height="374" style="vertical-align: middle; border: 0;" /></p><p> </p><p class="caption">Source: http://commons.wikimedia.org/wiki/File:Pinnacles_Western_Australia.jpg</p><p class="caption">Author: <a class="new" href="http://commons.wikimedia.org/w/index.php?title=User:Markdoe&action=edit&redlink=1" title="User:Markdoe (page does not exist)"></a>Martin Gloss</p><p class="caption">License: GNU Free Documentation license v 1.2 or later.</p>', 1, 0, 0, 73, '2010-07-10 21:38:36', 42, 'Parks Webmaster', '2010-08-23 02:58:49', 42, 0, '0000-00-00 00:00:00', '2010-07-11 07:21:29', '0000-00-00 00:00:00', '', '', '{"show_tit!
le":"","link_titles":"","show_intro":"","show_category":"","link_category":"","show_parent_category":"","link_parent_category":"","show_author":"","show_create_date":"","show_modify_date":"","show_publish_date":"","show_readmore":"","show_print_icon":"","show_email_icon":"","show_hits":"","page_title":"","alternative_readmore":"","layout":""}', 3, 0, 4, '', '', 1, 1, '', 0, '*', ''),
+(35, 133, 'Professionals', 'professionals', '', '<p>Joomla! 1.6 continues development of the Joomla Framework and CMS as a powerful and flexible way to bring your vision of the web to reality. With the administrator now fully MVC, the ability to control its look and the management of extensions is now complete.</p>', '<p>Working with multiple template styles and overrides for the same views, creating the design you want is easier than it has ever been. Limiting support to PHP 5.x and above and ending legacy support for Joomla 1.0 extensions makes Joomla! lighter and faster than ever. Languages files can now be overridden without having your changes lost during an upgrade.  With the proper xml your users update extensions with a single click.</p><p>Access control lists are now incorporated using a new system developed for Joomla!. The ACL system is designed with developers in mind, so it is easy to incorporate into your extensions. The new nested sets libraries allow you t!
o incorporate infinitely deep categories but also to use nested sets in a variety of other ways.</p><p>A new forms library makes creating all kinds of user interaction simple. MooTools 1.2 provides a highly flexible javascript framework that is a major advance over MooTools 1.0.</p><p>New events throughout the core make integration of your plugins where you want them a snap.</p><p>Learn about:</p><ul><li>[Working with ACL] </li><li>[Working with nested categories] </li><li>[Using the forms library] </li><li>[Working with Mootools 1.2] </li><li>[Using the override system] </li><li>[Joomla! API]</li><li>[Using JDatabaseQuery] </li><li>[Triggers] </li><li>[Xmlrpc] </li><li>[Installing and updating extensions]</li><li>[Setting up your development environment]</li></ul>', 1, 0, 0, 19, '2010-07-10 21:47:11', 42, 'Joomla!', '2010-08-23 03:02:28', 42, 0, '0000-00-00 00:00:00', '0000-00-00 00:00:00', '0000-00-00 00:00:00', '', '', '{"show_title":"","link_titles":"","show_intro":"","!
show_category":"","link_category":"","show_parent_category":""!
,"link_p
arent_category":"","show_author":"","show_create_date":"","show_modify_date":"","show_publish_date":"","show_readmore":"","show_print_icon":"","show_email_icon":"","show_hits":"","page_title":"","alternative_readmore":"","layout":""}', 3, 0, 6, '', '', 1, 0, '', 1, '*', ''),
+(36, 134, 'Random Image Module', 'random-image-module', '', '<p>This Module displays a random image from your chosen image directory. <a href="http://docs.joomla.org/Help15:Screen.modulessite.edit.15#Random_Image" title="Random Image Module">Help</a></p><p>{loadposition randomimageload}</p>', '', 1, 0, 0, 66, '2010-07-10 21:51:54', 42, '', '0000-00-00 00:00:00', 0, 0, '0000-00-00 00:00:00', '0000-00-00 00:00:00', '0000-00-00 00:00:00', '', '', '{"show_title":"","link_titles":"","show_intro":"","show_category":"","link_category":"","show_parent_category":"","link_parent_category":"","show_author":"","show_create_date":"","show_modify_date":"","show_publish_date":"","show_readmore":"","show_print_icon":"","show_email_icon":"","show_hits":"","page_title":"","alternative_readmore":"","layout":""}', 2, 0, 4, '', '', 1, 1, '', 0, '*', ''),
+(37, 135, 'Related Items Module', 'related-items-module', '', '<p>This Module displays other Articles that are related to the one currently being viewed. These relations are established by the Meta Keywords.  All the keywords of the current Article are searched against all the keywords of all other published articles. <a href="http://docs.joomla.org/Help15:Screen.modulessite.edit.15#Related_Articles" title="Related Items Module">Help</a></p><p>{loadposition relateditemsload}</p>', '', 1, 0, 0, 64, '2010-07-10 21:53:14', 42, 'Joomla!', '2010-08-23 03:00:39', 42, 0, '0000-00-00 00:00:00', '0000-00-00 00:00:00', '0000-00-00 00:00:00', '', '', '{"show_title":"","link_titles":"","show_intro":"","show_category":"","link_category":"","show_parent_category":"","link_parent_category":"","show_author":"","show_create_date":"","show_modify_date":"","show_publish_date":"","show_readmore":"","show_print_icon":"","show_email_icon":"","show_hits":"","page_title":"","alternative_readmore!
":"","layout":""}', 2, 0, 4, '', '', 1, 1, '', 0, '*', ''),
+(38, 136, 'Sample Sites', 'sample-sites', '', '<p>Your installation includes sample data, designed to show you some of the options you have for building your website. In addition to information about Joomla! there are two sample "sites within a site" designed to help you get started with builidng your own site.</p><p>The first site is a simple site about <a href="index.php?Itemid=243">Australian Parks</a>. It shows you you an quickly and easily build a personal site with just the building blocks that are part of Joomla!. It includes a personal blog, weblinks, and a very simple image gallery.</p><p>The second site is slightly more complex and represents what you might do if you are building a site for a small business, in this case a <a href="index.php/welcome.html"></a><a href="index.php?Itemid=429">Fruit Shop</a>.</p><p>In building either style site, or something completely different, you will probably want to add <a href="http://extensions.joomla.org">extensions</a> and e!
ither create or purchase your own template. Many Joomla! users start off by modifying the <a href="http://docs.joomla.org/How_do_you_modify_a_template%3F">templates</a> that come with the core distribution so that they include special images and other design elements that relate to their site''s focus.</p>', '', 1, 0, 0, 19, '2010-07-10 21:55:29', 42, 'Joomla!', '2010-08-23 03:02:28', 42, 0, '0000-00-00 00:00:00', '2010-07-10 21:55:41', '0000-00-00 00:00:00', '', '', '{"show_title":"","link_titles":"","show_intro":"","show_category":"","link_category":"","show_parent_category":"","link_parent_category":"","show_author":"","show_create_date":"","show_modify_date":"","show_publish_date":"","show_readmore":"","show_print_icon":"","show_email_icon":"","show_hits":"","page_title":"","alternative_readmore":"","layout":""}', 3, 0, 11, '', '', 1, 8, '', 0, '*', ''),
(39, 137, 'Search', 'search-component', '', '<p>The search component proviedes basic search functionality for the information contained in your core components. Many third part extensions also can be searched by the search component. Help</p>', '', 1, 0, 0, 21, '2010-07-10 21:57:00', 42, 'Joomla!', '2010-07-10 23:14:32', 42, 0, '0000-00-00 00:00:00', '2010-07-10 21:57:00', '0000-00-00 00:00:00', '', '', '{"show_title":"","link_titles":"","show_intro":"","show_category":"","link_category":"","show_parent_category":"","link_parent_category":"","show_author":"","show_create_date":"","show_modify_date":"","show_publish_date":"","show_readmore":"","show_print_icon":"","show_email_icon":"","show_hits":"","page_title":"","alternative_readmore":"","layout":""}', 3, 0, 3, '', '', 1, 2, '', 0, '*', ''),
-(40, 138, 'Search Module', 'search-module', '', '<p>This module will display a search box. <a href="http://docs.joomla.org/Help15:Screen.modulessite.edit.15#Search" title="Search">Help</a></p><p>{loadposition searchload}</p>', '', 1, 0, 0, 67, '2010-07-10 22:00:58', 42, 'Joomla!', '0000-00-00 00:00:00', 0, 0, '0000-00-00 00:00:00', '2010-07-10 22:00:58', '0000-00-00 00:00:00', '', '', '{"show_title":"","link_titles":"","show_intro":"","show_category":"","link_category":"","show_parent_category":"","link_parent_category":"","show_author":"","show_create_date":"","show_modify_date":"","show_publish_date":"","show_readmore":"","show_print_icon":"","show_email_icon":"","show_hits":"","page_title":"","alternative_readmore":"","layout":""}', 2, 0, 0, '', '', 1, 1, '', 0, '*', ''),
-(41, 139, 'Search ', 'search-plugin', '', '<p>The search component uses plugins to control which parts of your Joomla! site are searched. You may choose to turn off some areas to improve performance or for other reasons. Many third party Joomla! extensions have search plugins that extend where search takes place.</p><p>Default On:</p><ul><li>Content Help</li><li>Contacts Help</li><li>Weblinks Help</li><li>News Feeds Help</li><li>Categories Help</li></ul>', '', 1, 0, 0, 25, '2010-07-10 22:02:17', 42, 'Joomla!', '2010-07-10 23:15:44', 42, 0, '0000-00-00 00:00:00', '2010-07-10 23:15:44', '0000-00-00 00:00:00', '', '', '{"show_title":"","link_titles":"","show_intro":"","show_category":"","link_category":"","show_parent_category":"","link_parent_category":"","show_author":"","show_create_date":"","show_modify_date":"","show_publish_date":"","show_readmore":"","show_print_icon":"","show_email_icon":"","show_hits":"","page_title":"","alternative_readmore":"","layout":""}', 3, 0!
, 0, '', '', 1, 2, '', 0, '*', ''),
-(42, 140, 'Site Map', 'site-map', '', '<p>{loadposition sitemapload}</p><p><em>By putting all of your content into nested categories you can give users and search engines access to everything using a menu.</em></p>', '', 1, 0, 0, 14, '2010-07-10 22:03:35', 42, 'Joomla!', '0000-00-00 00:00:00', 0, 0, '0000-00-00 00:00:00', '2010-07-10 22:03:35', '0000-00-00 00:00:00', '', '', '{"show_title":"","link_titles":"","show_intro":"","show_category":"","link_category":"","show_parent_category":"","link_parent_category":"","show_author":"","show_create_date":"","show_modify_date":"","show_publish_date":"","show_readmore":"","show_print_icon":"","show_email_icon":"","show_hits":"","page_title":"","alternative_readmore":"","layout":""}', 2, 0, 0, '', '', 1, 2, '', 0, '*', ''),
-(43, 141, 'Spotted Quoll', 'spotted-quoll', '', '<p><img src="images/sampledata/parks/animals/220px_spottedquoll_2005_seanmcclean.jpg" border="0" alt="Spotted Quoll" style="vertical-align: middle; border: 0;" /></p>', '<p><img src="images/sampledata/parks/animals/789px_spottedquoll_2005_seanmcclean.jpg" border="0" alt="Spotted Quoll" style="vertical-align: middle;" /></p><p> </p><p>Source: http://en.wikipedia.org/wiki/File:SpottedQuoll_2005_SeanMcClean.jpg</p><p>Author: Sean McClean</p><p>License: GNU Free Documentation License v 1.2 or later</p>', 1, 0, 0, 72, '2010-07-10 22:04:40', 42, 'Parks Webmaster', '0000-00-00 00:00:00', 0, 0, '0000-00-00 00:00:00', '2010-07-10 22:04:40', '0000-00-00 00:00:00', '', '', '{"show_title":"","link_titles":"","show_intro":"","show_category":"","link_category":"","show_parent_category":"","link_parent_category":"","show_author":"","show_create_date":"","show_modify_date":"","show_publish_date":"","show_readmore":"","show_print_icon":"","s!
how_email_icon":"","show_hits":"","page_title":"","alternative_readmore":"","layout":""}', 2, 0, 0, '', '', 1, 0, '', 0, '*', ''),
-(44, 142, 'Statistics Module', 'statistics', '', '<p>The Statistics Module shows information about your server installation together with statistics on the Web site users, number of Articles in your database and the number of Web links you provide.</p><p>{loadposition statisticsload}</p>', '', 1, 0, 0, 67, '2010-07-10 22:05:45', 42, 'Joomla!', '2010-07-10 22:06:09', 42, 0, '0000-00-00 00:00:00', '2010-07-10 22:06:09', '0000-00-00 00:00:00', '', '', '{"show_title":"","link_titles":"","show_intro":"","show_category":"","link_category":"","show_parent_category":"","link_parent_category":"","show_author":"","show_create_date":"","show_modify_date":"","show_publish_date":"","show_readmore":"","show_print_icon":"","show_email_icon":"","show_hits":"","page_title":"","alternative_readmore":"","layout":""}', 3, 0, 0, '', '', 1, 1, '', 0, '*', ''),
-(45, 143, 'Syndicate Module', 'syndicate-module', '', '<p>The syndicate module allows you to display a link that allows users to take a feed from your site. It will only display on pages for which feeds are possible. That means it will not display on single article, contact or weblinks pages, such as this one. <a href="http://docs.joomla.org/Help15:Screen.modulessite.edit.15#Syndicate" title="Synicate Module">Help</a></p><p>{loadposition syndicateload}</p>', '', 1, 0, 0, 67, '2010-07-10 22:07:51', 42, '', '0000-00-00 00:00:00', 0, 0, '0000-00-00 00:00:00', '2010-07-10 22:07:51', '0000-00-00 00:00:00', '', '', '{"show_title":"","link_titles":"","show_intro":"","show_category":"","link_category":"","show_parent_category":"","link_parent_category":"","show_author":"","show_create_date":"","show_modify_date":"","show_publish_date":"","show_readmore":"","show_print_icon":"","show_email_icon":"","show_hits":"","page_title":"","alternative_readmore":"","layout":""}', 2, 0, 0, '', !
'', 1, 1, '', 0, '*', ''),
-(46, 144, 'System', 'system', '', '<p>System plugins operate every time a page on your site loads. They control such things as your URLS, whether users can check a "remember me" box on the login module, and whether caching is enabled.  New in 1.6 is the redirect plugin that with the redirect component assist you in managing changes in URLs.</p><p>Default on:</p><ul><li>Remember me Help</li><li>SEF Help</li><li>Debug Help</li></ul><p>Default off:</p><ul><li>Cache Help</li><li>Log Help</li><li>Redirect Help</li></ul>', '', 1, 0, 0, 25, '2010-07-10 22:09:41', 42, 'Joomla!', '2010-07-10 23:15:54', 42, 0, '0000-00-00 00:00:00', '2010-07-10 22:09:41', '0000-00-00 00:00:00', '', '', '{"show_title":"","link_titles":"","show_intro":"","show_category":"","link_category":"","show_parent_category":"","link_parent_category":"","show_author":"","show_create_date":"","show_modify_date":"","show_publish_date":"","show_readmore":"","show_print_icon":"","show_email_icon":"","show_hits"!
:"","page_title":"","alternative_readmore":"","layout":""}', 3, 0, 0, '', '', 1, 2, '', 0, '*', ''),
-(47, 145, 'The Joomla! Community', 'the-joomla-community', '', '<p>Joomla! means All Together, and it is a community of people all working and having fun together that makes Joomla! possible. Thousands of people each year participate in the Joomla! community, and we hope you will be one of them.<a href="index.php?option=com_content&view=article&catid=40&id=27">Archive Module</a></p><p>People with all kinds of skills, of all skill levels and from around the world are welcome to join in. Participate in the <a href="http://joomla.org">Joomla.org</a> family of websites (the<a href="http://forum.joomla.org"> forum </a>is a great place to start). Come to a <a href="http://community.joomla.org/events.html">Joomla! event</a>. Join or start a <a href="http://community.joomla.org/user-groups.html">Joomla! Users Group</a>. Whether you are a developer, site administrator, designer, end user or fan, there are ways for you to participate and contribute.</p>', '', 1, 0, 0, 19, '2010-07-10!
22:11:09', 42, 'Joomla!', '0000-00-00 00:00:00', 0, 0, '0000-00-00 00:00:00', '0000-00-00 00:00:00', '0000-00-00 00:00:00', '', '', '{"show_title":"","link_titles":"","show_intro":"","show_category":"","link_category":"","show_parent_category":"","link_parent_category":"","show_author":"","show_create_date":"","show_modify_date":"","show_publish_date":"","show_readmore":"","show_print_icon":"","show_email_icon":"","show_hits":"","page_title":"","alternative_readmore":"","layout":""}', 2, 0, 0, '', '', 1, 11, '', 0, '*', ''),
-(48, 146, 'The Joomla! Project', 'the-joomla-project', '', '<p>The Joomla! Project consists of all of the people who make and support the Joomla! Web Platform and Content Management System.</p><p>Our mission is to provide a flexible platform for digital publishing and collaboration.</p><p>The core values are:</p><ul><li>Freedom</li><li>Equality</li><li>Trust</li><li>Community</li><li>Collaboration</li><li>Usability</li></ul><p>In our vision, we see:</p><ul><li>People publishing and collaborating in their communities and around the world</li><li>Software that is free, secure, and high-quality</li><li>A community that is enjoyable and rewarding to participate in</li><li>People around the world using their preferred languages</li><li>A project that acts autonomously</li><li>A project that is socially responsible</li><li>A project dedicated to maintaining the trust of its users</li></ul><p>There are millions of users around the world and thousands of people who contribute to th!
e Joomla! Project. They work in three main groups: the Production Working Group, responsible for everything that goes into software and documentation; the Community Working Group, responsible for creating a nurturing the community; and Open Source Matters, the non profit organization responsible for managing legal, financial and organizational issues.</p><p>Joomla! is a free and open source project, which uses the GNU General Public License version 2 or later.</p>', '', 1, 0, 0, 19, '2010-07-10 22:20:16', 42, '', '2010-07-10 22:20:39', 42, 0, '0000-00-00 00:00:00', '0000-00-00 00:00:00', '0000-00-00 00:00:00', '', '', '{"show_title":"","link_titles":"","show_intro":"","show_category":"","link_category":"","show_parent_category":"","link_parent_category":"","show_author":"","show_create_date":"","show_modify_date":"","show_publish_date":"","show_readmore":"","show_print_icon":"","show_email_icon":"","show_hits":"","page_title":"","alternative_readmore":"","layout":""}', 3, !
0, 0, '', '', 1, 10, '', 0, '*', ''),
-(49, 147, 'Typography', 'typography', '', '<h1>H1 ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmonpqrstuvwzyz</h1><h2>H2 ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmonpqrstuvwzyz</h2><h3>H3 ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmonpqrstuvwzyz</h3><h4>H4 ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmonpqrstuvwzyz</h4><h5>H5 ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmonpqrstuvwzyz</h5><h6>H6 ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmonpqrstuvwzyz</h6><p>P The quick brown fox ran over the lazy dog. THE QUICK BROWN FOX RAN OVER THE LAZY DOG.</p><ul><li>Item</li><li>Item</li><li>Item<br /> <ul><li>Item</li><li>Item</li><li>Item<br /> <ul><li>Item</li><li>Item</li><li>Item</li></ul></li></ul></li></ul><ol><li>tem</li><li>Item</li><li>Item<br /> <ol><li>Item</li><li>Item</li><li>Item<br /><ol><li>Item</li><li>Item</li><li>Item</li></ol></li></ol> </li></ol>', '', 1, 0, 0, 23, '2010-07-10 22:22:26', 42, 'Joomla!', '0000-00-00 00:00:00', 0, 0, '0000-00-00 00:00:00', '2010-07-10 22:22:26', '0000-00-00 0!
0:00:00', '', '', '{"show_title":"","link_titles":"","show_intro":"","show_category":"","link_category":"","show_parent_category":"","link_parent_category":"","show_author":"","show_create_date":"","show_modify_date":"","show_publish_date":"","show_readmore":"","show_print_icon":"","show_email_icon":"","show_hits":"","page_title":"","alternative_readmore":"","layout":""}', 2, 0, 0, '', '', 1, 14, '', 0, '*', ''),
-(50, 148, 'Upgraders', 'upgraders', '', '<p>If you are an experienced Joomla! 1.5 user, 1.6 will seem very familiar. There are new templates and improved user interfaces, but most functionality is the same. The biggest changes are improved access control (ACL) and nested categories.</p>', '<p>The new user manager which will let you manage who has access to what in your site. You can leave access groups exactly the way you had them in Joomla 1.5 or make them as complicated as you want. You can learn more about<a href="http://docs.joomla.org/ACL_Tutorial_for_Joomla_1.6"> how access control works</a> in on the <a href="http://docs.joomla.org">Joomla! Documentation sit</a></p><p>In Joomla 1.5 and 1.0 content was organized into sections and categories. In 1.6 sections are gone, and you can create categories within categories, going as deep as you want. The sample data provides many examples of the use of nested categories.</p><p>All layouts have been redesigned to improve access!
ibility and flexibility. If you would like to keep the 1.5 layouts, you can find them in the html folder of the MilkyWay template. Simply copy the layouts you want to the html folder of your template.</p><p>Updating your site and extensions when needed is easier than ever thanks to installer improvements.</p><p>To learn more about how to<a href="http://docs.joomla.org/Migrating_from_1.5_to_1.6"> move a Joomla! 1.5 site to a Joomla! 1.6 installation read this article</a>.</p>', 1, 0, 0, 19, '2010-07-10 22:38:22', 42, '', '0000-00-00 00:00:00', 0, 0, '0000-00-00 00:00:00', '2010-07-10 22:38:22', '0000-00-00 00:00:00', '', '', '{"show_title":"","link_titles":"","show_intro":"","show_category":"","link_category":"","show_parent_category":"","link_parent_category":"","show_author":"","show_create_date":"","show_modify_date":"","show_publish_date":"","show_readmore":"","show_print_icon":"","show_email_icon":"","show_hits":"","page_title":"","alternative_readmore":"","layout":""}'!
, 2, 0, 0, '', '', 1, 0, '', 1, '*', ''),
-(51, 149, 'User', 'user-plugins', '', '<p>Default on:</p><ul><li>Joomla Help</li></ul><p>Default off:</p><p>Two new plugins are available in 1.6 but are disabled by default.</p><ul><li>Contact Creator Help<br />Creates a new linked contact record for each new user created. </li><li>Profile Help<br />This example profile plugin allows you to insert additional fields into user registration and profile display. This is intended as an example of the types of extensions to the profile you might want to create. </li></ul>', '', 1, 0, 0, 25, '2010-07-10 22:43:34', 42, 'Joomla!', '2010-07-10 23:16:15', 42, 0, '0000-00-00 00:00:00', '2010-07-10 23:16:15', '0000-00-00 00:00:00', '', '', '{"show_title":"","link_titles":"","show_intro":"","show_category":"","link_category":"","show_parent_category":"","link_parent_category":"","show_author":"","show_create_date":"","show_modify_date":"","show_publish_date":"","show_readmore":"","show_print_icon":"","show_email_icon":"","show_hits":""!
,"page_title":"","alternative_readmore":"","layout":""}', 3, 0, 0, '', '', 1, 2, '', 0, '*', ''),
-(52, 150, 'Users', 'users-component', '', '<p>The users extension lets your site visitors register, login and logout, change their passwords and other information, and recover lost passwords. In the administrator it allows you to create, block and manage users and create user groups and access levels. Help</p>\r\n<p>Please note that some of the user views will not display if you are not logged in to the site.</p>', '', 1, 0, 0, 21, '2010-07-10 22:46:05', 42, 'Joomla!', '2010-07-11 13:15:20', 42, 0, '0000-00-00 00:00:00', '2010-07-10 23:13:53', '0000-00-00 00:00:00', '', '', '{"show_title":"","link_titles":"","show_intro":"","show_category":"","link_category":"","show_parent_category":"","link_parent_category":"","show_author":"","show_create_date":"","show_modify_date":"","show_publish_date":"","show_readmore":"","show_print_icon":"","show_email_icon":"","show_hits":"","page_title":"","alternative_readmore":"","layout":""}', 4, 0, 4, '', '', 1, 2, '', 0, '*', ''),
-(53, 151, 'Using Joomla!', 'using-joomla', '', '<p>With Joomla! You can create anything from a simple personal website to a complex ecommerce or social site with millions of visitors.</p><p>This section of the sample data provides you with a brief introduction to Joomla! concepts and reference material to help you understand how Joomla! works.</p><p><em>When you not longer need the sample data, you can can simply unpublish the sample data category found within each extension in the site administrator or you may completely delete each item and all of the categories. </em></p>', '', 1, 0, 0, 19, '2010-07-10 23:00:59', 42, 'Joomla!', '0000-00-00 00:00:00', 0, 0, '0000-00-00 00:00:00', '2010-07-10 23:00:59', '0000-00-00 00:00:00', '', '', '{"show_title":"","link_titles":"","show_intro":"","show_category":"","link_category":"","show_parent_category":"","link_parent_category":"","show_author":"","show_create_date":"","show_modify_date":"","show_publish_date":"","show_readmore":""!
,"show_print_icon":"","show_email_icon":"","show_hits":"","page_title":"","alternative_readmore":"","layout":""}', 2, 0, 0, '', '', 1, 14, '', 0, '*', ''),
-(54, 152, 'Weblinks', 'weblinks', '', '<p>Weblinks (com_weblinks) is a component that provides a structured way to organize external links and present them in a visually attractive, consistent and informative way. Help</p>', '', 1, 0, 0, 21, '2010-07-10 23:02:42', 42, 'Joomla!', '2010-07-10 23:14:32', 42, 0, '0000-00-00 00:00:00', '2010-07-10 23:02:42', '0000-00-00 00:00:00', '', '', '{"show_title":"","link_titles":"","show_intro":"","show_category":"","link_category":"","show_parent_category":"","link_parent_category":"","show_author":"","show_create_date":"","show_modify_date":"","show_publish_date":"","show_readmore":"","show_print_icon":"","show_email_icon":"","show_hits":"","page_title":"","alternative_readmore":"","layout":""}', 3, 0, 5, '', '', 1, 6, '', 0, '*', ''),
-(55, 153, 'Weblinks Module', 'weblinks-module', '', '<p>This module displays the list of weblinks in a category.  <a href="http://docs.joomla.org/Help15:Screen.modulessite.edit.15#Weblinks" title="Weblinks Module">Help</a></p><p>{loadposition weblinksload}</p>', '', 1, 0, 0, 66, '2010-07-10 23:04:41', 42, 'Joomla!', '0000-00-00 00:00:00', 0, 0, '0000-00-00 00:00:00', '2010-07-10 23:04:41', '0000-00-00 00:00:00', '', '', '{"show_title":"","link_titles":"","show_intro":"","show_category":"","link_category":"","show_parent_category":"","link_parent_category":"","show_author":"","show_create_date":"","show_modify_date":"","show_publish_date":"","show_readmore":"","show_print_icon":"","show_email_icon":"","show_hits":"","page_title":"","alternative_readmore":"","layout":""}', 2, 0, 0, '', '', 1, 2, '', 0, '*', ''),
-(56, 154, 'Who''s Online', 'whos-online', '', '<p>The Who''s Online Module displays the number of Anonymous Users (e.g. Guests) and Registered Users (ones logged in) that are currently accessing the Web site. <a href="http://docs.joomla.org/Help15:Screen.modulessite.edit.15#Who.27s_Online" title="Who''s Online">Help</a></p><p>{loadposition whosonlineload}</p>', '', 1, 0, 0, 65, '2010-07-10 23:06:16', 42, 'Joomla!', '0000-00-00 00:00:00', 0, 0, '0000-00-00 00:00:00', '2010-07-10 23:06:16', '0000-00-00 00:00:00', '', '', '{"show_title":"","link_titles":"","show_intro":"","show_category":"","link_category":"","show_parent_category":"","link_parent_category":"","show_author":"","show_create_date":"","show_modify_date":"","show_publish_date":"","show_readmore":"","show_print_icon":"","show_email_icon":"","show_hits":"","page_title":"","alternative_readmore":"","layout":""}', 2, 0, 0, '', '', 1, 2, '', 0, '*', ''),
-(57, 155, 'Wobbegone', 'wobbegone', '', '<p><img src="images/sampledata/parks/animals/180px_wobbegong.jpg" border="0" alt="Wobbegone" style="vertical-align: middle; border: 0;" /></p>', '<p><img src="images/sampledata/parks/animals/800px_wobbegong.jpg" border="0" style="vertical-align: middle; border: 0;" /></p><p>Source: http://en.wikipedia.org/wiki/File:Wobbegong.jpg</p><p>Author: Richard Ling</p><p>Rights: GNU Free Documentation License v 1.2 or later</p>', 1, 0, 0, 72, '2010-07-10 23:07:30', 42, 'Parks Webmaster', '0000-00-00 00:00:00', 0, 0, '0000-00-00 00:00:00', '2010-07-10 23:07:29', '0000-00-00 00:00:00', '', '', '{"show_title":"","link_titles":"","show_intro":"","show_category":"","link_category":"","show_parent_category":"","link_parent_category":"","show_author":"","show_create_date":"","show_modify_date":"","show_publish_date":"","show_readmore":"","show_print_icon":"","show_email_icon":"","show_hits":"","page_title":"","alternative_readmore":"","layout":""}', !
2, 0, 0, '', '', 1, 0, '', 0, '*', ''),
-(58, 156, 'Wonderful Watermelon', 'wonderful-watermelon', '', '<p>Watermelon is a wonderful and healthy treat. We grow the world''s sweetest watermelon. We have the largest watermelon patch in our country.</p>', '', 1, 0, 0, 30, '2010-07-10 23:09:14', 42, 'Fruit Shop Webmaster', '0000-00-00 00:00:00', 0, 0, '0000-00-00 00:00:00', '0000-00-00 00:00:00', '0000-00-00 00:00:00', '', '', '{"show_title":"","link_titles":"","show_intro":"","show_category":"","link_category":"","show_parent_category":"","link_parent_category":"","show_author":"","show_create_date":"","show_modify_date":"","show_publish_date":"","show_readmore":"","show_print_icon":"","show_email_icon":"","show_hits":"","page_title":"","alternative_readmore":"","layout":""}', 2, 0, 0, '', '', 1, 0, '', 0, '*', ''),
-(59, 157, 'Wrapper Module', 'wrapper-module', '', '<p>This module shows an iFrame window to specified location. <a href="http://docs.joomla.org/Help15:Screen.modulessite.edit.15#Wrapper" title="Wrapper Module">Help</a></p><p>{loadposition wrapperload}</p>', '', 1, 0, 0, 67, '2010-07-10 23:10:10', 42, 'Joomla!', '0000-00-00 00:00:00', 0, 0, '0000-00-00 00:00:00', '0000-00-00 00:00:00', '0000-00-00 00:00:00', '', '', '{"show_title":"","link_titles":"","show_intro":"","show_category":"","link_category":"","show_parent_category":"","link_parent_category":"","show_author":"","show_create_date":"","show_modify_date":"","show_publish_date":"","show_readmore":"","show_print_icon":"","show_email_icon":"","show_hits":"","page_title":"","alternative_readmore":"","layout":""}', 2, 0, 0, '', '', 1, 0, '', 0, '*', ''),
-(60, 158, 'News Feeds', 'news-feeds', '', '<p>News Feeds (com_newsfeeds) provides a way to organize and present news feeds. News feeds are a way that you present information from another site on your site. For example, the joomla.org website has numerous feeds that you an incorporate on your site. You an use menus to present a single feed, a list of feeds in a category, or or a list of all feed categories. Help</p>', '', 1, 0, 0, 21, '2010-07-11 00:28:23', 42, 'Joomla!', '0000-00-00 00:00:00', 0, 0, '0000-00-00 00:00:00', '2010-07-11 00:28:23', '0000-00-00 00:00:00', '', '', '{"show_title":"","link_titles":"","show_intro":"","show_category":"","link_category":"","show_parent_category":"","link_parent_category":"","show_author":"","show_create_date":"","show_modify_date":"","show_publish_date":"","show_readmore":"","show_print_icon":"","show_email_icon":"","show_hits":"","page_title":"","alternative_readmore":"","layout":""}', 2, 0, 0, '', '', 1, 2, '', 0, '*', ''),
-(61, 159, 'Breadcrumbs Module', 'breadcrumbs-module', '', '<p>Breadcrumbs provide a pathway for users to navigate through the site. <a href="http://docs.joomla.org/Help15:Screen.modulessite.edit.15#Breadcrumbs" title="Breacrumbs Module">Help</a></p><p>{loadposition breadcrumbsload}</p>', '', 1, 0, 0, 67, '2010-07-11 01:30:25', 42, 'Joomla!', '0000-00-00 00:00:00', 0, 0, '0000-00-00 00:00:00', '2010-07-11 01:30:25', '0000-00-00 00:00:00', '', '', '{"show_title":"","link_titles":"","show_intro":"","show_category":"","link_category":"","show_parent_category":"","link_parent_category":"","show_author":"","show_create_date":"","show_modify_date":"","show_publish_date":"","show_readmore":"","show_print_icon":"","show_email_icon":"","show_hits":"","page_title":"","alternative_readmore":"","layout":""}', 2, 0, 0, '', '', 1, 2, '', 0, '*', ''),
-(62, 160, 'Content', 'content-plugins', '', '<p>Content plugins run when specific kinds of pages are loaded. They do things ranging from protecting email addresses from harvesters to creating page breaks.</p><p>Default on:</p><ul><li>Email Cloaking Help</li><li>Load Module Help</li><li>Page Break Help</li><li>Page Navigation Help</li><li>Rating Help</li></ul><p>Default off:</p><ul><li>Code Highlighting (Geshi) Help</li></ul>', '', 1, 0, 0, 25, '2010-07-11 06:19:31', 42, 'Joomla!', '0000-00-00 00:00:00', 0, 0, '0000-00-00 00:00:00', '2010-07-11 06:19:31', '0000-00-00 00:00:00', '', '', '{"show_title":"","link_titles":"","show_intro":"","show_category":"","link_category":"","show_parent_category":"","link_parent_category":"","show_author":"","show_create_date":"","show_modify_date":"","show_publish_date":"","show_readmore":"","show_print_icon":"","show_email_icon":"","show_hits":"","page_title":"","alternative_readmore":"","layout":""}', 2, 0, 0, '', '', 1, 3, '', 0, '*', ''),
-(64, 162, 'Blue Mountain Rain Forest', 'blue-mountain-rain-forest', '', '<p><img src="images/sampledata/parks/landscape/120px_rainforest_bluemountainsnsw.jpg" border="0" alt="Rain Forest Blue Mountrains" /></p>', '<p><img src="images/sampledata/parks/landscape/727px_rainforest_bluemountainsnsw.jpg" border="0" alt="Rain Forest Blue Mountrains" style="vertical-align: middle;" /></p><p> </p><p class="caption">Source: http://commons.wikimedia.org/wiki/File:Rainforest,bluemountainsNSW.jpg</p><p class="caption">Author: Adam J.W.C.</p><p class="caption">License: GNU Free Documentation License</p>', 1, 0, 0, 73, '2010-07-11 07:19:35', 42, 'Parks Webmaster', '0000-00-00 00:00:00', 0, 0, '0000-00-00 00:00:00', '0000-00-00 00:00:00', '0000-00-00 00:00:00', '', '', '{"show_title":"","link_titles":"","show_intro":"","show_category":"","link_category":"","show_parent_category":"","link_parent_category":"","show_author":"","show_create_date":"","show_modify_date":"","show_publish_date":"!
","show_readmore":"","show_print_icon":"","show_email_icon":"","show_hits":"","page_title":"","alternative_readmore":"","layout":""}', 2, 0, 0, '', '', 1, 0, '', 0, '*', ''),
-(65, 163, 'Ormiston Pound', 'ormiston-pound', '', '<p><img src="images/sampledata/parks/landscape/180px_ormiston_pound.jpg" border="0" alt="Ormiston Pound" style="border: 0;" /></p>', '<p><img src="images/sampledata/parks/landscape/800px_ormiston_pound.jpg" border="0" alt="Ormiston Pound" height="375" style="vertical-align: middle; border: 0;" /></p><p> </p><p class="caption">Source: http://commons.wikimedia.org/wiki/File:Ormiston_Pound.JPG</p><p class="caption">Author:</p><p class="caption">License: GNU Free Public Documentation License</p>', 1, 0, 0, 73, '2010-07-11 07:21:18', 42, 'Parks Webmaster', '2010-07-11 07:21:47', 42, 0, '0000-00-00 00:00:00', '2010-07-11 07:21:18', '0000-00-00 00:00:00', '', '', '{"show_title":"","link_titles":"","show_intro":"","show_category":"","link_category":"","show_parent_category":"","link_parent_category":"","show_author":"","show_create_date":"","show_modify_date":"","show_publish_date":"","show_readmore":"","show_print_icon":"","show_!
email_icon":"","show_hits":"","page_title":"","alternative_readmore":"","layout":""}', 3, 0, 0, '', '', 1, 0, '', 0, '*', ''),
-(66, 165, 'Latest Users Module', 'latest-users-module', '', '<p>This module displays the latest registered users. Help</p>\r\n<p>{loadposition userslatestload}</p>', '', 1, 0, 0, 65, '2010-07-11 13:54:30', 42, 'Joomla!', '2010-07-11 13:55:19', 42, 0, '0000-00-00 00:00:00', '2010-07-11 13:55:19', '0000-00-00 00:00:00', '', '', '{"show_title":"1","link_titles":"","show_intro":"","show_category":"1","link_category":"1","show_parent_category":"","link_parent_category":"","show_author":"","show_create_date":"","show_modify_date":"","show_publish_date":"","show_readmore":"","show_print_icon":"","show_email_icon":"","show_hits":"","page_title":"","alternative_readmore":"","layout":""}', 3, 0, 0, '', '', 1, 3, '', 0, '*', '');
+(40, 138, 'Search Module', 'search-module', '', '<p>This module will display a search box. <a href="http://docs.joomla.org/Help15:Screen.modulessite.edit.15#Search" title="Search">Help</a></p><p>{loadposition searchload}</p>', '', 1, 0, 0, 67, '2010-07-10 22:00:58', 42, 'Joomla!', '2010-08-23 02:58:49', 42, 0, '0000-00-00 00:00:00', '2010-07-10 22:00:58', '0000-00-00 00:00:00', '', '', '{"show_title":"","link_titles":"","show_intro":"","show_category":"","link_category":"","show_parent_category":"","link_parent_category":"","show_author":"","show_create_date":"","show_modify_date":"","show_publish_date":"","show_readmore":"","show_print_icon":"","show_email_icon":"","show_hits":"","page_title":"","alternative_readmore":"","layout":""}', 2, 0, 4, '', '', 1, 1, '', 0, '*', ''),
+(41, 139, 'Search ', 'search-plugin', '', '<p>The search component uses plugins to control which parts of your Joomla! site are searched. You may choose to turn off some areas to improve performance or for other reasons. Many third party Joomla! extensions have search plugins that extend where search takes place.</p><p>Default On:</p><ul><li>Content Help</li><li>Contacts Help</li><li>Weblinks Help</li><li>News Feeds Help</li><li>Categories Help</li></ul>', '', 1, 0, 0, 25, '2010-07-10 22:02:17', 42, 'Joomla!', '2010-07-10 23:15:44', 42, 0, '0000-00-00 00:00:00', '2010-07-10 23:15:44', '0000-00-00 00:00:00', '', '', '{"show_title":"","link_titles":"","show_intro":"","show_category":"","link_category":"","show_parent_category":"","link_parent_category":"","show_author":"","show_create_date":"","show_modify_date":"","show_publish_date":"","show_readmore":"","show_print_icon":"","show_email_icon":"","show_hits":"","page_title":"","alternative_readmore":"","layout":""}', 3, 0!
, 1, '', '', 1, 2, '', 0, '*', ''),
+(42, 140, 'Site Map', 'site-map', '', '<p>{loadposition sitemapload}</p><p><em>By putting all of your content into nested categories you can give users and search engines access to everything using a menu.</em></p>', '', 1, 0, 0, 14, '2010-07-10 22:03:35', 42, 'Joomla!', '2010-08-23 02:58:49', 42, 0, '0000-00-00 00:00:00', '2010-07-10 22:03:35', '0000-00-00 00:00:00', '', '', '{"show_title":"","link_titles":"","show_intro":"","show_category":"","link_category":"","show_parent_category":"","link_parent_category":"","show_author":"","show_create_date":"","show_modify_date":"","show_publish_date":"","show_readmore":"","show_print_icon":"","show_email_icon":"","show_hits":"","page_title":"","alternative_readmore":"","layout":""}', 2, 0, 1, '', '', 1, 2, '', 0, '*', ''),
+(43, 141, 'Spotted Quoll', 'spotted-quoll', '', '<p><img src="images/sampledata/parks/animals/220px_spottedquoll_2005_seanmcclean.jpg" border="0" alt="Spotted Quoll" style="vertical-align: middle; border: 0;" /></p>', '<p><img src="images/sampledata/parks/animals/789px_spottedquoll_2005_seanmcclean.jpg" border="0" alt="Spotted Quoll" style="vertical-align: middle;" /></p><p> </p><p>Source: http://en.wikipedia.org/wiki/File:SpottedQuoll_2005_SeanMcClean.jpg</p><p>Author: Sean McClean</p><p>License: GNU Free Documentation License v 1.2 or later</p>', 1, 0, 0, 72, '2010-07-10 22:04:40', 42, 'Parks Webmaster', '2010-08-23 03:00:39', 42, 0, '0000-00-00 00:00:00', '2010-07-10 22:04:40', '0000-00-00 00:00:00', '', '', '{"show_title":"","link_titles":"","show_intro":"","show_category":"","link_category":"","show_parent_category":"","link_parent_category":"","show_author":"","show_create_date":"","show_modify_date":"","show_publish_date":"","show_readmore":"","show_print_icon":"","!
show_email_icon":"","show_hits":"","page_title":"","alternative_readmore":"","layout":""}', 2, 0, 4, '', '', 1, 0, '', 0, '*', ''),
+(44, 142, 'Statistics Module', 'statistics', '', '<p>The Statistics Module shows information about your server installation together with statistics on the Web site users, number of Articles in your database and the number of Web links you provide.</p><p>{loadposition statisticsload}</p>', '', 1, 0, 0, 67, '2010-07-10 22:05:45', 42, 'Joomla!', '2010-08-23 02:58:49', 42, 0, '0000-00-00 00:00:00', '2010-07-10 22:06:09', '0000-00-00 00:00:00', '', '', '{"show_title":"","link_titles":"","show_intro":"","show_category":"","link_category":"","show_parent_category":"","link_parent_category":"","show_author":"","show_create_date":"","show_modify_date":"","show_publish_date":"","show_readmore":"","show_print_icon":"","show_email_icon":"","show_hits":"","page_title":"","alternative_readmore":"","layout":""}', 3, 0, 5, '', '', 1, 1, '', 0, '*', ''),
+(45, 143, 'Syndicate Module', 'syndicate-module', '', '<p>The syndicate module allows you to display a link that allows users to take a feed from your site. It will only display on pages for which feeds are possible. That means it will not display on single article, contact or weblinks pages, such as this one. <a href="http://docs.joomla.org/Help15:Screen.modulessite.edit.15#Syndicate" title="Synicate Module">Help</a></p><p>{loadposition syndicateload}</p>', '', 1, 0, 0, 67, '2010-07-10 22:07:51', 42, '', '2010-08-23 02:58:49', 42, 0, '0000-00-00 00:00:00', '2010-07-10 22:07:51', '0000-00-00 00:00:00', '', '', '{"show_title":"","link_titles":"","show_intro":"","show_category":"","link_category":"","show_parent_category":"","link_parent_category":"","show_author":"","show_create_date":"","show_modify_date":"","show_publish_date":"","show_readmore":"","show_print_icon":"","show_email_icon":"","show_hits":"","page_title":"","alternative_readmore":"","layout":""}', 2, 0, 6, '',!
'', 1, 1, '', 0, '*', ''),
+(46, 144, 'System', 'system', '', '<p>System plugins operate every time a page on your site loads. They control such things as your URLS, whether users can check a "remember me" box on the login module, and whether caching is enabled.  New in 1.6 is the redirect plugin that with the redirect component assist you in managing changes in URLs.</p><p>Default on:</p><ul><li>Remember me Help</li><li>SEF Help</li><li>Debug Help</li></ul><p>Default off:</p><ul><li>Cache Help</li><li>Log Help</li><li>Redirect Help</li></ul>', '', 1, 0, 0, 25, '2010-07-10 22:09:41', 42, 'Joomla!', '2010-07-10 23:15:54', 42, 0, '0000-00-00 00:00:00', '2010-07-10 22:09:41', '0000-00-00 00:00:00', '', '', '{"show_title":"","link_titles":"","show_intro":"","show_category":"","link_category":"","show_parent_category":"","link_parent_category":"","show_author":"","show_create_date":"","show_modify_date":"","show_publish_date":"","show_readmore":"","show_print_icon":"","show_email_icon":"","show_hits"!
:"","page_title":"","alternative_readmore":"","layout":""}', 3, 0, 2, '', '', 1, 2, '', 0, '*', ''),
+(47, 145, 'The Joomla! Community', 'the-joomla-community', '', '<p>Joomla! means All Together, and it is a community of people all working and having fun together that makes Joomla! possible. Thousands of people each year participate in the Joomla! community, and we hope you will be one of them.<a href="index.php?option=com_content&view=article&catid=40&id=27">Archive Module</a></p><p>People with all kinds of skills, of all skill levels and from around the world are welcome to join in. Participate in the <a href="http://joomla.org">Joomla.org</a> family of websites (the<a href="http://forum.joomla.org"> forum </a>is a great place to start). Come to a <a href="http://community.joomla.org/events.html">Joomla! event</a>. Join or start a <a href="http://community.joomla.org/user-groups.html">Joomla! Users Group</a>. Whether you are a developer, site administrator, designer, end user or fan, there are ways for you to participate and contribute.</p>', '', 1, 0, 0, 19, '2010-07-10!
22:11:09', 42, 'Joomla!', '2010-08-23 03:02:28', 42, 0, '0000-00-00 00:00:00', '0000-00-00 00:00:00', '0000-00-00 00:00:00', '', '', '{"show_title":"","link_titles":"","show_intro":"","show_category":"","link_category":"","show_parent_category":"","link_parent_category":"","show_author":"","show_create_date":"","show_modify_date":"","show_publish_date":"","show_readmore":"","show_print_icon":"","show_email_icon":"","show_hits":"","page_title":"","alternative_readmore":"","layout":""}', 2, 0, 4, '', '', 1, 11, '', 0, '*', ''),
+(48, 146, 'The Joomla! Project', 'the-joomla-project', '', '<p>The Joomla! Project consists of all of the people who make and support the Joomla! Web Platform and Content Management System.</p><p>Our mission is to provide a flexible platform for digital publishing and collaboration.</p><p>The core values are:</p><ul><li>Freedom</li><li>Equality</li><li>Trust</li><li>Community</li><li>Collaboration</li><li>Usability</li></ul><p>In our vision, we see:</p><ul><li>People publishing and collaborating in their communities and around the world</li><li>Software that is free, secure, and high-quality</li><li>A community that is enjoyable and rewarding to participate in</li><li>People around the world using their preferred languages</li><li>A project that acts autonomously</li><li>A project that is socially responsible</li><li>A project dedicated to maintaining the trust of its users</li></ul><p>There are millions of users around the world and thousands of people who contribute to th!
e Joomla! Project. They work in three main groups: the Production Working Group, responsible for everything that goes into software and documentation; the Community Working Group, responsible for creating a nurturing the community; and Open Source Matters, the non profit organization responsible for managing legal, financial and organizational issues.</p><p>Joomla! is a free and open source project, which uses the GNU General Public License version 2 or later.</p>', '', 1, 0, 0, 19, '2010-07-10 22:20:16', 42, '', '2010-08-23 03:02:28', 42, 0, '0000-00-00 00:00:00', '0000-00-00 00:00:00', '0000-00-00 00:00:00', '', '', '{"show_title":"","link_titles":"","show_intro":"","show_category":"","link_category":"","show_parent_category":"","link_parent_category":"","show_author":"","show_create_date":"","show_modify_date":"","show_publish_date":"","show_readmore":"","show_print_icon":"","show_email_icon":"","show_hits":"","page_title":"","alternative_readmore":"","layout":""}', 3, !
0, 1, '', '', 1, 10, '', 0, '*', ''),
+(49, 147, 'Typography', 'typography', '', '<h1>H1 ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmonpqrstuvwzyz</h1><h2>H2 ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmonpqrstuvwzyz</h2><h3>H3 ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmonpqrstuvwzyz</h3><h4>H4 ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmonpqrstuvwzyz</h4><h5>H5 ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmonpqrstuvwzyz</h5><h6>H6 ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmonpqrstuvwzyz</h6><p>P The quick brown fox ran over the lazy dog. THE QUICK BROWN FOX RAN OVER THE LAZY DOG.</p><ul><li>Item</li><li>Item</li><li>Item<br /> <ul><li>Item</li><li>Item</li><li>Item<br /> <ul><li>Item</li><li>Item</li><li>Item</li></ul></li></ul></li></ul><ol><li>tem</li><li>Item</li><li>Item<br /> <ol><li>Item</li><li>Item</li><li>Item<br /><ol><li>Item</li><li>Item</li><li>Item</li></ol></li></ol> </li></ol>', '', 1, 0, 0, 23, '2010-07-10 22:22:26', 42, 'Joomla!', '2010-08-23 02:59:04', 42, 0, '0000-00-00 00:00:00', '2010-07-10 22:22:26', '0000-00-00 !
00:00:00', '', '', '{"show_title":"","link_titles":"","show_intro":"","show_category":"","link_category":"","show_parent_category":"","link_parent_category":"","show_author":"","show_create_date":"","show_modify_date":"","show_publish_date":"","show_readmore":"","show_print_icon":"","show_email_icon":"","show_hits":"","page_title":"","alternative_readmore":"","layout":""}', 2, 0, 1, '', '', 1, 14, '', 0, '*', ''),
+(50, 148, 'Upgraders', 'upgraders', '', '<p>If you are an experienced Joomla! 1.5 user, 1.6 will seem very familiar. There are new templates and improved user interfaces, but most functionality is the same. The biggest changes are improved access control (ACL) and nested categories.</p>', '<p>The new user manager which will let you manage who has access to what in your site. You can leave access groups exactly the way you had them in Joomla 1.5 or make them as complicated as you want. You can learn more about<a href="http://docs.joomla.org/ACL_Tutorial_for_Joomla_1.6"> how access control works</a> in on the <a href="http://docs.joomla.org">Joomla! Documentation sit</a></p><p>In Joomla 1.5 and 1.0 content was organized into sections and categories. In 1.6 sections are gone, and you can create categories within categories, going as deep as you want. The sample data provides many examples of the use of nested categories.</p><p>All layouts have been redesigned to improve access!
ibility and flexibility. If you would like to keep the 1.5 layouts, you can find them in the html folder of the MilkyWay template. Simply copy the layouts you want to the html folder of your template.</p><p>Updating your site and extensions when needed is easier than ever thanks to installer improvements.</p><p>To learn more about how to<a href="http://docs.joomla.org/Migrating_from_1.5_to_1.6"> move a Joomla! 1.5 site to a Joomla! 1.6 installation read this article</a>.</p>', 1, 0, 0, 19, '2010-07-10 22:38:22', 42, '', '2010-08-23 03:02:28', 42, 0, '0000-00-00 00:00:00', '2010-07-10 22:38:22', '0000-00-00 00:00:00', '', '', '{"show_title":"","link_titles":"","show_intro":"","show_category":"","link_category":"","show_parent_category":"","link_parent_category":"","show_author":"","show_create_date":"","show_modify_date":"","show_publish_date":"","show_readmore":"","show_print_icon":"","show_email_icon":"","show_hits":"","page_title":"","alternative_readmore":"","layout":""}!
', 2, 0, 5, '', '', 1, 0, '', 1, '*', ''),
+(51, 149, 'User', 'user-plugins', '', '<p>Default on:</p><ul><li>Joomla Help</li></ul><p>Default off:</p><p>Two new plugins are available in 1.6 but are disabled by default.</p><ul><li>Contact Creator Help<br />Creates a new linked contact record for each new user created. </li><li>Profile Help<br />This example profile plugin allows you to insert additional fields into user registration and profile display. This is intended as an example of the types of extensions to the profile you might want to create. </li></ul>', '', 1, 0, 0, 25, '2010-07-10 22:43:34', 42, 'Joomla!', '2010-08-23 02:58:49', 42, 0, '0000-00-00 00:00:00', '2010-07-10 23:16:15', '0000-00-00 00:00:00', '', '', '{"show_title":"","link_titles":"","show_intro":"","show_category":"","link_category":"","show_parent_category":"","link_parent_category":"","show_author":"","show_create_date":"","show_modify_date":"","show_publish_date":"","show_readmore":"","show_print_icon":"","show_email_icon":"","show_hits":""!
,"page_title":"","alternative_readmore":"","layout":""}', 3, 0, 4, '', '', 1, 2, '', 0, '*', ''),
+(52, 150, 'Users', 'users-component', '', '<p>The users extension lets your site visitors register, login and logout, change their passwords and other information, and recover lost passwords. In the administrator it allows you to create, block and manage users and create user groups and access levels. Help</p>\r\n<p>Please note that some of the user views will not display if you are not logged in to the site.</p>', '', 1, 0, 0, 21, '2010-07-10 22:46:05', 42, 'Joomla!', '2010-08-23 03:00:39', 42, 0, '0000-00-00 00:00:00', '2010-07-10 23:13:53', '0000-00-00 00:00:00', '', '', '{"show_title":"","link_titles":"","show_intro":"","show_category":"","link_category":"","show_parent_category":"","link_parent_category":"","show_author":"","show_create_date":"","show_modify_date":"","show_publish_date":"","show_readmore":"","show_print_icon":"","show_email_icon":"","show_hits":"","page_title":"","alternative_readmore":"","layout":""}', 4, 0, 5, '', '', 1, 2, '', 0, '*', ''),
+(53, 151, 'Using Joomla!', 'using-joomla', '', '<p>With Joomla! You can create anything from a simple personal website to a complex ecommerce or social site with millions of visitors.</p><p>This section of the sample data provides you with a brief introduction to Joomla! concepts and reference material to help you understand how Joomla! works.</p><p><em>When you not longer need the sample data, you can can simply unpublish the sample data category found within each extension in the site administrator or you may completely delete each item and all of the categories. </em></p>', '', 1, 0, 0, 19, '2010-07-10 23:00:59', 42, 'Joomla!', '2010-08-23 03:02:28', 42, 0, '0000-00-00 00:00:00', '2010-07-10 23:00:59', '0000-00-00 00:00:00', '', '', '{"show_title":"","link_titles":"","show_intro":"","show_category":"","link_category":"","show_parent_category":"","link_parent_category":"","show_author":"","show_create_date":"","show_modify_date":"","show_publish_date":"","show_readmore":"!
","show_print_icon":"","show_email_icon":"","show_hits":"","page_title":"","alternative_readmore":"","layout":""}', 2, 0, 7, '', '', 1, 15, '', 0, '*', ''),
+(54, 152, 'Weblinks', 'weblinks', '', '<p>Weblinks (com_weblinks) is a component that provides a structured way to organize external links and present them in a visually attractive, consistent and informative way. Help</p>', '', 1, 0, 0, 21, '2010-07-10 23:02:42', 42, 'Joomla!', '2010-08-23 03:00:39', 42, 0, '0000-00-00 00:00:00', '2010-07-10 23:02:42', '0000-00-00 00:00:00', '', '', '{"show_title":"","link_titles":"","show_intro":"","show_category":"","link_category":"","show_parent_category":"","link_parent_category":"","show_author":"","show_create_date":"","show_modify_date":"","show_publish_date":"","show_readmore":"","show_print_icon":"","show_email_icon":"","show_hits":"","page_title":"","alternative_readmore":"","layout":""}', 3, 0, 6, '', '', 1, 7, '', 0, '*', ''),
+(55, 153, 'Weblinks Module', 'weblinks-module', '', '<p>This module displays the list of weblinks in a category.  <a href="http://docs.joomla.org/Help15:Screen.modulessite.edit.15#Weblinks" title="Weblinks Module">Help</a></p><p>{loadposition weblinksload}</p>', '', 1, 0, 0, 66, '2010-07-10 23:04:41', 42, 'Joomla!', '2010-08-23 03:00:39', 42, 0, '0000-00-00 00:00:00', '2010-07-10 23:04:41', '0000-00-00 00:00:00', '', '', '{"show_title":"","link_titles":"","show_intro":"","show_category":"","link_category":"","show_parent_category":"","link_parent_category":"","show_author":"","show_create_date":"","show_modify_date":"","show_publish_date":"","show_readmore":"","show_print_icon":"","show_email_icon":"","show_hits":"","page_title":"","alternative_readmore":"","layout":""}', 2, 0, 5, '', '', 1, 2, '', 0, '*', ''),
+(56, 154, 'Who''s Online', 'whos-online', '', '<p>The Who''s Online Module displays the number of Anonymous Users (e.g. Guests) and Registered Users (ones logged in) that are currently accessing the Web site. <a href="http://docs.joomla.org/Help15:Screen.modulessite.edit.15#Who.27s_Online" title="Who''s Online">Help</a></p><p>{loadposition whosonlineload}</p>', '', 1, 0, 0, 65, '2010-07-10 23:06:16', 42, 'Joomla!', '2010-08-23 02:58:49', 42, 0, '0000-00-00 00:00:00', '2010-07-10 23:06:16', '0000-00-00 00:00:00', '', '', '{"show_title":"","link_titles":"","show_intro":"","show_category":"","link_category":"","show_parent_category":"","link_parent_category":"","show_author":"","show_create_date":"","show_modify_date":"","show_publish_date":"","show_readmore":"","show_print_icon":"","show_email_icon":"","show_hits":"","page_title":"","alternative_readmore":"","layout":""}', 2, 0, 1, '', '', 1, 2, '', 0, '*', ''),
+(57, 155, 'Wobbegone', 'wobbegone', '', '<p><img src="images/sampledata/parks/animals/180px_wobbegong.jpg" border="0" alt="Wobbegone" style="vertical-align: middle; border: 0;" /></p>', '<p><img src="images/sampledata/parks/animals/800px_wobbegong.jpg" border="0" style="vertical-align: middle; border: 0;" /></p><p>Source: http://en.wikipedia.org/wiki/File:Wobbegong.jpg</p><p>Author: Richard Ling</p><p>Rights: GNU Free Documentation License v 1.2 or later</p>', 1, 0, 0, 72, '2010-07-10 23:07:30', 42, 'Parks Webmaster', '2010-08-23 03:00:39', 42, 0, '0000-00-00 00:00:00', '2010-07-10 23:07:29', '0000-00-00 00:00:00', '', '', '{"show_title":"","link_titles":"","show_intro":"","show_category":"","link_category":"","show_parent_category":"","link_parent_category":"","show_author":"","show_create_date":"","show_modify_date":"","show_publish_date":"","show_readmore":"","show_print_icon":"","show_email_icon":"","show_hits":"","page_title":"","alternative_readmore":"","layout":""}',!
2, 0, 1, '', '', 1, 0, '', 0, '*', ''),
+(58, 156, 'Wonderful Watermelon', 'wonderful-watermelon', '', '<p>Watermelon is a wonderful and healthy treat. We grow the world''s sweetest watermelon. We have the largest watermelon patch in our country.</p>', '', 1, 0, 0, 30, '2010-07-10 23:09:14', 42, 'Fruit Shop Webmaster', '2010-08-23 03:02:28', 42, 0, '0000-00-00 00:00:00', '0000-00-00 00:00:00', '0000-00-00 00:00:00', '', '', '{"show_title":"","link_titles":"","show_intro":"","show_category":"","link_category":"","show_parent_category":"","link_parent_category":"","show_author":"","show_create_date":"","show_modify_date":"","show_publish_date":"","show_readmore":"","show_print_icon":"","show_email_icon":"","show_hits":"","page_title":"","alternative_readmore":"","layout":""}', 2, 0, 1, '', '', 1, 0, '', 0, '*', ''),
+(59, 157, 'Wrapper Module', 'wrapper-module', '', '<p>This module shows an iFrame window to specified location. <a href="http://docs.joomla.org/Help15:Screen.modulessite.edit.15#Wrapper" title="Wrapper Module">Help</a></p><p>{loadposition wrapperload}</p>', '', 1, 0, 0, 67, '2010-07-10 23:10:10', 42, 'Joomla!', '2010-08-23 02:58:49', 42, 0, '0000-00-00 00:00:00', '0000-00-00 00:00:00', '0000-00-00 00:00:00', '', '', '{"show_title":"","link_titles":"","show_intro":"","show_category":"","link_category":"","show_parent_category":"","link_parent_category":"","show_author":"","show_create_date":"","show_modify_date":"","show_publish_date":"","show_readmore":"","show_print_icon":"","show_email_icon":"","show_hits":"","page_title":"","alternative_readmore":"","layout":""}', 2, 0, 1, '', '', 1, 0, '', 0, '*', ''),
+(60, 158, 'News Feeds', 'news-feeds', '', '<p>News Feeds (com_newsfeeds) provides a way to organize and present news feeds. News feeds are a way that you present information from another site on your site. For example, the joomla.org website has numerous feeds that you an incorporate on your site. You an use menus to present a single feed, a list of feeds in a category, or or a list of all feed categories. Help</p>', '', 1, 0, 0, 21, '2010-07-11 00:28:23', 42, 'Joomla!', '2010-08-23 03:00:39', 42, 0, '0000-00-00 00:00:00', '2010-07-11 00:28:23', '0000-00-00 00:00:00', '', '', '{"show_title":"","link_titles":"","show_intro":"","show_category":"","link_category":"","show_parent_category":"","link_parent_category":"","show_author":"","show_create_date":"","show_modify_date":"","show_publish_date":"","show_readmore":"","show_print_icon":"","show_email_icon":"","show_hits":"","page_title":"","alternative_readmore":"","layout":""}', 2, 0, 4, '', '', 1, 2, '', 0, '*', ''),
+(61, 159, 'Breadcrumbs Module', 'breadcrumbs-module', '', '<p>Breadcrumbs provide a pathway for users to navigate through the site. <a href="http://docs.joomla.org/Help15:Screen.modulessite.edit.15#Breadcrumbs" title="Breacrumbs Module">Help</a></p><p>{loadposition breadcrumbsload}</p>', '', 1, 0, 0, 67, '2010-07-11 01:30:25', 42, 'Joomla!', '2010-08-23 02:58:49', 42, 0, '0000-00-00 00:00:00', '2010-07-11 01:30:25', '0000-00-00 00:00:00', '', '', '{"show_title":"","link_titles":"","show_intro":"","show_category":"","link_category":"","show_parent_category":"","link_parent_category":"","show_author":"","show_create_date":"","show_modify_date":"","show_publish_date":"","show_readmore":"","show_print_icon":"","show_email_icon":"","show_hits":"","page_title":"","alternative_readmore":"","layout":""}', 2, 0, 2, '', '', 1, 2, '', 0, '*', ''),
+(62, 160, 'Content', 'content-plugins', '', '<p>Content plugins run when specific kinds of pages are loaded. They do things ranging from protecting email addresses from harvesters to creating page breaks.</p><p>Default on:</p><ul><li>Email Cloaking Help</li><li>Load Module Help</li><li>Page Break Help</li><li>Page Navigation Help</li><li>Rating Help</li></ul><p>Default off:</p><ul><li>Code Highlighting (Geshi) Help</li></ul>', '', 1, 0, 0, 25, '2010-07-11 06:19:31', 42, 'Joomla!', '2010-08-23 02:58:49', 42, 0, '0000-00-00 00:00:00', '2010-07-11 06:19:31', '0000-00-00 00:00:00', '', '', '{"show_title":"","link_titles":"","show_intro":"","show_category":"","link_category":"","show_parent_category":"","link_parent_category":"","show_author":"","show_create_date":"","show_modify_date":"","show_publish_date":"","show_readmore":"","show_print_icon":"","show_email_icon":"","show_hits":"","page_title":"","alternative_readmore":"","layout":""}', 2, 0, 7, '', '', 1, 3, '', 0, '*', ''!
),
+(64, 162, 'Blue Mountain Rain Forest', 'blue-mountain-rain-forest', '', '<p><img src="images/sampledata/parks/landscape/120px_rainforest_bluemountainsnsw.jpg" border="0" alt="Rain Forest Blue Mountrains" /></p>', '<p><img src="images/sampledata/parks/landscape/727px_rainforest_bluemountainsnsw.jpg" border="0" alt="Rain Forest Blue Mountrains" style="vertical-align: middle;" /></p><p> </p><p class="caption">Source: http://commons.wikimedia.org/wiki/File:Rainforest,bluemountainsNSW.jpg</p><p class="caption">Author: Adam J.W.C.</p><p class="caption">License: GNU Free Documentation License</p>', 1, 0, 0, 73, '2010-07-11 07:19:35', 42, 'Parks Webmaster', '2010-08-23 02:58:49', 42, 0, '0000-00-00 00:00:00', '0000-00-00 00:00:00', '0000-00-00 00:00:00', '', '', '{"show_title":"","link_titles":"","show_intro":"","show_category":"","link_category":"","show_parent_category":"","link_parent_category":"","show_author":"","show_create_date":"","show_modify_date":"","show_publish_date":!
"","show_readmore":"","show_print_icon":"","show_email_icon":"","show_hits":"","page_title":"","alternative_readmore":"","layout":""}', 2, 0, 2, '', '', 1, 0, '', 0, '*', ''),
+(65, 163, 'Ormiston Pound', 'ormiston-pound', '', '<p><img src="images/sampledata/parks/landscape/180px_ormiston_pound.jpg" border="0" alt="Ormiston Pound" style="border: 0;" /></p>', '<p><img src="images/sampledata/parks/landscape/800px_ormiston_pound.jpg" border="0" alt="Ormiston Pound" height="375" style="vertical-align: middle; border: 0;" /></p><p> </p><p class="caption">Source: http://commons.wikimedia.org/wiki/File:Ormiston_Pound.JPG</p><p class="caption">Author:</p><p class="caption">License: GNU Free Public Documentation License</p>', 1, 0, 0, 73, '2010-07-11 07:21:18', 42, 'Parks Webmaster', '2010-08-23 02:58:49', 42, 0, '0000-00-00 00:00:00', '2010-07-11 07:21:18', '0000-00-00 00:00:00', '', '', '{"show_title":"","link_titles":"","show_intro":"","show_category":"","link_category":"","show_parent_category":"","link_parent_category":"","show_author":"","show_create_date":"","show_modify_date":"","show_publish_date":"","show_readmore":"","show_print_icon":"","show_!
email_icon":"","show_hits":"","page_title":"","alternative_readmore":"","layout":""}', 3, 0, 3, '', '', 1, 0, '', 0, '*', ''),
+(66, 165, 'Latest Users Module', 'latest-users-module', '', '<p>This module displays the latest registered users. Help</p>\r\n<p>{loadposition userslatestload}</p>', '', 1, 0, 0, 65, '2010-07-11 13:54:30', 42, 'Joomla!', '2010-08-23 02:58:49', 42, 0, '0000-00-00 00:00:00', '2010-07-11 13:55:19', '0000-00-00 00:00:00', '', '', '{"show_title":"1","link_titles":"","show_intro":"","show_category":"1","link_category":"1","show_parent_category":"","link_parent_category":"","show_author":"","show_create_date":"","show_modify_date":"","show_publish_date":"","show_readmore":"","show_print_icon":"","show_email_icon":"","show_hits":"","page_title":"","alternative_readmore":"","layout":""}', 3, 0, 3, '', '', 1, 3, '', 0, '*', ''),
+(67, 168, 'What''s New in 1.5?', 'whats-new-in-15', '', '<p>As with previous releases, Joomla! provides a unified and easy-to-use framework for delivering content for Web sites of all kinds. To support the changing nature of the Internet and emerging Web technologies, Joomla! required substantial restructuring of its core functionality and we also used this effort to simplify many challenges within the current user interface. Joomla! 1.5 has many new features.</p>\r\n<p style="margin-bottom: 0in;">In Joomla! 1.5, you''''ll notice:</p>\r\n<ul>\r\n<li>Substantially improved usability, manageability, and scalability far beyond the original Mambo foundations</li>\r\n<li>Expanded accessibility to support internationalisation, double-byte characters and right-to-left support for Arabic, Farsi, and Hebrew languages among others</li>\r\n<li>Extended integration of external applications through Web services</li>\r\n<li>Enhanced content delivery, template and presentation capabilitie!
s to support accessibility standards and content delivery to any destination</li>\r\n<li>A more sustainable and flexible framework for Component and Extension developers</li>\r\n<li>Backward compatibility with previous releases of Components, Templates, Modules, and other Extensions</li>\r\n</ul>', '', 2, 0, 0, 9, '2010-08-23 00:35:57', 42, 'Joomla! 1.5', '0000-00-00 00:00:00', 0, 0, '0000-00-00 00:00:00', '0000-00-00 00:00:00', '0000-00-00 00:00:00', '', '', '{"show_title":"","link_titles":"","show_intro":"","show_category":"","link_category":"","show_parent_category":"","link_parent_category":"","show_author":"","show_create_date":"","show_modify_date":"","show_publish_date":"","show_readmore":"","show_print_icon":"","show_email_icon":"","show_hits":"","page_title":"","alternative_readmore":"","layout":""}', 1, 0, 0, '', '', 1, 0, '{"robots":"","author":"","rights":"","xreference":""}', 0, '*', '');

+
--
-- Dumping data for table `#__content_frontpage`
--
@@ -364,27 +366,28 @@
TRUNCATE `#__menu`;

INSERT IGNORE INTO `#__menu` VALUES
-(1, '', 'Menu_Item_Root', 'root', '', '', '', '', 1, 0, 0, 0, 0, 0, '0000-00-00 00:00:00', 0, 0, '', 0, '', 0, 283, 0, '*'),
-(2, '_adminmenu', 'com_banners', 'Banners', '', 'Banners', 'index.php?option=com_banners', 'component', 0, 1, 1, 4, 0, 0, '0000-00-00 00:00:00', 0, 0, 'class:banners', 0, '', 13, 22, 0, '*'),
-(3, '_adminmenu', 'com_banners', 'Banners', '', 'Banners/Banners', 'index.php?option=com_banners', 'component', 0, 2, 2, 4, 0, 0, '0000-00-00 00:00:00', 0, 0, 'class:banners', 0, '', 14, 15, 0, '*'),
-(4, '_adminmenu', 'com_banners_clients', 'Clients', '', 'Banners/Clients', 'index.php?option=com_banners&view=clients', 'component', 0, 2, 2, 4, 0, 0, '0000-00-00 00:00:00', 0, 0, 'class:banners-clients', 0, '', 16, 17, 0, '*'),
-(5, '_adminmenu', 'com_banners_tracks', 'Tracks', '', 'Banners/Tracks', 'index.php?option=com_banners&view=tracks', 'component', 0, 2, 2, 4, 0, 0, '0000-00-00 00:00:00', 0, 0, 'class:banners-tracks', 0, '', 18, 19, 0, '*'),
-(6, '_adminmenu', 'com_banners_categories', 'Categories', '', 'Banners/Categories', 'index.php?option=com_categories&extension=com_banners', 'component', 0, 2, 2, 6, 0, 0, '0000-00-00 00:00:00', 0, 0, 'class:banners-cat', 0, '', 20, 21, 0, '*'),
-(7, '_adminmenu', 'com_contact', 'Contacts', '', 'Contacts', 'index.php?option=com_contact', 'component', 0, 1, 1, 8, 0, 0, '0000-00-00 00:00:00', 0, 0, 'class:contact', 0, '', 23, 28, 0, '*'),
-(8, '_adminmenu', 'com_contact', 'Contacts', '', 'Contacts/Contacts', 'index.php?option=com_contact', 'component', 0, 7, 2, 8, 0, 0, '0000-00-00 00:00:00', 0, 0, 'class:contact', 0, '', 24, 25, 0, '*'),
-(9, '_adminmenu', 'com_contact_categories', 'Categories', '', 'Contacts/Categories', 'index.php?option=com_categories&extension=com_contact', 'component', 0, 7, 2, 6, 0, 0, '0000-00-00 00:00:00', 0, 0, 'class:contact-cat', 0, '', 26, 27, 0, '*'),
-(10, '_adminmenu', 'com_messages', 'Messaging', '', 'Messaging', 'index.php?option=com_messages', 'component', 0, 1, 1, 15, 0, 0, '0000-00-00 00:00:00', 0, 0, 'class:messages', 0, '', 31, 36, 0, '*'),
-(11, '_adminmenu', 'com_messages_add', 'New Private Message', '', 'Messaging/New Private Message', 'index.php?option=com_messages&task=message.add', 'component', 0, 10, 2, 15, 0, 0, '0000-00-00 00:00:00', 0, 0, 'class:messages-add', 0, '', 32, 33, 0, '*'),
-(12, '_adminmenu', 'com_messages_read', 'Read Private Message', '', 'Messaging/Read Private Message', 'index.php?option=com_messages', 'component', 0, 10, 2, 15, 0, 0, '0000-00-00 00:00:00', 0, 0, 'class:messages-read', 0, '', 34, 35, 0, '*'),
-(13, '_adminmenu', 'com_newsfeeds', 'News Feeds', '', 'News Feeds', 'index.php?option=com_newsfeeds', 'component', 0, 1, 1, 17, 0, 0, '0000-00-00 00:00:00', 0, 0, 'class:newsfeeds', 0, '', 37, 42, 0, '*'),
-(14, '_adminmenu', 'com_newsfeeds_feeds', 'Feeds', '', 'News Feeds/Feeds', 'index.php?option=com_newsfeeds', 'component', 0, 13, 2, 17, 0, 0, '0000-00-00 00:00:00', 0, 0, 'class:newsfeeds', 0, '', 38, 39, 0, '*'),
-(15, '_adminmenu', 'com_newsfeeds_categories', 'Categories', '', 'News Feeds/Categories', 'index.php?option=com_categories&extension=com_newsfeeds', 'component', 0, 13, 2, 6, 0, 0, '0000-00-00 00:00:00', 0, 0, 'class:newsfeeds-cat', 0, '', 40, 41, 0, '*'),
-(16, '_adminmenu', 'com_redirect', 'Redirect', '', 'Redirect', 'index.php?option=com_redirect', 'component', 0, 1, 1, 24, 0, 0, '0000-00-00 00:00:00', 0, 0, 'class:redirect', 0, '', 225, 226, 0, '*'),
-(17, '_adminmenu', 'com_search', 'Search', '', 'Search', 'index.php?option=com_search', 'component', 0, 1, 1, 19, 0, 0, '0000-00-00 00:00:00', 0, 0, 'class:search', 0, '', 217, 218, 0, '*'),
-(18, '_adminmenu', 'com_weblinks', 'Weblinks', '', 'Weblinks', 'index.php?option=com_weblinks', 'component', 0, 1, 1, 21, 0, 0, '0000-00-00 00:00:00', 0, 0, 'class:weblinks', 0, '', 219, 224, 0, '*'),
-(19, '_adminmenu', 'com_weblinks_links', 'Links', '', 'Weblinks/Links', 'index.php?option=com_weblinks', 'component', 0, 18, 2, 21, 0, 0, '0000-00-00 00:00:00', 0, 0, 'class:weblinks', 0, '', 220, 221, 0, '*'),
-(20, '_adminmenu', 'com_weblinks_categories', 'Categories', '', 'Weblinks/Categories', 'index.php?option=com_categories&extension=com_weblinks', 'component', 0, 18, 2, 6, 0, 0, '0000-00-00 00:00:00', 0, 0, 'class:weblinks-cat', 0, '', 222, 223, 0, '*'),
-(227, 'aboutjoomla', 'Weblinks Categories', 'weblinks-categories', '', 'using-joomla/extensions/components/weblinks-component/weblinks-categories', 'index.php?option=com_weblinks&view=categories&id=18', 'component', 1, 265, 5, 21, 6, 0, '0000-00-00 00:00:00', 0, 1, '', 0, '{"show_base_description":"","categories_description":"","maxLevel":"-1","show_empty_categories":"","show_numbers":"1","show_description":"","show_description_image":"","show_cat_num_articles":"","display_num":"","show_headings":"","orderby_pri":"","show_pagination":"","show_noauth":"","show_feed_link":"","feed_summary":"","menu-anchor_title":"","menu-anchor_css":"","menu_image":"-1","show_page_heading":0,"page_title":"","page_heading":"","pageclass_sfx":"","menu-meta_description":"","menu-meta_keywords":"","robots":"","secure":0}', 77, 78, 0, '*'),
+(1, '', 'Menu_Item_Root', 'root', '', '', '', '', 1, 0, 0, 0, 0, 0, '0000-00-00 00:00:00', 0, 0, '', 0, '', 0, 219, 0, '*'),
+(2, '_adminmenu', 'com_banners', 'Banners', '', 'Banners', 'index.php?option=com_banners', 'component', 0, 1, 1, 4, 0, 0, '0000-00-00 00:00:00', 0, 0, 'class:banners', 0, '', 1, 10, 0, '*'),
+(3, '_adminmenu', 'com_banners', 'Banners', '', 'Banners/Banners', 'index.php?option=com_banners', 'component', 0, 2, 2, 4, 0, 0, '0000-00-00 00:00:00', 0, 0, 'class:banners', 0, '', 2, 3, 0, '*'),
+(4, '_adminmenu', 'com_banners_clients', 'Clients', '', 'Banners/Clients', 'index.php?option=com_banners&view=clients', 'component', 0, 2, 2, 4, 0, 0, '0000-00-00 00:00:00', 0, 0, 'class:banners-clients', 0, '', 4, 5, 0, '*'),
+(5, '_adminmenu', 'com_banners_tracks', 'Tracks', '', 'Banners/Tracks', 'index.php?option=com_banners&view=tracks', 'component', 0, 2, 2, 4, 0, 0, '0000-00-00 00:00:00', 0, 0, 'class:banners-tracks', 0, '', 6, 7, 0, '*'),
+(6, '_adminmenu', 'com_banners_categories', 'Categories', '', 'Banners/Categories', 'index.php?option=com_categories&extension=com_banners', 'component', 0, 2, 2, 6, 0, 0, '0000-00-00 00:00:00', 0, 0, 'class:banners-cat', 0, '', 8, 9, 0, '*'),
+(7, '_adminmenu', 'com_contact', 'Contacts', '', 'Contacts', 'index.php?option=com_contact', 'component', 0, 1, 1, 8, 0, 0, '0000-00-00 00:00:00', 0, 0, 'class:contact', 0, '', 11, 16, 0, '*'),
+(8, '_adminmenu', 'com_contact', 'Contacts', '', 'Contacts/Contacts', 'index.php?option=com_contact', 'component', 0, 7, 2, 8, 0, 0, '0000-00-00 00:00:00', 0, 0, 'class:contact', 0, '', 12, 13, 0, '*'),
+(9, '_adminmenu', 'com_contact_categories', 'Categories', '', 'Contacts/Categories', 'index.php?option=com_categories&extension=com_contact', 'component', 0, 7, 2, 6, 0, 0, '0000-00-00 00:00:00', 0, 0, 'class:contact-cat', 0, '', 14, 15, 0, '*'),
+(10, '_adminmenu', 'com_messages', 'Messaging', '', 'Messaging', 'index.php?option=com_messages', 'component', 0, 1, 1, 15, 0, 0, '0000-00-00 00:00:00', 0, 0, 'class:messages', 0, '', 17, 22, 0, '*'),
+(11, '_adminmenu', 'com_messages_add', 'New Private Message', '', 'Messaging/New Private Message', 'index.php?option=com_messages&task=message.add', 'component', 0, 10, 2, 15, 0, 0, '0000-00-00 00:00:00', 0, 0, 'class:messages-add', 0, '', 18, 19, 0, '*'),
+(12, '_adminmenu', 'com_messages_read', 'Read Private Message', '', 'Messaging/Read Private Message', 'index.php?option=com_messages', 'component', 0, 10, 2, 15, 0, 0, '0000-00-00 00:00:00', 0, 0, 'class:messages-read', 0, '', 20, 21, 0, '*'),
+(13, '_adminmenu', 'com_newsfeeds', 'News Feeds', '', 'News Feeds', 'index.php?option=com_newsfeeds', 'component', 0, 1, 1, 17, 0, 0, '0000-00-00 00:00:00', 0, 0, 'class:newsfeeds', 0, '', 23, 28, 0, '*'),
+(14, '_adminmenu', 'com_newsfeeds_feeds', 'Feeds', '', 'News Feeds/Feeds', 'index.php?option=com_newsfeeds', 'component', 0, 13, 2, 17, 0, 0, '0000-00-00 00:00:00', 0, 0, 'class:newsfeeds', 0, '', 24, 25, 0, '*'),
+(15, '_adminmenu', 'com_newsfeeds_categories', 'Categories', '', 'News Feeds/Categories', 'index.php?option=com_categories&extension=com_newsfeeds', 'component', 0, 13, 2, 6, 0, 0, '0000-00-00 00:00:00', 0, 0, 'class:newsfeeds-cat', 0, '', 26, 27, 0, '*'),
+(16, '_adminmenu', 'com_redirect', 'Redirect', '', 'Redirect', 'index.php?option=com_redirect', 'component', 0, 1, 1, 24, 0, 0, '0000-00-00 00:00:00', 0, 0, 'class:redirect', 0, '', 37, 38, 0, '*'),
+(17, '_adminmenu', 'com_search', 'Search', '', 'Search', 'index.php?option=com_search', 'component', 0, 1, 1, 19, 0, 0, '0000-00-00 00:00:00', 0, 0, 'class:search', 0, '', 29, 30, 0, '*'),
+(18, '_adminmenu', 'com_weblinks', 'Weblinks', '', 'Weblinks', 'index.php?option=com_weblinks', 'component', 0, 1, 1, 21, 0, 0, '0000-00-00 00:00:00', 0, 0, 'class:weblinks', 0, '', 31, 36, 0, '*'),
+(19, '_adminmenu', 'com_weblinks_links', 'Links', '', 'Weblinks/Links', 'index.php?option=com_weblinks', 'component', 0, 18, 2, 21, 0, 0, '0000-00-00 00:00:00', 0, 0, 'class:weblinks', 0, '', 32, 33, 0, '*'),
+(20, '_adminmenu', 'com_weblinks_categories', 'Categories', '', 'Weblinks/Categories', 'index.php?option=com_categories&extension=com_weblinks', 'component', 0, 18, 2, 6, 0, 0, '0000-00-00 00:00:00', 0, 0, 'class:weblinks-cat', 0, '', 34, 35, 0, '*'),
+(464, 'top', 'Home', 'home', '', 'home', 'index.php?Itemid=', 'alias', 1, 1, 1, 0, 0, 0, '0000-00-00 00:00:00', 0, 1, '', 0, '{"aliasoptions":"435","menu-anchor_title":"","menu-anchor_css":"","menu_image":""}', 217, 218, 0, '*'),
+(227, 'aboutjoomla', 'Weblinks Categories', 'weblinks-categories', '', 'using-joomla/extensions/components/weblinks-component/weblinks-categories', 'index.php?option=com_weblinks&view=categories&id=18', 'component', 1, 265, 5, 21, 6, 0, '0000-00-00 00:00:00', 0, 1, '', 0, '{"show_base_description":"","categories_description":"","maxLevelcat":"-1","show_empty_categories_cat":"","show_subcat_desc_cat":"","show_cat_num_links_cat":"","show_category_title":"","show_description":"","show_description_image":"","maxLevel":"-1","show_empty_categories":"","show_subcat_desc":"","show_cat_num_links":"","show_pagination_limit":"","show_headings":"","show_link_description":"","show_link_hits":"","show_pagination":"","show_pagination_results":"","menu-anchor_title":"","menu-anchor_css":"","menu_image":"","page_title":"","show_page_heading":0,"page_heading":"","pageclass_sfx":"","menu-meta_description":"","menu-meta_keywords":"","robots":"","secure":0}', 77, 78, 0, '*'),
(233, 'mainmenu', 'Login', 'login', '', 'login', 'index.php?option=com_users&view=login', 'component', 1, 1, 1, 25, -3, 0, '0000-00-00 00:00:00', 0, 1, '', 0, '{"menu-anchor_title":"","menu-anchor_css":"","menu_image":"","show_page_heading":0,"page_title":"","page_heading":"","pageclass_sfx":"","menu-meta_description":"","menu-meta_keywords":"","robots":"","secure":0}', 11, 12, 0, '*'),
(229, 'aboutjoomla', 'Single Contact', 'single-contact', '', 'using-joomla/extensions/components/contact-component/single-contact', 'index.php?option=com_contact&view=contact&id=1', 'component', 1, 270, 5, 8, 0, 0, '0000-00-00 00:00:00', 0, 1, '', 0, '{"show_category_crumb":"","presentation_style":"","show_contact_category":"","show_contact_list":"","show_name":"","show_position":"","show_email":"","show_street_address":"","show_suburb":"","show_state":"","show_postcode":"","show_country":"","show_telephone":"","show_mobile":"","show_fax":"","show_webpage":"","show_misc":"","show_image":"","allow_vcard":"","show_articles":"","show_links":"","linka_name":"","linkb_name":"","linkc_name":"","linkd_name":"","linke_name":"","show_email_form":"","show_email_copy":"","banned_email":"","banned_subject":"","banned_text":"","validate_session":"","custom_reply":"","redirect":"","menu-anchor_title":"","menu-anchor_css":"","menu_image":"","show_page_heading":0,"page_title":"","page_head!
ing":"","pageclass_sfx":"","menu-meta_description":"","menu-meta_keywords":"","robots":"","secure":0}', 67, 68, 0, '*'),
(201, 'usermenu', 'Your Profile', 'your-profile', '', 'your-profile', 'index.php?option=com_users&view=profile', 'component', 1, 1, 1, 25, 0, 0, '0000-00-00 00:00:00', 0, 1, '', 0, '{"menu-anchor_title":"","menu-anchor_css":"","menu_image":"","show_page_heading":0,"page_title":"","page_heading":"","pageclass_sfx":"","menu-meta_description":"","menu-meta_keywords":"","robots":"","secure":0}', 237, 238, 0, '*'),
@@ -396,7 +399,7 @@
(243, 'parks', 'Parks Home', 'parks-home', '', 'parks-home', 'index.php?option=com_content&view=article&id=6', 'component', 1, 1, 1, 22, 0, 0, '0000-00-00 00:00:00', 0, 1, '', 114, '{"show_noauth":"","show_title":"0","link_titles":"","show_intro":"","show_category":"0","link_category":"0","show_parent_category":"","link_parent_category":"","show_author":"0","link_author":"","show_create_date":"0","show_modify_date":"0","show_publish_date":"0","show_item_navigation":"0","show_icons":"","show_print_icon":"0","show_email_icon":"0","show_hits":"0","robots":"","rights":"","menu-anchor_title":"","menu-anchor_css":"","menu_image":"","show_page_heading":0,"page_title":"","page_heading":"","pageclass_sfx":"","menu-meta_description":"","menu-meta_keywords":"","secure":0}', 239, 240, 0, 'en-GB'),
(244, 'parks', 'Image Gallery', 'image-gallery', '', 'image-gallery', 'index.php?option=com_content&view=categories&id=28', 'component', 1, 1, 1, 22, 0, 0, '0000-00-00 00:00:00', 0, 1, '', 114, '{"show_base_description":"1","categories_description":"","maxLevel":"-1","show_empty_categories":"","show_description":"1","show_description_image":"1","show_cat_num_articles":"","display_num":"","category_layout":"","show_headings":"","show_date":"","date_format":"","filter_field":"","num_leading_articles":"1","num_intro_articles":"4","num_columns":"2","num_links":"4","multi_column_order":"","orderby_pri":"","orderby_sec":"","order_date":"","show_pagination":"2","show_noauth":"","show_title":"0","link_titles":"","show_intro":"0","show_category":"1","link_category":"1","show_parent_category":"0","link_parent_category":"0","show_author":"0","link_author":"0","show_create_date":"0","show_modify_date":"0","show_publish_date":"0","show_item_navigation":"1","show_readmore":"1","show_icon!
s":"0","show_print_icon":"0","show_email_icon":"0","show_hits":"0","show_feed_link":"1","feed_summary":"","menu-anchor_title":"","menu-anchor_css":"","menu_image":"","show_page_heading":0,"page_title":"","page_heading":"","pageclass_sfx":"","menu-meta_description":"","menu-meta_keywords":"","robots":"","secure":0}', 245, 250, 0, 'en-GB'),
(270, 'aboutjoomla', 'Contact Component', 'contact-component', '', 'using-joomla/extensions/components/contact-component', 'index.php?option=com_content&view=article&id=9', 'component', 1, 268, 4, 22, 0, 0, '0000-00-00 00:00:00', 0, 1, '', 0, '{"show_noauth":"","show_title":"","link_titles":"","show_intro":"","show_category":"","link_category":"","show_parent_category":"","link_parent_category":"","show_author":"","link_author":"","show_create_date":"","show_modify_date":"","show_publish_date":"","show_item_navigation":"","show_icons":"","show_print_icon":"","show_email_icon":"","show_hits":"","robots":"","rights":"","menu-anchor_title":"","menu-anchor_css":"","menu_image":"","show_page_heading":0,"page_title":"","page_heading":"","pageclass_sfx":"","menu-meta_description":"","menu-meta_keywords":"","secure":0}', 62, 71, 0, '*'),
-(279, 'aboutjoomla', 'The Joomla! Community', 'the-joomla-community', '', 'the-joomla-community', 'index.php?option=com_content&view=article&id=47', 'component', 1, 1, 1, 22, 0, 0, '0000-00-00 00:00:00', 0, 1, '', 0, '{"show_noauth":"","show_title":"","link_titles":"0","show_intro":"","show_category":"0","link_category":"","show_parent_category":"0","link_parent_category":"","show_author":"0","link_author":"","show_create_date":"0","show_modify_date":"0","show_publish_date":"0","show_item_navigation":"","show_icons":"","show_print_icon":"","show_email_icon":"","show_hits":"0","robots":"","rights":"","menu-anchor_title":"","menu-anchor_css":"","menu_image":"","show_page_heading":0,"page_title":"","page_heading":"","pageclass_sfx":"","menu-meta_description":"","menu-meta_keywords":"","secure":0}', 229, 230, 0, '*'),
+(279, 'aboutjoomla', 'The Joomla! Community', 'the-joomla-community', '', 'the-joomla-community', 'index.php?option=com_content&view=article&id=47', 'component', 1, 1, 1, 22, 0, 0, '0000-00-00 00:00:00', 0, 1, '', 0, '{"show_noauth":"","show_title":"","link_titles":"0","show_intro":"","show_category":"0","link_category":"","show_parent_category":"0","link_parent_category":"","show_author":"0","link_author":"","show_create_date":"0","show_modify_date":"0","show_publish_date":"0","show_item_navigation":"","show_icons":"","show_print_icon":"","show_email_icon":"","show_hits":"0","robots":"","rights":"","menu-anchor_title":"","menu-anchor_css":"","menu_image":"","show_page_heading":0,"page_title":"","page_heading":"","pageclass_sfx":"","menu-meta_description":"","menu-meta_keywords":"","secure":0}', 231, 232, 0, '*'),
(249, 'aboutjoomla', 'Submit a Weblink', 'submit-a-weblink', '', 'using-joomla/extensions/components/weblinks-component/submit-a-weblink', 'index.php?option=com_weblinks&view=form&layout=edit', 'component', 1, 265, 5, 21, 0, 0, '0000-00-00 00:00:00', 0, 3, '', 0, '{"menu-anchor_title":"","menu-anchor_css":"","menu_image":"","show_page_heading":0,"page_title":"","page_heading":"","pageclass_sfx":"","menu-meta_description":"","menu-meta_keywords":"","robots":"","secure":0}', 73, 74, 0, '*'),
(251, 'aboutjoomla', 'Contact Categories', 'contact-categories', '', 'using-joomla/extensions/components/contact-component/contact-categories', 'index.php?option=com_contact&view=categories&id=16', 'component', 1, 270, 5, 8, 0, 0, '0000-00-00 00:00:00', 0, 1, '', 0, '{"show_base_description":"","categories_description":"","maxLevel":"-1","show_empty_categories":"","show_description":"","show_description_image":"","show_cat_num_articles":"","display_num":"","show_headings":"","filter_field":"","show_pagination":"","show_noauth":"","presentation_style":"sliders","show_name":"","show_position":"","show_email":"","show_street_address":"","show_suburb":"","show_state":"","show_postcode":"","show_country":"","show_telephone":"","show_mobile":"","show_fax":"","show_webpage":"","show_misc":"","show_image":"","allow_vcard":"","show_articles":"","show_links":"1","linka_name":"","linkb_name":"","linkc_name":"","linkd_name":"","linke_name":"","show_email_form":"","show_email_copy":"","!
banned_email":"","banned_subject":"","banned_text":"","validate_session":"","custom_reply":"","redirect":"","show_feed_link":"","feed_summary":"","menu-anchor_title":"","menu-anchor_css":"","menu_image":"","show_page_heading":0,"page_title":"","page_heading":"","pageclass_sfx":"","menu-meta_description":"","menu-meta_keywords":"","robots":"","secure":0}', 63, 64, 0, '*'),
(252, 'aboutjoomla', 'News Feed Categories', 'new-feed-categories', '', 'using-joomla/extensions/components/news-feeds-component/new-feed-categories', 'index.php?option=com_newsfeeds&view=categories&id=0', 'component', 1, 267, 5, 17, 0, 0, '0000-00-00 00:00:00', 0, 1, '', 0, '{"show_base_description":"1","categories_description":"Because this links to the root category the \\"uncategorised\\" category is displayed. ","maxLevel":"-1","show_empty_categories":"1","show_description":"1","show_description_image":"1","show_cat_num_articles":"1","display_num":"","show_headings":"","orderby_pri":"","orderby_sec":"","order_date":"","show_pagination":"","show_noauth":"","show_feed_image":"","show_feed_description":"","show_item_description":"","feed_character_count":"0","show_feed_link":"","feed_summary":"","menu-anchor_title":"","menu-anchor_css":"","menu_image":"","show_page_heading":0,"page_title":"","page_heading":"","pageclass_sfx":"","menu-meta_description":"","menu-meta_keywor!
ds":"","robots":"","secure":0}', 81, 82, 0, '*'),
@@ -405,7 +408,7 @@
(255, 'aboutjoomla', 'Search', 'search', '', 'using-joomla/extensions/components/search-component/search', 'index.php?option=com_search&view=search', 'component', 1, 276, 5, 19, 0, 0, '0000-00-00 00:00:00', 0, 1, '', 0, '{"search_areas":"1","show_date":"1","menu-anchor_title":"","menu-anchor_css":"","menu_image":"","show_page_heading":0,"page_title":"","page_heading":"","pageclass_sfx":"","menu-meta_description":"","menu-meta_keywords":"","robots":"","secure":0}', 103, 104, 0, '*'),
(256, 'aboutjoomla', 'Archived articles', 'archived-articles', '', 'using-joomla/extensions/components/content-component/archived-articles', 'index.php?option=com_content&view=archive', 'component', 1, 266, 5, 22, 0, 0, '0000-00-00 00:00:00', 0, 1, '', 0, '{"orderby_sec":"","order_date":"","display_num":"","filter_field":"","show_category":"1","link_category":"1","show_title":"1","link_titles":"1","show_intro":"1","show_author":"","show_create_date":"","show_modify_date":"","show_publish_date":"","show_item_navigation":"","show_readmore":"","show_hits":"","menu-anchor_title":"","menu-anchor_css":"","menu_image":"","show_page_heading":0,"page_title":"","page_heading":"","pageclass_sfx":"","menu-meta_description":"","menu-meta_keywords":"","robots":"","secure":0}', 57, 58, 0, '*'),
(257, 'aboutjoomla', 'Single Article', 'single-article', '', 'using-joomla/extensions/components/content-component/single-article', 'index.php?option=com_content&view=article&id=6', 'component', 1, 266, 5, 22, 0, 0, '0000-00-00 00:00:00', 0, 1, '', 0, '{"show_noauth":"","show_title":"","link_titles":"","show_intro":"","show_category":"","link_category":"","show_parent_category":"","link_parent_category":"","show_author":"","link_author":"","show_create_date":"","show_modify_date":"","show_publish_date":"","show_item_navigation":"","show_icons":"","show_print_icon":"","show_email_icon":"","show_hits":"","robots":"","rights":"","menu-anchor_title":"","menu-anchor_css":"","menu_image":"","show_page_heading":0,"page_title":"","page_heading":"","pageclass_sfx":"","menu-meta_description":"","menu-meta_keywords":"","secure":0}', 47, 48, 0, '*'),
-(278, 'aboutjoomla', 'The Joomla! Project', 'the-joomla-project', '', 'the-joomla-project', 'index.php?option=com_content&view=article&id=48', 'component', 1, 1, 1, 22, 0, 0, '0000-00-00 00:00:00', 0, 1, '', 0, '{"show_noauth":"","show_title":"1","link_titles":"","show_intro":"","show_category":"0","link_category":"","show_parent_category":"0","link_parent_category":"","show_author":"0","link_author":"","show_create_date":"0","show_modify_date":"0","show_publish_date":"0","show_item_navigation":"0","show_icons":"1","show_print_icon":"","show_email_icon":"","show_hits":"0","robots":"","rights":"","menu-anchor_title":"","menu-anchor_css":"","menu_image":"","show_page_heading":0,"page_title":"","page_heading":"","pageclass_sfx":"","menu-meta_description":"","menu-meta_keywords":"","secure":0}', 227, 228, 0, '*'),
+(278, 'aboutjoomla', 'The Joomla! Project', 'the-joomla-project', '', 'the-joomla-project', 'index.php?option=com_content&view=article&id=48', 'component', 1, 1, 1, 22, 0, 0, '0000-00-00 00:00:00', 0, 1, '', 0, '{"show_noauth":"","show_title":"1","link_titles":"","show_intro":"","show_category":"0","link_category":"","show_parent_category":"0","link_parent_category":"","show_author":"0","link_author":"","show_create_date":"0","show_modify_date":"0","show_publish_date":"0","show_item_navigation":"0","show_icons":"1","show_print_icon":"","show_email_icon":"","show_hits":"0","robots":"","rights":"","menu-anchor_title":"","menu-anchor_css":"","menu_image":"","show_page_heading":0,"page_title":"","page_heading":"","pageclass_sfx":"","menu-meta_description":"","menu-meta_keywords":"","secure":0}', 229, 230, 0, '*'),
(259, 'aboutjoomla', 'Article Category Blog', 'article-category-blog', '', 'using-joomla/extensions/components/content-component/article-category-blog', 'index.php?option=com_content&view=category&layout=blog&id=27', 'component', 1, 266, 5, 22, 0, 0, '0000-00-00 00:00:00', 0, 1, '', 0, '{"maxLevel":"","show_empty_categories":"","show_description":"0","show_description_image":"0","show_category_title":"","show_cat_num_articles":"","num_leading_articles":"1","num_intro_articles":"4","num_columns":"2","num_links":"4","multi_column_order":"","orderby_pri":"","orderby_sec":"","order_date":"","show_pagination":"2","show_noauth":"","show_title":"","link_titles":"","show_intro":"","show_category":"","link_category":"","show_parent_category":"","link_parent_category":"","show_author":"","link_author":"","show_create_date":"","show_modify_date":"","show_publish_date":"","show_item_navigation":"","show_readmore":"","show_icons":"","show_print_icon":"","show_email_icon":"","show_hits":!
"","show_feed_link":"1","feed_summary":"","menu-anchor_title":"","menu-anchor_css":"","menu_image":"","show_page_heading":0,"page_title":"","page_heading":"","pageclass_sfx":"","menu-meta_description":"","menu-meta_keywords":"","robots":"","secure":0}', 51, 52, 0, '*'),
(260, 'aboutjoomla', 'Article Category List', 'article-category-list', '', 'using-joomla/extensions/components/content-component/article-category-list', 'index.php?option=com_content&view=category&id=19', 'component', 1, 266, 5, 22, 0, 0, '0000-00-00 00:00:00', 0, 1, '', 0, '{"maxLevel":"","show_category_title":"","page_subheading":"","show_empty_categories":"","show_description":"","show_description_image":"","show_cat_num_articles":"","display_num":"","show_headings":"","list_show_title":"","list_show_date":"","date_format":"","list_show_hits":"","list_show_author":"","filter_field":"","orderby_pri":"","orderby_sec":"","order_date":"","show_pagination":"","show_pagination_limit":"","show_noauth":"","show_title":"","link_titles":"","show_intro":"","show_category":"","link_category":"","show_parent_category":"","link_parent_category":"","show_author":"","link_author":"","show_create_date":"","show_modify_date":"","show_publish_date":"","show_item_navigation":"","show_readmo!
re":"","show_icons":"","show_print_icon":"","show_email_icon":"","show_hits":"","article-allow_ratings":"","article-allow_comments":"","show_feed_link":"","feed_summary":"","menu-anchor_title":"","menu-anchor_css":"","show_page_heading":0,"page_title":"","page_heading":"","pageclass_sfx":"","menu-meta_description":"","menu-meta_keywords":"","robots":"","secure":0}', 53, 54, 0, '*'),
(262, 'aboutjoomla', 'Featured Articles', 'featured-articles', '', 'using-joomla/extensions/components/content-component/featured-articles', 'index.php?option=com_content&view=featured', 'component', 1, 266, 5, 22, 0, 0, '0000-00-00 00:00:00', 0, 1, '', 0, '{"maxLevel":"","show_empty_categories":"","show_description":"","show_description_image":"","show_cat_num_articles":"","num_leading_articles":"1","num_intro_articles":"4","num_columns":"2","num_links":"4","multi_column_order":"1","orderby_pri":"","orderby_sec":"front","order_date":"","show_pagination":"2","show_noauth":"","show_title":"","link_titles":"","show_intro":"","show_category":"","link_category":"","show_parent_category":"","link_parent_category":"","show_author":"","link_author":"","show_create_date":"","show_modify_date":"","show_publish_date":"","show_item_navigation":"","show_readmore":"","show_icons":"","show_print_icon":"","show_email_icon":"","show_hits":"","show_feed_link":"1","feed_summary":"","menu-anc!
hor_title":"","menu-anchor_css":"","menu_image":"","show_page_heading":0,"page_title":"","page_heading":"","pageclass_sfx":"","menu-meta_description":"","menu-meta_keywords":"","robots":"","secure":0}', 55, 56, 0, '*'),
@@ -484,7 +487,7 @@
(431, 'fruitshop', 'Growers', 'growers', '', 'growers', 'index.php?option=com_content&view=category&layout=blog&id=30', 'component', 1, 1, 1, 22, 0, 0, '0000-00-00 00:00:00', 0, 1, '', 6, '{"maxLevel":"0","show_empty_categories":"","show_description":"1","show_description_image":"","show_category_title":"1","show_cat_num_articles":"","num_leading_articles":"5","num_intro_articles":"0","num_columns":"1","num_links":"4","multi_column_order":"","orderby_pri":"","orderby_sec":"alpha","order_date":"","show_pagination":"","show_noauth":"","show_title":"1","link_titles":"1","show_intro":"1","show_category":"0","link_category":"","show_parent_category":"0","link_parent_category":"0","show_author":"0","link_author":"","show_create_date":"","show_modify_date":"","show_publish_date":"0","show_item_navigation":"","show_readmore":"","show_icons":"","show_print_icon":"","show_email_icon":"","show_hits":"0","show_feed_link":"","feed_summary":"","menu-anchor_title":"","menu-anchor_css":"",!
"menu_image":"","show_page_heading":0,"page_title":"","page_heading":"","pageclass_sfx":"","menu-meta_description":"","menu-meta_keywords":"","robots":"","secure":0}', 257, 258, 0, '*'),
(432, 'fruitshop', 'Login ', 'shop-login', '', 'shop-login', 'index.php?option=com_users&view=login', 'component', 1, 1, 1, 25, 0, 0, '0000-00-00 00:00:00', 0, 1, '', 6, '{"login_redirect_url":"http:\\/\\/localhost\\/joomla_development\\/trunk071110\\/index.php\\/welcome.html","logindescription_show":"1","login_description":"","login_image":"","logout_redirect_url":"http:\\/\\/localhost\\/joomla_development\\/trunk071110\\/index.php\\/welcome.html","logoutdescription_show":"1","logout_description":"","logout_image":"","menu-anchor_title":"","menu-anchor_css":"","menu_image":"","show_page_heading":0,"page_title":"","page_heading":"","pageclass_sfx":"","menu-meta_description":"","menu-meta_keywords":"","robots":"","secure":0}', 261, 262, 0, '*'),
(433, 'fruitshop', 'Directions', 'directions', '', 'directions', 'index.php?option=com_content&view=article&id=13', 'component', 1, 1, 1, 22, 0, 0, '0000-00-00 00:00:00', 0, 1, '', 6, '{"show_noauth":"","show_title":"","link_titles":"","show_intro":"","show_category":"","link_category":"","show_parent_category":"","link_parent_category":"","show_author":"","link_author":"","show_create_date":"","show_modify_date":"","show_publish_date":"","show_item_navigation":"","show_icons":"","show_print_icon":"","show_email_icon":"","show_hits":"","robots":"","rights":"","menu-anchor_title":"","menu-anchor_css":"","menu_image":"","show_page_heading":0,"page_title":"","page_heading":"","pageclass_sfx":"","menu-meta_description":"","menu-meta_keywords":"","secure":0}', 263, 264, 0, '*'),
-(435, 'mainmenu', 'Home', 'homepage', '', 'homepage', 'index.php?option=com_content&view=featured', 'component', 1, 1, 1, 22, -5, 0, '0000-00-00 00:00:00', 0, 1, '', 0, '{"maxLevel":"","show_empty_categories":"","show_description":"","show_description_image":"","show_cat_num_articles":"","num_leading_articles":"1","num_intro_articles":"3","num_columns":"3","num_links":"0","multi_column_order":"1","orderby_pri":"","orderby_sec":"front","order_date":"","show_pagination":"2","show_noauth":"","show_title":"1","link_titles":"","show_intro":"","show_category":"0","link_category":"0","show_parent_category":"0","link_parent_category":"0","show_author":"0","link_author":"0","show_create_date":"0","show_modify_date":"0","show_publish_date":"0","show_item_navigation":"0","show_readmore":"1","show_icons":"0","show_print_icon":"0","show_email_icon":"0","show_hits":"0","show_feed_link":"1","feed_summary":"","menu-anchor_title":"","menu-anchor_css":"","menu_image":"","show_page_heading":0!
,"page_title":"","page_heading":"","pageclass_sfx":"","menu-meta_description":"","menu-meta_keywords":"","robots":"","secure":0}', 1, 2, 1, '*'),
+(435, 'mainmenu', 'Home', 'homepage', '', 'homepage/Banners', 'index.php?option=com_content&view=featured', 'component', 1, 1, 1, 22, -5, 0, '0000-00-00 00:00:00', 0, 1, '', 0, '{"num_leading_articles":"1","num_intro_articles":"3","num_columns":"3","num_links":"0","multi_column_order":"1","orderby_pri":"","orderby_sec":"front","order_date":"","show_pagination":"2","show_noauth":"","show_title":"1","link_titles":"","show_intro":"","show_category":"0","link_category":"0","show_parent_category":"0","link_parent_category":"0","show_author":"0","link_author":"0","show_create_date":"0","show_modify_date":"0","show_publish_date":"0","show_item_navigation":"0","show_readmore":"1","show_icons":"0","show_print_icon":"0","show_email_icon":"0","show_hits":"0","show_feed_link":"1","feed_summary":"","menu-anchor_title":"","menu-anchor_css":"","menu_image":"","page_title":"","show_page_heading":0,"page_heading":"","pageclass_sfx":"","menu-meta_description":"","menu-meta_keywords":"","robo!
ts":"","secure":0}', 1, 2, 1, '*'),
(444, 'top', 'Sample Sites', 'sample-sites-2', '', 'sample-sites-2', 'index.php?Itemid=', 'alias', 1, 1, 1, 0, 0, 0, '0000-00-00 00:00:00', 0, 1, '', 0, '{"aliasoptions":"238","menu-anchor_title":"","menu-anchor_css":"","menu_image":""}', 233, 234, 0, '*'),
(436, 'aboutjoomla', 'Getting Help', 'getting-help', '', 'using-joomla/getting-help', 'index.php?option=com_content&view=article&id=21', 'component', 1, 280, 2, 22, 0, 0, '0000-00-00 00:00:00', 0, 1, '', 0, '{"show_noauth":"","show_title":"","link_titles":"","show_intro":"","show_category":"0","link_category":"","show_parent_category":"0","link_parent_category":"","show_author":"0","link_author":"","show_create_date":"0","show_modify_date":"0","show_publish_date":"0","show_item_navigation":"0","show_icons":"","show_print_icon":"","show_email_icon":"","show_hits":"0","robots":"","rights":"","menu-anchor_title":"","menu-anchor_css":"","menu_image":"","show_page_heading":0,"page_title":"","page_heading":"","pageclass_sfx":"","menu-meta_description":"","menu-meta_keywords":"","secure":0}', 214, 215, 0, '*'),
(437, 'aboutjoomla', 'Getting started', 'getting-started', '', 'getting-started', 'index.php?option=com_content&view=article&id=22', 'component', 1, 1, 1, 22, 0, 0, '0000-00-00 00:00:00', 0, 1, '', 0, '{"show_noauth":"","show_title":"1","link_titles":"0","show_intro":"","show_category":"0","link_category":"","show_parent_category":"0","link_parent_category":"","show_author":"0","link_author":"","show_create_date":"0","show_modify_date":"0","show_publish_date":"0","show_item_navigation":"","show_icons":"","show_print_icon":"","show_email_icon":"","show_hits":"0","robots":"","rights":"","menu-anchor_title":"","menu-anchor_css":"","menu_image":"","show_page_heading":0,"page_title":"","page_heading":"","pageclass_sfx":"","menu-meta_description":"","menu-meta_keywords":"","secure":0}', 29, 30, 0, '*'),
@@ -499,7 +502,6 @@
(450, 'usermenu', 'Submit a Web Link', 'submit-a-web-link', '', 'submit-a-web-link', 'index.php?option=com_weblinks&view=form&layout=edit', 'component', 1, 1, 1, 21, 0, 0, '0000-00-00 00:00:00', 0, 1, '', 0, '{"menu-anchor_title":"","menu-anchor_css":"","menu_image":"","show_page_heading":0,"page_title":"","page_heading":"","pageclass_sfx":"","menu-meta_description":"","menu-meta_keywords":"","robots":"","secure":0}', 275, 276, 0, '*'),
(452, 'aboutjoomla', 'Featured Contacts', 'featured-contacts', '', 'using-joomla/extensions/components/contact-component/featured-contacts', 'index.php?option=com_contact&view=featured&id=16', 'component', 1, 270, 5, 8, 0, 0, '0000-00-00 00:00:00', 0, 1, '', 0, '{"maxLevel":"-1","show_empty_categories":"","show_description":"","show_description_image":"","show_cat_num_articles":"","display_num":"","show_headings":"","filter_field":"","show_pagination":"","show_noauth":"","presentation_style":"sliders","show_name":"","show_position":"","show_email":"","show_street_address":"","show_suburb":"","show_state":"","show_postcode":"","show_country":"","show_telephone":"","show_mobile":"","show_fax":"","show_webpage":"","show_misc":"","show_image":"","allow_vcard":"","show_articles":"","show_links":"1","linka_name":"","linkb_name":"","linkc_name":"","linkd_name":"","linke_name":"","show_email_form":"","show_email_copy":"","banned_email":"","banned_subject":"","banned_text":"","valid!
ate_session":"","custom_reply":"","redirect":"","show_feed_link":"","feed_summary":"","menu-anchor_title":"","menu-anchor_css":"","menu_image":"","show_page_heading":1,"page_title":"","page_heading":"","pageclass_sfx":"","menu-meta_description":"","menu-meta_keywords":"","robots":"","secure":0}', 69, 70, 0, '*'),
(453, 'aboutjoomla', 'Parameters', 'parameters', '', 'using-joomla/parameters', 'index.php?option=com_content&view=article&id=32', 'component', 1, 280, 2, 22, 0, 0, '0000-00-00 00:00:00', 0, 1, '', 0, '{"show_noauth":"1","show_title":"1","link_titles":"1","show_intro":"1","show_category":"1","link_category":"1","show_parent_category":"1","link_parent_category":"1","show_author":"1","link_author":"1","show_create_date":"1","show_modify_date":"1","show_publish_date":"1","show_item_navigation":"1","show_icons":"1","show_print_icon":"1","show_email_icon":"1","show_hits":"1","robots":"","rights":"","menu-anchor_title":"","menu-anchor_css":"","menu_image":"","show_page_heading":0,"page_title":"","page_heading":"","pageclass_sfx":"","menu-meta_description":"","menu-meta_keywords":"","secure":0}', 212, 213, 0, '*'),
-(454, 'top', 'Home', 'home', '', 'home', 'index.php?Itemid=', 'alias', 1, 1, 1, 0, 0, 0, '0000-00-00 00:00:00', 0, 1, '', 0, '{"aliasoptions":"435","menu-anchor_title":"","menu-anchor_css":"","menu_image":""}', 231, 232, 0, '*'),
(456, 'aboutjoomla', 'Beez5', 'beez5', '', 'using-joomla/extensions/templates/beez5', 'index.php?option=com_content&view=category&layout=blog&id=70', 'component', 1, 282, 4, 22, 0, 0, '0000-00-00 00:00:00', 0, 1, '', 0, '{"maxLevel":"","show_empty_categories":"","show_description":"1","show_description_image":"","show_category_title":"","show_cat_num_articles":"","num_leading_articles":"1","num_intro_articles":"4","num_columns":"2","num_links":"4","multi_column_order":"","orderby_pri":"","orderby_sec":"","order_date":"","show_pagination":"","show_noauth":"","show_title":"","link_titles":"","show_intro":"","show_category":"","link_category":"","show_parent_category":"","link_parent_category":"","show_author":"","link_author":"","show_create_date":"","show_modify_date":"","show_publish_date":"","show_item_navigation":"","show_readmore":"","show_icons":"","show_print_icon":"","show_email_icon":"","show_hits":"","show_feed_link":"","feed_summary":"","menu-anchor_title":"","menu!
-anchor_css":"","menu_image":"","show_page_heading":1,"page_title":"","page_heading":"","pageclass_sfx":"","menu-meta_description":"","menu-meta_keywords":"","robots":"","secure":0}', 174, 179, 0, '*'),
(457, 'aboutjoomla', 'Typography Beez5', 'typography-beez-5', '', 'using-joomla/extensions/templates/beez5/typography-beez-5', 'index.php?option=com_content&view=article&id=49', 'component', 1, 456, 5, 22, 0, 0, '0000-00-00 00:00:00', 0, 1, '', 0, '{"show_noauth":"","show_title":"","link_titles":"","show_intro":"","show_category":"","link_category":"","show_parent_category":"","link_parent_category":"","show_author":"","link_author":"","show_create_date":"","show_modify_date":"","show_publish_date":"","show_item_navigation":"","show_icons":"","show_print_icon":"","show_email_icon":"","show_hits":"","robots":"","rights":"","menu-anchor_title":"","menu-anchor_css":"","menu_image":"","show_page_heading":1,"page_title":"","page_heading":"","pageclass_sfx":"","menu-meta_description":"","menu-meta_keywords":"","secure":0}', 175, 176, 0, '*'),
(458, 'aboutjoomla', 'Home Page Beez5', 'home-page-beez5', '', 'using-joomla/extensions/templates/beez5/home-page-beez5', 'index.php?option=com_content&view=featured', 'component', 1, 456, 5, 22, 0, 0, '0000-00-00 00:00:00', 0, 1, '', 0, '{"maxLevel":"","show_empty_categories":"","show_description":"","show_description_image":"","show_cat_num_articles":"","num_leading_articles":"1","num_intro_articles":"3","num_columns":"3","num_links":"0","multi_column_order":"","orderby_pri":"","orderby_sec":"front","order_date":"","show_pagination":"","show_noauth":"","show_title":"","link_titles":"","show_intro":"","show_category":"","link_category":"","show_parent_category":"","link_parent_category":"","show_author":"","link_author":"","show_create_date":"","show_modify_date":"","show_publish_date":"","show_item_navigation":"","show_readmore":"","show_icons":"","show_print_icon":"","show_email_icon":"","show_hits":"","show_feed_link":"","feed_summary":"","menu-anchor_title":"","menu-an!
chor_css":"","menu_image":"","show_page_heading":1,"page_title":"","page_heading":"","pageclass_sfx":"","menu-meta_description":"","menu-meta_keywords":"","robots":"","secure":0}', 177, 178, 0, '*'),
@@ -510,7 +512,7 @@
--
-- Dumping data for table `#__menu_types`
--
-DELETE FROM `#__menu_types` WHERE `id` = 1;
+TRUNCATE `#__menu_types`;
INSERT IGNORE INTO `#__menu_types` VALUES
(2, 'usermenu', 'User Menu', 'A Menu for logged in Users'),
(3, 'top', 'Top', 'Links for major types of users'),
@@ -532,19 +534,19 @@
(8, 'Toolbar', '', '', 1, 'toolbar', 0, '0000-00-00 00:00:00', '0000-00-00 00:00:00', '0000-00-00 00:00:00', 1, 'mod_toolbar', 3, 1, '', 1, '*'),
(9, 'Quick Icons', '', '', 1, 'icon', 0, '0000-00-00 00:00:00', '0000-00-00 00:00:00', '0000-00-00 00:00:00', 1, 'mod_quickicon', 3, 1, '', 1, '*'),
(10, 'Logged-in Users', '', '', 2, 'cpanel', 0, '0000-00-00 00:00:00', '0000-00-00 00:00:00', '0000-00-00 00:00:00', 1, 'mod_logged', 3, 1, '', 1, '*'),
-(12, 'Admin Menu', '', '', 1, 'menu', 0, '0000-00-00 00:00:00', '0000-00-00 00:00:00', '0000-00-00 00:00:00', 1, 'mod_menu', 3, 1, '', 1, '*'),
+(12, 'Admin Menu', '', '', 1, 'menu', 0, '0000-00-00 00:00:00', '0000-00-00 00:00:00', '0000-00-00 00:00:00', 1, 'mod_menu', 3, 1, '{"layout":"","moduleclass_sfx":"","shownew":"1","showhelp":"1","cache":"0"}', 1, '*'),
(13, 'Admin Submenu', '', '', 1, 'submenu', 0, '0000-00-00 00:00:00', '0000-00-00 00:00:00', '0000-00-00 00:00:00', 1, 'mod_submenu', 3, 1, '', 1, '*'),
(14, 'User Status', '', '', 1, 'status', 0, '0000-00-00 00:00:00', '0000-00-00 00:00:00', '0000-00-00 00:00:00', 1, 'mod_status', 3, 1, '', 1, '*'),
(15, 'Title', '', '', 1, 'title', 0, '0000-00-00 00:00:00', '0000-00-00 00:00:00', '0000-00-00 00:00:00', 1, 'mod_title', 3, 1, '', 1, '*'),
-(16, 'Login Form', '', '', 8, 'position-7', 0, '0000-00-00 00:00:00', '0000-00-00 00:00:00', '0000-00-00 00:00:00', 1, 'mod_login', 1, 1, '{"greeting":"1","name":"0"}', 0, '*'),
+(16, 'Login Form', '', '', 7, 'position-7', 0, '0000-00-00 00:00:00', '0000-00-00 00:00:00', '0000-00-00 00:00:00', 1, 'mod_login', 1, 1, '{"greeting":"1","name":"0"}', 0, '*'),
(17, 'Breadcrumbs', '', '', 1, 'position-2', 0, '0000-00-00 00:00:00', '0000-00-00 00:00:00', '0000-00-00 00:00:00', 1, 'mod_breadcrumbs', 1, 1, '{"moduleclass_sfx":"","showHome":"1","homeText":"Home","showComponent":"1","separator":"","cache":"1","cache_time":"900","cachemode":"itemid"}', 0, '*'),
(18, 'Banners', '', '', 1, 'position-5', 0, '0000-00-00 00:00:00', '0000-00-00 00:00:00', '0000-00-00 00:00:00', 0, 'mod_banners', 1, 1, '{"target":"1","count":"1","cid":"1","catid":["27"],"tag_search":"0","ordering":"0","header_text":"","footer_text":"","layout":"","moduleclass_sfx":"","cache":"1","cache_time":"900"}', 0, '*'),
-(19, 'User Menu', '', '', 2, 'position-7', 0, '0000-00-00 00:00:00', '0000-00-00 00:00:00', '0000-00-00 00:00:00', 1, 'mod_menu', 2, 1, '{"menutype":"usermenu","startLevel":"0","endLevel":"0","showAllChildren":"0","tag_id":"","class_sfx":"","window_open":"","layout":"","moduleclass_sfx":"_menu","cache":"1","cache_time":"900","cachemode":"itemid"}', 0, '*'),
+(19, 'User Menu', '', '', 3, 'position-7', 0, '0000-00-00 00:00:00', '0000-00-00 00:00:00', '0000-00-00 00:00:00', 1, 'mod_menu', 2, 1, '{"menutype":"usermenu","startLevel":"0","endLevel":"0","showAllChildren":"0","tag_id":"","class_sfx":"","window_open":"","layout":"","moduleclass_sfx":"_menu","cache":"1","cache_time":"900","cachemode":"itemid"}', 0, '*'),
(20, 'Top', '', '', 1, 'position-1', 0, '0000-00-00 00:00:00', '0000-00-00 00:00:00', '0000-00-00 00:00:00', 1, 'mod_menu', 1, 1, '{"menutype":"top","startLevel":"0","endLevel":"0","showAllChildren":"0","tag_id":"","class_sfx":"","maxdepth":"10","window_open":"","layout":"","moduleclass_sfx":"","cache":"0"}', 0, '*'),
-(22, 'Australian Parks ', '', '', 1, 'position-5', 0, '0000-00-00 00:00:00', '0000-00-00 00:00:00', '0000-00-00 00:00:00', 1, 'mod_menu', 1, 1, '{"menutype":"parks","startLevel":"0","endLevel":"0","showAllChildren":"0","tag_id":"","class_sfx":"","window_open":"","layout":"","moduleclass_sfx":"","cache":"0","cache_time":"900","cachemode":"itemid"}', 0, 'en-GB'),
+(22, 'Australian Parks ', '', '', 2, 'position-5', 0, '0000-00-00 00:00:00', '0000-00-00 00:00:00', '0000-00-00 00:00:00', 1, 'mod_menu', 1, 1, '{"menutype":"parks","startLevel":"0","endLevel":"0","showAllChildren":"0","tag_id":"","class_sfx":"","window_open":"","layout":"","moduleclass_sfx":"","cache":"0","cache_time":"900","cachemode":"itemid"}', 0, 'en-GB'),
(23, 'About Joomla!', '', '', 4, 'position-7', 0, '0000-00-00 00:00:00', '0000-00-00 00:00:00', '0000-00-00 00:00:00', 1, 'mod_menu', 1, 1, '{"menutype":"aboutjoomla","startLevel":"0","endLevel":"0","showAllChildren":"0","tag_id":"","class_sfx":"","window_open":"","layout":"","moduleclass_sfx":"_menu","cache":"0","cache_time":"900","cachemode":"itemid"}', 0, '*'),
-(68, 'About Parks', '', '<p>The Parks sample site is designed as a simple site that can be routinely updated from the front end of Joomla!.</p><p>As a site, it is largely focused on a blog which can be updated using the front end article submission.</p><p>New weblinks can also be added through the front end.</p><p>A simple image gallery uses com_content with thumbnails displayed in a blog layout and full size images shown in article layout.</p><p>The Parks site features the language switch module. All of the content and modules are tagged as English (en-GB). If a second language pack is added with sample data this can be filtered using the language switch.</p><p>Parks uses HTML5 which is a major web standard (along with XHTML which is used in other areas of sample data).</p>', 1, 'position-4', 0, '0000-00-00 00:00:00', '0000-00-00 00:00:00', '0000-00-00 00:00:00', 1, 'mod_custom', 1, 1, '{"prepare_content":"1","layout":"","moduleclass_sfx":"","cache":"1","cache_time":"900",!
"cachemode":"static"}', 0, '*'),
-(67, 'Extensions', '', '', 1, 'position-7', 0, '0000-00-00 00:00:00', '0000-00-00 00:00:00', '0000-00-00 00:00:00', 0, 'mod_menu', 1, 1, '{"menutype":"aboutjoomla","startLevel":"0","endLevel":"6","showAllChildren":"0","tag_id":"","class_sfx":"-menu","window_open":"","layout":"","moduleclass_sfx":"","cache":"0","cache_time":"900","cachemode":"itemid"}', 0, '*'),
+(68, 'About Parks', '', '<p>The Parks sample site is designed as a simple site that can be routinely updated from the front end of Joomla!.</p><p>As a site, it is largely focused on a blog which can be updated using the front end article submission.</p><p>New weblinks can also be added through the front end.</p><p>A simple image gallery uses com_content with thumbnails displayed in a blog layout and full size images shown in article layout.</p><p>The Parks site features the language switch module. All of the content and modules are tagged as English (en-GB). If a second language pack is added with sample data this can be filtered using the language switch.</p><p>Parks uses HTML5 which is a major web standard (along with XHTML which is used in other areas of sample data).</p>', 2, 'position-4', 0, '0000-00-00 00:00:00', '0000-00-00 00:00:00', '0000-00-00 00:00:00', 1, 'mod_custom', 1, 1, '{"prepare_content":"1","layout":"","moduleclass_sfx":"","cache":"1","cache_time":"900",!
"cachemode":"static"}', 0, '*'),
+(67, 'Extensions', '', '', 2, 'position-7', 0, '0000-00-00 00:00:00', '0000-00-00 00:00:00', '0000-00-00 00:00:00', 0, 'mod_menu', 1, 1, '{"menutype":"aboutjoomla","startLevel":"0","endLevel":"6","showAllChildren":"0","tag_id":"","class_sfx":"-menu","window_open":"","layout":"","moduleclass_sfx":"","cache":"0","cache_time":"900","cachemode":"itemid"}', 0, '*'),
(25, 'Site Map', '', '', 1, 'sitemapload', 0, '0000-00-00 00:00:00', '0000-00-00 00:00:00', '0000-00-00 00:00:00', 1, 'mod_menu', 1, 0, '{"menutype":"mainmenu","startLevel":"2","endLevel":"3","showAllChildren":"1","tag_id":"","class_sfx":"sitemap","window_open":"","layout":"","moduleclass_sfx":"","cache":"0","cache_time":"900","cachemode":"itemid"}', 0, '*'),
(26, 'This Site', '', '', 5, 'position-7', 0, '0000-00-00 00:00:00', '0000-00-00 00:00:00', '0000-00-00 00:00:00', 1, 'mod_menu', 1, 1, '{"menutype":"mainmenu","startLevel":"0","endLevel":"1","showAllChildren":"0","tag_id":"","class_sfx":"","window_open":"","layout":"","moduleclass_sfx":"_menu","cache":"0","cache_time":"900","cachemode":"itemid"}', 0, '*'),
(27, 'Archived Articles', '', '', 1, 'archiveload', 0, '0000-00-00 00:00:00', '0000-00-00 00:00:00', '0000-00-00 00:00:00', 1, 'mod_articles_archive', 1, 1, '{"count":"10","layout":"","moduleclass_sfx":"","cache":"1","cache_time":"900","cachemode":"static"}', 0, '*'),
@@ -570,9 +572,9 @@
(52, 'Breadcrumbs', '', '', 1, 'breadcrumbsload', 0, '0000-00-00 00:00:00', '0000-00-00 00:00:00', '0000-00-00 00:00:00', 1, 'mod_breadcrumbs', 1, 1, '{"showHome":"1","homeText":"Home","showLast":"1","separator":"","layout":"","moduleclass_sfx":"","cache":"0","cache_time":"900","cachemode":"itemid"}', 0, '*'),
(61, 'Articles Categories', '', '', 1, 'articlescategoriesload', 0, '0000-00-00 00:00:00', '0000-00-00 00:00:00', '0000-00-00 00:00:00', 1, 'mod_articles_categories', 1, 1, '{"parent":"29","show_description":"0","show_children":"0","maxlevel":"0","count":"0","layout":"","moduleclass_sfx":"","owncache":"1","cache_time":"900"}', 0, '*'),
(56, 'Banners', '', '', 1, 'bannersload', 0, '0000-00-00 00:00:00', '0000-00-00 00:00:00', '0000-00-00 00:00:00', 1, 'mod_banners', 1, 1, '{"target":"1","count":"1","cid":"1","catid":["15"],"tag_search":"0","ordering":"random","header_text":"","footer_text":"","layout":"","moduleclass_sfx":"","cache":"1","cache_time":"900"}', 0, '*'),
-(57, 'Fruit Shop', '', '', 1, 'position-5', 0, '0000-00-00 00:00:00', '0000-00-00 00:00:00', '0000-00-00 00:00:00', 1, 'mod_menu', 1, 1, '{"menutype":"fruitshop","startLevel":"0","endLevel":"0","showAllChildren":"0","tag_id":"","class_sfx":"","window_open":"","layout":"","moduleclass_sfx":"","cache":"0","cache_time":"900","cachemode":"itemid"}', 0, '*'),
+(57, 'Fruit Shop', '', '', 3, 'position-5', 0, '0000-00-00 00:00:00', '0000-00-00 00:00:00', '0000-00-00 00:00:00', 1, 'mod_menu', 1, 1, '{"menutype":"fruitshop","startLevel":"0","endLevel":"0","showAllChildren":"0","tag_id":"","class_sfx":"","window_open":"","layout":"","moduleclass_sfx":"","cache":"0","cache_time":"900","cachemode":"itemid"}', 0, '*'),
(58, 'Special!', '', '<h1>This week we have a special, half price on delicious oranges!</h1><div>Only for our special customers!</div><div>Use the code: Joomla! when ordering</div><p><em>This module can only be seen by people in the customers group or higher.</em></p>', 1, 'position-12', 0, '0000-00-00 00:00:00', '0000-00-00 00:00:00', '0000-00-00 00:00:00', 1, 'mod_custom', 4, 1, '{"prepare_content":"1","layout":"","moduleclass_sfx":"","cache":"1","cache_time":"900","cachemode":"static"}', 0, '*'),
-(62, 'Language Switcher', '', '', 1, 'position-4', 0, '0000-00-00 00:00:00', '0000-00-00 00:00:00', '0000-00-00 00:00:00', 0, 'mod_languages', 1, 1, '{"header_text":"","footer_text":"","image":"1","layout":"","moduleclass_sfx":"","cache":"1","cache_time":"900","cachemode":"static"}', 0, '*'),
+(62, 'Language Switcher', '', '', 3, 'position-4', 0, '0000-00-00 00:00:00', '0000-00-00 00:00:00', '0000-00-00 00:00:00', 0, 'mod_languages', 1, 1, '{"header_text":"","footer_text":"","image":"1","layout":"","moduleclass_sfx":"","cache":"1","cache_time":"900","cachemode":"static"}', 0, '*'),
(63, 'Search', '', '', 1, 'position-0', 0, '0000-00-00 00:00:00', '0000-00-00 00:00:00', '0000-00-00 00:00:00', 1, 'mod_search', 1, 1, '{"width":"20","text":"","button":"","button_pos":"right","imagebutton":"1","button_text":"","set_itemid":"","layout":"","moduleclass_sfx":"","cache":"1","cache_time":"900","cachemode":"itemid"}', 0, '*'),
(64, 'Language Switcher', '', '', 1, 'languageswitcherload', 0, '0000-00-00 00:00:00', '0000-00-00 00:00:00', '0000-00-00 00:00:00', 0, 'mod_languages', 1, 1, '{"header_text":"","footer_text":"","image":"1","layout":"","moduleclass_sfx":"","cache":"1","cache_time":"900","cachemode":"static"}', 0, '*'),
(65, 'About Fruit Shop', '', '<p>The Fruit Shop site shows a number of Joomla! features.</p><p>The template uses classes in cascading style sheets to change the layout of items, such as creating the horizontal alphabetical list in the Fruit Encyclopedia.</p><p> </p>', 1, 'position-4', 0, '0000-00-00 00:00:00', '0000-00-00 00:00:00', '0000-00-00 00:00:00', 1, 'mod_custom', 1, 1, '{"prepare_content":"1","layout":"","moduleclass_sfx":"","cache":"1","cache_time":"900","cachemode":"static"}', 0, '*'),
@@ -582,9 +584,8 @@
(72, 'Top Quote (Atomic Template)', '', '<hr />\r\n<h2 class="alt">Powerful Content Management and a Simple Extensible Framework.</h2>\r\n<hr />', 1, 'atomic-topquote', 0, '0000-00-00 00:00:00', '0000-00-00 00:00:00', '0000-00-00 00:00:00', 1, 'mod_custom', 1, 0, '{"prepare_content":"1","layout":"","moduleclass_sfx":"","cache":"1","cache_time":"900","cachemode":"static"}', 0, '*'),
(73, 'Bottom Left Column (Atomic Template)', '', '<h6>This is a nested column</h6>\r\n<p>Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur.</p>', 0, 'atomic-bottomleft', 0, '0000-00-00 00:00:00', '0000-00-00 00:00:00', '0000-00-00 00:00:00', 1, 'mod_custom', 1, 0, '{"prepare_content":"1","layout":"","moduleclass_sfx":"","cache":"1","cache_time":"900","cachemode":"static"}', 0, '*'),
(74, 'Bottom Middle Column (Atomic Template)', '', '<h6>This is another nested column</h6>\r\n<p>Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur.</p>', 0, 'atomic-bottommiddle', 0, '0000-00-00 00:00:00', '0000-00-00 00:00:00', '0000-00-00 00:00:00', 1, 'mod_custom', 1, 0, '{"prepare_content":"1","layout":"","moduleclass_sfx":"","cache":"1","cache_time":"900","cachemode":"static"}', 0, '*'),
-(75, 'Sidebar (Atomic Template)', '', '<h3>A <span class="alt">Simple</span> Sidebar</h3>\r\n<p>Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Cras ornare mattis nunc. Mauris venenatis, pede sed aliquet vehicula, lectus tellus pulvinar neque, non cursus sem nisi vel augue.</p>\r\n<p class="quiet">Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Cras ornare mattis nunc. Mauris venenatis, pede sed aliquet vehicula, lectus tellus pulvinar neque, non cursus sem nisi vel augue.</p>\r\n<h5>Incremental leading</h5>\r\n<p class="incr">Vestibulum ante ipsum primis in faucibus orci luctus vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Cras ornare mattis nunc. Mauris venenatis, pede sed aliquet vehicula, lectus tellus pulvinar neque, non cursus sem nisi vel augue. sed aliquet vehicula, lectus tellus.</p>\r\n<p class="incr">Vestibulum ante ipsum primis in faucibus or!
ci luctus et ultrices posuere cubilia Curae; Cras ornare mattis nunc. Mauris venenatis, pede sed aliquet vehicula, lectus tellus pulvinar neque, non cursus sem nisi vel augue. sed aliquet vehicula, lectus tellus pulvinar neque, non cursus sem nisi vel augue. ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Cras ornare mattis nunc. Mauris venenatis, pede sed aliquet vehicula, lectus tellus pulvinar neque, non cursus sem nisi vel augue. sed aliquet vehicula, lectus tellus pulvinar neque, non cursus sem nisi vel augue.</p>', 1, 'atomic-sidebar', 0, '0000-00-00 00:00:00', '0000-00-00 00:00:00', '0000-00-00 00:00:00', 1, 'mod_custom', 1, 0, '{"prepare_content":"1","layout":"","moduleclass_sfx":"","cache":"1","cache_time":"900","cachemode":"static"}', 0, '*'),
+(75, 'Sidebar (Atomic Template)', '', '<h3>A <span class="alt">Simple</span> Sidebar</h3>\r\n<p>Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Cras ornare mattis nunc. Mauris venenatis, pede sed aliquet vehicula, lectus tellus pulvinar neque, non cursus sem nisi vel augue.</p><p class="quiet">Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Cras ornare mattis nunc. Mauris venenatis, pede sed aliquet vehicula, lectus tellus pulvinar neque, non cursus sem nisi vel augue.</p>\r\n<h5>Incremental leading</h5>\r\n<p class="incr">Vestibulum ante ipsum primis in faucibus orci luctus vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Cras ornare mattis nunc. Mauris venenatis, pede sed aliquet vehicula, lectus tellus pulvinar neque, non cursus sem nisi vel augue. sed aliquet vehicula, lectus tellus.</p>\r\n<p class="incr">Vestibulum ante ipsum primis in faucibus orci l!
uctus et ultrices posuere cubilia Curae; Cras ornare mattis nunc. Mauris venenatis, pede sed aliquet vehicula, lectus tellus pulvinar neque, non cursus sem nisi vel augue. sed aliquet vehicula, lectus tellus pulvinar neque, non cursus sem nisi vel augue. ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Cras ornare mattis nunc. Mauris venenatis, pede sed aliquet vehicula, lectus tellus pulvinar neque, non cursus sem nisi vel augue. sed aliquet vehicula, lectus tellus pulvinar neque, non cursus sem nisi vel augue.</p>', 1, 'atomic-sidebar', 0, '0000-00-00 00:00:00', '0000-00-00 00:00:00', '0000-00-00 00:00:00', 1, 'mod_custom', 1, 0, '{"prepare_content":"1","layout":"","moduleclass_sfx":"","cache":"1","cache_time":"900","cachemode":"static"}', 0, '*'),
(76, 'Login (Atomic Template)', '', '', 2, 'atomic-sidebar', 0, '0000-00-00 00:00:00', '0000-00-00 00:00:00', '0000-00-00 00:00:00', 1, 'mod_login', 1, 0, '{"pretext":"","posttext":"","login":"","logout":"","greeting":"0","name":"0","usesecure":"0","layout":"","moduleclass_sfx":"","cache":"0"}', 0, '*');
-
--
-- Dumping data for table `#__modules_menu`
--
@@ -596,13 +597,11 @@
(2, 0),
(3, 0),
(4, 0),
-(5, 0),
(6, 0),
(7, 0),
(8, 0),
(9, 0),
(10, 0),
-(11, 0),
(12, 0),
(13, 0),
(14, 0),
@@ -821,15 +820,16 @@
(74, 0),
(75, 0),
(76, 0);
+
--
-- Dumping data for table `#__newsfeeds`
--
INSERT IGNORE INTO `#__newsfeeds`
VALUES
(17, 1, 'Joomla! Announcements', 'joomla-announcements', 'http://www.joomla.org/announcements.feed?type=rss', NULL, 1, 5, 3600, 0, '0000-00-00 00:00:00', 1, 0, 1, 'en-GB', '{"show_feed_image":"","show_feed_description":"","show_item_description":"","feed_character_count":"0"}', '0000-00-00 00:00:00', 0, '', '2010-07-10 23:40:09', 42, '', '', '{"robots":"","author":"","rights":""}', '', '0000-00-00 00:00:00', '0000-00-00 00:00:00'),
-(17, 2, 'New Joomla! Extensions', 'new-joomla-extensions', 'http://feeds.joomla.org/JoomlaExtensions', NULL, 1, 5, 3600, 0, '0000-00-00 00:00:00', 1, 0, 1, 'en-GB', '{"show_feed_image":"","show_feed_description":"","show_item_description":"","feed_character_count":"0"}', '0000-00-00 00:00:00', 0, '', '2010-07-10 23:40:28', 42, '', '', '{"robots":"","author":"","rights":""}', '', '0000-00-00 00:00:00', '0000-00-00 00:00:00'),
-(17, 3, 'Joomla! Security News', 'joomla-security-news', 'http://feeds.joomla.org/JoomlaSecurityNews', NULL, 1, 5, 3600, 0, '0000-00-00 00:00:00', 1, 0, 1, 'en-GB', '{"show_feed_image":"","show_feed_description":"","show_item_description":"","feed_character_count":"0"}', '0000-00-00 00:00:00', 0, '', '2010-07-10 23:40:23', 42, '', '', '{"robots":"","author":"","rights":""}', '', '0000-00-00 00:00:00', '0000-00-00 00:00:00'),
-(17, 4, 'Joomla! Connect', 'joomla-connect', 'http://feeds.joomla.org/JoomlaConnect', NULL, 1, 5, 3600, 0, '0000-00-00 00:00:00', 1, 0, 1, 'en-GB', '{"show_feed_image":"","show_feed_description":"","show_item_description":"","feed_character_count":"0"}', '0000-00-00 00:00:00', 0, '', '2010-07-10 23:40:18', 42, '', '', '{"robots":"","author":"","rights":""}', '', '0000-00-00 00:00:00', '0000-00-00 00:00:00');
+(17, 2, 'New Joomla! Extensions', 'new-joomla-extensions', 'http://feeds.joomla.org/JoomlaExtensions', NULL, 1, 5, 3600, 0, '0000-00-00 00:00:00', 4, 0, 1, 'en-GB', '{"show_feed_image":"","show_feed_description":"","show_item_description":"","feed_character_count":"0"}', '0000-00-00 00:00:00', 0, '', '2010-08-23 02:49:21', 42, '', '', '{"robots":"","author":"","rights":""}', '', '0000-00-00 00:00:00', '0000-00-00 00:00:00'),
+(17, 3, 'Joomla! Security News', 'joomla-security-news', 'http://feeds.joomla.org/JoomlaSecurityNews', NULL, 1, 5, 3600, 0, '0000-00-00 00:00:00', 2, 0, 1, 'en-GB', '{"show_feed_image":"","show_feed_description":"","show_item_description":"","feed_character_count":"0"}', '0000-00-00 00:00:00', 0, '', '2010-08-23 02:49:21', 42, '', '', '{"robots":"","author":"","rights":""}', '', '0000-00-00 00:00:00', '0000-00-00 00:00:00'),
+(17, 4, 'Joomla! Connect', 'joomla-connect', 'http://feeds.joomla.org/JoomlaConnect', NULL, 1, 5, 3600, 0, '0000-00-00 00:00:00', 3, 0, 1, 'en-GB', '{"show_feed_image":"","show_feed_description":"","show_item_description":"","feed_character_count":"0"}', '0000-00-00 00:00:00', 0, '', '2010-08-23 02:49:21', 42, '', '', '{"robots":"","author":"","rights":""}', '', '0000-00-00 00:00:00', '0000-00-00 00:00:00');

--
-- Dumping data for table `#__template_styles`

Modified: development/branches/jcamp/language/en-GB/en-GB.com_contact.ini
===================================================================
--- development/branches/jcamp/language/en-GB/en-GB.com_contact.ini 2010-08-31 19:21:09 UTC (rev 18740)
+++ development/branches/jcamp/language/en-GB/en-GB.com_contact.ini 2010-08-31 19:24:28 UTC (rev 18741)
@@ -7,9 +7,9 @@
COM_CONTACT_ADDRESS="Address"
COM_CONTACT_ARTICLES_HEADING="Contact's articles"
COM_CONTACT_CONTACT_EMAIL_A_COPY="Send copy to yourself"
-COM_CONTACT_CONTACT_EMAIL_ADDRESS="E-mail"
+COM_CONTACT_CONTACT_EMAIL_ADDRESS="Email"
COM_CONTACT_CONTACT_EMAIL_NAME="Name"
-COM_CONTACT_ENQUIRY_TEXT="This is an enquiry e-mail via %s from:"
+COM_CONTACT_ENQUIRY_TEXT="This is an enquiry email via %s from:"
COM_CONTACT_CONTACT_ENTER_MESSAGE="Message"
COM_CONTACT_CONTACT_ENTER_VALID_EMAIL="Please enter a valid email address."
COM_CONTACT_CONTACT_MESSAGE_SUBJECT="Subject"
@@ -22,9 +22,9 @@
COM_CONTACT_DEFAULT_PAGE_TITLE="Contacts"
COM_CONTACT_DETAILS="Contact"
COM_CONTACT_DOWNLOAD_INFORMATION_AS="Download information as:"
-COM_CONTACT_EMAIL_BANNEDTEXT="The %s of your e-mail contains banned text."
+COM_CONTACT_EMAIL_BANNEDTEXT="The %s of your email contains banned text."
COM_CONTACT_EMAIL_FORM="Contact Form"
-COM_CONTACT_EMAIL_THANKS="Thank you for your e-mail."
+COM_CONTACT_EMAIL_THANKS="Thank you for your email."
COM_CONTACT_ERROR_CONTACT_NOT_FOUND="Contact not found"
COM_CONTACT_FAX="Fax"
COM_CONTACT_FORM_NC="Please make sure the form is complete and valid."
@@ -34,7 +34,7 @@
COM_CONTACT_MOBILE="Mobile"
COM_CONTACT_NO_ARTICLES="No articles to display"
COM_CONTACT_NO_CONTACTS="There are no Contacts to display"
-COM_CONTACT_NOT_MORE_THAN_ONE_EMAIL_ADDRESS="You cannot enter more than one e-mail address."
+COM_CONTACT_NOT_MORE_THAN_ONE_EMAIL_ADDRESS="You cannot enter more than one email address."
COM_CONTACT_OTHER_INFORMATION="Other information"
COM_CONTACT_POSITION="Position"
COM_CONTACT_PROFILE="Profile"

Modified: development/branches/jcamp/language/en-GB/en-GB.com_content.ini
===================================================================
--- development/branches/jcamp/language/en-GB/en-GB.com_content.ini 2010-08-31 19:21:09 UTC (rev 18740)
+++ development/branches/jcamp/language/en-GB/en-GB.com_content.ini 2010-08-31 19:24:28 UTC (rev 18741)
@@ -9,6 +9,7 @@
COM_CONTENT_ARTICLE_SAVE_SUCCESS="Article successfully saved"
COM_CONTENT_AUTHOR_FILTER_LABEL="Author Filter"
COM_CONTENT_CATEGORY="Category: %s"
+COM_CONTENT_CREATE_ARTICLE="Submit new article"
COM_CONTENT_CREATED_DATE="Created Date"
COM_CONTENT_CREATED_DATE_ON="Created on %s"
COM_CONTENT_EDIT_ITEM="Edit Article"

Modified: development/branches/jcamp/language/en-GB/en-GB.com_mailto.ini
===================================================================
--- development/branches/jcamp/language/en-GB/en-GB.com_mailto.ini 2010-08-31 19:21:09 UTC (rev 18740)
+++ development/branches/jcamp/language/en-GB/en-GB.com_mailto.ini 2010-08-31 19:24:28 UTC (rev 18741)
@@ -7,15 +7,15 @@
COM_MAILTO="Mailto"
COM_MAILTO_CANCEL="Cancel"
COM_MAILTO_CLOSE_WINDOW="Close Window"
-COM_MAILTO_EMAIL_ERR_NOINFO="Please provide a valid e-mail address."
-COM_MAILTO_EMAIL_INVALID="The address '%s' does not appear to be a valid e-mail address."
-COM_MAILTO_EMAIL_MSG="This is an e-mail from (%s) sent by %s (%s). You may also find the following link interesting: %s"
-COM_MAILTO_EMAIL_NOT_SENT="E-mail could not be sent."
-COM_MAILTO_EMAIL_SENT="E-mail was sent successfully."
-COM_MAILTO_EMAIL_TO="E-mail to"
-COM_MAILTO_EMAIL_TO_A_FRIEND="E-mail this link to a friend."
+COM_MAILTO_EMAIL_ERR_NOINFO="Please provide a valid email address."
+COM_MAILTO_EMAIL_INVALID="The address '%s' does not appear to be a valid email address."
+COM_MAILTO_EMAIL_MSG="This is an email from (%s) sent by %s (%s). You may also find the following link interesting: %s"
+COM_MAILTO_EMAIL_NOT_SENT="email could not be sent."
+COM_MAILTO_EMAIL_SENT="Email was sent successfully."
+COM_MAILTO_EMAIL_TO="Email to"
+COM_MAILTO_EMAIL_TO_A_FRIEND="email this link to a friend."
COM_MAILTO_SEND="Send"
COM_MAILTO_SENDER="Sender"
COM_MAILTO_SENT_BY="Item sent by"
COM_MAILTO_SUBJECT="Subject"
-COM_MAILTO_YOUR_EMAIL="Your E-mail"
+COM_MAILTO_YOUR_EMAIL="Your Email"

Modified: development/branches/jcamp/language/en-GB/en-GB.com_newsfeeds.ini
===================================================================
--- development/branches/jcamp/language/en-GB/en-GB.com_newsfeeds.ini 2010-08-31 19:21:09 UTC (rev 18740)
+++ development/branches/jcamp/language/en-GB/en-GB.com_newsfeeds.ini 2010-08-31 19:24:28 UTC (rev 18741)
@@ -5,6 +5,7 @@
; Note : All ini files need to be saved as UTF-8 - No BOM

COM_NEWSFEEDS_DEFAULT_PAGE_TITLE="News Feeds"
+COM_NEWSFEEDS_ERROR_FEED_NOT_FOUND="Error. Feed not found."
COM_NEWSFEEDS_ERRORS_FEED_NOT_RETRIEVED="Error. Feed could not be retrieved."
COM_NEWSFEEDS_FEED_LINK="Feed Link"
COM_NEWSFEEDS_FEED_NAME="Feed Name"

Modified: development/branches/jcamp/language/en-GB/en-GB.com_users.ini
===================================================================
--- development/branches/jcamp/language/en-GB/en-GB.com_users.ini 2010-08-31 19:21:09 UTC (rev 18740)
+++ development/branches/jcamp/language/en-GB/en-GB.com_users.ini 2010-08-31 19:24:28 UTC (rev 18741)
@@ -9,47 +9,49 @@
COM_USERS_DESIRED_USERNAME="Enter your desired user name"
COM_USERS_EDIT_PROFILE="Edit Profile"
COM_USERS_EMAIL_ACCOUNT_DETAILS="Account Details for %s at %s"
-COM_USERS_EMAIL_ACTIVATE_WITH_ADMIN_ACTIVATION_BODY="Hello administrator,\n\nA new user has registered at %s.\nThe user has verified his email, and requests that you approve his account.\nThis e-mail contains their details:\n\n Name : %s \n E-mail: %s \n Username: %s \n\nYou can activate the user by clicking on the link below:\n %s \n"
+COM_USERS_EMAIL_ACTIVATE_WITH_ADMIN_ACTIVATION_BODY="Hello administrator,\n\nA new user has registered at %s.\nThe user has verified his email, and requests that you approve his account.\nThis email contains their details:\n\n Name : %s \n email: %s \n Username: %s \n\nYou can activate the user by clicking on the link below:\n %s \n"
COM_USERS_EMAIL_ACTIVATE_WITH_ADMIN_ACTIVATION_SUBJECT="Registration approval required for account of %s at %s"
COM_USERS_EMAIL_ACTIVATED_BY_ADMIN_ACTIVATION_BODY="Hello %s,\n\nYour account has been activated by an administrator. You can now login at %s using the username %s and the password you chose while registering."
COM_USERS_EMAIL_ACTIVATED_BY_ADMIN_ACTIVATION_SUBJECT="Account activated for %s at %s"
-COM_USERS_EMAIL_PASSWORD_RESET_BODY="Hello,\n\na request has been made to reset your %s account password. To reset your password, you will need to submit this verification code in order to verify that the request was legitimate.\n\nThe verification code is %s .\n\nClick on the URL below to enter the verification code and proceed with resetting your password.\n\n %s \n\nThank you."
+COM_USERS_EMAIL_PASSWORD_RESET_BODY="Hello,\n\na request has been made to reset your %s account password. To reset your password, you will need to submit this verification code in order to verify that the request was legitimate.\n\nThe verification code is %s\n\nClick on the URL below to enter the verification code and proceed with resetting your password.\n\n %s \n\nThank you."
COM_USERS_EMAIL_PASSWORD_RESET_SUBJECT="Your %s password reset request"
COM_USERS_EMAIL_REGISTERED_BODY="Hello %s,\n\nThank you for registering at %s.\n\nYou may now log in to %s using the username and password you registered with."
COM_USERS_EMAIL_REGISTERED_WITH_ACTIVATION_BODY="Hello %s,\n\nThank you for registering at %s. Your account is created and must be activated before you can use it.\nTo activate the account click on the following link or copy-paste it in your browser:\n%s \n\nAfter activation you may login to %s using the following username and password:\n\nUsername: %s\nPassword: %s"
COM_USERS_EMAIL_REGISTERED_WITH_ADMIN_ACTIVATION_BODY="Hello %s,\n\nThank you for registering at %s. Your account is created and must be verified before you can use it.\nTo verify the account click on the following link or copy-paste it in your browser:\n %s \n\nAfter verification an administrator will be notified to activate your account. You'll receive a confirmation when it's done.\nOnce that account has been activated you may login to %s using the following username and password:\n\nUsername: %s\nPassword: %s"
COM_USERS_EMAIL_USERNAME_REMINDER_BODY="Hello,\n\nA username reminder has been requested for your %s account.\n\nYour username is %s.\n\nTo login to your account, click on the link below.\n\n%s \n\nThank you."
COM_USERS_EMAIL_USERNAME_REMINDER_SUBJECT="Your %s username"
-COM_USERS_FIELD_PASSWORD_RESET_DESC="Please enter the e-mail address associated with your User account.<br />A verification code will be sent to you. Once you have received the verification code, you will be able to choose a new password for your account."
-COM_USERS_FIELD_PASSWORD_RESET_LABEL="E-mail Address:"
-COM_USERS_FIELD_REMIND_EMAIL_DESC="Please enter the e-mail address associated with your User account.<br /> Your username will be e-mailed to the e-mail address on file."
-COM_USERS_FIELD_REMIND_EMAIL_LABEL="E-mail Address:"
+COM_USERS_FIELD_PASSWORD_RESET_DESC="Please enter the email address associated with your User account.<br />A verification code will be sent to you. Once you have received the verification code, you will be able to choose a new password for your account."
+COM_USERS_FIELD_PASSWORD_RESET_LABEL="email Address:"
+COM_USERS_FIELD_REMIND_EMAIL_DESC="Please enter the email address associated with your User account.<br /> Your username will be emailed to the email address on file."
+COM_USERS_FIELD_REMIND_EMAIL_LABEL="email Address:"
COM_USERS_FIELD_RESET_CONFIRM_TOKEN_DESC="Enter the password reset verification code you received by email."
-COM_USERS_FIELD_RESET_CONFIRM_TOKEN_LABEL="verification code:"
+COM_USERS_FIELD_RESET_CONFIRM_TOKEN_LABEL="Verification Code:"
+COM_USERS_FIELD_RESET_CONFIRM_USERNAME_DESC="Enter your username"
+COM_USERS_FIELD_RESET_CONFIRM_USERNAME_LABEL="Username:"
COM_USERS_FIELD_RESET_PASSWORD1_DESC="Enter your new password"
COM_USERS_FIELD_RESET_PASSWORD1_LABEL="Password:"
COM_USERS_FIELD_RESET_PASSWORD1_MESSAGE="The passwords you entered do not match. Please enter your desired password in the password field and confirm your entry by entering it in the confirm password field."
COM_USERS_FIELD_RESET_PASSWORD2_DESC="Confirm your new password"
COM_USERS_FIELD_RESET_PASSWORD2_LABEL="Confirm Password:"
COM_USERS_FIELD_RESET_PASSWORD2_MESSAGE="Password invalid"
-COM_USERS_INVALID_EMAIL="Invalid e-mail address"
+COM_USERS_INVALID_EMAIL="Invalid email address"
COM_USERS_LOGIN_REGISTER="Don't have an account?"
COM_USERS_LOGIN_REMIND="Forgot your username?"
COM_USERS_LOGIN_RESET="Forgot your password?"
COM_USERS_LOGIN_USERNAME_LABEL="User Name"
-COM_USERS_MAIL_FAILED="Failed sending e-mail."
+COM_USERS_MAIL_FAILED="Failed sending email."
COM_USERS_OPTIONAL="(optional)"
COM_USERS_OR="or"
COM_USERS_PROFILE="User Profile"
COM_USERS_PROFILE_CORE_LEGEND="Profile"
COM_USERS_PROFILE_CUSTOM_LEGEND="Custom Profile"
COM_USERS_PROFILE_DEFAULT_LABEL="Edit Your Profile"
-COM_USERS_PROFILE_EMAIL1_DESC="Enter your e-mail address"
-COM_USERS_PROFILE_EMAIL1_LABEL="E-mail Address:"
-COM_USERS_PROFILE_EMAIL1_MESSAGE="The e-mail address you entered is already in use or invalid. Please enter another e-mail address."
-COM_USERS_PROFILE_EMAIL2_DESC="Confirm your e-mail address"
-COM_USERS_PROFILE_EMAIL2_LABEL="Confirm E-mail Address:"
-COM_USERS_PROFILE_EMAIL2_MESSAGE="The e-mail addresses you entered do not match. Please enter your e-mail address in the e-mail address field and confirm your entry by entering it in the confirm e-mail field."
+COM_USERS_PROFILE_EMAIL1_DESC="Enter your email address"
+COM_USERS_PROFILE_EMAIL1_LABEL="email Address:"
+COM_USERS_PROFILE_EMAIL1_MESSAGE="The email address you entered is already in use or invalid. Please enter another email address."
+COM_USERS_PROFILE_EMAIL2_DESC="Confirm your email address"
+COM_USERS_PROFILE_EMAIL2_LABEL="Confirm email Address:"
+COM_USERS_PROFILE_EMAIL2_MESSAGE="The email addresses you entered do not match. Please enter your email address in the email address field and confirm your entry by entering it in the confirm email field."
COM_USERS_PROFILE_LAST_VISITED_DATE_LABEL="Last visited date"
COM_USERS_PROFILE_MY_PROFILE="My Profile"
COM_USERS_PROFILE_NAME_DESC="Enter your full name"
@@ -70,12 +72,12 @@
COM_USERS_PROFILE_VALUE_NOT_FOUND="No Information Entered"
COM_USERS_PROFILE_WELCOME="Welcome, %s"
COM_USERS_REGISTER_DEFAULT_LABEL="Create An Account"
-COM_USERS_REGISTER_EMAIL1_DESC="Enter your e-mail address"
-COM_USERS_REGISTER_EMAIL1_LABEL="E-mail Address:"
-COM_USERS_REGISTER_EMAIL1_MESSAGE="The e-mail address you entered is already in use or invalid. Please enter another e-mail address."
-COM_USERS_REGISTER_EMAIL2_DESC="Confirm your e-mail address"
-COM_USERS_REGISTER_EMAIL2_LABEL="Confirm E-mail Address:"
-COM_USERS_REGISTER_EMAIL2_MESSAGE="The e-mail addresses you entered do not match. Please enter your e-mail address in the e-mail address field and confirm your entry by entering it in the confirm e-mail field."
+COM_USERS_REGISTER_EMAIL1_DESC="Enter your email address"
+COM_USERS_REGISTER_EMAIL1_LABEL="email Address:"
+COM_USERS_REGISTER_EMAIL1_MESSAGE="The email address you entered is already in use or invalid. Please enter another email address."
+COM_USERS_REGISTER_EMAIL2_DESC="Confirm your email address"
+COM_USERS_REGISTER_EMAIL2_LABEL="Confirm email Address:"
+COM_USERS_REGISTER_EMAIL2_MESSAGE="The email addresses you entered do not match. Please enter your email address in the email address field and confirm your entry by entering it in the confirm email field."
COM_USERS_REGISTER_NAME_DESC="Enter your full name"
COM_USERS_REGISTER_NAME_LABEL="Name:"
COM_USERS_REGISTER_NAME_MESSAGE="The name you entered is not valid."
@@ -92,17 +94,17 @@
COM_USERS_REGISTRATION_ACTIVATION_SAVE_FAILED="Failed to save activation data: %s"
COM_USERS_REGISTRATION_ADMINACTIVATE_SUCCESS="The user's account has been successfully activated and the user has been notified about it."
COM_USERS_REGISTRATION_BIND_FAILED="Failed to bind registration data: %s"
-COM_USERS_REGISTRATION_COMPLETE_ACTIVATE="Your account has been created and an activation link has been sent to the e-mail address you entered. Note that you must activate the account by clicking on the activation link when you get the e-mail before you can login."
-COM_USERS_REGISTRATION_COMPLETE_VERIFY="Your account has been created and a verification link has been sent to the e-mail address you entered. Note that you must verify the account by clicking on the verification link when you get the e-mail and then an administrator will activate your account before you can login."
+COM_USERS_REGISTRATION_COMPLETE_ACTIVATE="Your account has been created and an activation link has been sent to the email address you entered. Note that you must activate the account by clicking on the activation link when you get the email before you can login."
+COM_USERS_REGISTRATION_COMPLETE_VERIFY="Your account has been created and a verification link has been sent to the email address you entered. Note that you must verify the account by clicking on the verification link when you get the email and then an administrator will activate your account before you can login."
COM_USERS_REGISTRATION_DEFAULT_LABEL="User Registration"
COM_USERS_REGISTRATION_SAVE_FAILED="Registration failed: %s"
COM_USERS_REGISTRATION_SAVE_SUCCESS="Thank you for registering. You may now log in using the username and password you registered with."
-COM_USERS_REGISTRATION_SEND_MAIL_FAILED="An error was encountered while sending the registration e-mail."
+COM_USERS_REGISTRATION_SEND_MAIL_FAILED="An error was encountered while sending the registration email."
COM_USERS_REGISTRATION_VERIFY_SUCCESS="Your email has been verified. Once an administrator approves your account, you will be notified by email, and you can login to the site."
COM_USERS_REMIND="Reminder"
-COM_USERS_REMIND_DEFAULT_LABEL="Please enter the e-mail address associated with your User account. Your username will be e-mailed to the e-mail address on file."
-COM_USERS_REMIND_EMAIL_LABEL="Your E-mail"
-COM_USERS_REMIND_REQUEST_FAILED="Reminder failed. Make sure you entered a valid e-mail in the field."
+COM_USERS_REMIND_DEFAULT_LABEL="Please enter the email address associated with your User account. Your username will be emailed to the email address on file."
+COM_USERS_REMIND_EMAIL_LABEL="Your email"
+COM_USERS_REMIND_REQUEST_FAILED="Reminder failed. Make sure you entered a valid email in the field."
COM_USERS_REMIND_REQUEST_SUCCESS="Reminder successfully sent. Please check your mail."
COM_USERS_RESET_COMPLETE_ERROR="Error completing password reset."
COM_USERS_RESET_COMPLETE_FAILED="Completing reset password failed: %s"
@@ -110,10 +112,10 @@
COM_USERS_RESET_COMPLETE_SUCCESS="Reset password successful. You may now login to the site."
COM_USERS_RESET_CONFIRM_ERROR="Error while confirming the password."
COM_USERS_RESET_CONFIRM_FAILED="Your password reset confirmation failed because the verification code was invalid. %s"
-COM_USERS_RESET_CONFIRM_LABEL="An e-mail has been sent to your e-mail address. The e-mail contains a verification code, please paste the verification code in the field below to prove that you are the owner of this account."
+COM_USERS_RESET_CONFIRM_LABEL="An email has been sent to your email address. The email contains a verification code, please paste the verification code in the field below to prove that you are the owner of this account."
COM_USERS_RESET_REQUEST_ERROR="Error requesting password reset."
COM_USERS_RESET_REQUEST_FAILED="Reset passsword failed: %s"
-COM_USERS_RESET_REQUEST_LABEL="Please enter the e-mail address for your account. A verification code will be sent to you. Once you have received the verification code, you will be able to choose a new password for your account."
+COM_USERS_RESET_REQUEST_LABEL="Please enter the email address for your account. A verification code will be sent to you. Once you have received the verification code, you will be able to choose a new password for your account."
COM_USERS_USER_NOT_FOUND="User not found"
COM_USERS_USER_BLOCKED="This user is blocked. If this is an error, please contact an administrator."
COM_USERS_USER_SAVE_FAILED="Failed to save user: %s"

Modified: development/branches/jcamp/language/en-GB/en-GB.com_weblinks.ini
===================================================================
--- development/branches/jcamp/language/en-GB/en-GB.com_weblinks.ini 2010-08-31 19:21:09 UTC (rev 18740)
+++ development/branches/jcamp/language/en-GB/en-GB.com_weblinks.ini 2010-08-31 19:24:28 UTC (rev 18741)
@@ -4,6 +4,8 @@
; License GNU General Public License version 2 or later; see LICENSE.txt, see LICENSE.php
; Note : All ini files need to be saved as UTF-8 - No BOM

+COM_WEBLINK_SUBMIT_SAVE_SUCCESS="Web link successfully submitted"
+COM_WEBLINKS_EDIT="Edit Web link"
COM_WEBLINKS_ERROR_CATEGORY_NOT_FOUND="Web link category not found"
COM_WEBLINKS_ERROR_WEBLINK_NOT_FOUND="Web link not found"
COM_WEBLINKS_ERROR_WEBLINK_URL_INVALID="Invalid Web link URL"
@@ -15,9 +17,8 @@
COM_WEBLINKS_FORM_EDIT_WEBLINK="Submit a Web link"
COM_WEBLINKS_GRID_TITLE="Title"
COM_WEBLINKS_LINK="Web Link"
+COM_WEBLINKS_NAME="Name"
COM_WEBLINKS_NO_WEBLINKS="There are no Web links in this category"
-COM_WEBLINKS_NAME="Name"
COM_WEBLINKS_NUM="# of links:"
COM_WEBLINKS_WEB_LINKS="Web links"
-COM_WEBLINK_SUBMIT_SAVE_SUCCESS="Web link successfully submitted"
JGLOBAL_NEWITEMSLAST_DESC="New Web links default to the last position. Ordering can be changed after this Web link has been saved."

Modified: development/branches/jcamp/language/en-GB/en-GB.ini
===================================================================
--- development/branches/jcamp/language/en-GB/en-GB.ini 2010-08-31 19:21:09 UTC (rev 18740)
+++ development/branches/jcamp/language/en-GB/en-GB.ini 2010-08-31 19:24:28 UTC (rev 18741)
@@ -11,6 +11,11 @@
; Keep this string on top
JERROR_PARSING_LANGUAGE_FILE="&#160;: error(s) in line(s) %s"

+
+ERROR="Error"
+MESSAGE="Message"
+NOTICE="Notice"
+
J1="1"
J2="2"
J3="3"
@@ -59,8 +64,8 @@
JSHOW="Show"
JSITE="Site"
JSUBMIT="Submit"
+JTRASH="Trash"
JTRASHED="Trashed"
-JTRASH="Trash"
JTRUE="True"
JUNPUBLISHED="Unpublished"
JYEAR="Year"
@@ -108,8 +113,8 @@
JFIELD_PUBLISHED_DESC="Set publication state"
JFIELD_TITLE_DESC="Title for the article"

+JGLOBAL_ARTICLE_MUST_HAVE_TEXT="Article must have some text"
JGLOBAL_ARTICLES="Articles"
-JGLOBAL_ARTICLE_MUST_HAVE_TEXT="Article must have some text"
JGLOBAL_AUTH_ACCESS_DENIED="Access Denied"
JGLOBAL_AUTH_ACCESS_GRANTED="Access Granted"
JGLOBAL_AUTH_BIND_FAILED="Failed binding to LDAP server"
@@ -118,6 +123,7 @@
JGLOBAL_AUTH_ERROR="Authentication error : could not connect to the openid server"
JGLOBAL_AUTH_FAIL="Authentication failed"
JGLOBAL_AUTH_FAILED="Failed to authenticate: %s"
+JGLOBAL_AUTH_INCORRECT="Incorrect username/password"
JGLOBAL_AUTH_INVALID_PASS="Invalid password"
JGLOBAL_AUTH_NO_BIND="Unable to bind to LDAP"
JGLOBAL_AUTH_NO_CONNECT="Unable to connect to LDAP server"
@@ -125,7 +131,6 @@
JGLOBAL_AUTH_NO_USER="User does not exist"
JGLOBAL_AUTH_NOT_CREATE_DIR="Could not create the FileStore directory %s. Please check the effective permissions."
JGLOBAL_AUTH_PASS_BLANK="LADP can not have blank password"
-JGLOBAL_AUTH_INCORRECT="Incorrect username/password"
JGLOBAL_AUTH_UNKNOWN_ACCESS_DENIED="Result Unknown. Access Denied"
JGLOBAL_AUTH_USER_BLACKLISTED="User is blacklisted"
JGLOBAL_AUTH_USER_NOT_FOUND="Unable to find user"
@@ -139,10 +144,12 @@
JGLOBAL_EMAIL="Email"
JGLOBAL_FIELD_CREATED_BY_ALIAS_DESC="Uses another name than the author's for display"
JGLOBAL_FIELD_CREATED_BY_ALIAS_LABEL="Author's Alias"
-JGLOBAL_FIELD_PUBLISH_DOWN_DESC="An optional date to stop publishing"
-JGLOBAL_FIELD_PUBLISH_DOWN_LABEL="Publish Finish"
-JGLOBAL_FIELD_PUBLISH_UP_DESC="An optional date to start publishing"
-JGLOBAL_FIELD_PUBLISH_UP_LABEL="Publish Start"
+JGLOBAL_FIELD_FEATURED_DESC="Assign the article to the featured blog layout"
+JGLOBAL_FIELD_FEATURED_LABEL="Featured"
+JGLOBAL_FIELD_PUBLISH_DOWN_DESC="An optional date to Stop Publishing"
+JGLOBAL_FIELD_PUBLISH_DOWN_LABEL="Finish Publishing"
+JGLOBAL_FIELD_PUBLISH_UP_DESC="An optional date to Start Publishing"
+JGLOBAL_FIELD_PUBLISH_UP_LABEL="Start Publishing"
JGLOBAL_FILTER_BUTTON="Filter"
JGLOBAL_FILTER_LABEL="Filter"
JGLOBAL_FULL_TEXT="Full Text"
@@ -167,6 +174,10 @@
JGLOBAL_VALIDATION_FORM_FAILED="Invalid form"
JGLOBAL_YOU_MUST_LOGIN_FIRST="Please login first"

+JGRID_HEADING_ACCESS="Access"
+JGRID_HEADING_CATEGORY="Category"
+JGRID_HEADING_ID="ID"
+
JLIB_APPLICATION_ERROR_ACCESS_FORBIDDEN="Access forbidden"
JLIB_APPLICATION_ERROR_CHECKIN_FAILED="Check-in failed with the following error: %s"
JLIB_APPLICATION_ERROR_CHECKIN_USER_MISMATCH="The user checking in does not match the user who checked out the item."
@@ -175,10 +186,10 @@
JLIB_APPLICATION_ERROR_INVALID_CONTROLLER="Invalid controller of type %s."
JLIB_APPLICATION_ERROR_INVALID_CONTROLLER_CLASS="Invalid controller class named %s."
JLIB_APPLICATION_ERROR_LAYOUTFILE_NOT_FOUND="Layout %s not found"
+JLIB_APPLICATION_ERROR_SAVE_FAILED="Save failed with the following error: %s"
JLIB_APPLICATION_ERROR_VIEW_NOT_FOUND="View not found [name, type, prefix]: %1$s, %2$s, %3$s"
-JLIB_APPLICATION_ERROR_SAVE_FAILED="Save failed with the following error: %s"
JLIB_DATABASE_ERROR_CONNECT_DATABASE="Unable to connect to the Database: %s"
-JLIB_DATABASE_ERROR_EMAIL_INUSE="This e-mail is already registered. If you forgot your password, click on the <strong>Lost your Password</strong> link and a new password will be sent to you."
+JLIB_DATABASE_ERROR_EMAIL_INUSE="This email is already registered. If you forgot your password, click on the <strong>Lost your Password</strong> link and a new password will be sent to you."
JLIB_DATABASE_ERROR_EMPTY_ROW_RETURNED="The database row is empty."
JLIB_DATABASE_ERROR_FUNCTION_FAILED="DB function failed with error number %s <br /><font color="_QQ_"red"_QQ_">%s</font>"
JLIB_DATABASE_ERROR_LOAD_DATABASE_DRIVER="Unable to load Database Driver: %s"
@@ -187,11 +198,10 @@
JLIB_DATABASE_ERROR_SETLASTVISIT="Error JUser: :setLastVisit cannot call method statically with no ID"
JLIB_DATABASE_ERROR_USERNAME_INUSE="This username is already in use. Please try another."
JLIB_DATABASE_ERROR_VALID_AZ09="Please enter a valid username. No spaces, at least %d characters and must <strong>not</strong> contain the following characters: < > \ "_QQ_" ' &#37; ; ( ) &"
-JLIB_DATABASE_ERROR_VALID_MAIL="Please enter a valid e-mail address."
+JLIB_DATABASE_ERROR_VALID_MAIL="Please enter a valid email address."
JLIB_DATABASE_FUNCTION_NOERROR="DB function reports no errors"
JLIB_ENVIRONMENT_SESSION_EXPIRED="Your session has expired. Please log in again."
JLIB_ERROR_INFINITE_LOOP="Infinite loop detected in JError"
-JLIB_FORM_ERROR_NO_DATA="No data"
JLIB_FILESYSTEM_CANNOT_FIND_SOURCE_FILE="Cannot find source file"
JLIB_FILESYSTEM_DELETE_FAILED="Failed deleting %s"
JLIB_FILESYSTEM_ERROR_COPY_FAILED="Copy failed"
@@ -200,6 +210,7 @@
JLIB_FILESYSTEM_ERROR_RENAME_FILE="Rename failed"
JLIB_FILESYSTEM_ERROR_WARNFS_ERR01="Warning: Failed to change file permissions!"
JLIB_FILESYSTEM_ERROR_WARNFS_ERR02="Warning: Failed to move file!"
+JLIB_FORM_ERROR_NO_DATA="No data"
JLIB_FORM_ERROR_XML_FILE_DID_NOT_LOAD="XML file did not load"
JLIB_FORM_VALIDATE_FIELD_REQUIRED="Field required: %s"
JLIB_HTML_BEHAVIOR_ABOUT_THE_CALENDAR="About the Calendar"
@@ -219,8 +230,8 @@
JLIB_HTML_BEHAVIOR_SHIFT_CLICK_OR_DRAG_TO_CHANGE_VALUE="(Shift-)Click or Drag to change the value."
JLIB_HTML_BEHAVIOR_TIME="Time:"
JLIB_HTML_BEHAVIOR_TODAY="Today"
+JLIB_HTML_BEHAVIOR_UPLOADER_CURRENT_TITLE="Upload Files"
JLIB_HTML_BEHAVIOR_UPLOADER_PROGRESS_OVERALL="Overall Progress {total}"
-JLIB_HTML_BEHAVIOR_UPLOADER_CURRENT_TITLE="Upload Files"
JLIB_HTML_BEHAVIOR_WK="wk"
JLIB_HTML_BEHAVIOR_YEAR_SELECT="- Use the « and » buttons to select year\n"
JLIB_HTML_CALENDAR="Calendar"
@@ -247,8 +258,15 @@
JLIB_USER_ERROR_PASSWORD_NOT_MATCH="Password do not match. Please re-enter password."
JLIB_UTIL_ERROR_LOADING_FEED_DATA="Error loading feed data"

+JOPTION_SELECT_ACCESS="- Select Access -"
+JOPTION_SELECT_CATEGORY="- Select Category -"
+JOPTION_SELECT_PUBLISHED="- Select State -"
JOPTION_USE_DEFAULT="- Use Default -"

+JSEARCH_FILTER_CLEAR="Clear"
+JSEARCH_FILTER_LABEL="Filter"
+JSEARCH_FILTER_SUBMIT="Search"
+
DATE_FORMAT_LC="l, d F Y"
DATE_FORMAT_LC1="l, d F Y"
DATE_FORMAT_LC2="l, d F Y H:i"
@@ -342,7 +360,7 @@
UTC__13_00__TONGA="(UTC +13:00) Tonga"
UTC__14_00__KIRIBATI="(UTC +14:00) Kiribati"

-PHPMAILER_PROVIDE_ADDRESS="You must provide at least one recipient e-mail address."
+PHPMAILER_PROVIDE_ADDRESS="You must provide at least one recipient email address."
PHPMAILER_MAILER_IS_NOT_SUPPORTED=" Mailer is not supported."
PHPMAILER_EXECUTE="Could not execute:"
PHPMAILER_INSTANTIATE="Could not instantiate mail function."
@@ -356,15 +374,3 @@
PHPMAILER_ENCODING="Unknown encoding:"
PHPMAILER_SIGNING_ERROR="Signing error:"

-MESSAGE="Message"
-NOTICE="Notice"
-ERROR="Error"
-JSEARCH_FILTER_LABEL="Filter"
-JSEARCH_FILTER_CLEAR="Clear"
-JSEARCH_FILTER_SUBMIT="Search"
-JOPTION_SELECT_ACCESS="- Select Access -"
-JOPTION_SELECT_PUBLISHED="- Select State -"
-JOPTION_SELECT_CATEGORY="- Select Category -"
-JGRID_HEADING_ACCESS="Access"
-JGRID_HEADING_CATEGORY="Category"
-JGRID_HEADING_ID="ID"
\ No newline at end of file

Modified: development/branches/jcamp/language/en-GB/en-GB.localise.php
===================================================================
--- development/branches/jcamp/language/en-GB/en-GB.localise.php 2010-08-31 19:21:09 UTC (rev 18740)
+++ development/branches/jcamp/language/en-GB/en-GB.localise.php 2010-08-31 19:24:28 UTC (rev 18741)
@@ -19,7 +19,7 @@
* @return array An array of potential suffixes.
* @since 1.6
*/
- public static function getPluralSuffices($count) {
+ public static function getPluralSuffixes($count) {
if ($count == 0) {
$return = array('0');
}

Modified: development/branches/jcamp/language/xx-XX/xx-XX.com_contact.ini
===================================================================
--- development/branches/jcamp/language/xx-XX/xx-XX.com_contact.ini 2010-08-31 19:21:09 UTC (rev 18740)
+++ development/branches/jcamp/language/xx-XX/xx-XX.com_contact.ini 2010-08-31 19:24:28 UTC (rev 18741)
@@ -7,9 +7,9 @@
COM_CONTACT_ADDRESS="Address"
COM_CONTACT_ARTICLES_HEADING="Contact's articles"
COM_CONTACT_CONTACT_EMAIL_A_COPY="Send copy to yourself"
-COM_CONTACT_CONTACT_EMAIL_ADDRESS="E-mail"
+COM_CONTACT_CONTACT_EMAIL_ADDRESS="Email"
COM_CONTACT_CONTACT_EMAIL_NAME="Name"
-COM_CONTACT_ENQUIRY_TEXT="This is an enquiry e-mail via %s from:"
+COM_CONTACT_ENQUIRY_TEXT="This is an enquiry email via %s from:"
COM_CONTACT_CONTACT_ENTER_MESSAGE="Message"
COM_CONTACT_CONTACT_ENTER_VALID_EMAIL="Please enter a valid email address."
COM_CONTACT_CONTACT_MESSAGE_SUBJECT="Subject"
@@ -22,9 +22,9 @@
COM_CONTACT_DEFAULT_PAGE_TITLE="Contacts"
COM_CONTACT_DETAILS="Contact"
COM_CONTACT_DOWNLOAD_INFORMATION_AS="Download information as:"
-COM_CONTACT_EMAIL_BANNEDTEXT="The %s of your e-mail contains banned text."
+COM_CONTACT_EMAIL_BANNEDTEXT="The %s of your email contains banned text."
COM_CONTACT_EMAIL_FORM="Contact Form"
-COM_CONTACT_EMAIL_THANKS="Thank you for your e-mail."
+COM_CONTACT_EMAIL_THANKS="Thank you for your email."
COM_CONTACT_ERROR_CONTACT_NOT_FOUND="Contact not found"
COM_CONTACT_FAX="Fax"
COM_CONTACT_FORM_NC="Please make sure the form is complete and valid."
@@ -33,7 +33,7 @@
COM_CONTACT_MOBILE="Mobile"
COM_CONTACT_NO_ARTICLES="No articles to display"
COM_CONTACT_NO_CONTACTS="There are no Contacts to display"
-COM_CONTACT_NOT_MORE_THAN_ONE_EMAIL_ADDRESS="You cannot enter more than one e-mail address."
+COM_CONTACT_NOT_MORE_THAN_ONE_EMAIL_ADDRESS="You cannot enter more than one email address."
COM_CONTACT_OTHER_INFORMATION="Other information"
COM_CONTACT_POSITION="Position"
COM_CONTACT_PROFILE="Profile"

Modified: development/branches/jcamp/language/xx-XX/xx-XX.com_content.ini
===================================================================
--- development/branches/jcamp/language/xx-XX/xx-XX.com_content.ini 2010-08-31 19:21:09 UTC (rev 18740)
+++ development/branches/jcamp/language/xx-XX/xx-XX.com_content.ini 2010-08-31 19:24:28 UTC (rev 18741)
@@ -9,6 +9,7 @@
COM_CONTENT_ARTICLE_SAVE_SUCCESS="Article successfully saved"
COM_CONTENT_AUTHOR_FILTER_LABEL="Author Filter"
COM_CONTENT_CATEGORY="Category: %s"
+COM_CONTENT_CREATE_ARTICLE="Submit new article"
COM_CONTENT_CREATED_DATE="Created Date"
COM_CONTENT_CREATED_DATE_ON="Created on %s"
COM_CONTENT_EDIT_ITEM="Edit Article"

Modified: development/branches/jcamp/language/xx-XX/xx-XX.com_mailto.ini
===================================================================
--- development/branches/jcamp/language/xx-XX/xx-XX.com_mailto.ini 2010-08-31 19:21:09 UTC (rev 18740)
+++ development/branches/jcamp/language/xx-XX/xx-XX.com_mailto.ini 2010-08-31 19:24:28 UTC (rev 18741)
@@ -7,15 +7,15 @@
COM_MAILTO="Mailto"
COM_MAILTO_CANCEL="Cancel"
COM_MAILTO_CLOSE_WINDOW="Close Window"
-COM_MAILTO_EMAIL_ERR_NOINFO="Please provide a valid e-mail address."
-COM_MAILTO_EMAIL_INVALID="The address '%s' does not appear to be a valid e-mail address."
-COM_MAILTO_EMAIL_MSG="This is an e-mail from (%s) sent by %s (%s). You may also find the following link interesting: %s"
-COM_MAILTO_EMAIL_NOT_SENT="E-mail could not be sent."
-COM_MAILTO_EMAIL_SENT="E-mail was sent successfully."
-COM_MAILTO_EMAIL_TO="E-mail to"
-COM_MAILTO_EMAIL_TO_A_FRIEND="E-mail this link to a friend."
+COM_MAILTO_EMAIL_ERR_NOINFO="Please provide a valid email address."
+COM_MAILTO_EMAIL_INVALID="The address '%s' does not appear to be a valid email address."
+COM_MAILTO_EMAIL_MSG="This is an email from (%s) sent by %s (%s). You may also find the following link interesting: %s"
+COM_MAILTO_EMAIL_NOT_SENT="email could not be sent."
+COM_MAILTO_EMAIL_SENT="Email was sent successfully."
+COM_MAILTO_EMAIL_TO="Email to"
+COM_MAILTO_EMAIL_TO_A_FRIEND="email this link to a friend."
COM_MAILTO_SEND="Send"
COM_MAILTO_SENDER="Sender"
COM_MAILTO_SENT_BY="Item sent by"
COM_MAILTO_SUBJECT="Subject"
-COM_MAILTO_YOUR_EMAIL="Your E-mail"
+COM_MAILTO_YOUR_EMAIL="Your Email"

Modified: development/branches/jcamp/language/xx-XX/xx-XX.com_newsfeeds.ini
===================================================================
--- development/branches/jcamp/language/xx-XX/xx-XX.com_newsfeeds.ini 2010-08-31 19:21:09 UTC (rev 18740)
+++ development/branches/jcamp/language/xx-XX/xx-XX.com_newsfeeds.ini 2010-08-31 19:24:28 UTC (rev 18741)
@@ -5,6 +5,7 @@
; Note : All ini files need to be saved as UTF-8 - No BOM

COM_NEWSFEEDS_DEFAULT_PAGE_TITLE="News Feeds"
+COM_NEWSFEEDS_ERROR_FEED_NOT_FOUND="Error. Feed not found."
COM_NEWSFEEDS_ERRORS_FEED_NOT_RETRIEVED="Error. Feed could not be retrieved."
COM_NEWSFEEDS_FEED_LINK="Feed Link"
COM_NEWSFEEDS_FEED_NAME="Feed Name"

Modified: development/branches/jcamp/language/xx-XX/xx-XX.com_users.ini
===================================================================
--- development/branches/jcamp/language/xx-XX/xx-XX.com_users.ini 2010-08-31 19:21:09 UTC (rev 18740)
+++ development/branches/jcamp/language/xx-XX/xx-XX.com_users.ini 2010-08-31 19:24:28 UTC (rev 18741)
@@ -9,47 +9,49 @@
COM_USERS_DESIRED_USERNAME="Enter your desired user name"
COM_USERS_EDIT_PROFILE="Edit Profile"
COM_USERS_EMAIL_ACCOUNT_DETAILS="Account Details for %s at %s"
-COM_USERS_EMAIL_ACTIVATE_WITH_ADMIN_ACTIVATION_BODY="Hello administrator,\n\nA new user has registered at %s.\nThe user has verified his email, and requests that you approve his account.\nThis e-mail contains their details:\n\n Name : %s \n E-mail: %s \n Username: %s \n\nYou can activate the user by clicking on the link below:\n %s \n"
+COM_USERS_EMAIL_ACTIVATE_WITH_ADMIN_ACTIVATION_BODY="Hello administrator,\n\nA new user has registered at %s.\nThe user has verified his email, and requests that you approve his account.\nThis email contains their details:\n\n Name : %s \n email: %s \n Username: %s \n\nYou can activate the user by clicking on the link below:\n %s \n"
COM_USERS_EMAIL_ACTIVATE_WITH_ADMIN_ACTIVATION_SUBJECT="Registration approval required for account of %s at %s"
COM_USERS_EMAIL_ACTIVATED_BY_ADMIN_ACTIVATION_BODY="Hello %s,\n\nYour account has been activated by an administrator. You can now login at %s using the username %s and the password you chose while registering."
COM_USERS_EMAIL_ACTIVATED_BY_ADMIN_ACTIVATION_SUBJECT="Account activated for %s at %s"
-COM_USERS_EMAIL_PASSWORD_RESET_BODY="Hello,\n\na request has been made to reset your %s account password. To reset your password, you will need to submit this verification code in order to verify that the request was legitimate.\n\nThe verification code is %s .\n\nClick on the URL below to enter the verification code and proceed with resetting your password.\n\n %s \n\nThank you."
+COM_USERS_EMAIL_PASSWORD_RESET_BODY="Hello,\n\na request has been made to reset your %s account password. To reset your password, you will need to submit this verification code in order to verify that the request was legitimate.\n\nThe verification code is %s\n\nClick on the URL below to enter the verification code and proceed with resetting your password.\n\n %s \n\nThank you."
COM_USERS_EMAIL_PASSWORD_RESET_SUBJECT="Your %s password reset request"
COM_USERS_EMAIL_REGISTERED_BODY="Hello %s,\n\nThank you for registering at %s.\n\nYou may now log in to %s using the username and password you registered with."
COM_USERS_EMAIL_REGISTERED_WITH_ACTIVATION_BODY="Hello %s,\n\nThank you for registering at %s. Your account is created and must be activated before you can use it.\nTo activate the account click on the following link or copy-paste it in your browser:\n%s \n\nAfter activation you may login to %s using the following username and password:\n\nUsername: %s\nPassword: %s"
COM_USERS_EMAIL_REGISTERED_WITH_ADMIN_ACTIVATION_BODY="Hello %s,\n\nThank you for registering at %s. Your account is created and must be verified before you can use it.\nTo verify the account click on the following link or copy-paste it in your browser:\n %s \n\nAfter verification an administrator will be notified to activate your account. You'll receive a confirmation when it's done.\nOnce that account has been activated you may login to %s using the following username and password:\n\nUsername: %s\nPassword: %s"
COM_USERS_EMAIL_USERNAME_REMINDER_BODY="Hello,\n\nA username reminder has been requested for your %s account.\n\nYour username is %s.\n\nTo login to your account, click on the link below.\n\n%s \n\nThank you."
COM_USERS_EMAIL_USERNAME_REMINDER_SUBJECT="Your %s username"
-COM_USERS_FIELD_PASSWORD_RESET_DESC="Please enter the e-mail address associated with your User account.<br />A verification code will be sent to you. Once you have received the verification code, you will be able to choose a new password for your account."
-COM_USERS_FIELD_PASSWORD_RESET_LABEL="E-mail Address:"
-COM_USERS_FIELD_REMIND_EMAIL_DESC="Please enter the e-mail address associated with your User account.<br /> Your username will be e-mailed to the e-mail address on file."
-COM_USERS_FIELD_REMIND_EMAIL_LABEL="E-mail Address:"
+COM_USERS_FIELD_PASSWORD_RESET_DESC="Please enter the email address associated with your User account.<br />A verification code will be sent to you. Once you have received the verification code, you will be able to choose a new password for your account."
+COM_USERS_FIELD_PASSWORD_RESET_LABEL="email Address:"
+COM_USERS_FIELD_REMIND_EMAIL_DESC="Please enter the email address associated with your User account.<br /> Your username will be emailed to the email address on file."
+COM_USERS_FIELD_REMIND_EMAIL_LABEL="email Address:"
COM_USERS_FIELD_RESET_CONFIRM_TOKEN_DESC="Enter the password reset verification code you received by email."
-COM_USERS_FIELD_RESET_CONFIRM_TOKEN_LABEL="verification code:"
+COM_USERS_FIELD_RESET_CONFIRM_TOKEN_LABEL="Verification Code:"
+COM_USERS_FIELD_RESET_CONFIRM_USERNAME_DESC="Enter your username"
+COM_USERS_FIELD_RESET_CONFIRM_USERNAME_LABEL="Username:"
COM_USERS_FIELD_RESET_PASSWORD1_DESC="Enter your new password"
COM_USERS_FIELD_RESET_PASSWORD1_LABEL="Password:"
COM_USERS_FIELD_RESET_PASSWORD1_MESSAGE="The passwords you entered do not match. Please enter your desired password in the password field and confirm your entry by entering it in the confirm password field."
COM_USERS_FIELD_RESET_PASSWORD2_DESC="Confirm your new password"
COM_USERS_FIELD_RESET_PASSWORD2_LABEL="Confirm Password:"
COM_USERS_FIELD_RESET_PASSWORD2_MESSAGE="Password invalid"
-COM_USERS_INVALID_EMAIL="Invalid e-mail address"
+COM_USERS_INVALID_EMAIL="Invalid email address"
COM_USERS_LOGIN_REGISTER="Don't have an account?"
COM_USERS_LOGIN_REMIND="Forgot your username?"
COM_USERS_LOGIN_RESET="Forgot your password?"
COM_USERS_LOGIN_USERNAME_LABEL="User Name"
-COM_USERS_MAIL_FAILED="Failed sending e-mail."
+COM_USERS_MAIL_FAILED="Failed sending email."
COM_USERS_OPTIONAL="(optional)"
COM_USERS_OR="or"
COM_USERS_PROFILE="User Profile"
COM_USERS_PROFILE_CORE_LEGEND="Profile"
COM_USERS_PROFILE_CUSTOM_LEGEND="Custom Profile"
COM_USERS_PROFILE_DEFAULT_LABEL="Edit Your Profile"
-COM_USERS_PROFILE_EMAIL1_DESC="Enter your e-mail address"
-COM_USERS_PROFILE_EMAIL1_LABEL="E-mail Address:"
-COM_USERS_PROFILE_EMAIL1_MESSAGE="The e-mail address you entered is already in use or invalid. Please enter another e-mail address."
-COM_USERS_PROFILE_EMAIL2_DESC="Confirm your e-mail address"
-COM_USERS_PROFILE_EMAIL2_LABEL="Confirm E-mail Address:"
-COM_USERS_PROFILE_EMAIL2_MESSAGE="The e-mail addresses you entered do not match. Please enter your e-mail address in the e-mail address field and confirm your entry by entering it in the confirm e-mail field."
+COM_USERS_PROFILE_EMAIL1_DESC="Enter your email address"
+COM_USERS_PROFILE_EMAIL1_LABEL="email Address:"
+COM_USERS_PROFILE_EMAIL1_MESSAGE="The email address you entered is already in use or invalid. Please enter another email address."
+COM_USERS_PROFILE_EMAIL2_DESC="Confirm your email address"
+COM_USERS_PROFILE_EMAIL2_LABEL="Confirm email Address:"
+COM_USERS_PROFILE_EMAIL2_MESSAGE="The email addresses you entered do not match. Please enter your email address in the email address field and confirm your entry by entering it in the confirm email field."
COM_USERS_PROFILE_LAST_VISITED_DATE_LABEL="Last visited date"
COM_USERS_PROFILE_MY_PROFILE="My Profile"
COM_USERS_PROFILE_NAME_DESC="Enter your full name"
@@ -70,12 +72,12 @@
COM_USERS_PROFILE_VALUE_NOT_FOUND="No Information Entered"
COM_USERS_PROFILE_WELCOME="Welcome, %s"
COM_USERS_REGISTER_DEFAULT_LABEL="Create An Account"
-COM_USERS_REGISTER_EMAIL1_DESC="Enter your e-mail address"
-COM_USERS_REGISTER_EMAIL1_LABEL="E-mail Address:"
-COM_USERS_REGISTER_EMAIL1_MESSAGE="The e-mail address you entered is already in use or invalid. Please enter another e-mail address."
-COM_USERS_REGISTER_EMAIL2_DESC="Confirm your e-mail address"
-COM_USERS_REGISTER_EMAIL2_LABEL="Confirm E-mail Address:"
-COM_USERS_REGISTER_EMAIL2_MESSAGE="The e-mail addresses you entered do not match. Please enter your e-mail address in the e-mail address field and confirm your entry by entering it in the confirm e-mail field."
+COM_USERS_REGISTER_EMAIL1_DESC="Enter your email address"
+COM_USERS_REGISTER_EMAIL1_LABEL="email Address:"
+COM_USERS_REGISTER_EMAIL1_MESSAGE="The email address you entered is already in use or invalid. Please enter another email address."
+COM_USERS_REGISTER_EMAIL2_DESC="Confirm your email address"
+COM_USERS_REGISTER_EMAIL2_LABEL="Confirm email Address:"
+COM_USERS_REGISTER_EMAIL2_MESSAGE="The email addresses you entered do not match. Please enter your email address in the email address field and confirm your entry by entering it in the confirm email field."
COM_USERS_REGISTER_NAME_DESC="Enter your full name"
COM_USERS_REGISTER_NAME_LABEL="Name:"
COM_USERS_REGISTER_NAME_MESSAGE="The name you entered is not valid."
@@ -92,17 +94,17 @@
COM_USERS_REGISTRATION_ACTIVATION_SAVE_FAILED="Failed to save activation data: %s"
COM_USERS_REGISTRATION_ADMINACTIVATE_SUCCESS="The user's account has been successfully activated and the user has been notified about it."
COM_USERS_REGISTRATION_BIND_FAILED="Failed to bind registration data: %s"
-COM_USERS_REGISTRATION_COMPLETE_ACTIVATE="Your account has been created and an activation link has been sent to the e-mail address you entered. Note that you must activate the account by clicking on the activation link when you get the e-mail before you can login."
-COM_USERS_REGISTRATION_COMPLETE_VERIFY="Your account has been created and a verification link has been sent to the e-mail address you entered. Note that you must verify the account by clicking on the verification link when you get the e-mail and then an administrator will activate your account before you can login."
+COM_USERS_REGISTRATION_COMPLETE_ACTIVATE="Your account has been created and an activation link has been sent to the email address you entered. Note that you must activate the account by clicking on the activation link when you get the email before you can login."
+COM_USERS_REGISTRATION_COMPLETE_VERIFY="Your account has been created and a verification link has been sent to the email address you entered. Note that you must verify the account by clicking on the verification link when you get the email and then an administrator will activate your account before you can login."
COM_USERS_REGISTRATION_DEFAULT_LABEL="User Registration"
COM_USERS_REGISTRATION_SAVE_FAILED="Registration failed: %s"
COM_USERS_REGISTRATION_SAVE_SUCCESS="Thank you for registering. You may now log in using the username and password you registered with."
-COM_USERS_REGISTRATION_SEND_MAIL_FAILED="An error was encountered while sending the registration e-mail."
+COM_USERS_REGISTRATION_SEND_MAIL_FAILED="An error was encountered while sending the registration email."
COM_USERS_REGISTRATION_VERIFY_SUCCESS="Your email has been verified. Once an administrator approves your account, you will be notified by email, and you can login to the site."
COM_USERS_REMIND="Reminder"
-COM_USERS_REMIND_DEFAULT_LABEL="Please enter the e-mail address associated with your User account. Your username will be e-mailed to the e-mail address on file."
-COM_USERS_REMIND_EMAIL_LABEL="Your E-mail"
-COM_USERS_REMIND_REQUEST_FAILED="Reminder failed. Make sure you entered a valid e-mail in the field."
+COM_USERS_REMIND_DEFAULT_LABEL="Please enter the email address associated with your User account. Your username will be emailed to the email address on file."
+COM_USERS_REMIND_EMAIL_LABEL="Your email"
+COM_USERS_REMIND_REQUEST_FAILED="Reminder failed. Make sure you entered a valid email in the field."
COM_USERS_REMIND_REQUEST_SUCCESS="Reminder successfully sent. Please check your mail."
COM_USERS_RESET_COMPLETE_ERROR="Error completing password reset."
COM_USERS_RESET_COMPLETE_FAILED="Completing reset password failed: %s"
@@ -110,10 +112,10 @@
COM_USERS_RESET_COMPLETE_SUCCESS="Reset password successful. You may now login to the site."
COM_USERS_RESET_CONFIRM_ERROR="Error while confirming the password."
COM_USERS_RESET_CONFIRM_FAILED="Your password reset confirmation failed because the verification code was invalid. %s"
-COM_USERS_RESET_CONFIRM_LABEL="An e-mail has been sent to your e-mail address. The e-mail contains a verification code, please paste the verification code in the field below to prove that you are the owner of this account."
+COM_USERS_RESET_CONFIRM_LABEL="An email has been sent to your email address. The email contains a verification code, please paste the verification code in the field below to prove that you are the owner of this account."
COM_USERS_RESET_REQUEST_ERROR="Error requesting password reset."
COM_USERS_RESET_REQUEST_FAILED="Reset passsword failed: %s"
-COM_USERS_RESET_REQUEST_LABEL="Please enter the e-mail address for your account. A verification code will be sent to you. Once you have received the verification code, you will be able to choose a new password for your account."
+COM_USERS_RESET_REQUEST_LABEL="Please enter the email address for your account. A verification code will be sent to you. Once you have received the verification code, you will be able to choose a new password for your account."
COM_USERS_USER_NOT_FOUND="User not found"
COM_USERS_USER_BLOCKED="This user is blocked. If this is an error, please contact an administrator."
COM_USERS_USER_SAVE_FAILED="Failed to save user: %s"

Modified: development/branches/jcamp/language/xx-XX/xx-XX.com_weblinks.ini
===================================================================
--- development/branches/jcamp/language/xx-XX/xx-XX.com_weblinks.ini 2010-08-31 19:21:09 UTC (rev 18740)
+++ development/branches/jcamp/language/xx-XX/xx-XX.com_weblinks.ini 2010-08-31 19:24:28 UTC (rev 18741)
@@ -4,6 +4,8 @@
; License GNU General Public License version 2 or later; see LICENSE.txt, see LICENSE.php
; Note : All ini files need to be saved as UTF-8 - No BOM

+COM_WEBLINK_SUBMIT_SAVE_SUCCESS="Web link successfully submitted"
+COM_WEBLINKS_EDIT="Edit Web link"
COM_WEBLINKS_ERROR_CATEGORY_NOT_FOUND="Web link category not found"
COM_WEBLINKS_ERROR_WEBLINK_NOT_FOUND="Web link not found"
COM_WEBLINKS_ERROR_WEBLINK_URL_INVALID="Invalid Web link URL"
@@ -15,8 +17,8 @@
COM_WEBLINKS_FORM_EDIT_WEBLINK="Submit a Web link"
COM_WEBLINKS_GRID_TITLE="Title"
COM_WEBLINKS_LINK="Web Link"
+COM_WEBLINKS_NAME="Name"
COM_WEBLINKS_NO_WEBLINKS="There are no Web links in this category"
-COM_WEBLINKS_NAME="Name"
COM_WEBLINKS_NUM="# of links:"
COM_WEBLINKS_WEB_LINKS="Web links"
-JGLOBAL_NEWITEMSLAST_DESC="New Web links default to the last position. Ordering can be changed after this Web link has been saved."
+JGLOBAL_NEWITEMSLAST_DESC="New Web links default to the last position. Ordering can be changed after this Web link has been saved."
\ No newline at end of file

Modified: development/branches/jcamp/language/xx-XX/xx-XX.ini
===================================================================
--- development/branches/jcamp/language/xx-XX/xx-XX.ini 2010-08-31 19:21:09 UTC (rev 18740)
+++ development/branches/jcamp/language/xx-XX/xx-XX.ini 2010-08-31 19:24:28 UTC (rev 18741)
@@ -11,6 +11,10 @@
; Keep this string on top
JERROR_PARSING_LANGUAGE_FILE="&#160;: error(s) in line(s) %s"

+ERROR="Error"
+MESSAGE="Message"
+NOTICE="Notice"
+
J1="1"
J2="2"
J3="3"
@@ -59,8 +63,8 @@
JSHOW="Show"
JSITE="Site"
JSUBMIT="Submit"
+JTRASH="Trash"
JTRASHED="Trashed"
-JTRASH="Trash"
JTRUE="True"
JUNPUBLISHED="Unpublished"
JYEAR="Year"
@@ -72,6 +76,7 @@
JBROWSERTARGET_POPUP="Open in popup"

JERROR_ALERTNOAUTHOR="You are not authorised to view this resource."
+JERROR_ALERTNOTEMPLATE="<strong>The template for this display is not available. Please contact a Site administrator.</strong>"
JERROR_AN_ERROR_HAS_OCCURRED="An error has occurred."
JERROR_LAYOUT_AN_OUT_OF_DATE_BOOKMARK_FAVOURITE="an <strong>out-of-date bookmark/favourite</strong>"
JERROR_LAYOUT_ERROR_HAS_OCCURRED_WHILE_PROCESSING_YOUR_REQUEST="An error has occurred while processing your request."
@@ -107,8 +112,8 @@
JFIELD_PUBLISHED_DESC="Set publication state"
JFIELD_TITLE_DESC="Title for the article"

+JGLOBAL_ARTICLE_MUST_HAVE_TEXT="Article must have some text"
JGLOBAL_ARTICLES="Articles"
-JGLOBAL_ARTICLE_MUST_HAVE_TEXT="Article must have some text"
JGLOBAL_AUTH_ACCESS_DENIED="Access Denied"
JGLOBAL_AUTH_ACCESS_GRANTED="Access Granted"
JGLOBAL_AUTH_BIND_FAILED="Failed binding to LDAP server"
@@ -117,6 +122,7 @@
JGLOBAL_AUTH_ERROR="Authentication error : could not connect to the openid server"
JGLOBAL_AUTH_FAIL="Authentication failed"
JGLOBAL_AUTH_FAILED="Failed to authenticate: %s"
+JGLOBAL_AUTH_INCORRECT="Incorrect username/password"
JGLOBAL_AUTH_INVALID_PASS="Invalid password"
JGLOBAL_AUTH_NO_BIND="Unable to bind to LDAP"
JGLOBAL_AUTH_NO_CONNECT="Unable to connect to LDAP server"
@@ -124,23 +130,25 @@
JGLOBAL_AUTH_NO_USER="User does not exist"
JGLOBAL_AUTH_NOT_CREATE_DIR="Could not create the FileStore directory %s. Please check the effective permissions."
JGLOBAL_AUTH_PASS_BLANK="LADP can not have blank password"
-JGLOBAL_AUTH_INCORRECT="Incorrect username/password"
JGLOBAL_AUTH_UNKNOWN_ACCESS_DENIED="Result Unknown. Access Denied"
JGLOBAL_AUTH_USER_BLACKLISTED="User is blacklisted"
JGLOBAL_AUTH_USER_NOT_FOUND="Unable to find user"
JGLOBAL_AUTO="Auto"
JGLOBAL_CATEGORY_NOT_FOUND="Category not found"
JGLOBAL_CLICK_TO_SORT_THIS_COLUMN="Click to sort by this column"
+JGLOBAL_CREATED_DATE_ON="Created on %s"
JGLOBAL_DESCRIPTION="Description"
JGLOBAL_DISPLAY_NUM="Display #"
JGLOBAL_EDIT="Edit"
JGLOBAL_EMAIL="Email"
JGLOBAL_FIELD_CREATED_BY_ALIAS_DESC="Uses another name than the author's for display"
JGLOBAL_FIELD_CREATED_BY_ALIAS_LABEL="Author's Alias"
-JGLOBAL_FIELD_PUBLISH_DOWN_DESC="An optional date to stop publishing"
-JGLOBAL_FIELD_PUBLISH_DOWN_LABEL="Publish Finish"
-JGLOBAL_FIELD_PUBLISH_UP_DESC="An optional date to start publishing"
-JGLOBAL_FIELD_PUBLISH_UP_LABEL="Publish Start"
+JGLOBAL_FIELD_FEATURED_DESC="Assign the article to the featured blog layout"
+JGLOBAL_FIELD_FEATURED_LABEL="Featured"
+JGLOBAL_FIELD_PUBLISH_DOWN_DESC="An optional date to Stop Publishing"
+JGLOBAL_FIELD_PUBLISH_DOWN_LABEL="Finish Publishing"
+JGLOBAL_FIELD_PUBLISH_UP_DESC="An optional date to Start Publishing"
+JGLOBAL_FIELD_PUBLISH_UP_LABEL="Start Publishing"
JGLOBAL_FILTER_BUTTON="Filter"
JGLOBAL_FILTER_LABEL="Filter"
JGLOBAL_FULL_TEXT="Full Text"
@@ -165,6 +173,10 @@
JGLOBAL_VALIDATION_FORM_FAILED="Invalid form"
JGLOBAL_YOU_MUST_LOGIN_FIRST="Please login first"

+JGRID_HEADING_ACCESS="Access"
+JGRID_HEADING_CATEGORY="Category"
+JGRID_HEADING_ID="ID"
+
JLIB_APPLICATION_ERROR_ACCESS_FORBIDDEN="Access forbidden"
JLIB_APPLICATION_ERROR_CHECKIN_FAILED="Check-in failed with the following error: %s"
JLIB_APPLICATION_ERROR_CHECKIN_USER_MISMATCH="The user checking in does not match the user who checked out the item."
@@ -173,10 +185,10 @@
JLIB_APPLICATION_ERROR_INVALID_CONTROLLER="Invalid controller of type %s."
JLIB_APPLICATION_ERROR_INVALID_CONTROLLER_CLASS="Invalid controller class named %s."
JLIB_APPLICATION_ERROR_LAYOUTFILE_NOT_FOUND="Layout %s not found"
+JLIB_APPLICATION_ERROR_SAVE_FAILED="Save failed with the following error: %s"
JLIB_APPLICATION_ERROR_VIEW_NOT_FOUND="View not found [name, type, prefix]: %1$s, %2$s, %3$s"
-JLIB_APPLICATION_ERROR_SAVE_FAILED="Save failed with the following error: %s"
JLIB_DATABASE_ERROR_CONNECT_DATABASE="Unable to connect to the Database: %s"
-JLIB_DATABASE_ERROR_EMAIL_INUSE="This e-mail is already registered. If you forgot your password, click on the <strong>Lost your Password</strong> link and a new password will be sent to you."
+JLIB_DATABASE_ERROR_EMAIL_INUSE="This email is already registered. If you forgot your password, click on the <strong>Lost your Password</strong> link and a new password will be sent to you."
JLIB_DATABASE_ERROR_EMPTY_ROW_RETURNED="The database row is empty."
JLIB_DATABASE_ERROR_FUNCTION_FAILED="DB function failed with error number %s <br /><font color="_QQ_"red"_QQ_">%s</font>"
JLIB_DATABASE_ERROR_LOAD_DATABASE_DRIVER="Unable to load Database Driver: %s"
@@ -185,11 +197,10 @@
JLIB_DATABASE_ERROR_SETLASTVISIT="Error JUser: :setLastVisit cannot call method statically with no ID"
JLIB_DATABASE_ERROR_USERNAME_INUSE="This username is already in use. Please try another."
JLIB_DATABASE_ERROR_VALID_AZ09="Please enter a valid username. No spaces, at least %d characters and must <strong>not</strong> contain the following characters: < > \ "_QQ_" ' &#37; ; ( ) &"
-JLIB_DATABASE_ERROR_VALID_MAIL="Please enter a valid e-mail address."
+JLIB_DATABASE_ERROR_VALID_MAIL="Please enter a valid email address."
JLIB_DATABASE_FUNCTION_NOERROR="DB function reports no errors"
JLIB_ENVIRONMENT_SESSION_EXPIRED="Your session has expired. Please log in again."
JLIB_ERROR_INFINITE_LOOP="Infinite loop detected in JError"
-JLIB_FORM_ERROR_NO_DATA="No data"
JLIB_FILESYSTEM_CANNOT_FIND_SOURCE_FILE="Cannot find source file"
JLIB_FILESYSTEM_DELETE_FAILED="Failed deleting %s"
JLIB_FILESYSTEM_ERROR_COPY_FAILED="Copy failed"
@@ -198,6 +209,7 @@
JLIB_FILESYSTEM_ERROR_RENAME_FILE="Rename failed"
JLIB_FILESYSTEM_ERROR_WARNFS_ERR01="Warning: Failed to change file permissions!"
JLIB_FILESYSTEM_ERROR_WARNFS_ERR02="Warning: Failed to move file!"
+JLIB_FORM_ERROR_NO_DATA="No data"
JLIB_FORM_ERROR_XML_FILE_DID_NOT_LOAD="XML file did not load"
JLIB_FORM_VALIDATE_FIELD_REQUIRED="Field required: %s"
JLIB_HTML_BEHAVIOR_ABOUT_THE_CALENDAR="About the Calendar"
@@ -217,8 +229,8 @@
JLIB_HTML_BEHAVIOR_SHIFT_CLICK_OR_DRAG_TO_CHANGE_VALUE="(Shift-)Click or Drag to change the value."
JLIB_HTML_BEHAVIOR_TIME="Time:"
JLIB_HTML_BEHAVIOR_TODAY="Today"
+JLIB_HTML_BEHAVIOR_UPLOADER_CURRENT_TITLE="Upload Files"
JLIB_HTML_BEHAVIOR_UPLOADER_PROGRESS_OVERALL="Overall Progress {total}"
-JLIB_HTML_BEHAVIOR_UPLOADER_CURRENT_TITLE="Upload Files"
JLIB_HTML_BEHAVIOR_WK="wk"
JLIB_HTML_BEHAVIOR_YEAR_SELECT="- Use the « and » buttons to select year\n"
JLIB_HTML_CALENDAR="Calendar"
@@ -245,8 +257,15 @@
JLIB_USER_ERROR_PASSWORD_NOT_MATCH="Password do not match. Please re-enter password."
JLIB_UTIL_ERROR_LOADING_FEED_DATA="Error loading feed data"

+JOPTION_SELECT_ACCESS="- Select Access -"
+JOPTION_SELECT_CATEGORY="- Select Category -"
+JOPTION_SELECT_PUBLISHED="- Select State -"
JOPTION_USE_DEFAULT="- Use Default -"

+JSEARCH_FILTER_CLEAR="Clear"
+JSEARCH_FILTER_LABEL="Filter"
+JSEARCH_FILTER_SUBMIT="Search"
+
DATE_FORMAT_LC="l, d F Y"
DATE_FORMAT_LC1="l, d F Y"
DATE_FORMAT_LC2="l, d F Y H:i"
@@ -340,7 +359,7 @@
UTC__13_00__TONGA="(UTC +13:00) Tonga"
UTC__14_00__KIRIBATI="(UTC +14:00) Kiribati"

-PHPMAILER_PROVIDE_ADDRESS="You must provide at least one recipient e-mail address."
+PHPMAILER_PROVIDE_ADDRESS="You must provide at least one recipient email address."
PHPMAILER_MAILER_IS_NOT_SUPPORTED=" Mailer is not supported."
PHPMAILER_EXECUTE="Could not execute:"
PHPMAILER_INSTANTIATE="Could not instantiate mail function."
@@ -353,14 +372,3 @@
PHPMAILER_FILE_OPEN="File Error: Could not open file:"
PHPMAILER_ENCODING="Unknown encoding:"
PHPMAILER_SIGNING_ERROR="Signing error:"
-
-MESSAGE="Message"
-JSEARCH_FILTER_LABEL="Filter"
-JSEARCH_FILTER_CLEAR="Clear"
-JSEARCH_FILTER_SUBMIT="Search"
-JOPTION_SELECT_ACCESS="- Select Access -"
-JOPTION_SELECT_PUBLISHED="- Select State -"
-JOPTION_SELECT_CATEGORY="- Select Category -"
-JGRID_HEADING_ACCESS="Access"
-JGRID_HEADING_CATEGORY="Category"
-JGRID_HEADING_ID="ID"
\ No newline at end of file

Modified: development/branches/jcamp/language/xx-XX/xx-XX.localise.php
===================================================================
--- development/branches/jcamp/language/xx-XX/xx-XX.localise.php 2010-08-31 19:21:09 UTC (rev 18740)
+++ development/branches/jcamp/language/xx-XX/xx-XX.localise.php 2010-08-31 19:24:28 UTC (rev 18741)
@@ -19,7 +19,7 @@
* @return array An array of potential suffixes.
* @since 1.6
*/
- public static function getPluralSuffices($count) {
+ public static function getPluralSuffixes($count) {
if ($count == 0) {
$return = array('0');
}

Modified: development/branches/jcamp/libraries/joomla/application/component/modeladmin.php
===================================================================
--- development/branches/jcamp/libraries/joomla/application/component/modeladmin.php 2010-08-31 19:21:09 UTC (rev 18740)
+++ development/branches/jcamp/libraries/joomla/application/component/modeladmin.php 2010-08-31 19:24:28 UTC (rev 18741)
@@ -245,6 +245,10 @@
return false;
}
}
+
+ // Clear the component's cache
+ $cache = JFactory::getCache($this->option);
+ $cache->clean();

return true;
}
@@ -382,6 +386,10 @@
$this->setError($table->getError());
return false;
}
+
+ // Clear the component's cache
+ $cache = JFactory::getCache($this->option);
+ $cache->clean();

return true;
}
@@ -442,7 +450,13 @@
if ($allowed === false && empty($pks)) {
$result = null;
}
-
+
+ if ($result == true) {
+ // Clear the component's cache
+ $cache = JFactory::getCache($this->option);
+ $cache->clean();
+ }
+
return $result;
}

Modified: development/branches/jcamp/libraries/joomla/application/module/helper.php
===================================================================
--- development/branches/jcamp/libraries/joomla/application/module/helper.php 2010-08-31 19:21:09 UTC (rev 18740)
+++ development/branches/jcamp/libraries/joomla/application/module/helper.php 2010-08-31 19:24:28 UTC (rev 18741)
@@ -90,7 +90,7 @@
}
if (count($result) == 0)
{
- if ($app->getCfg('debug_modules') && JRequest::getBool('tp'))
+ if (JRequest::getBool('tp') && JComponentHelper::getParams('com_templates')->get('template_positions_display'))
{
$result[0] = JModuleHelper::getModule('mod_'.$position);
$result[0]->title = $position;
@@ -186,7 +186,7 @@
}

//dynamically add outline style
- if ($app->getCfg('debug_modules') && JRequest::getBool('tp')) {
+ if (JRequest::getBool('tp') && JComponentHelper::getParams('com_templates')->get('template_positions_display')) {
$attribs['style'] .= ' outline';
}

@@ -383,8 +383,8 @@
$conf = JFactory::getConfig();

// turn cache off for internal callers if parameters are set to off and for all loged in users
- if($moduleparams->get('owncache', null) == 0 || $conf->get('caching') == 0 || $user->get('id')) {
- $cache->setCaching = false;
+ if($moduleparams->get('owncache', null) === 0 || $conf->get('caching') == 0 || $user->get('id')) {
+ $cache->setCaching(false);
}

$cache->setLifeTime($moduleparams->get('cache_time', $conf->get('cachetime') * 60));

Modified: development/branches/jcamp/libraries/joomla/cache/controller/callback.php
===================================================================
--- development/branches/jcamp/libraries/joomla/cache/controller/callback.php 2010-08-31 19:21:09 UTC (rev 18740)
+++ development/branches/jcamp/libraries/joomla/cache/controller/callback.php 2010-08-31 19:24:28 UTC (rev 18741)
@@ -97,12 +97,14 @@
$data = $this->cache->get($id);
}
}
-
+
+ $coptions= array();
+
if ($data !== false) {

$cached = unserialize(trim($data));
$coptions['mergehead'] = isset($woptions['mergehead']) ? $woptions['mergehead'] : 0;
- $output = ($wrkarounds == false) ? $cached['output'] : JCache::getWorkarounds($cached['output'], $woptions['mergehead']);
+ $output = ($wrkarounds == false) ? $cached['output'] : JCache::getWorkarounds($cached['output'], $coptions);
$result = $cached['result'];
if ($locktest->locked == true) $this->cache->unlock($id);

@@ -122,7 +124,6 @@

$cached = array();

- $coptions= array();
$coptions['nopathway'] = isset($woptions['nopathway']) ? $woptions['nopathway'] : 1;
$coptions['nohead'] = isset($woptions['nohead']) ? $woptions['nohead'] : 1;
$coptions['nomodules'] = isset($woptions['nomodules']) ? $woptions['nomodules'] : 1;

Modified: development/branches/jcamp/libraries/joomla/cache/controller.php
===================================================================
--- development/branches/jcamp/libraries/joomla/cache/controller.php 2010-08-31 19:21:09 UTC (rev 18740)
+++ development/branches/jcamp/libraries/joomla/cache/controller.php 2010-08-31 19:24:28 UTC (rev 18741)
@@ -39,7 +39,7 @@
public function __construct($options)
{
$this->cache = new JCache($options);
- $this->options = $this->cache->_options;
+ $this->options = & $this->cache->_options;

// Overwrite default options with given options
foreach ($options AS $option=>$value) {
@@ -95,9 +95,8 @@
* @since 1.6
*/
public function setCaching($enabled)
- {
- $this->options['caching'] = (bool) $enabled;
- $this->cache->setCaching($enabled);
+ {
+ $this->cache->setCaching($enabled);
}

/**

Modified: development/branches/jcamp/libraries/joomla/database/database/mysql.php
===================================================================
--- development/branches/jcamp/libraries/joomla/database/database/mysql.php 2010-08-31 19:21:09 UTC (rev 18740)
+++ development/branches/jcamp/libraries/joomla/database/database/mysql.php 2010-08-31 19:24:28 UTC (rev 18741)
@@ -73,6 +73,9 @@
// Finalize initialisation
parent::__construct($options);

+ // Set sql_mode to non_strict mode
+ mysql_query("SET @@SESSION.sql_mode = '';", $this->_connection);
+
// select the database
if ($select) {
$this->select($database);

Modified: development/branches/jcamp/libraries/joomla/database/database/mysqli.php
===================================================================
--- development/branches/jcamp/libraries/joomla/database/database/mysqli.php 2010-08-31 19:21:09 UTC (rev 18740)
+++ development/branches/jcamp/libraries/joomla/database/database/mysqli.php 2010-08-31 19:24:28 UTC (rev 18741)
@@ -96,6 +96,9 @@
// finalize initialization
parent::__construct($options);

+ // Set sqli_mode to non_strict mode
+ mysqli_query($this->_connection, "SET @@SESSION.sql_mode = '';");
+
// select the database
if ($select) {
$this->select($database);

Modified: development/branches/jcamp/libraries/joomla/database/table/usergroup.php
===================================================================
--- development/branches/jcamp/libraries/joomla/database/table/usergroup.php 2010-08-31 19:21:09 UTC (rev 18740)
+++ development/branches/jcamp/libraries/joomla/database/table/usergroup.php 2010-08-31 19:24:28 UTC (rev 18741)
@@ -21,12 +21,11 @@
/**
* Constructor
*
- * @access public
* @param object Database object
* @return void
* @since 1.0
*/
- function __construct(&$db)
+ public function __construct(&$db)
{
parent::__construct('#__usergroups', 'id', $db);
}
@@ -34,11 +33,10 @@
/**
* Method to check the current record to save
*
- * @access public
* @return boolean True on success
- * @since 1.0
+ * @since 1.6
*/
- function check()
+ public function check()
{
// Validate the title.
if ((trim($this->title)) == '') {
@@ -46,19 +44,33 @@
return false;
}

+ // Check for a duplicate title.
+ // There is a unique index on the title field in the table.
+ $db = $this->getDbo();
+ $query = $db->getQuery(true)
+ ->select('COUNT(title)')
+ ->from($this->_tbl)
+ ->where('title = '.$db->quote(trim($this->title)));
+ $db->setQuery($query);
+
+ if ($db->loadResult() > 0) {
+ $this->setError(JText::_('JLIB_DATABASE_ERROR_USERGROUP_TITLE_EXISTS'));
+ return false;
+ }
+
return true;
}

/**
* Method to recursively rebuild the nested set tree.
*
- * @access public
* @param integer The root of the tree to rebuild.
* @param integer The left id to start with in building the tree.
+ *
* @return boolean True on success
- * @since 1.0
+ * @since 1.6
*/
- function rebuild($parent_id = 0, $left = 0)
+ public function rebuild($parent_id = 0, $left = 0)
{
// get the database object
$db = &$this->_db;
@@ -105,14 +117,14 @@
/**
* Inserts a new row if id is zero or updates an existing row in the database table
*
- * @access public
- * @param boolean If false, null object variables are not updated
- * @return boolean True successful, false otherwise and an internal error message is set`
+ * @param boolean $updateNulls If false, null object variables are not updated
+ *
+ * @return boolean True successful, false otherwise and an internal error message is set
+ * @since 1.6
*/
function store($updateNulls = false)
{
- if ($result = parent::store($updateNulls))
- {
+ if ($result = parent::store($updateNulls)) {
// Rebuild the nested set tree.
$this->rebuild();
}
@@ -122,6 +134,11 @@

/**
* Delete this object and it's dependancies
+ *
+ * @param int $oid The primary key of the user group to delete.
+ *
+ * @return mixed Boolean or Exception.
+ * @since 1.6
*/
function delete($oid = null)
{
@@ -168,12 +185,14 @@

// Delete the usergroup in view levels
$replace = array();
- foreach ($ids as $id) {
+ foreach ($ids as $id)
+ {
$replace []= ','.$db->quote("[$id,").','.$db->quote("[").')';
$replace []= ','.$db->quote(",$id,").','.$db->quote(",").')';
$replace []= ','.$db->quote(",$id]").','.$db->quote("]").')';
$replace []= ','.$db->quote("[$id]").','.$db->quote("[]").')';
}
+
$query = $db->getQuery(true);
$query->set('rules='.str_repeat('replace(',4*count($ids)).'rules'.implode('',$replace));
$query->update('#__viewlevels');
@@ -199,4 +218,4 @@

return true;
}
-}
+}
\ No newline at end of file

Modified: development/branches/jcamp/libraries/joomla/database/tablenested.php
===================================================================
--- development/branches/jcamp/libraries/joomla/database/tablenested.php 2010-08-31 19:21:09 UTC (rev 18740)
+++ development/branches/jcamp/libraries/joomla/database/tablenested.php 2010-08-31 19:24:28 UTC (rev 18741)
@@ -236,12 +236,15 @@
{
// Initialise variables.
$k = $this->_tbl_key;
- $pk = (is_null($pk)) ? $this->$k : $pk;
+ $pk = $this->$k;

$query = $this->_db->getQuery(true);
$query->select($k);
$query->from($this->_tbl);
$query->where('parent_id = '.$this->parent_id);
+ if ($where) {
+ $query->where($where);
+ }
$position = 'after';
if($delta > 0)
{
@@ -256,8 +259,13 @@

$this->_db->setQuery($query);
$referenceId = $this->_db->loadResult();
-
- return $this->moveByReference($referenceId, $position, $pk);
+
+ if ($referenceId) {
+ return $this->moveByReference($referenceId, $position, $pk);
+ }
+ else {
+ return false;
+ }
}

/**
@@ -317,6 +325,38 @@
// Lock the table for writing.
if (!$this->_lock()) return false;

+ /*
+ * Move the sub-tree out of the nested sets by negating its left and right values.
+ */
+ $query = $this->_db->getQuery(true);
+ $query->update($this->_tbl);
+ $query->set('lft = lft * (-1), rgt = rgt * (-1)');
+ $query->where('lft BETWEEN '.(int) $node->lft.' AND '.(int) $node->rgt);
+ $this->_db->setQuery($query);
+
+ $this->_runQuery($query, 'JLIB_DATABASE_ERROR_MOVE_FAILED');
+
+ /*
+ * Close the hole in the tree that was opened by removing the sub-tree from the nested sets.
+ */
+ // Compress the left values.
+ $query = $this->_db->getQuery(true);
+ $query->update($this->_tbl);
+ $query->set('lft = lft - '.(int) $node->width);
+ $query->where('lft > '.(int) $node->rgt);
+ $this->_db->setQuery($query);
+
+ $this->_runQuery($query, 'JLIB_DATABASE_ERROR_MOVE_FAILED');
+
+ // Compress the right values.
+ $query = $this->_db->getQuery(true);
+ $query->update($this->_tbl);
+ $query->set('rgt = rgt - '.(int) $node->width);
+ $query->where('rgt > '.(int) $node->rgt);
+ $this->_db->setQuery($query);
+
+ $this->_runQuery($query, 'JLIB_DATABASE_ERROR_MOVE_FAILED');
+
// We are moving the tree relative to a reference node.
if ($referenceId)
{
@@ -328,13 +368,6 @@
return false;
}

- // If moving "down" the tree, adjust $reference lft, rgt for $node width
- if ($node->rgt < $reference->rgt)
- {
- $reference->lft -= $node->width;
- $reference->rgt -= $node->width;
- }
-
// Get the reposition data for shifting the tree and re-inserting the node.
if (!$repositionData = $this->_getTreeRepositionData($reference, $node->width, $position))
{
@@ -344,7 +377,7 @@
}
}

- // We are moving the tree to be a new root node.
+ // We are moving the tree to be the last child of the root node
else
{
// Get the last root node as the reference node.
@@ -369,7 +402,7 @@
}

// Get the reposition data for re-inserting the node after the found root.
- if (!$repositionData = $this->_getTreeRepositionData($reference, $node->width, 'after'))
+ if (!$repositionData = $this->_getTreeRepositionData($reference, $node->width, 'last-child'))
{
// Error message set in getNode method.
$this->_unlock();
@@ -378,68 +411,6 @@
}

/*
- * Move the sub-tree out of the nested sets by negating its left and right values.
- */
- $query = $this->_db->getQuery(true);
- $query->update($this->_tbl);
- $query->set('lft = lft * (-1), rgt = rgt * (-1)');
- $query->where('lft BETWEEN '.(int) $node->lft.' AND '.(int) $node->rgt);
- $this->_db->setQuery($query);
-
- // Check for a database error.
- if (!$this->_db->query())
- {
- $e = new JException(JText::sprintf('JLIB_DATABASE_ERROR_MOVE_FAILED', get_class($this), $this->_db->getErrorMsg()));
- $this->setError($e);
- $this->_unlock();
- return false;
- }
- if ($this->_debug) {
- $this->_logtable();
- }
-
- /*
- * Close the hole in the tree that was opened by removing the sub-tree from the nested sets.
- */
- // Compress the left values.
- $query = $this->_db->getQuery(true);
- $query->update($this->_tbl);
- $query->set('lft = lft - '.(int) $node->width);
- $query->where('lft > '.(int) $node->rgt);
- $this->_db->setQuery($query);
-
- // Check for a database error.
- if (!$this->_db->query())
- {
- $e = new JException(JText::sprintf('JLIB_DATABASE_ERROR_MOVE_FAILED', get_class($this), $this->_db->getErrorMsg()));
- $this->setError($e);
- $this->_unlock();
- return false;
- }
- if ($this->_debug) {
- $this->_logtable();
- }
-
- // Compress the right values.
- $query = $this->_db->getQuery(true);
- $query->update($this->_tbl);
- $query->set('rgt = rgt - '.(int) $node->width);
- $query->where('rgt > '.(int) $node->rgt);
- $this->_db->setQuery($query);
-
- // Check for a database error.
- if (!$this->_db->query())
- {
- $e = new JException(JText::sprintf('JLIB_DATABASE_ERROR_MOVE_FAILED', get_class($this), $this->_db->getErrorMsg()));
- $this->setError($e);
- $this->_unlock();
- return false;
- }
- if ($this->_debug) {
- $this->_logtable();
- }
-
- /*
* Create space in the nested sets at the new location for the moved sub-tree.
*/
// Shift left values.
@@ -449,17 +420,7 @@
$query->where($repositionData->left_where);
$this->_db->setQuery($query);

- // Check for a database error.
- if (!$this->_db->query())
- {
- $e = new JException(JText::sprintf('JLIB_DATABASE_ERROR_MOVE_FAILED', get_class($this), $this->_db->getErrorMsg()));
- $this->setError($e);
- $this->_unlock();
- return false;
- }
- if ($this->_debug) {
- $this->_logtable();
- }
+ $this->_runQuery($query, 'JLIB_DATABASE_ERROR_MOVE_FAILED');

// Shift right values.
$query = $this->_db->getQuery(true);
@@ -468,17 +429,7 @@
$query->where($repositionData->right_where);
$this->_db->setQuery($query);

- // Check for a database error.
- if (!$this->_db->query())
- {
- $e = new JException(JText::sprintf('JLIB_DATABASE_ERROR_MOVE_FAILED', get_class($this), $this->_db->getErrorMsg()));
- $this->setError($e);
- $this->_unlock();
- return false;
- }
- if ($this->_debug) {
- $this->_logtable();
- }
+ $this->_runQuery($query, 'JLIB_DATABASE_ERROR_MOVE_FAILED');

/*
* Calculate the offset between where the node used to be in the tree and
@@ -496,17 +447,7 @@
$query->where('lft < 0');
$this->_db->setQuery($query);

- // Check for a database error.
- if (!$this->_db->query())
- {
- $e = new JException(JText::sprintf('JLIB_DATABASE_ERROR_MOVE_FAILED', get_class($this), $this->_db->getErrorMsg()));
- $this->setError($e);
- $this->_unlock();
- return false;
- }
- if ($this->_debug) {
- $this->_logtable();
- }
+ $this->_runQuery($query, 'JLIB_DATABASE_ERROR_MOVE_FAILED');

// Set the correct parent id for the moved node if required.
if ($node->parent_id != $repositionData->new_parent_id)
@@ -517,17 +458,7 @@
$query->where($this->_tbl_key.' = '.(int) $node->$k);
$this->_db->setQuery($query);

- // Check for a database error.
- if (!$this->_db->query())
- {
- $e = new JException(JText::sprintf('JLIB_DATABASE_ERROR_MOVE_FAILED', get_class($this), $this->_db->getErrorMsg()));
- $this->setError($e);
- $this->_unlock();
- return false;
- }
- if ($this->_debug) {
- $this->_logtable();
- }
+ $this->_runQuery($query, 'JLIB_DATABASE_ERROR_MOVE_FAILED');
}

// Unlock the table for writing.
@@ -578,7 +509,7 @@
if ($asset->loadByName($name))
{
// Delete the node in assets table.
- if (!$asset->delete())
+ if (!$asset->delete(null, $children))
{
$this->setError($asset->getError());
$asset->_unlock();
@@ -610,48 +541,21 @@
$query->delete();
$query->from($this->_tbl);
$query->where('lft BETWEEN '.(int) $node->lft.' AND '.(int) $node->rgt);
- $this->_db->setQuery($query);
+ $this->_runQuery($query, 'JLIB_DATABASE_ERROR_DELETE_FAILED');

- // Check for a database error.
- if (!$this->_db->query())
- {
- $e = new JException(JText::sprintf('JLIB_DATABASE_ERROR_DELETE_FAILED', get_class($this), $this->_db->getErrorMsg()));
- $this->setError($e);
- $this->_unlock();
- return false;
- }
-
// Compress the left values.
$query = $this->_db->getQuery(true);
$query->update($this->_tbl);
$query->set('lft = lft - '.(int) $node->width);
$query->where('lft > '.(int) $node->rgt);
- $this->_db->setQuery($query);
+ $this->_runQuery($query, 'JLIB_DATABASE_ERROR_DELETE_FAILED');

- // Check for a database error.
- if (!$this->_db->query())
- {
- $e = new JException(JText::sprintf('JLIB_DATABASE_ERROR_DELETE_FAILED', get_class($this), $this->_db->getErrorMsg()));
- $this->setError($e);
- $this->_unlock();
- return false;
- }
-
// Compress the right values.
$query = $this->_db->getQuery(true);
$query->update($this->_tbl);
$query->set('rgt = rgt - '.(int) $node->width);
$query->where('rgt > '.(int) $node->rgt);
- $this->_db->setQuery($query);
-
- // Check for a database error.
- if (!$this->_db->query())
- {
- $e = new JException(JText::sprintf('JLIB_DATABASE_ERROR_DELETE_FAILED', get_class($this), $this->_db->getErrorMsg()));
- $this->setError($e);
- $this->_unlock();
- return false;
- }
+ $this->_runQuery($query, 'JLIB_DATABASE_ERROR_DELETE_FAILED');
}

// Leave the children and move them up a level.
@@ -662,18 +566,8 @@
$query->delete();
$query->from($this->_tbl);
$query->where('lft = '.(int) $node->lft);
- $this->_db->setQuery($query);
+ $this->_runQuery($query, 'JLIB_DATABASE_ERROR_DELETE_FAILED');

-
- // Check for a database error.
- if (!$this->_db->query())
- {
- $e = new JException(JText::sprintf('JLIB_DATABASE_ERROR_DELETE_FAILED', get_class($this), $this->_db->getErrorMsg()));
- $this->setError($e);
- $this->_unlock();
- return false;
- }
-
// Shift all node's children up a level.
$query = $this->_db->getQuery(true);
$query->update($this->_tbl);
@@ -681,64 +575,28 @@
$query->set('rgt = rgt - 1');
$query->set('level = level - 1');
$query->where('lft BETWEEN '.(int) $node->lft.' AND '.(int) $node->rgt);
- $this->_db->setQuery($query);
+ $this->_runQuery($query, 'JLIB_DATABASE_ERROR_DELETE_FAILED');

- // Check for a database error.
- if (!$this->_db->query())
- {
- $e = new JException(JText::sprintf('JLIB_DATABASE_ERROR_DELETE_FAILED', get_class($this), $this->_db->getErrorMsg()));
- $this->setError($e);
- $this->_unlock();
- return false;
- }
-
// Adjust all the parent values for direct children of the deleted node.
$query = $this->_db->getQuery(true);
$query->update($this->_tbl);
$query->set('parent_id = '.(int) $node->parent_id);
$query->where('parent_id = '.(int) $node->$k);
- $this->_db->setQuery($query);
+ $this->_runQuery($query, 'JLIB_DATABASE_ERROR_DELETE_FAILED');

- // Check for a database error.
- if (!$this->_db->query())
- {
- $e = new JException(JText::sprintf('JLIB_DATABASE_ERROR_DELETE_FAILED', get_class($this), $this->_db->getErrorMsg()));
- $this->setError($e);
- $this->_unlock();
- return false;
- }
-
// Shift all of the left values that are right of the node.
$query = $this->_db->getQuery(true);
$query->update($this->_tbl);
$query->set('lft = lft - 2');
$query->where('lft > '.(int) $node->rgt);
- $this->_db->setQuery($query);
+ $this->_runQuery($query, 'JLIB_DATABASE_ERROR_DELETE_FAILED');

- // Check for a database error.
- if (!$this->_db->query())
- {
- $e = new JException(JText::sprintf('JLIB_DATABASE_ERROR_DELETE_FAILED', get_class($this), $this->_db->getErrorMsg()));
- $this->setError($e);
- $this->_unlock();
- return false;
- }
-
// Shift all of the right values that are right of the node.
$query = $this->_db->getQuery(true);
$query->update($this->_tbl);
$query->set('rgt = rgt - 2');
$query->where('rgt > '.(int) $node->rgt);
- $this->_db->setQuery($query);
-
- // Check for a database error.
- if (!$this->_db->query())
- {
- $e = new JException(JText::sprintf('JLIB_DATABASE_ERROR_DELETE_FAILED', get_class($this), $this->_db->getErrorMsg()));
- $this->setError($e);
- $this->_unlock();
- return false;
- }
+ $this->_runQuery($query, 'JLIB_DATABASE_ERROR_DELETE_FAILED');
}

// Unlock the table for writing.
@@ -877,39 +735,15 @@
$query->update($this->_tbl);
$query->set('lft = lft + 2');
$query->where($repositionData->left_where);
- $this->_db->setQuery($query);
+ $this->_runQuery($query, 'JLIB_DATABASE_ERROR_STORE_FAILED');

- // Check for a database error.
- if (!$this->_db->query())
- {
- $e = new JException(JText::sprintf('JLIB_DATABASE_ERROR_STORE_FAILED', get_class($this), $this->_db->getErrorMsg()));
- $this->setError($e);
- $this->_unlock();
- return false;
- }
- if ($this->_debug) {
- $this->_logtable();
- }
-
// Create space in the tree at the new location for the new node in right ids.
$query = $this->_db->getQuery(true);
$query->update($this->_tbl);
$query->set('rgt = rgt + 2');
$query->where($repositionData->right_where);
- $this->_db->setQuery($query);
+ $this->_runQuery($query, 'JLIB_DATABASE_ERROR_STORE_FAILED');

- // Check for a database error.
- if (!$this->_db->query())
- {
- $e = new JException(JText::sprintf('JLIB_DATABASE_ERROR_STORE_FAILED', get_class($this), $this->_db->getErrorMsg()));
- $this->setError($e);
- $this->_unlock();
- return false;
- }
- if ($this->_debug) {
- $this->_logtable();
- }
-
// Set the object values.
$this->parent_id = $repositionData->new_parent_id;
$this->level = $repositionData->new_level;
@@ -949,7 +783,7 @@
}

// Store the row to the database.
- if (!parent::store())
+ if (!parent::store($updateNulls))
{
$this->_unlock();
return false;
@@ -993,7 +827,7 @@
if (empty($pks))
{
if ($this->$k) {
- $pks = array($this->$k);
+ $pks = explode(',', $this->$k);
}
// Nothing to set publishing state on, return false.
else
@@ -1335,7 +1169,7 @@
}
elseif (property_exists($this, 'alias'))
{
- // Test for a unique record with lft = 0
+ // Test for a unique record alias = root
$query = $this->_db->getQuery(true);
$query->select($k);
$query->from($this->_tbl);
@@ -1378,7 +1212,7 @@
* @param integer The left id to start with in building the tree.
* @param integer The level to assign to the current nodes.
* @param string The path to the current nodes.
- * @return boolean True on success
+ * @return integer 1 + value of root rgt on success, false on failure
* @since 1.6
* @link http://docs.joomla.org/JTableNested/rebuild
*/
@@ -1517,13 +1351,13 @@
* @param array id's of rows to be reordered
* @param array lft values of rows to be reordered
*
- * @return boolean True on success
+ * @return integer 1 + value of root rgt on success, false on failure
* @since 1.6
*/
public function saveorder($idArray = null, $lft_array = null)
{
// Validate arguments
- if (is_array($idArray) && is_array($lft_array) && count($idArray == count($lft_array)))
+ if (is_array($idArray) && is_array($lft_array) && count($idArray) == count($lft_array))
{
for ($i = 0; $i < count($idArray); $i++)
{
@@ -1550,6 +1384,10 @@
}
return $this->rebuild();
}
+ else
+ {
+ return false;
+ }
}

/**
@@ -1656,7 +1494,7 @@

case 'before':
$data->left_where = 'lft >= '.$referenceNode->lft;
- $data->right_where = 'rgt >= '.$referenceNode->rgt;
+ $data->right_where = 'rgt >= '.$referenceNode->lft;

$data->new_lft = $referenceNode->lft;
$data->new_rgt = $referenceNode->lft + $nodeWidth - 1;
@@ -1666,7 +1504,7 @@

default:
case 'after':
- $data->left_where = 'lft > '.$referenceNode->lft;
+ $data->left_where = 'lft > '.$referenceNode->rgt;
$data->right_where = 'rgt > '.$referenceNode->rgt;

$data->new_lft = $referenceNode->rgt + 1;
@@ -1719,5 +1557,23 @@
}
echo $buffer;
}
+
+ // Run an update query and check for a database error
+ protected function _runQuery($query, $errorMessage)
+ {
+ $this->_db->setQuery($query);

+ // Check for a database error.
+ if (!$this->_db->query())
+ {
+ $e = new JException(JText::sprintf('$errorMessage', get_class($this), $this->_db->getErrorMsg()));
+ $this->setError($e);
+ $this->_unlock();
+ return false;
+ }
+ if ($this->_debug) {
+ $this->_logtable();
+ }
+ }
+
}

Modified: development/branches/jcamp/libraries/joomla/document/document.php
===================================================================
--- development/branches/jcamp/libraries/joomla/document/document.php 2010-08-31 19:21:09 UTC (rev 18740)
+++ development/branches/jcamp/libraries/joomla/document/document.php 2010-08-31 19:24:28 UTC (rev 18741)
@@ -803,7 +803,6 @@
*/
function render($cache = false, $params = array())
{
- JResponse::setHeader('Expires', gmdate('D, d M Y H:i:s', time() + 900) . ' GMT');
if ($mdate = $this->getModifiedDate()) {
JResponse::setHeader('Last-Modified', $mdate /* gmdate('D, d M Y H:i:s', time() + 900) . ' GMT' */);
}

Modified: development/branches/jcamp/libraries/joomla/document/feed/renderer/atom.php
===================================================================
--- development/branches/jcamp/libraries/joomla/document/feed/renderer/atom.php 2010-08-31 19:21:09 UTC (rev 18740)
+++ development/branches/jcamp/libraries/joomla/document/feed/renderer/atom.php 2010-08-31 19:24:28 UTC (rev 18741)
@@ -76,7 +76,7 @@
$feed.= " </author>\n";
}
$feed.= " <generator uri=\"http://joomla.org\" version=\"1.6\">".$data->getGenerator()."</generator>\n";
- $feed.= '<link rel="self" type="application/atom+xml" href="'.str_replace(' ','%20',$url.$syndicationURL). "\" />\n";
+ $feed.= '<link rel="self" type="application/atom+xml" href="'.str_replace(' ','%20',$url.$syndicationURL)."\"/>\n";

for ($i=0;$i<count($data->items);$i++)
{

Modified: development/branches/jcamp/libraries/joomla/document/feed/renderer/rss.php
===================================================================
--- development/branches/jcamp/libraries/joomla/document/feed/renderer/rss.php 2010-08-31 19:21:09 UTC (rev 18740)
+++ development/branches/jcamp/libraries/joomla/document/feed/renderer/rss.php 2010-08-31 19:24:28 UTC (rev 18741)
@@ -58,6 +58,7 @@
$feed.= " <link>".str_replace(' ','%20',$url.$data->link)."</link>\n";
$feed.= " <lastBuildDate>".htmlspecialchars($now->toRFC822(), ENT_COMPAT, 'UTF-8')."</lastBuildDate>\n";
$feed.= " <generator>".$data->getGenerator()."</generator>\n";
+ $feed.= ' <atom:link rel="self" type="application/rss+xml" href="'.str_replace(' ','%20',$url.$syndicationURL)."\"/>\n";

if ($data->image!=null)
{

Modified: development/branches/jcamp/libraries/joomla/document/html/html.php
===================================================================
--- development/branches/jcamp/libraries/joomla/document/html/html.php 2010-08-31 19:21:09 UTC (rev 18740)
+++ development/branches/jcamp/libraries/joomla/document/html/html.php 2010-08-31 19:24:28 UTC (rev 18741)
@@ -135,22 +135,25 @@
$this->link = (isset($data['link'])) ? $data['link'] : $this->link;

if (isset($data['metaTags'])) {
- foreach($data['metaTags'] AS $type1=>$data1) {
+ foreach($data['metaTags'] AS $type1=>$data1)
+ {
$booldog = $type1 == 'http-equiv' ? true : false;
- foreach($data1 AS $name2=>$data2) {
+ foreach($data1 AS $name2=>$data2)
+ {
$this->setMetaData($name2, $data2, $booldog);
}
}
}

$this->_links = (isset($data['links']) && !empty($data['links']) && is_array($data['links'])) ? array_unique(array_merge($this->_links, $data['links'])) : $this->_links;
- $this->_styleSheets = (isset($data['styleSheets']) && !empty($data['styleSheets']) && is_array($data['styleSheets'])) ? array_unique(array_merge($this->_styleSheets, $data['styleSheets'])) : $this->_styleSheets;
+ $this->_styleSheets = (isset($data['styleSheets']) && !empty($data['styleSheets']) && is_array($data['styleSheets'])) ? array_merge($this->_styleSheets, $data['styleSheets']) : $this->_styleSheets;

if (isset($data['style'])) {
- foreach($data['style'] AS $type=>$data) {
- if (!isset($this->_style[strtolower($type)]) || !stristr($this->_style[strtolower($type)],$data)) {
- $this->addStyleDeclaration($data, $type);
- }
+ foreach($data['style'] AS $type=>$stdata)
+ {
+ if (!isset($this->_style[strtolower($type)]) || !stristr($this->_style[strtolower($type)],$stdata)) {
+ $this->addStyleDeclaration($stdata, $type);
+ }
}
}

@@ -158,16 +161,15 @@


if (isset($data['script'])) {
- foreach($data['script'] AS $type=>$data) {
- if (!isset($this->_script[strtolower($type)]) || !stristr($this->_script[strtolower($type)],$data)) {
- $this->addScriptDeclaration($data, $type);
+ foreach($data['script'] AS $type=>$sdata)
+ {
+ if (!isset($this->_script[strtolower($type)]) || !stristr($this->_script[strtolower($type)],$sdata)) {
+ $this->addScriptDeclaration($sdata, $type);
}
-
}
}

-
- $this->_custom = (isset($data['custom']) && !empty($data['custom'])&& is_array($data['custom'])) ? array_unique(array_merge($this->_custom, $data['custom'])) : $this->_custom;
+ $this->_custom = (isset($data['custom']) && !empty($data['custom'])&& is_array($data['custom'])) ? array_unique(array_merge($this->_custom, $data['custom'])) : $this->_custom;
}

/**

Modified: development/branches/jcamp/libraries/joomla/environment/response.php
===================================================================
--- development/branches/jcamp/libraries/joomla/environment/response.php 2010-08-31 19:21:09 UTC (rev 18740)
+++ development/branches/jcamp/libraries/joomla/environment/response.php 2010-08-31 19:24:28 UTC (rev 18741)
@@ -184,9 +184,7 @@

if (self::allowCache() === false)
{
- self::setHeader('Expires', 'Mon, 1 Jan 2001 00:00:00 GMT', true); // Expires in the past
- self::setHeader('Last-Modified', gmdate("D, d M Y H:i:s") . ' GMT', true); // Always modified
- self::setHeader('Cache-Control', 'no-store, no-cache, must-revalidate, post-check=0, pre-check=0', false);
+ self::setHeader('Cache-Control', 'no-cache', false);
self::setHeader('Pragma', 'no-cache'); // HTTP 1.0
}

Modified: development/branches/jcamp/libraries/joomla/factory.php
===================================================================
--- development/branches/jcamp/libraries/joomla/factory.php 2010-08-31 19:21:09 UTC (rev 18740)
+++ development/branches/jcamp/libraries/joomla/factory.php 2010-08-31 19:24:28 UTC (rev 18741)
@@ -561,7 +561,7 @@
$conf = self::getConfig();

$sendmail = $conf->get('sendmail');
- $smtpauth = $conf->get('smtpauth');
+ $smtpauth = ($conf->get('smtpauth') == 0) ? null : 1;
$smtpuser = $conf->get('smtpuser');
$smtppass = $conf->get('smtppass');
$smtphost = $conf->get('smtphost');

Modified: development/branches/jcamp/libraries/joomla/filesystem/path.php
===================================================================
--- development/branches/jcamp/libraries/joomla/filesystem/path.php 2010-08-31 19:21:09 UTC (rev 18740)
+++ development/branches/jcamp/libraries/joomla/filesystem/path.php 2010-08-31 19:24:28 UTC (rev 18741)
@@ -7,8 +7,12 @@
* @license GNU General Public License version 2 or later; see LICENSE.txt
*/

+// no direct access
+defined('JPATH_BASE') or die;
+
/** boolean True if a Windows based host */
define('JPATH_ISWIN', (strtoupper(substr(PHP_OS, 0, 3)) === 'WIN'));
+
/** boolean True if a Mac based host */
define('JPATH_ISMAC', (strtoupper(substr(PHP_OS, 0, 3)) === 'MAC'));

Modified: development/branches/jcamp/libraries/joomla/form/fields/groupedlist.php
===================================================================
--- development/branches/jcamp/libraries/joomla/form/fields/groupedlist.php 2010-08-31 19:21:09 UTC (rev 18740)
+++ development/branches/jcamp/libraries/joomla/form/fields/groupedlist.php 2010-08-31 19:24:28 UTC (rev 18741)
@@ -41,8 +41,8 @@
$groups = array();
$label = 0;

- foreach ($this->element->children() as $element) {
-
+ foreach ($this->element->children() as $element)
+ {
switch ($element->getName())
{
// The element is an <option />
@@ -92,15 +92,15 @@

// Create a new option object based on the <option /> element.
$tmp = JHtml::_('select.option',
- ($element['value']) ? (string) $element['value'] : JText::_(trim((string) $element)),
- JText::_(trim((string) $element)), 'value', 'text',
- ((string) $element['disabled']=='true'));
+ ($option['value']) ? (string) $option['value'] : JText::_(trim((string) $option)),
+ JText::_(trim((string) $option)), 'value', 'text',
+ ((string) $option['disabled']=='true'));

// Set some option attributes.
- $tmp->class = (string) $element['class'];
+ $tmp->class = (string) $option['class'];

// Set some JavaScript option attributes.
- $tmp->onclick = (string) $element['onclick'];
+ $tmp->onclick = (string) $option['onclick'];

// Add the option.
$groups[$label][] = $tmp;

Modified: development/branches/jcamp/libraries/joomla/form/formfield.php
===================================================================
--- development/branches/jcamp/libraries/joomla/form/formfield.php 2010-08-31 19:21:09 UTC (rev 18740)
+++ development/branches/jcamp/libraries/joomla/form/formfield.php 2010-08-31 19:24:28 UTC (rev 18741)
@@ -330,7 +330,7 @@
*/
protected function getId($fieldId, $fieldName, $group = null)
{
- // Initialize variables.
+ // Initialise variables.
$id = '';

// If there is a form control set for the attached form add it first.
@@ -379,9 +379,13 @@
*/
protected function getLabel()
{
- // Initialize variables.
+ // Initialise variables.
$label = '';

+ if ($this->hidden) {
+ return $label;
+ }
+
// Get the label text from the XML element, defaulting to the element name.
$text = $this->element['label'] ? (string) $this->element['label'] : (string) $this->element['name'];
$text = $this->translateLabel ? JText::_($text) : $text;
@@ -417,7 +421,7 @@
*/
protected function getName($fieldName, $group = null)
{
- // Initialize variables.
+ // Initialise variables.
$name = '';

// If there is a form control set for the attached form add it first.

Modified: development/branches/jcamp/libraries/joomla/form/rules/email.php
===================================================================
--- development/branches/jcamp/libraries/joomla/form/rules/email.php 2010-08-31 19:21:09 UTC (rev 18740)
+++ development/branches/jcamp/libraries/joomla/form/rules/email.php 2010-08-31 19:24:28 UTC (rev 18741)
@@ -26,7 +26,7 @@
* @var string
* @since 1.6
*/
- protected $regex = '[\w\.\-]+@\w+[\w\.\-]*?\.\w{1,4}';
+ protected $regex = '^[\w.-]+(\+[\w.-]+)*@\w+[\w.-]*?\.\w{2,4}$';

/**
* Method to test the email address and optionally check for uniqueness.
@@ -50,7 +50,7 @@
{
// If the field is empty and not required, the field is valid.
$required = ((string) $element['required'] == 'true' || (string) $element['required'] == 'required');
- if ($required && empty($value)) {
+ if (!$required && empty($value)) {
return true;
}

Modified: development/branches/jcamp/libraries/joomla/html/html/rules.php
===================================================================
--- development/branches/jcamp/libraries/joomla/html/html/rules.php 2010-08-31 19:21:09 UTC (rev 18740)
+++ development/branches/jcamp/libraries/joomla/html/html/rules.php 2010-08-31 19:24:28 UTC (rev 18741)
@@ -120,11 +120,7 @@
$html[] = ' <ul class="acllegend fltlft">';
$html[] = ' <li class="acl-allowed">'.JText::_('JALLOWED').'</li>';
$html[] = ' <li class="acl-denied">'.JText::_('JDENIED').'</li>';
- $html[] = ' </ul>';
- $html[] = ' <ul class="acllegend fltrt">';
- $html[] = ' <li class="acl-editgroups"><a href="#">'.JText::_('JLIB_HTML_ACCESS_EDIT_GROUPS').'</a></li>';
- $html[] = ' <li class="acl-resetbtn"><a href="#">'.JText::_('JLIB_HTML_ACCESS_RESET_TO_INHERIT').'</a></li>';
- $html[] = ' </ul>';
+ $html[] = ' </ul>';
$html[] = '</div>';

return implode("\n", $html);

Modified: development/branches/jcamp/libraries/joomla/html/html/string.php
===================================================================
--- development/branches/jcamp/libraries/joomla/html/html/string.php 2010-08-31 19:21:09 UTC (rev 18740)
+++ development/branches/jcamp/libraries/joomla/html/html/string.php 2010-08-31 19:24:28 UTC (rev 18741)
@@ -15,7 +15,7 @@
* @subpackage HTML
* @since 1.6
*/
-class JHtmlString
+abstract class JHtmlString
{
/**
* Truncates text blocks over the specified character limit and closes
@@ -28,7 +28,7 @@
* @param int $length The maximum length of the text.
* @return string The truncated text.
*/
- function truncate($text, $length = 0)
+ public static function truncate($text, $length = 0)
{
// Truncate the item text if it is too long.
if ($length > 0 && JString::strlen($text) > $length)
@@ -93,7 +93,7 @@
* @param int $intro The maximum length of the intro text.
* @return string The abridged text.
*/
- function abridge($text, $length = 50, $intro = 30)
+ public static function abridge($text, $length = 50, $intro = 30)
{
// Abridge the item text if it is too long.
if (JString::strlen($text) > $length) {

Modified: development/branches/jcamp/libraries/joomla/html/html.php
===================================================================
--- development/branches/jcamp/libraries/joomla/html/html.php 2010-08-31 19:21:09 UTC (rev 18740)
+++ development/branches/jcamp/libraries/joomla/html/html.php 2010-08-31 19:24:28 UTC (rev 18741)
@@ -7,6 +7,9 @@
* @license GNU General Public License version 2 or later; see LICENSE.txt
*/

+// no direct access
+defined('JPATH_BASE') or die;
+
JHtml::addIncludePath(JPATH_LIBRARIES.DS.'joomla'.DS.'html'.DS.'html');

jimport('joomla.environment.uri');
@@ -666,27 +669,29 @@
$done = array();
}

- // Load the calendar behavior
- JHtml::_('behavior.calendar');
- JHtml::_('behavior.tooltip');
-
- $readonly=isset($attribs['readonly']) && $attribs['readonly']=='readonly';
+ $readonly = isset($attribs['readonly']) && $attribs['readonly'] == 'readonly';
if (is_array($attribs)) {
$attribs = JArrayHelper::toString($attribs);
}

- // Only display the triggers once for each control.
- if (!in_array($id, $done))
- {
- $document = JFactory::getDocument();
- $document->addScriptDeclaration('window.addEvent(\'domready\', function() {Calendar.setup({
- inputField: "'.$id.'", // id of the input field
- ifFormat: "'.$format.'", // format of the input field
- button: "'.$id.'_img", // trigger for the calendar (button ID)
- align: "Tl", // alignment (defaults to "Bl")
- singleClick: true
- });});');
- $done[] = $id;
+ if (!$readonly) {
+ // Load the calendar behavior
+ JHtml::_('behavior.calendar');
+ JHtml::_('behavior.tooltip');
+
+ // Only display the triggers once for each control.
+ if (!in_array($id, $done))
+ {
+ $document = JFactory::getDocument();
+ $document->addScriptDeclaration('window.addEvent(\'domready\', function() {Calendar.setup({
+ inputField: "'.$id.'", // id of the input field
+ ifFormat: "'.$format.'", // format of the input field
+ button: "'.$id.'_img", // trigger for the calendar (button ID)
+ align: "Tl", // alignment (defaults to "Bl")
+ singleClick: true
+ });});');
+ $done[] = $id;
+ }
}

return '<input type="text" title="'.(0!==(int)$value ? JHtml::_('date',$value):'').'" name="'.$name.'" id="'.$id.'" value="'.htmlspecialchars($value, ENT_COMPAT, 'UTF-8').'" '.$attribs.' />'.

Modified: development/branches/jcamp/libraries/joomla/html/toolbar/button/link.php
===================================================================
--- development/branches/jcamp/libraries/joomla/html/toolbar/button/link.php 2010-08-31 19:21:09 UTC (rev 18740)
+++ development/branches/jcamp/libraries/joomla/html/toolbar/button/link.php 2010-08-31 19:24:28 UTC (rev 18741)
@@ -21,8 +21,6 @@
{
/**
* Button type
- *
- * @access protected
* @var string
*/
protected $_name = 'Link';
@@ -45,11 +43,13 @@
/**
* Get the button CSS Id
*
- * @access public
+ * @param string $type The button type.
+ * @param string $name The name of the button.
+ *
* @return string Button CSS Id
* @since 1.5
*/
- public function fetchId($name)
+ public function fetchId($type = 'Link', $name = '')
{
return $this->_parent->getName().'-'.$name;
}
@@ -57,8 +57,8 @@
/**
* Get the JavaScript command for the button
*
- * @access private
* @param object $definition Button definition
+ *
* @return string JavaScript command string
* @since 1.5
*/

Modified: development/branches/jcamp/libraries/joomla/installer/adapters/module.php
===================================================================
--- development/branches/jcamp/libraries/joomla/installer/adapters/module.php 2010-08-31 19:21:09 UTC (rev 18740)
+++ development/branches/jcamp/libraries/joomla/installer/adapters/module.php 2010-08-31 19:24:28 UTC (rev 18741)
@@ -84,10 +84,6 @@
*/
public function install()
{
- // if this is an update, set the route accordingly
- /*if ($this->parent->getUpgrade()) {
- $this->route = 'Update';
- }*/

// Get a database connector object
$db = $this->parent->getDbo();

Modified: development/branches/jcamp/libraries/joomla/language/language.php
===================================================================
--- development/branches/jcamp/libraries/joomla/language/language.php 2010-08-31 19:21:09 UTC (rev 18740)
+++ development/branches/jcamp/libraries/joomla/language/language.php 2010-08-31 19:24:28 UTC (rev 18741)
@@ -209,7 +209,7 @@
if (class_exists($class)) {
/* Class exists. Try to find
* -a transliterate method,
- * -a getPluralSuffices method,
+ * -a getPluralSuffixes method,
* -a getIgnoredSearchWords method
* -a getLowerLimitSearchWord method
* -a getUpperLimitSearchWord method
@@ -218,8 +218,8 @@
if (method_exists($class, 'transliterate')) {
$this->transliterator = array($class, 'transliterate');
}
- if (method_exists($class, 'getPluralSuffices')) {
- $this->pluralSufficesCallback = array($class, 'getPluralSuffices');
+ if (method_exists($class, 'getPluralSuffixes')) {
+ $this->pluralSufficesCallback = array($class, 'getPluralSuffixes');
}
if (method_exists($class, 'getIgnoredSearchWords')) {
$this->ignoredSearchWordsCallback = array($class, 'getIgnoredSearchWords');
@@ -361,7 +361,7 @@
* @return array The array of suffices
* @since 1.6
*/
- public function getPluralSuffices($count) {
+ public function getPluralSuffixes($count) {
if ($this->pluralSufficesCallback !== null) {
return call_user_func($this->pluralSufficesCallback, $count);
}
@@ -376,7 +376,7 @@
* @return string|function Function name or the actual function for PHP 5.3
* @since 1.6
*/
- public function getPluralSufficesCallback() {
+ public function getPluralSuffixesCallback() {
return $this->pluralSufficesCallback;
}

@@ -679,50 +679,84 @@
/**
* Parses a language file
*
- * @param string The name of the file
+ * @param string $filename The name of the file.
+ *
+ * @return array The array of parsed strings.
* @since 1.6
*/
protected function parse($filename)
{
$version = phpversion();
- if($version >= "5.3.1") {
+
+ // Capture hidden PHP errors from the parsing.
+ $php_errormsg = null;
+ $track_errors = ini_get('track_errors');
+ ini_set('track_errors', true);
+
+ if ($version >= '5.3.1') {
$contents = file_get_contents($filename);
$contents = str_replace('_QQ_','"\""',$contents);
- $strings = (array) @parse_ini_string($contents);
- } else {
- $strings = (array) @parse_ini_file($filename);
- if ($version == "5.3.0") {
+ $strings = @parse_ini_string($contents);
+ }
+ else {
+ $strings = @parse_ini_file($filename);
+ if ($version == '5.3.0' && is_array($strings)) {
foreach($strings as $key => $string) {
$strings[$key]=str_replace('_QQ_','"',$string);
}
}
}
+
+ // Restore error tracking to what it was before.
+ ini_set('track_errors',$track_errors);
+
+ if (!is_array($strings)) {
+ $strings = array();
+ }
+
if ($this->debug) {
+ // Initialise variables for manually parsing the file for common errors.
+ $blacklist = array('YES','NO','NULL','FALSE','ON','OFF','NONE','TRUE');
+ $regex = '/^(|(\[[^\]]*\])|([A-Z][A-Z0-9_\-]*\s*=(\s*(("[^"]*")|(_QQ_)))+))\s*(;.*)?$/';
$this->debug = false;
- $errors = array();
- $lineNumber = 0;
- $stream = new JStream();
+ $errors = array();
+ $lineNumber = 0;
+
+ // Open the file as a stream.
+ $stream = new JStream();
$stream->open($filename);
- while(!$stream->eof())
+
+ while (!$stream->eof())
{
$line = $stream->gets();
$lineNumber++;
- if (!preg_match('/^(|(\[[^\]]*\])|([A-Z][A-Z0-9_\-]*\s*=(\s*(("[^"]*")|(_QQ_)))+))\s*(;.*)?$/',$line))
- {
+
+ // Check that the key is not in the blacklist and that the line format passes the regex.
+ $key = strtoupper(trim(substr($line, 0, strpos($line, '='))));
+ if (!preg_match($regex, $line) || in_array($key, $blacklist)) {
$errors[] = $lineNumber;
}
}
+
$stream->close();
+
+ // Check if we encountered any errors.
if (count($errors)) {
- if (basename($filename)!=$this->lang.'.ini') {
- $this->errorfiles[$filename] = $filename.JText::sprintf('JERROR_PARSING_LANGUAGE_FILE',implode(', ',$errors));
+ if (basename($filename) != $this->lang.'.ini') {
+ $this->errorfiles[$filename] = $filename.JText::sprintf('JERROR_PARSING_LANGUAGE_FILE', implode(', ', $errors));
}
else {
- $this->errorfiles[$filename] = $filename . '&#160;: error(s) in line(s) ' . implode(', ',$errors);
+ $this->errorfiles[$filename] = $filename . '&#160;: error(s) in line(s) ' . implode(', ', $errors);
}
}
+ else if ($php_errormsg) {
+ // We didn't find any errors but there's probably a parse notice.
+ $this->errorfiles['PHP'.$filename] = 'PHP parser errors :'.$php_errormsg;
+ }
+
$this->debug = true;
}
+
return $strings;
}

Modified: development/branches/jcamp/libraries/joomla/mail/helper.php
===================================================================
--- development/branches/jcamp/libraries/joomla/mail/helper.php 2010-08-31 19:21:09 UTC (rev 18740)
+++ development/branches/jcamp/libraries/joomla/mail/helper.php 2010-08-31 19:24:28 UTC (rev 18741)
@@ -11,8 +11,8 @@
defined('JPATH_BASE') or die;

/**
- * E-Mail helper class, provides static methods to perform various tasks relevant
- * to the Joomla e-mail routines.
+ * Email helper class, provides static methods to perform various tasks relevant
+ * to the Joomla email routines.
*
* TODO: Test these methods as the regex work is first run and not tested thoroughly
*
@@ -48,16 +48,16 @@
}

/**
- * Cleans any injected headers from the E-Mail body.
+ * Cleans any injected headers from the email body.
*
* @static
- * @param string $body E-Mail body string.
- * @return string Cleaned E-Mail body string.
+ * @param string $body email body string.
+ * @return string Cleaned email body string.
* @since 1.5
*/
public static function cleanBody($body)
{
- // Strip all E-Mail headers from a string
+ // Strip all email headers from a string
return preg_replace("/((From:|To:|Cc:|Bcc:|Subject:|Content-type:) ([\S]+))/", "", $body);
}

@@ -65,8 +65,8 @@
* Cleans any injected headers from the subject string.
*
* @static
- * @param string $subject E-Mail subject string.
- * @return string Cleaned E-Mail subject string.
+ * @param string $subject email subject string.
+ * @return string Cleaned email subject string.
* @since 1.5
*/
public static function cleanSubject($subject)
@@ -75,11 +75,11 @@
}

/**
- * Verifies that an e-mail address does not have any extra headers injected into it.
+ * Verifies that an email address does not have any extra headers injected into it.
*
* @static
- * @param string $address E-Mail address.
- * @return string|false E-Mail address string or boolean false if injected headers are present.
+ * @param string $address email address.
+ * @return string|false email address string or boolean false if injected headers are present.
* @since 1.5
*/
public static function cleanAddress($address)
@@ -91,7 +91,7 @@
}

/**
- * Verifies that the string is in a proper e-mail address format.
+ * Verifies that the string is in a proper email address format.
*
* @static
* @param string $email String to be verified.

Modified: development/branches/jcamp/libraries/joomla/mail/mail.php
===================================================================
--- development/branches/jcamp/libraries/joomla/mail/mail.php 2010-08-31 19:21:09 UTC (rev 18740)
+++ development/branches/jcamp/libraries/joomla/mail/mail.php 2010-08-31 19:24:28 UTC (rev 18741)
@@ -14,7 +14,7 @@
jimport('joomla.mail.helper');

/**
- * E-Mail Class. Provides a common interface to send e-mail from the Joomla! Framework
+ * Email Class. Provides a common interface to send email from the Joomla! Framework
*
* @package Joomla.Framework
* @subpackage Mail
@@ -32,7 +32,7 @@
}

/**
- * Returns the global e-mail object, only creating it
+ * Returns the global email object, only creating it
* if it doesn't already exist.
*
* NOTE: If you need an instance to use that does not have the global configuration
@@ -79,11 +79,11 @@
}

/**
- * Set the E-Mail sender
+ * Set the email sender
*
- * @param array E-Mail address and Name of sender
+ * @param array email address and Name of sender
* <pre>
- * array([0] => E-Mail Address [1] => Name)
+ * array([0] => email Address [1] => Name)
* </pre>
* @return JMail Returns this object for chaining.
* @since 1.5
@@ -108,9 +108,9 @@
}

/**
- * Set the E-Mail subject
+ * Set the email subject
*
- * @param string Subject of the e-mail
+ * @param string Subject of the email
* @return JMail Returns this object for chaining.
* @since 1.5
*/
@@ -122,9 +122,9 @@
}

/**
- * Set the E-Mail body
+ * Set the email body
*
- * @param string Body of the e-mail
+ * @param string Body of the email
* @return JMail Returns this object for chaining.
* @since 1.5
*/
@@ -142,7 +142,7 @@
/**
* Add recipients to the email
*
- * @param mixed Either a string or array of strings [e-mail address(es)]
+ * @param mixed Either a string or array of strings [email address(es)]
* @return JMail Returns this object for chaining.
* @since 1.5
*/
@@ -165,7 +165,7 @@
/**
* Add carbon copy recipients to the email
*
- * @param mixed Either a string or array of strings [e-mail address(es)]
+ * @param mixed Either a string or array of strings [email address(es)]
* @return JMail Returns this object for chaining.
* @since 1.5
*/
@@ -190,7 +190,7 @@
/**
* Add blind carbon copy recipients to the email
*
- * @param mixed Either a string or array of strings [e-mail address(es)]
+ * @param mixed Either a string or array of strings [email address(es)]
* @return JMail Returns this object for chaining.
* @since 1.5
*/
@@ -236,11 +236,11 @@
}

/**
- * Add Reply to e-mail address(es) to the e-mail
+ * Add Reply to email address(es) to the email
*
* @param array Either an array or multi-array of form
* <pre>
- * array([0] => E-Mail Address [1] => Name)
+ * array([0] => email Address [1] => Name)
* </pre>
* @return JMail Returns this object for chaining.
* @since 1.5
@@ -264,7 +264,7 @@
}

/**
- * Use sendmail for sending the e-mail
+ * Use sendmail for sending the email
*
* @param string Path to sendmail [optional]
* @return boolean True on success
@@ -284,7 +284,7 @@
}

/**
- * Use SMTP for sending the e-mail
+ * Use SMTP for sending the email
*
* @param string SMTP Authentication [optional]
* @param string SMTP Host [optional]
@@ -305,26 +305,29 @@
$this->SMTPSecure = $secure;
}

- if ($this->SMTPAuth !== null && $this->Host !== null && $this->Username !== null && $this->Password !== null) {
+ if (($this->SMTPAuth !== null && $this->Host !== null && $this->Username !== null && $this->Password !== null)
+ || ($this->SMTPAuth === null && $this->Host !== null)) {
$this->IsSMTP();
return true;
- } else {
+ }
+ else {
$this->IsMail();
+
return false;
}
}

/**
- * Function to send an e-mail
+ * Function to send an email
*
- * @param string From e-mail address
+ * @param string From email address
* @param string From name
- * @param mixed Recipient e-mail address(es)
- * @param string E-mail subject
+ * @param mixed Recipient email address(es)
+ * @param string email subject
* @param string Message body
* @param boolean false = plain text, true = HTML
- * @param mixed CC e-mail address(es)
- * @param mixed BCC e-mail address(es)
+ * @param mixed CC email address(es)
+ * @param mixed BCC email address(es)
* @param mixed Attachment file name(s)
* @param mixed Reply to email address(es)
* @param mixed Reply to name(s)

Modified: development/branches/jcamp/libraries/joomla/methods.php
===================================================================
--- development/branches/jcamp/libraries/joomla/methods.php 2010-08-31 19:21:09 UTC (rev 18740)
+++ development/branches/jcamp/libraries/joomla/methods.php 2010-08-31 19:24:28 UTC (rev 18741)
@@ -166,7 +166,7 @@
if ($count > 1) {
// Try the key from the language plural potential suffixes
$found = false;
- $suffixes = $lang->getPluralSuffices((int)$n);
+ $suffixes = $lang->getPluralSuffixes((int)$n);
foreach ($suffixes as $suffix) {
$key = $string.'_'.$suffix;
if ($lang->hasKey($key)) {

Modified: development/branches/jcamp/libraries/joomla/utilities/string.php
===================================================================
--- development/branches/jcamp/libraries/joomla/utilities/string.php 2010-08-31 19:21:09 UTC (rev 18740)
+++ development/branches/jcamp/libraries/joomla/utilities/string.php 2010-08-31 19:24:28 UTC (rev 18741)
@@ -329,6 +329,10 @@
*/
public static function ltrim($str, $charlist = FALSE)
{
+ if (empty($charlist) && $charlist !== false) {
+ return $str;
+ }
+
jimport('phputf8.trim');
if ( $charlist === FALSE ) {
return utf8_ltrim( $str );
@@ -353,6 +357,10 @@
*/
public static function rtrim($str, $charlist = FALSE)
{
+ if (empty($charlist) && $charlist !== false) {
+ return $str;
+ }
+
jimport('phputf8.trim');
if ( $charlist === FALSE ) {
return utf8_rtrim($str);
@@ -377,6 +385,10 @@
*/
public static function trim($str, $charlist = FALSE)
{
+ if (empty($charlist) && $charlist !== false) {
+ return $str;
+ }
+
jimport('phputf8.trim');
if ( $charlist === FALSE ) {
return utf8_trim( $str );

Modified: development/branches/jcamp/libraries/joomla/utilities/utility.php
===================================================================
--- development/branches/jcamp/libraries/joomla/utilities/utility.php 2010-08-31 19:21:09 UTC (rev 18740)
+++ development/branches/jcamp/libraries/joomla/utilities/utility.php 2010-08-31 19:24:28 UTC (rev 18741)
@@ -23,14 +23,14 @@
/**
* Mail function (uses phpMailer)
*
- * @param string $from From e-mail address
+ * @param string $from From email address
* @param string $fromname From name
- * @param mixed $recipient Recipient e-mail address(es)
- * @param string $subject E-mail subject
+ * @param mixed $recipient Recipient email address(es)
+ * @param string $subject email subject
* @param string $body Message body
* @param boolean $mode false = plain text, true = HTML
- * @param mixed $cc CC e-mail address(es)
- * @param mixed $bcc BCC e-mail address(es)
+ * @param mixed $cc CC email address(es)
+ * @param mixed $bcc BCC email address(es)
* @param mixed $attachment Attachment file name(s)
* @param mixed $replyto Reply to email address(es)
* @param mixed $replytoname Reply to name(s)

Modified: development/branches/jcamp/libraries/joomla/version.php
===================================================================
--- development/branches/jcamp/libraries/joomla/version.php 2010-08-31 19:21:09 UTC (rev 18740)
+++ development/branches/jcamp/libraries/joomla/version.php 2010-08-31 19:24:28 UTC (rev 18741)
@@ -22,7 +22,7 @@
/** @public int Main Release Level */
public $RELEASE = '1.6';
/** @public string Development Status */
- public $DEV_STATUS = 'Beta7';
+ public $DEV_STATUS = 'Beta8';
/** @public int Sub Release Level */
public $DEV_LEVEL = '0';
/** @public int build Number */
@@ -30,7 +30,7 @@
/** @public string Codename */
public $CODENAME = 'Hope';
/** @public string Date */
- public $RELDATE = '9-Aug-2010';
+ public $RELDATE = '23-Aug-2010';
/** @public string Time */
public $RELTIME = '23:00';
/** @public string Timezone */

Modified: development/branches/jcamp/libraries/phpmailer/phpmailer.php
===================================================================
--- development/branches/jcamp/libraries/phpmailer/phpmailer.php 2010-08-31 19:21:09 UTC (rev 18740)
+++ development/branches/jcamp/libraries/phpmailer/phpmailer.php 2010-08-31 19:24:28 UTC (rev 18741)
@@ -2,14 +2,16 @@
/*~ class.phpmailer.php
.---------------------------------------------------------------------------.
| Software: PHPMailer - PHP email class |
-| Version: 2.3 |
-| Contact: via sourceforge.net support pages (also www.codeworxtech.com) |
+| Version: 5.1 |
+| Contact: via sourceforge.net support pages (also www.worxware.com) |
| Info: http://phpmailer.sourceforge.net |
| Support: http://sourceforge.net/projects/phpmailer/ |
| ------------------------------------------------------------------------- |
-| Author: Andy Prevost (project admininistrator) |
-| Author: Brent R. Matzelle (original founder) |
-| Copyright (c) 2004-2007, Andy Prevost. All Rights Reserved. |
+| Admin: Andy Prevost (project admininistrator) |
+| Authors: Andy Prevost (codeworxtech) codewo...@users.sourceforge.net |
+| : Marcus Bointon (coolbru) coo...@users.sourceforge.net |
+| Founder: Brent R. Matzelle (original founder) |
+| Copyright (c) 2004-2009, Andy Prevost. All Rights Reserved. |
| Copyright (c) 2001-2003, Brent R. Matzelle |
| ------------------------------------------------------------------------- |
| License: Distributed under the Lesser General Public License (LGPL) |
@@ -18,20 +20,26 @@
| ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or |
| FITNESS FOR A PARTICULAR PURPOSE. |
| ------------------------------------------------------------------------- |
-| We offer a number of paid services (www.codeworxtech.com): |
+| We offer a number of paid services (www.worxware.com): |
| - Web Hosting on highly optimized fast and secure servers |
| - Technology Consulting |
| - Oursourcing (highly qualified programmers and graphic designers) |
'---------------------------------------------------------------------------'
+*/

/**
* PHPMailer - PHP email transport class
- * NOTE: Designed for use with PHP version 5 and up
+ * NOTE: Requires PHP version 5 or later
* @package PHPMailer
* @author Andy Prevost
- * @copyright 2004 - 2008 Andy Prevost
+ * @author Marcus Bointon
+ * @copyright 2004 - 2009 Andy Prevost
+ * @version $Id$
+ * @license http://www.gnu.org/copyleft/lesser.html GNU Lesser General Public License
*/

+if (version_compare(PHP_VERSION, '5.0.0', '<') ) exit("Sorry, this version of PHPMailer will only run on PHP version 5 or greater!\n");
+
class PHPMailer {

/////////////////////////////////////////////////
@@ -57,8 +65,8 @@
public $ContentType = 'text/plain';

/**
- * Sets the Encoding of the message. Options for this are "8bit",
- * "7bit", "binary", "base64", and "quoted-printable".
+ * Sets the Encoding of the message. Options for this are
+ * "8bit", "7bit", "binary", "base64", and "quoted-printable".
* @var string
*/
public $Encoding = '8bit';
@@ -130,19 +138,13 @@
public $Sendmail = '/usr/sbin/sendmail';

/**
- * Path to PHPMailer plugins. This is now only useful if the SMTP class
+ * Path to PHPMailer plugins. Useful if the SMTP class
* is in a different directory than the PHP include path.
* @var string
*/
public $PluginDir = '';

/**
- * Holds PHPMailer version.
- * @var string
- */
- public $Version = "2.3";
-
- /**
* Sets the email address that a reading confirmation will be sent.
* @var string
*/
@@ -194,7 +196,7 @@
* Options are "", "ssl" or "tls"
* @var string
*/
- public $SMTPSecure = "";
+ public $SMTPSecure = '';

/**
* Sets SMTP authentication. Utilizes the Username and Password variables.
@@ -215,8 +217,8 @@
public $Password = '';

/**
- * Sets the SMTP server timeout in seconds. This function will not
- * work with the win32 version.
+ * Sets the SMTP server timeout in seconds.
+ * This function will not work with the win32 version.
* @var int
*/
public $Timeout = 10;
@@ -243,13 +245,65 @@
public $SingleTo = false;

/**
+ * If SingleTo is true, this provides the array to hold the email addresses
+ * @var bool
+ */
+ public $SingleToArray = array();
+
+ /**
* Provides the ability to change the line ending
* @var string
*/
- public $LE = "\r\n";
+ public $LE = "\n";

+ /**
+ * Used with DKIM DNS Resource Record
+ * @var string
+ */
+ public $DKIM_selector = 'phpmailer';
+
+ /**
+ * Used with DKIM DNS Resource Record
+ * optional, in format of email address 'y...@yourdomain.com'
+ * @var string
+ */
+ public $DKIM_identity = '';
+
+ /**
+ * Used with DKIM DNS Resource Record
+ * optional, in format of email address 'y...@yourdomain.com'
+ * @var string
+ */
+ public $DKIM_domain = '';
+
+ /**
+ * Used with DKIM DNS Resource Record
+ * optional, in format of email address 'y...@yourdomain.com'
+ * @var string
+ */
+ public $DKIM_private = '';
+
+ /**
+ * Callback Action function name
+ * the function that handles the result of the send email action. Parameters:
+ * bool $result result of the send action
+ * string $to email address of the recipient
+ * string $cc cc email addresses
+ * string $bcc bcc email addresses
+ * string $subject the subject
+ * string $body the email body
+ * @var string
+ */
+ public $action_function = ''; //'callbackAction';
+
+ /**
+ * Sets the PHPMailer Version number
+ * @var string
+ */
+ public $Version = '5.1';
+
/////////////////////////////////////////////////
- // PROPERTIES, PRIVATE
+ // PROPERTIES, PRIVATE AND PROTECTED
/////////////////////////////////////////////////

private $smtp = NULL;
@@ -257,27 +311,45 @@
private $cc = array();
private $bcc = array();
private $ReplyTo = array();
+ private $all_recipients = array();
private $attachment = array();
private $CustomHeader = array();
private $message_type = '';
private $boundary = array();
- private $language = array();
+ protected $language = array();
private $error_count = 0;
private $sign_cert_file = "";
private $sign_key_file = "";
private $sign_key_pass = "";
+ private $exceptions = false;

/////////////////////////////////////////////////
+ // CONSTANTS
+ /////////////////////////////////////////////////
+
+ const STOP_MESSAGE = 0; // message only, continue processing
+ const STOP_CONTINUE = 1; // message?, likely ok to continue processing
+ const STOP_CRITICAL = 2; // message, plus full stop, critical error reached
+
+ /////////////////////////////////////////////////
// METHODS, VARIABLES
/////////////////////////////////////////////////

/**
+ * Constructor
+ * @param boolean $exceptions Should we throw external exceptions?
+ */
+ public function __construct($exceptions = false) {
+ $this->exceptions = ($exceptions == true);
+ }
+
+ /**
* Sets message type to HTML.
- * @param bool $bool
+ * @param bool $ishtml
* @return void
*/
- public function IsHTML($bool) {
- if($bool == true) {
+ public function IsHTML($ishtml = true) {
+ if ($ishtml) {
$this->ContentType = 'text/html';
} else {
$this->ContentType = 'text/plain';
@@ -305,6 +377,9 @@
* @return void
*/
public function IsSendmail() {
+ if (!stristr(ini_get('sendmail_path'), 'sendmail')) {
+ $this->Sendmail = '/var/qmail/bin/sendmail';
+ }
$this->Mailer = 'sendmail';
}

@@ -313,7 +388,9 @@
* @return void
*/
public function IsQmail() {
+ if (stristr(ini_get('sendmail_path'), 'qmail')) {
$this->Sendmail = '/var/qmail/bin/sendmail';
+ }
$this->Mailer = 'sendmail';
}

@@ -325,54 +402,136 @@
* Adds a "To" address.
* @param string $address
* @param string $name
- * @return void
+ * @return boolean true on success, false if address already used
*/
public function AddAddress($address, $name = '') {
- $cur = count($this->to);
- $this->to[$cur][0] = trim($address);
- $this->to[$cur][1] = $name;
+ return $this->AddAnAddress('to', $address, $name);
}

/**
- * Adds a "Cc" address. Note: this function works
- * with the SMTP mailer on win32, not with the "mail"
- * mailer.
+ * Adds a "Cc" address.
+ * Note: this function works with the SMTP mailer on win32, not with the "mail" mailer.
* @param string $address
* @param string $name
- * @return void
+ * @return boolean true on success, false if address already used
*/
public function AddCC($address, $name = '') {
- $cur = count($this->cc);
- $this->cc[$cur][0] = trim($address);
- $this->cc[$cur][1] = $name;
+ return $this->AddAnAddress('cc', $address, $name);
}

/**
- * Adds a "Bcc" address. Note: this function works
- * with the SMTP mailer on win32, not with the "mail"
- * mailer.
+ * Adds a "Bcc" address.
+ * Note: this function works with the SMTP mailer on win32, not with the "mail" mailer.
* @param string $address
* @param string $name
- * @return void
+ * @return boolean true on success, false if address already used
*/
public function AddBCC($address, $name = '') {
- $cur = count($this->bcc);
- $this->bcc[$cur][0] = trim($address);
- $this->bcc[$cur][1] = $name;
+ return $this->AddAnAddress('bcc', $address, $name);
}

/**
* Adds a "Reply-to" address.
* @param string $address
* @param string $name
- * @return void
+ * @return boolean
*/
public function AddReplyTo($address, $name = '') {
- $cur = count($this->ReplyTo);
- $this->ReplyTo[$cur][0] = trim($address);
- $this->ReplyTo[$cur][1] = $name;
+ return $this->AddAnAddress('ReplyTo', $address, $name);
}

+ /**
+ * Adds an address to one of the recipient arrays
+ * Addresses that have been added already return false, but do not throw exceptions
+ * @param string $kind One of 'to', 'cc', 'bcc', 'ReplyTo'
+ * @param string $address The email address to send to
+ * @param string $name
+ * @return boolean true on success, false if address already used or invalid in some way
+ * @access private
+ */
+ private function AddAnAddress($kind, $address, $name = '') {
+ if (!preg_match('/^(to|cc|bcc|ReplyTo)$/', $kind)) {
+ echo 'Invalid recipient array: ' . kind;
+ return false;
+ }
+ $address = trim($address);
+ $name = trim(preg_replace('/[\r\n]+/', '', $name)); //Strip breaks and trim
+ if (!self::ValidateAddress($address)) {
+ $this->SetError($this->Lang('invalid_address').': '. $address);
+ if ($this->exceptions) {
+ throw new phpmailerException($this->Lang('invalid_address').': '.$address);
+ }
+ echo $this->Lang('invalid_address').': '.$address;
+ return false;
+ }
+ if ($kind != 'ReplyTo') {
+ if (!isset($this->all_recipients[strtolower($address)])) {
+ array_push($this->$kind, array($address, $name));
+ $this->all_recipients[strtolower($address)] = true;
+ return true;
+ }
+ } else {
+ if (!array_key_exists(strtolower($address), $this->ReplyTo)) {
+ $this->ReplyTo[strtolower($address)] = array($address, $name);
+ return true;
+ }
+ }
+ return false;
+}
+
+/**
+ * Set the From and FromName properties
+ * @param string $address
+ * @param string $name
+ * @return boolean
+ */
+ public function SetFrom($address, $name = '',$auto=1) {
+ $address = trim($address);
+ $name = trim(preg_replace('/[\r\n]+/', '', $name)); //Strip breaks and trim
+ if (!self::ValidateAddress($address)) {
+ $this->SetError($this->Lang('invalid_address').': '. $address);
+ if ($this->exceptions) {
+ throw new phpmailerException($this->Lang('invalid_address').': '.$address);
+ }
+ echo $this->Lang('invalid_address').': '.$address;
+ return false;
+ }
+ $this->From = $address;
+ $this->FromName = $name;
+ if ($auto) {
+ if (empty($this->ReplyTo)) {
+ $this->AddAnAddress('ReplyTo', $address, $name);
+ }
+ if (empty($this->Sender)) {
+ $this->Sender = $address;
+ }
+ }
+ return true;
+ }
+
+ /**
+ * Check that a string looks roughly like an email address should
+ * Static so it can be used without instantiation
+ * Tries to use PHP built-in validator in the filter extension (from PHP 5.2), falls back to a reasonably competent regex validator
+ * Conforms approximately to RFC2822
+ * @link http://www.hexillion.com/samples/#Regex Original pattern found here
+ * @param string $address The email address to check
+ * @return boolean
+ * @static
+ * @access public
+ */
+ public static function ValidateAddress($address) {
+ if (function_exists('filter_var')) { //Introduced in PHP 5.2
+ if(filter_var($address, FILTER_VALIDATE_EMAIL) === FALSE) {
+ return false;
+ } else {
+ return true;
+ }
+ } else {
+ return preg_match('/^(?:[\w\!\#\$\%\&\'\*\+\-\/\=\?\^\`\{\|\}\~]+\.)*[\w\!\#\$\%\&\'\*\+\-\/\=\?\^\`\{\|\}\~]+@(?:(?:(?:[a-zA-Z0-9_](?:[a-zA-Z0-9_\-](?!\.)){0,61}[a-zA-Z0-9_-]?\.)+[a-zA-Z0-9_](?:[a-zA-Z0-9_\-](?!$)){0,61}[a-zA-Z0-9_]?)|(?:\[(?:(?:[01]?\d{1,2}|2[0-4]\d|25[0-5])\.){3}(?:[01]?\d{1,2}|2[0-4]\d|25[0-5])\]))$/', $address);
+ }
+ }
+
/////////////////////////////////////////////////
// METHODS, MAIL SENDING
/////////////////////////////////////////////////
@@ -384,98 +543,111 @@
* @return bool
*/
public function Send() {
- $header = '';
- $body = '';
- $result = true;
-
+ try {
if((count($this->to) + count($this->cc) + count($this->bcc)) < 1) {
- $this->SetError($this->Lang('provide_address'));
- return false;
+ throw new phpmailerException($this->Lang('provide_address'), self::STOP_CRITICAL);
}

- /* Set whether the message is multipart/alternative */
+ // Set whether the message is multipart/alternative
if(!empty($this->AltBody)) {
$this->ContentType = 'multipart/alternative';
}

$this->error_count = 0; // reset errors
$this->SetMessageType();
- $header .= $this->CreateHeader();
+ $header = $this->CreateHeader();
$body = $this->CreateBody();

- if($body == '') {
- return false;
+ if (empty($this->Body)) {
+ throw new phpmailerException($this->Lang('empty_message'), self::STOP_CRITICAL);
+ }
+
+ // digitally sign with DKIM if enabled
+ if ($this->DKIM_domain && $this->DKIM_private) {
+ $header_dkim = $this->DKIM_Add($header,$this->Subject,$body);
+ $header = str_replace("\r\n","\n",$header_dkim) . $header;
}

- /* Choose the mailer */
+ // Choose the mailer and send through it
switch($this->Mailer) {
case 'sendmail':
- $result = $this->SendmailSend($header, $body);
- break;
+ return $this->SendmailSend($header, $body);
case 'smtp':
- $result = $this->SmtpSend($header, $body);
- break;
- case 'mail':
- $result = $this->MailSend($header, $body);
- break;
+ return $this->SmtpSend($header, $body);
default:
- $result = $this->MailSend($header, $body);
- break;
- //$this->SetError($this->Mailer . $this->Lang('mailer_not_supported'));
- //$result = false;
- //break;
+ return $this->MailSend($header, $body);
}

- return $result;
+ } catch (phpmailerException $e) {
+ $this->SetError($e->getMessage());
+ if ($this->exceptions) {
+ throw $e;
+ }
+ echo $e->getMessage()."\n";
+ return false;
+ }
}

/**
* Sends mail using the $Sendmail program.
- * @access public
+ * @param string $header The message headers
+ * @param string $body The message body
+ * @access protected
* @return bool
*/
- public function SendmailSend($header, $body) {
+ protected function SendmailSend($header, $body) {
if ($this->Sender != '') {
$sendmail = sprintf("%s -oi -f %s -t", escapeshellcmd($this->Sendmail), escapeshellarg($this->Sender));
} else {
$sendmail = sprintf("%s -oi -t", escapeshellcmd($this->Sendmail));
}
-
+ if ($this->SingleTo === true) {
+ foreach ($this->SingleToArray as $key => $val) {
if(!@$mail = popen($sendmail, 'w')) {
- $this->SetError($this->Lang('execute') . $this->Sendmail);
- return false;
+ throw new phpmailerException($this->Lang('execute') . $this->Sendmail, self::STOP_CRITICAL);
}
-
+ fputs($mail, "To: " . $val . "\n");
fputs($mail, $header);
fputs($mail, $body);
-
$result = pclose($mail);
- if (version_compare(phpversion(), '4.2.3') == -1) {
- $result = $result >> 8 & 0xFF;
+ // implement call back function if it exists
+ $isSent = ($result == 0) ? 1 : 0;
+ $this->doCallback($isSent,$val,$this->cc,$this->bcc,$this->Subject,$body);
+ if($result != 0) {
+ throw new phpmailerException($this->Lang('execute') . $this->Sendmail, self::STOP_CRITICAL);
+ }
+ }
+ } else {
+ if(!@$mail = popen($sendmail, 'w')) {
+ throw new phpmailerException($this->Lang('execute') . $this->Sendmail, self::STOP_CRITICAL);
}
+ fputs($mail, $header);
+ fputs($mail, $body);
+ $result = pclose($mail);
+ // implement call back function if it exists
+ $isSent = ($result == 0) ? 1 : 0;
+ $this->doCallback($isSent,$this->to,$this->cc,$this->bcc,$this->Subject,$body);
if($result != 0) {
- $this->SetError($this->Lang('execute') . $this->Sendmail);
- return false;
+ throw new phpmailerException($this->Lang('execute') . $this->Sendmail, self::STOP_CRITICAL);
+ }
}
-
return true;
}

/**
* Sends mail using the PHP mail() function.
- * @access public
+ * @param string $header The message headers
+ * @param string $body The message body
+ * @access protected
* @return bool
*/
- public function MailSend($header, $body) {
-
- $to = '';
- for($i = 0; $i < count($this->to); $i++) {
- if($i != 0) { $to .= ', '; }
- $to .= $this->AddrFormat($this->to[$i]);
+ protected function MailSend($header, $body) {
+ $toArr = array();
+ foreach($this->to as $t) {
+ $toArr[] = $this->AddrFormat($t);
}
+ $to = implode(', ', $toArr);

- $toArr = split(',', $to);
-
$params = sprintf("-oi -f %s", $this->Sender);
if ($this->Sender != '' && strlen(ini_get('safe_mode'))< 1) {
$old_from = ini_get('sendmail_from');
@@ -483,120 +655,135 @@
if ($this->SingleTo === true && count($toArr) > 1) {
foreach ($toArr as $key => $val) {
$rt = @mail($val, $this->EncodeHeader($this->SecureHeader($this->Subject)), $body, $header, $params);
+ // implement call back function if it exists
+ $isSent = ($rt == 1) ? 1 : 0;
+ $this->doCallback($isSent,$val,$this->cc,$this->bcc,$this->Subject,$body);
}
} else {
$rt = @mail($to, $this->EncodeHeader($this->SecureHeader($this->Subject)), $body, $header, $params);
+ // implement call back function if it exists
+ $isSent = ($rt == 1) ? 1 : 0;
+ $this->doCallback($isSent,$to,$this->cc,$this->bcc,$this->Subject,$body);
}
} else {
if ($this->SingleTo === true && count($toArr) > 1) {
foreach ($toArr as $key => $val) {
$rt = @mail($val, $this->EncodeHeader($this->SecureHeader($this->Subject)), $body, $header, $params);
+ // implement call back function if it exists
+ $isSent = ($rt == 1) ? 1 : 0;
+ $this->doCallback($isSent,$val,$this->cc,$this->bcc,$this->Subject,$body);
}
} else {
$rt = @mail($to, $this->EncodeHeader($this->SecureHeader($this->Subject)), $body, $header);
+ // implement call back function if it exists
+ $isSent = ($rt == 1) ? 1 : 0;
+ $this->doCallback($isSent,$to,$this->cc,$this->bcc,$this->Subject,$body);
}
}
-
if (isset($old_from)) {
ini_set('sendmail_from', $old_from);
}
-
if(!$rt) {
- $this->SetError($this->Lang('instantiate'));
- return false;
+ throw new phpmailerException($this->Lang('instantiate'), self::STOP_CRITICAL);
}
-
return true;
}

/**
- * Sends mail via SMTP using PhpSMTP (Author:
- * Chris Ryan). Returns bool. Returns false if there is a
- * bad MAIL FROM, RCPT, or DATA input.
- * @access public
+ * Sends mail via SMTP using PhpSMTP
+ * Returns false if there is a bad MAIL FROM, RCPT, or DATA input.
+ * @param string $header The message headers
+ * @param string $body The message body
+ * @uses SMTP
+ * @access protected
* @return bool
*/
- public function SmtpSend($header, $body) {
- include_once($this->PluginDir . 'smtp.php');
- $error = '';
+ protected function SmtpSend($header, $body) {
+ require_once $this->PluginDir . 'smtp.php';
$bad_rcpt = array();

if(!$this->SmtpConnect()) {
- return false;
+ throw new phpmailerException($this->Lang('smtp_connect_failed'), self::STOP_CRITICAL);
}
-
$smtp_from = ($this->Sender == '') ? $this->From : $this->Sender;
if(!$this->smtp->Mail($smtp_from)) {
- $error = $this->Lang('from_failed') . $smtp_from;
- $this->SetError($error);
- $this->smtp->Reset();
- return false;
+ throw new phpmailerException($this->Lang('from_failed') . $smtp_from, self::STOP_CRITICAL);
}

- /* Attempt to send attach all recipients */
- for($i = 0; $i < count($this->to); $i++) {
- if(!$this->smtp->Recipient($this->to[$i][0])) {
- $bad_rcpt[] = $this->to[$i][0];
+ // Attempt to send attach all recipients
+ foreach($this->to as $to) {
+ if (!$this->smtp->Recipient($to[0])) {
+ $bad_rcpt[] = $to[0];
+ // implement call back function if it exists
+ $isSent = 0;
+ $this->doCallback($isSent,$to[0],'','',$this->Subject,$body);
+ } else {
+ // implement call back function if it exists
+ $isSent = 1;
+ $this->doCallback($isSent,$to[0],'','',$this->Subject,$body);
}
}
- for($i = 0; $i < count($this->cc); $i++) {
- if(!$this->smtp->Recipient($this->cc[$i][0])) {
- $bad_rcpt[] = $this->cc[$i][0];
+ foreach($this->cc as $cc) {
+ if (!$this->smtp->Recipient($cc[0])) {
+ $bad_rcpt[] = $cc[0];
+ // implement call back function if it exists
+ $isSent = 0;
+ $this->doCallback($isSent,'',$cc[0],'',$this->Subject,$body);
+ } else {
+ // implement call back function if it exists
+ $isSent = 1;
+ $this->doCallback($isSent,'',$cc[0],'',$this->Subject,$body);
}
}
- for($i = 0; $i < count($this->bcc); $i++) {
- if(!$this->smtp->Recipient($this->bcc[$i][0])) {
- $bad_rcpt[] = $this->bcc[$i][0];
+ foreach($this->bcc as $bcc) {
+ if (!$this->smtp->Recipient($bcc[0])) {
+ $bad_rcpt[] = $bcc[0];
+ // implement call back function if it exists
+ $isSent = 0;
+ $this->doCallback($isSent,'','',$bcc[0],$this->Subject,$body);
+ } else {
+ // implement call back function if it exists
+ $isSent = 1;
+ $this->doCallback($isSent,'','',$bcc[0],$this->Subject,$body);
}
}

- if(count($bad_rcpt) > 0) { // Create error message
- for($i = 0; $i < count($bad_rcpt); $i++) {
- if($i != 0) {
- $error .= ', ';
- }
- $error .= $bad_rcpt[$i];
- }
- $error = $this->Lang('recipients_failed') . $error;
- $this->SetError($error);
- $this->smtp->Reset();
- return false;
+
+ if (count($bad_rcpt) > 0 ) { //Create error message for any bad addresses
+ $badaddresses = implode(', ', $bad_rcpt);
+ throw new phpmailerException($this->Lang('recipients_failed') . $badaddresses);
}
-
if(!$this->smtp->Data($header . $body)) {
- $this->SetError($this->Lang('data_not_accepted'));
- $this->smtp->Reset();
- return false;
+ throw new phpmailerException($this->Lang('data_not_accepted'), self::STOP_CRITICAL);
}
if($this->SMTPKeepAlive == true) {
$this->smtp->Reset();
- } else {
- $this->SmtpClose();
}
-
return true;
}

/**
- * Initiates a connection to an SMTP server. Returns false if the
- * operation failed.
+ * Initiates a connection to an SMTP server.
+ * Returns false if the operation failed.
+ * @uses SMTP
* @access public
* @return bool
*/
public function SmtpConnect() {
- if($this->smtp == NULL) {
+ if(is_null($this->smtp)) {
$this->smtp = new SMTP();
}

$this->smtp->do_debug = $this->SMTPDebug;
$hosts = explode(';', $this->Host);
$index = 0;
- $connection = ($this->smtp->Connected());
+ $connection = $this->smtp->Connected();

- /* Retry while there is no connection */
- while($index < count($hosts) && $connection == false) {
+ // Retry while there is no connection
+ try {
+ while($index < count($hosts) && !$connection) {
$hostinfo = array();
- if(eregi('^(.+):([0-9]+)$', $hosts[$index], $hostinfo)) {
+ if (preg_match('/^(.+):([0-9]+)$/', $hosts[$index], $hostinfo)) {
$host = $hostinfo[1];
$port = $hostinfo[2];
} else {
@@ -614,31 +801,30 @@

if($tls) {
if(!$this->smtp->StartTLS()) {
- $this->SetError($this->Lang("tls"));
- $this->smtp->Reset();
- $connection = false;
+ throw new phpmailerException($this->Lang('tls'));
}

- //We must resend HELLO after tls negociation
+ //We must resend HELO after tls negotiation
$this->smtp->Hello($hello);
}

$connection = true;
if($this->SMTPAuth) {
if(!$this->smtp->Authenticate($this->Username, $this->Password)) {
- $this->SetError($this->Lang('authenticate'));
- $this->smtp->Reset();
- $connection = false;
+ throw new phpmailerException($this->Lang('authenticate'));
}
}
}
$index++;
- }
if(!$connection) {
- $this->SetError($this->Lang('connect_host'));
+ throw new phpmailerException($this->Lang('connect_host'));
}
-
- return $connection;
+ }
+ } catch (phpmailerException $e) {
+ $this->smtp->Reset();
+ throw $e;
+ }
+ return true;
}

/**
@@ -646,7 +832,7 @@
* @return void
*/
public function SmtpClose() {
- if($this->smtp != NULL) {
+ if(!is_null($this->smtp)) {
if($this->smtp->Connected()) {
$this->smtp->Quit();
$this->smtp->Close();
@@ -655,35 +841,50 @@
}

/**
- * Sets the language for all class error messages. Returns false
- * if it cannot load the language file. The default language type
- * is English.
- * @param string $lang_type Type of language (e.g. Portuguese: "br")
+ * Sets the language for all class error messages.
+ * Returns false if it cannot load the language file. The default language is English.
+ * @param string $langcode ISO 639-1 2-character language code (e.g. Portuguese: "br")
* @param string $lang_path Path to the language file directory
* @access public
- * @return bool
*/
- function SetLanguage($lang_type = 'en', $lang_path = 'language/') {
- if( !(@include $lang_path.'phpmailer.lang-'.$lang_type.'.php') ) {
- $PHPMAILER_LANG = array();
- $PHPMAILER_LANG["provide_address"] = 'You must provide at least one ' .
- $PHPMAILER_LANG["mailer_not_supported"] = ' mailer is not supported.';
- $PHPMAILER_LANG["execute"] = 'Could not execute: ';
- $PHPMAILER_LANG["instantiate"] = 'Could not instantiate mail function.';
- $PHPMAILER_LANG["authenticate"] = 'SMTP Error: Could not authenticate.';
- $PHPMAILER_LANG["from_failed"] = 'The following From address failed: ';
- $PHPMAILER_LANG["recipients_failed"] = 'SMTP Error: The following ' .
- $PHPMAILER_LANG["data_not_accepted"] = 'SMTP Error: Data not accepted.';
- $PHPMAILER_LANG["connect_host"] = 'SMTP Error: Could not connect to SMTP host.';
- $PHPMAILER_LANG["file_access"] = 'Could not access file: ';
- $PHPMAILER_LANG["file_open"] = 'File Error: Could not open file: ';
- $PHPMAILER_LANG["encoding"] = 'Unknown encoding: ';
- $PHPMAILER_LANG["signing"] = 'Signing Error: ';
+ function SetLanguage($langcode = 'en', $lang_path = 'language/') {
+ //Define full set of translatable strings
+ $PHPMAILER_LANG = array(
+ 'provide_address' => 'You must provide at least one recipient email address.',
+ 'mailer_not_supported' => ' mailer is not supported.',
+ 'execute' => 'Could not execute: ',
+ 'instantiate' => 'Could not instantiate mail function.',
+ 'authenticate' => 'SMTP Error: Could not authenticate.',
+ 'from_failed' => 'The following From address failed: ',
+ 'recipients_failed' => 'SMTP Error: The following recipients failed: ',
+ 'data_not_accepted' => 'SMTP Error: Data not accepted.',
+ 'connect_host' => 'SMTP Error: Could not connect to SMTP host.',
+ 'file_access' => 'Could not access file: ',
+ 'file_open' => 'File Error: Could not open file: ',
+ 'encoding' => 'Unknown encoding: ',
+ 'signing' => 'Signing Error: ',
+ 'smtp_error' => 'SMTP server error: ',
+ 'empty_message' => 'Message body empty',
+ 'invalid_address' => 'Invalid address',
+ 'variable_set' => 'Cannot set or reset variable: '
+ );
+ //Overwrite language-specific strings. This way we'll never have missing translations - no more "language string failed to load"!
+ $l = true;
+ if ($langcode != 'en') { //There is no English translation file
+ $l = @include $lang_path.'phpmailer.lang-'.$langcode.'.php';
}
$this->language = $PHPMAILER_LANG;
- return true;
+ return ($l == true); //Returns false if language not found
}

+ /**
+ * Return the current array of language strings
+ * @return array
+ */
+ public function GetTranslations() {
+ return $this->language;
+ }
+
/////////////////////////////////////////////////
// METHODS, MESSAGE CREATION
/////////////////////////////////////////////////
@@ -695,12 +896,11 @@
*/
public function AddrAppend($type, $addr) {
$addr_str = $type . ': ';
- $addr_str .= $this->AddrFormat($addr[0]);
- if(count($addr) > 1) {
- for($i = 1; $i < count($addr); $i++) {
- $addr_str .= ', ' . $this->AddrFormat($addr[$i]);
- }
+ $addresses = array();
+ foreach ($addr as $a) {
+ $addresses[] = $this->AddrFormat($a);
}
+ $addr_str .= implode(', ', $addresses);
$addr_str .= $this->LE;

return $addr_str;
@@ -713,18 +913,19 @@
*/
public function AddrFormat($addr) {
if(empty($addr[1])) {
- $formatted = $this->SecureHeader($addr[0]);
+ return $this->SecureHeader($addr[0]);
} else {
- $formatted = $this->EncodeHeader($this->SecureHeader($addr[1]), 'phrase') . " <" . $this->SecureHeader($addr[0]) . ">";
+ return $this->EncodeHeader($this->SecureHeader($addr[1]), 'phrase') . " <" . $this->SecureHeader($addr[0]) . ">";
}
-
- return $formatted;
}

/**
* Wraps message for use with mailers that do not
* automatically perform wrapping and for quoted-printable.
* Original written by philippe.
+ * @param string $message The message to wrap
+ * @param integer $length The line length to wrap to
+ * @param boolean $qp_mode Whether to run in Quoted-Printable mode
* @access public
* @return string
*/
@@ -855,7 +1056,6 @@

switch($this->message_type) {
case 'alt':
- /* fall through */
case 'alt_attachments':
$this->AltBody = $this->WrapText($this->AltBody, $this->WordWrap);
break;
@@ -868,43 +1068,49 @@
/**
* Assembles message header.
* @access public
- * @return string
+ * @return string The assembled header
*/
public function CreateHeader() {
$result = '';

- /* Set the boundaries */
+ // Set the boundaries
$uniq_id = md5(uniqid(time()));
$this->boundary[1] = 'b1_' . $uniq_id;
$this->boundary[2] = 'b2_' . $uniq_id;

- $result .= $this->HeaderLine('Date', $this->RFCDate());
+ $result .= $this->HeaderLine('Date', self::RFCDate());
if($this->Sender == '') {
$result .= $this->HeaderLine('Return-Path', trim($this->From));
} else {
$result .= $this->HeaderLine('Return-Path', trim($this->Sender));
}

- /* To be created automatically by mail() */
+ // To be created automatically by mail()
if($this->Mailer != 'mail') {
+ if ($this->SingleTo === true) {
+ foreach($this->to as $t) {
+ $this->SingleToArray[] = $this->AddrFormat($t);
+ }
+ } else {
if(count($this->to) > 0) {
$result .= $this->AddrAppend('To', $this->to);
} elseif (count($this->cc) == 0) {
$result .= $this->HeaderLine('To', 'undisclosed-recipients:;');
}
}
+ }

$from = array();
$from[0][0] = trim($this->From);
$from[0][1] = $this->FromName;
$result .= $this->AddrAppend('From', $from);

- /* sendmail and mail() extract Cc from the header before sending */
- if((($this->Mailer == 'sendmail') || ($this->Mailer == 'mail')) && (count($this->cc) > 0)) {
+ // sendmail and mail() extract Cc from the header before sending
+ if(count($this->cc) > 0) {
$result .= $this->AddrAppend('Cc', $this->cc);
}

- /* sendmail and mail() extract Bcc from the header before sending */
+ // sendmail and mail() extract Bcc from the header before sending
if((($this->Mailer == 'sendmail') || ($this->Mailer == 'mail')) && (count($this->bcc) > 0)) {
$result .= $this->AddrAppend('Bcc', $this->bcc);
}
@@ -913,7 +1119,7 @@
$result .= $this->AddrAppend('Reply-to', $this->ReplyTo);
}

- /* mail() sets the subject itself */
+ // mail() sets the subject itself
if($this->Mailer != 'mail') {
$result .= $this->HeaderLine('Subject', $this->EncodeHeader($this->SecureHeader($this->Subject)));
}
@@ -924,7 +1130,7 @@
$result .= sprintf("Message-ID: <%s@%s>%s", $uniq_id, $this->ServerHostname(), $this->LE);
}
$result .= $this->HeaderLine('X-Priority', $this->Priority);
- $result .= $this->HeaderLine('X-Mailer', 'PHPMailer (phpmailer.codeworxtech.com) [version ' . $this->Version . ']');
+ $result .= $this->HeaderLine('X-Mailer', 'PHPMailer '.$this->Version.' (phpmailer.sourceforge.net)');

if($this->ConfirmReadingTo != '') {
$result .= $this->HeaderLine('Disposition-Notification-To', '<' . trim($this->ConfirmReadingTo) . '>');
@@ -955,7 +1161,6 @@
$result .= sprintf("Content-Type: %s; charset=\"%s\"", $this->ContentType, $this->CharSet);
break;
case 'attachments':
- /* fall through */
case 'alt_attachments':
if($this->InlineImageExists()){
$result .= sprintf("Content-Type: %s;%s\ttype=\"text/html\";%s\tboundary=\"%s\"%s", 'multipart/related', $this->LE, $this->LE, $this->boundary[1], $this->LE);
@@ -980,83 +1185,82 @@
/**
* Assembles the message body. Returns an empty string on failure.
* @access public
- * @return string
+ * @return string The assembled message body
*/
public function CreateBody() {
- $result = '';
+ $body = '';

if ($this->sign_key_file) {
- $result .= $this->GetMailMIME();
+ $body .= $this->GetMailMIME();
}

$this->SetWordWrap();

switch($this->message_type) {
case 'alt':
- $result .= $this->GetBoundary($this->boundary[1], '', 'text/plain', '');
- $result .= $this->EncodeString($this->AltBody, $this->Encoding);
- $result .= $this->LE.$this->LE;
- $result .= $this->GetBoundary($this->boundary[1], '', 'text/html', '');
- $result .= $this->EncodeString($this->Body, $this->Encoding);
- $result .= $this->LE.$this->LE;
- $result .= $this->EndBoundary($this->boundary[1]);
+ $body .= $this->GetBoundary($this->boundary[1], '', 'text/plain', '');
+ $body .= $this->EncodeString($this->AltBody, $this->Encoding);
+ $body .= $this->LE.$this->LE;
+ $body .= $this->GetBoundary($this->boundary[1], '', 'text/html', '');
+ $body .= $this->EncodeString($this->Body, $this->Encoding);
+ $body .= $this->LE.$this->LE;
+ $body .= $this->EndBoundary($this->boundary[1]);
break;
case 'plain':
- $result .= $this->EncodeString($this->Body, $this->Encoding);
+ $body .= $this->EncodeString($this->Body, $this->Encoding);
break;
case 'attachments':
- $result .= $this->GetBoundary($this->boundary[1], '', '', '');
- $result .= $this->EncodeString($this->Body, $this->Encoding);
- $result .= $this->LE;
- $result .= $this->AttachAll();
+ $body .= $this->GetBoundary($this->boundary[1], '', '', '');
+ $body .= $this->EncodeString($this->Body, $this->Encoding);
+ $body .= $this->LE;
+ $body .= $this->AttachAll();
break;
case 'alt_attachments':
- $result .= sprintf("--%s%s", $this->boundary[1], $this->LE);
- $result .= sprintf("Content-Type: %s;%s" . "\tboundary=\"%s\"%s", 'multipart/alternative', $this->LE, $this->boundary[2], $this->LE.$this->LE);
- $result .= $this->GetBoundary($this->boundary[2], '', 'text/plain', '') . $this->LE; // Create text body
- $result .= $this->EncodeString($this->AltBody, $this->Encoding);
- $result .= $this->LE.$this->LE;
- $result .= $this->GetBoundary($this->boundary[2], '', 'text/html', '') . $this->LE; // Create the HTML body
- $result .= $this->EncodeString($this->Body, $this->Encoding);
- $result .= $this->LE.$this->LE;
- $result .= $this->EndBoundary($this->boundary[2]);
- $result .= $this->AttachAll();
+ $body .= sprintf("--%s%s", $this->boundary[1], $this->LE);
+ $body .= sprintf("Content-Type: %s;%s" . "\tboundary=\"%s\"%s", 'multipart/alternative', $this->LE, $this->boundary[2], $this->LE.$this->LE);
+ $body .= $this->GetBoundary($this->boundary[2], '', 'text/plain', '') . $this->LE; // Create text body
+ $body .= $this->EncodeString($this->AltBody, $this->Encoding);
+ $body .= $this->LE.$this->LE;
+ $body .= $this->GetBoundary($this->boundary[2], '', 'text/html', '') . $this->LE; // Create the HTML body
+ $body .= $this->EncodeString($this->Body, $this->Encoding);
+ $body .= $this->LE.$this->LE;
+ $body .= $this->EndBoundary($this->boundary[2]);
+ $body .= $this->AttachAll();
break;
}

if($this->IsError()) {
- $result = '';
+ $body = '';
} else if ($this->sign_key_file) {
- $file = tempnam("", "mail");
- $fp = fopen($file, "w");
- fwrite($fp, $result);
- fclose($fp);
+ try {
+ $file = tempnam('', 'mail');
+ file_put_contents($file, $body); //TODO check this worked
$signed = tempnam("", "signed");
-
- if (@openssl_pkcs7_sign($file, $signed, "file://".$this->sign_cert_file, array("file://".$this->sign_key_file, $this->sign_key_pass), null)) {
- $fp = fopen($signed, "r");
- $result = '';
- while(!feof($fp)){
- $result = $result . fread($fp, 1024);
+ if (@openssl_pkcs7_sign($file, $signed, "file://".$this->sign_cert_file, array("file://".$this->sign_key_file, $this->sign_key_pass), NULL)) {
+ @unlink($file);
+ @unlink($signed);
+ $body = file_get_contents($signed);
+ } else {
+ @unlink($file);
+ @unlink($signed);
+ throw new phpmailerException($this->Lang("signing").openssl_error_string());
}
- fclose($fp);
- } else {
- $this->SetError($this->Lang("signing").openssl_error_string());
- $result = '';
+ } catch (phpmailerException $e) {
+ $body = '';
+ if ($this->exceptions) {
+ throw $e;
+ }
}
-
- unlink($file);
- unlink($signed);
}

- return $result;
+ return $body;
}

/**
* Returns the start of a message boundary.
- * @access public
+ * @access private
*/
- public function GetBoundary($boundary, $charSet, $contentType, $encoding) {
+ private function GetBoundary($boundary, $charSet, $contentType, $encoding) {
$result = '';
if($charSet == '') {
$charSet = $this->CharSet;
@@ -1078,18 +1282,18 @@

/**
* Returns the end of a message boundary.
- * @access public
+ * @access private
*/
- public function EndBoundary($boundary) {
+ private function EndBoundary($boundary) {
return $this->LE . '--' . $boundary . '--' . $this->LE;
}

/**
* Sets the message type.
- * @access public
+ * @access private
* @return void
*/
- public function SetMessageType() {
+ private function SetMessageType() {
if(count($this->attachment) < 1 && strlen($this->AltBody) < 1) {
$this->message_type = 'plain';
} else {
@@ -1105,7 +1309,8 @@
}
}

- /* Returns a formatted header line.
+ /**
+ * Returns a formatted header line.
* @access public
* @return string
*/
@@ -1137,58 +1342,81 @@
* @return bool
*/
public function AddAttachment($path, $name = '', $encoding = 'base64', $type = 'application/octet-stream') {
+ try {
if(!@is_file($path)) {
- $this->SetError($this->Lang('file_access') . $path);
- return false;
+ throw new phpmailerException($this->Lang('file_access') . $path, self::STOP_CONTINUE);
}
-
$filename = basename($path);
if($name == '') {
$name = $filename;
}

- $cur = count($this->attachment);
- $this->attachment[$cur][0] = $path;
- $this->attachment[$cur][1] = $filename;
- $this->attachment[$cur][2] = $name;
- $this->attachment[$cur][3] = $encoding;
- $this->attachment[$cur][4] = $type;
- $this->attachment[$cur][5] = false; // isStringAttachment
- $this->attachment[$cur][6] = 'attachment';
- $this->attachment[$cur][7] = 0;
+ $this->attachment[] = array(
+ 0 => $path,
+ 1 => $filename,
+ 2 => $name,
+ 3 => $encoding,
+ 4 => $type,
+ 5 => false, // isStringAttachment
+ 6 => 'attachment',
+ 7 => 0
+ );

+ } catch (phpmailerException $e) {
+ $this->SetError($e->getMessage());
+ if ($this->exceptions) {
+ throw $e;
+ }
+ echo $e->getMessage()."\n";
+ if ( $e->getCode() == self::STOP_CRITICAL ) {
+ return false;
+ }
+ }
return true;
}

/**
+ * Return the current array of attachments
+ * @return array
+ */
+ public function GetAttachments() {
+ return $this->attachment;
+ }
+
+ /**
* Attaches all fs, string, and binary attachments to the message.
* Returns an empty string on failure.
- * @access public
+ * @access private
* @return string
*/
- public function AttachAll() {
- /* Return text of body */
+ private function AttachAll() {
+ // Return text of body
$mime = array();
+ $cidUniq = array();
+ $incl = array();

- /* Add all attachments */
- for($i = 0; $i < count($this->attachment); $i++) {
- /* Check for string attachment */
- $bString = $this->attachment[$i][5];
+ // Add all attachments
+ foreach ($this->attachment as $attachment) {
+ // Check for string attachment
+ $bString = $attachment[5];
if ($bString) {
- $string = $this->attachment[$i][0];
+ $string = $attachment[0];
} else {
- $path = $this->attachment[$i][0];
+ $path = $attachment[0];
}

- $filename = $this->attachment[$i][1];
- $name = $this->attachment[$i][2];
- $encoding = $this->attachment[$i][3];
- $type = $this->attachment[$i][4];
- $disposition = $this->attachment[$i][6];
- $cid = $this->attachment[$i][7];
+ if (in_array($attachment[0], $incl)) { continue; }
+ $filename = $attachment[1];
+ $name = $attachment[2];
+ $encoding = $attachment[3];
+ $type = $attachment[4];
+ $disposition = $attachment[6];
+ $cid = $attachment[7];
+ $incl[] = $attachment[0];
+ if ( $disposition == 'inline' && isset($cidUniq[$cid]) ) { continue; }
+ $cidUniq[$cid] = true;

$mime[] = sprintf("--%s%s", $this->boundary[1], $this->LE);
- //$mime[] = sprintf("Content-Type: %s; name=\"%s\"%s", $type, $name, $this->LE);
$mime[] = sprintf("Content-Type: %s; name=\"%s\"%s", $type, $this->EncodeHeader($this->SecureHeader($name)), $this->LE);
$mime[] = sprintf("Content-Transfer-Encoding: %s%s", $encoding, $this->LE);

@@ -1196,10 +1424,9 @@
$mime[] = sprintf("Content-ID: <%s>%s", $cid, $this->LE);
}

- //$mime[] = sprintf("Content-Disposition: %s; filename=\"%s\"%s", $disposition, $name, $this->LE.$this->LE);
$mime[] = sprintf("Content-Disposition: %s; filename=\"%s\"%s", $disposition, $this->EncodeHeader($this->SecureHeader($name)), $this->LE.$this->LE);

- /* Encode as string attachment */
+ // Encode as string attachment
if($bString) {
$mime[] = $this->EncodeString($string, $encoding);
if($this->IsError()) {
@@ -1221,15 +1448,18 @@
}

/**
- * Encodes attachment in requested format. Returns an
- * empty string on failure.
- * @access public
+ * Encodes attachment in requested format.
+ * Returns an empty string on failure.
+ * @param string $path The full path to the file
+ * @param string $encoding The encoding to use; one of 'base64', '7bit', '8bit', 'binary', 'quoted-printable'
+ * @see EncodeFile()
+ * @access private
* @return string
*/
- public function EncodeFile ($path, $encoding = 'base64') {
- if(!@$fd = fopen($path, 'rb')) {
- $this->SetError($this->Lang('file_open') . $path);
- return '';
+ private function EncodeFile($path, $encoding = 'base64') {
+ try {
+ if (!is_readable($path)) {
+ throw new phpmailerException($this->Lang('file_open') . $path, self::STOP_CONTINUE);
}
if (function_exists('get_magic_quotes')) {
function get_magic_quotes() {
@@ -1242,14 +1472,19 @@
}
$file_buffer = file_get_contents($path);
$file_buffer = $this->EncodeString($file_buffer, $encoding);
- fclose($fd);
if (PHP_VERSION < 6) { set_magic_quotes_runtime($magic_quotes); }
return $file_buffer;
+ } catch (Exception $e) {
+ $this->SetError($e->getMessage());
+ return '';
+ }
}

/**
- * Encodes string to requested format. Returns an
- * empty string on failure.
+ * Encodes string to requested format.
+ * Returns an empty string on failure.
+ * @param string $str The text to encode
+ * @param string $encoding The encoding to use; one of 'base64', '7bit', '8bit', 'binary', 'quoted-printable'
* @access public
* @return string
*/
@@ -1262,6 +1497,7 @@
case '7bit':
case '8bit':
$encoded = $this->FixEOL($str);
+ //Make sure it ends with a line break
if (substr($encoded, -(strlen($this->LE))) != $this->LE)
$encoded .= $this->LE;
break;
@@ -1279,7 +1515,7 @@
}

/**
- * Encode a header string to best of Q, B, quoted or none.
+ * Encode a header string to best (shortest) of Q, B, quoted or none.
* @access public
* @return string
*/
@@ -1289,7 +1525,7 @@
switch (strtolower($position)) {
case 'phrase':
if (!preg_match('/[\200-\377]/', $str)) {
- /* Can't use addslashes as we don't know what value has magic_quotes_sybase. */
+ // Can't use addslashes as we don't know what value has magic_quotes_sybase
$encoded = addcslashes($str, "\0..\37\177\\\"");
if (($str == $encoded) && !preg_match('/[^A-Za-z0-9!#$%&\'*+\/=?^_`{|}~ -]/', $str)) {
return ($encoded);
@@ -1301,7 +1537,7 @@
break;
case 'comment':
$x = preg_match_all('/[()"]/', $str, $matches);
- /* Fall-through */
+ // Fall-through
case 'text':
default:
$x += preg_match_all('/[\000-\010\013\014\016-\037\177-\377]/', $str, $matches);
@@ -1313,7 +1549,7 @@
}

$maxlen = 75 - 7 - strlen($this->CharSet);
- /* Try to select the encoding which should produce the shortest output */
+ // Try to select the encoding which should produce the shortest output
if (strlen($str)/3 < $x) {
$encoding = 'B';
if (function_exists('mb_strlen') && $this->HasMultiBytes($str)) {
@@ -1348,7 +1584,7 @@
if (function_exists('mb_strlen')) {
return (strlen($str) > mb_strlen($str, $this->CharSet));
} else { // Assume no multibytes (we can't handle without mbstring functions anyway)
- return False;
+ return false;
}
}

@@ -1394,12 +1630,13 @@

/**
* Encode string to quoted-printable.
+ * Only uses standard PHP, slow, but will always work
* @access public
* @param string $string the text to encode
* @param integer $line_max Number of chars allowed on a line before wrapping
* @return string
*/
- public function EncodeQP( $input = '', $line_max = 76, $space_conv = false ) {
+ public function EncodeQPphp( $input = '', $line_max = 76, $space_conv = false) {
$hex = array('0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F');
$lines = preg_split('/(?:\r\n|\r|\n)/', $input);
$eol = "\r\n";
@@ -1441,13 +1678,49 @@
}

/**
+ * Encode string to RFC2045 (6.7) quoted-printable format
+ * Uses a PHP5 stream filter to do the encoding about 64x faster than the old version
+ * Also results in same content as you started with after decoding
+ * @see EncodeQPphp()
+ * @access public
+ * @param string $string the text to encode
+ * @param integer $line_max Number of chars allowed on a line before wrapping
+ * @param boolean $space_conv Dummy param for compatibility with existing EncodeQP function
+ * @return string
+ * @author Marcus Bointon
+ */
+ public function EncodeQP($string, $line_max = 76, $space_conv = false) {
+ if (function_exists('quoted_printable_encode')) { //Use native function if it's available (>= PHP5.3)
+ return quoted_printable_encode($string);
+ }
+ $filters = stream_get_filters();
+ if (!in_array('convert.*', $filters)) { //Got convert stream filter?
+ return $this->EncodeQPphp($string, $line_max, $space_conv); //Fall back to old implementation
+ }
+ $fp = fopen('php://temp/', 'r+');
+ $string = preg_replace('/\r\n?/', $this->LE, $string); //Normalise line breaks
+ $params = array('line-length' => $line_max, 'line-break-chars' => $this->LE);
+ $s = stream_filter_append($fp, 'convert.quoted-printable-encode', STREAM_FILTER_READ, $params);
+ fputs($fp, $string);
+ rewind($fp);
+ $out = stream_get_contents($fp);
+ stream_filter_remove($s);
+ $out = preg_replace('/^\./m', '=2E', $out); //Encode . if it is first char on a line, workaround for bug in Exchange
+ fclose($fp);
+ return $out;
+ }
+
+ /**
* Encode string to q encoding.
+ * @link http://tools.ietf.org/html/rfc2047
+ * @param string $str the text to encode
+ * @param string $position Where the text is going to be used, see the RFC for what that means
* @access public
* @return string
*/
public function EncodeQ ($str, $position = 'text') {
- /* There should not be any EOL in the string */
- $encoded = preg_replace("[\r\n]", '', $str);
+ // There should not be any EOL in the string
+ $encoded = preg_replace('/[\r\n]*/', '', $str);

switch (strtolower($position)) {
case 'phrase':
@@ -1457,13 +1730,14 @@
$encoded = preg_replace("/([\(\)\"])/e", "'='.sprintf('%02X', ord('\\1'))", $encoded);
case 'text':
default:
- /* Replace every high ascii, control =, ? and _ characters */
+ // Replace every high ascii, control =, ? and _ characters
+ //TODO using /e (equivalent to eval()) is probably not a good idea
$encoded = preg_replace('/([\000-\011\013\014\016-\037\075\077\137\177-\377])/e',
"'='.sprintf('%02X', ord('\\1'))", $encoded);
break;
}

- /* Replace every spaces to _ (more readable than =20) */
+ // Replace every spaces to _ (more readable than =20)
$encoded = str_replace(' ', '_', $encoded);

return $encoded;
@@ -1480,16 +1754,17 @@
* @return void
*/
public function AddStringAttachment($string, $filename, $encoding = 'base64', $type = 'application/octet-stream') {
- /* Append to $attachment array */
- $cur = count($this->attachment);
- $this->attachment[$cur][0] = $string;
- $this->attachment[$cur][1] = $filename;
- $this->attachment[$cur][2] = $filename;
- $this->attachment[$cur][3] = $encoding;
- $this->attachment[$cur][4] = $type;
- $this->attachment[$cur][5] = true; // isString
- $this->attachment[$cur][6] = 'attachment';
- $this->attachment[$cur][7] = 0;
+ // Append to $attachment array
+ $this->attachment[] = array(
+ 0 => $string,
+ 1 => $filename,
+ 2 => basename($filename),
+ 3 => $encoding,
+ 4 => $type,
+ 5 => true, // isStringAttachment
+ 6 => 'attachment',
+ 7 => 0
+ );
}

/**
@@ -1517,16 +1792,17 @@
$name = $filename;
}

- /* Append to $attachment array */
- $cur = count($this->attachment);
- $this->attachment[$cur][0] = $path;
- $this->attachment[$cur][1] = $filename;
- $this->attachment[$cur][2] = $name;
- $this->attachment[$cur][3] = $encoding;
- $this->attachment[$cur][4] = $type;
- $this->attachment[$cur][5] = false;
- $this->attachment[$cur][6] = 'inline';
- $this->attachment[$cur][7] = $cid;
+ // Append to $attachment array
+ $this->attachment[] = array(
+ 0 => $path,
+ 1 => $filename,
+ 2 => $name,
+ 3 => $encoding,
+ 4 => $type,
+ 5 => false, // isStringAttachment
+ 6 => 'inline',
+ 7 => $cid
+ );

return true;
}
@@ -1537,15 +1813,12 @@
* @return bool
*/
public function InlineImageExists() {
- $result = false;
- for($i = 0; $i < count($this->attachment); $i++) {
- if($this->attachment[$i][6] == 'inline') {
- $result = true;
- break;
+ foreach($this->attachment as $attachment) {
+ if ($attachment[6] == 'inline') {
+ return true;
}
}
-
- return $result;
+ return false;
}

/////////////////////////////////////////////////
@@ -1557,6 +1830,9 @@
* @return void
*/
public function ClearAddresses() {
+ foreach($this->to as $to) {
+ unset($this->all_recipients[strtolower($to[0])]);
+ }
$this->to = array();
}

@@ -1565,6 +1841,9 @@
* @return void
*/
public function ClearCCs() {
+ foreach($this->cc as $cc) {
+ unset($this->all_recipients[strtolower($cc[0])]);
+ }
$this->cc = array();
}

@@ -1573,6 +1852,9 @@
* @return void
*/
public function ClearBCCs() {
+ foreach($this->bcc as $bcc) {
+ unset($this->all_recipients[strtolower($bcc[0])]);
+ }
$this->bcc = array();
}

@@ -1593,6 +1875,7 @@
$this->to = array();
$this->cc = array();
$this->bcc = array();
+ $this->all_recipients = array();
}

/**
@@ -1618,21 +1901,27 @@

/**
* Adds the error message to the error container.
- * Returns void.
- * @access private
+ * @access protected
* @return void
*/
- private function SetError($msg) {
+ protected function SetError($msg) {
$this->error_count++;
+ if ($this->Mailer == 'smtp' and !is_null($this->smtp)) {
+ $lasterror = $this->smtp->getError();
+ if (!empty($lasterror) and array_key_exists('smtp_msg', $lasterror)) {
+ $msg .= '<p>' . $this->Lang('smtp_error') . $lasterror['smtp_msg'] . "</p>\n";
+ }
+ }
$this->ErrorInfo = $msg;
}

/**
* Returns the proper RFC 822 formatted date.
- * @access private
+ * @access public
* @return string
+ * @static
*/
- private static function RFCDate() {
+ public static function RFCDate() {
$tz = date('Z');
$tzs = ($tz < 0) ? '-' : '+';
$tz = abs($tz);
@@ -1653,7 +1942,7 @@
} elseif (isset($_SERVER['SERVER_NAME'])) {
$result = $_SERVER['SERVER_NAME'];
} else {
- $result = "localhost.localdomain";
+ $result = 'localhost.localdomain';
}

return $result;
@@ -1716,14 +2005,13 @@
if(isset($images[2])) {
foreach($images[2] as $i => $url) {
// do not change urls for absolute images (thanks to corvuscorax)
- if (!preg_match('/^[A-z][A-z]*:\/\//',$url)) {
+ if (!preg_match('#^[A-z]+://#',$url)) {
$filename = basename($url);
$directory = dirname($url);
($directory == '.')?$directory='':'';
$cid = 'cid:' . md5($filename);
- $fileParts = split("\.", $filename);
- $ext = $fileParts[1];
- $mimeType = $this->_mime_types($ext);
+ $ext = pathinfo($filename, PATHINFO_EXTENSION);
+ $mimeType = self::_mime_types($ext);
if ( strlen($basedir) > 1 && substr($basedir,-1) != '/') { $basedir .= '/'; }
if ( strlen($directory) > 1 && substr($directory,-1) != '/') { $directory .= '/'; }
if ( $this->AddEmbeddedImage($basedir.$directory.$filename, md5($filename), $filename, 'base64',$mimeType) ) {
@@ -1739,16 +2027,18 @@
$this->AltBody = html_entity_decode($textMsg);
}
if ( empty($this->AltBody) ) {
- $this->AltBody = 'To view this email message, open the email in with HTML compatibility!' . "\n\n";
+ $this->AltBody = 'To view this email message, open it in a program that understands HTML!' . "\n\n";
}
}

/**
- * Gets the mime type of the embedded or inline image
+ * Gets the MIME type of the embedded or inline image
+ * @param string File extension
* @access public
- * @return mime type of ext
+ * @return string MIME type of ext
+ * @static
*/
- public function _mime_types($ext = '') {
+ public static function _mime_types($ext = '') {
$mimes = array(
'hqx' => 'application/mac-binhex40',
'cpt' => 'application/mac-compactpro',
@@ -1851,34 +2141,23 @@
* @param string $name Parameter Name
* @param mixed $value Parameter Value
* NOTE: will not work with arrays, there are no arrays to set/reset
+ * @todo Should this not be using __set() magic function?
*/
public function set ( $name, $value = '' ) {
+ try {
if ( isset($this->$name) ) {
$this->$name = $value;
} else {
- $this->SetError('Cannot set or reset variable ' . $name);
- return false;
- }
+ throw new phpmailerException($this->Lang('variable_set') . $name, self::STOP_CRITICAL);
}
-
- /**
- * Read a file from a supplied filename and return it.
- *
- * @access public
- * @param string $filename Parameter File Name
- */
- public function getFile($filename) {
- $return = '';
- if ($fp = fopen($filename, 'rb')) {
- while (!feof($fp)) {
- $return .= fread($fp, 1024);
- }
- fclose($fp);
- return $return;
- } else {
+ } catch (Exception $e) {
+ $this->SetError($e->getMessage());
+ if ($e->getCode() == self::STOP_CRITICAL) {
return false;
}
}
+ return true;
+ }

/**
* Strips newlines to prevent header injection.
@@ -1887,10 +2166,9 @@
* @return string
*/
public function SecureHeader($str) {
- $str = trim($str);
- $str = str_replace("\r", "", $str);
- $str = str_replace("\n", "", $str);
- return $str;
+ $str = str_replace("\r", '', $str);
+ $str = str_replace("\n", '', $str);
+ return trim($str);
}

/**
@@ -1905,6 +2183,138 @@
$this->sign_key_file = $key_filename;
$this->sign_key_pass = $key_pass;
}
+
+ /**
+ * Set the private key file and password to sign the message.
+ *
+ * @access public
+ * @param string $key_filename Parameter File Name
+ * @param string $key_pass Password for private key
+ */
+ public function DKIM_QP($txt) {
+ $tmp="";
+ $line="";
+ for ($i=0;$i<strlen($txt);$i++) {
+ $ord=ord($txt[$i]);
+ if ( ((0x21 <= $ord) && ($ord <= 0x3A)) || $ord == 0x3C || ((0x3E <= $ord) && ($ord <= 0x7E)) ) {
+ $line.=$txt[$i];
+ } else {
+ $line.="=".sprintf("%02X",$ord);
+ }
+ }
+ return $line;
}

+ /**
+ * Generate DKIM signature
+ *
+ * @access public
+ * @param string $s Header
+ */
+ public function DKIM_Sign($s) {
+ $privKeyStr = file_get_contents($this->DKIM_private);
+ if ($this->DKIM_passphrase!='') {
+ $privKey = openssl_pkey_get_private($privKeyStr,$this->DKIM_passphrase);
+ } else {
+ $privKey = $privKeyStr;
+ }
+ if (openssl_sign($s, $signature, $privKey)) {
+ return base64_encode($signature);
+ }
+ }
+
+ /**
+ * Generate DKIM Canonicalization Header
+ *
+ * @access public
+ * @param string $s Header
+ */
+ public function DKIM_HeaderC($s) {
+ $s=preg_replace("/\r\n\s+/"," ",$s);
+ $lines=explode("\r\n",$s);
+ foreach ($lines as $key=>$line) {
+ list($heading,$value)=explode(":",$line,2);
+ $heading=strtolower($heading);
+ $value=preg_replace("/\s+/"," ",$value) ; // Compress useless spaces
+ $lines[$key]=$heading.":".trim($value) ; // Don't forget to remove WSP around the value
+ }
+ $s=implode("\r\n",$lines);
+ return $s;
+ }
+
+ /**
+ * Generate DKIM Canonicalization Body
+ *
+ * @access public
+ * @param string $body Message Body
+ */
+ public function DKIM_BodyC($body) {
+ if ($body == '') return "\r\n";
+ // stabilize line endings
+ $body=str_replace("\r\n","\n",$body);
+ $body=str_replace("\n","\r\n",$body);
+ // END stabilize line endings
+ while (substr($body,strlen($body)-4,4) == "\r\n\r\n") {
+ $body=substr($body,0,strlen($body)-2);
+ }
+ return $body;
+ }
+
+ /**
+ * Create the DKIM header, body, as new header
+ *
+ * @access public
+ * @param string $headers_line Header lines
+ * @param string $subject Subject
+ * @param string $body Body
+ */
+ public function DKIM_Add($headers_line,$subject,$body) {
+ $DKIMsignatureType = 'rsa-sha1'; // Signature & hash algorithms
+ $DKIMcanonicalization = 'relaxed/simple'; // Canonicalization of header/body
+ $DKIMquery = 'dns/txt'; // Query method
+ $DKIMtime = time() ; // Signature Timestamp = seconds since 00:00:00 - Jan 1, 1970 (UTC time zone)
+ $subject_header = "Subject: $subject";
+ $headers = explode("\r\n",$headers_line);
+ foreach($headers as $header) {
+ if (strpos($header,'From:') === 0) {
+ $from_header=$header;
+ } elseif (strpos($header,'To:') === 0) {
+ $to_header=$header;
+ }
+ }
+ $from = str_replace('|','=7C',$this->DKIM_QP($from_header));
+ $to = str_replace('|','=7C',$this->DKIM_QP($to_header));
+ $subject = str_replace('|','=7C',$this->DKIM_QP($subject_header)) ; // Copied header fields (dkim-quoted-printable
+ $body = $this->DKIM_BodyC($body);
+ $DKIMlen = strlen($body) ; // Length of body
+ $DKIMb64 = base64_encode(pack("H*", sha1($body))) ; // Base64 of packed binary SHA-1 hash of body
+ $ident = ($this->DKIM_identity == '')? '' : " i=" . $this->DKIM_identity . ";";
+ $dkimhdrs = "DKIM-Signature: v=1; a=" . $DKIMsignatureType . "; q=" . $DKIMquery . "; l=" . $DKIMlen . "; s=" . $this->DKIM_selector . ";\r\n".
+ "\tt=" . $DKIMtime . "; c=" . $DKIMcanonicalization . ";\r\n".
+ "\th=From:To:Subject;\r\n".
+ "\td=" . $this->DKIM_domain . ";" . $ident . "\r\n".
+ "\tz=$from\r\n".
+ "\t|$to\r\n".
+ "\t|$subject;\r\n".
+ "\tbh=" . $DKIMb64 . ";\r\n".
+ "\tb=";
+ $toSign = $this->DKIM_HeaderC($from_header . "\r\n" . $to_header . "\r\n" . $subject_header . "\r\n" . $dkimhdrs);
+ $signed = $this->DKIM_Sign($toSign);
+ return "X-PHPMAILER-DKIM: phpmailer.worxware.com\r\n".$dkimhdrs.$signed."\r\n";
+ }
+
+ protected function doCallback($isSent,$to,$cc,$bcc,$subject,$body) {
+ if (!empty($this->action_function) && function_exists($this->action_function)) {
+ $params = array($isSent,$to,$cc,$bcc,$subject,$body);
+ call_user_func_array($this->action_function,$params);
+ }
+ }
+}
+
+class phpmailerException extends Exception {
+ public function errorMessage() {
+ $errorMsg = '<strong>' . $this->getMessage() . "</strong><br />\n";
+ return $errorMsg;
+ }
+}
?>
\ No newline at end of file

Modified: development/branches/jcamp/libraries/phpmailer/smtp.php
===================================================================
--- development/branches/jcamp/libraries/phpmailer/smtp.php 2010-08-31 19:21:09 UTC (rev 18740)
+++ development/branches/jcamp/libraries/phpmailer/smtp.php 2010-08-31 19:24:28 UTC (rev 18741)
@@ -2,14 +2,16 @@
/*~ class.smtp.php
.---------------------------------------------------------------------------.
| Software: PHPMailer - PHP email class |
-| Version: 2.3 |
+| Version: 5.1 |
| Contact: via sourceforge.net support pages (also www.codeworxtech.com) |
| Info: http://phpmailer.sourceforge.net |
| Support: http://sourceforge.net/projects/phpmailer/ |
| ------------------------------------------------------------------------- |
-| Author: Andy Prevost (project admininistrator) |
-| Author: Brent R. Matzelle (original founder) |
-| Copyright (c) 2004-2007, Andy Prevost. All Rights Reserved. |
+| Admin: Andy Prevost (project admininistrator) |
+| Authors: Andy Prevost (codeworxtech) codewo...@users.sourceforge.net |
+| : Marcus Bointon (coolbru) coo...@users.sourceforge.net |
+| Founder: Brent R. Matzelle (original founder) |
+| Copyright (c) 2004-2009, Andy Prevost. All Rights Reserved. |
| Copyright (c) 2001-2003, Brent R. Matzelle |
| ------------------------------------------------------------------------- |
| License: Distributed under the Lesser General Public License (LGPL) |
@@ -23,14 +25,25 @@
| - Technology Consulting |
| - Oursourcing (highly qualified programmers and graphic designers) |
'---------------------------------------------------------------------------'
+*/

/**
+ * PHPMailer - PHP SMTP email transport class
+ * NOTE: Designed for use with PHP version 5 and up
+ * @package PHPMailer
+ * @author Andy Prevost
+ * @author Marcus Bointon
+ * @copyright 2004 - 2008 Andy Prevost
+ * @license http://www.gnu.org/copyleft/lesser.html Distributed under the Lesser General Public License (LGPL)
+ * @version $Id$
+ */
+
+/**
* SMTP is rfc 821 compliant and implements all the rfc 821 SMTP
* commands except TURN which will always return a not implemented
* error. SMTP also provides some utility methods for sending mail
* to an SMTP server.
- * @package PHPMailer
- * @author Chris Ryan
+ * original author: Chris Ryan
*/

class SMTP {
@@ -58,13 +71,13 @@
*/
public $do_verp = false;

- /**#@+
- * @access private
- */
+ /////////////////////////////////////////////////
+ // PROPERTIES, PRIVATE AND PROTECTED
+ /////////////////////////////////////////////////
+
private $smtp_conn; // the socket to the server
private $error; // error if any on the last call
private $helo_rply; // the reply the server sent to us for HELO
- /**#@-*/

/**
* Initialize the class so that the data is in a known state.
@@ -79,9 +92,9 @@
$this->do_debug = 0;
}

- /*************************************************************
- * CONNECTION FUNCTIONS *
- ***********************************************************/
+ /////////////////////////////////////////////////
+ // CONNECTION FUNCTIONS
+ /////////////////////////////////////////////////

/**
* Connect to the server specified on the port specified.
@@ -97,15 +110,12 @@
* @return bool
*/
public function Connect($host,$port=0,$tval=30) {
- /* set the error val to null so there is no confusion */
+ // set the error val to null so there is no confusion
$this->error = null;

- /* make sure we are __not__ connected */
+ // make sure we are __not__ connected
if($this->connected()) {
- /* ok we are connected! what should we do?
- * for now we will just give an error saying we
- * are already connected
- */
+ // already connected, generate error
$this->error = array("error" => "Already connected to a server");
return false;
}
@@ -114,47 +124,40 @@
$port = $this->SMTP_PORT;
}

- /* connect to the smtp server */
- $this->smtp_conn = fsockopen($host, // the host of the server
+ // connect to the smtp server
+ $this->smtp_conn = @fsockopen($host, // the host of the server
$port, // the port to use
$errno, // error number if any
$errstr, // error message if any
$tval); // give up after ? secs
- /* verify we connected properly */
+ // verify we connected properly
if(empty($this->smtp_conn)) {
$this->error = array("error" => "Failed to connect to server",
"errno" => $errno,
"errstr" => $errstr);
if($this->do_debug >= 1) {
- echo "SMTP -> ERROR: " . $this->error["error"] .
- ": $errstr ($errno)" . $this->CRLF;
+ echo "SMTP -> ERROR: " . $this->error["error"] . ": $errstr ($errno)" . $this->CRLF . '<br />';
}
return false;
}

- /* sometimes the SMTP server takes a little longer to respond
- * so we will give it a longer timeout for the first read
- * - Windows still does not have support for this timeout function
- */
+ // SMTP server can take longer to respond, give longer timeout for first read
+ // Windows does not have support for this timeout function
if(substr(PHP_OS, 0, 3) != "WIN")
socket_set_timeout($this->smtp_conn, $tval, 0);

- /* get any announcement stuff */
+ // get any announcement
$announce = $this->get_lines();

- /* set the timeout of any socket functions at 1/10 of a second */
- //if(function_exists("socket_set_timeout"))
- // socket_set_timeout($this->smtp_conn, 0, 100000);
-
if($this->do_debug >= 2) {
- echo "SMTP -> FROM SERVER:" . $this->CRLF . $announce;
+ echo "SMTP -> FROM SERVER:" . $announce . $this->CRLF . '<br />';
}

return true;
}

/**
- * Initiate a TSL communication with the server.
+ * Initiate a TLS communication with the server.
*
* SMTP CODE 220 Ready to start TLS
* SMTP CODE 501 Syntax error (no parameters allowed)
@@ -176,7 +179,7 @@
$code = substr($rply,0,3);

if($this->do_debug >= 2) {
- echo "SMTP -> FROM SERVER:" . $this->CRLF . $rply;
+ echo "SMTP -> FROM SERVER:" . $rply . $this->CRLF . '<br />';
}

if($code != 220) {
@@ -185,7 +188,7 @@
"smtp_code" => $code,
"smtp_msg" => substr($rply,4));
if($this->do_debug >= 1) {
- echo "SMTP -> ERROR: " . $this->error["error"] . ": " . $rply . $this->CRLF;
+ echo "SMTP -> ERROR: " . $this->error["error"] . ": " . $rply . $this->CRLF . '<br />';
}
return false;
}
@@ -217,8 +220,7 @@
"smtp_code" => $code,
"smtp_msg" => substr($rply,4));
if($this->do_debug >= 1) {
- echo "SMTP -> ERROR: " . $this->error["error"] .
- ": " . $rply . $this->CRLF;
+ echo "SMTP -> ERROR: " . $this->error["error"] . ": " . $rply . $this->CRLF . '<br />';
}
return false;
}
@@ -235,8 +237,7 @@
"smtp_code" => $code,
"smtp_msg" => substr($rply,4));
if($this->do_debug >= 1) {
- echo "SMTP -> ERROR: " . $this->error["error"] .
- ": " . $rply . $this->CRLF;
+ echo "SMTP -> ERROR: " . $this->error["error"] . ": " . $rply . $this->CRLF . '<br />';
}
return false;
}
@@ -253,8 +254,7 @@
"smtp_code" => $code,
"smtp_msg" => substr($rply,4));
if($this->do_debug >= 1) {
- echo "SMTP -> ERROR: " . $this->error["error"] .
- ": " . $rply . $this->CRLF;
+ echo "SMTP -> ERROR: " . $this->error["error"] . ": " . $rply . $this->CRLF . '<br />';
}
return false;
}
@@ -271,11 +271,9 @@
if(!empty($this->smtp_conn)) {
$sock_status = socket_get_status($this->smtp_conn);
if($sock_status["eof"]) {
- // hmm this is an odd situation... the socket is
- // valid but we are not connected anymore
+ // the socket is valid but we are not connected
if($this->do_debug >= 1) {
- echo "SMTP -> NOTICE:" . $this->CRLF .
- "EOF caught while checking if connected";
+ echo "SMTP -> NOTICE:" . $this->CRLF . "EOF caught while checking if connected";
}
$this->Close();
return false;
@@ -302,9 +300,9 @@
}
}

- /***************************************************************
- * SMTP COMMANDS *
- *************************************************************/
+ /////////////////////////////////////////////////
+ // SMTP COMMANDS
+ /////////////////////////////////////////////////

/**
* Issues a data command and sends the msg_data to the server
@@ -340,7 +338,7 @@
$code = substr($rply,0,3);

if($this->do_debug >= 2) {
- echo "SMTP -> FROM SERVER:" . $this->CRLF . $rply;
+ echo "SMTP -> FROM SERVER:" . $rply . $this->CRLF . '<br />';
}

if($code != 354) {
@@ -349,8 +347,7 @@
"smtp_code" => $code,
"smtp_msg" => substr($rply,4));
if($this->do_debug >= 1) {
- echo "SMTP -> ERROR: " . $this->error["error"] .
- ": " . $rply . $this->CRLF;
+ echo "SMTP -> ERROR: " . $this->error["error"] . ": " . $rply . $this->CRLF . '<br />';
}
return false;
}
@@ -363,7 +360,7 @@
* each of those into smaller lines to fit within the limit.
* in addition we will be looking for lines that start with
* a period '.' and append and additional period '.' to that
- * line. NOTE: this does not count towards are limit.
+ * line. NOTE: this does not count towards limit.
*/

// normalize the line breaks so we know the explode works
@@ -379,6 +376,7 @@
* and we can process all lines before a blank "" line as
* headers.
*/
+
$field = substr($lines[0],0,strpos($lines[0],":"));
$in_headers = false;
if(!empty($field) && !strstr($field," ")) {
@@ -416,7 +414,7 @@
}
$lines_out[] = $line;

- // now send the lines to the server
+ // send the lines to the server
while(list(,$line_out) = @each($lines_out)) {
if(strlen($line_out) > 0)
{
@@ -428,15 +426,14 @@
}
}

- // ok all the message data has been sent so lets get this
- // over with aleady
+ // message data has been sent
fputs($this->smtp_conn, $this->CRLF . "." . $this->CRLF);

$rply = $this->get_lines();
$code = substr($rply,0,3);

if($this->do_debug >= 2) {
- echo "SMTP -> FROM SERVER:" . $this->CRLF . $rply;
+ echo "SMTP -> FROM SERVER:" . $rply . $this->CRLF . '<br />';
}

if($code != 250) {
@@ -445,8 +442,7 @@
"smtp_code" => $code,
"smtp_msg" => substr($rply,4));
if($this->do_debug >= 1) {
- echo "SMTP -> ERROR: " . $this->error["error"] .
- ": " . $rply . $this->CRLF;
+ echo "SMTP -> ERROR: " . $this->error["error"] . ": " . $rply . $this->CRLF . '<br />';
}
return false;
}
@@ -454,61 +450,6 @@
}

/**
- * Expand takes the name and asks the server to list all the
- * people who are members of the _list_. Expand will return
- * back and array of the result or false if an error occurs.
- * Each value in the array returned has the format of:
- * [ <full-name> <sp> ] <path>
- * The definition of <path> is defined in rfc 821
- *
- * Implements rfc 821: EXPN <SP> <string> <CRLF>
- *
- * SMTP CODE SUCCESS: 250
- * SMTP CODE FAILURE: 550
- * SMTP CODE ERROR : 500,501,502,504,421
- * @access public
- * @return string array
- */
- public function Expand($name) {
- $this->error = null; // so no confusion is caused
-
- if(!$this->connected()) {
- $this->error = array(
- "error" => "Called Expand() without being connected");
- return false;
- }
-
- fputs($this->smtp_conn,"EXPN " . $name . $this->CRLF);
-
- $rply = $this->get_lines();
- $code = substr($rply,0,3);
-
- if($this->do_debug >= 2) {
- echo "SMTP -> FROM SERVER:" . $this->CRLF . $rply;
- }
-
- if($code != 250) {
- $this->error =
- array("error" => "EXPN not accepted from server",
- "smtp_code" => $code,
- "smtp_msg" => substr($rply,4));
- if($this->do_debug >= 1) {
- echo "SMTP -> ERROR: " . $this->error["error"] .
- ": " . $rply . $this->CRLF;
- }
- return false;
- }
-
- // parse the reply and place in our array to return to user
- $entries = explode($this->CRLF,$rply);
- while(list(,$l) = @each($entries)) {
- $list[] = substr($l,4);
- }
-
- return $list;
- }
-
- /**
* Sends the HELO command to the smtp server.
* This makes sure that we and the server are in
* the same known state.
@@ -520,7 +461,7 @@
* @access public
* @return bool
*/
- public function Hello($host="") {
+ public function Hello($host = '') {
$this->error = null; // so no confusion is caused

if(!$this->connected()) {
@@ -529,20 +470,18 @@
return false;
}

- // if a hostname for the HELO was not specified determine
- //a suitable one to send
+ // if hostname for HELO was not specified send default
if(empty($host)) {
- // we need to determine some sort of appopiate default
- // to send to the server
+ // determine appropriate default to send to server
$host = "localhost";
}

// Send extended hello first (RFC 2821)
- if(!$this->SendHello("EHLO", $host))
- {
- if(!$this->SendHello("HELO", $host))
+ if(!$this->SendHello("EHLO", $host)) {
+ if(!$this->SendHello("HELO", $host)) {
return false;
}
+ }

return true;
}
@@ -559,7 +498,7 @@
$code = substr($rply,0,3);

if($this->do_debug >= 2) {
- echo "SMTP -> FROM SERVER: " . $this->CRLF . $rply;
+ echo "SMTP -> FROM SERVER: " . $rply . $this->CRLF . '<br />';
}

if($code != 250) {
@@ -568,8 +507,7 @@
"smtp_code" => $code,
"smtp_msg" => substr($rply,4));
if($this->do_debug >= 1) {
- echo "SMTP -> ERROR: " . $this->error["error"] .
- ": " . $rply . $this->CRLF;
+ echo "SMTP -> ERROR: " . $this->error["error"] . ": " . $rply . $this->CRLF . '<br />';
}
return false;
}
@@ -580,59 +518,6 @@
}

/**
- * Gets help information on the keyword specified. If the keyword
- * is not specified then returns generic help, ussually contianing
- * A list of keywords that help is available on. This function
- * returns the results back to the user. It is up to the user to
- * handle the returned data. If an error occurs then false is
- * returned with $this->error set appropiately.
- *
- * Implements rfc 821: HELP [ <SP> <string> ] <CRLF>
- *
- * SMTP CODE SUCCESS: 211,214
- * SMTP CODE ERROR : 500,501,502,504,421
- * @access public
- * @return string
- */
- public function Help($keyword="") {
- $this->error = null; // to avoid confusion
-
- if(!$this->connected()) {
- $this->error = array(
- "error" => "Called Help() without being connected");
- return false;
- }
-
- $extra = "";
- if(!empty($keyword)) {
- $extra = " " . $keyword;
- }
-
- fputs($this->smtp_conn,"HELP" . $extra . $this->CRLF);
-
- $rply = $this->get_lines();
- $code = substr($rply,0,3);
-
- if($this->do_debug >= 2) {
- echo "SMTP -> FROM SERVER:" . $this->CRLF . $rply;
- }
-
- if($code != 211 && $code != 214) {
- $this->error =
- array("error" => "HELP not accepted from server",
- "smtp_code" => $code,
- "smtp_msg" => substr($rply,4));
- if($this->do_debug >= 1) {
- echo "SMTP -> ERROR: " . $this->error["error"] .
- ": " . $rply . $this->CRLF;
- }
- return false;
- }
-
- return $rply;
- }
-
- /**
* Starts a mail transaction from the email address specified in
* $from. Returns true if successful or false otherwise. If True
* the mail transaction is started and then one or more Recipient
@@ -662,7 +547,7 @@
$code = substr($rply,0,3);

if($this->do_debug >= 2) {
- echo "SMTP -> FROM SERVER:" . $this->CRLF . $rply;
+ echo "SMTP -> FROM SERVER:" . $rply . $this->CRLF . '<br />';
}

if($code != 250) {
@@ -671,8 +556,7 @@
"smtp_code" => $code,
"smtp_msg" => substr($rply,4));
if($this->do_debug >= 1) {
- echo "SMTP -> ERROR: " . $this->error["error"] .
- ": " . $rply . $this->CRLF;
+ echo "SMTP -> ERROR: " . $this->error["error"] . ": " . $rply . $this->CRLF . '<br />';
}
return false;
}
@@ -680,48 +564,6 @@
}

/**
- * Sends the command NOOP to the SMTP server.
- *
- * Implements from rfc 821: NOOP <CRLF>
- *
- * SMTP CODE SUCCESS: 250
- * SMTP CODE ERROR : 500, 421
- * @access public
- * @return bool
- */
- public function Noop() {
- $this->error = null; // so no confusion is caused
-
- if(!$this->connected()) {
- $this->error = array(
- "error" => "Called Noop() without being connected");
- return false;
- }
-
- fputs($this->smtp_conn,"NOOP" . $this->CRLF);
-
- $rply = $this->get_lines();
- $code = substr($rply,0,3);
-
- if($this->do_debug >= 2) {
- echo "SMTP -> FROM SERVER:" . $this->CRLF . $rply;
- }
-
- if($code != 250) {
- $this->error =
- array("error" => "NOOP not accepted from server",
- "smtp_code" => $code,
- "smtp_msg" => substr($rply,4));
- if($this->do_debug >= 1) {
- echo "SMTP -> ERROR: " . $this->error["error"] .
- ": " . $rply . $this->CRLF;
- }
- return false;
- }
- return true;
- }
-
- /**
* Sends the quit command to the server and then closes the socket
* if there is no error or the $close_on_error argument is true.
*
@@ -748,7 +590,7 @@
$byemsg = $this->get_lines();

if($this->do_debug >= 2) {
- echo "SMTP -> FROM SERVER:" . $this->CRLF . $byemsg;
+ echo "SMTP -> FROM SERVER:" . $byemsg . $this->CRLF . '<br />';
}

$rval = true;
@@ -762,8 +604,7 @@
"smtp_rply" => substr($byemsg,4));
$rval = false;
if($this->do_debug >= 1) {
- echo "SMTP -> ERROR: " . $e["error"] . ": " .
- $byemsg . $this->CRLF;
+ echo "SMTP -> ERROR: " . $e["error"] . ": " . $byemsg . $this->CRLF . '<br />';
}
}

@@ -801,7 +642,7 @@
$code = substr($rply,0,3);

if($this->do_debug >= 2) {
- echo "SMTP -> FROM SERVER:" . $this->CRLF . $rply;
+ echo "SMTP -> FROM SERVER:" . $rply . $this->CRLF . '<br />';
}

if($code != 250 && $code != 251) {
@@ -810,8 +651,7 @@
"smtp_code" => $code,
"smtp_msg" => substr($rply,4));
if($this->do_debug >= 1) {
- echo "SMTP -> ERROR: " . $this->error["error"] .
- ": " . $rply . $this->CRLF;
+ echo "SMTP -> ERROR: " . $this->error["error"] . ": " . $rply . $this->CRLF . '<br />';
}
return false;
}
@@ -845,7 +685,7 @@
$code = substr($rply,0,3);

if($this->do_debug >= 2) {
- echo "SMTP -> FROM SERVER:" . $this->CRLF . $rply;
+ echo "SMTP -> FROM SERVER:" . $rply . $this->CRLF . '<br />';
}

if($code != 250) {
@@ -854,8 +694,7 @@
"smtp_code" => $code,
"smtp_msg" => substr($rply,4));
if($this->do_debug >= 1) {
- echo "SMTP -> ERROR: " . $this->error["error"] .
- ": " . $rply . $this->CRLF;
+ echo "SMTP -> ERROR: " . $this->error["error"] . ": " . $rply . $this->CRLF . '<br />';
}
return false;
}
@@ -869,54 +708,6 @@
* the mail transaction is started and then one or more Recipient
* commands may be called followed by a Data command. This command
* will send the message to the users terminal if they are logged
- * in.
- *
- * Implements rfc 821: SEND <SP> FROM:<reverse-path> <CRLF>
- *
- * SMTP CODE SUCCESS: 250
- * SMTP CODE SUCCESS: 552,451,452
- * SMTP CODE SUCCESS: 500,501,502,421
- * @access public
- * @return bool
- */
- public function Send($from) {
- $this->error = null; // so no confusion is caused
-
- if(!$this->connected()) {
- $this->error = array(
- "error" => "Called Send() without being connected");
- return false;
- }
-
- fputs($this->smtp_conn,"SEND FROM:" . $from . $this->CRLF);
-
- $rply = $this->get_lines();
- $code = substr($rply,0,3);
-
- if($this->do_debug >= 2) {
- echo "SMTP -> FROM SERVER:" . $this->CRLF . $rply;
- }
-
- if($code != 250) {
- $this->error =
- array("error" => "SEND not accepted from server",
- "smtp_code" => $code,
- "smtp_msg" => substr($rply,4));
- if($this->do_debug >= 1) {
- echo "SMTP -> ERROR: " . $this->error["error"] .
- ": " . $rply . $this->CRLF;
- }
- return false;
- }
- return true;
- }
-
- /**
- * Starts a mail transaction from the email address specified in
- * $from. Returns true if successful or false otherwise. If True
- * the mail transaction is started and then one or more Recipient
- * commands may be called followed by a Data command. This command
- * will send the message to the users terminal if they are logged
* in and send them an email.
*
* Implements rfc 821: SAML <SP> FROM:<reverse-path> <CRLF>
@@ -942,7 +733,7 @@
$code = substr($rply,0,3);

if($this->do_debug >= 2) {
- echo "SMTP -> FROM SERVER:" . $this->CRLF . $rply;
+ echo "SMTP -> FROM SERVER:" . $rply . $this->CRLF . '<br />';
}

if($code != 250) {
@@ -951,8 +742,7 @@
"smtp_code" => $code,
"smtp_msg" => substr($rply,4));
if($this->do_debug >= 1) {
- echo "SMTP -> ERROR: " . $this->error["error"] .
- ": " . $rply . $this->CRLF;
+ echo "SMTP -> ERROR: " . $this->error["error"] . ": " . $rply . $this->CRLF . '<br />';
}
return false;
}
@@ -960,54 +750,6 @@
}

/**
- * Starts a mail transaction from the email address specified in
- * $from. Returns true if successful or false otherwise. If True
- * the mail transaction is started and then one or more Recipient
- * commands may be called followed by a Data command. This command
- * will send the message to the users terminal if they are logged
- * in or mail it to them if they are not.
- *
- * Implements rfc 821: SOML <SP> FROM:<reverse-path> <CRLF>
- *
- * SMTP CODE SUCCESS: 250
- * SMTP CODE SUCCESS: 552,451,452
- * SMTP CODE SUCCESS: 500,501,502,421
- * @access public
- * @return bool
- */
- public function SendOrMail($from) {
- $this->error = null; // so no confusion is caused
-
- if(!$this->connected()) {
- $this->error = array(
- "error" => "Called SendOrMail() without being connected");
- return false;
- }
-
- fputs($this->smtp_conn,"SOML FROM:" . $from . $this->CRLF);
-
- $rply = $this->get_lines();
- $code = substr($rply,0,3);
-
- if($this->do_debug >= 2) {
- echo "SMTP -> FROM SERVER:" . $this->CRLF . $rply;
- }
-
- if($code != 250) {
- $this->error =
- array("error" => "SOML not accepted from server",
- "smtp_code" => $code,
- "smtp_msg" => substr($rply,4));
- if($this->do_debug >= 1) {
- echo "SMTP -> ERROR: " . $this->error["error"] .
- ": " . $rply . $this->CRLF;
- }
- return false;
- }
- return true;
- }
-
- /**
* This is an optional command for SMTP that this class does not
* support. This method is here to make the RFC821 Definition
* complete for this class and __may__ be implimented in the future
@@ -1024,60 +766,24 @@
$this->error = array("error" => "This method, TURN, of the SMTP ".
"is not implemented");
if($this->do_debug >= 1) {
- echo "SMTP -> NOTICE: " . $this->error["error"] . $this->CRLF;
+ echo "SMTP -> NOTICE: " . $this->error["error"] . $this->CRLF . '<br />';
}
return false;
}

/**
- * Verifies that the name is recognized by the server.
- * Returns false if the name could not be verified otherwise
- * the response from the server is returned.
- *
- * Implements rfc 821: VRFY <SP> <string> <CRLF>
- *
- * SMTP CODE SUCCESS: 250,251
- * SMTP CODE FAILURE: 550,551,553
- * SMTP CODE ERROR : 500,501,502,421
+ * Get the current error
* @access public
- * @return int
+ * @return array
*/
- public function Verify($name) {
- $this->error = null; // so no confusion is caused
-
- if(!$this->connected()) {
- $this->error = array(
- "error" => "Called Verify() without being connected");
- return false;
+ public function getError() {
+ return $this->error;
}

- fputs($this->smtp_conn,"VRFY " . $name . $this->CRLF);
+ /////////////////////////////////////////////////
+ // INTERNAL FUNCTIONS
+ /////////////////////////////////////////////////

- $rply = $this->get_lines();
- $code = substr($rply,0,3);
-
- if($this->do_debug >= 2) {
- echo "SMTP -> FROM SERVER:" . $this->CRLF . $rply;
- }
-
- if($code != 250 && $code != 251) {
- $this->error =
- array("error" => "VRFY failed on name '$name'",
- "smtp_code" => $code,
- "smtp_msg" => substr($rply,4));
- if($this->do_debug >= 1) {
- echo "SMTP -> ERROR: " . $this->error["error"] .
- ": " . $rply . $this->CRLF;
- }
- return false;
- }
- return $rply;
- }
-
- /*******************************************************************
- * INTERNAL FUNCTIONS *
- ******************************************************************/
-
/**
* Read in as many lines as possible
* either before eof or socket timeout occurs on the operation.
@@ -1091,17 +797,14 @@
$data = "";
while($str = @fgets($this->smtp_conn,515)) {
if($this->do_debug >= 4) {
- echo "SMTP -> get_lines(): \$data was \"$data\"" .
- $this->CRLF;
- echo "SMTP -> get_lines(): \$str is \"$str\"" .
- $this->CRLF;
+ echo "SMTP -> get_lines(): \$data was \"$data\"" . $this->CRLF . '<br />';
+ echo "SMTP -> get_lines(): \$str is \"$str\"" . $this->CRLF . '<br />';
}
$data .= $str;
if($this->do_debug >= 4) {
- echo "SMTP -> get_lines(): \$data is \"$data\"" . $this->CRLF;
+ echo "SMTP -> get_lines(): \$data is \"$data\"" . $this->CRLF . '<br />';
}
- // if the 4th character is a space then we are done reading
- // so just break the loop
+ // if 4th character is a space, we are done reading, break the loop
if(substr($str,3,1) == " ") { break; }
}
return $data;

Modified: development/branches/jcamp/libraries/phputf8/stristr.php
===================================================================
--- development/branches/jcamp/libraries/phputf8/stristr.php 2010-08-31 19:21:09 UTC (rev 18740)
+++ development/branches/jcamp/libraries/phputf8/stristr.php 2010-08-31 19:24:28 UTC (rev 18741)
@@ -26,7 +26,9 @@

$lstr = utf8_strtolower($str);
$lsearch = utf8_strtolower($search);
- preg_match('/^(.*)'.preg_quote($lsearch).'/Us',$lstr, $matches);
+ //JOOMLA SPECIFIC FIX - BEGIN
+ preg_match('/^(.*)'.preg_quote($lsearch, '/').'/Us',$lstr, $matches);
+ //JOOMLA SPECIFIC FIX - END

if ( count($matches) == 2 ) {
return substr($str, strlen($matches[1]));

Modified: development/branches/jcamp/media/system/js/mootools-more-uncompressed.js
===================================================================
--- development/branches/jcamp/media/system/js/mootools-more-uncompressed.js 2010-08-31 19:21:09 UTC (rev 18740)
+++ development/branches/jcamp/media/system/js/mootools-more-uncompressed.js 2010-08-31 19:24:28 UTC (rev 18741)
@@ -1,18 +1,50 @@
//MooTools More, <http://mootools.net/more>. Copyright (c) 2006-2009 Aaron Newton <http://clientcide.com/>, Valerio Proietti <http://mad4milk.net> & the MooTools team <http://mootools.net/developers>, MIT Style License.

+/*
+---
+
+script: More.js
+
+description: MooTools More
+
+license: MIT-style license
+
+authors:
+- Guillermo Rauch
+- Thomas Aylott
+- Scott Kyle
+
+requires:
+- core:1.2.4/MooTools
+
+provides: [MooTools.More]
+
+...
+*/
+
MooTools.More = {
- 'version': '1.2.3.1'
+ 'version': '1.2.4.4'
};

/*
-Script: MooTools.Lang.js
- Provides methods for localization.
+---

- License:
- MIT-style license.
+script: MooTools.Lang.js

- Authors:
- Aaron Newton
+description: Provides methods for localization.
+
+license: MIT-style license
+
+authors:
+- Aaron Newton
+
+requires:
+- core:1.2.4/Events
+- /MooTools.More
+
+provides: [MooTools.Lang]
+
+...
*/

(function(){
@@ -24,7 +56,7 @@
},
cascades: ['en-US']
};
-
+
var cascaded;

MooTools.lang = new Events();
@@ -98,40 +130,104 @@
})();

/*
-Script: Log.js
- Provides basic logging functionality for plugins to implement.
+---

- License:
- MIT-style license.
+script: Log.js

- Authors:
- Guillermo Rauch
+description: Provides basic logging functionality for plugins to implement.
+
+license: MIT-style license
+
+authors:
+- Guillermo Rauch
+- Thomas Aylott
+- Scott Kyle
+
+requires:
+- core:1.2.4/Class
+- /MooTools.More
+
+provides: [Log]
+
+...
*/

-var Log = new Class({
+(function(){

- log: function(){
- Log.logger.call(this, arguments);
+var global = this;
+
+var log = function(){
+ if (global.console && console.log){
+ try {
+ console.log.apply(console, arguments);
+ } catch(e) {
+ console.log(Array.slice(arguments));
+ }
+ } else {
+ Log.logged.push(arguments);
}
+ return this;
+};

+var disabled = function(){
+ this.logged.push(arguments);
+ return this;
+};
+
+this.Log = new Class({
+
+ logged: [],
+
+ log: disabled,
+
+ resetLog: function(){
+ this.logged.empty();
+ return this;
+ },
+
+ enableLog: function(){
+ this.log = log;
+ this.logged.each(function(args){
+ this.log.apply(this, args);
+ }, this);
+ return this.resetLog();
+ },
+
+ disableLog: function(){
+ this.log = disabled;
+ return this;
+ }
+
});

-Log.logged = [];
+Log.extend(new Log).enableLog();

+// legacy
Log.logger = function(){
- if(window.console && console.log) console.log.apply(console, arguments);
- else Log.logged.push(arguments);
+ return this.log.apply(this, arguments);
};

+})();
+
/*
-Script: Class.Refactor.js
- Extends a class onto itself with new property, preserving any items attached to the class's namespace.
+---

- License:
- MIT-style license.
+script: Class.Refactor.js

- Authors:
- Aaron Newton
+description: Extends a class onto itself with new property, preserving any items attached to the class's namespace.
+
+license: MIT-style license
+
+authors:
+- Aaron Newton
+
+requires:
+- core:1.2.4/Class
+- /MooTools.More
+
+provides: [Class.refactor]
+
+...
*/

Class.refactor = function(original, refactors){
@@ -152,18 +248,28 @@
};

/*
-Script: Class.Binds.js
- Automagically binds specified methods in a class to the instance of the class.
+---

- License:
- MIT-style license.
+script: Class.Binds.js

- Authors:
- Aaron Newton
+description: Automagically binds specified methods in a class to the instance of the class.
+
+license: MIT-style license
+
+authors:
+- Aaron Newton
+
+requires:
+- core:1.2.4/Class
+- /MooTools.More
+
+provides: [Class.Binds]
+
+...
*/

Class.Mutators.Binds = function(binds){
- return binds;
+ return binds;
};

Class.Mutators.initialize = function(initialize){
@@ -176,15 +282,27 @@
};
};

+
/*
-Script: Class.Occlude.js
- Prevents a class from being applied to a DOM element twice.
+---

- License:
- MIT-style license.
+script: Class.Occlude.js

- Authors:
- Aaron Newton
+description: Prevents a class from being applied to a DOM element twice.
+
+license: MIT-style license.
+
+authors:
+- Aaron Newton
+
+requires:
+- core/1.2.4/Class
+- core:1.2.4/Element
+- /MooTools.More
+
+provides: [Class.Occlude]
+
+...
*/

Class.Occlude = new Class({
@@ -192,26 +310,37 @@
occlude: function(property, element){
element = document.id(element || this.element);
var instance = element.retrieve(property || this.property);
- if (instance && !$defined(this.occluded)){
- this.occluded = instance;
- } else {
- this.occluded = false;
- element.store(property || this.property, this);
- }
+ if (instance && !$defined(this.occluded))
+ return this.occluded = instance;
+
+ this.occluded = false;
+ element.store(property || this.property, this);
return this.occluded;
}

});

/*
-Script: Chain.Wait.js
- Adds a method to inject pauses between chained events.
+---

- License:
- MIT-style license.
+script: Chain.Wait.js

- Authors:
- Aaron Newton
+description: value, Adds a method to inject pauses between chained events.
+
+license: MIT-style license.
+
+authors:
+- Aaron Newton
+
+requires:
+- core:1.2.4/Chain
+- core:1.2.4/Element
+- core:1.2.4/Fx
+- /MooTools.More
+
+provides: [Chain.Wait]
+
+...
*/

(function(){
@@ -233,37 +362,43 @@
});
}

- try {
- Element.implement({
- chains: function(effects){
- $splat($pick(effects, ['tween', 'morph', 'reveal'])).each(function(effect){
- effect = this.get(effect);
- if (!effect) return;
- effect.setOptions({
- link:'chain'
- });
- }, this);
- return this;
- },
- pauseFx: function(duration, effect){
- this.chains(effect).get($pick(effect, 'tween')).wait(duration);
- return this;
- }
- });
- } catch(e){}
+ Element.implement({
+ chains: function(effects){
+ $splat($pick(effects, ['tween', 'morph', 'reveal'])).each(function(effect){
+ effect = this.get(effect);
+ if (!effect) return;
+ effect.setOptions({
+ link:'chain'
+ });
+ }, this);
+ return this;
+ },
+ pauseFx: function(duration, effect){
+ this.chains(effect).get($pick(effect, 'tween')).wait(duration);
+ return this;
+ }
+ });

})();

/*
-Script: Array.Extras.js
- Extends the Array native object to include useful methods to work with arrays.
+---

- License:
- MIT-style license.
+script: Array.Extras.js

- Authors:
- Christoph Pojer
+description: Extends the Array native object to include useful methods to work with arrays.

+license: MIT-style license
+
+authors:
+- Christoph Pojer
+
+requires:
+- core:1.2.4/Array
+
+provides: [Array.Extras]
+
+...
*/
Array.implement({

@@ -291,50 +426,70 @@

unique: function(){
return [].combine(this);
+ },
+
+ shuffle: function(){
+ for (var i = this.length; i && --i;){
+ var temp = this[i], r = Math.floor(Math.random() * ( i + 1 ));
+ this[i] = this[r];
+ this[r] = temp;
+ }
+ return this;
}

});

/*
-Script: Date.js
- Extends the Date native object to include methods useful in managing dates.
+---

- License:
- MIT-style license.
+script: Date.js

- Authors:
- Aaron Newton
- Nicholas Barthelemy - https://svn.nbarthelemy.com/date-js/
- Harald Kirshner - mail [at] digitarald.de; http://digitarald.de
- Scott Kyle - scott [at] appden.com; http://appden.com
+description: Extends the Date native object to include methods useful in managing dates.

+license: MIT-style license
+
+authors:
+- Aaron Newton
+- Nicholas Barthelemy - https://svn.nbarthelemy.com/date-js/
+- Harald Kirshner - mail [at] digitarald.de; http://digitarald.de
+- Scott Kyle - scott [at] appden.com; http://appden.com
+
+requires:
+- core:1.2.4/Array
+- core:1.2.4/String
+- core:1.2.4/Number
+- core:1.2.4/Lang
+- core:1.2.4/Date.English.US
+- /MooTools.More
+
+provides: [Date]
+
+...
*/

(function(){

+var Date = this.Date;
+
if (!Date.now) Date.now = $time;

-Date.Methods = {};
-
-['Date', 'Day', 'FullYear', 'Hours', 'Milliseconds', 'Minutes', 'Month', 'Seconds', 'Time', 'TimezoneOffset',
- 'Week', 'Timezone', 'GMTOffset', 'DayOfYear', 'LastMonth', 'LastDayOfMonth', 'UTCDate', 'UTCDay', 'UTCFullYear',
- 'AMPM', 'Ordinal', 'UTCHours', 'UTCMilliseconds', 'UTCMinutes', 'UTCMonth', 'UTCSeconds'].each(function(method){
- Date.Methods[method.toLowerCase()] = method;
-});
-
-$each({
+Date.Methods = {
ms: 'Milliseconds',
year: 'FullYear',
min: 'Minutes',
mo: 'Month',
sec: 'Seconds',
hr: 'Hours'
-}, function(value, key){
- Date.Methods[key] = value;
+};
+
+['Date', 'Day', 'FullYear', 'Hours', 'Milliseconds', 'Minutes', 'Month', 'Seconds', 'Time', 'TimezoneOffset',
+ 'Week', 'Timezone', 'GMTOffset', 'DayOfYear', 'LastMonth', 'LastDayOfMonth', 'UTCDate', 'UTCDay', 'UTCFullYear',
+ 'AMPM', 'Ordinal', 'UTCHours', 'UTCMilliseconds', 'UTCMinutes', 'UTCMonth', 'UTCSeconds'].each(function(method){
+ Date.Methods[method.toLowerCase()] = method;
});

-var zeroize = function(what, length){
- return new Array(length - what.toString().length + 1).join('0') + what;
+var pad = function(what, length){
+ return new Array(length - String(what).length + 1).join('0') + what;
};

Date.implement({
@@ -397,23 +552,10 @@
return this.set({hr: 0, min: 0, sec: 0, ms: 0});
},

- diff: function(d, resolution){
- resolution = resolution || 'day';
- if ($type(d) == 'string') d = Date.parse(d);
-
- switch (resolution){
- case 'year':
- return d.get('year') - this.get('year');
- case 'month':
- var months = (d.get('year') - this.get('year')) * 12;
- return months + d.get('mo') - this.get('mo');
- default:
- var diff = d.get('time') - this.get('time');
- if (Date.units[resolution]() > diff.abs()) return 0;
- return ((d.get('time') - this.get('time')) / Date.units[resolution]()).round();
- }
-
- return null;
+ diff: function(date, resolution){
+ if ($type(date) == 'string') date = Date.parse(date);
+
+ return ((date - this) / Date.units[resolution || 'day'](3, 3)).toInt(); // non-leap year, 30-day month
},

getLastDayOfMonth: function(){
@@ -421,14 +563,14 @@
},

getDayOfYear: function(){
- return (Date.UTC(this.get('year'), this.get('mo'), this.get('date') + 1)
+ return (Date.UTC(this.get('year'), this.get('mo'), this.get('date') + 1)
- Date.UTC(this.get('year'), 0, 1)) / Date.units.day();
},

getWeek: function(){
return (this.get('dayofyear') / 7).ceil();
},
-
+
getOrdinal: function(day){
return Date.getMsg('ordinal', day || this.get('date'));
},
@@ -441,7 +583,7 @@

getGMTOffset: function(){
var off = this.get('timezoneOffset');
- return ((off > 0) ? '-' : '+') + zeroize((off.abs() / 60).floor(), 2) + zeroize(off % 60, 2);
+ return ((off > 0) ? '-' : '+') + pad((off.abs() / 60).floor(), 2) + pad(off % 60, 2);
},

setAMPM: function(ampm){
@@ -471,23 +613,23 @@
f = formats[f.toLowerCase()] || f; // replace short-hand with actual format
var d = this;
return f.replace(/%([a-z%])/gi,
- function($1, $2){
- switch ($2){
+ function($0, $1){
+ switch ($1){
case 'a': return Date.getMsg('days')[d.get('day')].substr(0, 3);
case 'A': return Date.getMsg('days')[d.get('day')];
case 'b': return Date.getMsg('months')[d.get('month')].substr(0, 3);
case 'B': return Date.getMsg('months')[d.get('month')];
case 'c': return d.toString();
- case 'd': return zeroize(d.get('date'), 2);
- case 'H': return zeroize(d.get('hr'), 2);
+ case 'd': return pad(d.get('date'), 2);
+ case 'H': return pad(d.get('hr'), 2);
case 'I': return ((d.get('hr') % 12) || 12);
- case 'j': return zeroize(d.get('dayofyear'), 3);
- case 'm': return zeroize((d.get('mo') + 1), 2);
- case 'M': return zeroize(d.get('min'), 2);
+ case 'j': return pad(d.get('dayofyear'), 3);
+ case 'm': return pad((d.get('mo') + 1), 2);
+ case 'M': return pad(d.get('min'), 2);
case 'o': return d.get('ordinal');
case 'p': return Date.getMsg(d.get('ampm'));
- case 'S': return zeroize(d.get('seconds'), 2);
- case 'U': return zeroize(d.get('week'), 2);
+ case 'S': return pad(d.get('seconds'), 2);
+ case 'U': return pad(d.get('week'), 2);
case 'w': return d.get('day');
case 'x': return d.format(Date.getMsg('shortDate'));
case 'X': return d.format(Date.getMsg('shortTime'));
@@ -496,7 +638,7 @@
case 'T': return d.get('GMTOffset');
case 'Z': return d.get('Timezone');
}
- return $2;
+ return $1;
}
);
},
@@ -507,6 +649,7 @@

});

+Date.alias('toISOString', 'toJSON');
Date.alias('diff', 'compare');
Date.alias('format', 'strftime');

@@ -519,6 +662,7 @@
'long': '%B %d, %Y %H:%M'
};

+var parsePatterns = [];
var nativeParse = Date.parse;

var parseWord = function(type, word, num){
@@ -537,7 +681,7 @@
var match = translated.filter(function(name){
return this.test(name);
}, new RegExp('^' + word, 'i'));
- if (!match.length) throw new Error('Invalid ' + type + ' string');
+ if (!match.length) throw new Error('Invalid ' + type + ' string');
if (match.length > 1) throw new Error('Ambiguous ' + type);
ret = match[0];
}
@@ -545,7 +689,6 @@
return (num) ? translated.indexOf(ret) : ret;
};

-
Date.extend({

getMsg: function(key, args) {
@@ -574,7 +717,7 @@
},

isLeapYear: function(year){
- return new Date(year, 1, 29).get('date') == 29;
+ return ((year % 4 === 0) && (year % 100 !== 0)) || (year % 400 === 0);
},

parse: function(from){
@@ -585,9 +728,9 @@
if (!from.length) return null;

var parsed;
- Date.parsePatterns.some(function(pattern){
- var r = pattern.re.exec(from);
- return (r) ? (parsed = pattern.handler(r)) : false;
+ parsePatterns.some(function(pattern){
+ var bits = pattern.re.exec(from);
+ return (bits) ? (parsed = pattern.handler(bits)) : false;
});

return parsed || new Date(nativeParse(from));
@@ -603,12 +746,14 @@

parseUTC: function(value){
var localDate = new Date(value);
- var utcSeconds = Date.UTC(localDate.get('year'),
- localDate.get('mo'),
- localDate.get('date'),
- localDate.get('hr'),
- localDate.get('min'),
- localDate.get('sec'));
+ var utcSeconds = Date.UTC(
+ localDate.get('year'),
+ localDate.get('mo'),
+ localDate.get('date'),
+ localDate.get('hr'),
+ localDate.get('min'),
+ localDate.get('sec')
+ );
return new Date(utcSeconds);
},

@@ -621,98 +766,110 @@
},

defineFormats: function(formats){
- for (var name in formats) Date.defineFormat(name, formats[f]);
+ for (var name in formats) Date.defineFormat(name, formats[name]);
},

- parsePatterns: [],
-
+ parsePatterns: parsePatterns, // this is deprecated
+
defineParser: function(pattern){
- Date.parsePatterns.push( pattern.re && pattern.handler ? pattern : build(pattern) );
+ parsePatterns.push((pattern.re && pattern.handler) ? pattern : build(pattern));
},
-
+
defineParsers: function(){
Array.flatten(arguments).each(Date.defineParser);
},
-
+
define2DigitYearStart: function(year){
- yr_start = year % 100;
- yr_base = year - yr_start;
+ startYear = year % 100;
+ startCentury = year - startYear;
}

});

-var yr_base = 1900;
-var yr_start = 70;
+var startCentury = 1900;
+var startYear = 70;

+var regexOf = function(type){
+ return new RegExp('(?:' + Date.getMsg(type).map(function(name){
+ return name.substr(0, 3);
+ }).join('|') + ')[a-z]*');
+};
+
var replacers = function(key){
switch(key){
case 'x': // iso8601 covers yyyy-mm-dd, so just check if month is first
- return (Date.orderIndex('month') == 1) ? '%m[.-/]%d([.-/]%y)?' : '%d[.-/]%m([.-/]%y)?';
+ return ((Date.orderIndex('month') == 1) ? '%m[.-/]%d' : '%d[.-/]%m') + '([.-/]%y)?';
case 'X':
- return '%H([.:]%M)?([.:]%S([.:]%s)?)?\\s?%p?\\s?%T?';
- case 'o':
- return '[^\\d\\s]*';
+ return '%H([.:]%M)?([.:]%S([.:]%s)?)? ?%p? ?%T?';
}
return null;
};

var keys = {
- a: /[a-z]{3,}/,
d: /[0-2]?[0-9]|3[01]/,
H: /[01]?[0-9]|2[0-3]/,
I: /0?[1-9]|1[0-2]/,
M: /[0-5]?\d/,
s: /\d+/,
+ o: /[a-z]*/,
p: /[ap]\.?m\.?/,
y: /\d{2}|\d{4}/,
Y: /\d{4}/,
T: /Z|[+-]\d{2}(?::?\d{2})?/
};

-keys.B = keys.b = keys.A = keys.a;
keys.m = keys.I;
keys.S = keys.M;

-var lang;
+var currentLanguage;

+var recompile = function(language){
+ currentLanguage = language;
+
+ keys.a = keys.A = regexOf('days');
+ keys.b = keys.B = regexOf('months');
+
+ parsePatterns.each(function(pattern, i){
+ if (pattern.format) parsePatterns[i] = build(pattern.format);
+ });
+};
+
var build = function(format){
- if (!lang) return {format: format}; // wait until language is set
-
- var parsed = [null];
-
+ if (!currentLanguage) return {format: format};
+
+ var parsed = [];
var re = (format.source || format) // allow format to be regex
.replace(/%([a-z])/gi,
- function($1, $2){
- return replacers($2) || $1;
+ function($0, $1){
+ return replacers($1) || $0;
}
).replace(/\((?!\?)/g, '(?:') // make all groups non-capturing
.replace(/ (?!\?|\*)/g, ',? ') // be forgiving with spaces and commas
.replace(/%([a-z%])/gi,
- function($1, $2){
- var p = keys[$2];
- if (!p) return $2;
- parsed.push($2);
+ function($0, $1){
+ var p = keys[$1];
+ if (!p) return $1;
+ parsed.push($1);
return '(' + p.source + ')';
}
- );
+ ).replace(/\[a-z\]/gi, '[a-z\\u00c0-\\uffff]'); // handle unicode words

return {
format: format,
re: new RegExp('^' + re + '$', 'i'),
handler: function(bits){
+ bits = bits.slice(1).associate(parsed);
var date = new Date().clearTime();
- for (var i = 1; i < parsed.length; i++)
- date = handle.call(date, parsed[i], bits[i]);
+ if ('d' in bits) handle.call(date, 'd', 1);
+ if ('m' in bits || 'b' in bits || 'B' in bits) handle.call(date, 'm', 1);
+ for (var key in bits) handle.call(date, key, bits[key]);
return date;
}
};
};

var handle = function(key, value){
- if (!value){
- if (key == 'm' || key == 'd') value = 1;
- else return this;
- }
+ if (!value) return this;

switch(key){
case 'a': case 'A': return this.set('day', Date.parseDay(value, true));
@@ -728,13 +885,13 @@
case 'Y': return this.set('year', value);
case 'y':
value = +value;
- if (value < 100) value += yr_base + (value < yr_start ? 100 : 0);
+ if (value < 100) value += startCentury + (value < startYear ? 100 : 0);
return this.set('year', value);
case 'T':
if (value == 'Z') value = '+00';
var offset = value.match(/([+-])(\d{2}):?(\d{2})?/);
offset = (offset[1] + '1') * (offset[2] * 60 + (+offset[3] || 0)) + this.getTimezoneOffset();
- return this.set('time', (this * 1) - offset * 60000);
+ return this.set('time', this - offset * 60000);
}

return this;
@@ -745,38 +902,63 @@
'%Y%m%d(T%H(%M%S?)?)?', // "19991231", "19991231T1159", compact
'%x( %X)?', // "12/31", "12.31.99", "12-31-1999", "12/31/2008 11:59 PM"
'%d%o( %b( %Y)?)?( %X)?', // "31st", "31st December", "31 Dec 1999", "31 Dec 1999 11:59pm"
- '%b %d%o?( %Y)?( %X)?', // Same as above with month and day switched
- '%b %Y' // "December 1999"
+ '%b( %d%o)?( %Y)?( %X)?', // Same as above with month and day switched
+ '%Y %b( %d%o( %X)?)?', // Same as above with year coming first
+ '%o %b %d %X %T %Y' // "Thu Oct 22 08:11:23 +0000 2009"
);

MooTools.lang.addEvent('langChange', function(language){
- if (!MooTools.lang.get('Date')) return;
-
- lang = language;
- Date.parsePatterns.each(function(pattern, i){
- if (pattern.format) Date.parsePatterns[i] = build(pattern.format);
- });
-
+ if (MooTools.lang.get('Date')) recompile(language);
}).fireEvent('langChange', MooTools.lang.getCurrentLanguage());

})();

/*
-Script: Date.Extras.js
- Extends the Date native object to include extra methods (on top of those in Date.js).
+---

- License:
- MIT-style license.
+script: Date.Extras.js

- Authors:
- Aaron Newton
+description: Extends the Date native object to include extra methods (on top of those in Date.js).

+license: MIT-style license
+
+authors:
+- Aaron Newton
+- Scott Kyle
+
+requires:
+- /Date
+
+provides: [Date.Extras]
+
+...
*/

Date.implement({

timeDiffInWords: function(relative_to){
return Date.distanceOfTimeInWords(this, relative_to || new Date);
+ },
+
+ timeDiff: function(to, joiner){
+ if (to == null) to = new Date;
+ var delta = ((to - this) / 1000).toInt();
+ if (!delta) return '0s';
+
+ var durations = {s: 60, m: 60, h: 24, d: 365, y: 0};
+ var duration, vals = [];
+
+ for (var step in durations){
+ if (!delta) break;
+ if ((duration = durations[step])){
+ vals.unshift((delta % duration) + step);
+ delta = (delta / duration).toInt();
+ } else {
+ vals.unshift(delta + step);
+ }
+ }
+
+ return vals.join(joiner || ':');
}

});
@@ -792,22 +974,30 @@
getTimePhrase: function(delta){
var suffix = (delta < 0) ? 'Until' : 'Ago';
if (delta < 0) delta *= -1;
-
- var msg = (delta < 60) ? 'lessThanMinute' :
- (delta < 120) ? 'minute' :
- (delta < (45 * 60)) ? 'minutes' :
- (delta < (90 * 60)) ? 'hour' :
- (delta < (24 * 60 * 60)) ? 'hours' :
- (delta < (48 * 60 * 60)) ? 'day' :
- 'days';
-
- switch(msg){
- case 'minutes': delta = (delta / 60).round(); break;
- case 'hours': delta = (delta / 3600).round(); break;
- case 'days': delta = (delta / 86400).round();
+
+ var units = {
+ minute: 60,
+ hour: 60,
+ day: 24,
+ week: 7,
+ month: 52 / 12,
+ year: 12,
+ eon: Infinity
+ };
+
+ var msg = 'lessThanMinute';
+
+ for (var unit in units){
+ var interval = units[unit];
+ if (delta < 1.5 * interval){
+ if (delta > 0.75 * interval) msg = unit;
+ break;
+ }
+ delta /= interval;
+ msg = unit + 's';
}
-
- return Date.getMsg(msg + suffix, delta).substitute({delta: delta});
+
+ return Date.getMsg(msg + suffix).substitute({delta: delta.round()});
}

});
@@ -817,7 +1007,7 @@

{
// "today", "tomorrow", "yesterday"
- re: /^tod|tom|yes/i,
+ re: /^(?:tod|tom|yes)/i,
handler: function(bits){
var d = new Date().clearTime();
switch(bits[0]){
@@ -846,14 +1036,24 @@


/*
-Script: Hash.Extras.js
- Extends the Hash native object to include getFromPath which allows a path notation to child elements.
+---

- License:
- MIT-style license.
+script: Hash.Extras.js

- Authors:
- Aaron Newton
+description: Extends the Hash native object to include getFromPath which allows a path notation to child elements.
+
+license: MIT-style license
+
+authors:
+- Aaron Newton
+
+requires:
+- core:1.2.4/Hash.base
+- /MooTools.More
+
+provides: [Hash.Extras]
+
+...
*/

Hash.implement({
@@ -887,20 +1087,30 @@
});

/*
-Script: String.Extras.js
- Extends the String native object to include methods useful in managing various kinds of strings (query strings, urls, html, etc).
+---

- License:
- MIT-style license.
+script: String.Extras.js

- Authors:
- Aaron Newton
- Guillermo Rauch
+description: Extends the String native object to include methods useful in managing various kinds of strings (query strings, urls, html, etc).

+license: MIT-style license
+
+authors:
+- Aaron Newton
+- Guillermo Rauch
+
+requires:
+- core:1.2.4/String
+- core:1.2.4/$util
+- core:1.2.4/Array
+
+provides: [String.Extras]
+
+...
*/

(function(){
-
+
var special = ['À','à','Á','á','Â','â','Ã','ã','Ä','ä','Å','å','Ă','ă','Ą','ą','Ć','ć','Č','č','Ç','ç', 'Ď','ď','Đ','đ', 'È','è','É','é','Ê','ê','Ë','ë','Ě','ě','Ę','ę', 'Ğ','ğ','Ì','ì','Í','í','Î','î','Ï','ï', 'Ĺ','ĺ','Ľ','ľ','Ł','ł', 'Ñ','ñ','Ň','ň','Ń','ń','Ò','ò','Ó','ó','Ô','ô','Õ','õ','Ö','ö','Ø','ø','ő','Ř','ř','Ŕ','ŕ','Š','š','Ş','ş','Ś','ś', 'Ť','ť','Ť','ť','Ţ','ţ','Ù','ù','Ú','ú','Û','û','Ü','ü','Ů','ů', 'Ÿ','ÿ','ý','Ý','Ž','ž','Ź','ź','Ż','ż', 'Þ','þ','Ð','ð','ß','Œ','œ','Æ','æ','µ'];

var standard = ['A','a','A','a','A','a','A','a','Ae','ae','A','a','A','a','A','a','C','c','C','c','C','c','D','d','D','d', 'E','e','E','e','E','e','E','e','E','e','E','e','G','g','I','i','I','i','I','i','I','i','L','l','L','l','L','l', 'N','n','N','n','N','n', 'O','o','O','o','O','o','O','o','Oe','oe','O','o','o', 'R','r','R','r', 'S','s','S','s','S','s','T','t','T','t','T','t', 'U','u','U','u','U','u','Ue','ue','U','u','Y','y','Y','y','Z','z','Z','z','Z','z','TH','th','DH','dh','ss','OE','oe','AE','ae','u'];
@@ -916,6 +1126,13 @@
"\uFFFD": "&raquo;"
};

+var getRegForTag = function(tag, contents) {
+ tag = tag || '';
+ var regstr = contents ? "<" + tag + "[^>]*>([\\s\\S]*?)<\/" + tag + ">" : "<\/?" + tag + "([^>]+)?>";
+ reg = new RegExp(regstr, "gi");
+ return reg;
+};
+
String.implement({

standardize: function(){
@@ -932,17 +1149,20 @@

pad: function(length, str, dir){
if (this.length >= length) return this;
- str = str || ' ';
- var pad = str.repeat(length - this.length).substr(0, length - this.length);
+ var pad = (str == null ? ' ' : '' + str).repeat(length - this.length).substr(0, length - this.length);
if (!dir || dir == 'right') return this + pad;
if (dir == 'left') return pad + this;
return pad.substr(0, (pad.length / 2).floor()) + this + pad.substr(0, (pad.length / 2).ceil());
},

- stripTags: function(){
- return this.replace(/<\/?[^>]+>/gi, '');
+ getTags: function(tag, contents){
+ return this.match(getRegForTag(tag, contents)) || [];
},

+ stripTags: function(tag, contents){
+ return this.replace(getRegForTag(tag, contents), '');
+ },
+
tidy: function(){
var txt = this.toString();
$each(tidymap, function(value, key){
@@ -956,14 +1176,25 @@
})();

/*
-Script: String.QueryString.js
- ...
+---

- License:
- MIT-style license.
+script: String.QueryString.js

- Authors:
- Sebastian Markbåge, Aaron Newton, Lennart Pilon, Valerio Proietti
+description: Methods for dealing with URI query strings.
+
+license: MIT-style license
+
+authors:
+- Sebastian Markbåge, Aaron Newton, Lennart Pilon, Valerio Proietti
+
+requires:
+- core:1.2.4/Array
+- core:1.2.4/String
+- /MooTools.More
+
+provides: [String.QueryString]
+
+...
*/

String.implement({
@@ -1000,38 +1231,46 @@
});

/*
-Script: URI.js
- Provides methods useful in managing the window location and uris.
+---

- License:
- MIT-style license.
+script: URI.js

- Authors:
- Sebastian Markb�ge, Aaron Newton
+description: Provides methods useful in managing the window location and uris.
+
+license: MIT-style license
+
+authors:
+- Sebastian Markb�ge
+- Aaron Newton
+
+requires:
+- core:1.2.4/Selectors
+- /String.QueryString
+
+provides: URI
+
+...
*/

var URI = new Class({

Implements: Options,

- /*
options: {
- base: false
+ /*base: false*/
},
- */

- regex: /^(?:(\w+):)?(?:\/\/(?:(?:([^:@]*):?([^:@]*))?@)?([^:\/?#]*)(?::(\d*))?)?(\.\.?$|(?:[^?#\/]*\/)*)([^?#]*)(?:\?([^#]*))?(?:#(.*))?/,
+ regex: /^(?:(\w+):)?(?:\/\/(?:(?:([^:@\/]*):?([^:@\/]*))?@)?([^:\/?#]*)(?::(\d*))?)?(\.\.?$|(?:[^?#\/]*\/)*)([^?#]*)(?:\?([^#]*))?(?:#(.*))?/,
parts: ['scheme', 'user', 'password', 'host', 'port', 'directory', 'file', 'query', 'fragment'],
- schemes: { http: 80, https: 443, ftp: 21, rtsp: 554, mms: 1755, file: 0 },
+ schemes: {http: 80, https: 443, ftp: 21, rtsp: 554, mms: 1755, file: 0},

initialize: function(uri, options){
this.setOptions(options);
var base = this.options.base || URI.base;
- uri = uri || base;
- if (uri && uri.parsed)
- this.parsed = $unlink(uri.parsed);
- else
- this.set('value', uri.href || uri.toString(), base ? new URI(base) : false);
+ if(!uri) uri = base;
+
+ if (uri && uri.parsed) this.parsed = $unlink(uri.parsed);
+ else this.set('value', uri.href || uri.toString(), base ? new URI(base) : false);
},

parse: function(value, base){
@@ -1094,7 +1333,7 @@
case 'value': return this.combine(this.parsed, base ? base.parsed : false);
case 'data' : return this.getData();
}
- return this.parsed[part] || undefined;
+ return this.parsed[part] || '';
},

go: function(){
@@ -1113,9 +1352,10 @@
},

setData: function(values, merge, part){
- if ($type(arguments[0]) == 'string'){
- values = this.getData();
- values[arguments[0]] = arguments[1];
+ if (typeof values == 'string'){
+ data = this.getData();
+ data[arguments[0]] = arguments[1];
+ values = data;
} else if (merge) {
values = $merge(this.getData(), values);
}
@@ -1128,36 +1368,46 @@

});

-['toString', 'valueOf'].each(function(method){
- URI.prototype[method] = function(){
- return this.get('value');
- };
-});
+URI.prototype.toString = URI.prototype.valueOf = function(){
+ return this.get('value');
+};

-
URI.regs = {
endSlash: /\/$/,
scheme: /^(\w+):/,
directoryDot: /\.\/|\.$/
};

-URI.base = new URI($$('base[href]').getLast(), { base: document.location });
+URI.base = new URI(document.getElements('base[href]', true).getLast(), {base: document.location});

String.implement({

- toURI: function(options){ return new URI(this, options); }
+ toURI: function(options){
+ return new URI(this, options);
+ }

});

/*
-Script: URI.Relative.js
- Extends the URI class to add methods for computing relative and absolute urls.
+---

- License:
- MIT-style license.
+script: URI.Relative.js

- Authors:
- Sebastian Markbåge
+description: Extends the URI class to add methods for computing relative and absolute urls.
+
+license: MIT-style license
+
+authors:
+- Sebastian Markbåge
+
+
+requires:
+- /Class.refactor
+- /URI
+
+provides: [URI.Relative]
+
+...
*/

URI = Class.refactor(URI, {
@@ -1195,15 +1445,24 @@
});

/*
-Script: Element.Forms.js
- Extends the Element native object to include methods useful in managing inputs.
+---

- License:
- MIT-style license.
+script: Element.Forms.js

- Authors:
- Aaron Newton
+description: Extends the Element native object to include methods useful in managing inputs.

+license: MIT-style license
+
+authors:
+- Aaron Newton
+
+requires:
+- core:1.2.4/Element
+- /MooTools.More
+
+provides: [Element.Forms]
+
+...
*/

Element.implement({
@@ -1232,9 +1491,10 @@
pos.end = pos.start + range.text.length;
} else {
var value = this.get('value');
- var offset = value.length - value.match(/[\n\r]*$/)[0].length;
+ var offset = value.length;
dup.moveToElementText(this);
dup.setEndPoint('StartToEnd', range);
+ if(dup.text.length) offset -= value.match(/[\n\r]*$/)[0].length;
pos.end = offset - dup.text.length;
dup.setEndPoint('StartToStart', range);
pos.start = offset - dup.text.length;
@@ -1311,19 +1571,27 @@
});

/*
-Script: Element.Measure.js
- Extends the Element native object to include methods useful in measuring dimensions.
+---

- Element.measure / .expose methods by Daniel Steigerwald
- License: MIT-style license.
- Copyright: Copyright (c) 2008 Daniel Steigerwald, daniel.steigerwald.cz
+script: Element.Measure.js

- License:
- MIT-style license.
+description: Extends the Element native object to include methods useful in measuring dimensions.

- Authors:
- Aaron Newton
+credits: "Element.measure / .expose methods by Daniel Steigerwald License: MIT-style license. Copyright: Copyright (c) 2008 Daniel Steigerwald, daniel.steigerwald.cz"

+license: MIT-style license
+
+authors:
+- Aaron Newton
+
+requires:
+- core:1.2.4/Element.Style
+- core:1.2.4/Element.Dimensions
+- /MooTools.More
+
+provides: [Element.Measure]
+
+...
*/

Element.implement({
@@ -1334,8 +1602,8 @@
};
if (vis(this)) return fn.apply(this);
var parent = this.getParent(),
- toMeasure = [],
- restorers = [];
+ restorers = [],
+ toMeasure = [];
while (!vis(parent) && parent != document.body) {
toMeasure.push(parent.expose());
parent = parent.getParent();
@@ -1368,14 +1636,17 @@
var getSize = function(el, options){
return (options.computeSize)?el.getComputedSize(options):el.getSize();
};
- if (this.getStyle('display') == 'none'){
+ var parent = this.getParent('body');
+ if (parent && this.getStyle('display') == 'none'){
dim = this.measure(function(){
return getSize(this, options);
});
- } else {
+ } else if (parent){
try { //safari sometimes crashes here, so catch it
dim = getSize(this, options);
}catch(e){}
+ } else {
+ dim = {x: 0, y: 0};
}
return $chk(dim.x) ? $extend(dim, {width: dim.x, height: dim.y}) : $extend(dim, {x: dim.width, y: dim.height});
},
@@ -1414,8 +1685,7 @@
var subtracted = [];
$each(options.plains, function(plain, key){ //keys: width, height, plains: ['left', 'right'], ['top','bottom']
var capitalized = key.capitalize();
- size['total' + capitalized] = 0;
- size['computed' + capitalized] = 0;
+ size['total' + capitalized] = size['computed' + capitalized] = 0;
plain.each(function(edge){ //top, left, right, bottom
size['computed' + edge.capitalize()] = 0;
getStyles.each(function(style, i){ //padding, border, etc.
@@ -1450,14 +1720,26 @@
});

/*
-Script: Element.Pin.js
- Extends the Element native object to include the pin method useful for fixed positioning for elements.
+---

- License:
- MIT-style license.
+script: Element.Pin.js

- Authors:
- Aaron Newton
+description: Extends the Element native object to include the pin method useful for fixed positioning for elements.
+
+license: MIT-style license
+
+authors:
+- Aaron Newton
+
+requires:
+- core:1.2.4/Element.Event
+- core:1.2.4/Element.Dimensions
+- core:1.2.4/Element.Style
+- /MooTools.More
+
+provides: [Element.Pin]
+
+...
*/

(function(){
@@ -1476,14 +1758,15 @@

pin: function(enable){
if (this.getStyle('display') == 'none') return null;
-
- var p;
+
+ var p,
+ scroll = window.getScroll();
if (enable !== false){
p = this.getPosition();
if (!this.retrieve('pinned')){
var pos = {
- top: p.y - window.getScroll().y,
- left: p.x - window.getScroll().x
+ top: p.y - scroll.y,
+ left: p.x - scroll.x
};
if (supportsPositionFixed){
this.setStyle('position', 'fixed').setStyles(pos);
@@ -1493,12 +1776,13 @@
position: 'absolute',
top: p.y,
left: p.x
- });
+ }).addClass('isPinned');
this.store('scrollFixer', (function(){
if (this.retrieve('pinned'))
+ var scroll = window.getScroll();
this.setStyles({
- top: pos.top.toInt() + window.getScroll().y,
- left: pos.left.toInt() + window.getScroll().x
+ top: pos.top.toInt() + scroll.y,
+ left: pos.left.toInt() + scroll.x
});
}).bind(this));
window.addEvent('scroll', this.retrieve('scrollFixer'));
@@ -1508,16 +1792,16 @@
} else {
var op;
if (!Browser.Engine.trident){
- if (this.getParent().getComputedStyle('position') != 'static') op = this.getParent();
- else op = this.getParent().getOffsetParent();
+ var parent = this.getParent();
+ op = (parent.getComputedStyle('position') != 'static' ? parent : parent.getOffsetParent());
}
p = this.getPosition(op);
this.store('pinned', false);
var reposition;
if (supportsPositionFixed && !this.retrieve('pinnedByJS')){
reposition = {
- top: p.y + window.getScroll().y,
- left: p.x + window.getScroll().x
+ top: p.y + scroll.y,
+ left: p.x + scroll.x
};
} else {
this.store('pinnedByJS', false);
@@ -1527,13 +1811,13 @@
left: p.x
};
}
- this.setStyles($merge(reposition, {position: 'absolute'}));
+ this.setStyles($merge(reposition, {position: 'absolute'})).removeClass('isPinned');
}
- return this.addClass('isPinned');
+ return this;
},

unpin: function(){
- return this.pin(false).removeClass('isPinned');
+ return this.pin(false);
},

togglepin: function(){
@@ -1545,14 +1829,24 @@
})();

/*
-Script: Element.Position.js
- Extends the Element native object to include methods useful positioning elements relative to others.
+---

- License:
- MIT-style license.
+script: Element.Position.js

- Authors:
- Aaron Newton
+description: Extends the Element native object to include methods useful positioning elements relative to others.
+
+license: MIT-style license
+
+authors:
+- Aaron Newton
+
+requires:
+- core:1.2.4/Element.Dimensions
+- /Element.Measure
+
+provides: [Elements.Position]
+
+...
*/

(function(){
@@ -1566,6 +1860,8 @@
if (options && ($defined(options.x) || $defined(options.y))) return original ? original.apply(this, arguments) : this;
$each(options||{}, function(v, k){ if (!$defined(v)) delete options[k]; });
options = $merge({
+ // minimum: { x: 0, y: 0 },
+ // maximum: { x: 0, y: 0},
relativeTo: document.body,
position: {
x: 'center', //left, center, right
@@ -1576,11 +1872,12 @@
returnPos: false,
relFixedPosition: false,
ignoreMargins: false,
+ ignoreScroll: false,
allowNegative: false
}, options);
//compute the offset of the parent positioned element if this element is in one
- var parentOffset = {x: 0, y: 0};
- var parentPositioned = false;
+ var parentOffset = {x: 0, y: 0},
+ parentPositioned = false;
/* dollar around getOffsetParent should not be necessary, but as it does not return
* a mootools extended element in IE, an error occurs on the call to expose. See:
* http://mootools.lighthouseapp.com/projects/2706/tickets/333-element-getoffsetparent-inconsistency-between-ie-and-other-browsers */
@@ -1591,7 +1888,7 @@
parentOffset = offsetParent.measure(function(){
return this.getPosition();
});
- parentPositioned = true;
+ parentPositioned = offsetParent != document.id(options.relativeTo);
options.offset.x = options.offset.x - parentOffset.x;
options.offset.y = options.offset.y - parentOffset.y;
}
@@ -1617,26 +1914,15 @@
}

this.setStyle('position', 'absolute');
- var rel = document.id(options.relativeTo) || document.body;
- var calc = rel == document.body ? window.getScroll() : rel.getPosition();
- var top = calc.y;
- var left = calc.x;
+ var rel = document.id(options.relativeTo) || document.body,
+ calc = rel == document.body ? window.getScroll() : rel.getPosition(),
+ top = calc.y, left = calc.x;

- if (Browser.Engine.trident){
- var scrolls = rel.getScrolls();
- top += scrolls.y;
- left += scrolls.x;
- }
-
var dim = this.getDimensions({computeSize: true, styles:['padding', 'border','margin']});
- if (options.ignoreMargins){
- options.offset.x = options.offset.x - dim['margin-left'];
- options.offset.y = options.offset.y - dim['margin-top'];
- }
- var pos = {};
- var prefY = options.offset.y;
- var prefX = options.offset.x;
- var winSize = window.getSize();
+ var pos = {},
+ prefY = options.offset.y,
+ prefX = options.offset.x,
+ winSize = window.getSize();
switch(options.position.x){
case 'left':
pos.x = left + prefX;
@@ -1659,7 +1945,6 @@
pos.y = top + ((rel == document.body ? winSize.y : rel.offsetHeight)/2) + prefY;
break;
}
-
if (options.edge){
var edgeOffset = {};

@@ -1671,7 +1956,7 @@
edgeOffset.x = -dim.x-dim.computedRight-dim.computedLeft;
break;
default: //center
- edgeOffset.x = -(dim.x/2);
+ edgeOffset.x = -(dim.totalWidth/2);
break;
}
switch(options.edge.y){
@@ -1682,22 +1967,47 @@
edgeOffset.y = -dim.y-dim.computedTop-dim.computedBottom;
break;
default: //center
- edgeOffset.y = -(dim.y/2);
+ edgeOffset.y = -(dim.totalHeight/2);
break;
}
- pos.x = pos.x + edgeOffset.x;
- pos.y = pos.y + edgeOffset.y;
+ pos.x += edgeOffset.x;
+ pos.y += edgeOffset.y;
}
pos = {
left: ((pos.x >= 0 || parentPositioned || options.allowNegative) ? pos.x : 0).toInt(),
top: ((pos.y >= 0 || parentPositioned || options.allowNegative) ? pos.y : 0).toInt()
};
+ var xy = {left: 'x', top: 'y'};
+ ['minimum', 'maximum'].each(function(minmax) {
+ ['left', 'top'].each(function(lr) {
+ var val = options[minmax] ? options[minmax][xy[lr]] : null;
+ if (val != null && pos[lr] < val) pos[lr] = val;
+ });
+ });
if (rel.getStyle('position') == 'fixed' || options.relFixedPosition){
var winScroll = window.getScroll();
- pos.top = pos.top.toInt() + winScroll.y;
- pos.left = pos.left.toInt() + winScroll.x;
+ pos.top+= winScroll.y;
+ pos.left+= winScroll.x;
}
-
+ if (options.ignoreScroll) {
+ var relScroll = rel.getScroll();
+ pos.top-= relScroll.y;
+ pos.left-= relScroll.x;
+ }
+ if (options.ignoreMargins) {
+ pos.left += (
+ options.edge.x == 'right' ? dim['margin-right'] :
+ options.edge.x == 'center' ? -dim['margin-left'] + ((dim['margin-right'] + dim['margin-left'])/2) :
+ - dim['margin-left']
+ );
+ pos.top += (
+ options.edge.y == 'bottom' ? dim['margin-bottom'] :
+ options.edge.y == 'center' ? -dim['margin-top'] + ((dim['margin-bottom'] + dim['margin-top'])/2) :
+ - dim['margin-top']
+ );
+ }
+ pos.left = Math.ceil(pos.left);
+ pos.top = Math.ceil(pos.top);
if (options.returnPos) return pos;
else this.setStyles(pos);
return this;
@@ -1708,15 +2018,24 @@
})();

/*
-Script: Element.Shortcuts.js
- Extends the Element native object to include some shortcut methods.
+---

- License:
- MIT-style license.
+script: Element.Shortcuts.js

- Authors:
- Aaron Newton
+description: Extends the Element native object to include some shortcut methods.

+license: MIT-style license
+
+authors:
+- Aaron Newton
+
+requires:
+- core:1.2.4/Element.Style
+- /MooTools.More
+
+provides: [Element.Shortcuts]
+
+...
*/

Element.implement({
@@ -1725,6 +2044,12 @@
return this.getStyle('display') != 'none';
},

+ isVisible: function(){
+ var w = this.offsetWidth,
+ h = this.offsetHeight;
+ return (w == 0 && h == 0) ? false : (w > 0 && h > 0) ? true : this.isDisplayed();
+ },
+
toggle: function(){
return this[this.isDisplayed() ? 'hide' : 'show']();
},
@@ -1733,14 +2058,14 @@
var d;
try {
//IE fails here if the element is not in the dom
- if ('none' != this.getStyle('display')) d = this.getStyle('display');
+ d = this.getStyle('display');
} catch(e){}
-
- return this.store('originalDisplay', d || 'block').setStyle('display', 'none');
+ return this.store('originalDisplay', d || '').setStyle('display', 'none');
},

show: function(display){
- return this.setStyle('display', display || this.retrieve('originalDisplay') || 'block');
+ display = display || this.retrieve('originalDisplay') || 'block';
+ return this.setStyle('display', (display == 'none') ? 'block' : display);
},

swapClass: function(remove, add){
@@ -1751,15 +2076,35 @@


/*
-Script: FormValidator.js
- A css-class based form validation system.
+---

- License:
- MIT-style license.
+script: Form.Validator.js

- Authors:
- Aaron Newton
+description: A css-class based form validation system.
+
+license: MIT-style license
+
+authors:
+- Aaron Newton
+
+requires:
+- core:1.2.4/Options
+- core:1.2.4/Events
+- core:1.2.4/Selectors
+- core:1.2.4/Element.Event
+- core:1.2.4/Element.Style
+- core:1.2.4/JSON
+- /Lang- /Class.Binds
+- /Date Element.Forms
+- /Form.Validator.English
+- /Element.Shortcuts
+
+provides: [Form.Validator, InputValidator, FormValidator.BaseValidators]
+
+...
*/
+if (!window.Form) window.Form = {};
+
var InputValidator = new Class({

Implements: [Options],
@@ -1831,7 +2176,7 @@

};

-var FormValidator = new Class({
+Form.Validator = new Class({

Implements:[Options, Events],

@@ -1844,6 +2189,7 @@
onElementFail: $empty(field, validatorsFailed) */
fieldSelectors: 'input, select, textarea',
ignoreHidden: true,
+ ignoreDisabled: true,
useTitles: false,
evaluateOnSubmit: true,
evaluateFieldsOnBlur: true,
@@ -1851,10 +2197,10 @@
serial: true,
stopOnFailure: true,
warningPrefix: function(){
- return FormValidator.getMsg('warningPrefix') || 'Warning: ';
+ return Form.Validator.getMsg('warningPrefix') || 'Warning: ';
},
errorPrefix: function(){
- return FormValidator.getMsg('errorPrefix') || 'Error: ';
+ return Form.Validator.getMsg('errorPrefix') || 'Error: ';
}
},

@@ -1954,26 +2300,18 @@
},

test: function(className, field, warn){
+ field = document.id(field);
+ if((this.options.ignoreHidden && !field.isVisible()) || (this.options.ignoreDisabled && field.get('disabled'))) return true;
var validator = this.getValidator(className);
- field = document.id(field);
if (field.hasClass('ignoreValidation')) return true;
warn = $pick(warn, false);
if (field.hasClass('warnOnly')) warn = true;
var isValid = validator ? validator.test(field) : true;
- if (validator && this.isVisible(field)) this.fireEvent('elementValidate', [isValid, field, className, warn]);
+ if (validator && field.isVisible()) this.fireEvent('elementValidate', [isValid, field, className, warn]);
if (warn) return true;
return isValid;
},

- isVisible : function(field){
- if (!this.options.ignoreHidden) return true;
- while(field != document.body){
- if (document.id(field).getStyle('display') == 'none') return false;
- field = field.getParent();
- }
- return true;
- },
-
resetField: function(field){
field = document.id(field);
if (field){
@@ -2015,17 +2353,17 @@

});

-FormValidator.getMsg = function(key){
- return MooTools.lang.get('FormValidator', key);
+Form.Validator.getMsg = function(key){
+ return MooTools.lang.get('Form.Validator', key);
};

-FormValidator.adders = {
+Form.Validator.adders = {

validators:{},

add : function(className, options){
this.validators[className] = new InputValidator(className, options);
- //if this is a class (this method is used by instances of FormValidator and the FormValidator namespace)
+ //if this is a class (this method is used by instances of Form.Validator and the Form.Validator namespace)
//extend these validators into it
//this allows validators to be global and/or per instance
if (!this.initialize){
@@ -2047,11 +2385,11 @@

};

-$extend(FormValidator, FormValidator.adders);
+$extend(Form.Validator, Form.Validator.adders);

-FormValidator.implement(FormValidator.adders);
+Form.Validator.implement(Form.Validator.adders);

-FormValidator.add('IsEmpty', {
+Form.Validator.add('IsEmpty', {

errorMsg: false,
test: function(element){
@@ -2063,21 +2401,21 @@

});

-FormValidator.addAllThese([
+Form.Validator.addAllThese([

['required', {
errorMsg: function(){
- return FormValidator.getMsg('required');
+ return Form.Validator.getMsg('required');
},
test: function(element){
- return !FormValidator.getValidator('IsEmpty').test(element);
+ return !Form.Validator.getValidator('IsEmpty').test(element);
}
}],

['minLength', {
errorMsg: function(element, props){
if ($type(props.minLength))
- return FormValidator.getMsg('minLength').substitute({minLength:props.minLength,length:element.get('value').length });
+ return Form.Validator.getMsg('minLength').substitute({minLength:props.minLength,length:element.get('value').length });
else return '';
},
test: function(element, props){
@@ -2090,7 +2428,7 @@
errorMsg: function(element, props){
//props is {maxLength:10}
if ($type(props.maxLength))
- return FormValidator.getMsg('maxLength').substitute({maxLength:props.maxLength,length:element.get('value').length });
+ return Form.Validator.getMsg('maxLength').substitute({maxLength:props.maxLength,length:element.get('value').length });
else return '';
},
test: function(element, props){
@@ -2100,38 +2438,38 @@
}],

['validate-integer', {
- errorMsg: FormValidator.getMsg.pass('integer'),
+ errorMsg: Form.Validator.getMsg.pass('integer'),
test: function(element){
- return FormValidator.getValidator('IsEmpty').test(element) || (/^(-?[1-9]\d*|0)$/).test(element.get('value'));
+ return Form.Validator.getValidator('IsEmpty').test(element) || (/^(-?[1-9]\d*|0)$/).test(element.get('value'));
}
}],

['validate-numeric', {
- errorMsg: FormValidator.getMsg.pass('numeric'),
+ errorMsg: Form.Validator.getMsg.pass('numeric'),
test: function(element){
- return FormValidator.getValidator('IsEmpty').test(element) ||
+ return Form.Validator.getValidator('IsEmpty').test(element) ||
(/^-?(?:0$0(?=\d*\.)|[1-9]|0)\d*(\.\d+)?$/).test(element.get('value'));
}
}],

['validate-digits', {
- errorMsg: FormValidator.getMsg.pass('digits'),
+ errorMsg: Form.Validator.getMsg.pass('digits'),
test: function(element){
- return FormValidator.getValidator('IsEmpty').test(element) || (/^[\d() .:\-\+#]+$/.test(element.get('value')));
+ return Form.Validator.getValidator('IsEmpty').test(element) || (/^[\d() .:\-\+#]+$/.test(element.get('value')));
}
}],

['validate-alpha', {
- errorMsg: FormValidator.getMsg.pass('alpha'),
+ errorMsg: Form.Validator.getMsg.pass('alpha'),
test: function(element){
- return FormValidator.getValidator('IsEmpty').test(element) || (/^[a-zA-Z]+$/).test(element.get('value'));
+ return Form.Validator.getValidator('IsEmpty').test(element) || (/^[a-zA-Z]+$/).test(element.get('value'));
}
}],

['validate-alphanum', {
- errorMsg: FormValidator.getMsg.pass('alphanum'),
+ errorMsg: Form.Validator.getMsg.pass('alphanum'),
test: function(element){
- return FormValidator.getValidator('IsEmpty').test(element) || !(/\W/).test(element.get('value'));
+ return Form.Validator.getValidator('IsEmpty').test(element) || !(/\W/).test(element.get('value'));
}
}],

@@ -2139,13 +2477,13 @@
errorMsg: function(element, props){
if (Date.parse){
var format = props.dateFormat || '%x';
- return FormValidator.getMsg('dateSuchAs').substitute({date: new Date().format(format)});
+ return Form.Validator.getMsg('dateSuchAs').substitute({date: new Date().format(format)});
} else {
- return FormValidator.getMsg('dateInFormatMDY');
+ return Form.Validator.getMsg('dateInFormatMDY');
}
},
test: function(element, props){
- if (FormValidator.getValidator('IsEmpty').test(element)) return true;
+ if (Form.Validator.getValidator('IsEmpty').test(element)) return true;
var d;
if (Date.parse){
var format = props.dateFormat || '%x';
@@ -2165,34 +2503,34 @@
}],

['validate-email', {
- errorMsg: FormValidator.getMsg.pass('email'),
+ errorMsg: Form.Validator.getMsg.pass('email'),
test: function(element){
- return FormValidator.getValidator('IsEmpty').test(element) || (/^[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,4}$/i).test(element.get('value'));
+ return Form.Validator.getValidator('IsEmpty').test(element) || (/^[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,4}$/i).test(element.get('value'));
}
}],

['validate-url', {
- errorMsg: FormValidator.getMsg.pass('url'),
+ errorMsg: Form.Validator.getMsg.pass('url'),
test: function(element){
- return FormValidator.getValidator('IsEmpty').test(element) || (/^(https?|ftp|rmtp|mms):\/\/(([A-Z0-9][A-Z0-9_-]*)(\.[A-Z0-9][A-Z0-9_-]*)+)(:(\d+))?\/?/i).test(element.get('value'));
+ return Form.Validator.getValidator('IsEmpty').test(element) || (/^(https?|ftp|rmtp|mms):\/\/(([A-Z0-9][A-Z0-9_-]*)(\.[A-Z0-9][A-Z0-9_-]*)+)(:(\d+))?\/?/i).test(element.get('value'));
}
}],

['validate-currency-dollar', {
- errorMsg: FormValidator.getMsg.pass('currencyDollar'),
+ errorMsg: Form.Validator.getMsg.pass('currencyDollar'),
test: function(element){
// [$]1[##][,###]+[.##]
// [$]1###+[.##]
// [$]0.##
// [$].##
- return FormValidator.getValidator('IsEmpty').test(element) || (/^\$?\-?([1-9]{1}[0-9]{0,2}(\,[0-9]{3})*(\.[0-9]{0,2})?|[1-9]{1}\d*(\.[0-9]{0,2})?|0(\.[0-9]{0,2})?|(\.[0-9]{1,2})?)$/).test(element.get('value'));
+ return Form.Validator.getValidator('IsEmpty').test(element) || (/^\$?\-?([1-9]{1}[0-9]{0,2}(\,[0-9]{3})*(\.[0-9]{0,2})?|[1-9]{1}\d*(\.[0-9]{0,2})?|0(\.[0-9]{0,2})?|(\.[0-9]{1,2})?)$/).test(element.get('value'));
}
}],

['validate-one-required', {
- errorMsg: FormValidator.getMsg.pass('oneRequired'),
+ errorMsg: Form.Validator.getMsg.pass('oneRequired'),
test: function(element, props){
- var p = document.id(props['validate-one-required']) || element.parentNode;
+ var p = document.id(props['validate-one-required']) || element.getParent();
return p.getElements('input').some(function(el){
if (['checkbox', 'radio'].contains(el.get('type'))) return el.get('checked');
return el.get('value');
@@ -2213,7 +2551,7 @@
get: function(options){
if (options || !this.retrieve('validator')){
if (options || !this.retrieve('validator:options')) this.set('validator', options);
- this.store('validator', new FormValidator(this, this.retrieve('validator:options')));
+ this.store('validator', new Form.Validator(this, this.retrieve('validator:options')));
}
return this.retrieve('validator');
}
@@ -2228,21 +2566,32 @@
}

});
+//legacy
+var FormValidator = Form.Validator;

/*
-Script: FormValidator.Inline.js
- Extends FormValidator to add inline messages.
+---

- License:
- MIT-style license.
+script: Form.Validator.Inline.js

- Authors:
- Aaron Newton
+description: Extends Form.Validator to add inline messages.
+
+license: MIT-style license
+
+authors:
+- Aaron Newton
+
+requires:
+- /Form.Validator
+
+provides: [Form.Validator.Inline]
+
+...
*/

-FormValidator.Inline = new Class({
+Form.Validator.Inline = new Class({

- Extends: FormValidator,
+ Extends: Form.Validator,

options: {
scrollToErrorsOnSubmit: true,
@@ -2275,7 +2624,7 @@
var cssClass = (warn) ? 'warning-advice' : 'validation-advice';
var advice = this.getAdvice(className, field);
if(advice) {
- advice = advice.clone(true, true).set('html', errorMsg).replaces(advice);
+ advice = advice.set('html', errorMsg);
} else {
advice = new Element('div', {
html: errorMsg,
@@ -2386,16 +2735,25 @@


/*
-Script: FormValidator.Extras.js
- Additional validators for the FormValidator class.
+---

- License:
- MIT-style license.
+script: Form.Validator.Extras.js

- Authors:
- Aaron Newton
+description: Additional validators for the Form.Validator class.
+
+license: MIT-style license
+
+authors:
+- Aaron Newton
+
+requires:
+- /Form.Validator
+
+provides: [Form.Validator.Extras]
+
+...
*/
-FormValidator.addAllThese([
+Form.Validator.addAllThese([

['validate-enforce-oncheck', {
test: function(element, props){
@@ -2426,7 +2784,7 @@

['validate-nospace', {
errorMsg: function(){
- return FormValidator.getMsg('noSpace');
+ return Form.Validator.getMsg('noSpace');
},
test: function(element, props){
return !element.get('value').test(/\s/);
@@ -2454,7 +2812,7 @@

['validate-reqchk-bynode', {
errorMsg: function(){
- return FormValidator.getMsg('reqChkByNode');
+ return Form.Validator.getMsg('reqChkByNode');
},
test: function(element, props){
return (document.id(props.nodeId).getElements(props.selector || 'input[type=checkbox], input[type=radio]')).some(function(item){
@@ -2465,7 +2823,7 @@

['validate-required-check', {
errorMsg: function(element, props){
- return props.useTitle ? element.get('title') : FormValidator.getMsg('requiredChk');
+ return props.useTitle ? element.get('title') : Form.Validator.getMsg('requiredChk');
},
test: function(element, props){
return !!element.checked;
@@ -2474,7 +2832,7 @@

['validate-reqchk-byname', {
errorMsg: function(element, props){
- return FormValidator.getMsg('reqChkByName').substitute({label: props.label || element.get('type')});
+ return Form.Validator.getMsg('reqChkByName').substitute({label: props.label || element.get('type')});
},
test: function(element, props){
var grpName = props.groupName || element.get('name');
@@ -2489,7 +2847,7 @@

['validate-match', {
errorMsg: function(element, props){
- return FormValidator.getMsg('match').substitute({matchName: props.matchName || document.id(props.matchInput).get('name')});
+ return Form.Validator.getMsg('match').substitute({matchName: props.matchName || document.id(props.matchInput).get('name')});
},
test: function(element, props){
var eleVal = element.get('value');
@@ -2500,8 +2858,8 @@

['validate-after-date', {
errorMsg: function(element, props){
- return FormValidator.getMsg('afterDate').substitute({
- label: props.afterLabel || (props.afterElement ? FormValidator.getMsg('startDate') : FormValidator.getMsg('currentDate'))
+ return Form.Validator.getMsg('afterDate').substitute({
+ label: props.afterLabel || (props.afterElement ? Form.Validator.getMsg('startDate') : Form.Validator.getMsg('currentDate'))
});
},
test: function(element, props){
@@ -2513,8 +2871,8 @@

['validate-before-date', {
errorMsg: function(element, props){
- return FormValidator.getMsg('beforeDate').substitute({
- label: props.beforeLabel || (props.beforeElement ? FormValidator.getMsg('endDate') : FormValidator.getMsg('currentDate'))
+ return Form.Validator.getMsg('beforeDate').substitute({
+ label: props.beforeLabel || (props.beforeElement ? Form.Validator.getMsg('endDate') : Form.Validator.getMsg('currentDate'))
});
},
test: function(element, props){
@@ -2526,7 +2884,7 @@

['validate-custom-required', {
errorMsg: function(){
- return FormValidator.getMsg('required');
+ return Form.Validator.getMsg('required');
},
test: function(element, props){
return element.get('value') != props.emptyValue;
@@ -2537,33 +2895,99 @@
errorMsg: function(element, props){
var startMo = document.id(props.sameMonthAs) && document.id(props.sameMonthAs).get('value');
var eleVal = element.get('value');
- if (eleVal != '') return FormValidator.getMsg(startMo ? 'sameMonth' : 'startMonth');
+ if (eleVal != '') return Form.Validator.getMsg(startMo ? 'sameMonth' : 'startMonth');
},
test: function(element, props){
var d1 = Date.parse(element.get('value'));
var d2 = Date.parse(document.id(props.sameMonthAs) && document.id(props.sameMonthAs).get('value'));
return d1 && d2 ? d1.format('%B') == d2.format('%B') : true;
}
+ }],
+
+
+ ['validate-cc-num', {
+ errorMsg: function(element){
+ var ccNum = element.get('value').replace(/[^0-9]/g, '');
+ return Form.Validator.getMsg('creditcard').substitute({length: ccNum.length});
+ },
+ test: function(element){
+ // required is a different test
+ if (Form.Validator.getValidator('IsEmpty').test(element)) { return true; }
+
+ // Clean number value
+ var ccNum = element.get('value');
+ ccNum = ccNum.replace(/[^0-9]/g, '');
+
+ var valid_type = false;
+
+ if (ccNum.test(/^4[0-9]{12}([0-9]{3})?$/)) valid_type = 'Visa';
+ else if (ccNum.test(/^5[1-5]([0-9]{14})$/)) valid_type = 'Master Card';
+ else if (ccNum.test(/^3[47][0-9]{13}$/)) valid_type = 'American Express';
+ else if (ccNum.test(/^6011[0-9]{12}$/)) valid_type = 'Discover';
+
+ if (valid_type) {
+ var sum = 0;
+ var cur = 0;
+
+ for(var i=ccNum.length-1; i>=0; --i) {
+ cur = ccNum.charAt(i).toInt();
+ if (cur == 0) { continue; }
+
+ if ((ccNum.length-i) % 2 == 0) { cur += cur; }
+ if (cur > 9) { cur = cur.toString().charAt(0).toInt() + cur.toString().charAt(1).toInt(); }
+
+ sum += cur;
+ }
+ if ((sum % 10) == 0) { return true; }
+ }
+
+ var chunks = '';
+ while (ccNum != '') {
+ chunks += ' ' + ccNum.substr(0,4);
+ ccNum = ccNum.substr(4);
+ }
+
+ element.getParent('form').retrieve('validator').ignoreField(element);
+ element.set('value', chunks.clean());
+ element.getParent('form').retrieve('validator').enforceField(element);
+ return false;
+ }
}]

+
]);

/*
-Script: OverText.js
- Shows text over an input that disappears when the user clicks into it. The text remains hidden if the user adds a value.
+---

- License:
- MIT-style license.
+script: OverText.js

- Authors:
- Aaron Newton
+description: Shows text over an input that disappears when the user clicks into it. The text remains hidden if the user adds a value.
+
+license: MIT-style license
+
+authors:
+- Aaron Newton
+
+requires:
+- core:1.2.4/Options
+- core:1.2.4/Events
+- core:1.2.4/Element.Event
+- /Class.Binds
+- /Class.Occlude
+- /Element.Position
+- /Element.Shortcuts
+
+provides: [OverText]
+
+...
*/

var OverText = new Class({

Implements: [Options, Events, Class.Occlude],

- Binds: ['reposition', 'assert', 'focus'],
+ Binds: ['reposition', 'assert', 'focus', 'hide'],

options: {/*
textOverride: null,
@@ -2580,7 +3004,8 @@
}
},
poll: false,
- pollInterval: 250
+ pollInterval: 250,
+ wrap: false
},

property: 'OverText',
@@ -2606,14 +3031,29 @@
'class': 'overTxtLabel',
styles: {
lineHeight: 'normal',
- position: 'absolute'
+ position: 'absolute',
+ cursor: 'text'
},
html: val,
events: {
- click: this.hide.pass(true, this)
+ click: this.hide.pass(this.options.element == 'label', this)
}
}).inject(this.element, 'after');
- if (this.options.element == 'label') this.text.set('for', this.element.get('id'));
+ if (this.options.element == 'label') {
+ if (!this.element.get('id')) this.element.set('id', 'input_' + new Date().getTime());
+ this.text.set('for', this.element.get('id'));
+ }
+
+ if (this.options.wrap) {
+ this.textHolder = new Element('div', {
+ styles: {
+ lineHeight: 'normal',
+ position: 'relative'
+ },
+ 'class':'overTxtWrapper'
+ }).adopt(this.text).inject(this.element, 'before');
+ }
+
this.element.addEvents({
focus: this.focus,
blur: this.assert,
@@ -2624,6 +3064,13 @@
this.reposition();
},

+ wrap: function(){
+ if (this.options.element == 'label') {
+ if (!this.element.get('id')) this.element.set('id', 'input_' + new Date().getTime());
+ this.text.set('for', this.element.get('id'));
+ }
+ },
+
startPolling: function(){
this.pollingPaused = false;
return this.poll();
@@ -2648,24 +3095,27 @@
},

focus: function(){
- if (!this.text.isDisplayed() || this.element.get('disabled')) return;
+ if (this.text && (!this.text.isDisplayed() || this.element.get('disabled'))) return;
this.hide();
},

- hide: function(suppressFocus){
- if (this.text.isDisplayed() && !this.element.get('disabled')){
+ hide: function(suppressFocus, force){
+ if (this.text && (this.text.isDisplayed() && (!this.element.get('disabled') || force))){
this.text.hide();
this.fireEvent('textHide', [this.text, this.element]);
this.pollingPaused = true;
- try {
- if (!suppressFocus) this.element.fireEvent('focus').focus();
- } catch(e){} //IE barfs if you call focus on hidden elements
+ if (!suppressFocus){
+ try {
+ this.element.fireEvent('focus');
+ this.element.focus();
+ } catch(e){} //IE barfs if you call focus on hidden elements
+ }
}
return this;
},

show: function(){
- if (!this.text.isDisplayed()){
+ if (this.text && !this.text.isDisplayed()){
this.text.show();
this.reposition();
this.fireEvent('textShow', [this.text, this.element]);
@@ -2685,8 +3135,8 @@

reposition: function(){
this.assert(true);
- if (!this.element.getParent() || !this.element.offsetHeight) return this.stopPolling().hide();
- if (this.test()) this.text.position($merge(this.options.positionOptions, {relativeTo: this.element}));
+ if (!this.element.isVisible()) return this.stopPolling().hide();
+ if (this.text && this.test()) this.text.position($merge(this.options.positionOptions, {relativeTo: this.element}));
return this;
}

@@ -2694,15 +3144,39 @@

OverText.instances = [];

-OverText.update = function(){
+$extend(OverText, {

- return OverText.instances.map(function(ot){
- if (ot.element && ot.text) return ot.reposition();
- return null; //the input or the text was destroyed
- });
+ each: function(fn) {
+ return OverText.instances.map(function(ot, i){
+ if (ot.element && ot.text) return fn.apply(OverText, [ot, i]);
+ return null; //the input or the text was destroyed
+ });
+ },
+
+ update: function(){

-};
+ return OverText.each(function(ot){
+ return ot.reposition();
+ });

+ },
+
+ hideAll: function(){
+
+ return OverText.each(function(ot){
+ return ot.hide(true, true);
+ });
+
+ },
+
+ showAll: function(){
+ return OverText.each(function(ot) {
+ return ot.show();
+ });
+ }
+
+});
+
if (window.Fx && Fx.Reveal) {
Fx.Reveal.implement({
hideInputs: Browser.Engine.trident ? 'select, input, textarea, object, embed, .overTxtLabel' : false
@@ -2710,14 +3184,24 @@
}

/*
-Script: Fx.Elements.js
- Effect to change any number of CSS properties of any number of Elements.
+---

- License:
- MIT-style license.
+script: Fx.Elements.js

- Authors:
- Valerio Proietti
+description: Effect to change any number of CSS properties of any number of Elements.
+
+license: MIT-style license
+
+authors:
+- Valerio Proietti
+
+requires:
+- core:1.2.4/Fx.CSS
+- /MooTools.More
+
+provides: [Fx.Elements]
+
+...
*/

Fx.Elements = new Class({
@@ -2763,42 +3247,58 @@
});

/*
-Script: Fx.Accordion.js
- An Fx.Elements extension which allows you to easily create accordion type controls.
+---

- License:
- MIT-style license.
+script: Fx.Accordion.js

- Authors:
- Valerio Proietti
+description: An Fx.Elements extension which allows you to easily create accordion type controls.
+
+license: MIT-style license
+
+authors:
+- Valerio Proietti
+
+requires:
+- core:1.2.4/Element.Event
+- /Fx.Elements
+
+provides: [Fx.Accordion]
+
+...
*/

-var Accordion = Fx.Accordion = new Class({
+Fx.Accordion = new Class({

Extends: Fx.Elements,

options: {/*
onActive: $empty(toggler, section),
- onBackground: $empty(toggler, section),*/
+ onBackground: $empty(toggler, section),
+ fixedHeight: false,
+ fixedWidth: false,
+ */
display: 0,
show: false,
height: true,
width: false,
opacity: true,
- fixedHeight: false,
- fixedWidth: false,
- wait: false,
alwaysHide: false,
trigger: 'click',
- initialDisplayFx: true
+ initialDisplayFx: true,
+ returnHeightToAuto: true
},

initialize: function(){
- var params = Array.link(arguments, {'container': Element.type, 'options': Object.type, 'togglers': $defined, 'elements': $defined});
+ var params = Array.link(arguments, {
+ 'container': Element.type, //deprecated
+ 'options': Object.type,
+ 'togglers': $defined,
+ 'elements': $defined
+ });
this.parent(params.elements, params.options);
this.togglers = $$(params.togglers);
- this.container = document.id(params.container);
this.previous = -1;
+ this.internalChain = new Chain();
if (this.options.alwaysHide) this.options.wait = true;
if ($chk(this.options.show)){
this.options.display = false;
@@ -2820,7 +3320,9 @@
for (var fx in this.effects) el.setStyle(fx, 0);
}
}, this);
- if ($chk(this.options.display)) this.display(this.options.display, this.options.initialDisplayFx);
+ if ($chk(this.options.display) || this.options.initialDisplayFx === false) this.display(this.options.display, this.options.initialDisplayFx);
+ if (this.options.fixedHeight !== false) this.options.returnHeightToAuto = false;
+ this.addEvent('complete', this.internalChain.callChain.bind(this.internalChain));
},

addSection: function(toggler, element){
@@ -2830,7 +3332,9 @@
this.togglers.include(toggler);
this.elements.include(element);
var idx = this.togglers.indexOf(toggler);
- toggler.addEvent(this.options.trigger, this.display.bind(this, idx));
+ var displayer = this.display.bind(this, idx);
+ toggler.store('accordion:display', displayer);
+ toggler.addEvent(this.options.trigger, displayer);
if (this.options.height) element.setStyles({'padding-top': 0, 'border-top': 'none', 'padding-bottom': 0, 'border-bottom': 'none'});
if (this.options.width) element.setStyles({'padding-left': 0, 'border-left': 'none', 'padding-right': 0, 'border-right': 'none'});
element.fullOpacity = 1;
@@ -2843,33 +3347,100 @@
return this;
},

+ detach: function(){
+ this.togglers.each(function(toggler) {
+ toggler.removeEvent(this.options.trigger, toggler.retrieve('accordion:display'));
+ }, this);
+ },
+
display: function(index, useFx){
+ if (!this.check(index, useFx)) return this;
useFx = $pick(useFx, true);
+ if (this.options.returnHeightToAuto){
+ var prev = this.elements[this.previous];
+ if (prev && !this.selfHidden){
+ for (var fx in this.effects){
+ prev.setStyle(fx, prev[this.effects[fx]]);
+ }
+ }
+ }
index = ($type(index) == 'element') ? this.elements.indexOf(index) : index;
if ((this.timer && this.options.wait) || (index === this.previous && !this.options.alwaysHide)) return this;
this.previous = index;
var obj = {};
this.elements.each(function(el, i){
obj[i] = {};
- var hide = (i != index) || (this.options.alwaysHide && (el.offsetHeight > 0));
+ var hide;
+ if (i != index){
+ hide = true;
+ } else if (this.options.alwaysHide && ((el.offsetHeight > 0 && this.options.height) || el.offsetWidth > 0 && this.options.width)){
+ hide = true;
+ this.selfHidden = true;
+ }
this.fireEvent(hide ? 'background' : 'active', [this.togglers[i], el]);
for (var fx in this.effects) obj[i][fx] = hide ? 0 : el[this.effects[fx]];
}, this);
+ this.internalChain.chain(function(){
+ if (this.options.returnHeightToAuto && !this.selfHidden){
+ var el = this.elements[index];
+ if (el) el.setStyle('height', 'auto');
+ };
+ }.bind(this));
return useFx ? this.start(obj) : this.set(obj);
}

});

/*
-Script: Fx.Move.js
- Defines Fx.Move, a class that works with Element.Position.js to transition an element from one location to another.
+ Compatibility with 1.2.0
+*/
+var Accordion = new Class({

- License:
- MIT-style license.
+ Extends: Fx.Accordion,

- Authors:
- Aaron Newton
+ initialize: function(){
+ this.parent.apply(this, arguments);
+ var params = Array.link(arguments, {'container': Element.type});
+ this.container = params.container;
+ },

+ addSection: function(toggler, element, pos){
+ toggler = document.id(toggler);
+ element = document.id(element);
+ var test = this.togglers.contains(toggler);
+ var len = this.togglers.length;
+ if (len && (!test || pos)){
+ pos = $pick(pos, len - 1);
+ toggler.inject(this.togglers[pos], 'before');
+ element.inject(toggler, 'after');
+ } else if (this.container && !test){
+ toggler.inject(this.container);
+ element.inject(this.container);
+ }
+ return this.parent.apply(this, arguments);
+ }
+
+});
+
+/*
+---
+
+script: Fx.Move.js
+
+description: Defines Fx.Move, a class that works with Element.Position.js to transition an element from one location to another.
+
+license: MIT-style license
+
+authors:
+- Aaron Newton
+
+requires:
+- core:1.2.4/Fx.Morph
+- /Element.Position
+
+provides: [Fx.Move]
+
+...
*/

Fx.Move = new Class({
@@ -2918,27 +3489,38 @@


/*
-Script: Fx.Reveal.js
- Defines Fx.Reveal, a class that shows and hides elements with a transition.
+---

- License:
- MIT-style license.
+script: Fx.Reveal.js

- Authors:
- Aaron Newton
+description: Defines Fx.Reveal, a class that shows and hides elements with a transition.

+license: MIT-style license
+
+authors:
+- Aaron Newton
+
+requires:
+- core:1.2.4/Fx.Morph
+- /Element.Shortcuts
+- /Element.Measure
+
+provides: [Fx.Reveal]
+
+...
*/

Fx.Reveal = new Class({

Extends: Fx.Morph,

- options: {/*
+ options: {/*
onShow: $empty(thisElement),
onHide: $empty(thisElement),
onComplete: $empty(thisElement),
heightOverride: null,
widthOverride: null, */
+ link: 'cancel',
styles: ['padding', 'border', 'margin'],
transitionOpacity: !Browser.Engine.trident4,
mode: 'vertical',
@@ -2953,18 +3535,17 @@
this.hiding = true;
this.showing = false;
this.hidden = true;
+ this.cssText = this.element.style.cssText;
var startStyles = this.element.getComputedSize({
styles: this.options.styles,
mode: this.options.mode
});
- var setToAuto = (this.element.style.height === ''||this.element.style.height == 'auto');
- this.element.setStyle('display', 'block');
+ this.element.setStyle('display', this.options.display);
if (this.options.transitionOpacity) startStyles.opacity = 1;
var zero = {};
$each(startStyles, function(style, name){
zero[name] = [style, 0];
}, this);
- var overflowBefore = this.element.getStyle('overflow');
this.element.setStyle('overflow', 'hidden');
var hideThese = this.options.hideInputs ? this.element.getElements(this.options.hideInputs) : null;
this.$chain.unshift(function(){
@@ -2973,11 +3554,8 @@
$each(startStyles, function(style, name){
startStyles[name] = style;
}, this);
- this.element.setStyles($merge({display: 'none', overflow: overflowBefore}, startStyles));
- if (setToAuto){
- if (['vertical', 'both'].contains(this.options.mode)) this.element.style.height = '';
- if (['width', 'both'].contains(this.options.mode)) this.element.style.width = '';
- }
+ this.element.style.cssText = this.cssText;
+ this.element.setStyle('display', 'none');
if (hideThese) hideThese.setStyle('visibility', 'visible');
}
this.fireEvent('hide', this.element);
@@ -3013,12 +3591,11 @@
this.element.getStyle('visiblity') == 'hidden' ||
this.element.getStyle('opacity') == 0){
this.showing = true;
- this.hiding = false;
- this.hidden = false;
- var setToAuto, startStyles;
+ this.hiding = this.hidden = false;
+ var startStyles;
+ this.cssText = this.element.style.cssText;
//toggle display, but hide it
this.element.measure(function(){
- setToAuto = (this.element.style.height === '' || this.element.style.height == 'auto');
//create the styles for the opened/visible state
startStyles = this.element.getComputedSize({
styles: this.options.styles,
@@ -3041,7 +3618,6 @@
display: this.options.display
};
$each(startStyles, function(style, name){ zero[name] = 0; });
- var overflowBefore = this.element.getStyle('overflow');
//set to zero
this.element.setStyles($merge(zero, {overflow: 'hidden'}));
//hide inputs
@@ -3050,11 +3626,8 @@
//start the effect
this.start(startStyles);
this.$chain.unshift(function(){
- this.element.setStyle('overflow', overflowBefore);
- if (!this.options.heightOverride && setToAuto){
- if (['vertical', 'both'].contains(this.options.mode)) this.element.style.height = '';
- if (['width', 'both'].contains(this.options.mode)) this.element.style.width = '';
- }
+ this.element.style.cssText = this.cssText;
+ this.element.setStyle('display', this.options.display);
if (!this.hidden) this.showing = false;
if (hideThese) hideThese.setStyle('visibility', 'visible');
this.callChain();
@@ -3094,6 +3667,13 @@
this.dissolve();
}
return this;
+ },
+
+ cancel: function(){
+ this.parent.apply(this, arguments);
+ this.element.style.cssText = this.cssText;
+ this.hidding = false;
+ this.showing = false;
}

});
@@ -3103,7 +3683,7 @@
set: function(options){
var reveal = this.retrieve('reveal');
if (reveal) reveal.cancel();
- return this.eliminate('reveal').store('reveal:options', $extend({link: 'cancel'}, options));
+ return this.eliminate('reveal').store('reveal:options', options);
},

get: function(options){
@@ -3152,14 +3732,26 @@
});

/*
-Script: Fx.Scroll.js
- Effect to smoothly scroll any element, including the window.
+---

- License:
- MIT-style license.
+script: Fx.Scroll.js

- Authors:
- Valerio Proietti
+description: Effect to smoothly scroll any element, including the window.
+
+license: MIT-style license
+
+authors:
+- Valerio Proietti
+
+requires:
+- core:1.2.4/Fx
+- core:1.2.4/Element.Event
+- core:1.2.4/Element.Dimensions
+- /MooTools.More
+
+provides: [Fx.Scroll]
+
+...
*/

Fx.Scroll = new Class({
@@ -3192,6 +3784,7 @@

set: function(){
var now = Array.flatten(arguments);
+ if (Browser.Engine.gecko) now = [Math.round(now[0]), Math.round(now[1])];
this.element.scrollTo(now[0], now[1]);
},

@@ -3203,11 +3796,12 @@

start: function(x, y){
if (!this.check(x, y)) return this;
- var offsetSize = this.element.getSize(), scrollSize = this.element.getScrollSize();
- var scroll = this.element.getScroll(), values = {x: x, y: y};
+ var scrollSize = this.element.getScrollSize(),
+ scroll = this.element.getScroll(),
+ values = {x: x, y: y};
for (var z in values){
- var max = scrollSize[z] - offsetSize[z];
- if ($chk(values[z])) values[z] = ($type(values[z]) == 'number') ? values[z].limit(0, max) : max;
+ var max = scrollSize[z];
+ if ($chk(values[z])) values[z] = ($type(values[z]) == 'number') ? values[z] : max;
else values[z] = scroll[z];
values[z] += this.options.offset[z];
}
@@ -3257,20 +3851,54 @@
}, this);
if (to.x != scroll.x || to.y != scroll.y) this.start(to.x, to.y);
return this;
+ },
+
+ scrollToCenter: function(el, axes, offset){
+ axes = axes ? $splat(axes) : ['x', 'y'];
+ el = $(el);
+ var to = {},
+ pos = el.getPosition(this.element),
+ size = el.getSize(),
+ scroll = this.element.getScroll(),
+ containerSize = this.element.getSize(),
+ edge = {
+ x: pos.x + size.x,
+ y: pos.y + size.y
+ };
+
+ ['x','y'].each(function(axis){
+ if(axes.contains(axis)){
+ to[axis] = pos[axis] - (containerSize[axis] - size[axis])/2;
+ }
+ if(to[axis] == null) to[axis] = scroll[axis];
+ if(offset && offset[axis]) to[axis] = to[axis] + offset[axis];
+ }, this);
+ if (to.x != scroll.x || to.y != scroll.y) this.start(to.x, to.y);
+ return this;
}

});


/*
-Script: Fx.Slide.js
- Effect to slide an element in and out of view.
+---

- License:
- MIT-style license.
+script: Fx.Slide.js

- Authors:
- Valerio Proietti
+description: Effect to slide an element in and out of view.
+
+license: MIT-style license
+
+authors:
+- Valerio Proietti
+
+requires:
+- core:1.2.4/Fx Element.Style
+- /MooTools.More
+
+provides: [Fx.Slide]
+
+...
*/

Fx.Slide = new Class({
@@ -3278,19 +3906,25 @@
Extends: Fx,

options: {
- mode: 'vertical'
+ mode: 'vertical',
+ wrapper: false,
+ hideOverflow: true
},

initialize: function(element, options){
this.addEvent('complete', function(){
this.open = (this.wrapper['offset' + this.layout.capitalize()] != 0);
+ if (this.open) this.wrapper.setStyle('height', '');
if (this.open && Browser.Engine.webkit419) this.element.dispose().inject(this.wrapper);
}, true);
this.element = this.subject = document.id(element);
this.parent(options);
var wrapper = this.element.retrieve('wrapper');
+ var styles = this.element.getStyles('margin', 'position', 'overflow');
+ if (this.options.hideOverflow) styles = $extend(styles, {overflow: 'hidden'});
+ if (this.options.wrapper) wrapper = document.id(this.options.wrapper).setStyles(styles);
this.wrapper = wrapper || new Element('div', {
- styles: $extend(this.element.getStyles('margin', 'position'), {overflow: 'hidden'})
+ styles: styles
}).wraps(this.element);
this.element.store('wrapper', this.wrapper).setStyle('margin', 0);
this.now = [];
@@ -3405,14 +4039,24 @@


/*
-Script: Fx.SmoothScroll.js
- Class for creating a smooth scrolling effect to all internal links on the page.
+---

- License:
- MIT-style license.
+script: Fx.SmoothScroll.js

- Authors:
- Valerio Proietti
+description: Class for creating a smooth scrolling effect to all internal links on the page.
+
+license: MIT-style license
+
+authors:
+- Valerio Proietti
+
+requires:
+- core:1.2.4/Selectors
+- /Fx.Scroll
+
+provides: [Fx.SmoothScroll]
+
+...
*/

var SmoothScroll = Fx.SmoothScroll = new Class({
@@ -3424,7 +4068,7 @@
this.doc = context.getDocument();
var win = context.getWindow();
this.parent(this.doc, options);
- this.links = this.options.links ? $$(this.options.links) : $$(this.doc.links);
+ this.links = $$(this.options.links || this.doc.links);
var location = win.location.href.match(/^[^#]*/)[0] + '#';
this.links.each(function(link){
if (link.href.indexOf(location) != 0) {return;}
@@ -3445,24 +4089,35 @@
if (el) {
event.preventDefault();
this.anchor = anchor;
- this.toElement(el);
+ this.toElement(el).chain(function(){
+ this.fireEvent('scrolledTo', [link, el]);
+ }.bind(this));
link.blur();
}
}.bind(this));
}
-
});

/*
-Script: Fx.Sort.js
- Defines Fx.Sort, a class that reorders lists with a transition.
+---

- License:
- MIT-style license.
+script: Fx.Sort.js

- Authors:
- Aaron Newton
+description: Defines Fx.Sort, a class that reorders lists with a transition.

+license: MIT-style license
+
+authors:
+- Aaron Newton
+
+requires:
+- core:1.2.4/Element.Dimensions
+- /Fx.Elements
+- /Element.Measure
+
+provides: [Fx.Sort]
+
+...
*/

Fx.Sort = new Class({
@@ -3489,10 +4144,11 @@

sort: function(newOrder){
if ($type(newOrder) != 'array') return false;
- var top = 0;
- var left = 0;
- var zero = {};
- var vert = this.options.mode == 'vertical';
+ var top = 0,
+ left = 0,
+ next = {},
+ zero = {},
+ vert = this.options.mode == 'vertical';
var current = this.elements.map(function(el, index){
var size = el.getComputedSize({styles: ['border', 'padding', 'margin']});
var val;
@@ -3526,10 +4182,7 @@
if (newOrder.length > this.elements.length)
newOrder.splice(this.elements.length-1, newOrder.length - this.elements.length);
}
- top = 0;
- left = 0;
- var margin = 0;
- var next = {};
+ var margin = top = left = 0;
newOrder.each(function(item, index){
var newPos = {};
if (vert){
@@ -3596,26 +4249,38 @@
swap: function(one, two){
if ($type(one) == 'element') one = this.elements.indexOf(one);
if ($type(two) == 'element') two = this.elements.indexOf(two);
-
+
var newOrder = $A(this.currentOrder);
newOrder[this.currentOrder.indexOf(one)] = two;
newOrder[this.currentOrder.indexOf(two)] = one;
- this.sort(newOrder);
+ return this.sort(newOrder);
}

});

/*
-Script: Drag.js
- The base Drag Class. Can be used to drag and resize Elements using mouse events.
+---

- License:
- MIT-style license.
+script: Drag.js

- Authors:
- Valerio Proietti
- Tom Occhinno
- Jan Kassens
+description: The base Drag Class. Can be used to drag and resize Elements using mouse events.
+
+license: MIT-style license
+
+authors:
+- Valerio Proietti
+- Tom Occhinno
+- Jan Kassens
+
+requires:
+- core:1.2.4/Events
+- core:1.2.4/Options
+- core:1.2.4/Element.Event
+- core:1.2.4/Element.Style
+- /MooTools.More
+
+provides: [Drag]
+
*/

var Drag = new Class({
@@ -3637,6 +4302,7 @@
handle: false,
invert: false,
preventDefault: false,
+ stopPropagation: false,
modifiers: {x: 'left', y: 'top'}
},

@@ -3674,7 +4340,9 @@
},

start: function(event){
+ if (event.rightClick) return;
if (this.options.preventDefault) event.preventDefault();
+ if (this.options.stopPropagation) event.stopPropagation();
this.mouse.start = event.page;
this.fireEvent('beforeStart', this.element);
var limit = this.options.limit;
@@ -3724,8 +4392,11 @@
}
}
if (this.options.grid[z]) this.value.now[z] -= ((this.value.now[z] - (this.limit[z][0]||0)) % this.options.grid[z]);
- if (this.options.style) this.element.setStyle(this.options.modifiers[z], this.value.now[z] + this.options.unit);
- else this.element[this.options.modifiers[z]] = this.value.now[z];
+ if (this.options.style) {
+ this.element.setStyle(this.options.modifiers[z], this.value.now[z] + this.options.unit);
+ } else {
+ this.element[this.options.modifiers[z]] = this.value.now[z];
+ }
}
this.fireEvent('drag', [this.element, event]);
},
@@ -3762,17 +4433,30 @@


/*
-Script: Drag.Move.js
- A Drag extension that provides support for the constraining of draggables to containers and droppables.
+---

- License:
- MIT-style license.
+script: Drag.Move.js

- Authors:
- Valerio Proietti
- Tom Occhinno
- Jan Kassens*/
+description: A Drag extension that provides support for the constraining of draggables to containers and droppables.

+license: MIT-style license
+
+authors:
+- Valerio Proietti
+- Tom Occhinno
+- Jan Kassens
+- Aaron Newton
+- Scott Kyle
+
+requires:
+- core:1.2.4/Element.Dimensions
+- /Drag
+
+provides: [Drag.Move]
+
+...
+*/
+
Drag.Move = new Class({

Extends: Drag,
@@ -3790,56 +4474,101 @@

initialize: function(element, options){
this.parent(element, options);
+ element = this.element;
+
this.droppables = $$(this.options.droppables);
this.container = document.id(this.options.container);
- if (this.container && $type(this.container) != 'element') this.container = document.id(this.container.getDocument().body);
+
+ if (this.container && $type(this.container) != 'element')
+ this.container = document.id(this.container.getDocument().body);
+
+ var styles = element.getStyles('left', 'top', 'position');
+ if (styles.left == 'auto' || styles.top == 'auto')
+ element.setPosition(element.getPosition(element.getOffsetParent()));
+
+ if (styles.position == 'static')
+ element.setStyle('position', 'absolute');

- var position = this.element.getStyle('position');
- if (position=='static') position = 'absolute';
- if ([this.element.getStyle('left'), this.element.getStyle('top')].contains('auto')) this.element.position(this.element.getPosition(this.element.offsetParent));
- this.element.setStyle('position', position);
-
this.addEvent('start', this.checkDroppables, true);

this.overed = null;
},

start: function(event){
- if (this.container){
- var ccoo = this.container.getCoordinates(this.element.getOffsetParent()), cbs = {}, ems = {};
+ if (this.container) this.options.limit = this.calculateLimit();
+
+ if (this.options.precalculate){
+ this.positions = this.droppables.map(function(el){
+ return el.getCoordinates();
+ });
+ }
+
+ this.parent(event);
+ },
+
+ calculateLimit: function(){
+ var offsetParent = this.element.getOffsetParent(),
+ containerCoordinates = this.container.getCoordinates(offsetParent),
+ containerBorder = {},
+ elementMargin = {},
+ elementBorder = {},
+ containerMargin = {},
+ offsetParentPadding = {};

- ['top', 'right', 'bottom', 'left'].each(function(pad){
- cbs[pad] = this.container.getStyle('border-' + pad).toInt();
- ems[pad] = this.element.getStyle('margin-' + pad).toInt();
- }, this);
+ ['top', 'right', 'bottom', 'left'].each(function(pad){
+ containerBorder[pad] = this.container.getStyle('border-' + pad).toInt();
+ elementBorder[pad] = this.element.getStyle('border-' + pad).toInt();
+ elementMargin[pad] = this.element.getStyle('margin-' + pad).toInt();
+ containerMargin[pad] = this.container.getStyle('margin-' + pad).toInt();
+ offsetParentPadding[pad] = offsetParent.getStyle('padding-' + pad).toInt();
+ }, this);

- var width = this.element.offsetWidth + ems.left + ems.right;
- var height = this.element.offsetHeight + ems.top + ems.bottom;
+ var width = this.element.offsetWidth + elementMargin.left + elementMargin.right,
+ height = this.element.offsetHeight + elementMargin.top + elementMargin.bottom,
+ left = 0,
+ top = 0,
+ right = containerCoordinates.right - containerBorder.right - width,
+ bottom = containerCoordinates.bottom - containerBorder.bottom - height;

- if (this.options.includeMargins) {
- $each(ems, function(value, key) {
- ems[key] = 0;
- });
+ if (this.options.includeMargins){
+ left += elementMargin.left;
+ top += elementMargin.top;
+ } else {
+ right += elementMargin.right;
+ bottom += elementMargin.bottom;
+ }
+
+ if (this.element.getStyle('position') == 'relative'){
+ var coords = this.element.getCoordinates(offsetParent);
+ coords.left -= this.element.getStyle('left').toInt();
+ coords.top -= this.element.getStyle('top').toInt();
+
+ left += containerBorder.left - coords.left;
+ top += containerBorder.top - coords.top;
+ right += elementMargin.left - coords.left;
+ bottom += elementMargin.top - coords.top;
+
+ if (this.container != offsetParent){
+ left += containerMargin.left + offsetParentPadding.left;
+ top += (Browser.Engine.trident4 ? 0 : containerMargin.top) + offsetParentPadding.top;
}
- if (this.container == this.element.getOffsetParent()) {
- this.options.limit = {
- x: [0 - ems.left, ccoo.right - cbs.left - cbs.right - width + ems.right],
- y: [0 - ems.top, ccoo.bottom - cbs.top - cbs.bottom - height + ems.bottom]
- };
+ } else {
+ left -= elementMargin.left;
+ top -= elementMargin.top;
+
+ if (this.container == offsetParent){
+ right -= containerBorder.left;
+ bottom -= containerBorder.top;
} else {
- this.options.limit = {
- x: [ccoo.left + cbs.left - ems.left, ccoo.right - cbs.right - width + ems.right],
- y: [ccoo.top + cbs.top - ems.top, ccoo.bottom - cbs.bottom - height + ems.bottom]
- };
+ left += containerCoordinates.left + containerBorder.left;
+ top += containerCoordinates.top + containerBorder.top;
}
-
}
- if (this.options.precalculate){
- this.positions = this.droppables.map(function(el) {
- return el.getCoordinates();
- });
- }
- this.parent(event);
+
+ return {
+ x: [left, right],
+ y: [top, bottom]
+ };
},

checkAgainst: function(el, i){
@@ -3883,14 +4612,27 @@


/*
-Script: Slider.js
- Class for creating horizontal and vertical slider controls.
+---

- License:
- MIT-style license.
+script: Slider.js

- Authors:
- Valerio Proietti
+description: Class for creating horizontal and vertical slider controls.
+
+license: MIT-style license
+
+authors:
+- Valerio Proietti
+
+requires:
+- core:1.2.4/Element.Dimensions
+- /Class.Binds
+- /Drag
+- /Element.Dimensions
+- /Element.Measure
+
+provides: [Slider]
+
+...
*/

var Slider = new Class({
@@ -3907,6 +4649,7 @@
if (this.options.snap) position = this.toPosition(this.step);
this.knob.setStyle(this.property, position);
},
+ initialStep: 0,
snap: false,
offset: 0,
range: false,
@@ -3932,8 +4675,12 @@
this.property = 'left';
offset = 'offsetWidth';
}
- this.half = this.knob[offset] / 2;
- this.full = this.element[offset] - this.knob[offset] + (this.options.offset * 2);
+
+ this.full = this.element.measure(function(){
+ this.half = this.knob[offset] / 2;
+ return this.element[offset] - this.knob[offset] + (this.options.offset * 2);
+ }.bind(this));
+
this.min = $chk(this.options.range[0]) ? this.options.range[0] : 0;
this.max = $chk(this.options.range[1]) ? this.options.range[1] : this.options.steps;
this.range = this.max - this.min;
@@ -3941,25 +4688,22 @@
this.stepSize = Math.abs(this.range) / this.steps;
this.stepWidth = this.stepSize * this.full / Math.abs(this.range) ;

- this.knob.setStyle('position', 'relative').setStyle(this.property, - this.options.offset);
+ this.knob.setStyle('position', 'relative').setStyle(this.property, this.options.initialStep ? this.toPosition(this.options.initialStep) : - this.options.offset);
modifiers[this.axis] = this.property;
limit[this.axis] = [- this.options.offset, this.full - this.options.offset];

- this.bound = {
- clickedElement: this.clickedElement.bind(this),
- scrolledElement: this.scrolledElement.bindWithEvent(this),
- draggedKnob: this.draggedKnob.bind(this)
- };
-
var dragOptions = {
snap: 0,
limit: limit,
modifiers: modifiers,
- onDrag: this.bound.draggedKnob,
- onStart: this.bound.draggedKnob,
+ onDrag: this.draggedKnob,
+ onStart: this.draggedKnob,
onBeforeStart: (function(){
this.isDragging = true;
}).bind(this),
+ onCancel: function() {
+ this.isDragging = false;
+ }.bind(this),
onComplete: function(){
this.isDragging = false;
this.draggedKnob();
@@ -3976,15 +4720,15 @@
},

attach: function(){
- this.element.addEvent('mousedown', this.bound.clickedElement);
- if (this.options.wheel) this.element.addEvent('mousewheel', this.bound.scrolledElement);
+ this.element.addEvent('mousedown', this.clickedElement);
+ if (this.options.wheel) this.element.addEvent('mousewheel', this.scrolledElement);
this.drag.attach();
return this;
},

detach: function(){
- this.element.removeEvent('mousedown', this.bound.clickedElement);
- this.element.removeEvent('mousewheel', this.bound.scrolledElement);
+ this.element.removeEvent('mousedown', this.clickedElement);
+ this.element.removeEvent('mousewheel', this.scrolledElement);
this.drag.detach();
return this;
},
@@ -4053,14 +4797,23 @@
});

/*
-Script: Sortables.js
- Class for creating a drag and drop sorting interface for lists of items.
+---

- License:
- MIT-style license.
+script: Sortables.js

- Authors:
- Tom Occhino
+description: Class for creating a drag and drop sorting interface for lists of items.
+
+license: MIT-style license
+
+authors:
+- Tom Occhino
+
+requires:
+- /Drag.Move
+
+provides: [Slider]
+
+...
*/

var Sortables = new Class({
@@ -4122,7 +4875,7 @@
this.elements.erase(element);
var start = element.retrieve('sortables:start');
(this.options.handle ? element.getElement(this.options.handle) || element : element).removeEvent('mousedown', start);
-
+
return element;
}, this));
},
@@ -4131,7 +4884,7 @@
return $$(Array.flatten(arguments).map(function(list){
this.lists.erase(list);
this.removeItems(list.getChildren());
-
+
return list;
}, this));
},
@@ -4139,12 +4892,20 @@
getClone: function(event, element){
if (!this.options.clone) return new Element('div').inject(document.body);
if ($type(this.options.clone) == 'function') return this.options.clone.call(this, event, element, this.list);
- return element.clone(true).setStyles({
+ var clone = element.clone(true).setStyles({
margin: '0px',
position: 'absolute',
visibility: 'hidden',
'width': element.getStyle('width')
- }).inject(this.list).position(element.getPosition(element.getOffsetParent()));
+ });
+ //prevent the duplicated radio inputs from unchecking the real one
+ if (clone.get('html').test('radio')) {
+ clone.getElements('input[type=radio]').each(function(input, i) {
+ input.set('name', 'clone_' + i);
+ });
+ }
+
+ return clone.inject(this.list).setPosition(element.getPosition(element.getOffsetParent()));
},

getDroppables: function(){
@@ -4234,15 +4995,26 @@


/*
-Script: Request.JSONP.js
- Defines Request.JSONP, a class for cross domain javascript via script injection.
+---

- License:
- MIT-style license.
+script: Request.JSONP.js

- Authors:
- Aaron Newton
- Guillermo Rauch
+description: Defines Request.JSONP, a class for cross domain javascript via script injection.
+
+license: MIT-style license
+
+authors:
+- Aaron Newton
+- Guillermo Rauch
+
+requires:
+- core:1.2.4/Element
+- core:1.2.4/Request
+- /Log
+
+provides: [Request.JSONP]
+
+...
*/

Request.JSONP = new Class({
@@ -4254,7 +5026,9 @@
onRequest: $empty(scriptElement),
onComplete: $empty(data),
onSuccess: $empty(data),
- onCancel: $empty(),*/
+ onCancel: $empty(),
+ log: false,
+ */
url: '',
data: {},
retries: 0,
@@ -4266,6 +5040,7 @@

initialize: function(options){
this.setOptions(options);
+ if (this.options.log) this.enableLog();
this.running = false;
this.requests = 0;
this.triesRemaining = [];
@@ -4283,7 +5058,9 @@
send: function(options){
if (!$chk(arguments[1]) && !this.check(options)) return this;

- var type = $type(options), old = this.options, index = $chk(arguments[1]) ? arguments[1] : this.requests++;
+ var type = $type(options),
+ old = this.options,
+ index = $chk(arguments[1]) ? arguments[1] : this.requests++;
if (type == 'string' || type == 'element') options = {data: options};

options = $extend({data: old.data, url: old.url}, options);
@@ -4302,13 +5079,11 @@
this.triesRemaining[index] = remaining - 1;
if (script){
script.destroy();
- this.send(options, index);
- this.fireEvent('retry', this.triesRemaining[index]);
+ this.send(options, index).fireEvent('retry', this.triesRemaining[index]);
}
} else if(script && this.options.timeout){
script.destroy();
- this.cancel();
- this.fireEvent('failure');
+ this.cancel().fireEvent('failure');
}
}).delay(this.options.timeout, this);
}).delay(Browser.Engine.trident ? 50 : 0, this);
@@ -4323,7 +5098,8 @@
},

getScript: function(options){
- var index = Request.JSONP.counter, data;
+ var index = Request.JSONP.counter,
+ data;
Request.JSONP.counter++;

switch ($type(options.data)){
@@ -4331,23 +5107,23 @@
case 'object': case 'hash': data = Hash.toQueryString(options.data);
}

- var src = options.url +
- (options.url.test('\\?') ? '&' :'?') +
- (options.callbackKey || this.options.callbackKey) +
- '=Request.JSONP.request_map.request_'+ index +
+ var src = options.url +
+ (options.url.test('\\?') ? '&' :'?') +
+ (options.callbackKey || this.options.callbackKey) +
+ '=Request.JSONP.request_map.request_'+ index +
(data ? '&' + data : '');
if (src.length > 2083) this.log('JSONP '+ src +' will fail in Internet Explorer, which enforces a 2083 bytes length limit on URIs');

var script = new Element('script', {type: 'text/javascript', src: src});
- Request.JSONP.request_map['request_' + index] = function(data){ this.success(data, script); }.bind(this);
+ Request.JSONP.request_map['request_' + index] = function(){ this.success(arguments, script); }.bind(this);
return script.inject(this.options.injectScript);
},

- success: function(data, script){
+ success: function(args, script){
if (script) script.destroy();
this.running = false;
- this.log('JSONP successfully retrieved: ', data);
- this.fireEvent('complete', [data]).fireEvent('success', [data]).callChain();
+ this.log('JSONP successfully retrieved: ', args);
+ this.fireEvent('complete', args).fireEvent('success', args).callChain();
}

});
@@ -4356,14 +5132,25 @@
Request.JSONP.request_map = {};

/*
-Script: Request.Queue.js
- Controls several instances of Request and its variants to run only one request at a time.
+---

- License:
- MIT-style license.
+script: Request.Queue.js

- Authors:
- Aaron Newton
+description: Controls several instances of Request and its variants to run only one request at a time.
+
+license: MIT-style license
+
+authors:
+- Aaron Newton
+
+requires:
+- core:1.2.4/Element
+- core:1.2.4/Request
+- /Log
+
+provides: [Request.Queue]
+
+...
*/

Request.Queue = new Class({
@@ -4378,7 +5165,9 @@
onComplete: $empty(argsPassedToOnComplete),
onCancel: $empty(argsPassedToOnCancel),
onException: $empty(argsPassedToOnException),
- onFailure: $empty(argsPassedToOnFailure),*/
+ onFailure: $empty(argsPassedToOnFailure),
+ onEnd: $empty,
+ */
stopOnFailure: true,
autoAdvance: true,
concurrent: 1,
@@ -4386,11 +5175,16 @@
},

initialize: function(options){
+ if(options){
+ var requests = options.requests;
+ delete options.requests;
+ }
this.setOptions(options);
this.requests = new Hash;
- this.addRequests(this.options.requests);
this.queue = [];
this.reqBinders = {};
+
+ if(requests) this.addRequests(requests);
},

addRequest: function(name, request){
@@ -4441,11 +5235,13 @@
},

getRunning: function(){
- return this.requests.filter(function(r){ return r.running; });
+ return this.requests.filter(function(r){
+ return r.running;
+ });
},

isRunning: function(){
- return !!this.getRunning().getKeys().length;
+ return !!(this.getRunning().getKeys().length);
},

send: function(name, options){
@@ -4515,6 +5311,7 @@

onComplete: function(){
this.fireEvent('complete', arguments);
+ if (!this.queue.length) this.fireEvent('end');
},

onCancel: function(){
@@ -4543,15 +5340,24 @@


/*
-Script: Request.Periodical.js
- Requests the same url at a time interval that increases when no data is returned from the requested server
+---

- License:
- MIT-style license.
+script: Request.Periodical.js

- Authors:
- Christoph Pojer
+description: Requests the same URL to pull data from a server but increases the intervals if no data is returned to reduce the load

+license: MIT-style license
+
+authors:
+- Christoph Pojer
+
+requires:
+- core:1.2.4/Request
+- /MooTools.More
+
+provides: [Request.Periodical]
+
+...
*/

Request.implement({
@@ -4563,38 +5369,45 @@
},

startTimer: function(data){
- var fn = (function(){
+ var fn = function(){
if (!this.running) this.send({data: data});
- });
+ };
this.timer = fn.delay(this.options.initialDelay, this);
this.lastDelay = this.options.initialDelay;
- this.completeCheck = function(j){
+ this.completeCheck = function(response){
$clear(this.timer);
- if (j) this.lastDelay = this.options.delay;
- else this.lastDelay = (this.lastDelay+this.options.delay).min(this.options.limit);
+ this.lastDelay = (response) ? this.options.delay : (this.lastDelay + this.options.delay).min(this.options.limit);
this.timer = fn.delay(this.lastDelay, this);
};
- this.addEvent('complete', this.completeCheck);
- return this;
+ return this.addEvent('complete', this.completeCheck);
},

stopTimer: function(){
$clear(this.timer);
- this.removeEvent('complete', this.completeCheck);
- return this;
+ return this.removeEvent('complete', this.completeCheck);
}

});

/*
-Script: Assets.js
- Provides methods to dynamically load JavaScript, CSS, and Image files into the document.
+---

- License:
- MIT-style license.
+script: Assets.js

- Authors:
- Valerio Proietti
+description: Provides methods to dynamically load JavaScript, CSS, and Image files into the document.
+
+license: MIT-style license
+
+authors:
+- Valerio Proietti
+
+requires:
+- core:1.2.4/Element.Event
+- /MooTools.More
+
+provides: [Assets]
+
+...
*/

var Asset = {
@@ -4605,11 +5418,17 @@
document: document,
check: $lambda(true)
}, properties);
-
+
+ if (properties.onLoad) properties.onload = properties.onLoad;
+
var script = new Element('script', {src: source, type: 'text/javascript'});

- var load = properties.onload.bind(script), check = properties.check, doc = properties.document;
- delete properties.onload; delete properties.check; delete properties.document;
+ var load = properties.onload.bind(script),
+ check = properties.check,
+ doc = properties.document;
+ delete properties.onload;
+ delete properties.check;
+ delete properties.document;

script.addEvents({
load: load,
@@ -4629,7 +5448,10 @@

css: function(source, properties){
return new Element('link', $merge({
- rel: 'stylesheet', media: 'screen', type: 'text/css', href: source
+ rel: 'stylesheet',
+ media: 'screen',
+ type: 'text/css',
+ href: source
}, properties)).inject(document.head);
},

@@ -4643,6 +5465,8 @@
var element = document.id(image) || new Element('img');
['load', 'abort', 'error'].each(function(name){
var type = 'on' + name;
+ var cap = name.capitalize();
+ if (properties['on' + cap]) properties[type] = properties['on' + cap];
var event = properties[type];
delete properties[type];
image[type] = function(){
@@ -4690,14 +5514,28 @@
};

/*
-Script: Color.js
- Class for creating and manipulating colors in JavaScript. Supports HSB -> RGB Conversions and vice versa.
+---

- License:
- MIT-style license.
+script: Color.js

- Authors:
- Valerio Proietti
+description: Class for creating and manipulating colors in JavaScript. Supports HSB -> RGB Conversions and vice versa.
+
+license: MIT-style license
+
+authors:
+- Valerio Proietti
+
+requires:
+- core:1.2.4/Array
+- core:1.2.4/String
+- core:1.2.4/Number
+- core:1.2.4/Hash
+- core:1.2.4/Function
+- core:1.2.4/$util
+
+provides: [Color]
+
+...
*/

var Color = new Native({
@@ -4775,15 +5613,16 @@
Array.implement({

rgbToHsb: function(){
- var red = this[0], green = this[1], blue = this[2];
- var hue, saturation, brightness;
- var max = Math.max(red, green, blue), min = Math.min(red, green, blue);
+ var red = this[0],
+ green = this[1],
+ blue = this[2],
+ hue = 0;
+ var max = Math.max(red, green, blue),
+ min = Math.min(red, green, blue);
var delta = max - min;
- brightness = max / 255;
- saturation = (max != 0) ? delta / max : 0;
- if (saturation == 0){
- hue = 0;
- } else {
+ var brightness = max / 255,
+ saturation = (max != 0) ? delta / max : 0;
+ if(saturation != 0) {
var rr = (max - red) / delta;
var gr = (max - green) / delta;
var br = (max - blue) / delta;
@@ -4836,14 +5675,24 @@


/*
-Script: Group.js
- Class for monitoring collections of events
+---

- License:
- MIT-style license.
+script: Group.js

- Authors:
- Valerio Proietti
+description: Class for monitoring collections of events
+
+license: MIT-style license
+
+authors:
+- Valerio Proietti
+
+requires:
+- core:1.2.4/Events
+- /MooTools.More
+
+provides: [Group]
+
+...
*/

var Group = new Class({
@@ -4881,15 +5730,26 @@


/*
-Script: Hash.Cookie.js
- Class for creating, reading, and deleting Cookies in JSON format.
+---

- License:
- MIT-style license.
+script: Hash.Cookie.js

- Authors:
- Valerio Proietti
- Aaron Newton
+description: Class for creating, reading, and deleting Cookies in JSON format.
+
+license: MIT-style license
+
+authors:
+- Valerio Proietti
+- Aaron Newton
+
+requires:
+- core:1.2.4/Cookie
+- core:1.2.4/JSON
+- /MooTools.More
+
+provides: [Hash.Cookie]
+
+...
*/

Hash.Cookie = new Class({
@@ -4929,14 +5789,27 @@
});

/*
-Script: IframeShim.js
- Defines IframeShim, a class for obscuring select lists and flash objects in IE.
+---

- License:
- MIT-style license.
+script: IframeShim.js

- Authors:
- Aaron Newton
+description: Defines IframeShim, a class for obscuring select lists and flash objects in IE.
+
+license: MIT-style license
+
+authors:
+- Aaron Newton
+
+requires:
+- core:1.2.4/Element.Event
+- core:1.2.4/Element.Style
+- core:1.2.4/Options Events
+- /Element.Position
+- /Class.Occlude
+
+provides: [IframeShim]
+
+...
*/

var IframeShim = new Class({
@@ -4945,6 +5818,7 @@

options: {
className: 'iframeShim',
+ src: 'javascript:false;document.write("");',
display: false,
zIndex: null,
margin: 0,
@@ -4975,7 +5849,7 @@
zIndex = ($chk(this.options.zIndex) && zIndex > this.options.zIndex) ? this.options.zIndex : zIndex - 1;
if (zIndex < 0) zIndex = 1;
this.shim = new Element('iframe', {
- src:'javascript:false;document.write("");',
+ src: this.options.src,
scrolling: 'no',
frameborder: 0,
styles: {
@@ -4991,7 +5865,7 @@
this[this.options.display ? 'show' : 'hide']();
this.fireEvent('inject');
}).bind(this);
- if (Browser.Engine.trident && !IframeShim.ready) window.addEvent('load', inject);
+ if (!IframeShim.ready) window.addEvent('load', inject);
else inject();
} else {
this.position = this.hide = this.show = this.dispose = $lambda(this);
@@ -4999,20 +5873,20 @@
},

position: function(){
- if (!IframeShim.ready) return this;
- var size = this.element.measure(function(){ return this.getSize(); });
- if ($type(this.options.margin)){
+ if (!IframeShim.ready || !this.shim) return this;
+ var size = this.element.measure(function(){
+ return this.getSize();
+ });
+ if (this.options.margin != undefined){
size.x = size.x - (this.options.margin * 2);
size.y = size.y - (this.options.margin * 2);
this.options.offset.x += this.options.margin;
this.options.offset.y += this.options.margin;
}
- if (this.shim) {
- this.shim.set({width: size.x, height: size.y}).position({
- relativeTo: this.element,
- offset: this.options.offset
- });
- }
+ this.shim.set({width: size.x, height: size.y}).position({
+ relativeTo: this.element,
+ offset: this.options.offset
+ });
return this;
},

@@ -5043,14 +5917,26 @@
});

/*
-Script: Scroller.js
- Class which scrolls the contents of any Element (including the window) when the mouse reaches the Element's boundaries.
+---

- License:
- MIT-style license.
+script: Scroller.js

- Authors:
- Valerio Proietti
+description: Class which scrolls the contents of any Element (including the window) when the mouse reaches the Element's boundaries.
+
+license: MIT-style license
+
+authors:
+- Valerio Proietti
+
+requires:
+- core:1.2.4/Events
+- core:1.2.4/Options
+- core:1.2.4/Element.Event
+- core:1.2.4/Element.Dimensions
+
+provides: [Scroller]
+
+...
*/

var Scroller = new Class({
@@ -5069,7 +5955,8 @@
initialize: function(element, options){
this.setOptions(options);
this.element = document.id(element);
- this.listener = ($type(this.element) != 'element') ? document.id(this.element.getDocument().body) : this.element;
+ this.docBody = document.id(this.element.getDocument().body);
+ this.listener = ($type(this.element) != 'element') ? this.docBody : this.element;
this.timer = null;
this.bound = {
attach: this.attach.bind(this),
@@ -5080,16 +5967,17 @@

start: function(){
this.listener.addEvents({
- mouseenter: this.bound.attach,
- mouseleave: this.bound.detach
+ mouseover: this.bound.attach,
+ mouseout: this.bound.detach
});
},

stop: function(){
this.listener.removeEvents({
- mouseenter: this.bound.attach,
- mouseleave: this.bound.detach
+ mouseover: this.bound.attach,
+ mouseout: this.bound.detach
});
+ this.detach();
this.timer = $clear(this.timer);
},

@@ -5108,16 +5996,17 @@
},

scroll: function(){
- var size = this.element.getSize(),
- scroll = this.element.getScroll(),
- pos = this.element.getOffsets(),
- scrollSize = this.element.getScrollSize(),
+ var size = this.element.getSize(),
+ scroll = this.element.getScroll(),
+ pos = this.element != this.docBody ? this.element.getOffsets() : {x: 0, y:0},
+ scrollSize = this.element.getScrollSize(),
change = {x: 0, y: 0};
for (var z in this.page){
- if (this.page[z] < (this.options.area + pos[z]) && scroll[z] != 0)
+ if (this.page[z] < (this.options.area + pos[z]) && scroll[z] != 0) {
change[z] = (this.page[z] - this.options.area - pos[z]) * this.options.velocity;
- else if (this.page[z] + this.options.area > (size[z] + pos[z]) && scroll[z] + size[z] != scrollSize[z])
+ } else if (this.page[z] + this.options.area > (size[z] + pos[z]) && scroll[z] + size[z] != scrollSize[z]) {
change[z] = (this.page[z] - size[z] + this.options.area - pos[z]) * this.options.velocity;
+ }
}
if (change.y || change.x) this.fireEvent('change', [scroll.x + change.x, scroll.y + change.y]);
}
@@ -5125,55 +6014,77 @@
});

/*
-Script: Tips.js
- Class for creating nice tips that follow the mouse cursor when hovering an element.
+---

- License:
- MIT-style license.
+script: Tips.js

- Authors:
- Valerio Proietti
- Christoph Pojer
+description: Class for creating nice tips that follow the mouse cursor when hovering an element.
+
+license: MIT-style license
+
+authors:
+- Valerio Proietti
+- Christoph Pojer
+
+requires:
+- core:1.2.4/Options
+- core:1.2.4/Events
+- core:1.2.4/Element.Event
+- core:1.2.4/Element.Style
+- core:1.2.4/Element.Dimensions
+- /MooTools.More
+
+provides: [Tips]
+
+...
*/

-var Tips = new Class({
+(function(){

+var read = function(option, element){
+ return (option) ? ($type(option) == 'function' ? option(element) : element.get(option)) : '';
+};
+
+this.Tips = new Class({
+
Implements: [Events, Options],

options: {
- onShow: function(tip){
- tip.setStyle('visibility', 'visible');
+ /*
+ onAttach: $empty(element),
+ onDetach: $empty(element),
+ */
+ onShow: function(){
+ this.tip.setStyle('display', 'block');
},
- onHide: function(tip){
- tip.setStyle('visibility', 'hidden');
+ onHide: function(){
+ this.tip.setStyle('display', 'none');
},
title: 'title',
- text: function(el){
- return el.get('rel') || el.get('href');
+ text: function(element){
+ return element.get('rel') || element.get('href');
},
showDelay: 100,
hideDelay: 100,
- className: null,
+ className: 'tip-wrap',
offset: {x: 16, y: 16},
+ windowPadding: {x:0, y:0},
fixed: false
},

initialize: function(){
var params = Array.link(arguments, {options: Object.type, elements: $defined});
- if (params.options && params.options.offsets) params.options.offset = params.options.offsets;
this.setOptions(params.options);
+ if (params.elements) this.attach(params.elements);
this.container = new Element('div', {'class': 'tip'});
- this.tip = this.getTip();
-
- if (params.elements) this.attach(params.elements);
},

- getTip: function(){
- return new Element('div', {
+ toElement: function(){
+ if (this.tip) return this.tip;
+
+ return this.tip = new Element('div', {
'class': this.options.className,
styles: {
- visibility: 'hidden',
- display: 'none',
position: 'absolute',
top: 0,
left: 0
@@ -5186,81 +6097,90 @@
},

attach: function(elements){
- var read = function(option, element){
- if (option == null) return '';
- return $type(option) == 'function' ? option(element) : element.get(option);
- };
$$(elements).each(function(element){
- var title = read(this.options.title, element);
+ var title = read(this.options.title, element),
+ text = read(this.options.text, element);
+
element.erase('title').store('tip:native', title).retrieve('tip:title', title);
- element.retrieve('tip:text', read(this.options.text, element));
-
+ element.retrieve('tip:text', text);
+ this.fireEvent('attach', [element]);
+
var events = ['enter', 'leave'];
if (!this.options.fixed) events.push('move');
-
+
events.each(function(value){
- element.addEvent('mouse' + value, element.retrieve('tip:' + value, this['element' + value.capitalize()].bindWithEvent(this, element)));
+ var event = element.retrieve('tip:' + value);
+ if (!event) event = this['element' + value.capitalize()].bindWithEvent(this, element);
+
+ element.store('tip:' + value, event).addEvent('mouse' + value, event);
}, this);
}, this);
-
+
return this;
},

detach: function(elements){
$$(elements).each(function(element){
['enter', 'leave', 'move'].each(function(value){
- element.removeEvent('mouse' + value, element.retrieve('tip:' + value) || $empty);
+ element.removeEvent('mouse' + value, element.retrieve('tip:' + value)).eliminate('tip:' + value);
});
-
- element.eliminate('tip:enter').eliminate('tip:leave').eliminate('tip:move');
-
- if ($type(this.options.title) == 'string' && this.options.title == 'title'){
+
+ this.fireEvent('detach', [element]);
+
+ if (this.options.title == 'title'){ // This is necessary to check if we can revert the title
var original = element.retrieve('tip:native');
if (original) element.set('title', original);
}
}, this);
-
+
return this;
},

elementEnter: function(event, element){
- $A(this.container.childNodes).each(Element.dispose);
-
+ this.container.empty();
+
['title', 'text'].each(function(value){
var content = element.retrieve('tip:' + value);
- if (!content) return;
-
- this[value + 'Element'] = new Element('div', {'class': 'tip-' + value}).inject(this.container);
- this.fill(this[value + 'Element'], content);
+ if (content) this.fill(new Element('div', {'class': 'tip-' + value}).inject(this.container), content);
}, this);
-
- this.timer = $clear(this.timer);
- this.timer = this.show.delay(this.options.showDelay, this, element);
- this.tip.setStyle('display', 'block');
- this.position((!this.options.fixed) ? event : {page: element.getPosition()});
+
+ $clear(this.timer);
+ this.timer = (function(){
+ this.show(this, element);
+ this.position((this.options.fixed) ? {page: element.getPosition()} : event);
+ }).delay(this.options.showDelay, this);
},

elementLeave: function(event, element){
$clear(this.timer);
- this.tip.setStyle('display', 'none');
this.timer = this.hide.delay(this.options.hideDelay, this, element);
+ this.fireForParent(event, element);
},

- elementMove: function(event){
+ fireForParent: function(event, element){
+ element = element.getParent();
+ if (!element || element == document.body) return;
+ if (element.retrieve('tip:enter')) element.fireEvent('mouseenter', event);
+ else this.fireForParent(event, element);
+ },
+
+ elementMove: function(event, element){
this.position(event);
},

position: function(event){
+ if (!this.tip) document.id(this);
+
var size = window.getSize(), scroll = window.getScroll(),
tip = {x: this.tip.offsetWidth, y: this.tip.offsetHeight},
props = {x: 'left', y: 'top'},
obj = {};
-
+
for (var z in props){
obj[props[z]] = event.page[z] + this.options.offset[z];
- if ((obj[props[z]] + tip[z] - scroll[z]) > size[z]) obj[props[z]] = event.page[z] - this.options.offset[z] - tip[z];
+ if ((obj[props[z]] + tip[z] - scroll[z]) > size[z] - this.options.windowPadding[z]) obj[props[z]] = event.page[z] - this.options.offset[z] - tip[z];
}
-
+
this.tip.setStyles(obj);
},

@@ -5269,26 +6189,39 @@
else element.adopt(contents);
},

- show: function(el){
- this.fireEvent('show', [this.tip, el]);
+ show: function(element){
+ if (!this.tip) document.id(this);
+ this.fireEvent('show', [this.tip, element]);
},

- hide: function(el){
- this.fireEvent('hide', [this.tip, el]);
+ hide: function(element){
+ if (!this.tip) document.id(this);
+ this.fireEvent('hide', [this.tip, element]);
}

});

+})();
+
/*
-Script: Date.English.US.js
- Date messages for US English.
+---

- License:
- MIT-style license.
+script: Date.English.US.js

- Authors:
- Aaron Newton
+description: Date messages for US English.

+license: MIT-style license
+
+authors:
+- Aaron Newton
+
+requires:
+- /Lang
+- /Date
+
+provides: [Date.English.US]
+
+...
*/

MooTools.lang.set('en-US', 'Date', {
@@ -5315,29 +6248,51 @@
hoursAgo: 'about {delta} hours ago',
dayAgo: '1 day ago',
daysAgo: '{delta} days ago',
+ weekAgo: '1 week ago',
+ weeksAgo: '{delta} weeks ago',
+ monthAgo: '1 month ago',
+ monthsAgo: '{delta} months ago',
+ yearAgo: '1 year ago',
+ yearsAgo: '{delta} years ago',
lessThanMinuteUntil: 'less than a minute from now',
minuteUntil: 'about a minute from now',
minutesUntil: '{delta} minutes from now',
hourUntil: 'about an hour from now',
hoursUntil: 'about {delta} hours from now',
dayUntil: '1 day from now',
- daysUntil: '{delta} days from now'
+ daysUntil: '{delta} days from now',
+ weekUntil: '1 week from now',
+ weeksUntil: '{delta} weeks from now',
+ monthUntil: '1 month from now',
+ monthsUntil: '{delta} months from now',
+ yearUntil: '1 year from now',
+ yearsUntil: '{delta} years from now'

});

+
/*
-Script: FormValidator.English.js
- Date messages for English.
+---

- License:
- MIT-style license.
+script: Form.Validator.English.js

- Authors:
- Aaron Newton
+description: Form Validator messages for English.

+license: MIT-style license
+
+authors:
+- Aaron Newton
+
+requires:
+- /Lang
+- /Form.Validator
+
+provides: [Form.Validator.English]
+
+...
*/

-MooTools.lang.set('en-US', 'FormValidator', {
+MooTools.lang.set('en-US', 'Form.Validator', {

required:'This field is required.',
minLength:'Please enter at least {minLength} characters (you entered {length} characters).',
@@ -5356,7 +6311,7 @@
errorPrefix: 'Error: ',
warningPrefix: 'Warning: ',

- //FormValidator.Extras
+ //Form.Validator.Extras

noSpace: 'There can be no spaces in this input.',
reqChkByNode: 'No items are selected.',
@@ -5369,6 +6324,7 @@
afterDate: 'The date should be the same or after {label}.',
beforeDate: 'The date should be the same or before {label}.',
startMonth: 'Please select a start month',
- sameMonth: 'These two dates must be in the same month - you must change one or the other.'
+ sameMonth: 'These two dates must be in the same month - you must change one or the other.',
+ creditcard: 'The credit card number entered is invalid. Please check the number and try again. {length} digits entered.'

-});
\ No newline at end of file
+});

Modified: development/branches/jcamp/media/system/js/mootools-more.js
===================================================================
--- development/branches/jcamp/media/system/js/mootools-more.js 2010-08-31 19:21:09 UTC (rev 18740)
+++ development/branches/jcamp/media/system/js/mootools-more.js 2010-08-31 19:24:28 UTC (rev 18741)
@@ -1,282 +1,305 @@
//MooTools More, <http://mootools.net/more>. Copyright (c) 2006-2009 Aaron Newton <http://clientcide.com/>, Valerio Proietti <http://mad4milk.net> & the MooTools team <http://mootools.net/developers>, MIT Style License.

-MooTools.More={version:"1.2.3.1"};(function(){var a={language:"en-US",languages:{"en-US":{}},cascades:["en-US"]};var b;MooTools.lang=new Events();$extend(MooTools.lang,{setLanguage:function(c){if(!a.languages[c]){return this;
-}a.language=c;this.load();this.fireEvent("langChange",c);return this;},load:function(){var c=this.cascade(this.getCurrentLanguage());b={};$each(c,function(e,d){b[d]=this.lambda(e);
-},this);},getCurrentLanguage:function(){return a.language;},addLanguage:function(c){a.languages[c]=a.languages[c]||{};return this;},cascade:function(e){var c=(a.languages[e]||{}).cascades||[];
-c.combine(a.cascades);c.erase(e).push(e);var d=c.map(function(g){return a.languages[g];},this);return $merge.apply(this,d);},lambda:function(c){(c||{}).get=function(e,d){return $lambda(c[e]).apply(this,$splat(d));
+MooTools.More={version:"1.2.4.4"};(function(){var a={language:"en-US",languages:{"en-US":{}},cascades:["en-US"]};
+var b;MooTools.lang=new Events();$extend(MooTools.lang,{setLanguage:function(c){if(!a.languages[c]){return this;}a.language=c;this.load();this.fireEvent("langChange",c);
+return this;},load:function(){var c=this.cascade(this.getCurrentLanguage());b={};$each(c,function(e,d){b[d]=this.lambda(e);},this);},getCurrentLanguage:function(){return a.language;
+},addLanguage:function(c){a.languages[c]=a.languages[c]||{};return this;},cascade:function(e){var c=(a.languages[e]||{}).cascades||[];c.combine(a.cascades);
+c.erase(e).push(e);var d=c.map(function(f){return a.languages[f];},this);return $merge.apply(this,d);},lambda:function(c){(c||{}).get=function(e,d){return $lambda(c[e]).apply(this,$splat(d));
};return c;},get:function(e,d,c){if(b&&b[e]){return(d?b[e].get(d,c):b[e]);}},set:function(d,e,c){this.addLanguage(d);langData=a.languages[d];if(!langData[e]){langData[e]={};
}$extend(langData[e],c);if(d==this.getCurrentLanguage()){this.load();this.fireEvent("langChange",d);}return this;},list:function(){return Hash.getKeys(a.languages);
-}});})();var Log=new Class({log:function(){Log.logger.call(this,arguments);}});Log.logged=[];Log.logger=function(){if(window.console&&console.log){console.log.apply(console,arguments);
-}else{Log.logged.push(arguments);}};Class.refactor=function(b,a){$each(a,function(e,d){var c=b.prototype[d];if(c&&(c=c._origin)&&typeof e=="function"){b.implement(d,function(){var g=this.previous;
-this.previous=c;var h=e.apply(this,arguments);this.previous=g;return h;});}else{b.implement(d,e);}});return b;};Class.Mutators.Binds=function(a){return a;
-};Class.Mutators.initialize=function(a){return function(){$splat(this.Binds).each(function(b){var c=this[b];if(c){this[b]=c.bind(this);}},this);return a.apply(this,arguments);
-};};Class.Occlude=new Class({occlude:function(c,b){b=document.id(b||this.element);var a=b.retrieve(c||this.property);if(a&&!$defined(this.occluded)){this.occluded=a;
-}else{this.occluded=false;b.store(c||this.property,this);}return this.occluded;}});(function(){var b={wait:function(c){return this.chain(function(){this.callChain.delay($pick(c,500),this);
-}.bind(this));}};Chain.implement(b);if(window.Fx){Fx.implement(b);["Css","Tween","Elements"].each(function(c){if(Fx[c]){Fx[c].implement(b);}});}try{Element.implement({chains:function(c){$splat($pick(c,["tween","morph","reveal"])).each(function(d){d=this.get(d);
-if(!d){return;}d.setOptions({link:"chain"});},this);return this;},pauseFx:function(d,c){this.chains(c).get($pick(c,"tween")).wait(d);return this;}});}catch(a){}})();
+}});})();(function(){var c=this;var b=function(){if(c.console&&console.log){try{console.log.apply(console,arguments);}catch(d){console.log(Array.slice(arguments));
+}}else{Log.logged.push(arguments);}return this;};var a=function(){this.logged.push(arguments);return this;};this.Log=new Class({logged:[],log:a,resetLog:function(){this.logged.empty();
+return this;},enableLog:function(){this.log=b;this.logged.each(function(d){this.log.apply(this,d);},this);return this.resetLog();},disableLog:function(){this.log=a;
+return this;}});Log.extend(new Log).enableLog();Log.logger=function(){return this.log.apply(this,arguments);};})();Class.refactor=function(b,a){$each(a,function(e,d){var c=b.prototype[d];
+if(c&&(c=c._origin)&&typeof e=="function"){b.implement(d,function(){var f=this.previous;this.previous=c;var g=e.apply(this,arguments);this.previous=f;return g;
+});}else{b.implement(d,e);}});return b;};Class.Mutators.Binds=function(a){return a;};Class.Mutators.initialize=function(a){return function(){$splat(this.Binds).each(function(b){var c=this[b];
+if(c){this[b]=c.bind(this);}},this);return a.apply(this,arguments);};};Class.Occlude=new Class({occlude:function(c,b){b=document.id(b||this.element);var a=b.retrieve(c||this.property);
+if(a&&!$defined(this.occluded)){return this.occluded=a;}this.occluded=false;b.store(c||this.property,this);return this.occluded;}});(function(){var a={wait:function(b){return this.chain(function(){this.callChain.delay($pick(b,500),this);
+}.bind(this));}};Chain.implement(a);if(window.Fx){Fx.implement(a);["Css","Tween","Elements"].each(function(b){if(Fx[b]){Fx[b].implement(a);}});}Element.implement({chains:function(b){$splat($pick(b,["tween","morph","reveal"])).each(function(c){c=this.get(c);
+if(!c){return;}c.setOptions({link:"chain"});},this);return this;},pauseFx:function(c,b){this.chains(b).get($pick(b,"tween")).wait(c);return this;}});})();
Array.implement({min:function(){return Math.min.apply(null,this);},max:function(){return Math.max.apply(null,this);},average:function(){return this.length?this.sum()/this.length:0;
-},sum:function(){var a=0,b=this.length;if(b){do{a+=this[--b];}while(b);}return a;},unique:function(){return[].combine(this);}});(function(){if(!Date.now){Date.now=$time;
-}Date.Methods={};["Date","Day","FullYear","Hours","Milliseconds","Minutes","Month","Seconds","Time","TimezoneOffset","Week","Timezone","GMTOffset","DayOfYear","LastMonth","LastDayOfMonth","UTCDate","UTCDay","UTCFullYear","AMPM","Ordinal","UTCHours","UTCMilliseconds","UTCMinutes","UTCMonth","UTCSeconds"].each(function(m){Date.Methods[m.toLowerCase()]=m;
-});$each({ms:"Milliseconds",year:"FullYear",min:"Minutes",mo:"Month",sec:"Seconds",hr:"Hours"},function(n,m){Date.Methods[m]=n;});var c=function(n,m){return new Array(m-n.toString().length+1).join("0")+n;
-};Date.implement({set:function(r,o){switch($type(r)){case"object":for(var q in r){this.set(q,r[q]);}break;case"string":r=r.toLowerCase();var n=Date.Methods;
-if(n[r]){this["set"+n[r]](o);}}return this;},get:function(o){o=o.toLowerCase();var n=Date.Methods;if(n[o]){return this["get"+n[o]]();}return null;},clone:function(){return new Date(this.get("time"));
-},increment:function(m,o){m=m||"day";o=$pick(o,1);switch(m){case"year":return this.increment("month",o*12);case"month":var n=this.get("date");this.set("date",1).set("mo",this.get("mo")+o);
-return this.set("date",n.min(this.get("lastdayofmonth")));case"week":return this.increment("day",o*7);case"day":return this.set("date",this.get("date")+o);
-}if(!Date.units[m]){throw new Error(m+" is not a supported interval");}return this.set("time",this.get("time")+o*Date.units[m]());},decrement:function(m,n){return this.increment(m,-1*$pick(n,1));
-},isLeapYear:function(){return Date.isLeapYear(this.get("year"));},clearTime:function(){return this.set({hr:0,min:0,sec:0,ms:0});},diff:function(p,n){n=n||"day";
-if($type(p)=="string"){p=Date.parse(p);}switch(n){case"year":return p.get("year")-this.get("year");case"month":var m=(p.get("year")-this.get("year"))*12;
-return m+p.get("mo")-this.get("mo");default:var o=p.get("time")-this.get("time");if(Date.units[n]()>o.abs()){return 0;}return((p.get("time")-this.get("time"))/Date.units[n]()).round();
-}return null;},getLastDayOfMonth:function(){return Date.daysInMonth(this.get("mo"),this.get("year"));},getDayOfYear:function(){return(Date.UTC(this.get("year"),this.get("mo"),this.get("date")+1)-Date.UTC(this.get("year"),0,1))/Date.units.day();
-},getWeek:function(){return(this.get("dayofyear")/7).ceil();},getOrdinal:function(m){return Date.getMsg("ordinal",m||this.get("date"));},getTimezone:function(){return this.toString().replace(/^.*? ([A-Z]{3}).[0-9]{4}.*$/,"$1").replace(/^.*?\(([A-Z])[a-z]+ ([A-Z])[a-z]+ ([A-Z])[a-z]+\)$/,"$1$2$3");
-},getGMTOffset:function(){var m=this.get("timezoneOffset");return((m>0)?"-":"+")+c((m.abs()/60).floor(),2)+c(m%60,2);},setAMPM:function(m){m=m.toUpperCase();
-var n=this.get("hr");if(n>11&&m=="AM"){return this.decrement("hour",12);}else{if(n<12&&m=="PM"){return this.increment("hour",12);}}return this;},getAMPM:function(){return(this.get("hr")<12)?"AM":"PM";
-},parse:function(m){this.set("time",Date.parse(m));return this;},isValid:function(m){return !!(m||this).valueOf();},format:function(m){if(!this.isValid()){return"invalid date";
-}m=m||"%x %X";m=i[m.toLowerCase()]||m;var n=this;return m.replace(/%([a-z%])/gi,function(o,p){switch(p){case"a":return Date.getMsg("days")[n.get("day")].substr(0,3);
-case"A":return Date.getMsg("days")[n.get("day")];case"b":return Date.getMsg("months")[n.get("month")].substr(0,3);case"B":return Date.getMsg("months")[n.get("month")];
-case"c":return n.toString();case"d":return c(n.get("date"),2);case"H":return c(n.get("hr"),2);case"I":return((n.get("hr")%12)||12);case"j":return c(n.get("dayofyear"),3);
-case"m":return c((n.get("mo")+1),2);case"M":return c(n.get("min"),2);case"o":return n.get("ordinal");case"p":return Date.getMsg(n.get("ampm"));case"S":return c(n.get("seconds"),2);
-case"U":return c(n.get("week"),2);case"w":return n.get("day");case"x":return n.format(Date.getMsg("shortDate"));case"X":return n.format(Date.getMsg("shortTime"));
-case"y":return n.get("year").toString().substr(2);case"Y":return n.get("year");case"T":return n.get("GMTOffset");case"Z":return n.get("Timezone");}return p;
-});},toISOString:function(){return this.format("iso8601");}});Date.alias("diff","compare");Date.alias("format","strftime");var i={db:"%Y-%m-%d %H:%M:%S",compact:"%Y%m%dT%H%M%S",iso8601:"%Y-%m-%dT%H:%M:%S%T",rfc822:"%a, %d %b %Y %H:%M:%S %Z","short":"%d %b %H:%M","long":"%B %d, %Y %H:%M"};
-var e=Date.parse;var k=function(p,r,o){var n=-1;var q=Date.getMsg(p+"s");switch($type(r)){case"object":n=q[r.get(p)];break;case"number":n=q[month-1];if(!n){throw new Error("Invalid "+p+" index: "+index);
-}break;case"string":var m=q.filter(function(s){return this.test(s);},new RegExp("^"+r,"i"));if(!m.length){throw new Error("Invalid "+p+" string");}if(m.length>1){throw new Error("Ambiguous "+p);
-}n=m[0];}return(o)?q.indexOf(n):n;};Date.extend({getMsg:function(n,m){return MooTools.lang.get("Date",n,m);},units:{ms:$lambda(1),second:$lambda(1000),minute:$lambda(60000),hour:$lambda(3600000),day:$lambda(86400000),week:$lambda(608400000),month:function(n,m){var o=new Date;
-return Date.daysInMonth($pick(n,o.get("mo")),$pick(m,o.get("year")))*86400000;},year:function(m){m=m||new Date().get("year");return Date.isLeapYear(m)?31622400000:31536000000;
-}},daysInMonth:function(n,m){return[31,Date.isLeapYear(m)?29:28,31,30,31,30,31,31,30,31,30,31][n];},isLeapYear:function(m){return new Date(m,1,29).get("date")==29;
-},parse:function(o){var n=$type(o);if(n=="number"){return new Date(o);}if(n!="string"){return o;}o=o.clean();if(!o.length){return null;}var m;Date.parsePatterns.some(function(q){var p=q.re.exec(o);
-return(p)?(m=q.handler(p)):false;});return m||new Date(e(o));},parseDay:function(m,n){return k("day",m,n);},parseMonth:function(n,m){return k("month",n,m);
-},parseUTC:function(n){var m=new Date(n);var o=Date.UTC(m.get("year"),m.get("mo"),m.get("date"),m.get("hr"),m.get("min"),m.get("sec"));return new Date(o);
-},orderIndex:function(m){return Date.getMsg("dateOrder").indexOf(m)+1;},defineFormat:function(m,n){i[m]=n;},defineFormats:function(m){for(var n in m){Date.defineFormat(n,m[f]);
-}},parsePatterns:[],defineParser:function(m){Date.parsePatterns.push(m.re&&m.handler?m:j(m));},defineParsers:function(){Array.flatten(arguments).each(Date.defineParser);
-},define2DigitYearStart:function(m){d=m%100;g=m-d;}});var g=1900;var d=70;var a=function(m){switch(m){case"x":return(Date.orderIndex("month")==1)?"%m[.-/]%d([.-/]%y)?":"%d[.-/]%m([.-/]%y)?";
-case"X":return"%H([.:]%M)?([.:]%S([.:]%s)?)?\\s?%p?\\s?%T?";case"o":return"[^\\d\\s]*";}return null;};var l={a:/[a-z]{3,}/,d:/[0-2]?[0-9]|3[01]/,H:/[01]?[0-9]|2[0-3]/,I:/0?[1-9]|1[0-2]/,M:/[0-5]?\d/,s:/\d+/,p:/[ap]\.?m\.?/,y:/\d{2}|\d{4}/,Y:/\d{4}/,T:/Z|[+-]\d{2}(?::?\d{2})?/};
-l.B=l.b=l.A=l.a;l.m=l.I;l.S=l.M;var b;var j=function(o){if(!b){return{format:o};}var m=[null];var n=(o.source||o).replace(/%([a-z])/gi,function(p,q){return a(q)||p;
-}).replace(/\((?!\?)/g,"(?:").replace(/ (?!\?|\*)/g,",? ").replace(/%([a-z%])/gi,function(q,s){var r=l[s];if(!r){return s;}m.push(s);return"("+r.source+")";
-});return{format:o,re:new RegExp("^"+n+"$","i"),handler:function(r){var p=new Date().clearTime();for(var q=1;q<m.length;q++){p=h.call(p,m[q],r[q]);}return p;
-}};};var h=function(m,n){if(!n){if(m=="m"||m=="d"){n=1;}else{return this;}}switch(m){case"a":case"A":return this.set("day",Date.parseDay(n,true));case"b":case"B":return this.set("mo",Date.parseMonth(n,true));
-case"d":return this.set("date",n);case"H":case"I":return this.set("hr",n);case"m":return this.set("mo",n-1);case"M":return this.set("min",n);case"p":return this.set("ampm",n.replace(/\./g,""));
-case"S":return this.set("sec",n);case"s":return this.set("ms",("0."+n)*1000);case"w":return this.set("day",n);case"Y":return this.set("year",n);case"y":n=+n;
-if(n<100){n+=g+(n<d?100:0);}return this.set("year",n);case"T":if(n=="Z"){n="+00";}var o=n.match(/([+-])(\d{2}):?(\d{2})?/);o=(o[1]+"1")*(o[2]*60+(+o[3]||0))+this.getTimezoneOffset();
-return this.set("time",(this*1)-o*60000);}return this;};Date.defineParsers("%Y([-./]%m([-./]%d((T| )%X)?)?)?","%Y%m%d(T%H(%M%S?)?)?","%x( %X)?","%d%o( %b( %Y)?)?( %X)?","%b %d%o?( %Y)?( %X)?","%b %Y");
-MooTools.lang.addEvent("langChange",function(m){if(!MooTools.lang.get("Date")){return;}b=m;Date.parsePatterns.each(function(o,n){if(o.format){Date.parsePatterns[n]=j(o.format);
-}});}).fireEvent("langChange",MooTools.lang.getCurrentLanguage());})();Date.implement({timeDiffInWords:function(a){return Date.distanceOfTimeInWords(this,a||new Date);
-}});Date.alias("timeDiffInWords","timeAgoInWords");Date.extend({distanceOfTimeInWords:function(b,a){return Date.getTimePhrase(((a-b)/1000).toInt());},getTimePhrase:function(c){var a=(c<0)?"Until":"Ago";
-if(c<0){c*=-1;}var b=(c<60)?"lessThanMinute":(c<120)?"minute":(c<(45*60))?"minutes":(c<(90*60))?"hour":(c<(24*60*60))?"hours":(c<(48*60*60))?"day":"days";
-switch(b){case"minutes":c=(c/60).round();break;case"hours":c=(c/3600).round();break;case"days":c=(c/86400).round();}return Date.getMsg(b+a,c).substitute({delta:c});
-}});Date.defineParsers({re:/^tod|tom|yes/i,handler:function(a){var b=new Date().clearTime();switch(a[0]){case"tom":return b.increment();case"yes":return b.decrement();
-default:return b;}}},{re:/^(next|last) ([a-z]+)$/i,handler:function(e){var g=new Date().clearTime();var b=g.getDay();var c=Date.parseDay(e[2],true);var a=c-b;
-if(c<=b){a+=7;}if(e[1]=="last"){a-=7;}return g.set("date",g.getDate()+a);}});Hash.implement({getFromPath:function(a){var b=this.getClean();a.replace(/\[([^\]]+)\]|\.([^.[]+)|[^[.]+/g,function(c){if(!b){return null;
-}var d=arguments[2]||arguments[1]||arguments[0];b=(d in b)?b[d]:null;return c;});return b;},cleanValues:function(a){a=a||$defined;this.each(function(c,b){if(!a(c)){this.erase(b);
-}},this);return this;},run:function(){var a=arguments;this.each(function(c,b){if($type(c)=="function"){c.run(a);}});}});(function(){var b=["À","à","Á","á","Â","â","Ã","ã","Ä","ä","Å","å","Ă","ă","Ą","ą","Ć","ć","Č","č","Ç","ç","Ď","ď","Đ","đ","È","è","É","é","Ê","ê","Ë","ë","Ě","ě","Ę","ę","Ğ","ğ","Ì","ì","Í","í","Î","î","Ï","ï","Ĺ","ĺ","Ľ","ľ","Ł","ł","Ñ","ñ","Ň","ň","Ń","ń","Ò","ò","Ó","ó","Ô","ô","Õ","õ","Ö","ö","Ø","ø","ő","Ř","ř","Ŕ","ŕ","Š","š","Ş","ş","Ś","ś","Ť","ť","Ť","ť","Ţ","ţ","Ù","ù","Ú","ú","Û","û","Ü","ü","Ů","ů","Ÿ","ÿ","ý","Ý","Ž","ž","Ź","ź","Ż","ż","Þ","þ","Ð","ð","ß","Œ","œ","Æ","æ","µ"];
+},sum:function(){var a=0,b=this.length;if(b){do{a+=this[--b];}while(b);}return a;},unique:function(){return[].combine(this);},shuffle:function(){for(var b=this.length;
+b&&--b;){var a=this[b],c=Math.floor(Math.random()*(b+1));this[b]=this[c];this[c]=a;}return this;}});(function(){var i=this.Date;if(!i.now){i.now=$time;
+}i.Methods={ms:"Milliseconds",year:"FullYear",min:"Minutes",mo:"Month",sec:"Seconds",hr:"Hours"};["Date","Day","FullYear","Hours","Milliseconds","Minutes","Month","Seconds","Time","TimezoneOffset","Week","Timezone","GMTOffset","DayOfYear","LastMonth","LastDayOfMonth","UTCDate","UTCDay","UTCFullYear","AMPM","Ordinal","UTCHours","UTCMilliseconds","UTCMinutes","UTCMonth","UTCSeconds"].each(function(p){i.Methods[p.toLowerCase()]=p;
+});var d=function(q,p){return new Array(p-String(q).length+1).join("0")+q;};i.implement({set:function(t,r){switch($type(t)){case"object":for(var s in t){this.set(s,t[s]);
+}break;case"string":t=t.toLowerCase();var q=i.Methods;if(q[t]){this["set"+q[t]](r);}}return this;},get:function(q){q=q.toLowerCase();var p=i.Methods;if(p[q]){return this["get"+p[q]]();
+}return null;},clone:function(){return new i(this.get("time"));},increment:function(p,r){p=p||"day";r=$pick(r,1);switch(p){case"year":return this.increment("month",r*12);
+case"month":var q=this.get("date");this.set("date",1).set("mo",this.get("mo")+r);return this.set("date",q.min(this.get("lastdayofmonth")));case"week":return this.increment("day",r*7);
+case"day":return this.set("date",this.get("date")+r);}if(!i.units[p]){throw new Error(p+" is not a supported interval");}return this.set("time",this.get("time")+r*i.units[p]());
+},decrement:function(p,q){return this.increment(p,-1*$pick(q,1));},isLeapYear:function(){return i.isLeapYear(this.get("year"));},clearTime:function(){return this.set({hr:0,min:0,sec:0,ms:0});
+},diff:function(q,p){if($type(q)=="string"){q=i.parse(q);}return((q-this)/i.units[p||"day"](3,3)).toInt();},getLastDayOfMonth:function(){return i.daysInMonth(this.get("mo"),this.get("year"));
+},getDayOfYear:function(){return(i.UTC(this.get("year"),this.get("mo"),this.get("date")+1)-i.UTC(this.get("year"),0,1))/i.units.day();},getWeek:function(){return(this.get("dayofyear")/7).ceil();
+},getOrdinal:function(p){return i.getMsg("ordinal",p||this.get("date"));},getTimezone:function(){return this.toString().replace(/^.*? ([A-Z]{3}).[0-9]{4}.*$/,"$1").replace(/^.*?\(([A-Z])[a-z]+ ([A-Z])[a-z]+ ([A-Z])[a-z]+\)$/,"$1$2$3");
+},getGMTOffset:function(){var p=this.get("timezoneOffset");return((p>0)?"-":"+")+d((p.abs()/60).floor(),2)+d(p%60,2);},setAMPM:function(p){p=p.toUpperCase();
+var q=this.get("hr");if(q>11&&p=="AM"){return this.decrement("hour",12);}else{if(q<12&&p=="PM"){return this.increment("hour",12);}}return this;},getAMPM:function(){return(this.get("hr")<12)?"AM":"PM";
+},parse:function(p){this.set("time",i.parse(p));return this;},isValid:function(p){return !!(p||this).valueOf();},format:function(p){if(!this.isValid()){return"invalid date";
+}p=p||"%x %X";p=k[p.toLowerCase()]||p;var q=this;return p.replace(/%([a-z%])/gi,function(s,r){switch(r){case"a":return i.getMsg("days")[q.get("day")].substr(0,3);
+case"A":return i.getMsg("days")[q.get("day")];case"b":return i.getMsg("months")[q.get("month")].substr(0,3);case"B":return i.getMsg("months")[q.get("month")];
+case"c":return q.toString();case"d":return d(q.get("date"),2);case"H":return d(q.get("hr"),2);case"I":return((q.get("hr")%12)||12);case"j":return d(q.get("dayofyear"),3);
+case"m":return d((q.get("mo")+1),2);case"M":return d(q.get("min"),2);case"o":return q.get("ordinal");case"p":return i.getMsg(q.get("ampm"));case"S":return d(q.get("seconds"),2);
+case"U":return d(q.get("week"),2);case"w":return q.get("day");case"x":return q.format(i.getMsg("shortDate"));case"X":return q.format(i.getMsg("shortTime"));
+case"y":return q.get("year").toString().substr(2);case"Y":return q.get("year");case"T":return q.get("GMTOffset");case"Z":return q.get("Timezone");}return r;
+});},toISOString:function(){return this.format("iso8601");}});i.alias("toISOString","toJSON");i.alias("diff","compare");i.alias("format","strftime");var k={db:"%Y-%m-%d %H:%M:%S",compact:"%Y%m%dT%H%M%S",iso8601:"%Y-%m-%dT%H:%M:%S%T",rfc822:"%a, %d %b %Y %H:%M:%S %Z","short":"%d %b %H:%M","long":"%B %d, %Y %H:%M"};
+var g=[];var e=i.parse;var n=function(s,u,r){var q=-1;var t=i.getMsg(s+"s");switch($type(u)){case"object":q=t[u.get(s)];break;case"number":q=t[month-1];
+if(!q){throw new Error("Invalid "+s+" index: "+index);}break;case"string":var p=t.filter(function(v){return this.test(v);},new RegExp("^"+u,"i"));if(!p.length){throw new Error("Invalid "+s+" string");
+}if(p.length>1){throw new Error("Ambiguous "+s);}q=p[0];}return(r)?t.indexOf(q):q;};i.extend({getMsg:function(q,p){return MooTools.lang.get("Date",q,p);
+},units:{ms:$lambda(1),second:$lambda(1000),minute:$lambda(60000),hour:$lambda(3600000),day:$lambda(86400000),week:$lambda(608400000),month:function(q,p){var r=new i;
+return i.daysInMonth($pick(q,r.get("mo")),$pick(p,r.get("year")))*86400000;},year:function(p){p=p||new i().get("year");return i.isLeapYear(p)?31622400000:31536000000;
+}},daysInMonth:function(q,p){return[31,i.isLeapYear(p)?29:28,31,30,31,30,31,31,30,31,30,31][q];},isLeapYear:function(p){return((p%4===0)&&(p%100!==0))||(p%400===0);
+},parse:function(r){var q=$type(r);if(q=="number"){return new i(r);}if(q!="string"){return r;}r=r.clean();if(!r.length){return null;}var p;g.some(function(t){var s=t.re.exec(r);
+return(s)?(p=t.handler(s)):false;});return p||new i(e(r));},parseDay:function(p,q){return n("day",p,q);},parseMonth:function(q,p){return n("month",q,p);
+},parseUTC:function(q){var p=new i(q);var r=i.UTC(p.get("year"),p.get("mo"),p.get("date"),p.get("hr"),p.get("min"),p.get("sec"));return new i(r);},orderIndex:function(p){return i.getMsg("dateOrder").indexOf(p)+1;
+},defineFormat:function(p,q){k[p]=q;},defineFormats:function(p){for(var q in p){i.defineFormat(q,p[q]);}},parsePatterns:g,defineParser:function(p){g.push((p.re&&p.handler)?p:l(p));
+},defineParsers:function(){Array.flatten(arguments).each(i.defineParser);},define2DigitYearStart:function(p){h=p%100;m=p-h;}});var m=1900;var h=70;var j=function(p){return new RegExp("(?:"+i.getMsg(p).map(function(q){return q.substr(0,3);
+}).join("|")+")[a-z]*");};var a=function(p){switch(p){case"x":return((i.orderIndex("month")==1)?"%m[.-/]%d":"%d[.-/]%m")+"([.-/]%y)?";case"X":return"%H([.:]%M)?([.:]%S([.:]%s)?)? ?%p? ?%T?";
+}return null;};var o={d:/[0-2]?[0-9]|3[01]/,H:/[01]?[0-9]|2[0-3]/,I:/0?[1-9]|1[0-2]/,M:/[0-5]?\d/,s:/\d+/,o:/[a-z]*/,p:/[ap]\.?m\.?/,y:/\d{2}|\d{4}/,Y:/\d{4}/,T:/Z|[+-]\d{2}(?::?\d{2})?/};
+o.m=o.I;o.S=o.M;var c;var b=function(p){c=p;o.a=o.A=j("days");o.b=o.B=j("months");g.each(function(r,q){if(r.format){g[q]=l(r.format);}});};var l=function(r){if(!c){return{format:r};
+}var p=[];var q=(r.source||r).replace(/%([a-z])/gi,function(t,s){return a(s)||t;}).replace(/\((?!\?)/g,"(?:").replace(/ (?!\?|\*)/g,",? ").replace(/%([a-z%])/gi,function(t,s){var u=o[s];
+if(!u){return s;}p.push(s);return"("+u.source+")";}).replace(/\[a-z\]/gi,"[a-z\\u00c0-\\uffff]");return{format:r,re:new RegExp("^"+q+"$","i"),handler:function(u){u=u.slice(1).associate(p);
+var s=new i().clearTime();if("d" in u){f.call(s,"d",1);}if("m" in u||"b" in u||"B" in u){f.call(s,"m",1);}for(var t in u){f.call(s,t,u[t]);}return s;}};
+};var f=function(p,q){if(!q){return this;}switch(p){case"a":case"A":return this.set("day",i.parseDay(q,true));case"b":case"B":return this.set("mo",i.parseMonth(q,true));
+case"d":return this.set("date",q);case"H":case"I":return this.set("hr",q);case"m":return this.set("mo",q-1);case"M":return this.set("min",q);case"p":return this.set("ampm",q.replace(/\./g,""));
+case"S":return this.set("sec",q);case"s":return this.set("ms",("0."+q)*1000);case"w":return this.set("day",q);case"Y":return this.set("year",q);case"y":q=+q;
+if(q<100){q+=m+(q<h?100:0);}return this.set("year",q);case"T":if(q=="Z"){q="+00";}var r=q.match(/([+-])(\d{2}):?(\d{2})?/);r=(r[1]+"1")*(r[2]*60+(+r[3]||0))+this.getTimezoneOffset();
+return this.set("time",this-r*60000);}return this;};i.defineParsers("%Y([-./]%m([-./]%d((T| )%X)?)?)?","%Y%m%d(T%H(%M%S?)?)?","%x( %X)?","%d%o( %b( %Y)?)?( %X)?","%b( %d%o)?( %Y)?( %X)?","%Y %b( %d%o( %X)?)?","%o %b %d %X %T %Y");
+MooTools.lang.addEvent("langChange",function(p){if(MooTools.lang.get("Date")){b(p);}}).fireEvent("langChange",MooTools.lang.getCurrentLanguage());})();
+Date.implement({timeDiffInWords:function(a){return Date.distanceOfTimeInWords(this,a||new Date);},timeDiff:function(g,b){if(g==null){g=new Date;}var f=((g-this)/1000).toInt();
+if(!f){return"0s";}var a={s:60,m:60,h:24,d:365,y:0};var e,d=[];for(var c in a){if(!f){break;}if((e=a[c])){d.unshift((f%e)+c);f=(f/e).toInt();}else{d.unshift(f+c);
+}}return d.join(b||":");}});Date.alias("timeDiffInWords","timeAgoInWords");Date.extend({distanceOfTimeInWords:function(b,a){return Date.getTimePhrase(((a-b)/1000).toInt());
+},getTimePhrase:function(f){var d=(f<0)?"Until":"Ago";if(f<0){f*=-1;}var b={minute:60,hour:60,day:24,week:7,month:52/12,year:12,eon:Infinity};var e="lessThanMinute";
+for(var c in b){var a=b[c];if(f<1.5*a){if(f>0.75*a){e=c;}break;}f/=a;e=c+"s";}return Date.getMsg(e+d).substitute({delta:f.round()});}});Date.defineParsers({re:/^(?:tod|tom|yes)/i,handler:function(a){var b=new Date().clearTime();
+switch(a[0]){case"tom":return b.increment();case"yes":return b.decrement();default:return b;}}},{re:/^(next|last) ([a-z]+)$/i,handler:function(e){var f=new Date().clearTime();
+var b=f.getDay();var c=Date.parseDay(e[2],true);var a=c-b;if(c<=b){a+=7;}if(e[1]=="last"){a-=7;}return f.set("date",f.getDate()+a);}});Hash.implement({getFromPath:function(a){var b=this.getClean();
+a.replace(/\[([^\]]+)\]|\.([^.[]+)|[^[.]+/g,function(c){if(!b){return null;}var d=arguments[2]||arguments[1]||arguments[0];b=(d in b)?b[d]:null;return c;
+});return b;},cleanValues:function(a){a=a||$defined;this.each(function(c,b){if(!a(c)){this.erase(b);}},this);return this;},run:function(){var a=arguments;
+this.each(function(c,b){if($type(c)=="function"){c.run(a);}});}});(function(){var b=["À","à","Á","á","Â","â","Ã","ã","Ä","ä","Å","å","Ă","ă","Ą","ą","Ć","ć","Č","č","Ç","ç","Ď","ď","Đ","đ","È","è","É","é","Ê","ê","Ë","ë","Ě","ě","Ę","ę","Ğ","ğ","Ì","ì","Í","í","Î","î","Ï","ï","Ĺ","ĺ","Ľ","ľ","Ł","ł","Ñ","ñ","Ň","ň","Ń","ń","Ò","ò","Ó","ó","Ô","ô","Õ","õ","Ö","ö","Ø","ø","ő","Ř","ř","Ŕ","ŕ","Š","š","Ş","ş","Ś","ś","Ť","ť","Ť","ť","Ţ","ţ","Ù","ù","Ú","ú","Û","û","Ü","ü","Ů","ů","Ÿ","ÿ","ý","Ý","Ž","ž","Ź","ź","Ż","ż","Þ","þ","Ð","ð","ß","Œ","œ","Æ","æ","µ"];
var a=["A","a","A","a","A","a","A","a","Ae","ae","A","a","A","a","A","a","C","c","C","c","C","c","D","d","D","d","E","e","E","e","E","e","E","e","E","e","E","e","G","g","I","i","I","i","I","i","I","i","L","l","L","l","L","l","N","n","N","n","N","n","O","o","O","o","O","o","O","o","Oe","oe","O","o","o","R","r","R","r","S","s","S","s","S","s","T","t","T","t","T","t","U","u","U","u","U","u","Ue","ue","U","u","Y","y","Y","y","Z","z","Z","z","Z","z","TH","th","DH","dh","ss","OE","oe","AE","ae","u"];
-var c={"[\xa0\u2002\u2003\u2009]":" ","\xb7":"*","[\u2018\u2019]":"'","[\u201c\u201d]":'"',"\u2026":"...","\u2013":"-","\u2014":"--","\uFFFD":"&raquo;"};
-String.implement({standardize:function(){var d=this;b.each(function(g,e){d=d.replace(new RegExp(g,"g"),a[e]);});return d;},repeat:function(d){return new Array(d+1).join(this);
-},pad:function(e,h,d){if(this.length>=e){return this;}h=h||" ";var g=h.repeat(e-this.length).substr(0,e-this.length);if(!d||d=="right"){return this+g;}if(d=="left"){return g+this;
-}return g.substr(0,(g.length/2).floor())+this+g.substr(0,(g.length/2).ceil());},stripTags:function(){return this.replace(/<\/?[^>]+>/gi,"");},tidy:function(){var d=this.toString();
-$each(c,function(g,e){d=d.replace(new RegExp(e,"g"),g);});return d;}});})();String.implement({parseQueryString:function(){var b=this.split(/[&;]/),a={};
-if(b.length){b.each(function(h){var c=h.indexOf("="),d=c<0?[""]:h.substr(0,c).match(/[^\]\[]+/g),e=decodeURIComponent(h.substr(c+1)),g=a;d.each(function(k,j){var l=g[k];
-if(j<d.length-1){g=g[k]=l||{};}else{if($type(l)=="array"){l.push(e);}else{g[k]=$defined(l)?[l,e]:e;}}});});}return a;},cleanQueryString:function(a){return this.split("&").filter(function(e){var b=e.indexOf("="),c=b<0?"":e.substr(0,b),d=e.substr(b+1);
-return a?a.run([c,d]):$chk(d);}).join("&");}});var URI=new Class({Implements:Options,regex:/^(?:(\w+):)?(?:\/\/(?:(?:([^:@]*):?([^:@]*))?@)?([^:\/?#]*)(?::(\d*))?)?(\.\.?$|(?:[^?#\/]*\/)*)([^?#]*)(?:\?([^#]*))?(?:#(.*))?/,parts:["scheme","user","password","host","port","directory","file","query","fragment"],schemes:{http:80,https:443,ftp:21,rtsp:554,mms:1755,file:0},initialize:function(b,a){this.setOptions(a);
-var c=this.options.base||URI.base;b=b||c;if(b&&b.parsed){this.parsed=$unlink(b.parsed);}else{this.set("value",b.href||b.toString(),c?new URI(c):false);
+var d={"[\xa0\u2002\u2003\u2009]":" ","\xb7":"*","[\u2018\u2019]":"'","[\u201c\u201d]":'"',"\u2026":"...","\u2013":"-","\u2014":"--","\uFFFD":"&raquo;"};
+var c=function(e,f){e=e||"";var g=f?"<"+e+"[^>]*>([\\s\\S]*?)</"+e+">":"</?"+e+"([^>]+)?>";reg=new RegExp(g,"gi");return reg;};String.implement({standardize:function(){var e=this;
+b.each(function(g,f){e=e.replace(new RegExp(g,"g"),a[f]);});return e;},repeat:function(e){return new Array(e+1).join(this);},pad:function(f,h,e){if(this.length>=f){return this;
+}var g=(h==null?" ":""+h).repeat(f-this.length).substr(0,f-this.length);if(!e||e=="right"){return this+g;}if(e=="left"){return g+this;}return g.substr(0,(g.length/2).floor())+this+g.substr(0,(g.length/2).ceil());
+},getTags:function(e,f){return this.match(c(e,f))||[];},stripTags:function(e,f){return this.replace(c(e,f),"");},tidy:function(){var e=this.toString();
+$each(d,function(g,f){e=e.replace(new RegExp(f,"g"),g);});return e;}});})();String.implement({parseQueryString:function(){var b=this.split(/[&;]/),a={};
+if(b.length){b.each(function(g){var c=g.indexOf("="),d=c<0?[""]:g.substr(0,c).match(/[^\]\[]+/g),e=decodeURIComponent(g.substr(c+1)),f=a;d.each(function(j,h){var k=f[j];
+if(h<d.length-1){f=f[j]=k||{};}else{if($type(k)=="array"){k.push(e);}else{f[j]=$defined(k)?[k,e]:e;}}});});}return a;},cleanQueryString:function(a){return this.split("&").filter(function(e){var b=e.indexOf("="),c=b<0?"":e.substr(0,b),d=e.substr(b+1);
+return a?a.run([c,d]):$chk(d);}).join("&");}});var URI=new Class({Implements:Options,options:{},regex:/^(?:(\w+):)?(?:\/\/(?:(?:([^:@\/]*):?([^:@\/]*))?@)?([^:\/?#]*)(?::(\d*))?)?(\.\.?$|(?:[^?#\/]*\/)*)([^?#]*)(?:\?([^#]*))?(?:#(.*))?/,parts:["scheme","user","password","host","port","directory","file","query","fragment"],schemes:{http:80,https:443,ftp:21,rtsp:554,mms:1755,file:0},initialize:function(b,a){this.setOptions(a);
+var c=this.options.base||URI.base;if(!b){b=c;}if(b&&b.parsed){this.parsed=$unlink(b.parsed);}else{this.set("value",b.href||b.toString(),c?new URI(c):false);
}},parse:function(c,b){var a=c.match(this.regex);if(!a){return false;}a.shift();return this.merge(a.associate(this.parts),b);},merge:function(b,a){if((!b||!b.scheme)&&(!a||!a.scheme)){return false;
}if(a){this.parts.every(function(c){if(b[c]){return false;}b[c]=a[c]||"";return true;});}b.port=b.port||this.schemes[b.scheme.toLowerCase()];b.directory=b.directory?this.parseDirectory(b.directory,a?a.directory:""):"/";
return b;},parseDirectory:function(b,c){b=(b.substr(0,1)=="/"?"":(c||"/"))+b;if(!b.test(URI.regs.directoryDot)){return b;}var a=[];b.replace(URI.regs.endSlash,"").split("/").each(function(d){if(d==".."&&a.length>0){a.pop();
}else{if(d!="."){a.push(d);}}});return a.join("/")+"/";},combine:function(a){return a.value||a.scheme+"://"+(a.user?a.user+(a.password?":"+a.password:"")+"@":"")+(a.host||"")+(a.port&&a.port!=this.schemes[a.scheme]?":"+a.port:"")+(a.directory||"/")+(a.file||"")+(a.query?"?"+a.query:"")+(a.fragment?"#"+a.fragment:"");
},set:function(b,d,c){if(b=="value"){var a=d.match(URI.regs.scheme);if(a){a=a[1];}if(a&&!$defined(this.schemes[a.toLowerCase()])){this.parsed={scheme:a,value:d};
}else{this.parsed=this.parse(d,(c||this).parsed)||(a?{scheme:a,value:d}:{value:d});}}else{if(b=="data"){this.setData(d);}else{this.parsed[b]=d;}}return this;
-},get:function(a,b){switch(a){case"value":return this.combine(this.parsed,b?b.parsed:false);case"data":return this.getData();}return this.parsed[a]||undefined;
+},get:function(a,b){switch(a){case"value":return this.combine(this.parsed,b?b.parsed:false);case"data":return this.getData();}return this.parsed[a]||"";
},go:function(){document.location.href=this.toString();},toURI:function(){return this;},getData:function(c,b){var a=this.get(b||"query");if(!$chk(a)){return c?null:{};
-}var d=a.parseQueryString();return c?d[c]:d;},setData:function(a,c,b){if($type(arguments[0])=="string"){a=this.getData();a[arguments[0]]=arguments[1];}else{if(c){a=$merge(this.getData(),a);
-}}return this.set(b||"query",Hash.toQueryString(a));},clearData:function(a){return this.set(a||"query","");}});["toString","valueOf"].each(function(a){URI.prototype[a]=function(){return this.get("value");
-};});URI.regs={endSlash:/\/$/,scheme:/^(\w+):/,directoryDot:/\.\/|\.$/};URI.base=new URI($$("base[href]").getLast(),{base:document.location});String.implement({toURI:function(a){return new URI(this,a);
-}});URI=Class.refactor(URI,{combine:function(g,e){if(!e||g.scheme!=e.scheme||g.host!=e.host||g.port!=e.port){return this.previous.apply(this,arguments);
-}var a=g.file+(g.query?"?"+g.query:"")+(g.fragment?"#"+g.fragment:"");if(!e.directory){return(g.directory||(g.file?"":"./"))+a;}var d=e.directory.split("/"),c=g.directory.split("/"),h="",j;
-var b=0;for(j=0;j<d.length&&j<c.length&&d[j]==c[j];j++){}for(b=0;b<d.length-j-1;b++){h+="../";}for(b=j;b<c.length-1;b++){h+=c[b]+"/";}return(h||(g.file?"":"./"))+a;
+}var d=a.parseQueryString();return c?d[c]:d;},setData:function(a,c,b){if(typeof a=="string"){data=this.getData();data[arguments[0]]=arguments[1];a=data;
+}else{if(c){a=$merge(this.getData(),a);}}return this.set(b||"query",Hash.toQueryString(a));},clearData:function(a){return this.set(a||"query","");}});URI.prototype.toString=URI.prototype.valueOf=function(){return this.get("value");
+};URI.regs={endSlash:/\/$/,scheme:/^(\w+):/,directoryDot:/\.\/|\.$/};URI.base=new URI(document.getElements("base[href]",true).getLast(),{base:document.location});
+String.implement({toURI:function(a){return new URI(this,a);}});URI=Class.refactor(URI,{combine:function(f,e){if(!e||f.scheme!=e.scheme||f.host!=e.host||f.port!=e.port){return this.previous.apply(this,arguments);
+}var a=f.file+(f.query?"?"+f.query:"")+(f.fragment?"#"+f.fragment:"");if(!e.directory){return(f.directory||(f.file?"":"./"))+a;}var d=e.directory.split("/"),c=f.directory.split("/"),g="",h;
+var b=0;for(h=0;h<d.length&&h<c.length&&d[h]==c[h];h++){}for(b=0;b<d.length-h-1;b++){g+="../";}for(b=h;b<c.length-1;b++){g+=c[b]+"/";}return(g||(f.file?"":"./"))+a;
},toAbsolute:function(a){a=new URI(a);if(a){a.set("directory","").set("file","");}return this.toRelative(a);},toRelative:function(a){return this.get("value",new URI(a));
}});Element.implement({tidy:function(){this.set("value",this.get("value").tidy());},getTextInRange:function(b,a){return this.get("value").substring(b,a);
},getSelectedText:function(){if(this.setSelectionRange){return this.getTextInRange(this.getSelectionStart(),this.getSelectionEnd());}return document.selection.createRange().text;
},getSelectedRange:function(){if($defined(this.selectionStart)){return{start:this.selectionStart,end:this.selectionEnd};}var e={start:0,end:0};var a=this.getDocument().selection.createRange();
if(!a||a.parentElement()!=this){return e;}var c=a.duplicate();if(this.type=="text"){e.start=0-c.moveStart("character",-100000);e.end=e.start+a.text.length;
-}else{var b=this.get("value");var d=b.length-b.match(/[\n\r]*$/)[0].length;c.moveToElementText(this);c.setEndPoint("StartToEnd",a);e.end=d-c.text.length;
-c.setEndPoint("StartToStart",a);e.start=d-c.text.length;}return e;},getSelectionStart:function(){return this.getSelectedRange().start;},getSelectionEnd:function(){return this.getSelectedRange().end;
-},setCaretPosition:function(a){if(a=="end"){a=this.get("value").length;}this.selectRange(a,a);return this;},getCaretPosition:function(){return this.getSelectedRange().start;
-},selectRange:function(e,a){if(this.setSelectionRange){this.focus();this.setSelectionRange(e,a);}else{var c=this.get("value");var d=c.substr(e,a-e).replace(/\r/g,"").length;
-e=c.substr(0,e).replace(/\r/g,"").length;var b=this.createTextRange();b.collapse(true);b.moveEnd("character",e+d);b.moveStart("character",e);b.select();
-}return this;},insertAtCursor:function(b,a){var d=this.getSelectedRange();var c=this.get("value");this.set("value",c.substring(0,d.start)+b+c.substring(d.end,c.length));
-if($pick(a,true)){this.selectRange(d.start,d.start+b.length);}else{this.setCaretPosition(d.start+b.length);}return this;},insertAroundCursor:function(b,a){b=$extend({before:"",defaultMiddle:"",after:""},b);
-var c=this.getSelectedText()||b.defaultMiddle;var h=this.getSelectedRange();var g=this.get("value");if(h.start==h.end){this.set("value",g.substring(0,h.start)+b.before+c+b.after+g.substring(h.end,g.length));
-this.selectRange(h.start+b.before.length,h.end+b.before.length+c.length);}else{var d=g.substring(h.start,h.end);this.set("value",g.substring(0,h.start)+b.before+d+b.after+g.substring(h.end,g.length));
-var e=h.start+b.before.length;if($pick(a,true)){this.selectRange(e,e+d.length);}else{this.setCaretPosition(e+g.length);}}return this;}});Element.implement({measure:function(e){var h=function(i){return !!(!i||i.offsetHeight||i.offsetWidth);
-};if(h(this)){return e.apply(this);}var d=this.getParent(),b=[],g=[];while(!h(d)&&d!=document.body){b.push(d.expose());d=d.getParent();}var c=this.expose();
-var a=e.apply(this);c();b.each(function(i){i();});return a;},expose:function(){if(this.getStyle("display")!="none"){return $empty;}var a=this.style.cssText;
+}else{var b=this.get("value");var d=b.length;c.moveToElementText(this);c.setEndPoint("StartToEnd",a);if(c.text.length){d-=b.match(/[\n\r]*$/)[0].length;
+}e.end=d-c.text.length;c.setEndPoint("StartToStart",a);e.start=d-c.text.length;}return e;},getSelectionStart:function(){return this.getSelectedRange().start;
+},getSelectionEnd:function(){return this.getSelectedRange().end;},setCaretPosition:function(a){if(a=="end"){a=this.get("value").length;}this.selectRange(a,a);
+return this;},getCaretPosition:function(){return this.getSelectedRange().start;},selectRange:function(e,a){if(this.setSelectionRange){this.focus();this.setSelectionRange(e,a);
+}else{var c=this.get("value");var d=c.substr(e,a-e).replace(/\r/g,"").length;e=c.substr(0,e).replace(/\r/g,"").length;var b=this.createTextRange();b.collapse(true);
+b.moveEnd("character",e+d);b.moveStart("character",e);b.select();}return this;},insertAtCursor:function(b,a){var d=this.getSelectedRange();var c=this.get("value");
+this.set("value",c.substring(0,d.start)+b+c.substring(d.end,c.length));if($pick(a,true)){this.selectRange(d.start,d.start+b.length);}else{this.setCaretPosition(d.start+b.length);
+}return this;},insertAroundCursor:function(b,a){b=$extend({before:"",defaultMiddle:"",after:""},b);var c=this.getSelectedText()||b.defaultMiddle;var g=this.getSelectedRange();
+var f=this.get("value");if(g.start==g.end){this.set("value",f.substring(0,g.start)+b.before+c+b.after+f.substring(g.end,f.length));this.selectRange(g.start+b.before.length,g.end+b.before.length+c.length);
+}else{var d=f.substring(g.start,g.end);this.set("value",f.substring(0,g.start)+b.before+d+b.after+f.substring(g.end,f.length));var e=g.start+b.before.length;
+if($pick(a,true)){this.selectRange(e,e+d.length);}else{this.setCaretPosition(e+f.length);}}return this;}});Element.implement({measure:function(e){var g=function(h){return !!(!h||h.offsetHeight||h.offsetWidth);
+};if(g(this)){return e.apply(this);}var d=this.getParent(),f=[],b=[];while(!g(d)&&d!=document.body){b.push(d.expose());d=d.getParent();}var c=this.expose();
+var a=e.apply(this);c();b.each(function(h){h();});return a;},expose:function(){if(this.getStyle("display")!="none"){return $empty;}var a=this.style.cssText;
this.setStyles({display:"block",position:"absolute",visibility:"hidden"});return function(){this.style.cssText=a;}.bind(this);},getDimensions:function(a){a=$merge({computeSize:false},a);
-var d={};var c=function(g,e){return(e.computeSize)?g.getComputedSize(e):g.getSize();};if(this.getStyle("display")=="none"){d=this.measure(function(){return c(this,a);
-});}else{try{d=c(this,a);}catch(b){}}return $chk(d.x)?$extend(d,{width:d.x,height:d.y}):$extend(d,{x:d.width,y:d.height});},getComputedSize:function(a){a=$merge({styles:["padding","border"],plains:{height:["top","bottom"],width:["left","right"]},mode:"both"},a);
+var f={};var d=function(g,e){return(e.computeSize)?g.getComputedSize(e):g.getSize();};var b=this.getParent("body");if(b&&this.getStyle("display")=="none"){f=this.measure(function(){return d(this,a);
+});}else{if(b){try{f=d(this,a);}catch(c){}}else{f={x:0,y:0};}}return $chk(f.x)?$extend(f,{width:f.x,height:f.y}):$extend(f,{x:f.width,y:f.height});},getComputedSize:function(a){a=$merge({styles:["padding","border"],plains:{height:["top","bottom"],width:["left","right"]},mode:"both"},a);
var c={width:0,height:0};switch(a.mode){case"vertical":delete c.width;delete a.plains.width;break;case"horizontal":delete c.height;delete a.plains.height;
-break;}var b=[];$each(a.plains,function(h,g){h.each(function(i){a.styles.each(function(j){b.push((j=="border")?j+"-"+i+"-width":j+"-"+i);});});});var e={};
-b.each(function(g){e[g]=this.getComputedStyle(g);},this);var d=[];$each(a.plains,function(h,g){var i=g.capitalize();c["total"+i]=0;c["computed"+i]=0;h.each(function(j){c["computed"+j.capitalize()]=0;
-b.each(function(l,k){if(l.test(j)){e[l]=e[l].toInt()||0;c["total"+i]=c["total"+i]+e[l];c["computed"+j.capitalize()]=c["computed"+j.capitalize()]+e[l];}if(l.test(j)&&g!=l&&(l.test("border")||l.test("padding"))&&!d.contains(l)){d.push(l);
-c["computed"+i]=c["computed"+i]-e[l];}});});});["Width","Height"].each(function(h){var g=h.toLowerCase();if(!$chk(c[g])){return;}c[g]=c[g]+this["offset"+h]+c["computed"+h];
-c["total"+h]=c[g]+c["total"+h];delete c["computed"+h];},this);return $extend(e,c);}});(function(){var a=false;window.addEvent("domready",function(){var b=new Element("div").setStyles({position:"fixed",top:0,right:0}).inject(document.body);
-a=(b.offsetTop===0);b.dispose();});Element.implement({pin:function(c){if(this.getStyle("display")=="none"){return null;}var d;if(c!==false){d=this.getPosition();
-if(!this.retrieve("pinned")){var g={top:d.y-window.getScroll().y,left:d.x-window.getScroll().x};if(a){this.setStyle("position","fixed").setStyles(g);}else{this.store("pinnedByJS",true);
-this.setStyles({position:"absolute",top:d.y,left:d.x});this.store("scrollFixer",(function(){if(this.retrieve("pinned")){this.setStyles({top:g.top.toInt()+window.getScroll().y,left:g.left.toInt()+window.getScroll().x});
-}}).bind(this));window.addEvent("scroll",this.retrieve("scrollFixer"));}this.store("pinned",true);}}else{var e;if(!Browser.Engine.trident){if(this.getParent().getComputedStyle("position")!="static"){e=this.getParent();
-}else{e=this.getParent().getOffsetParent();}}d=this.getPosition(e);this.store("pinned",false);var b;if(a&&!this.retrieve("pinnedByJS")){b={top:d.y+window.getScroll().y,left:d.x+window.getScroll().x};
-}else{this.store("pinnedByJS",false);window.removeEvent("scroll",this.retrieve("scrollFixer"));b={top:d.y,left:d.x};}this.setStyles($merge(b,{position:"absolute"}));
-}return this.addClass("isPinned");},unpin:function(){return this.pin(false).removeClass("isPinned");},togglepin:function(){this.pin(!this.retrieve("pinned"));
-}});})();(function(){var a=Element.prototype.position;Element.implement({position:function(s){if(s&&($defined(s.x)||$defined(s.y))){return a?a.apply(this,arguments):this;
-}$each(s||{},function(u,t){if(!$defined(u)){delete s[t];}});s=$merge({relativeTo:document.body,position:{x:"center",y:"center"},edge:false,offset:{x:0,y:0},returnPos:false,relFixedPosition:false,ignoreMargins:false,allowNegative:false},s);
-var b={x:0,y:0};var i=false;var c=this.measure(function(){return document.id(this.getOffsetParent());});if(c&&c!=this.getDocument().body){b=c.measure(function(){return this.getPosition();
-});i=true;s.offset.x=s.offset.x-b.x;s.offset.y=s.offset.y-b.y;}var r=function(t){if($type(t)!="string"){return t;}t=t.toLowerCase();var u={};if(t.test("left")){u.x="left";
-}else{if(t.test("right")){u.x="right";}else{u.x="center";}}if(t.test("upper")||t.test("top")){u.y="top";}else{if(t.test("bottom")){u.y="bottom";}else{u.y="center";
-}}return u;};s.edge=r(s.edge);s.position=r(s.position);if(!s.edge){if(s.position.x=="center"&&s.position.y=="center"){s.edge={x:"center",y:"center"};}else{s.edge={x:"left",y:"top"};
-}}this.setStyle("position","absolute");var q=document.id(s.relativeTo)||document.body;var j=q==document.body?window.getScroll():q.getPosition();var p=j.y;
-var h=j.x;if(Browser.Engine.trident){var m=q.getScrolls();p+=m.y;h+=m.x;}var k=this.getDimensions({computeSize:true,styles:["padding","border","margin"]});
-if(s.ignoreMargins){s.offset.x=s.offset.x-k["margin-left"];s.offset.y=s.offset.y-k["margin-top"];}var o={};var d=s.offset.y;var e=s.offset.x;var l=window.getSize();
-switch(s.position.x){case"left":o.x=h+e;break;case"right":o.x=h+e+q.offsetWidth;break;default:o.x=h+((q==document.body?l.x:q.offsetWidth)/2)+e;break;}switch(s.position.y){case"top":o.y=p+d;
-break;case"bottom":o.y=p+d+q.offsetHeight;break;default:o.y=p+((q==document.body?l.y:q.offsetHeight)/2)+d;break;}if(s.edge){var n={};switch(s.edge.x){case"left":n.x=0;
-break;case"right":n.x=-k.x-k.computedRight-k.computedLeft;break;default:n.x=-(k.x/2);break;}switch(s.edge.y){case"top":n.y=0;break;case"bottom":n.y=-k.y-k.computedTop-k.computedBottom;
-break;default:n.y=-(k.y/2);break;}o.x=o.x+n.x;o.y=o.y+n.y;}o={left:((o.x>=0||i||s.allowNegative)?o.x:0).toInt(),top:((o.y>=0||i||s.allowNegative)?o.y:0).toInt()};
-if(q.getStyle("position")=="fixed"||s.relFixedPosition){var g=window.getScroll();o.top=o.top.toInt()+g.y;o.left=o.left.toInt()+g.x;}if(s.returnPos){return o;
-}else{this.setStyles(o);}return this;}});})();Element.implement({isDisplayed:function(){return this.getStyle("display")!="none";},toggle:function(){return this[this.isDisplayed()?"hide":"show"]();
-},hide:function(){var b;try{if("none"!=this.getStyle("display")){b=this.getStyle("display");}}catch(a){}return this.store("originalDisplay",b||"block").setStyle("display","none");
-},show:function(a){return this.setStyle("display",a||this.retrieve("originalDisplay")||"block");},swapClass:function(a,b){return this.removeClass(a).addClass(b);
-}});var InputValidator=new Class({Implements:[Options],options:{errorMsg:"Validation failed.",test:function(a){return true;}},initialize:function(b,a){this.setOptions(a);
+break;}var b=[];$each(a.plains,function(g,f){g.each(function(h){a.styles.each(function(i){b.push((i=="border")?i+"-"+h+"-width":i+"-"+h);});});});var e={};
+b.each(function(f){e[f]=this.getComputedStyle(f);},this);var d=[];$each(a.plains,function(g,f){var h=f.capitalize();c["total"+h]=c["computed"+h]=0;g.each(function(i){c["computed"+i.capitalize()]=0;
+b.each(function(k,j){if(k.test(i)){e[k]=e[k].toInt()||0;c["total"+h]=c["total"+h]+e[k];c["computed"+i.capitalize()]=c["computed"+i.capitalize()]+e[k];}if(k.test(i)&&f!=k&&(k.test("border")||k.test("padding"))&&!d.contains(k)){d.push(k);
+c["computed"+h]=c["computed"+h]-e[k];}});});});["Width","Height"].each(function(g){var f=g.toLowerCase();if(!$chk(c[f])){return;}c[f]=c[f]+this["offset"+g]+c["computed"+g];
+c["total"+g]=c[f]+c["total"+g];delete c["computed"+g];},this);return $extend(e,c);}});(function(){var a=false;window.addEvent("domready",function(){var b=new Element("div").setStyles({position:"fixed",top:0,right:0}).inject(document.body);
+a=(b.offsetTop===0);b.dispose();});Element.implement({pin:function(d){if(this.getStyle("display")=="none"){return null;}var f,b=window.getScroll();if(d!==false){f=this.getPosition();
+if(!this.retrieve("pinned")){var h={top:f.y-b.y,left:f.x-b.x};if(a){this.setStyle("position","fixed").setStyles(h);}else{this.store("pinnedByJS",true);
+this.setStyles({position:"absolute",top:f.y,left:f.x}).addClass("isPinned");this.store("scrollFixer",(function(){if(this.retrieve("pinned")){var i=window.getScroll();
+}this.setStyles({top:h.top.toInt()+i.y,left:h.left.toInt()+i.x});}).bind(this));window.addEvent("scroll",this.retrieve("scrollFixer"));}this.store("pinned",true);
+}}else{var g;if(!Browser.Engine.trident){var e=this.getParent();g=(e.getComputedStyle("position")!="static"?e:e.getOffsetParent());}f=this.getPosition(g);
+this.store("pinned",false);var c;if(a&&!this.retrieve("pinnedByJS")){c={top:f.y+b.y,left:f.x+b.x};}else{this.store("pinnedByJS",false);window.removeEvent("scroll",this.retrieve("scrollFixer"));
+c={top:f.y,left:f.x};}this.setStyles($merge(c,{position:"absolute"})).removeClass("isPinned");}return this;},unpin:function(){return this.pin(false);},togglepin:function(){this.pin(!this.retrieve("pinned"));
+}});})();(function(){var a=Element.prototype.position;Element.implement({position:function(g){if(g&&($defined(g.x)||$defined(g.y))){return a?a.apply(this,arguments):this;
+}$each(g||{},function(u,t){if(!$defined(u)){delete g[t];}});g=$merge({relativeTo:document.body,position:{x:"center",y:"center"},edge:false,offset:{x:0,y:0},returnPos:false,relFixedPosition:false,ignoreMargins:false,ignoreScroll:false,allowNegative:false},g);
+var r={x:0,y:0},e=false;var c=this.measure(function(){return document.id(this.getOffsetParent());});if(c&&c!=this.getDocument().body){r=c.measure(function(){return this.getPosition();
+});e=c!=document.id(g.relativeTo);g.offset.x=g.offset.x-r.x;g.offset.y=g.offset.y-r.y;}var s=function(t){if($type(t)!="string"){return t;}t=t.toLowerCase();
+var u={};if(t.test("left")){u.x="left";}else{if(t.test("right")){u.x="right";}else{u.x="center";}}if(t.test("upper")||t.test("top")){u.y="top";}else{if(t.test("bottom")){u.y="bottom";
+}else{u.y="center";}}return u;};g.edge=s(g.edge);g.position=s(g.position);if(!g.edge){if(g.position.x=="center"&&g.position.y=="center"){g.edge={x:"center",y:"center"};
+}else{g.edge={x:"left",y:"top"};}}this.setStyle("position","absolute");var f=document.id(g.relativeTo)||document.body,d=f==document.body?window.getScroll():f.getPosition(),l=d.y,h=d.x;
+var n=this.getDimensions({computeSize:true,styles:["padding","border","margin"]});var j={},o=g.offset.y,q=g.offset.x,k=window.getSize();switch(g.position.x){case"left":j.x=h+q;
+break;case"right":j.x=h+q+f.offsetWidth;break;default:j.x=h+((f==document.body?k.x:f.offsetWidth)/2)+q;break;}switch(g.position.y){case"top":j.y=l+o;break;
+case"bottom":j.y=l+o+f.offsetHeight;break;default:j.y=l+((f==document.body?k.y:f.offsetHeight)/2)+o;break;}if(g.edge){var b={};switch(g.edge.x){case"left":b.x=0;
+break;case"right":b.x=-n.x-n.computedRight-n.computedLeft;break;default:b.x=-(n.totalWidth/2);break;}switch(g.edge.y){case"top":b.y=0;break;case"bottom":b.y=-n.y-n.computedTop-n.computedBottom;
+break;default:b.y=-(n.totalHeight/2);break;}j.x+=b.x;j.y+=b.y;}j={left:((j.x>=0||e||g.allowNegative)?j.x:0).toInt(),top:((j.y>=0||e||g.allowNegative)?j.y:0).toInt()};
+var i={left:"x",top:"y"};["minimum","maximum"].each(function(t){["left","top"].each(function(u){var v=g[t]?g[t][i[u]]:null;if(v!=null&&j[u]<v){j[u]=v;}});
+});if(f.getStyle("position")=="fixed"||g.relFixedPosition){var m=window.getScroll();j.top+=m.y;j.left+=m.x;}if(g.ignoreScroll){var p=f.getScroll();j.top-=p.y;
+j.left-=p.x;}if(g.ignoreMargins){j.left+=(g.edge.x=="right"?n["margin-right"]:g.edge.x=="center"?-n["margin-left"]+((n["margin-right"]+n["margin-left"])/2):-n["margin-left"]);
+j.top+=(g.edge.y=="bottom"?n["margin-bottom"]:g.edge.y=="center"?-n["margin-top"]+((n["margin-bottom"]+n["margin-top"])/2):-n["margin-top"]);}j.left=Math.ceil(j.left);
+j.top=Math.ceil(j.top);if(g.returnPos){return j;}else{this.setStyles(j);}return this;}});})();Element.implement({isDisplayed:function(){return this.getStyle("display")!="none";
+},isVisible:function(){var a=this.offsetWidth,b=this.offsetHeight;return(a==0&&b==0)?false:(a>0&&b>0)?true:this.isDisplayed();},toggle:function(){return this[this.isDisplayed()?"hide":"show"]();
+},hide:function(){var b;try{b=this.getStyle("display");}catch(a){}return this.store("originalDisplay",b||"").setStyle("display","none");},show:function(a){a=a||this.retrieve("originalDisplay")||"block";
+return this.setStyle("display",(a=="none")?"block":a);},swapClass:function(a,b){return this.removeClass(a).addClass(b);}});if(!window.Form){window.Form={};
+}var InputValidator=new Class({Implements:[Options],options:{errorMsg:"Validation failed.",test:function(a){return true;}},initialize:function(b,a){this.setOptions(a);
this.className=b;},test:function(b,a){if(document.id(b)){return this.options.test(document.id(b),a||this.getProps(b));}else{return false;}},getError:function(c,a){var b=this.options.errorMsg;
if($type(b)=="function"){b=b(document.id(c),a||this.getProps(c));}return b;},getProps:function(a){if(!document.id(a)){return{};}return a.get("validatorProps");
}});Element.Properties.validatorProps={set:function(a){return this.eliminate("validatorProps").store("validatorProps",a);},get:function(a){if(a){this.set(a);
}if(this.retrieve("validatorProps")){return this.retrieve("validatorProps");}if(this.getProperty("validatorProps")){try{this.store("validatorProps",JSON.decode(this.getProperty("validatorProps")));
}catch(c){return{};}}else{var b=this.get("class").split(" ").filter(function(d){return d.test(":");});if(!b.length){this.store("validatorProps",{});}else{a={};
-b.each(function(d){var g=d.split(":");if(g[1]){try{a[g[0]]=JSON.decode(g[1]);}catch(h){}}});this.store("validatorProps",a);}}return this.retrieve("validatorProps");
-}};var FormValidator=new Class({Implements:[Options,Events],Binds:["onSubmit"],options:{fieldSelectors:"input, select, textarea",ignoreHidden:true,useTitles:false,evaluateOnSubmit:true,evaluateFieldsOnBlur:true,evaluateFieldsOnChange:true,serial:true,stopOnFailure:true,warningPrefix:function(){return FormValidator.getMsg("warningPrefix")||"Warning: ";
-},errorPrefix:function(){return FormValidator.getMsg("errorPrefix")||"Error: ";}},initialize:function(b,a){this.setOptions(a);this.element=document.id(b);
+b.each(function(d){var f=d.split(":");if(f[1]){try{a[f[0]]=JSON.decode(f[1]);}catch(g){}}});this.store("validatorProps",a);}}return this.retrieve("validatorProps");
+}};Form.Validator=new Class({Implements:[Options,Events],Binds:["onSubmit"],options:{fieldSelectors:"input, select, textarea",ignoreHidden:true,ignoreDisabled:true,useTitles:false,evaluateOnSubmit:true,evaluateFieldsOnBlur:true,evaluateFieldsOnChange:true,serial:true,stopOnFailure:true,warningPrefix:function(){return Form.Validator.getMsg("warningPrefix")||"Warning: ";
+},errorPrefix:function(){return Form.Validator.getMsg("errorPrefix")||"Error: ";}},initialize:function(b,a){this.setOptions(a);this.element=document.id(b);
this.element.store("validator",this);this.warningPrefix=$lambda(this.options.warningPrefix)();this.errorPrefix=$lambda(this.options.errorPrefix)();if(this.options.evaluateOnSubmit){this.element.addEvent("submit",this.onSubmit);
}if(this.options.evaluateFieldsOnBlur||this.options.evaluateFieldsOnChange){this.watchFields(this.getFields());}},toElement:function(){return this.element;
},getFields:function(){return(this.fields=this.element.getElements(this.options.fieldSelectors));},watchFields:function(a){a.each(function(b){if(this.options.evaluateFieldsOnBlur){b.addEvent("blur",this.validationMonitor.pass([b,false],this));
}if(this.options.evaluateFieldsOnChange){b.addEvent("change",this.validationMonitor.pass([b,true],this));}},this);},validationMonitor:function(){$clear(this.timer);
this.timer=this.validateField.delay(50,this,arguments);},onSubmit:function(a){if(!this.validate(a)&&a){a.preventDefault();}else{this.reset();}},reset:function(){this.getFields().each(this.resetField,this);
return this;},validate:function(b){var a=this.getFields().map(function(c){return this.validateField(c,true);},this).every(function(c){return c;});this.fireEvent("formValidate",[a,this.element,b]);
-if(this.options.stopOnFailure&&!a&&b){b.preventDefault();}return a;},validateField:function(j,a){if(this.paused){return true;}j=document.id(j);var d=!j.hasClass("validation-failed");
-var g,i;if(this.options.serial&&!a){g=this.element.getElement(".validation-failed");i=this.element.getElement(".warning");}if(j&&(!g||a||j.hasClass("validation-failed")||(g&&!this.options.serial))){var c=j.className.split(" ").some(function(k){return this.getValidator(k);
-},this);var h=[];j.className.split(" ").each(function(k){if(k&&!this.test(k,j)){h.include(k);}},this);d=h.length===0;if(c&&!j.hasClass("warnOnly")){if(d){j.addClass("validation-passed").removeClass("validation-failed");
-this.fireEvent("elementPass",j);}else{j.addClass("validation-failed").removeClass("validation-passed");this.fireEvent("elementFail",[j,h]);}}if(!i){var e=j.className.split(" ").some(function(k){if(k.test("^warn-")||j.hasClass("warnOnly")){return this.getValidator(k.replace(/^warn-/,""));
-}else{return null;}},this);j.removeClass("warning");var b=j.className.split(" ").map(function(k){if(k.test("^warn-")||j.hasClass("warnOnly")){return this.test(k.replace(/^warn-/,""),j,true);
-}else{return null;}},this);}}return d;},test:function(b,d,e){var a=this.getValidator(b);d=document.id(d);if(d.hasClass("ignoreValidation")){return true;
-}e=$pick(e,false);if(d.hasClass("warnOnly")){e=true;}var c=a?a.test(d):true;if(a&&this.isVisible(d)){this.fireEvent("elementValidate",[c,d,b,e]);}if(e){return true;
-}return c;},isVisible:function(a){if(!this.options.ignoreHidden){return true;}while(a!=document.body){if(document.id(a).getStyle("display")=="none"){return false;
-}a=a.getParent();}return true;},resetField:function(a){a=document.id(a);if(a){a.className.split(" ").each(function(b){if(b.test("^warn-")){b=b.replace(/^warn-/,"");
+if(this.options.stopOnFailure&&!a&&b){b.preventDefault();}return a;},validateField:function(i,a){if(this.paused){return true;}i=document.id(i);var d=!i.hasClass("validation-failed");
+var f,h;if(this.options.serial&&!a){f=this.element.getElement(".validation-failed");h=this.element.getElement(".warning");}if(i&&(!f||a||i.hasClass("validation-failed")||(f&&!this.options.serial))){var c=i.className.split(" ").some(function(j){return this.getValidator(j);
+},this);var g=[];i.className.split(" ").each(function(j){if(j&&!this.test(j,i)){g.include(j);}},this);d=g.length===0;if(c&&!i.hasClass("warnOnly")){if(d){i.addClass("validation-passed").removeClass("validation-failed");
+this.fireEvent("elementPass",i);}else{i.addClass("validation-failed").removeClass("validation-passed");this.fireEvent("elementFail",[i,g]);}}if(!h){var e=i.className.split(" ").some(function(j){if(j.test("^warn-")||i.hasClass("warnOnly")){return this.getValidator(j.replace(/^warn-/,""));
+}else{return null;}},this);i.removeClass("warning");var b=i.className.split(" ").map(function(j){if(j.test("^warn-")||i.hasClass("warnOnly")){return this.test(j.replace(/^warn-/,""),i,true);
+}else{return null;}},this);}}return d;},test:function(b,d,e){d=document.id(d);if((this.options.ignoreHidden&&!d.isVisible())||(this.options.ignoreDisabled&&d.get("disabled"))){return true;
+}var a=this.getValidator(b);if(d.hasClass("ignoreValidation")){return true;}e=$pick(e,false);if(d.hasClass("warnOnly")){e=true;}var c=a?a.test(d):true;
+if(a&&d.isVisible()){this.fireEvent("elementValidate",[c,d,b,e]);}if(e){return true;}return c;},resetField:function(a){a=document.id(a);if(a){a.className.split(" ").each(function(b){if(b.test("^warn-")){b=b.replace(/^warn-/,"");
}a.removeClass("validation-failed");a.removeClass("warning");a.removeClass("validation-passed");},this);}return this;},stop:function(){this.paused=true;
return this;},start:function(){this.paused=false;return this;},ignoreField:function(a,b){a=document.id(a);if(a){this.enforceField(a);if(b){a.addClass("warnOnly");
}else{a.addClass("ignoreValidation");}}return this;},enforceField:function(a){a=document.id(a);if(a){a.removeClass("warnOnly").removeClass("ignoreValidation");
-}return this;}});FormValidator.getMsg=function(a){return MooTools.lang.get("FormValidator",a);};FormValidator.adders={validators:{},add:function(b,a){this.validators[b]=new InputValidator(b,a);
+}return this;}});Form.Validator.getMsg=function(a){return MooTools.lang.get("Form.Validator",a);};Form.Validator.adders={validators:{},add:function(b,a){this.validators[b]=new InputValidator(b,a);
if(!this.initialize){this.implement({validators:this.validators});}},addAllThese:function(a){$A(a).each(function(b){this.add(b[0],b[1]);},this);},getValidator:function(a){return this.validators[a.split(":")[0]];
-}};$extend(FormValidator,FormValidator.adders);FormValidator.implement(FormValidator.adders);FormValidator.add("IsEmpty",{errorMsg:false,test:function(a){if(a.type=="select-one"||a.type=="select"){return !(a.selectedIndex>=0&&a.options[a.selectedIndex].value!="");
-}else{return((a.get("value")==null)||(a.get("value").length==0));}}});FormValidator.addAllThese([["required",{errorMsg:function(){return FormValidator.getMsg("required");
-},test:function(a){return !FormValidator.getValidator("IsEmpty").test(a);}}],["minLength",{errorMsg:function(a,b){if($type(b.minLength)){return FormValidator.getMsg("minLength").substitute({minLength:b.minLength,length:a.get("value").length});
-}else{return"";}},test:function(a,b){if($type(b.minLength)){return(a.get("value").length>=$pick(b.minLength,0));}else{return true;}}}],["maxLength",{errorMsg:function(a,b){if($type(b.maxLength)){return FormValidator.getMsg("maxLength").substitute({maxLength:b.maxLength,length:a.get("value").length});
-}else{return"";}},test:function(a,b){return(a.get("value").length<=$pick(b.maxLength,10000));}}],["validate-integer",{errorMsg:FormValidator.getMsg.pass("integer"),test:function(a){return FormValidator.getValidator("IsEmpty").test(a)||(/^(-?[1-9]\d*|0)$/).test(a.get("value"));
-}}],["validate-numeric",{errorMsg:FormValidator.getMsg.pass("numeric"),test:function(a){return FormValidator.getValidator("IsEmpty").test(a)||(/^-?(?:0$0(?=\d*\.)|[1-9]|0)\d*(\.\d+)?$/).test(a.get("value"));
-}}],["validate-digits",{errorMsg:FormValidator.getMsg.pass("digits"),test:function(a){return FormValidator.getValidator("IsEmpty").test(a)||(/^[\d() .:\-\+#]+$/.test(a.get("value")));
-}}],["validate-alpha",{errorMsg:FormValidator.getMsg.pass("alpha"),test:function(a){return FormValidator.getValidator("IsEmpty").test(a)||(/^[a-zA-Z]+$/).test(a.get("value"));
-}}],["validate-alphanum",{errorMsg:FormValidator.getMsg.pass("alphanum"),test:function(a){return FormValidator.getValidator("IsEmpty").test(a)||!(/\W/).test(a.get("value"));
-}}],["validate-date",{errorMsg:function(a,b){if(Date.parse){var c=b.dateFormat||"%x";return FormValidator.getMsg("dateSuchAs").substitute({date:new Date().format(c)});
-}else{return FormValidator.getMsg("dateInFormatMDY");}},test:function(a,b){if(FormValidator.getValidator("IsEmpty").test(a)){return true;}var h;if(Date.parse){var g=b.dateFormat||"%x";
-h=Date.parse(a.get("value"));var e=h.format(g);if(e!="invalid date"){a.set("value",e);}return !isNaN(h);}else{var c=/^(\d{2})\/(\d{2})\/(\d{4})$/;if(!c.test(a.get("value"))){return false;
-}h=new Date(a.get("value").replace(c,"$1/$2/$3"));return(parseInt(RegExp.$1,10)==(1+h.getMonth()))&&(parseInt(RegExp.$2,10)==h.getDate())&&(parseInt(RegExp.$3,10)==h.getFullYear());
-}}}],["validate-email",{errorMsg:FormValidator.getMsg.pass("email"),test:function(a){return FormValidator.getValidator("IsEmpty").test(a)||(/^[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,4}$/i).test(a.get("value"));
-}}],["validate-url",{errorMsg:FormValidator.getMsg.pass("url"),test:function(a){return FormValidator.getValidator("IsEmpty").test(a)||(/^(https?|ftp|rmtp|mms):\/\/(([A-Z0-9][A-Z0-9_-]*)(\.[A-Z0-9][A-Z0-9_-]*)+)(:(\d+))?\/?/i).test(a.get("value"));
-}}],["validate-currency-dollar",{errorMsg:FormValidator.getMsg.pass("currencyDollar"),test:function(a){return FormValidator.getValidator("IsEmpty").test(a)||(/^\$?\-?([1-9]{1}[0-9]{0,2}(\,[0-9]{3})*(\.[0-9]{0,2})?|[1-9]{1}\d*(\.[0-9]{0,2})?|0(\.[0-9]{0,2})?|(\.[0-9]{1,2})?)$/).test(a.get("value"));
-}}],["validate-one-required",{errorMsg:FormValidator.getMsg.pass("oneRequired"),test:function(a,b){var c=document.id(b["validate-one-required"])||a.parentNode;
+}};$extend(Form.Validator,Form.Validator.adders);Form.Validator.implement(Form.Validator.adders);Form.Validator.add("IsEmpty",{errorMsg:false,test:function(a){if(a.type=="select-one"||a.type=="select"){return !(a.selectedIndex>=0&&a.options[a.selectedIndex].value!="");
+}else{return((a.get("value")==null)||(a.get("value").length==0));}}});Form.Validator.addAllThese([["required",{errorMsg:function(){return Form.Validator.getMsg("required");
+},test:function(a){return !Form.Validator.getValidator("IsEmpty").test(a);}}],["minLength",{errorMsg:function(a,b){if($type(b.minLength)){return Form.Validator.getMsg("minLength").substitute({minLength:b.minLength,length:a.get("value").length});
+}else{return"";}},test:function(a,b){if($type(b.minLength)){return(a.get("value").length>=$pick(b.minLength,0));}else{return true;}}}],["maxLength",{errorMsg:function(a,b){if($type(b.maxLength)){return Form.Validator.getMsg("maxLength").substitute({maxLength:b.maxLength,length:a.get("value").length});
+}else{return"";}},test:function(a,b){return(a.get("value").length<=$pick(b.maxLength,10000));}}],["validate-integer",{errorMsg:Form.Validator.getMsg.pass("integer"),test:function(a){return Form.Validator.getValidator("IsEmpty").test(a)||(/^(-?[1-9]\d*|0)$/).test(a.get("value"));
+}}],["validate-numeric",{errorMsg:Form.Validator.getMsg.pass("numeric"),test:function(a){return Form.Validator.getValidator("IsEmpty").test(a)||(/^-?(?:0$0(?=\d*\.)|[1-9]|0)\d*(\.\d+)?$/).test(a.get("value"));
+}}],["validate-digits",{errorMsg:Form.Validator.getMsg.pass("digits"),test:function(a){return Form.Validator.getValidator("IsEmpty").test(a)||(/^[\d() .:\-\+#]+$/.test(a.get("value")));
+}}],["validate-alpha",{errorMsg:Form.Validator.getMsg.pass("alpha"),test:function(a){return Form.Validator.getValidator("IsEmpty").test(a)||(/^[a-zA-Z]+$/).test(a.get("value"));
+}}],["validate-alphanum",{errorMsg:Form.Validator.getMsg.pass("alphanum"),test:function(a){return Form.Validator.getValidator("IsEmpty").test(a)||!(/\W/).test(a.get("value"));
+}}],["validate-date",{errorMsg:function(a,b){if(Date.parse){var c=b.dateFormat||"%x";return Form.Validator.getMsg("dateSuchAs").substitute({date:new Date().format(c)});
+}else{return Form.Validator.getMsg("dateInFormatMDY");}},test:function(a,b){if(Form.Validator.getValidator("IsEmpty").test(a)){return true;}var g;if(Date.parse){var f=b.dateFormat||"%x";
+g=Date.parse(a.get("value"));var e=g.format(f);if(e!="invalid date"){a.set("value",e);}return !isNaN(g);}else{var c=/^(\d{2})\/(\d{2})\/(\d{4})$/;if(!c.test(a.get("value"))){return false;
+}g=new Date(a.get("value").replace(c,"$1/$2/$3"));return(parseInt(RegExp.$1,10)==(1+g.getMonth()))&&(parseInt(RegExp.$2,10)==g.getDate())&&(parseInt(RegExp.$3,10)==g.getFullYear());
+}}}],["validate-email",{errorMsg:Form.Validator.getMsg.pass("email"),test:function(a){return Form.Validator.getValidator("IsEmpty").test(a)||(/^[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,4}$/i).test(a.get("value"));
+}}],["validate-url",{errorMsg:Form.Validator.getMsg.pass("url"),test:function(a){return Form.Validator.getValidator("IsEmpty").test(a)||(/^(https?|ftp|rmtp|mms):\/\/(([A-Z0-9][A-Z0-9_-]*)(\.[A-Z0-9][A-Z0-9_-]*)+)(:(\d+))?\/?/i).test(a.get("value"));
+}}],["validate-currency-dollar",{errorMsg:Form.Validator.getMsg.pass("currencyDollar"),test:function(a){return Form.Validator.getValidator("IsEmpty").test(a)||(/^\$?\-?([1-9]{1}[0-9]{0,2}(\,[0-9]{3})*(\.[0-9]{0,2})?|[1-9]{1}\d*(\.[0-9]{0,2})?|0(\.[0-9]{0,2})?|(\.[0-9]{1,2})?)$/).test(a.get("value"));
+}}],["validate-one-required",{errorMsg:Form.Validator.getMsg.pass("oneRequired"),test:function(a,b){var c=document.id(b["validate-one-required"])||a.getParent();
return c.getElements("input").some(function(d){if(["checkbox","radio"].contains(d.get("type"))){return d.get("checked");}return d.get("value");});}}]]);
Element.Properties.validator={set:function(a){var b=this.retrieve("validator");if(b){b.setOptions(a);}return this.store("validator:options");},get:function(a){if(a||!this.retrieve("validator")){if(a||!this.retrieve("validator:options")){this.set("validator",a);
-}this.store("validator",new FormValidator(this,this.retrieve("validator:options")));}return this.retrieve("validator");}};Element.implement({validate:function(a){this.set("validator",a);
-return this.get("validator",a).validate();}});FormValidator.Inline=new Class({Extends:FormValidator,options:{scrollToErrorsOnSubmit:true,scrollFxOptions:{transition:"quad:out",offset:{y:-20}}},initialize:function(b,a){this.parent(b,a);
-this.addEvent("onElementValidate",function(h,g,e,i){var d=this.getValidator(e);if(!h&&d.getError(g)){if(i){g.addClass("warning");}var c=this.makeAdvice(e,g,d.getError(g),i);
-this.insertAdvice(c,g);this.showAdvice(e,g);}else{this.hideAdvice(e,g);}});},makeAdvice:function(d,g,c,h){var e=(h)?this.warningPrefix:this.errorPrefix;
-e+=(this.options.useTitles)?g.title||c:c;var a=(h)?"warning-advice":"validation-advice";var b=this.getAdvice(d,g);if(b){b=b.clone(true,true).set("html",e).replaces(b);
-}else{b=new Element("div",{html:e,styles:{display:"none"},id:"advice-"+d+"-"+this.getFieldId(g)}).addClass(a);}g.store("advice-"+d,b);return b;},getFieldId:function(a){return a.id?a.id:a.id="input_"+a.name;
-},showAdvice:function(b,c){var a=this.getAdvice(b,c);if(a&&!c.retrieve(this.getPropName(b))&&(a.getStyle("display")=="none"||a.getStyle("visiblity")=="hidden"||a.getStyle("opacity")==0)){c.store(this.getPropName(b),true);
+}this.store("validator",new Form.Validator(this,this.retrieve("validator:options")));}return this.retrieve("validator");}};Element.implement({validate:function(a){this.set("validator",a);
+return this.get("validator",a).validate();}});var FormValidator=Form.Validator;Form.Validator.Inline=new Class({Extends:Form.Validator,options:{scrollToErrorsOnSubmit:true,scrollFxOptions:{transition:"quad:out",offset:{y:-20}}},initialize:function(b,a){this.parent(b,a);
+this.addEvent("onElementValidate",function(g,f,e,h){var d=this.getValidator(e);if(!g&&d.getError(f)){if(h){f.addClass("warning");}var c=this.makeAdvice(e,f,d.getError(f),h);
+this.insertAdvice(c,f);this.showAdvice(e,f);}else{this.hideAdvice(e,f);}});},makeAdvice:function(d,f,c,g){var e=(g)?this.warningPrefix:this.errorPrefix;
+e+=(this.options.useTitles)?f.title||c:c;var a=(g)?"warning-advice":"validation-advice";var b=this.getAdvice(d,f);if(b){b=b.set("html",e);}else{b=new Element("div",{html:e,styles:{display:"none"},id:"advice-"+d+"-"+this.getFieldId(f)}).addClass(a);
+}f.store("advice-"+d,b);return b;},getFieldId:function(a){return a.id?a.id:a.id="input_"+a.name;},showAdvice:function(b,c){var a=this.getAdvice(b,c);if(a&&!c.retrieve(this.getPropName(b))&&(a.getStyle("display")=="none"||a.getStyle("visiblity")=="hidden"||a.getStyle("opacity")==0)){c.store(this.getPropName(b),true);
if(a.reveal){a.reveal();}else{a.setStyle("display","block");}}},hideAdvice:function(b,c){var a=this.getAdvice(b,c);if(a&&c.retrieve(this.getPropName(b))){c.store(this.getPropName(b),false);
if(a.dissolve){a.dissolve();}else{a.setStyle("display","none");}}},getPropName:function(a){return"advice"+a;},resetField:function(a){a=document.id(a);if(!a){return this;
}this.parent(a);a.className.split(" ").each(function(b){this.hideAdvice(b,a);},this);return this;},getAllAdviceMessages:function(d,c){var b=[];if(d.hasClass("ignoreValidation")&&!c){return b;
-}var a=d.className.split(" ").some(function(h){var e=h.test("^warn-")||d.hasClass("warnOnly");if(e){h=h.replace(/^warn-/,"");}var g=this.getValidator(h);
-if(!g){return;}b.push({message:g.getError(d),warnOnly:e,passed:g.test(),validator:g});},this);return b;},getAdvice:function(a,b){return b.retrieve("advice-"+a);
+}var a=d.className.split(" ").some(function(g){var e=g.test("^warn-")||d.hasClass("warnOnly");if(e){g=g.replace(/^warn-/,"");}var f=this.getValidator(g);
+if(!f){return;}b.push({message:f.getError(d),warnOnly:e,passed:f.test(),validator:f});},this);return b;},getAdvice:function(a,b){return b.retrieve("advice-"+a);
},insertAdvice:function(a,c){var b=c.get("validatorProps");if(!b.msgPos||!document.id(b.msgPos)){if(c.type.toLowerCase()=="radio"){c.getParent().adopt(a);
-}else{a.inject(document.id(c),"after");}}else{document.id(b.msgPos).grab(a);}},validateField:function(g,e){var a=this.parent(g,e);if(this.options.scrollToErrorsOnSubmit&&!a){var b=document.id(this).getElement(".validation-failed");
+}else{a.inject(document.id(c),"after");}}else{document.id(b.msgPos).grab(a);}},validateField:function(f,e){var a=this.parent(f,e);if(this.options.scrollToErrorsOnSubmit&&!a){var b=document.id(this).getElement(".validation-failed");
var c=document.id(this).getParent();while(c!=document.body&&c.getScrollSize().y==c.getSize().y){c=c.getParent();}var d=c.retrieve("fvScroller");if(!d&&window.Fx&&Fx.Scroll){d=new Fx.Scroll(c,this.options.scrollFxOptions);
-c.store("fvScroller",d);}if(b){if(d){d.toElement(b);}else{c.scrollTo(c.getScroll().x,b.getPosition(c).y-20);}}}return a;}});FormValidator.addAllThese([["validate-enforce-oncheck",{test:function(a,b){if(a.checked){var c=a.getParent("form").retrieve("validator");
+c.store("fvScroller",d);}if(b){if(d){d.toElement(b);}else{c.scrollTo(c.getScroll().x,b.getPosition(c).y-20);}}}return a;}});Form.Validator.addAllThese([["validate-enforce-oncheck",{test:function(a,b){if(a.checked){var c=a.getParent("form").retrieve("validator");
if(!c){return true;}(b.toEnforce||document.id(b.enforceChildrenOf).getElements("input, select, textarea")).map(function(d){c.enforceField(d);});}return true;
}}],["validate-ignore-oncheck",{test:function(a,b){if(a.checked){var c=a.getParent("form").retrieve("validator");if(!c){return true;}(b.toIgnore||document.id(b.ignoreChildrenOf).getElements("input, select, textarea")).each(function(d){c.ignoreField(d);
-c.resetField(d);});}return true;}}],["validate-nospace",{errorMsg:function(){return FormValidator.getMsg("noSpace");},test:function(a,b){return !a.get("value").test(/\s/);
+c.resetField(d);});}return true;}}],["validate-nospace",{errorMsg:function(){return Form.Validator.getMsg("noSpace");},test:function(a,b){return !a.get("value").test(/\s/);
}}],["validate-toggle-oncheck",{test:function(b,c){var d=b.getParent("form").retrieve("validator");if(!d){return true;}var a=c.toToggle||document.id(c.toToggleChildrenOf).getElements("input, select, textarea");
-if(!b.checked){a.each(function(e){d.ignoreField(e);d.resetField(e);});}else{a.each(function(e){d.enforceField(e);});}return true;}}],["validate-reqchk-bynode",{errorMsg:function(){return FormValidator.getMsg("reqChkByNode");
+if(!b.checked){a.each(function(e){d.ignoreField(e);d.resetField(e);});}else{a.each(function(e){d.enforceField(e);});}return true;}}],["validate-reqchk-bynode",{errorMsg:function(){return Form.Validator.getMsg("reqChkByNode");
},test:function(a,b){return(document.id(b.nodeId).getElements(b.selector||"input[type=checkbox], input[type=radio]")).some(function(c){return c.checked;
-});}}],["validate-required-check",{errorMsg:function(a,b){return b.useTitle?a.get("title"):FormValidator.getMsg("requiredChk");},test:function(a,b){return !!a.checked;
-}}],["validate-reqchk-byname",{errorMsg:function(a,b){return FormValidator.getMsg("reqChkByName").substitute({label:b.label||a.get("type")});},test:function(b,d){var c=d.groupName||b.get("name");
-var a=$$(document.getElementsByName(c)).some(function(h,g){return h.checked;});var e=b.getParent("form").retrieve("validator");if(a&&e){e.resetField(b);
-}return a;}}],["validate-match",{errorMsg:function(a,b){return FormValidator.getMsg("match").substitute({matchName:b.matchName||document.id(b.matchInput).get("name")});
-},test:function(b,c){var d=b.get("value");var a=document.id(c.matchInput)&&document.id(c.matchInput).get("value");return d&&a?d==a:true;}}],["validate-after-date",{errorMsg:function(a,b){return FormValidator.getMsg("afterDate").substitute({label:b.afterLabel||(b.afterElement?FormValidator.getMsg("startDate"):FormValidator.getMsg("currentDate"))});
+});}}],["validate-required-check",{errorMsg:function(a,b){return b.useTitle?a.get("title"):Form.Validator.getMsg("requiredChk");},test:function(a,b){return !!a.checked;
+}}],["validate-reqchk-byname",{errorMsg:function(a,b){return Form.Validator.getMsg("reqChkByName").substitute({label:b.label||a.get("type")});},test:function(b,d){var c=d.groupName||b.get("name");
+var a=$$(document.getElementsByName(c)).some(function(g,f){return g.checked;});var e=b.getParent("form").retrieve("validator");if(a&&e){e.resetField(b);
+}return a;}}],["validate-match",{errorMsg:function(a,b){return Form.Validator.getMsg("match").substitute({matchName:b.matchName||document.id(b.matchInput).get("name")});
+},test:function(b,c){var d=b.get("value");var a=document.id(c.matchInput)&&document.id(c.matchInput).get("value");return d&&a?d==a:true;}}],["validate-after-date",{errorMsg:function(a,b){return Form.Validator.getMsg("afterDate").substitute({label:b.afterLabel||(b.afterElement?Form.Validator.getMsg("startDate"):Form.Validator.getMsg("currentDate"))});
},test:function(b,c){var d=document.id(c.afterElement)?Date.parse(document.id(c.afterElement).get("value")):new Date();var a=Date.parse(b.get("value"));
-return a&&d?a>=d:true;}}],["validate-before-date",{errorMsg:function(a,b){return FormValidator.getMsg("beforeDate").substitute({label:b.beforeLabel||(b.beforeElement?FormValidator.getMsg("endDate"):FormValidator.getMsg("currentDate"))});
+return a&&d?a>=d:true;}}],["validate-before-date",{errorMsg:function(a,b){return Form.Validator.getMsg("beforeDate").substitute({label:b.beforeLabel||(b.beforeElement?Form.Validator.getMsg("endDate"):Form.Validator.getMsg("currentDate"))});
},test:function(b,c){var d=Date.parse(b.get("value"));var a=document.id(c.beforeElement)?Date.parse(document.id(c.beforeElement).get("value")):new Date();
-return a&&d?a>=d:true;}}],["validate-custom-required",{errorMsg:function(){return FormValidator.getMsg("required");},test:function(a,b){return a.get("value")!=b.emptyValue;
-}}],["validate-same-month",{errorMsg:function(a,b){var c=document.id(b.sameMonthAs)&&document.id(b.sameMonthAs).get("value");var d=a.get("value");if(d!=""){return FormValidator.getMsg(c?"sameMonth":"startMonth");
+return a&&d?a>=d:true;}}],["validate-custom-required",{errorMsg:function(){return Form.Validator.getMsg("required");},test:function(a,b){return a.get("value")!=b.emptyValue;
+}}],["validate-same-month",{errorMsg:function(a,b){var c=document.id(b.sameMonthAs)&&document.id(b.sameMonthAs).get("value");var d=a.get("value");if(d!=""){return Form.Validator.getMsg(c?"sameMonth":"startMonth");
}},test:function(a,b){var d=Date.parse(a.get("value"));var c=Date.parse(document.id(b.sameMonthAs)&&document.id(b.sameMonthAs).get("value"));return d&&c?d.format("%B")==c.format("%B"):true;
-}}]]);var OverText=new Class({Implements:[Options,Events,Class.Occlude],Binds:["reposition","assert","focus"],options:{element:"label",positionOptions:{position:"upperLeft",edge:"upperLeft",offset:{x:4,y:2}},poll:false,pollInterval:250},property:"OverText",initialize:function(b,a){this.element=document.id(b);
+}}],["validate-cc-num",{errorMsg:function(a){var b=a.get("value").replace(/[^0-9]/g,"");return Form.Validator.getMsg("creditcard").substitute({length:b.length});
+},test:function(c){if(Form.Validator.getValidator("IsEmpty").test(c)){return true;}var g=c.get("value");g=g.replace(/[^0-9]/g,"");var a=false;if(g.test(/^4[0-9]{12}([0-9]{3})?$/)){a="Visa";
+}else{if(g.test(/^5[1-5]([0-9]{14})$/)){a="Master Card";}else{if(g.test(/^3[47][0-9]{13}$/)){a="American Express";}else{if(g.test(/^6011[0-9]{12}$/)){a="Discover";
+}}}}if(a){var d=0;var e=0;for(var b=g.length-1;b>=0;--b){e=g.charAt(b).toInt();if(e==0){continue;}if((g.length-b)%2==0){e+=e;}if(e>9){e=e.toString().charAt(0).toInt()+e.toString().charAt(1).toInt();
+}d+=e;}if((d%10)==0){return true;}}var f="";while(g!=""){f+=" "+g.substr(0,4);g=g.substr(4);}c.getParent("form").retrieve("validator").ignoreField(c);c.set("value",f.clean());
+c.getParent("form").retrieve("validator").enforceField(c);return false;}}]]);var OverText=new Class({Implements:[Options,Events,Class.Occlude],Binds:["reposition","assert","focus","hide"],options:{element:"label",positionOptions:{position:"upperLeft",edge:"upperLeft",offset:{x:4,y:2}},poll:false,pollInterval:250,wrap:false},property:"OverText",initialize:function(b,a){this.element=document.id(b);
if(this.occlude()){return this.occluded;}this.setOptions(a);this.attach(this.element);OverText.instances.push(this);if(this.options.poll){this.poll();}return this;
},toElement:function(){return this.element;},attach:function(){var a=this.options.textOverride||this.element.get("alt")||this.element.get("title");if(!a){return;
-}this.text=new Element(this.options.element,{"class":"overTxtLabel",styles:{lineHeight:"normal",position:"absolute"},html:a,events:{click:this.hide.pass(true,this)}}).inject(this.element,"after");
-if(this.options.element=="label"){this.text.set("for",this.element.get("id"));}this.element.addEvents({focus:this.focus,blur:this.assert,change:this.assert}).store("OverTextDiv",this.text);
-window.addEvent("resize",this.reposition.bind(this));this.assert(true);this.reposition();},startPolling:function(){this.pollingPaused=false;return this.poll();
-},poll:function(a){if(this.poller&&!a){return this;}var b=function(){if(!this.pollingPaused){this.assert(true);}}.bind(this);if(a){$clear(this.poller);
-}else{this.poller=b.periodical(this.options.pollInterval,this);}return this;},stopPolling:function(){this.pollingPaused=true;return this.poll(true);},focus:function(){if(!this.text.isDisplayed()||this.element.get("disabled")){return;
-}this.hide();},hide:function(b){if(this.text.isDisplayed()&&!this.element.get("disabled")){this.text.hide();this.fireEvent("textHide",[this.text,this.element]);
-this.pollingPaused=true;try{if(!b){this.element.fireEvent("focus").focus();}}catch(a){}}return this;},show:function(){if(!this.text.isDisplayed()){this.text.show();
+}this.text=new Element(this.options.element,{"class":"overTxtLabel",styles:{lineHeight:"normal",position:"absolute",cursor:"text"},html:a,events:{click:this.hide.pass(this.options.element=="label",this)}}).inject(this.element,"after");
+if(this.options.element=="label"){if(!this.element.get("id")){this.element.set("id","input_"+new Date().getTime());}this.text.set("for",this.element.get("id"));
+}if(this.options.wrap){this.textHolder=new Element("div",{styles:{lineHeight:"normal",position:"relative"},"class":"overTxtWrapper"}).adopt(this.text).inject(this.element,"before");
+}this.element.addEvents({focus:this.focus,blur:this.assert,change:this.assert}).store("OverTextDiv",this.text);window.addEvent("resize",this.reposition.bind(this));
+this.assert(true);this.reposition();},wrap:function(){if(this.options.element=="label"){if(!this.element.get("id")){this.element.set("id","input_"+new Date().getTime());
+}this.text.set("for",this.element.get("id"));}},startPolling:function(){this.pollingPaused=false;return this.poll();},poll:function(a){if(this.poller&&!a){return this;
+}var b=function(){if(!this.pollingPaused){this.assert(true);}}.bind(this);if(a){$clear(this.poller);}else{this.poller=b.periodical(this.options.pollInterval,this);
+}return this;},stopPolling:function(){this.pollingPaused=true;return this.poll(true);},focus:function(){if(this.text&&(!this.text.isDisplayed()||this.element.get("disabled"))){return;
+}this.hide();},hide:function(c,a){if(this.text&&(this.text.isDisplayed()&&(!this.element.get("disabled")||a))){this.text.hide();this.fireEvent("textHide",[this.text,this.element]);
+this.pollingPaused=true;if(!c){try{this.element.fireEvent("focus");this.element.focus();}catch(b){}}}return this;},show:function(){if(this.text&&!this.text.isDisplayed()){this.text.show();
this.reposition();this.fireEvent("textShow",[this.text,this.element]);this.pollingPaused=false;}return this;},assert:function(a){this[this.test()?"show":"hide"](a);
-},test:function(){var a=this.element.get("value");return !a;},reposition:function(){this.assert(true);if(!this.element.getParent()||!this.element.offsetHeight){return this.stopPolling().hide();
-}if(this.test()){this.text.position($merge(this.options.positionOptions,{relativeTo:this.element}));}return this;}});OverText.instances=[];OverText.update=function(){return OverText.instances.map(function(a){if(a.element&&a.text){return a.reposition();
-}return null;});};if(window.Fx&&Fx.Reveal){Fx.Reveal.implement({hideInputs:Browser.Engine.trident?"select, input, textarea, object, embed, .overTxtLabel":false});
-}Fx.Elements=new Class({Extends:Fx.CSS,initialize:function(b,a){this.elements=this.subject=$$(b);this.parent(a);},compute:function(h,j,k){var c={};for(var d in h){var a=h[d],e=j[d],g=c[d]={};
-for(var b in a){g[b]=this.parent(a[b],e[b],k);}}return c;},set:function(b){for(var c in b){var a=b[c];for(var d in a){this.render(this.elements[c],d,a[d],this.options.unit);
-}}return this;},start:function(c){if(!this.check(c)){return this;}var j={},k={};for(var d in c){var g=c[d],a=j[d]={},h=k[d]={};for(var b in g){var e=this.prepare(this.elements[d],b,g[b]);
-a[b]=e.from;h[b]=e.to;}}return this.parent(j,k);}});var Accordion=Fx.Accordion=new Class({Extends:Fx.Elements,options:{display:0,show:false,height:true,width:false,opacity:true,fixedHeight:false,fixedWidth:false,wait:false,alwaysHide:false,trigger:"click",initialDisplayFx:true},initialize:function(){var c=Array.link(arguments,{container:Element.type,options:Object.type,togglers:$defined,elements:$defined});
-this.parent(c.elements,c.options);this.togglers=$$(c.togglers);this.container=document.id(c.container);this.previous=-1;if(this.options.alwaysHide){this.options.wait=true;
+},test:function(){var a=this.element.get("value");return !a;},reposition:function(){this.assert(true);if(!this.element.isVisible()){return this.stopPolling().hide();
+}if(this.text&&this.test()){this.text.position($merge(this.options.positionOptions,{relativeTo:this.element}));}return this;}});OverText.instances=[];$extend(OverText,{each:function(a){return OverText.instances.map(function(c,b){if(c.element&&c.text){return a.apply(OverText,[c,b]);
+}return null;});},update:function(){return OverText.each(function(a){return a.reposition();});},hideAll:function(){return OverText.each(function(a){return a.hide(true,true);
+});},showAll:function(){return OverText.each(function(a){return a.show();});}});if(window.Fx&&Fx.Reveal){Fx.Reveal.implement({hideInputs:Browser.Engine.trident?"select, input, textarea, object, embed, .overTxtLabel":false});
+}Fx.Elements=new Class({Extends:Fx.CSS,initialize:function(b,a){this.elements=this.subject=$$(b);this.parent(a);},compute:function(g,h,j){var c={};for(var d in g){var a=g[d],e=h[d],f=c[d]={};
+for(var b in a){f[b]=this.parent(a[b],e[b],j);}}return c;},set:function(b){for(var c in b){var a=b[c];for(var d in a){this.render(this.elements[c],d,a[d],this.options.unit);
+}}return this;},start:function(c){if(!this.check(c)){return this;}var h={},j={};for(var d in c){var f=c[d],a=h[d]={},g=j[d]={};for(var b in f){var e=this.prepare(this.elements[d],b,f[b]);
+a[b]=e.from;g[b]=e.to;}}return this.parent(h,j);}});Fx.Accordion=new Class({Extends:Fx.Elements,options:{display:0,show:false,height:true,width:false,opacity:true,alwaysHide:false,trigger:"click",initialDisplayFx:true,returnHeightToAuto:true},initialize:function(){var c=Array.link(arguments,{container:Element.type,options:Object.type,togglers:$defined,elements:$defined});
+this.parent(c.elements,c.options);this.togglers=$$(c.togglers);this.previous=-1;this.internalChain=new Chain();if(this.options.alwaysHide){this.options.wait=true;
}if($chk(this.options.show)){this.options.display=false;this.previous=this.options.show;}if(this.options.start){this.options.display=false;this.options.show=false;
}this.effects={};if(this.options.opacity){this.effects.opacity="fullOpacity";}if(this.options.width){this.effects.width=this.options.fixedWidth?"fullWidth":"offsetWidth";
}if(this.options.height){this.effects.height=this.options.fixedHeight?"fullHeight":"scrollHeight";}for(var b=0,a=this.togglers.length;b<a;b++){this.addSection(this.togglers[b],this.elements[b]);
-}this.elements.each(function(e,d){if(this.options.show===d){this.fireEvent("active",[this.togglers[d],e]);}else{for(var g in this.effects){e.setStyle(g,0);
-}}},this);if($chk(this.options.display)){this.display(this.options.display,this.options.initialDisplayFx);}},addSection:function(d,b){d=document.id(d);
-b=document.id(b);var e=this.togglers.contains(d);this.togglers.include(d);this.elements.include(b);var a=this.togglers.indexOf(d);d.addEvent(this.options.trigger,this.display.bind(this,a));
-if(this.options.height){b.setStyles({"padding-top":0,"border-top":"none","padding-bottom":0,"border-bottom":"none"});}if(this.options.width){b.setStyles({"padding-left":0,"border-left":"none","padding-right":0,"border-right":"none"});
-}b.fullOpacity=1;if(this.options.fixedWidth){b.fullWidth=this.options.fixedWidth;}if(this.options.fixedHeight){b.fullHeight=this.options.fixedHeight;}b.setStyle("overflow","hidden");
-if(!e){for(var c in this.effects){b.setStyle(c,0);}}return this;},display:function(a,b){b=$pick(b,true);a=($type(a)=="element")?this.elements.indexOf(a):a;
-if((this.timer&&this.options.wait)||(a===this.previous&&!this.options.alwaysHide)){return this;}this.previous=a;var c={};this.elements.each(function(g,e){c[e]={};
-var d=(e!=a)||(this.options.alwaysHide&&(g.offsetHeight>0));this.fireEvent(d?"background":"active",[this.togglers[e],g]);for(var h in this.effects){c[e][h]=d?0:g[this.effects[h]];
-}},this);return b?this.start(c):this.set(c);}});Fx.Move=new Class({Extends:Fx.Morph,options:{relativeTo:document.body,position:"center",edge:false,offset:{x:0,y:0}},start:function(a){return this.parent(this.element.position($merge(this.options,a,{returnPos:true})));
+}this.elements.each(function(e,d){if(this.options.show===d){this.fireEvent("active",[this.togglers[d],e]);}else{for(var f in this.effects){e.setStyle(f,0);
+}}},this);if($chk(this.options.display)||this.options.initialDisplayFx===false){this.display(this.options.display,this.options.initialDisplayFx);}if(this.options.fixedHeight!==false){this.options.returnHeightToAuto=false;
+}this.addEvent("complete",this.internalChain.callChain.bind(this.internalChain));},addSection:function(e,c){e=document.id(e);c=document.id(c);var f=this.togglers.contains(e);
+this.togglers.include(e);this.elements.include(c);var a=this.togglers.indexOf(e);var b=this.display.bind(this,a);e.store("accordion:display",b);e.addEvent(this.options.trigger,b);
+if(this.options.height){c.setStyles({"padding-top":0,"border-top":"none","padding-bottom":0,"border-bottom":"none"});}if(this.options.width){c.setStyles({"padding-left":0,"border-left":"none","padding-right":0,"border-right":"none"});
+}c.fullOpacity=1;if(this.options.fixedWidth){c.fullWidth=this.options.fixedWidth;}if(this.options.fixedHeight){c.fullHeight=this.options.fixedHeight;}c.setStyle("overflow","hidden");
+if(!f){for(var d in this.effects){c.setStyle(d,0);}}return this;},detach:function(){this.togglers.each(function(a){a.removeEvent(this.options.trigger,a.retrieve("accordion:display"));
+},this);},display:function(a,b){if(!this.check(a,b)){return this;}b=$pick(b,true);if(this.options.returnHeightToAuto){var d=this.elements[this.previous];
+if(d&&!this.selfHidden){for(var c in this.effects){d.setStyle(c,d[this.effects[c]]);}}}a=($type(a)=="element")?this.elements.indexOf(a):a;if((this.timer&&this.options.wait)||(a===this.previous&&!this.options.alwaysHide)){return this;
+}this.previous=a;var e={};this.elements.each(function(h,g){e[g]={};var f;if(g!=a){f=true;}else{if(this.options.alwaysHide&&((h.offsetHeight>0&&this.options.height)||h.offsetWidth>0&&this.options.width)){f=true;
+this.selfHidden=true;}}this.fireEvent(f?"background":"active",[this.togglers[g],h]);for(var j in this.effects){e[g][j]=f?0:h[this.effects[j]];}},this);
+this.internalChain.chain(function(){if(this.options.returnHeightToAuto&&!this.selfHidden){var f=this.elements[a];if(f){f.setStyle("height","auto");}}}.bind(this));
+return b?this.start(e):this.set(e);}});var Accordion=new Class({Extends:Fx.Accordion,initialize:function(){this.parent.apply(this,arguments);var a=Array.link(arguments,{container:Element.type});
+this.container=a.container;},addSection:function(c,b,e){c=document.id(c);b=document.id(b);var d=this.togglers.contains(c);var a=this.togglers.length;if(a&&(!d||e)){e=$pick(e,a-1);
+c.inject(this.togglers[e],"before");b.inject(c,"after");}else{if(this.container&&!d){c.inject(this.container);b.inject(this.container);}}return this.parent.apply(this,arguments);
+}});Fx.Move=new Class({Extends:Fx.Morph,options:{relativeTo:document.body,position:"center",edge:false,offset:{x:0,y:0}},start:function(a){return this.parent(this.element.position($merge(this.options,a,{returnPos:true})));
}});Element.Properties.move={set:function(a){var b=this.retrieve("move");if(b){b.cancel();}return this.eliminate("move").store("move:options",$extend({link:"cancel"},a));
},get:function(a){if(a||!this.retrieve("move")){if(a||!this.retrieve("move:options")){this.set("move",a);}this.store("move",new Fx.Move(this,this.retrieve("move:options")));
-}return this.retrieve("move");}};Element.implement({move:function(a){this.get("move").start(a);return this;}});Fx.Reveal=new Class({Extends:Fx.Morph,options:{styles:["padding","border","margin"],transitionOpacity:!Browser.Engine.trident4,mode:"vertical",display:"block",hideInputs:Browser.Engine.trident?"select, input, textarea, object, embed":false},dissolve:function(){try{if(!this.hiding&&!this.showing){if(this.element.getStyle("display")!="none"){this.hiding=true;
-this.showing=false;this.hidden=true;var d=this.element.getComputedSize({styles:this.options.styles,mode:this.options.mode});var h=(this.element.style.height===""||this.element.style.height=="auto");
-this.element.setStyle("display","block");if(this.options.transitionOpacity){d.opacity=1;}var b={};$each(d,function(i,e){b[e]=[i,0];},this);var g=this.element.getStyle("overflow");
+}return this.retrieve("move");}};Element.implement({move:function(a){this.get("move").start(a);return this;}});Fx.Reveal=new Class({Extends:Fx.Morph,options:{link:"cancel",styles:["padding","border","margin"],transitionOpacity:!Browser.Engine.trident4,mode:"vertical",display:"block",hideInputs:Browser.Engine.trident?"select, input, textarea, object, embed":false},dissolve:function(){try{if(!this.hiding&&!this.showing){if(this.element.getStyle("display")!="none"){this.hiding=true;
+this.showing=false;this.hidden=true;this.cssText=this.element.style.cssText;var d=this.element.getComputedSize({styles:this.options.styles,mode:this.options.mode});
+this.element.setStyle("display",this.options.display);if(this.options.transitionOpacity){d.opacity=1;}var b={};$each(d,function(f,e){b[e]=[f,0];},this);
this.element.setStyle("overflow","hidden");var a=this.options.hideInputs?this.element.getElements(this.options.hideInputs):null;this.$chain.unshift(function(){if(this.hidden){this.hiding=false;
-$each(d,function(i,e){d[e]=i;},this);this.element.setStyles($merge({display:"none",overflow:g},d));if(h){if(["vertical","both"].contains(this.options.mode)){this.element.style.height="";
-}if(["width","both"].contains(this.options.mode)){this.element.style.width="";}}if(a){a.setStyle("visibility","visible");}}this.fireEvent("hide",this.element);
-this.callChain();}.bind(this));if(a){a.setStyle("visibility","hidden");}this.start(b);}else{this.callChain.delay(10,this);this.fireEvent("complete",this.element);
-this.fireEvent("hide",this.element);}}else{if(this.options.link=="chain"){this.chain(this.dissolve.bind(this));}else{if(this.options.link=="cancel"&&!this.hiding){this.cancel();
-this.dissolve();}}}}catch(c){this.hiding=false;this.element.setStyle("display","none");this.callChain.delay(10,this);this.fireEvent("complete",this.element);
-this.fireEvent("hide",this.element);}return this;},reveal:function(){try{if(!this.showing&&!this.hiding){if(this.element.getStyle("display")=="none"||this.element.getStyle("visiblity")=="hidden"||this.element.getStyle("opacity")==0){this.showing=true;
-this.hiding=false;this.hidden=false;var h,d;this.element.measure(function(){h=(this.element.style.height===""||this.element.style.height=="auto");d=this.element.getComputedSize({styles:this.options.styles,mode:this.options.mode});
-}.bind(this));$each(d,function(i,e){d[e]=i;});if($chk(this.options.heightOverride)){d.height=this.options.heightOverride.toInt();}if($chk(this.options.widthOverride)){d.width=this.options.widthOverride.toInt();
-}if(this.options.transitionOpacity){this.element.setStyle("opacity",0);d.opacity=1;}var b={height:0,display:this.options.display};$each(d,function(i,e){b[e]=0;
-});var g=this.element.getStyle("overflow");this.element.setStyles($merge(b,{overflow:"hidden"}));var a=this.options.hideInputs?this.element.getElements(this.options.hideInputs):null;
-if(a){a.setStyle("visibility","hidden");}this.start(d);this.$chain.unshift(function(){this.element.setStyle("overflow",g);if(!this.options.heightOverride&&h){if(["vertical","both"].contains(this.options.mode)){this.element.style.height="";
-}if(["width","both"].contains(this.options.mode)){this.element.style.width="";}}if(!this.hidden){this.showing=false;}if(a){a.setStyle("visibility","visible");
-}this.callChain();this.fireEvent("show",this.element);}.bind(this));}else{this.callChain();this.fireEvent("complete",this.element);this.fireEvent("show",this.element);
-}}else{if(this.options.link=="chain"){this.chain(this.reveal.bind(this));}else{if(this.options.link=="cancel"&&!this.showing){this.cancel();this.reveal();
-}}}}catch(c){this.element.setStyles({display:this.options.display,visiblity:"visible",opacity:1});this.showing=false;this.callChain.delay(10,this);this.fireEvent("complete",this.element);
-this.fireEvent("show",this.element);}return this;},toggle:function(){if(this.element.getStyle("display")=="none"||this.element.getStyle("visiblity")=="hidden"||this.element.getStyle("opacity")==0){this.reveal();
-}else{this.dissolve();}return this;}});Element.Properties.reveal={set:function(a){var b=this.retrieve("reveal");if(b){b.cancel();}return this.eliminate("reveal").store("reveal:options",$extend({link:"cancel"},a));
+$each(d,function(f,e){d[e]=f;},this);this.element.style.cssText=this.cssText;this.element.setStyle("display","none");if(a){a.setStyle("visibility","visible");
+}}this.fireEvent("hide",this.element);this.callChain();}.bind(this));if(a){a.setStyle("visibility","hidden");}this.start(b);}else{this.callChain.delay(10,this);
+this.fireEvent("complete",this.element);this.fireEvent("hide",this.element);}}else{if(this.options.link=="chain"){this.chain(this.dissolve.bind(this));
+}else{if(this.options.link=="cancel"&&!this.hiding){this.cancel();this.dissolve();}}}}catch(c){this.hiding=false;this.element.setStyle("display","none");
+this.callChain.delay(10,this);this.fireEvent("complete",this.element);this.fireEvent("hide",this.element);}return this;},reveal:function(){try{if(!this.showing&&!this.hiding){if(this.element.getStyle("display")=="none"||this.element.getStyle("visiblity")=="hidden"||this.element.getStyle("opacity")==0){this.showing=true;
+this.hiding=this.hidden=false;var d;this.cssText=this.element.style.cssText;this.element.measure(function(){d=this.element.getComputedSize({styles:this.options.styles,mode:this.options.mode});
+}.bind(this));$each(d,function(f,e){d[e]=f;});if($chk(this.options.heightOverride)){d.height=this.options.heightOverride.toInt();}if($chk(this.options.widthOverride)){d.width=this.options.widthOverride.toInt();
+}if(this.options.transitionOpacity){this.element.setStyle("opacity",0);d.opacity=1;}var b={height:0,display:this.options.display};$each(d,function(f,e){b[e]=0;
+});this.element.setStyles($merge(b,{overflow:"hidden"}));var a=this.options.hideInputs?this.element.getElements(this.options.hideInputs):null;if(a){a.setStyle("visibility","hidden");
+}this.start(d);this.$chain.unshift(function(){this.element.style.cssText=this.cssText;this.element.setStyle("display",this.options.display);if(!this.hidden){this.showing=false;
+}if(a){a.setStyle("visibility","visible");}this.callChain();this.fireEvent("show",this.element);}.bind(this));}else{this.callChain();this.fireEvent("complete",this.element);
+this.fireEvent("show",this.element);}}else{if(this.options.link=="chain"){this.chain(this.reveal.bind(this));}else{if(this.options.link=="cancel"&&!this.showing){this.cancel();
+this.reveal();}}}}catch(c){this.element.setStyles({display:this.options.display,visiblity:"visible",opacity:1});this.showing=false;this.callChain.delay(10,this);
+this.fireEvent("complete",this.element);this.fireEvent("show",this.element);}return this;},toggle:function(){if(this.element.getStyle("display")=="none"||this.element.getStyle("visiblity")=="hidden"||this.element.getStyle("opacity")==0){this.reveal();
+}else{this.dissolve();}return this;},cancel:function(){this.parent.apply(this,arguments);this.element.style.cssText=this.cssText;this.hidding=false;this.showing=false;
+}});Element.Properties.reveal={set:function(a){var b=this.retrieve("reveal");if(b){b.cancel();}return this.eliminate("reveal").store("reveal:options",a);
},get:function(a){if(a||!this.retrieve("reveal")){if(a||!this.retrieve("reveal:options")){this.set("reveal",a);}this.store("reveal",new Fx.Reveal(this,this.retrieve("reveal:options")));
}return this.retrieve("reveal");}};Element.Properties.dissolve=Element.Properties.reveal;Element.implement({reveal:function(a){this.get("reveal",a).reveal();
return this;},dissolve:function(a){this.get("reveal",a).dissolve();return this;},nix:function(){var a=Array.link(arguments,{destroy:Boolean.type,options:Object.type});
@@ -284,90 +307,96 @@
var a=this.get("reveal",b.options);a.reveal().chain(function(){(function(){a.dissolve();}).delay(b.duration||2000);});}});Fx.Scroll=new Class({Extends:Fx,options:{offset:{x:0,y:0},wheelStops:true},initialize:function(b,a){this.element=this.subject=document.id(b);
this.parent(a);var d=this.cancel.bind(this,false);if($type(this.element)!="element"){this.element=document.id(this.element.getDocument().body);}var c=this.element;
if(this.options.wheelStops){this.addEvent("start",function(){c.addEvent("mousewheel",d);},true);this.addEvent("complete",function(){c.removeEvent("mousewheel",d);
-},true);}},set:function(){var a=Array.flatten(arguments);this.element.scrollTo(a[0],a[1]);},compute:function(c,b,a){return[0,1].map(function(d){return Fx.compute(c[d],b[d],a);
-});},start:function(c,i){if(!this.check(c,i)){return this;}var e=this.element.getSize(),g=this.element.getScrollSize();var b=this.element.getScroll(),d={x:c,y:i};
-for(var h in d){var a=g[h]-e[h];if($chk(d[h])){d[h]=($type(d[h])=="number")?d[h].limit(0,a):a;}else{d[h]=b[h];}d[h]+=this.options.offset[h];}return this.parent([b.x,b.y],[d.x,d.y]);
+},true);}},set:function(){var a=Array.flatten(arguments);if(Browser.Engine.gecko){a=[Math.round(a[0]),Math.round(a[1])];}this.element.scrollTo(a[0],a[1]);
+},compute:function(c,b,a){return[0,1].map(function(d){return Fx.compute(c[d],b[d],a);});},start:function(c,g){if(!this.check(c,g)){return this;}var e=this.element.getScrollSize(),b=this.element.getScroll(),d={x:c,y:g};
+for(var f in d){var a=e[f];if($chk(d[f])){d[f]=($type(d[f])=="number")?d[f]:a;}else{d[f]=b[f];}d[f]+=this.options.offset[f];}return this.parent([b.x,b.y],[d.x,d.y]);
},toTop:function(){return this.start(false,0);},toLeft:function(){return this.start(0,false);},toRight:function(){return this.start("right",false);},toBottom:function(){return this.start(false,"bottom");
},toElement:function(b){var a=document.id(b).getPosition(this.element);return this.start(a.x,a.y);},scrollIntoView:function(c,e,d){e=e?$splat(e):["x","y"];
-var i={};c=document.id(c);var g=c.getPosition(this.element);var j=c.getSize();var h=this.element.getScroll();var a=this.element.getSize();var b={x:g.x+j.x,y:g.y+j.y};
-["x","y"].each(function(k){if(e.contains(k)){if(b[k]>h[k]+a[k]){i[k]=b[k]-a[k];}if(g[k]<h[k]){i[k]=g[k];}}if(i[k]==null){i[k]=h[k];}if(d&&d[k]){i[k]=i[k]+d[k];
-}},this);if(i.x!=h.x||i.y!=h.y){this.start(i.x,i.y);}return this;}});Fx.Slide=new Class({Extends:Fx,options:{mode:"vertical"},initialize:function(b,a){this.addEvent("complete",function(){this.open=(this.wrapper["offset"+this.layout.capitalize()]!=0);
-if(this.open&&Browser.Engine.webkit419){this.element.dispose().inject(this.wrapper);}},true);this.element=this.subject=document.id(b);this.parent(a);var c=this.element.retrieve("wrapper");
-this.wrapper=c||new Element("div",{styles:$extend(this.element.getStyles("margin","position"),{overflow:"hidden"})}).wraps(this.element);this.element.store("wrapper",this.wrapper).setStyle("margin",0);
+var h={};c=document.id(c);var f=c.getPosition(this.element);var i=c.getSize();var g=this.element.getScroll();var a=this.element.getSize();var b={x:f.x+i.x,y:f.y+i.y};
+["x","y"].each(function(j){if(e.contains(j)){if(b[j]>g[j]+a[j]){h[j]=b[j]-a[j];}if(f[j]<g[j]){h[j]=f[j];}}if(h[j]==null){h[j]=g[j];}if(d&&d[j]){h[j]=h[j]+d[j];
+}},this);if(h.x!=g.x||h.y!=g.y){this.start(h.x,h.y);}return this;},scrollToCenter:function(c,e,d){e=e?$splat(e):["x","y"];c=$(c);var h={},f=c.getPosition(this.element),i=c.getSize(),g=this.element.getScroll(),a=this.element.getSize(),b={x:f.x+i.x,y:f.y+i.y};
+["x","y"].each(function(j){if(e.contains(j)){h[j]=f[j]-(a[j]-i[j])/2;}if(h[j]==null){h[j]=g[j];}if(d&&d[j]){h[j]=h[j]+d[j];}},this);if(h.x!=g.x||h.y!=g.y){this.start(h.x,h.y);
+}return this;}});Fx.Slide=new Class({Extends:Fx,options:{mode:"vertical",wrapper:false,hideOverflow:true},initialize:function(b,a){this.addEvent("complete",function(){this.open=(this.wrapper["offset"+this.layout.capitalize()]!=0);
+if(this.open){this.wrapper.setStyle("height","");}if(this.open&&Browser.Engine.webkit419){this.element.dispose().inject(this.wrapper);}},true);this.element=this.subject=document.id(b);
+this.parent(a);var d=this.element.retrieve("wrapper");var c=this.element.getStyles("margin","position","overflow");if(this.options.hideOverflow){c=$extend(c,{overflow:"hidden"});
+}if(this.options.wrapper){d=document.id(this.options.wrapper).setStyles(c);}this.wrapper=d||new Element("div",{styles:c}).wraps(this.element);this.element.store("wrapper",this.wrapper).setStyle("margin",0);
this.now=[];this.open=true;},vertical:function(){this.margin="margin-top";this.layout="height";this.offset=this.element.offsetHeight;},horizontal:function(){this.margin="margin-left";
this.layout="width";this.offset=this.element.offsetWidth;},set:function(a){this.element.setStyle(this.margin,a[0]);this.wrapper.setStyle(this.layout,a[1]);
return this;},compute:function(c,b,a){return[0,1].map(function(d){return Fx.compute(c[d],b[d],a);});},start:function(b,e){if(!this.check(b,e)){return this;
}this[e||this.options.mode]();var d=this.element.getStyle(this.margin).toInt();var c=this.wrapper.getStyle(this.layout).toInt();var a=[[d,c],[0,this.offset]];
-var h=[[d,c],[-this.offset,0]];var g;switch(b){case"in":g=a;break;case"out":g=h;break;case"toggle":g=(c==0)?a:h;}return this.parent(g[0],g[1]);},slideIn:function(a){return this.start("in",a);
+var g=[[d,c],[-this.offset,0]];var f;switch(b){case"in":f=a;break;case"out":f=g;break;case"toggle":f=(c==0)?a:g;}return this.parent(f[0],f[1]);},slideIn:function(a){return this.start("in",a);
},slideOut:function(a){return this.start("out",a);},hide:function(a){this[a||this.options.mode]();this.open=false;return this.set([-this.offset,0]);},show:function(a){this[a||this.options.mode]();
this.open=true;return this.set([0,this.offset]);},toggle:function(a){return this.start("toggle",a);}});Element.Properties.slide={set:function(b){var a=this.retrieve("slide");
if(a){a.cancel();}return this.eliminate("slide").store("slide:options",$extend({link:"cancel"},b));},get:function(a){if(a||!this.retrieve("slide")){if(a||!this.retrieve("slide:options")){this.set("slide",a);
}this.store("slide",new Fx.Slide(this,this.retrieve("slide:options")));}return this.retrieve("slide");}};Element.implement({slide:function(d,e){d=d||"toggle";
var b=this.get("slide"),a;switch(d){case"hide":b.hide(e);break;case"show":b.show(e);break;case"toggle":var c=this.retrieve("slide:flag",b.open);b[c?"slideOut":"slideIn"](e);
this.store("slide:flag",!c);a=true;break;default:b.start(d,e);}if(!a){this.eliminate("slide:flag");}return this;}});var SmoothScroll=Fx.SmoothScroll=new Class({Extends:Fx.Scroll,initialize:function(b,c){c=c||document;
-this.doc=c.getDocument();var d=c.getWindow();this.parent(this.doc,b);this.links=this.options.links?$$(this.options.links):$$(this.doc.links);var a=d.location.href.match(/^[^#]*/)[0]+"#";
-this.links.each(function(g){if(g.href.indexOf(a)!=0){return;}var e=g.href.substr(a.length);if(e){this.useLink(g,e);}},this);if(!Browser.Engine.webkit419){this.addEvent("complete",function(){d.location.hash=this.anchor;
+this.doc=c.getDocument();var d=c.getWindow();this.parent(this.doc,b);this.links=$$(this.options.links||this.doc.links);var a=d.location.href.match(/^[^#]*/)[0]+"#";
+this.links.each(function(f){if(f.href.indexOf(a)!=0){return;}var e=f.href.substr(a.length);if(e){this.useLink(f,e);}},this);if(!Browser.Engine.webkit419){this.addEvent("complete",function(){d.location.hash=this.anchor;
},true);}},useLink:function(c,a){var b;c.addEvent("click",function(d){if(b!==false&&!b){b=document.id(a)||this.doc.getElement("a[name="+a+"]");}if(b){d.preventDefault();
-this.anchor=a;this.toElement(b);c.blur();}}.bind(this));}});Fx.Sort=new Class({Extends:Fx.Elements,options:{mode:"vertical"},initialize:function(b,a){this.parent(b,a);
+this.anchor=a;this.toElement(b).chain(function(){this.fireEvent("scrolledTo",[c,b]);}.bind(this));c.blur();}}.bind(this));}});Fx.Sort=new Class({Extends:Fx.Elements,options:{mode:"vertical"},initialize:function(b,a){this.parent(b,a);
this.elements.each(function(c){if(c.getStyle("position")=="static"){c.setStyle("position","relative");}});this.setDefaultOrder();},setDefaultOrder:function(){this.currentOrder=this.elements.map(function(b,a){return a;
-});},sort:function(e){if($type(e)!="array"){return false;}var j=0;var a=0;var i={};var d=this.options.mode=="vertical";var g=this.elements.map(function(n,k){var m=n.getComputedSize({styles:["border","padding","margin"]});
-var o;if(d){o={top:j,margin:m["margin-top"],height:m.totalHeight};j+=o.height-m["margin-top"];}else{o={left:a,margin:m["margin-left"],width:m.totalWidth};
-a+=o.width;}var l=d?"top":"left";i[k]={};var p=n.getStyle(l).toInt();i[k][l]=p||0;return o;},this);this.set(i);e=e.map(function(k){return k.toInt();});
-if(e.length!=this.elements.length){this.currentOrder.each(function(k){if(!e.contains(k)){e.push(k);}});if(e.length>this.elements.length){e.splice(this.elements.length-1,e.length-this.elements.length);
-}}j=0;a=0;var b=0;var c={};e.each(function(m,k){var l={};if(d){l.top=j-g[m].top-b;j+=g[m].height;}else{l.left=a-g[m].left;a+=g[m].width;}b=b+g[m].margin;
-c[m]=l;},this);var h={};$A(e).sort().each(function(k){h[k]=c[k];});this.start(h);this.currentOrder=e;return this;},rearrangeDOM:function(a){a=a||this.currentOrder;
-var b=this.elements[0].getParent();var c=[];this.elements.setStyle("opacity",0);a.each(function(d){c.push(this.elements[d].inject(b).setStyles({top:0,left:0}));
-},this);this.elements.setStyle("opacity",1);this.elements=$$(c);this.setDefaultOrder();return this;},getDefaultOrder:function(){return this.elements.map(function(b,a){return a;
-});},forward:function(){return this.sort(this.getDefaultOrder());},backward:function(){return this.sort(this.getDefaultOrder().reverse());},reverse:function(){return this.sort(this.currentOrder.reverse());
-},sortByElements:function(a){return this.sort(a.map(function(b){return this.elements.indexOf(b);},this));},swap:function(c,b){if($type(c)=="element"){c=this.elements.indexOf(c);
-}if($type(b)=="element"){b=this.elements.indexOf(b);}var a=$A(this.currentOrder);a[this.currentOrder.indexOf(c)]=b;a[this.currentOrder.indexOf(b)]=c;this.sort(a);
-}});var Drag=new Class({Implements:[Events,Options],options:{snap:6,unit:"px",grid:false,style:true,limit:false,handle:false,invert:false,preventDefault:false,modifiers:{x:"left",y:"top"}},initialize:function(){var b=Array.link(arguments,{options:Object.type,element:$defined});
+});},sort:function(e){if($type(e)!="array"){return false;}var i=0,a=0,c={},h={},d=this.options.mode=="vertical";var f=this.elements.map(function(m,j){var l=m.getComputedSize({styles:["border","padding","margin"]});
+var n;if(d){n={top:i,margin:l["margin-top"],height:l.totalHeight};i+=n.height-l["margin-top"];}else{n={left:a,margin:l["margin-left"],width:l.totalWidth};
+a+=n.width;}var k=d?"top":"left";h[j]={};var o=m.getStyle(k).toInt();h[j][k]=o||0;return n;},this);this.set(h);e=e.map(function(j){return j.toInt();});
+if(e.length!=this.elements.length){this.currentOrder.each(function(j){if(!e.contains(j)){e.push(j);}});if(e.length>this.elements.length){e.splice(this.elements.length-1,e.length-this.elements.length);
+}}var b=i=a=0;e.each(function(l,j){var k={};if(d){k.top=i-f[l].top-b;i+=f[l].height;}else{k.left=a-f[l].left;a+=f[l].width;}b=b+f[l].margin;c[l]=k;},this);
+var g={};$A(e).sort().each(function(j){g[j]=c[j];});this.start(g);this.currentOrder=e;return this;},rearrangeDOM:function(a){a=a||this.currentOrder;var b=this.elements[0].getParent();
+var c=[];this.elements.setStyle("opacity",0);a.each(function(d){c.push(this.elements[d].inject(b).setStyles({top:0,left:0}));},this);this.elements.setStyle("opacity",1);
+this.elements=$$(c);this.setDefaultOrder();return this;},getDefaultOrder:function(){return this.elements.map(function(b,a){return a;});},forward:function(){return this.sort(this.getDefaultOrder());
+},backward:function(){return this.sort(this.getDefaultOrder().reverse());},reverse:function(){return this.sort(this.currentOrder.reverse());},sortByElements:function(a){return this.sort(a.map(function(b){return this.elements.indexOf(b);
+},this));},swap:function(c,b){if($type(c)=="element"){c=this.elements.indexOf(c);}if($type(b)=="element"){b=this.elements.indexOf(b);}var a=$A(this.currentOrder);
+a[this.currentOrder.indexOf(c)]=b;a[this.currentOrder.indexOf(b)]=c;return this.sort(a);}});var Drag=new Class({Implements:[Events,Options],options:{snap:6,unit:"px",grid:false,style:true,limit:false,handle:false,invert:false,preventDefault:false,stopPropagation:false,modifiers:{x:"left",y:"top"}},initialize:function(){var b=Array.link(arguments,{options:Object.type,element:$defined});
this.element=document.id(b.element);this.document=this.element.getDocument();this.setOptions(b.options||{});var a=$type(this.options.handle);this.handles=((a=="array"||a=="collection")?$$(this.options.handle):document.id(this.options.handle))||this.element;
this.mouse={now:{},pos:{}};this.value={start:{},now:{}};this.selection=(Browser.Engine.trident)?"selectstart":"mousedown";this.bound={start:this.start.bind(this),check:this.check.bind(this),drag:this.drag.bind(this),stop:this.stop.bind(this),cancel:this.cancel.bind(this),eventStop:$lambda(false)};
this.attach();},attach:function(){this.handles.addEvent("mousedown",this.bound.start);return this;},detach:function(){this.handles.removeEvent("mousedown",this.bound.start);
-return this;},start:function(c){if(this.options.preventDefault){c.preventDefault();}this.mouse.start=c.page;this.fireEvent("beforeStart",this.element);
-var a=this.options.limit;this.limit={x:[],y:[]};for(var d in this.options.modifiers){if(!this.options.modifiers[d]){continue;}if(this.options.style){this.value.now[d]=this.element.getStyle(this.options.modifiers[d]).toInt();
-}else{this.value.now[d]=this.element[this.options.modifiers[d]];}if(this.options.invert){this.value.now[d]*=-1;}this.mouse.pos[d]=c.page[d]-this.value.now[d];
-if(a&&a[d]){for(var b=2;b--;b){if($chk(a[d][b])){this.limit[d][b]=$lambda(a[d][b])();}}}}if($type(this.options.grid)=="number"){this.options.grid={x:this.options.grid,y:this.options.grid};
-}this.document.addEvents({mousemove:this.bound.check,mouseup:this.bound.cancel});this.document.addEvent(this.selection,this.bound.eventStop);},check:function(a){if(this.options.preventDefault){a.preventDefault();
-}var b=Math.round(Math.sqrt(Math.pow(a.page.x-this.mouse.start.x,2)+Math.pow(a.page.y-this.mouse.start.y,2)));if(b>this.options.snap){this.cancel();this.document.addEvents({mousemove:this.bound.drag,mouseup:this.bound.stop});
-this.fireEvent("start",[this.element,a]).fireEvent("snap",this.element);}},drag:function(a){if(this.options.preventDefault){a.preventDefault();}this.mouse.now=a.page;
-for(var b in this.options.modifiers){if(!this.options.modifiers[b]){continue;}this.value.now[b]=this.mouse.now[b]-this.mouse.pos[b];if(this.options.invert){this.value.now[b]*=-1;
-}if(this.options.limit&&this.limit[b]){if($chk(this.limit[b][1])&&(this.value.now[b]>this.limit[b][1])){this.value.now[b]=this.limit[b][1];}else{if($chk(this.limit[b][0])&&(this.value.now[b]<this.limit[b][0])){this.value.now[b]=this.limit[b][0];
-}}}if(this.options.grid[b]){this.value.now[b]-=((this.value.now[b]-(this.limit[b][0]||0))%this.options.grid[b]);}if(this.options.style){this.element.setStyle(this.options.modifiers[b],this.value.now[b]+this.options.unit);
-}else{this.element[this.options.modifiers[b]]=this.value.now[b];}}this.fireEvent("drag",[this.element,a]);},cancel:function(a){this.document.removeEvent("mousemove",this.bound.check);
-this.document.removeEvent("mouseup",this.bound.cancel);if(a){this.document.removeEvent(this.selection,this.bound.eventStop);this.fireEvent("cancel",this.element);
-}},stop:function(a){this.document.removeEvent(this.selection,this.bound.eventStop);this.document.removeEvent("mousemove",this.bound.drag);this.document.removeEvent("mouseup",this.bound.stop);
-if(a){this.fireEvent("complete",[this.element,a]);}}});Element.implement({makeResizable:function(a){var b=new Drag(this,$merge({modifiers:{x:"width",y:"height"}},a));
-this.store("resizer",b);return b.addEvent("drag",function(){this.fireEvent("resize",b);}.bind(this));}});Drag.Move=new Class({Extends:Drag,options:{droppables:[],container:false,precalculate:false,includeMargins:true,checkDroppables:true},initialize:function(c,b){this.parent(c,b);
-this.droppables=$$(this.options.droppables);this.container=document.id(this.options.container);if(this.container&&$type(this.container)!="element"){this.container=document.id(this.container.getDocument().body);
-}var a=this.element.getStyle("position");if(a=="static"){a="absolute";}if([this.element.getStyle("left"),this.element.getStyle("top")].contains("auto")){this.element.position(this.element.getPosition(this.element.offsetParent));
-}this.element.setStyle("position",a);this.addEvent("start",this.checkDroppables,true);this.overed=null;},start:function(g){if(this.container){var b=this.container.getCoordinates(this.element.getOffsetParent()),c={},e={};
-["top","right","bottom","left"].each(function(h){c[h]=this.container.getStyle("border-"+h).toInt();e[h]=this.element.getStyle("margin-"+h).toInt();},this);
-var d=this.element.offsetWidth+e.left+e.right;var a=this.element.offsetHeight+e.top+e.bottom;if(this.options.includeMargins){$each(e,function(i,h){e[h]=0;
-});}if(this.container==this.element.getOffsetParent()){this.options.limit={x:[0-e.left,b.right-c.left-c.right-d+e.right],y:[0-e.top,b.bottom-c.top-c.bottom-a+e.bottom]};
-}else{this.options.limit={x:[b.left+c.left-e.left,b.right-c.right-d+e.right],y:[b.top+c.top-e.top,b.bottom-c.bottom-a+e.bottom]};}}if(this.options.precalculate){this.positions=this.droppables.map(function(h){return h.getCoordinates();
-});}this.parent(g);},checkAgainst:function(c,b){c=(this.positions)?this.positions[b]:c.getCoordinates();var a=this.mouse.now;return(a.x>c.left&&a.x<c.right&&a.y<c.bottom&&a.y>c.top);
-},checkDroppables:function(){var a=this.droppables.filter(this.checkAgainst,this).getLast();if(this.overed!=a){if(this.overed){this.fireEvent("leave",[this.element,this.overed]);
-}if(a){this.fireEvent("enter",[this.element,a]);}this.overed=a;}},drag:function(a){this.parent(a);if(this.options.checkDroppables&&this.droppables.length){this.checkDroppables();
-}},stop:function(a){this.checkDroppables();this.fireEvent("drop",[this.element,this.overed,a]);this.overed=null;return this.parent(a);}});Element.implement({makeDraggable:function(a){var b=new Drag.Move(this,a);
-this.store("dragger",b);return b;}});var Slider=new Class({Implements:[Events,Options],Binds:["clickedElement","draggedKnob","scrolledElement"],options:{onTick:function(a){if(this.options.snap){a=this.toPosition(this.step);
-}this.knob.setStyle(this.property,a);},snap:false,offset:0,range:false,wheel:false,steps:100,mode:"horizontal"},initialize:function(g,a,e){this.setOptions(e);
-this.element=document.id(g);this.knob=document.id(a);this.previousChange=this.previousEnd=this.step=-1;var h,b={},d={x:false,y:false};switch(this.options.mode){case"vertical":this.axis="y";
-this.property="top";h="offsetHeight";break;case"horizontal":this.axis="x";this.property="left";h="offsetWidth";}this.half=this.knob[h]/2;this.full=this.element[h]-this.knob[h]+(this.options.offset*2);
-this.min=$chk(this.options.range[0])?this.options.range[0]:0;this.max=$chk(this.options.range[1])?this.options.range[1]:this.options.steps;this.range=this.max-this.min;
-this.steps=this.options.steps||this.full;this.stepSize=Math.abs(this.range)/this.steps;this.stepWidth=this.stepSize*this.full/Math.abs(this.range);this.knob.setStyle("position","relative").setStyle(this.property,-this.options.offset);
-d[this.axis]=this.property;b[this.axis]=[-this.options.offset,this.full-this.options.offset];this.bound={clickedElement:this.clickedElement.bind(this),scrolledElement:this.scrolledElement.bindWithEvent(this),draggedKnob:this.draggedKnob.bind(this)};
-var c={snap:0,limit:b,modifiers:d,onDrag:this.bound.draggedKnob,onStart:this.bound.draggedKnob,onBeforeStart:(function(){this.isDragging=true;}).bind(this),onComplete:function(){this.isDragging=false;
-this.draggedKnob();this.end();}.bind(this)};if(this.options.snap){c.grid=Math.ceil(this.stepWidth);c.limit[this.axis][1]=this.full;}this.drag=new Drag(this.knob,c);
-this.attach();},attach:function(){this.element.addEvent("mousedown",this.bound.clickedElement);if(this.options.wheel){this.element.addEvent("mousewheel",this.bound.scrolledElement);
-}this.drag.attach();return this;},detach:function(){this.element.removeEvent("mousedown",this.bound.clickedElement);this.element.removeEvent("mousewheel",this.bound.scrolledElement);
-this.drag.detach();return this;},set:function(a){if(!((this.range>0)^(a<this.min))){a=this.min;}if(!((this.range>0)^(a>this.max))){a=this.max;}this.step=Math.round(a);
-this.checkStep();this.fireEvent("tick",this.toPosition(this.step));this.end();return this;},clickedElement:function(c){if(this.isDragging||c.target==this.knob){return;
-}var b=this.range<0?-1:1;var a=c.page[this.axis]-this.element.getPosition()[this.axis]-this.half;a=a.limit(-this.options.offset,this.full-this.options.offset);
-this.step=Math.round(this.min+b*this.toStep(a));this.checkStep();this.fireEvent("tick",a);this.end();},scrolledElement:function(a){var b=(this.options.mode=="horizontal")?(a.wheel<0):(a.wheel>0);
-this.set(b?this.step-this.stepSize:this.step+this.stepSize);a.stop();},draggedKnob:function(){var b=this.range<0?-1:1;var a=this.drag.value.now[this.axis];
-a=a.limit(-this.options.offset,this.full-this.options.offset);this.step=Math.round(this.min+b*this.toStep(a));this.checkStep();},checkStep:function(){if(this.previousChange!=this.step){this.previousChange=this.step;
+return this;},start:function(c){if(c.rightClick){return;}if(this.options.preventDefault){c.preventDefault();}if(this.options.stopPropagation){c.stopPropagation();
+}this.mouse.start=c.page;this.fireEvent("beforeStart",this.element);var a=this.options.limit;this.limit={x:[],y:[]};for(var d in this.options.modifiers){if(!this.options.modifiers[d]){continue;
+}if(this.options.style){this.value.now[d]=this.element.getStyle(this.options.modifiers[d]).toInt();}else{this.value.now[d]=this.element[this.options.modifiers[d]];
+}if(this.options.invert){this.value.now[d]*=-1;}this.mouse.pos[d]=c.page[d]-this.value.now[d];if(a&&a[d]){for(var b=2;b--;b){if($chk(a[d][b])){this.limit[d][b]=$lambda(a[d][b])();
+}}}}if($type(this.options.grid)=="number"){this.options.grid={x:this.options.grid,y:this.options.grid};}this.document.addEvents({mousemove:this.bound.check,mouseup:this.bound.cancel});
+this.document.addEvent(this.selection,this.bound.eventStop);},check:function(a){if(this.options.preventDefault){a.preventDefault();}var b=Math.round(Math.sqrt(Math.pow(a.page.x-this.mouse.start.x,2)+Math.pow(a.page.y-this.mouse.start.y,2)));
+if(b>this.options.snap){this.cancel();this.document.addEvents({mousemove:this.bound.drag,mouseup:this.bound.stop});this.fireEvent("start",[this.element,a]).fireEvent("snap",this.element);
+}},drag:function(a){if(this.options.preventDefault){a.preventDefault();}this.mouse.now=a.page;for(var b in this.options.modifiers){if(!this.options.modifiers[b]){continue;
+}this.value.now[b]=this.mouse.now[b]-this.mouse.pos[b];if(this.options.invert){this.value.now[b]*=-1;}if(this.options.limit&&this.limit[b]){if($chk(this.limit[b][1])&&(this.value.now[b]>this.limit[b][1])){this.value.now[b]=this.limit[b][1];
+}else{if($chk(this.limit[b][0])&&(this.value.now[b]<this.limit[b][0])){this.value.now[b]=this.limit[b][0];}}}if(this.options.grid[b]){this.value.now[b]-=((this.value.now[b]-(this.limit[b][0]||0))%this.options.grid[b]);
+}if(this.options.style){this.element.setStyle(this.options.modifiers[b],this.value.now[b]+this.options.unit);}else{this.element[this.options.modifiers[b]]=this.value.now[b];
+}}this.fireEvent("drag",[this.element,a]);},cancel:function(a){this.document.removeEvent("mousemove",this.bound.check);this.document.removeEvent("mouseup",this.bound.cancel);
+if(a){this.document.removeEvent(this.selection,this.bound.eventStop);this.fireEvent("cancel",this.element);}},stop:function(a){this.document.removeEvent(this.selection,this.bound.eventStop);
+this.document.removeEvent("mousemove",this.bound.drag);this.document.removeEvent("mouseup",this.bound.stop);if(a){this.fireEvent("complete",[this.element,a]);
+}}});Element.implement({makeResizable:function(a){var b=new Drag(this,$merge({modifiers:{x:"width",y:"height"}},a));this.store("resizer",b);return b.addEvent("drag",function(){this.fireEvent("resize",b);
+}.bind(this));}});Drag.Move=new Class({Extends:Drag,options:{droppables:[],container:false,precalculate:false,includeMargins:true,checkDroppables:true},initialize:function(b,a){this.parent(b,a);
+b=this.element;this.droppables=$$(this.options.droppables);this.container=document.id(this.options.container);if(this.container&&$type(this.container)!="element"){this.container=document.id(this.container.getDocument().body);
+}var c=b.getStyles("left","top","position");if(c.left=="auto"||c.top=="auto"){b.setPosition(b.getPosition(b.getOffsetParent()));}if(c.position=="static"){b.setStyle("position","absolute");
+}this.addEvent("start",this.checkDroppables,true);this.overed=null;},start:function(a){if(this.container){this.options.limit=this.calculateLimit();}if(this.options.precalculate){this.positions=this.droppables.map(function(b){return b.getCoordinates();
+});}this.parent(a);},calculateLimit:function(){var d=this.element.getOffsetParent(),g=this.container.getCoordinates(d),f={},c={},b={},i={},k={};["top","right","bottom","left"].each(function(o){f[o]=this.container.getStyle("border-"+o).toInt();
+b[o]=this.element.getStyle("border-"+o).toInt();c[o]=this.element.getStyle("margin-"+o).toInt();i[o]=this.container.getStyle("margin-"+o).toInt();k[o]=d.getStyle("padding-"+o).toInt();
+},this);var e=this.element.offsetWidth+c.left+c.right,n=this.element.offsetHeight+c.top+c.bottom,h=0,j=0,m=g.right-f.right-e,a=g.bottom-f.bottom-n;if(this.options.includeMargins){h+=c.left;
+j+=c.top;}else{m+=c.right;a+=c.bottom;}if(this.element.getStyle("position")=="relative"){var l=this.element.getCoordinates(d);l.left-=this.element.getStyle("left").toInt();
+l.top-=this.element.getStyle("top").toInt();h+=f.left-l.left;j+=f.top-l.top;m+=c.left-l.left;a+=c.top-l.top;if(this.container!=d){h+=i.left+k.left;j+=(Browser.Engine.trident4?0:i.top)+k.top;
+}}else{h-=c.left;j-=c.top;if(this.container==d){m-=f.left;a-=f.top;}else{h+=g.left+f.left;j+=g.top+f.top;}}return{x:[h,m],y:[j,a]};},checkAgainst:function(c,b){c=(this.positions)?this.positions[b]:c.getCoordinates();
+var a=this.mouse.now;return(a.x>c.left&&a.x<c.right&&a.y<c.bottom&&a.y>c.top);},checkDroppables:function(){var a=this.droppables.filter(this.checkAgainst,this).getLast();
+if(this.overed!=a){if(this.overed){this.fireEvent("leave",[this.element,this.overed]);}if(a){this.fireEvent("enter",[this.element,a]);}this.overed=a;}},drag:function(a){this.parent(a);
+if(this.options.checkDroppables&&this.droppables.length){this.checkDroppables();}},stop:function(a){this.checkDroppables();this.fireEvent("drop",[this.element,this.overed,a]);
+this.overed=null;return this.parent(a);}});Element.implement({makeDraggable:function(a){var b=new Drag.Move(this,a);this.store("dragger",b);return b;}});
+var Slider=new Class({Implements:[Events,Options],Binds:["clickedElement","draggedKnob","scrolledElement"],options:{onTick:function(a){if(this.options.snap){a=this.toPosition(this.step);
+}this.knob.setStyle(this.property,a);},initialStep:0,snap:false,offset:0,range:false,wheel:false,steps:100,mode:"horizontal"},initialize:function(f,a,e){this.setOptions(e);
+this.element=document.id(f);this.knob=document.id(a);this.previousChange=this.previousEnd=this.step=-1;var g,b={},d={x:false,y:false};switch(this.options.mode){case"vertical":this.axis="y";
+this.property="top";g="offsetHeight";break;case"horizontal":this.axis="x";this.property="left";g="offsetWidth";}this.full=this.element.measure(function(){this.half=this.knob[g]/2;
+return this.element[g]-this.knob[g]+(this.options.offset*2);}.bind(this));this.min=$chk(this.options.range[0])?this.options.range[0]:0;this.max=$chk(this.options.range[1])?this.options.range[1]:this.options.steps;
+this.range=this.max-this.min;this.steps=this.options.steps||this.full;this.stepSize=Math.abs(this.range)/this.steps;this.stepWidth=this.stepSize*this.full/Math.abs(this.range);
+this.knob.setStyle("position","relative").setStyle(this.property,this.options.initialStep?this.toPosition(this.options.initialStep):-this.options.offset);
+d[this.axis]=this.property;b[this.axis]=[-this.options.offset,this.full-this.options.offset];var c={snap:0,limit:b,modifiers:d,onDrag:this.draggedKnob,onStart:this.draggedKnob,onBeforeStart:(function(){this.isDragging=true;
+}).bind(this),onCancel:function(){this.isDragging=false;}.bind(this),onComplete:function(){this.isDragging=false;this.draggedKnob();this.end();}.bind(this)};
+if(this.options.snap){c.grid=Math.ceil(this.stepWidth);c.limit[this.axis][1]=this.full;}this.drag=new Drag(this.knob,c);this.attach();},attach:function(){this.element.addEvent("mousedown",this.clickedElement);
+if(this.options.wheel){this.element.addEvent("mousewheel",this.scrolledElement);}this.drag.attach();return this;},detach:function(){this.element.removeEvent("mousedown",this.clickedElement);
+this.element.removeEvent("mousewheel",this.scrolledElement);this.drag.detach();return this;},set:function(a){if(!((this.range>0)^(a<this.min))){a=this.min;
+}if(!((this.range>0)^(a>this.max))){a=this.max;}this.step=Math.round(a);this.checkStep();this.fireEvent("tick",this.toPosition(this.step));this.end();return this;
+},clickedElement:function(c){if(this.isDragging||c.target==this.knob){return;}var b=this.range<0?-1:1;var a=c.page[this.axis]-this.element.getPosition()[this.axis]-this.half;
+a=a.limit(-this.options.offset,this.full-this.options.offset);this.step=Math.round(this.min+b*this.toStep(a));this.checkStep();this.fireEvent("tick",a);
+this.end();},scrolledElement:function(a){var b=(this.options.mode=="horizontal")?(a.wheel<0):(a.wheel>0);this.set(b?this.step-this.stepSize:this.step+this.stepSize);
+a.stop();},draggedKnob:function(){var b=this.range<0?-1:1;var a=this.drag.value.now[this.axis];a=a.limit(-this.options.offset,this.full-this.options.offset);
+this.step=Math.round(this.min+b*this.toStep(a));this.checkStep();},checkStep:function(){if(this.previousChange!=this.step){this.previousChange=this.step;
this.fireEvent("change",this.step);}},end:function(){if(this.previousEnd!==this.step){this.previousEnd=this.step;this.fireEvent("complete",this.step+"");
}},toStep:function(a){var b=(a+this.options.offset)*this.stepSize/this.full*this.steps;return this.options.steps?Math.round(b-=b%this.stepSize):b;},toPosition:function(a){return(this.full*Math.abs(this.min-a))/(this.steps*this.stepSize)-this.options.offset;
}});var Sortables=new Class({Implements:[Events,Options],options:{snap:4,opacity:1,clone:false,revert:false,handle:false,constrain:false},initialize:function(a,b){this.setOptions(b);
@@ -378,55 +407,54 @@
},removeItems:function(){return $$(Array.flatten(arguments).map(function(a){this.elements.erase(a);var b=a.retrieve("sortables:start");(this.options.handle?a.getElement(this.options.handle)||a:a).removeEvent("mousedown",b);
return a;},this));},removeLists:function(){return $$(Array.flatten(arguments).map(function(a){this.lists.erase(a);this.removeItems(a.getChildren());return a;
},this));},getClone:function(b,a){if(!this.options.clone){return new Element("div").inject(document.body);}if($type(this.options.clone)=="function"){return this.options.clone.call(this,b,a,this.list);
-}return a.clone(true).setStyles({margin:"0px",position:"absolute",visibility:"hidden",width:a.getStyle("width")}).inject(this.list).position(a.getPosition(a.getOffsetParent()));
-},getDroppables:function(){var a=this.list.getChildren();if(!this.options.constrain){a=this.lists.concat(a).erase(this.list);}return a.erase(this.clone).erase(this.element);
-},insert:function(c,b){var a="inside";if(this.lists.contains(b)){this.list=b;this.drag.droppables=this.getDroppables();}else{a=this.element.getAllPrevious().contains(b)?"before":"after";
-}this.element.inject(b,a);this.fireEvent("sort",[this.element,this.clone]);},start:function(b,a){if(!this.idle){return;}this.idle=false;this.element=a;
-this.opacity=a.get("opacity");this.list=a.getParent();this.clone=this.getClone(b,a);this.drag=new Drag.Move(this.clone,{snap:this.options.snap,container:this.options.constrain&&this.element.getParent(),droppables:this.getDroppables(),onSnap:function(){b.stop();
+}var c=a.clone(true).setStyles({margin:"0px",position:"absolute",visibility:"hidden",width:a.getStyle("width")});if(c.get("html").test("radio")){c.getElements("input[type=radio]").each(function(d,e){d.set("name","clone_"+e);
+});}return c.inject(this.list).setPosition(a.getPosition(a.getOffsetParent()));},getDroppables:function(){var a=this.list.getChildren();if(!this.options.constrain){a=this.lists.concat(a).erase(this.list);
+}return a.erase(this.clone).erase(this.element);},insert:function(c,b){var a="inside";if(this.lists.contains(b)){this.list=b;this.drag.droppables=this.getDroppables();
+}else{a=this.element.getAllPrevious().contains(b)?"before":"after";}this.element.inject(b,a);this.fireEvent("sort",[this.element,this.clone]);},start:function(b,a){if(!this.idle){return;
+}this.idle=false;this.element=a;this.opacity=a.get("opacity");this.list=a.getParent();this.clone=this.getClone(b,a);this.drag=new Drag.Move(this.clone,{snap:this.options.snap,container:this.options.constrain&&this.element.getParent(),droppables:this.getDroppables(),onSnap:function(){b.stop();
this.clone.setStyle("visibility","visible");this.element.set("opacity",this.options.opacity||0);this.fireEvent("start",[this.element,this.clone]);}.bind(this),onEnter:this.insert.bind(this),onCancel:this.reset.bind(this),onComplete:this.end.bind(this)});
this.clone.inject(this.element,"before");this.drag.start(b);},end:function(){this.drag.detach();this.element.set("opacity",this.opacity);if(this.effect){var a=this.element.getStyles("width","height");
var b=this.clone.computePosition(this.element.getPosition(this.clone.offsetParent));this.effect.element=this.clone;this.effect.start({top:b.top,left:b.left,width:a.width,height:a.height,opacity:0.25}).chain(this.reset.bind(this));
}else{this.reset();}},reset:function(){this.idle=true;this.clone.destroy();this.fireEvent("complete",this.element);},serialize:function(){var c=Array.link(arguments,{modifier:Function.type,index:$defined});
var b=this.lists.map(function(d){return d.getChildren().map(c.modifier||function(e){return e.get("id");},this);},this);var a=c.index;if(this.lists.length==1){a=0;
}return $chk(a)&&a>=0&&a<this.lists.length?b[a]:b;}});Request.JSONP=new Class({Implements:[Chain,Events,Options,Log],options:{url:"",data:{},retries:0,timeout:0,link:"ignore",callbackKey:"callback",injectScript:document.head},initialize:function(a){this.setOptions(a);
-this.running=false;this.requests=0;this.triesRemaining=[];},check:function(){if(!this.running){return true;}switch(this.options.link){case"cancel":this.cancel();
+if(this.options.log){this.enableLog();}this.running=false;this.requests=0;this.triesRemaining=[];},check:function(){if(!this.running){return true;}switch(this.options.link){case"cancel":this.cancel();
return true;case"chain":this.chain(this.caller.bind(this,arguments));return false;}return false;},send:function(c){if(!$chk(arguments[1])&&!this.check(c)){return this;
}var e=$type(c),a=this.options,b=$chk(arguments[1])?arguments[1]:this.requests++;if(e=="string"||e=="element"){c={data:c};}c=$extend({data:a.data,url:a.url},c);
-if(!$chk(this.triesRemaining[b])){this.triesRemaining[b]=this.options.retries;}var d=this.triesRemaining[b];(function(){var g=this.getScript(c);this.log("JSONP retrieving script with url: "+g.get("src"));
-this.fireEvent("request",g);this.running=true;(function(){if(d){this.triesRemaining[b]=d-1;if(g){g.destroy();this.send(c,b);this.fireEvent("retry",this.triesRemaining[b]);
-}}else{if(g&&this.options.timeout){g.destroy();this.cancel();this.fireEvent("failure");}}}).delay(this.options.timeout,this);}).delay(Browser.Engine.trident?50:0,this);
+if(!$chk(this.triesRemaining[b])){this.triesRemaining[b]=this.options.retries;}var d=this.triesRemaining[b];(function(){var f=this.getScript(c);this.log("JSONP retrieving script with url: "+f.get("src"));
+this.fireEvent("request",f);this.running=true;(function(){if(d){this.triesRemaining[b]=d-1;if(f){f.destroy();this.send(c,b).fireEvent("retry",this.triesRemaining[b]);
+}}else{if(f&&this.options.timeout){f.destroy();this.cancel().fireEvent("failure");}}}).delay(this.options.timeout,this);}).delay(Browser.Engine.trident?50:0,this);
return this;},cancel:function(){if(!this.running){return this;}this.running=false;this.fireEvent("cancel");return this;},getScript:function(c){var b=Request.JSONP.counter,d;
Request.JSONP.counter++;switch($type(c.data)){case"element":d=document.id(c.data).toQueryString();break;case"object":case"hash":d=Hash.toQueryString(c.data);
}var e=c.url+(c.url.test("\\?")?"&":"?")+(c.callbackKey||this.options.callbackKey)+"=Request.JSONP.request_map.request_"+b+(d?"&"+d:"");if(e.length>2083){this.log("JSONP "+e+" will fail in Internet Explorer, which enforces a 2083 bytes length limit on URIs");
-}var a=new Element("script",{type:"text/javascript",src:e});Request.JSONP.request_map["request_"+b]=function(g){this.success(g,a);}.bind(this);return a.inject(this.options.injectScript);
-},success:function(b,a){if(a){a.destroy();}this.running=false;this.log("JSONP successfully retrieved: ",b);this.fireEvent("complete",[b]).fireEvent("success",[b]).callChain();
-}});Request.JSONP.counter=0;Request.JSONP.request_map={};Request.Queue=new Class({Implements:[Options,Events],Binds:["attach","request","complete","cancel","success","failure","exception"],options:{stopOnFailure:true,autoAdvance:true,concurrent:1,requests:{}},initialize:function(a){this.setOptions(a);
-this.requests=new Hash;this.addRequests(this.options.requests);this.queue=[];this.reqBinders={};},addRequest:function(a,b){this.requests.set(a,b);this.attach(a,b);
-return this;},addRequests:function(a){$each(a,function(c,b){this.addRequest(b,c);},this);return this;},getName:function(a){return this.requests.keyOf(a);
+}var a=new Element("script",{type:"text/javascript",src:e});Request.JSONP.request_map["request_"+b]=function(){this.success(arguments,a);}.bind(this);return a.inject(this.options.injectScript);
+},success:function(b,a){if(a){a.destroy();}this.running=false;this.log("JSONP successfully retrieved: ",b);this.fireEvent("complete",b).fireEvent("success",b).callChain();
+}});Request.JSONP.counter=0;Request.JSONP.request_map={};Request.Queue=new Class({Implements:[Options,Events],Binds:["attach","request","complete","cancel","success","failure","exception"],options:{stopOnFailure:true,autoAdvance:true,concurrent:1,requests:{}},initialize:function(a){if(a){var b=a.requests;
+delete a.requests;}this.setOptions(a);this.requests=new Hash;this.queue=[];this.reqBinders={};if(b){this.addRequests(b);}},addRequest:function(a,b){this.requests.set(a,b);
+this.attach(a,b);return this;},addRequests:function(a){$each(a,function(c,b){this.addRequest(b,c);},this);return this;},getName:function(a){return this.requests.keyOf(a);
},attach:function(a,b){if(b._groupSend){return this;}["request","complete","cancel","success","failure","exception"].each(function(c){if(!this.reqBinders[a]){this.reqBinders[a]={};
}this.reqBinders[a][c]=function(){this["on"+c.capitalize()].apply(this,[a,b].extend(arguments));}.bind(this);b.addEvent(c,this.reqBinders[a][c]);},this);
b._groupSend=b.send;b.send=function(c){this.send(a,c);return b;}.bind(this);return this;},removeRequest:function(b){var a=$type(b)=="object"?this.getName(b):b;
if(!a&&$type(a)!="string"){return this;}b=this.requests.get(a);if(!b){return this;}["request","complete","cancel","success","failure","exception"].each(function(c){b.removeEvent(c,this.reqBinders[a][c]);
-},this);b.send=b._groupSend;delete b._groupSend;return this;},getRunning:function(){return this.requests.filter(function(a){return a.running;});},isRunning:function(){return !!this.getRunning().getKeys().length;
+},this);b.send=b._groupSend;delete b._groupSend;return this;},getRunning:function(){return this.requests.filter(function(a){return a.running;});},isRunning:function(){return !!(this.getRunning().getKeys().length);
},send:function(b,a){var c=function(){this.requests.get(b)._groupSend(a);this.queue.erase(c);}.bind(this);c.name=b;if(this.getRunning().getKeys().length>=this.options.concurrent||(this.error&&this.options.stopOnFailure)){this.queue.push(c);
}else{c();}return this;},hasNext:function(a){return(!a)?!!this.queue.length:!!this.queue.filter(function(b){return b.name==a;}).length;},resume:function(){this.error=false;
(this.options.concurrent-this.getRunning().getKeys().length).times(this.runNext,this);return this;},runNext:function(a){if(!this.queue.length){return this;
}if(!a){this.queue[0]();}else{var b;this.queue.each(function(c){if(!b&&c.name==a){b=true;c();}});}return this;},runAll:function(){this.queue.each(function(a){a();
});return this;},clear:function(a){if(!a){this.queue.empty();}else{this.queue=this.queue.map(function(b){if(b.name!=a){return b;}else{return false;}}).filter(function(b){return b;
});}return this;},cancel:function(a){this.requests.get(a).cancel();return this;},onRequest:function(){this.fireEvent("request",arguments);},onComplete:function(){this.fireEvent("complete",arguments);
-},onCancel:function(){if(this.options.autoAdvance&&!this.error){this.runNext();}this.fireEvent("cancel",arguments);},onSuccess:function(){if(this.options.autoAdvance&&!this.error){this.runNext();
-}this.fireEvent("success",arguments);},onFailure:function(){this.error=true;if(!this.options.stopOnFailure&&this.options.autoAdvance){this.runNext();}this.fireEvent("failure",arguments);
-},onException:function(){this.error=true;if(!this.options.stopOnFailure&&this.options.autoAdvance){this.runNext();}this.fireEvent("exception",arguments);
-}});Request.implement({options:{initialDelay:5000,delay:5000,limit:60000},startTimer:function(b){var a=(function(){if(!this.running){this.send({data:b});
-}});this.timer=a.delay(this.options.initialDelay,this);this.lastDelay=this.options.initialDelay;this.completeCheck=function(c){$clear(this.timer);if(c){this.lastDelay=this.options.delay;
-}else{this.lastDelay=(this.lastDelay+this.options.delay).min(this.options.limit);}this.timer=a.delay(this.lastDelay,this);};this.addEvent("complete",this.completeCheck);
-return this;},stopTimer:function(){$clear(this.timer);this.removeEvent("complete",this.completeCheck);return this;}});var Asset={javascript:function(g,d){d=$extend({onload:$empty,document:document,check:$lambda(true)},d);
-var b=new Element("script",{src:g,type:"text/javascript"});var e=d.onload.bind(b),a=d.check,h=d.document;delete d.onload;delete d.check;delete d.document;
-b.addEvents({load:e,readystatechange:function(){if(["loaded","complete"].contains(this.readyState)){e();}}}).set(d);if(Browser.Engine.webkit419){var c=(function(){if(!$try(a)){return;
-}$clear(c);e();}).periodical(50);}return b.inject(h.head);},css:function(b,a){return new Element("link",$merge({rel:"stylesheet",media:"screen",type:"text/css",href:b},a)).inject(document.head);
+if(!this.queue.length){this.fireEvent("end");}},onCancel:function(){if(this.options.autoAdvance&&!this.error){this.runNext();}this.fireEvent("cancel",arguments);
+},onSuccess:function(){if(this.options.autoAdvance&&!this.error){this.runNext();}this.fireEvent("success",arguments);},onFailure:function(){this.error=true;
+if(!this.options.stopOnFailure&&this.options.autoAdvance){this.runNext();}this.fireEvent("failure",arguments);},onException:function(){this.error=true;
+if(!this.options.stopOnFailure&&this.options.autoAdvance){this.runNext();}this.fireEvent("exception",arguments);}});Request.implement({options:{initialDelay:5000,delay:5000,limit:60000},startTimer:function(b){var a=function(){if(!this.running){this.send({data:b});
+}};this.timer=a.delay(this.options.initialDelay,this);this.lastDelay=this.options.initialDelay;this.completeCheck=function(c){$clear(this.timer);this.lastDelay=(c)?this.options.delay:(this.lastDelay+this.options.delay).min(this.options.limit);
+this.timer=a.delay(this.lastDelay,this);};return this.addEvent("complete",this.completeCheck);},stopTimer:function(){$clear(this.timer);return this.removeEvent("complete",this.completeCheck);
+}});var Asset={javascript:function(f,d){d=$extend({onload:$empty,document:document,check:$lambda(true)},d);if(d.onLoad){d.onload=d.onLoad;}var b=new Element("script",{src:f,type:"text/javascript"});
+var e=d.onload.bind(b),a=d.check,g=d.document;delete d.onload;delete d.check;delete d.document;b.addEvents({load:e,readystatechange:function(){if(["loaded","complete"].contains(this.readyState)){e();
+}}}).set(d);if(Browser.Engine.webkit419){var c=(function(){if(!$try(a)){return;}$clear(c);e();}).periodical(50);}return b.inject(g.head);},css:function(b,a){return new Element("link",$merge({rel:"stylesheet",media:"screen",type:"text/css",href:b},a)).inject(document.head);
},image:function(c,b){b=$merge({onload:$empty,onabort:$empty,onerror:$empty},b);var d=new Image();var a=document.id(d)||new Element("img");["load","abort","error"].each(function(e){var g="on"+e;
-var h=b[g];delete b[g];d[g]=function(){if(!d){return;}if(!a.parentNode){a.width=d.width;a.height=d.height;}d=d.onload=d.onabort=d.onerror=null;h.delay(1,a,a);
-a.fireEvent(e,a,1);};});d.src=a.src=c;if(d&&d.complete){d.onload.delay(1);}return a.set(b);},images:function(d,c){c=$merge({onComplete:$empty,onProgress:$empty,onError:$empty,properties:{}},c);
+var f=e.capitalize();if(b["on"+f]){b[g]=b["on"+f];}var h=b[g];delete b[g];d[g]=function(){if(!d){return;}if(!a.parentNode){a.width=d.width;a.height=d.height;
+}d=d.onload=d.onabort=d.onerror=null;h.delay(1,a,a);a.fireEvent(e,a,1);};});d.src=a.src=c;if(d&&d.complete){d.onload.delay(1);}return a.set(b);},images:function(d,c){c=$merge({onComplete:$empty,onProgress:$empty,onError:$empty,properties:{}},c);
d=$splat(d);var a=[];var b=0;return new Elements(d.map(function(e){return Asset.image(e,$extend(c.properties,{onload:function(){c.onProgress.call(this,b,d.indexOf(e));
b++;if(b==d.length){c.onComplete();}},onerror:function(){c.onError.call(this,b,d.indexOf(e));b++;if(b==d.length){c.onComplete();}}}));}));}};var Color=new Native({initialize:function(b,c){if(arguments.length>=3){c="rgb";
b=Array.slice(arguments,0,3);}else{if(typeof b=="string"){if(b.match(/rgb/)){b=b.rgbToHex().hexToRgb(true);}else{if(b.match(/hsb/)){b=b.hsbToRgb();}else{b=b.hexToRgb(true);
@@ -435,48 +463,49 @@
var b=this.slice();a.each(function(d){d=new Color(d);for(var e=0;e<3;e++){b[e]=Math.round((b[e]/100*(100-c))+(d[e]/100*c));}});return new Color(b,"rgb");
},invert:function(){return new Color(this.map(function(a){return 255-a;}));},setHue:function(a){return new Color([a,this.hsb[1],this.hsb[2]],"hsb");},setSaturation:function(a){return new Color([this.hsb[0],a,this.hsb[2]],"hsb");
},setBrightness:function(a){return new Color([this.hsb[0],this.hsb[1],a],"hsb");}});var $RGB=function(d,c,a){return new Color([d,c,a],"rgb");};var $HSB=function(d,c,a){return new Color([d,c,a],"hsb");
-};var $HEX=function(a){return new Color(a,"hex");};Array.implement({rgbToHsb:function(){var b=this[0],c=this[1],k=this[2];var h,g,i;var j=Math.max(b,c,k),e=Math.min(b,c,k);
-var l=j-e;i=j/255;g=(j!=0)?l/j:0;if(g==0){h=0;}else{var d=(j-b)/l;var a=(j-c)/l;var m=(j-k)/l;if(b==j){h=m-a;}else{if(c==j){h=2+d-m;}else{h=4+a-d;}}h/=6;
-if(h<0){h++;}}return[Math.round(h*360),Math.round(g*100),Math.round(i*100)];},hsbToRgb:function(){var c=Math.round(this[2]/100*255);if(this[1]==0){return[c,c,c];
-}else{var a=this[0]%360;var e=a%60;var g=Math.round((this[2]*(100-this[1]))/10000*255);var d=Math.round((this[2]*(6000-this[1]*e))/600000*255);var b=Math.round((this[2]*(6000-this[1]*(60-e)))/600000*255);
+};var $HEX=function(a){return new Color(a,"hex");};Array.implement({rgbToHsb:function(){var b=this[0],c=this[1],j=this[2],g=0;var i=Math.max(b,c,j),e=Math.min(b,c,j);
+var k=i-e;var h=i/255,f=(i!=0)?k/i:0;if(f!=0){var d=(i-b)/k;var a=(i-c)/k;var l=(i-j)/k;if(b==i){g=l-a;}else{if(c==i){g=2+d-l;}else{g=4+a-d;}}g/=6;if(g<0){g++;
+}}return[Math.round(g*360),Math.round(f*100),Math.round(h*100)];},hsbToRgb:function(){var c=Math.round(this[2]/100*255);if(this[1]==0){return[c,c,c];}else{var a=this[0]%360;
+var e=a%60;var g=Math.round((this[2]*(100-this[1]))/10000*255);var d=Math.round((this[2]*(6000-this[1]*e))/600000*255);var b=Math.round((this[2]*(6000-this[1]*(60-e)))/600000*255);
switch(Math.floor(a/60)){case 0:return[c,b,g];case 1:return[d,c,g];case 2:return[g,c,b];case 3:return[g,d,c];case 4:return[b,g,c];case 5:return[c,g,d];
}}return false;}});String.implement({rgbToHsb:function(){var a=this.match(/\d{1,3}/g);return(a)?a.rgbToHsb():null;},hsbToRgb:function(){var a=this.match(/\d{1,3}/g);
return(a)?a.hsbToRgb():null;}});var Group=new Class({initialize:function(){this.instances=Array.flatten(arguments);this.events={};this.checker={};},addEvent:function(b,a){this.checker[b]=this.checker[b]||{};
this.events[b]=this.events[b]||[];if(this.events[b].contains(a)){return false;}else{this.events[b].push(a);}this.instances.each(function(c,d){c.addEvent(b,this.check.bind(this,[b,c,d]));
-},this);return this;},check:function(c,a,b){this.checker[c][b]=true;var d=this.instances.every(function(g,e){return this.checker[c][e]||false;},this);if(!d){return;
+},this);return this;},check:function(c,a,b){this.checker[c][b]=true;var d=this.instances.every(function(f,e){return this.checker[c][e]||false;},this);if(!d){return;
}this.checker[c]={};this.events[c].each(function(e){e.call(this,this.instances,a);},this);}});Hash.Cookie=new Class({Extends:Cookie,options:{autoSave:true},initialize:function(b,a){this.parent(b,a);
this.load();},save:function(){var a=JSON.encode(this.hash);if(!a||a.length>4096){return false;}if(a=="{}"){this.dispose();}else{this.write(a);}return true;
},load:function(){this.hash=new Hash(JSON.decode(this.read(),true));return this;}});Hash.each(Hash.prototype,function(b,a){if(typeof b=="function"){Hash.Cookie.implement(a,function(){var c=b.apply(this.hash,arguments);
-if(this.options.autoSave){this.save();}return c;});}});var IframeShim=new Class({Implements:[Options,Events,Class.Occlude],options:{className:"iframeShim",display:false,zIndex:null,margin:0,offset:{x:0,y:0},browsers:(Browser.Engine.trident4||(Browser.Engine.gecko&&!Browser.Engine.gecko19&&Browser.Platform.mac))},property:"IframeShim",initialize:function(b,a){this.element=document.id(b);
+if(this.options.autoSave){this.save();}return c;});}});var IframeShim=new Class({Implements:[Options,Events,Class.Occlude],options:{className:"iframeShim",src:'javascript:false;document.write("");',display:false,zIndex:null,margin:0,offset:{x:0,y:0},browsers:(Browser.Engine.trident4||(Browser.Engine.gecko&&!Browser.Engine.gecko19&&Browser.Platform.mac))},property:"IframeShim",initialize:function(b,a){this.element=document.id(b);
if(this.occlude()){return this.occluded;}this.setOptions(a);this.makeShim();return this;},makeShim:function(){if(this.options.browsers){var c=this.element.getStyle("zIndex").toInt();
if(!c){c=1;var b=this.element.getStyle("position");if(b=="static"||!b){this.element.setStyle("position","relative");}this.element.setStyle("zIndex",c);
-}c=($chk(this.options.zIndex)&&c>this.options.zIndex)?this.options.zIndex:c-1;if(c<0){c=1;}this.shim=new Element("iframe",{src:'javascript:false;document.write("");',scrolling:"no",frameborder:0,styles:{zIndex:c,position:"absolute",border:"none",filter:"progid:DXImageTransform.Microsoft.Alpha(style=0,opacity=0)"},"class":this.options.className}).store("IframeShim",this);
-var a=(function(){this.shim.inject(this.element,"after");this[this.options.display?"show":"hide"]();this.fireEvent("inject");}).bind(this);if(Browser.Engine.trident&&!IframeShim.ready){window.addEvent("load",a);
-}else{a();}}else{this.position=this.hide=this.show=this.dispose=$lambda(this);}},position:function(){if(!IframeShim.ready){return this;}var a=this.element.measure(function(){return this.getSize();
-});if($type(this.options.margin)){a.x=a.x-(this.options.margin*2);a.y=a.y-(this.options.margin*2);this.options.offset.x+=this.options.margin;this.options.offset.y+=this.options.margin;
-}if(this.shim){this.shim.set({width:a.x,height:a.y}).position({relativeTo:this.element,offset:this.options.offset});}return this;},hide:function(){if(this.shim){this.shim.setStyle("display","none");
+}c=($chk(this.options.zIndex)&&c>this.options.zIndex)?this.options.zIndex:c-1;if(c<0){c=1;}this.shim=new Element("iframe",{src:this.options.src,scrolling:"no",frameborder:0,styles:{zIndex:c,position:"absolute",border:"none",filter:"progid:DXImageTransform.Microsoft.Alpha(style=0,opacity=0)"},"class":this.options.className}).store("IframeShim",this);
+var a=(function(){this.shim.inject(this.element,"after");this[this.options.display?"show":"hide"]();this.fireEvent("inject");}).bind(this);if(!IframeShim.ready){window.addEvent("load",a);
+}else{a();}}else{this.position=this.hide=this.show=this.dispose=$lambda(this);}},position:function(){if(!IframeShim.ready||!this.shim){return this;}var a=this.element.measure(function(){return this.getSize();
+});if(this.options.margin!=undefined){a.x=a.x-(this.options.margin*2);a.y=a.y-(this.options.margin*2);this.options.offset.x+=this.options.margin;this.options.offset.y+=this.options.margin;
+}this.shim.set({width:a.x,height:a.y}).position({relativeTo:this.element,offset:this.options.offset});return this;},hide:function(){if(this.shim){this.shim.setStyle("display","none");
}return this;},show:function(){if(this.shim){this.shim.setStyle("display","block");}return this.position();},dispose:function(){if(this.shim){this.shim.dispose();
}return this;},destroy:function(){if(this.shim){this.shim.destroy();}return this;}});window.addEvent("load",function(){IframeShim.ready=true;});var Scroller=new Class({Implements:[Events,Options],options:{area:20,velocity:1,onChange:function(a,b){this.element.scrollTo(a,b);
-},fps:50},initialize:function(b,a){this.setOptions(a);this.element=document.id(b);this.listener=($type(this.element)!="element")?document.id(this.element.getDocument().body):this.element;
-this.timer=null;this.bound={attach:this.attach.bind(this),detach:this.detach.bind(this),getCoords:this.getCoords.bind(this)};},start:function(){this.listener.addEvents({mouseenter:this.bound.attach,mouseleave:this.bound.detach});
-},stop:function(){this.listener.removeEvents({mouseenter:this.bound.attach,mouseleave:this.bound.detach});this.timer=$clear(this.timer);},attach:function(){this.listener.addEvent("mousemove",this.bound.getCoords);
+},fps:50},initialize:function(b,a){this.setOptions(a);this.element=document.id(b);this.docBody=document.id(this.element.getDocument().body);this.listener=($type(this.element)!="element")?this.docBody:this.element;
+this.timer=null;this.bound={attach:this.attach.bind(this),detach:this.detach.bind(this),getCoords:this.getCoords.bind(this)};},start:function(){this.listener.addEvents({mouseover:this.bound.attach,mouseout:this.bound.detach});
+},stop:function(){this.listener.removeEvents({mouseover:this.bound.attach,mouseout:this.bound.detach});this.detach();this.timer=$clear(this.timer);},attach:function(){this.listener.addEvent("mousemove",this.bound.getCoords);
},detach:function(){this.listener.removeEvent("mousemove",this.bound.getCoords);this.timer=$clear(this.timer);},getCoords:function(a){this.page=(this.listener.get("tag")=="body")?a.client:a.page;
-if(!this.timer){this.timer=this.scroll.periodical(Math.round(1000/this.options.fps),this);}},scroll:function(){var b=this.element.getSize(),a=this.element.getScroll(),g=this.element.getOffsets(),c=this.element.getScrollSize(),e={x:0,y:0};
-for(var d in this.page){if(this.page[d]<(this.options.area+g[d])&&a[d]!=0){e[d]=(this.page[d]-this.options.area-g[d])*this.options.velocity;}else{if(this.page[d]+this.options.area>(b[d]+g[d])&&a[d]+b[d]!=c[d]){e[d]=(this.page[d]-b[d]+this.options.area-g[d])*this.options.velocity;
-}}}if(e.y||e.x){this.fireEvent("change",[a.x+e.x,a.y+e.y]);}}});var Tips=new Class({Implements:[Events,Options],options:{onShow:function(a){a.setStyle("visibility","visible");
-},onHide:function(a){a.setStyle("visibility","hidden");},title:"title",text:function(a){return a.get("rel")||a.get("href");},showDelay:100,hideDelay:100,className:null,offset:{x:16,y:16},fixed:false},initialize:function(){var a=Array.link(arguments,{options:Object.type,elements:$defined});
-if(a.options&&a.options.offsets){a.options.offset=a.options.offsets;}this.setOptions(a.options);this.container=new Element("div",{"class":"tip"});this.tip=this.getTip();
-if(a.elements){this.attach(a.elements);}},getTip:function(){return new Element("div",{"class":this.options.className,styles:{visibility:"hidden",display:"none",position:"absolute",top:0,left:0}}).adopt(new Element("div",{"class":"tip-top"}),this.container,new Element("div",{"class":"tip-bottom"})).inject(document.body);
-},attach:function(b){var a=function(d,c){if(d==null){return"";}return $type(d)=="function"?d(c):c.get(d);};$$(b).each(function(d){var e=a(this.options.title,d);
-d.erase("title").store("tip:native",e).retrieve("tip:title",e);d.retrieve("tip:text",a(this.options.text,d));var c=["enter","leave"];if(!this.options.fixed){c.push("move");
-}c.each(function(g){d.addEvent("mouse"+g,d.retrieve("tip:"+g,this["element"+g.capitalize()].bindWithEvent(this,d)));},this);},this);return this;},detach:function(a){$$(a).each(function(c){["enter","leave","move"].each(function(d){c.removeEvent("mouse"+d,c.retrieve("tip:"+d)||$empty);
-});c.eliminate("tip:enter").eliminate("tip:leave").eliminate("tip:move");if($type(this.options.title)=="string"&&this.options.title=="title"){var b=c.retrieve("tip:native");
-if(b){c.set("title",b);}}},this);return this;},elementEnter:function(b,a){$A(this.container.childNodes).each(Element.dispose);["title","text"].each(function(d){var c=a.retrieve("tip:"+d);
-if(!c){return;}this[d+"Element"]=new Element("div",{"class":"tip-"+d}).inject(this.container);this.fill(this[d+"Element"],c);},this);this.timer=$clear(this.timer);
-this.timer=this.show.delay(this.options.showDelay,this,a);this.tip.setStyle("display","block");this.position((!this.options.fixed)?b:{page:a.getPosition()});
-},elementLeave:function(b,a){$clear(this.timer);this.tip.setStyle("display","none");this.timer=this.hide.delay(this.options.hideDelay,this,a);},elementMove:function(a){this.position(a);
-},position:function(d){var b=window.getSize(),a=window.getScroll(),e={x:this.tip.offsetWidth,y:this.tip.offsetHeight},c={x:"left",y:"top"},g={};for(var h in c){g[c[h]]=d.page[h]+this.options.offset[h];
-if((g[c[h]]+e[h]-a[h])>b[h]){g[c[h]]=d.page[h]-this.options.offset[h]-e[h];}}this.tip.setStyles(g);},fill:function(a,b){if(typeof b=="string"){a.set("html",b);
-}else{a.adopt(b);}},show:function(a){this.fireEvent("show",[this.tip,a]);},hide:function(a){this.fireEvent("hide",[this.tip,a]);}});MooTools.lang.set("en-US","Date",{months:["January","February","March","April","May","June","July","August","September","October","November","December"],days:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],dateOrder:["month","date","year"],shortDate:"%m/%d/%Y",shortTime:"%I:%M%p",AM:"AM",PM:"PM",ordinal:function(a){return(a>3&&a<21)?"th":["th","st","nd","rd","th"][Math.min(a%10,4)];
-},lessThanMinuteAgo:"less than a minute ago",minuteAgo:"about a minute ago",minutesAgo:"{delta} minutes ago",hourAgo:"about an hour ago",hoursAgo:"about {delta} hours ago",dayAgo:"1 day ago",daysAgo:"{delta} days ago",lessThanMinuteUntil:"less than a minute from now",minuteUntil:"about a minute from now",minutesUntil:"{delta} minutes from now",hourUntil:"about an hour from now",hoursUntil:"about {delta} hours from now",dayUntil:"1 day from now",daysUntil:"{delta} days from now"});
-MooTools.lang.set("en-US","FormValidator",{required:"This field is required.",minLength:"Please enter at least {minLength} characters (you entered {length} characters).",maxLength:"Please enter no more than {maxLength} characters (you entered {length} characters).",integer:"Please enter an integer in this field. Numbers with decimals (e.g. 1.25) are not permitted.",numeric:'Please enter only numeric values in this field (i.e. "1" or "1.1" or "-1" or "-1.1").',digits:"Please use numbers and punctuation only in this field (for example, a phone number with dashes or dots is permitted).",alpha:"Please use letters only (a-z) with in this field. No spaces or other characters are allowed.",alphanum:"Please use only letters (a-z) or numbers (0-9) only in this field. No spaces or other characters are allowed.",dateSuchAs:"Please enter a valid date such as {date}",dateInFormatMDY:'Please enter a valid date such as MM/DD/YYYY (i.e. "12/31/1999")',email:'Please enter a valid email addr!
ess. For example "fr...@domain.com".',url:"Please enter a valid URL such as http://www.google.com.",currencyDollar:"Please enter a valid $ amount. For example $100.00 .",oneRequired:"Please enter something for at least one of these inputs.",errorPrefix:"Error: ",warningPrefix:"Warning: ",noSpace:"There can be no spaces in this input.",reqChkByNode:"No items are selected.",requiredChk:"This field is required.",reqChkByName:"Please select a {label}.",match:"This field needs to match the {matchName} field",startDate:"the start date",endDate:"the end date",currendDate:"the current date",afterDate:"The date should be the same or after {label}.",beforeDate:"The date should be the same or before {label}.",startMonth:"Please select a start month",sameMonth:"These two dates must be in the same month - you must change one or the other."});
+if(!this.timer){this.timer=this.scroll.periodical(Math.round(1000/this.options.fps),this);}},scroll:function(){var b=this.element.getSize(),a=this.element.getScroll(),f=this.element!=this.docBody?this.element.getOffsets():{x:0,y:0},c=this.element.getScrollSize(),e={x:0,y:0};
+for(var d in this.page){if(this.page[d]<(this.options.area+f[d])&&a[d]!=0){e[d]=(this.page[d]-this.options.area-f[d])*this.options.velocity;}else{if(this.page[d]+this.options.area>(b[d]+f[d])&&a[d]+b[d]!=c[d]){e[d]=(this.page[d]-b[d]+this.options.area-f[d])*this.options.velocity;
+}}}if(e.y||e.x){this.fireEvent("change",[a.x+e.x,a.y+e.y]);}}});(function(){var a=function(c,b){return(c)?($type(c)=="function"?c(b):b.get(c)):"";};this.Tips=new Class({Implements:[Events,Options],options:{onShow:function(){this.tip.setStyle("display","block");
+},onHide:function(){this.tip.setStyle("display","none");},title:"title",text:function(b){return b.get("rel")||b.get("href");},showDelay:100,hideDelay:100,className:"tip-wrap",offset:{x:16,y:16},windowPadding:{x:0,y:0},fixed:false},initialize:function(){var b=Array.link(arguments,{options:Object.type,elements:$defined});
+this.setOptions(b.options);if(b.elements){this.attach(b.elements);}this.container=new Element("div",{"class":"tip"});},toElement:function(){if(this.tip){return this.tip;
+}return this.tip=new Element("div",{"class":this.options.className,styles:{position:"absolute",top:0,left:0}}).adopt(new Element("div",{"class":"tip-top"}),this.container,new Element("div",{"class":"tip-bottom"})).inject(document.body);
+},attach:function(b){$$(b).each(function(d){var f=a(this.options.title,d),e=a(this.options.text,d);d.erase("title").store("tip:native",f).retrieve("tip:title",f);
+d.retrieve("tip:text",e);this.fireEvent("attach",[d]);var c=["enter","leave"];if(!this.options.fixed){c.push("move");}c.each(function(h){var g=d.retrieve("tip:"+h);
+if(!g){g=this["element"+h.capitalize()].bindWithEvent(this,d);}d.store("tip:"+h,g).addEvent("mouse"+h,g);},this);},this);return this;},detach:function(b){$$(b).each(function(d){["enter","leave","move"].each(function(e){d.removeEvent("mouse"+e,d.retrieve("tip:"+e)).eliminate("tip:"+e);
+});this.fireEvent("detach",[d]);if(this.options.title=="title"){var c=d.retrieve("tip:native");if(c){d.set("title",c);}}},this);return this;},elementEnter:function(c,b){this.container.empty();
+["title","text"].each(function(e){var d=b.retrieve("tip:"+e);if(d){this.fill(new Element("div",{"class":"tip-"+e}).inject(this.container),d);}},this);$clear(this.timer);
+this.timer=(function(){this.show(this,b);this.position((this.options.fixed)?{page:b.getPosition()}:c);}).delay(this.options.showDelay,this);},elementLeave:function(c,b){$clear(this.timer);
+this.timer=this.hide.delay(this.options.hideDelay,this,b);this.fireForParent(c,b);},fireForParent:function(c,b){b=b.getParent();if(!b||b==document.body){return;
+}if(b.retrieve("tip:enter")){b.fireEvent("mouseenter",c);}else{this.fireForParent(c,b);}},elementMove:function(c,b){this.position(c);},position:function(e){if(!this.tip){document.id(this);
+}var c=window.getSize(),b=window.getScroll(),f={x:this.tip.offsetWidth,y:this.tip.offsetHeight},d={x:"left",y:"top"},g={};for(var h in d){g[d[h]]=e.page[h]+this.options.offset[h];
+if((g[d[h]]+f[h]-b[h])>c[h]-this.options.windowPadding[h]){g[d[h]]=e.page[h]-this.options.offset[h]-f[h];}}this.tip.setStyles(g);},fill:function(b,c){if(typeof c=="string"){b.set("html",c);
+}else{b.adopt(c);}},show:function(b){if(!this.tip){document.id(this);}this.fireEvent("show",[this.tip,b]);},hide:function(b){if(!this.tip){document.id(this);
+}this.fireEvent("hide",[this.tip,b]);}});})();MooTools.lang.set("en-US","Date",{months:["January","February","March","April","May","June","July","August","September","October","November","December"],days:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],dateOrder:["month","date","year"],shortDate:"%m/%d/%Y",shortTime:"%I:%M%p",AM:"AM",PM:"PM",ordinal:function(a){return(a>3&&a<21)?"th":["th","st","nd","rd","th"][Math.min(a%10,4)];
+},lessThanMinuteAgo:"less than a minute ago",minuteAgo:"about a minute ago",minutesAgo:"{delta} minutes ago",hourAgo:"about an hour ago",hoursAgo:"about {delta} hours ago",dayAgo:"1 day ago",daysAgo:"{delta} days ago",weekAgo:"1 week ago",weeksAgo:"{delta} weeks ago",monthAgo:"1 month ago",monthsAgo:"{delta} months ago",yearAgo:"1 year ago",yearsAgo:"{delta} years ago",lessThanMinuteUntil:"less than a minute from now",minuteUntil:"about a minute from now",minutesUntil:"{delta} minutes from now",hourUntil:"about an hour from now",hoursUntil:"about {delta} hours from now",dayUntil:"1 day from now",daysUntil:"{delta} days from now",weekUntil:"1 week from now",weeksUntil:"{delta} weeks from now",monthUntil:"1 month from now",monthsUntil:"{delta} months from now",yearUntil:"1 year from now",yearsUntil:"{delta} years from now"});
+MooTools.lang.set("en-US","Form.Validator",{required:"This field is required.",minLength:"Please enter at least {minLength} characters (you entered {length} characters).",maxLength:"Please enter no more than {maxLength} characters (you entered {length} characters).",integer:"Please enter an integer in this field. Numbers with decimals (e.g. 1.25) are not permitted.",numeric:'Please enter only numeric values in this field (i.e. "1" or "1.1" or "-1" or "-1.1").',digits:"Please use numbers and punctuation only in this field (for example, a phone number with dashes or dots is permitted).",alpha:"Please use letters only (a-z) with in this field. No spaces or other characters are allowed.",alphanum:"Please use only letters (a-z) or numbers (0-9) only in this field. No spaces or other characters are allowed.",dateSuchAs:"Please enter a valid date such as {date}",dateInFormatMDY:'Please enter a valid date such as MM/DD/YYYY (i.e. "12/31/1999")',email:'Please enter a valid email add!
ress. For example "fr...@domain.com".',url:"Please enter a valid URL such as http://www.google.com.",currencyDollar:"Please enter a valid $ amount. For example $100.00 .",oneRequired:"Please enter something for at least one of these inputs.",errorPrefix:"Error: ",warningPrefix:"Warning: ",noSpace:"There can be no spaces in this input.",reqChkByNode:"No items are selected.",requiredChk:"This field is required.",reqChkByName:"Please select a {label}.",match:"This field needs to match the {matchName} field",startDate:"the start date",endDate:"the end date",currendDate:"the current date",afterDate:"The date should be the same or after {label}.",beforeDate:"The date should be the same or before {label}.",startMonth:"Please select a start month",sameMonth:"These two dates must be in the same month - you must change one or the other.",creditcard:"The credit card number entered is invalid. Please check the number and try again. {length} digits entered."});

Modified: development/branches/jcamp/media/system/js/validate.js
===================================================================
--- development/branches/jcamp/media/system/js/validate.js 2010-08-31 19:21:09 UTC (rev 18740)
+++ development/branches/jcamp/media/system/js/validate.js 2010-08-31 19:24:28 UTC (rev 18741)
@@ -44,7 +44,7 @@

this.setHandler('email',
function (value) {
- regex=/^[a-zA-Z0-9._-]+@([a-zA-Z0-9.-]+\.)+[a-zA-Z0-9.-]{2,4}$/;
+ regex=/^[a-zA-Z0-9._-]+(\+[a-zA-Z0-9._-]+)*@([a-zA-Z0-9.-]+\.)+[a-zA-Z0-9.-]{2,4}$/;
return regex.test(value);
}
);

Modified: development/branches/jcamp/modules/mod_footer/mod_footer.php
===================================================================
--- development/branches/jcamp/modules/mod_footer/mod_footer.php 2010-08-31 19:21:09 UTC (rev 18740)
+++ development/branches/jcamp/modules/mod_footer/mod_footer.php 2010-08-31 19:24:28 UTC (rev 18741)
@@ -16,14 +16,14 @@
$csite_name = $app->getCfg('sitename');

if (JString::strpos(JText :: _('MOD_FOOTER_LINE1'), '%date%')) {
- $line1 = ereg_replace('%date%', $cur_year, JText :: _('MOD_FOOTER_LINE1'));
+ $line1 = str_replace('%date%', $cur_year, JText :: _('MOD_FOOTER_LINE1'));
}
else {
$line1 = JText :: _('MOD_FOOTER_LINE1');
}

if (JString::strpos($line1, '%sitename%')) {
- $lineone = ereg_replace('%sitename%', $csite_name, $line1);
+ $lineone = str_replace('%sitename%', $csite_name, $line1);
}
else {
$lineone = $line1;

Modified: development/branches/jcamp/modules/mod_random_image/tmpl/default.php
===================================================================
--- development/branches/jcamp/modules/mod_random_image/tmpl/default.php 2010-08-31 19:21:09 UTC (rev 18740)
+++ development/branches/jcamp/modules/mod_random_image/tmpl/default.php 2010-08-31 19:24:28 UTC (rev 18741)
@@ -12,7 +12,7 @@
?>
<div class="random-image<?php echo $params->get('moduleclass_sfx') ?>">
<?php if ($link) : ?>
-<a href="<?php echo $link; ?>" target="_self">
+<a href="<?php echo $link; ?>">
<?php endif; ?>
<?php echo JHTML::_('image',$image->folder.'/'.$image->name, $image->name, array('width' => $image->width, 'height' => $image->height)); ?>
<?php if ($link) : ?>

Modified: development/branches/jcamp/plugins/content/emailcloak/emailcloak.php
===================================================================
--- development/branches/jcamp/plugins/content/emailcloak/emailcloak.php 2010-08-31 19:21:09 UTC (rev 18740)
+++ development/branches/jcamp/plugins/content/emailcloak/emailcloak.php 2010-08-31 19:24:28 UTC (rev 18741)
@@ -11,7 +11,7 @@
jimport('joomla.plugin.plugin');

/**
- * E-mail cloack plugin class.
+ * Email cloack plugin class.
*
* @package Joomla
* @subpackage plg_emailcloak
@@ -38,7 +38,7 @@
/**
* Genarate a search pattern based on link and text.
*
- * @param string The target of an e-mail link.
+ * @param string The target of an email link.
* @param string The text enclosed by the link.
* @return string A regular expression that matches a link containing the parameters.
*/

Modified: development/branches/jcamp/templates/beez5/css/layout.css
===================================================================
--- development/branches/jcamp/templates/beez5/css/layout.css 2010-08-31 19:21:09 UTC (rev 18740)
+++ development/branches/jcamp/templates/beez5/css/layout.css 2010-08-31 19:24:28 UTC (rev 18741)
@@ -1657,7 +1657,7 @@
#form-login label
{
margin-right:10px;
- width:6.8em;
+ width:8.4em;
display:block;
float:left
}
@@ -1709,7 +1709,7 @@
.login-fields label
{
float:left;
- width:6em
+ width:9em
}

.login-description img,

Modified: development/branches/jcamp/templates/beez5/html/com_content/archive/default_items.php
===================================================================
--- development/branches/jcamp/templates/beez5/html/com_content/archive/default_items.php 2010-08-31 19:21:09 UTC (rev 18740)
+++ development/branches/jcamp/templates/beez5/html/com_content/archive/default_items.php 2010-08-31 19:24:28 UTC (rev 18741)
@@ -33,11 +33,23 @@
<?php endif; ?>
</h2>
<?php endif; ?>
-<?php if (($params->get('show_author')) or ($params->get('show_category')) or ($params->get('show_create_date')) or ($params->get('show_modify_date')) or ($params->get('show_publish_date')) or ($params->get('show_hits'))) : ?>
+<?php if (($params->get('show_author')) or ($params->get('show_parent_category')) or ($params->get('show_category')) or ($params->get('show_create_date')) or ($params->get('show_modify_date')) or ($params->get('show_publish_date')) or ($params->get('show_hits'))) : ?>
<dl class="article-info">
<dt class="article-info-term"><?php echo JText::_('COM_CONTENT_ARTICLE_INFO'); ?></dt>
<?php endif; ?>

+<?php if ($params->get('show_parent_category')) : ?>
+ <dd class="parent-category-name">
+ <?php $title = $this->escape($item->parent_title);
+ $url = '<a href="'.JRoute::_(ContentHelperRoute::getCategoryRoute($item->parent_slug)).'">'.$title.'</a>';?>
+ <?php if ($params->get('link_parent_category') && $item->parent_slug) : ?>
+ <?php echo JText::sprintf('COM_CONTENT_PARENT', $url); ?>
+ <?php else : ?>
+ <?php echo JText::sprintf('COM_CONTENT_PARENT', $title); ?>
+ <?php endif; ?>
+ </dd>
+<?php endif; ?>
+
<?php if ($params->get('show_category')) : ?>
<dd class="category-name">
<?php $title = $this->escape($item->category_title);

Modified: development/branches/jcamp/templates/beez5/html/com_content/category/blog_children.php
===================================================================
--- development/branches/jcamp/templates/beez5/html/com_content/category/blog_children.php 2010-08-31 19:21:09 UTC (rev 18740)
+++ development/branches/jcamp/templates/beez5/html/com_content/category/blog_children.php 2010-08-31 19:24:28 UTC (rev 18741)
@@ -38,11 +38,13 @@
<?php echo $this->escape($child->title); ?></a>
</span>

+ <?php if ($this->params->get('show_subcat_desc') == 1) :?>
<?php if ($child->description) : ?>
<div class="category-desc">
<?php echo JHtml::_('content.prepare', $child->description); ?>
</div>
<?php endif; ?>
+ <?php endif; ?>

<?php if ( $this->params->get('show_cat_num_articles',1)) : ?>
<dl>

Modified: development/branches/jcamp/templates/beez5/html/com_content/category/default_articles.php
===================================================================
--- development/branches/jcamp/templates/beez5/html/com_content/category/default_articles.php 2010-08-31 19:21:09 UTC (rev 18740)
+++ development/branches/jcamp/templates/beez5/html/com_content/category/default_articles.php 2010-08-31 19:24:28 UTC (rev 18741)
@@ -34,7 +34,7 @@

<?php else : ?>

-<form action="<?php echo JFilterOutput::ampReplace(JFactory::getURI()->toString()); ?>" method="post" name="adminForm">
+<form action="<?php echo JFilterOutput::ampReplace(JFactory::getURI()->toString()); ?>" method="post" name="adminForm" id="adminForm">
<?php if ($this->params->get('filter_field') != 'hide') : ?>
<fieldset class="filters">
<legend class="element-invisible">

Modified: development/branches/jcamp/templates/beez5/html/com_content/category/default_children.php
===================================================================
--- development/branches/jcamp/templates/beez5/html/com_content/category/default_children.php 2010-08-31 19:21:09 UTC (rev 18740)
+++ development/branches/jcamp/templates/beez5/html/com_content/category/default_children.php 2010-08-31 19:24:28 UTC (rev 18741)
@@ -37,13 +37,13 @@
<span class="item-title"><a href="<?php echo JRoute::_(ContentHelperRoute::getCategoryRoute($child->id));?>">
<?php echo $this->escape($child->title); ?></a>
</span>
-
+ <?php if ($this->params->get('show_subcat_desc') == 1) :?>
<?php if ($child->description and $this->params->get('show_description')!=0 ) : ?>
<div class="category-desc">
<?php echo JHtml::_('content.prepare', $child->description); ?>
</div>
<?php endif; ?>
-
+ <?php endif; ?>
<?php if ($child->getNumItems()==true) : ?>
<dl>
<dt>

Modified: development/branches/jcamp/templates/beez5/html/com_content/form/edit.php
===================================================================
--- development/branches/jcamp/templates/beez5/html/com_content/form/edit.php 2010-08-31 19:21:09 UTC (rev 18740)
+++ development/branches/jcamp/templates/beez5/html/com_content/form/edit.php 2010-08-31 19:24:28 UTC (rev 18741)
@@ -83,7 +83,13 @@
<?php echo $this->form->getLabel('state'); ?>
<?php echo $this->form->getInput('state'); ?>
</div>
+
<div class="formelm">
+ <?php echo $this->form->getLabel('featured'); ?>
+ <?php echo $this->form->getInput('featured'); ?>
+ </div>
+
+ <div class="formelm">
<?php echo $this->form->getLabel('publish_up'); ?>
<?php echo $this->form->getInput('publish_up'); ?>
</div>

Modified: development/branches/jcamp/templates/beez5/javascript/md_stylechanger.js
===================================================================
--- development/branches/jcamp/templates/beez5/javascript/md_stylechanger.js 2010-08-31 19:21:09 UTC (rev 18740)
+++ development/branches/jcamp/templates/beez5/javascript/md_stylechanger.js 2010-08-31 19:24:28 UTC (rev 18741)
@@ -2,22 +2,33 @@
var defaultFontSize =100;
var currentFontSize = defaultFontSize;

-function revertStyles(){
+if (document.addEventListener) {
+ document.addEventListener("DOMContentLoaded", onLoadEvents, false)
+} else {
+ window.onload = onLoadEvents;
+}

+window.onunload = saveSettings;
+
+function onLoadEvents() {
+ setUserOptions();
+ addControls();
+};
+
+function revertStyles() {
currentFontSize = defaultFontSize;
changeFontSize(0);
+};

-}
-
-function toggleColors(){
+function toggleColors() {
if(currentStyle == "White"){
setColor("Black");
}else{
setColor("White");
}
-}
+};

-function changeFontSize(sizeDifference){
+function changeFontSize(sizeDifference) {
currentFontSize = parseInt(currentFontSize) + parseInt(sizeDifference * 5);

if(currentFontSize > 180){
@@ -30,12 +41,10 @@

};

-function setFontSize(fontSize){
+function setFontSize(fontSize) {
var stObj = (document.getElementById) ? document.getElementById('content_area') : document.all('content_area');
document.body.style.fontSize = fontSize + '%';
$('header').style.fontSize=fontSize + '%';
-
- //alert (document.body.style.fontSize);
};


@@ -60,20 +69,16 @@
return null;
};

-window.onload = onLoadEvents;
-
function setUserOptions(){
if(!prefsLoaded){
-
cookie = readCookie("fontSize");
currentFontSize = cookie ? cookie : defaultFontSize;
setFontSize(currentFontSize);

prefsLoaded = true;
}
+};

-}
-
function addControls() {
var container = document.getElementById('fontsize');

@@ -120,16 +125,8 @@

container.appendChild(heading);
container.appendChild(p);
-}
+};

-function onLoadEvents() {
- addControls();
- setUserOptions();
-}
-
-window.onunload = saveSettings;
-
-function saveSettings()
-{
- createCookie("fontSize", currentFontSize, 365);
-}
\ No newline at end of file
+function saveSettings() {
+ createCookie("fontSize", currentFontSize, 365);
+};
\ No newline at end of file

Modified: development/branches/jcamp/templates/beez_20/css/layout.css
===================================================================
--- development/branches/jcamp/templates/beez_20/css/layout.css 2010-08-31 19:21:09 UTC (rev 18740)
+++ development/branches/jcamp/templates/beez_20/css/layout.css 2010-08-31 19:24:28 UTC (rev 18741)
@@ -1666,7 +1666,7 @@
#form-login label
{
margin-right:10px;
- width:6.8em;
+ width:8.4em;
display:block;
float:left
}
@@ -1718,7 +1718,7 @@
.login-fields label
{
float:left;
- width:6em
+ width:9em
}

.login-description img,

Modified: development/branches/jcamp/templates/beez_20/html/com_content/archive/default_items.php
===================================================================
--- development/branches/jcamp/templates/beez_20/html/com_content/archive/default_items.php 2010-08-31 19:21:09 UTC (rev 18740)
+++ development/branches/jcamp/templates/beez_20/html/com_content/archive/default_items.php 2010-08-31 19:24:28 UTC (rev 18741)
@@ -33,11 +33,23 @@
<?php endif; ?>
</h2>
<?php endif; ?>
-<?php if (($params->get('show_author')) or ($params->get('show_category')) or ($params->get('show_create_date')) or ($params->get('show_modify_date')) or ($params->get('show_publish_date')) or ($params->get('show_hits'))) : ?>
+<?php if (($params->get('show_author')) or ($params->get('show_parent_category')) or ($params->get('show_category')) or ($params->get('show_create_date')) or ($params->get('show_modify_date')) or ($params->get('show_publish_date')) or ($params->get('show_hits'))) : ?>
<dl class="article-info">
<dt class="article-info-term"><?php echo JText::_('COM_CONTENT_ARTICLE_INFO'); ?></dt>
<?php endif; ?>

+<?php if ($params->get('show_parent_category')) : ?>
+ <dd class="parent-category-name">
+ <?php $title = $this->escape($item->parent_title);
+ $url = '<a href="'.JRoute::_(ContentHelperRoute::getCategoryRoute($item->parent_slug)).'">'.$title.'</a>';?>
+ <?php if ($params->get('link_parent_category') && $item->parent_slug) : ?>
+ <?php echo JText::sprintf('COM_CONTENT_PARENT', $url); ?>
+ <?php else : ?>
+ <?php echo JText::sprintf('COM_CONTENT_PARENT', $title); ?>
+ <?php endif; ?>
+ </dd>
+<?php endif; ?>
+
<?php if ($params->get('show_category')) : ?>
<dd class="category-name">
<?php $title = $this->escape($item->category_title);

Modified: development/branches/jcamp/templates/beez_20/html/com_content/category/blog_children.php
===================================================================
--- development/branches/jcamp/templates/beez_20/html/com_content/category/blog_children.php 2010-08-31 19:21:09 UTC (rev 18740)
+++ development/branches/jcamp/templates/beez_20/html/com_content/category/blog_children.php 2010-08-31 19:24:28 UTC (rev 18741)
@@ -36,12 +36,13 @@
<span class="item-title"><a href="<?php echo JRoute::_(ContentHelperRoute::getCategoryRoute($child->id));?>">
<?php echo $this->escape($child->title); ?></a>
</span>
-
+ <?php if ($this->params->get('show_subcat_desc') == 1) :?>
<?php if ($child->description and $this->params->get('show_description')!=0 ) : ?>
<div class="category-desc">
<?php echo JHtml::_('content.prepare', $child->description); ?>
</div>
<?php endif; ?>
+ <?php endif; ?>

<?php if ( $this->params->get('show_cat_num_articles',1)) : ?>
<dl>

Modified: development/branches/jcamp/templates/beez_20/html/com_content/category/default_articles.php
===================================================================
--- development/branches/jcamp/templates/beez_20/html/com_content/category/default_articles.php 2010-08-31 19:21:09 UTC (rev 18740)
+++ development/branches/jcamp/templates/beez_20/html/com_content/category/default_articles.php 2010-08-31 19:24:28 UTC (rev 18741)
@@ -34,7 +34,7 @@

<?php else : ?>

-<form action="<?php echo JFilterOutput::ampReplace(JFactory::getURI()->toString()); ?>" method="post" name="adminForm">
+<form action="<?php echo JFilterOutput::ampReplace(JFactory::getURI()->toString()); ?>" method="post" name="adminForm" id="adminForm">
<?php if ($this->params->get('filter_field') != 'hide') : ?>
<fieldset class="filters">
<legend class="element-invisible">

Modified: development/branches/jcamp/templates/beez_20/html/com_content/category/default_children.php
===================================================================
--- development/branches/jcamp/templates/beez_20/html/com_content/category/default_children.php 2010-08-31 19:21:09 UTC (rev 18740)
+++ development/branches/jcamp/templates/beez_20/html/com_content/category/default_children.php 2010-08-31 19:24:28 UTC (rev 18741)
@@ -37,13 +37,13 @@
<span class="item-title"><a href="<?php echo JRoute::_(ContentHelperRoute::getCategoryRoute($child->id));?>">
<?php echo $this->escape($child->title); ?></a>
</span>
-
+ <?php if ($this->params->get('show_subcat_desc') == 1) :?>
<?php if ($child->description and $this->params->get('show_description')!=0 ) : ?>
<div class="category-desc">
<?php echo JHtml::_('content.prepare', $child->description); ?>
</div>
<?php endif; ?>
-
+ <?php endif; ?>
<?php if ($child->getNumItems()==true) : ?>
<dl>
<dt>

Modified: development/branches/jcamp/templates/beez_20/html/com_content/form/edit.php
===================================================================
--- development/branches/jcamp/templates/beez_20/html/com_content/form/edit.php 2010-08-31 19:21:09 UTC (rev 18740)
+++ development/branches/jcamp/templates/beez_20/html/com_content/form/edit.php 2010-08-31 19:24:28 UTC (rev 18741)
@@ -83,7 +83,13 @@
<?php echo $this->form->getLabel('state'); ?>
<?php echo $this->form->getInput('state'); ?>
</div>
+
<div class="formelm">
+ <?php echo $this->form->getLabel('featured'); ?>
+ <?php echo $this->form->getInput('featured'); ?>
+ </div>
+
+ <div class="formelm">
<?php echo $this->form->getLabel('publish_up'); ?>
<?php echo $this->form->getInput('publish_up'); ?>
</div>

Modified: development/branches/jcamp/templates/beez_20/javascript/md_stylechanger.js
===================================================================
--- development/branches/jcamp/templates/beez_20/javascript/md_stylechanger.js 2010-08-31 19:21:09 UTC (rev 18740)
+++ development/branches/jcamp/templates/beez_20/javascript/md_stylechanger.js 2010-08-31 19:24:28 UTC (rev 18741)
@@ -2,22 +2,33 @@
var defaultFontSize =100;
var currentFontSize = defaultFontSize;

-function revertStyles(){
+if (document.addEventListener) {
+ document.addEventListener("DOMContentLoaded", onLoadEvents, false)
+} else {
+ window.onload = onLoadEvents;
+}

+window.onunload = saveSettings;
+
+function onLoadEvents() {
+ setUserOptions();
+ addControls();
+};
+
+function revertStyles() {
currentFontSize = defaultFontSize;
changeFontSize(0);
+};

-}
-
-function toggleColors(){
+function toggleColors() {
if(currentStyle == "White"){
setColor("Black");
}else{
setColor("White");
}
-}
+};

-function changeFontSize(sizeDifference){
+function changeFontSize(sizeDifference) {
currentFontSize = parseInt(currentFontSize) + parseInt(sizeDifference * 5);

if(currentFontSize > 180){
@@ -30,12 +41,10 @@

};

-function setFontSize(fontSize){
+function setFontSize(fontSize) {
var stObj = (document.getElementById) ? document.getElementById('content_area') : document.all('content_area');
document.body.style.fontSize = fontSize + '%';
$('header').style.fontSize=fontSize + '%';
-
- //alert (document.body.style.fontSize);
};


@@ -60,20 +69,16 @@
return null;
};

-window.onload = onLoadEvents;
-
function setUserOptions(){
if(!prefsLoaded){
-
cookie = readCookie("fontSize");
currentFontSize = cookie ? cookie : defaultFontSize;
setFontSize(currentFontSize);

prefsLoaded = true;
}
+};

-}
-
function addControls() {
var container = document.getElementById('fontsize');

@@ -120,16 +125,8 @@

container.appendChild(heading);
container.appendChild(p);
-}
+};

-function onLoadEvents() {
- addControls();
- setUserOptions();
-}
-
-window.onunload = saveSettings;
-
-function saveSettings()
-{
- createCookie("fontSize", currentFontSize, 365);
-}
\ No newline at end of file
+function saveSettings() {
+ createCookie("fontSize", currentFontSize, 365);
+};
\ No newline at end of file

Modified: development/branches/jcamp/templates/rhuk_milkyway/_html/com_contact/category/default.php
===================================================================
--- development/branches/jcamp/templates/rhuk_milkyway/_html/com_contact/category/default.php 2010-08-31 19:21:09 UTC (rev 18740)
+++ development/branches/jcamp/templates/rhuk_milkyway/_html/com_contact/category/default.php 2010-08-31 19:24:28 UTC (rev 18741)
@@ -32,7 +32,7 @@
document.adminForm.submit( task );
}
</script>
-<form action="<?php echo $this->action; ?>" method="post" name="adminForm">
+<form action="<?php echo $this->action; ?>" method="post" name="adminForm" id="adminForm">
<table width="100%" border="0" cellspacing="0" cellpadding="0" align="center">
<thead>
<tr>

Modified: development/branches/jcamp/templates/rhuk_milkyway/_html/com_content/article/form.php
===================================================================
--- development/branches/jcamp/templates/rhuk_milkyway/_html/com_content/article/form.php 2010-08-31 19:21:09 UTC (rev 18740)
+++ development/branches/jcamp/templates/rhuk_milkyway/_html/com_content/article/form.php 2010-08-31 19:24:28 UTC (rev 18741)
@@ -59,7 +59,7 @@
<?php if ($this->params->get('show_page_heading', 1)) : ?>
<div class="componentheading<?php echo $this->escape($this->params->get('pageclass_sfx')); ?>"><?php echo $this->escape($this->params->get('page_title')); ?></div>
<?php endif; ?>
-<form action="<?php echo $this->action ?>" method="post" name="adminForm" onSubmit="setgood();">
+<form action="<?php echo $this->action ?>" method="post" name="adminForm" id="adminForm" onSubmit="setgood();">
<fieldset>
<legend><?php echo JText::_('Editor'); ?></legend>
<table class="adminform" width="100%">

Modified: development/branches/jcamp/templates/rhuk_milkyway/_html/com_content/category/default_items.php
===================================================================
--- development/branches/jcamp/templates/rhuk_milkyway/_html/com_content/category/default_items.php 2010-08-31 19:21:09 UTC (rev 18740)
+++ development/branches/jcamp/templates/rhuk_milkyway/_html/com_content/category/default_items.php 2010-08-31 19:24:28 UTC (rev 18741)
@@ -11,7 +11,7 @@
document.adminForm.submit( task );
}
</script>
-<form action="<?php echo $this->action; ?>" method="post" name="adminForm">
+<form action="<?php echo $this->action; ?>" method="post" name="adminForm" id="adminForm">
<table width="100%" border="0" cellspacing="0" cellpadding="0">
<?php if ($this->params->get('filter') || $this->params->get('show_pagination_limit')) : ?>
<tr>

Modified: development/branches/jcamp/templates/rhuk_milkyway/_html/com_newsfeeds/category/default_items.php
===================================================================
--- development/branches/jcamp/templates/rhuk_milkyway/_html/com_newsfeeds/category/default_items.php 2010-08-31 19:21:09 UTC (rev 18740)
+++ development/branches/jcamp/templates/rhuk_milkyway/_html/com_newsfeeds/category/default_items.php 2010-08-31 19:24:28 UTC (rev 18741)
@@ -1,6 +1,6 @@
<?php // no direct access
defined('_JEXEC') or die; ?>
-<form action="<?php echo JRoute::_('index.php?view=category&id='.$this->category->slug); ?>" method="post" name="adminForm">
+<form action="<?php echo JRoute::_('index.php?view=category&id='.$this->category->slug); ?>" method="post" name="adminForm" id="adminForm">
<table width="100%" border="0" cellspacing="0" cellpadding="0">
<?php if ($this->params->get('show_limit')) : ?>
<tr>

Modified: development/branches/jcamp/templates/rhuk_milkyway/_html/com_weblinks/category/default_items.php
===================================================================
--- development/branches/jcamp/templates/rhuk_milkyway/_html/com_weblinks/category/default_items.php 2010-08-31 19:21:09 UTC (rev 18740)
+++ development/branches/jcamp/templates/rhuk_milkyway/_html/com_weblinks/category/default_items.php 2010-08-31 19:24:28 UTC (rev 18741)
@@ -9,7 +9,7 @@
}
</script>

-<form action="<?php echo JFilterOutput::ampReplace($this->action); ?>" method="post" name="adminForm">
+<form action="<?php echo JFilterOutput::ampReplace($this->action); ?>" method="post" name="adminForm" id="adminForm">
<table width="100%" border="0" cellspacing="0" cellpadding="0">
<tr>
<td align="right" colspan="4">

Modified: development/branches/jcamp/tests/CHANGELOG
===================================================================
--- development/branches/jcamp/tests/CHANGELOG 2010-08-31 19:21:09 UTC (rev 18740)
+++ development/branches/jcamp/tests/CHANGELOG 2010-08-31 19:24:28 UTC (rev 18741)
@@ -27,6 +27,22 @@
- -> Removed
! -> Note

+30-Aug-2010 Mark Dexter
+^ Improve documentation for JUserHelper unit tests (Thanks Niels Braczek!)
+
+29-Aug-2010 Mark Dexter
++ [#20726] Unit tests for JUserHelper
++ [#22021] ACL System Tests
+
+28-Aug-2010 Ian MacLennan
+ # Fixed errors in tests and added mocks to deal with some failures properly
+
+26-Aug-2010 Ian MacLennan
+ + Added unit test for JFormRuleEmail
+
+20-Aug-2010 Mark Dexter
+# Fix control_panel0004Test for category formatting changes
+
06-Aug-2010 Mark Dexter
^ Added new var to configdef.php to allow doInstall to set caching to different values

Modified: development/branches/jcamp/tests/system/SeleniumJoomlaTestCase.php
===================================================================
--- development/branches/jcamp/tests/system/SeleniumJoomlaTestCase.php 2010-08-31 19:21:09 UTC (rev 18740)
+++ development/branches/jcamp/tests/system/SeleniumJoomlaTestCase.php 2010-08-31 19:24:28 UTC (rev 18741)
@@ -10,7 +10,7 @@

class SeleniumJoomlaTestCase extends PHPUnit_Extensions_SeleniumTestCase
{
- public $cfg; // configuration so tests can get at the fields
+ public $cfg; // configuration so tests can get at the fields

public function setUp()
{
@@ -24,6 +24,16 @@
}
echo ".\n" . 'Starting ' . get_class($this) . ".\n";
}
+
+ function checkMessage($message)
+ {
+ try {
+ $this->assertTrue($this->isElementPresent("//dl[@id='system-message'][contains(., '$message')]"), 'Message not displayed or message changed, SeleniumJoomlaTestCase line 31');
+ }
+ catch (PHPUnit_Framework_AssertionFailedError $e){
+ array_push($this->verificationErrors, $this->getTraceFiles($e));
+ }
+ }

function doAdminLogin()
{
@@ -63,29 +73,31 @@
$this->open($cfg->path);
$this->waitForPageToLoad("30000");
}
-
- function doFrontEndLogin()
+
+ function doFrontEndLogin($username = null,$password = null)
{
$cfg = new SeleniumConfig();
+ if(!isset($username))$username=$cfg->username;
+ if(!isset($password))$password=$cfg->password;
// check to see if we are already logged in
if ($this->getValue("Submit") == "Log out")
{
- echo "Logging out before loggin in. \n";
+ echo "Logging out before logging in. \n";
$this->click("Submit");
$this->waitForPageToLoad("30000");
$this->click("link=Home");
$this->waitForPageToLoad("30000");
}
echo "Logging in to front end.\n";
- $this->type("modlgn_username", $cfg->username);
- $this->type("modlgn_passwd", $cfg->password);
+ $this->type("modlgn_username", $username);
+ $this->type("modlgn_passwd", $password);
$this->click("Submit");
$this->waitForPageToLoad("30000");
- }
+ }

function setTinyText($text)
{
- $this->selectFrame("text_ifr");
+ $this->selectFrame("jform_text_ifr");
$this->type("tinymce", $text);
$this->selectFrame("relative=top");
}
@@ -590,7 +602,7 @@

function togglePublished($articleTitle)
{
- echo "Toggling Featured on/off for article " . $articleTitle . "\n";
+ echo "Toggling publishing of article " . $articleTitle . "\n";
$this->click("//table[@class='adminlist']/tbody//tr//td/a[contains(text(), '" .
$articleTitle . "')]/../../td[3]/a");
$this->waitForPageToLoad("30000");

Modified: development/branches/jcamp/tests/system/resetdb.sql
===================================================================
--- development/branches/jcamp/tests/system/resetdb.sql 2010-08-31 19:21:09 UTC (rev 18740)
+++ development/branches/jcamp/tests/system/resetdb.sql 2010-08-31 19:24:28 UTC (rev 18741)
@@ -348,7 +348,7 @@
(15, 'Can Joomla! 1.5 operate with PHP Safe Mode On?', 'can-joomla-15-operate-with-php-safe-mode-on', '', '<p>Yes it can! This is a significant security improvement.</p><p>The <em>safe mode</em> limits PHP to be able to perform actions only on files/folders who''s owner is the same as PHP is currently using (this is usually ''apache''). As files normally are created either by the Joomla! application or by FTP access, the combination of PHP file actions and the FTP Layer allows Joomla! to operate in PHP Safe Mode.</p>', '', 1, 3, 0, 31, '2008-08-06 19:28:35', 62, '', '2008-08-06 19:28:35', 62, 0, '0000-00-00 00:00:00', '2006-10-05 14:00:00', '0000-00-00 00:00:00', '', '', 'show_title=\nlink_titles=\nshow_intro=\nshow_section=\nlink_section=\nshow_category=\nlink_category=\nshow_vote=\nshow_author=\nshow_create_date=\nshow_modify_date=\nshow_pdf_icon=\nshow_print_icon=\nshow_email_icon=\nlanguage=\nkeyref=\nreadmore=', 7, 0, 4, '', '', 0, 8, 'robots=\nauthor='),
(16, 'Only one edit window! How do I create "Read more..."?', 'only-one-edit-window-how-do-i-create-read-more', '', '<p>This is now implemented by inserting a <strong>Read more...</strong> tag (the button is located below the editor area) a dotted line appears in the edited text showing the split location for the <em>Read more....</em> A new Plugin takes care of the rest.</p><p>It is worth mentioning that this does not have a negative effect on migrated data from older sites. The new implementation is fully backward compatible.</p>', '', 1, 3, 0, 28, '2008-08-06 19:29:28', 62, '', '2008-08-06 19:29:28', 62, 0, '0000-00-00 00:00:00', '2006-10-05 14:00:00', '0000-00-00 00:00:00', '', '', 'show_title=\nlink_titles=\nshow_intro=\nshow_section=\nlink_section=\nshow_category=\nlink_category=\nshow_vote=\nshow_author=\nshow_create_date=\nshow_modify_date=\nshow_pdf_icon=\nshow_print_icon=\nshow_email_icon=\nlanguage=\nkeyref=\nreadmore=', 7, 0, 4, '', '', 0, 20, 'robots=\nauthor='!
),
(17, 'My MySQL database does not support UTF-8. Do I have a problem?', 'my-mysql-database-does-not-support-utf-8-do-i-have-a-problem', '', 'No you don''t. Versions of MySQL lower than 4.1 do not have built in UTF-8 support. However, Joomla! 1.5 has made provisions for backward compatibility and is able to use UTF-8 on older databases. Let the installer take care of all the settings and there is no need to make any changes to the database (charset, collation, or any other).', '', 1, 3, 0, 31, '2008-08-07 09:30:37', 62, '', '2008-08-07 09:30:37', 62, 0, '0000-00-00 00:00:00', '2006-10-05 20:00:00', '0000-00-00 00:00:00', '', '', 'show_title=\nlink_titles=\nshow_intro=\nshow_section=\nlink_section=\nshow_category=\nlink_category=\nshow_vote=\nshow_author=\nshow_create_date=\nshow_modify_date=\nshow_pdf_icon=\nshow_print_icon=\nshow_email_icon=\nlanguage=\nkeyref=\nreadmore=', 10, 0, 7, '', '', 0, 9, 'robots=\nauthor='),
-(18, 'Joomla! Features', 'joomla-features', '', '<h4><font color="#ff6600">Joomla! features:</font></h4> <ul><li>Completely database driven site engines </li><li>News, products, or services sections fully editable and manageable</li><li>Topics sections can be added to by contributing Authors </li><li>Fully customisable layouts including <em>left</em>, <em>center</em>, and <em>right </em>Menu boxes </li><li>Browser upload of images to your own library for use anywhere in the site </li><li>Dynamic Forum/Poll/Voting booth for on-the-spot results </li><li>Runs on Linux, FreeBSD, MacOSX server, Solaris, and AIX', ' </li></ul> <h4>Extensive Administration:</h4> <ul><li>Change order of objects including news, FAQs, Articles etc. </li><li>Random Newsflash generator </li><li>Remote Author submission Module for News, Articles, FAQs, and Links </li><li>Object hierarchy - as many Sections, departments, divisions, and pages as you want </li><li>Image library - store all your PNGs, PDFs!
, DOCs, XLSs, GIFs, and JPEGs online for easy use </li><li>Automatic Path-Finder. Place a picture and let Joomla! fix the link </li><li>News Feed Manager. Easily integrate news feeds into your Web site.</li><li>E-mail a friend and Print format available for every story and Article </li><li>In-line Text editor similar to any basic word processor software </li><li>User editable look and feel </li><li>Polls/Surveys - Now put a different one on each page </li><li>Custom Page Modules. Download custom page Modules to spice up your site </li><li>Template Manager. Download Templates and implement them in seconds </li><li>Layout preview. See how it looks before going live </li><li>Banner Manager. Make money out of your site.</li></ul>', 1, 4, 0, 29, '2008-08-08 23:32:45', 62, '', '2008-08-08 23:32:45', 62, 0, '0000-00-00 00:00:00', '2006-10-07 06:00:00', '0000-00-00 00:00:00', '', '', 'show_title=\nlink_titles=\nshow_intro=\nshow_section=\nlink_section=\nshow_category=\nlink_categor!
y=\nshow_vote=\nshow_author=\nshow_create_date=\nshow_modify_d!
ate=\nsh
ow_pdf_icon=\nshow_print_icon=\nshow_email_icon=\nlanguage=\nkeyref=\nreadmore=', 11, 0, 4, '', '', 0, 59, 'robots=\nauthor='),
+(18, 'Joomla! Features', 'joomla-features', '', '<h4><font color="#ff6600">Joomla! features:</font></h4> <ul><li>Completely database driven site engines </li><li>News, products, or services sections fully editable and manageable</li><li>Topics sections can be added to by contributing Authors </li><li>Fully customisable layouts including <em>left</em>, <em>center</em>, and <em>right </em>Menu boxes </li><li>Browser upload of images to your own library for use anywhere in the site </li><li>Dynamic Forum/Poll/Voting booth for on-the-spot results </li><li>Runs on Linux, FreeBSD, MacOSX server, Solaris, and AIX', ' </li></ul> <h4>Extensive Administration:</h4> <ul><li>Change order of objects including news, FAQs, Articles etc. </li><li>Random Newsflash generator </li><li>Remote Author submission Module for News, Articles, FAQs, and Links </li><li>Object hierarchy - as many Sections, departments, divisions, and pages as you want </li><li>Image library - store all your PNGs, PDFs!
, DOCs, XLSs, GIFs, and JPEGs online for easy use </li><li>Automatic Path-Finder. Place a picture and let Joomla! fix the link </li><li>News Feed Manager. Easily integrate news feeds into your Web site.</li><li>Email a friend and Print format available for every story and Article </li><li>In-line Text editor similar to any basic word processor software </li><li>User editable look and feel </li><li>Polls/Surveys - Now put a different one on each page </li><li>Custom Page Modules. Download custom page Modules to spice up your site </li><li>Template Manager. Download Templates and implement them in seconds </li><li>Layout preview. See how it looks before going live </li><li>Banner Manager. Make money out of your site.</li></ul>', 1, 4, 0, 29, '2008-08-08 23:32:45', 62, '', '2008-08-08 23:32:45', 62, 0, '0000-00-00 00:00:00', '2006-10-07 06:00:00', '0000-00-00 00:00:00', '', '', 'show_title=\nlink_titles=\nshow_intro=\nshow_section=\nlink_section=\nshow_category=\nlink_category!
=\nshow_vote=\nshow_author=\nshow_create_date=\nshow_modify_da!
te=\nsho
w_pdf_icon=\nshow_print_icon=\nshow_email_icon=\nlanguage=\nkeyref=\nreadmore=', 11, 0, 4, '', '', 0, 59, 'robots=\nauthor='),
(19, 'Joomla! Overview', 'joomla-overview', '', '<p>If you''re new to Web publishing systems, you''ll find that Joomla! delivers sophisticated solutions to your online needs. It can deliver a robust enterprise-level Web site, empowered by endless extensibility for your bespoke publishing needs. Moreover, it is often the system of choice for small business or home users who want a professional looking site that''s simple to deploy and use. <em>We do content right</em>.<br /> </p><p>So what''s the catch? How much does this system cost?</p><p> Well, there''s good news ... and more good news! Joomla! 1.5 is free, it is released under an Open Source license - the GNU/General Public License v 2.0. Had you invested in a mainstream, commercial alternative, there''d be nothing but moths left in your wallet and to add new functionality would probably mean taking out a second mortgage each time you wanted something adding!</p><p>Joomla! changes all that ... <br />Joomla! is different !
from the normal models for content management software. For a start, it''s not complicated. Joomla! has been developed for everybody, and anybody can develop it further. It is designed to work (primarily) with other Open Source, free, software such as PHP, MySQL, and Apache. </p><p>It is easy to install and administer, and is reliable. </p><p>Joomla! doesn''t even require the user or administrator of the system to know HTML to operate it once it''s up and running.</p><p>To get the perfect Web site with all the functionality that you require for your particular application may take additional time and effort, but with the Joomla! Community support that is available and the many Third Party Developers actively creating and releasing new Extensions for the 1.5 platform on an almost daily basis, there is likely to be something out there to meet your needs. Or you could develop your own Extensions and make these available to the rest of the community. </p>', '', 1, 4, 0, 29, '20!
08-08-09 07:49:20', 62, '', '2008-08-09 07:49:20', 62, 0, '000!
0-00-00
00:00:00', '2006-10-07 10:00:00', '0000-00-00 00:00:00', '', '', 'show_title=\nlink_titles=\nshow_intro=\nshow_section=\nlink_section=\nshow_category=\nlink_category=\nshow_vote=\nshow_author=\nshow_create_date=\nshow_modify_date=\nshow_pdf_icon=\nshow_print_icon=\nshow_email_icon=\nlanguage=\nkeyref=\nreadmore=', 13, 0, 2, '', '', 0, 150, 'robots=\nauthor='),
(20, 'Support and Documentation', 'support-and-documentation', '', '<h1>Support </h1><p>Support for the Joomla! CMS can be found on several places. The best place to start would be the <a href="http://docs.joomla.org/" target="_blank" title="Joomla! Official Documentation Wiki">Joomla! Official Documentation Wiki</a>. Here you can help yourself to the information that is regularly published and updated as Joomla! develops. There is much more to come too!</p> <p>Of course you should not forget the Help System of the CMS itself. On the <em>topmenu </em>in the Back-end Control panel you find the Help button which will provide you with lots of explanation on features.</p> <p>Another great place would of course be the <a href="http://forum.joomla.org/" target="_blank" title="Forum">Forum</a> . On the Joomla! Forum you can find help and support from Community members as well as from Joomla! Core members and Working Group members. The forum contains a lot of information, FAQ''s, j!
ust about anything you are looking for in terms of support.</p> <p>Two other resources for Support are the <a href="http://developer.joomla.org/" target="_blank" title="Joomla! Developer Site">Joomla! Developer Site</a> and the <a href="http://extensions.joomla.org/" target="_blank" title="Joomla! Extensions Directory">Joomla! Extensions Directory</a> (JED). The Joomla! Developer Site provides lots of technical information for the experienced Developer as well as those new to Joomla! and development work in general. The JED whilst not a support site in the strictest sense has many of the Extensions that you will need as you develop your own Web site.</p> <p>The Joomla! Developers and Bug Squad members are regularly posting their blog reports about several topics such as programming techniques and security issues.</p> <h1>Documentation</h1> <p>Joomla! Documentation can of course be found on the <a href="http://docs.joomla.org/" target="_blank" title="Joomla! Official Documen!
tation Wiki">Joomla! Official Documentation Wiki</a>. You can !
find inf
ormation for beginners, installation, upgrade, Frequently Asked Questions, developer topics, and a lot more. The Documentation Team helps oversee the wiki but you are invited to contribute content, as well.</p> <p>There are also books written about Joomla! You can find a listing of these books in the <a href="http://shop.joomla.org/" target="_blank" title="Joomla! Shop">Joomla! Shop</a>.</p>', '', 1, 4, 0, 25, '2008-08-09 08:33:57', 62, '', '2008-08-09 08:33:57', 62, 0, '0000-00-00 00:00:00', '2006-10-07 10:00:00', '0000-00-00 00:00:00', '', '', 'show_title=\nlink_titles=\nshow_intro=\nshow_section=\nlink_section=\nshow_category=\nlink_category=\nshow_vote=\nshow_author=\nshow_create_date=\nshow_modify_date=\nshow_pdf_icon=\nshow_print_icon=\nshow_email_icon=\nlanguage=\nkeyref=\nreadmore=', 13, 0, 1, '', '', 0, 6, 'robots=\nauthor='),
(21, 'Joomla! Facts', 'joomla-facts', '', '<p>Here are some interesting facts about Joomla!</p><ul><li><span>Over 210,000 active registered Users on the <a href="http://forum.joomla.org" target="_blank" title="Joomla Forums">Official Joomla! community forum</a> and more on the many international community sites.</span><ul><li><span>over 1,000,000 posts in over 200,000 topics</span></li><li>over 1,200 posts per day</li><li>growing at 150 new participants each day!</li></ul></li><li><span>1168 Projects on the JoomlaCode (<a href="http://joomlacode.org/" target="_blank" title="JoomlaCode">joomlacode.org</a> ). All for open source addons by third party developers.</span><ul><li><span>Well over 6,000,000 downloads of Joomla! since the migration to JoomlaCode in March 2007.<br /></span></li></ul></li><li><span>Nearly 4,000 extensions for Joomla! have been registered on the <a href="http://extensions.joomla.org" target="_blank" title="http://extensions.joomla.org">Joomla! Extensio!
n Directory</a> </span></li><li><span>Joomla.org exceeds 2 TB of traffic per month!</span></li></ul>', '', 1, 4, 0, 30, '2008-08-09 16:46:37', 62, '', '2008-08-09 16:46:37', 62, 0, '0000-00-00 00:00:00', '2006-10-07 14:00:00', '0000-00-00 00:00:00', '', '', 'show_title=\nlink_titles=\nshow_intro=\nshow_section=\nlink_section=\nshow_category=\nlink_category=\nshow_vote=\nshow_author=\nshow_create_date=\nshow_modify_date=\nshow_pdf_icon=\nshow_print_icon=\nshow_email_icon=\nlanguage=\nkeyref=\nreadmore=', 13, 0, 1, '', '', 0, 50, 'robots=\nauthor='),
@@ -356,7 +356,7 @@
(23, 'Platforms and Open Standards', 'platforms-and-open-standards', '', '<p class="MsoNormal">Joomla! runs on any platform including Windows, most flavours of Linux, several Unix versions, and the Apple OS/X platform. Joomla! depends on PHP and the MySQL database to deliver dynamic content. </p> <p class="MsoNormal">The minimum requirements are:</p> <ul><li>Apache 1.x, 2.x and higher</li><li>PHP 4.3 and higher</li><li>MySQL 3.23 and higher</li></ul>It will also run on alternative server platforms such as Windows IIS - provided they support PHP and MySQL - but these require additional configuration in order for the Joomla! core package to be successful installed and operated.', '', 1, 4, 0, 25, '2008-08-11 04:22:14', 62, '', '2008-08-11 04:22:14', 62, 0, '0000-00-00 00:00:00', '2006-10-10 08:00:00', '0000-00-00 00:00:00', '', '', 'show_title=\nlink_titles=\nshow_intro=\nshow_section=\nlink_section=\nshow_category=\nlink_category=\nshow_vote=\nshow_author=\!
nshow_create_date=\nshow_modify_date=\nshow_pdf_icon=\nshow_print_icon=\nshow_email_icon=\nlanguage=\nkeyref=\nreadmore=', 7, 0, 3, '', '', 0, 11, 'robots=\nauthor='),
(24, 'Content Layouts', 'content-layouts', '', '<p>Joomla! provides plenty of flexibility when displaying your Web content. Whether you are using Joomla! for a blog site, news or a Web site for a company, you''ll find one or more content styles to showcase your information. You can also change the style of content dynamically depending on your preferences. Joomla! calls how a page is laid out a <strong>layout</strong>. Use the guide below to understand which layouts are available and how you might use them. </p> <h2>Content </h2> <p>Joomla! makes it extremely easy to add and display content. All content is placed where your mainbody tag in your template is located. There are three main types of layouts available in Joomla! and all of them can be customised via parameters. The display and parameters are set in the Menu Item used to display the content your working on. You create these layouts by creating a Menu Item and choosing how you want the content to display.</p> <h3>!
Blog Layout<br /> </h3> <p>Blog layout will show a listing of all Articles of the selected blog type (Section or Category) in the mainbody position of your template. It will give you the standard title, and Intro of each Article in that particular Category and/or Section. You can customise this layout via the use of the Preferences and Parameters, (See Article Parameters) this is done from the Menu not the Section Manager!</p> <h3>Blog Archive Layout<br /> </h3> <p>A Blog Archive layout will give you a similar output of Articles as the normal Blog Display but will add, at the top, two drop down lists for month and year plus a search button to allow Users to search for all Archived Articles from a specific month and year.</p> <h3>List Layout<br /> </h3> <p>Table layout will simply give you a <em>tabular </em>list<em> </em>of all the titles in that particular Section or Category. No Intro text will be displayed just the titles. You can set how many titles will be displayed in!
this table by Parameters. The table layout will also provide !
a filter
Section so that Users can reorder, filter, and set how many titles are listed on a single page (up to 50)</p> <h2>Wrapper</h2> <p>Wrappers allow you to place stand alone applications and Third Party Web sites inside your Joomla! site. The content within a Wrapper appears within the primary content area defined by the "mainbody" tag and allows you to display their content as a part of your own site. A Wrapper will place an IFRAME into the content Section of your Web site and wrap your standard template navigation around it so it appears in the same way an Article would.</p> <h2>Content Parameters</h2> <p>The parameters for each layout type can be found on the right hand side of the editor boxes in the Menu Item configuration screen. The parameters available depend largely on what kind of layout you are configuring.</p>', '', 1, 4, 0, 29, '2008-08-12 22:33:10', 62, '', '2008-08-12 22:33:10', 62, 0, '0000-00-00 00:00:00', '2006-10-11 06:00:00', '0000-00-00 00:00:00', '', '', '!
show_title=\nlink_titles=\nshow_intro=\nshow_section=\nlink_section=\nshow_category=\nlink_category=\nshow_vote=\nshow_author=\nshow_create_date=\nshow_modify_date=\nshow_pdf_icon=\nshow_print_icon=\nshow_email_icon=\nlanguage=\nkeyref=\nreadmore=', 11, 0, 5, '', '', 0, 70, 'robots=\nauthor='),
(25, 'What are the requirements to run Joomla! 1.5?', 'what-are-the-requirements-to-run-joomla-15', '', '<p>Joomla! runs on the PHP pre-processor. PHP comes in many flavours, for a lot of operating systems. Beside PHP you will need a Web server. Joomla! is optimized for the Apache Web server, but it can run on different Web servers like Microsoft IIS it just requires additional configuration of PHP and MySQL. Joomla! also depends on a database, for this currently you can only use MySQL. </p>Many people know from their own experience that it''s not easy to install an Apache Web server and it gets harder if you want to add MySQL, PHP and Perl. XAMPP, WAMP, and MAMP are easy to install distributions containing Apache, MySQL, PHP and Perl for the Windows, Mac OSX and Linux operating systems. These packages are for localhost installations on non-public servers only.<br />The minimum version requirements are:<br /><ul><li>Apache 1.x or 2.x</li><li>PHP 4.3 or up</li><li>MySQL 3.23!
or up</li></ul>For the latest minimum requirements details, see <a href="http://www.joomla.org/about-joomla/technical-requirements.html" target="_blank" title="Joomla! Technical Requirements">Joomla! Technical Requirements</a>.', '', 1, 3, 0, 31, '2008-08-11 00:42:31', 62, '', '2008-08-11 00:42:31', 62, 0, '0000-00-00 00:00:00', '2006-10-10 06:00:00', '0000-00-00 00:00:00', '', '', 'show_title=\nlink_titles=\nshow_intro=\nshow_section=\nlink_section=\nshow_category=\nlink_category=\nshow_vote=\nshow_author=\nshow_create_date=\nshow_modify_date=\nshow_pdf_icon=\nshow_print_icon=\nshow_email_icon=\nlanguage=\nkeyref=\nreadmore=', 6, 0, 5, '', '', 0, 25, 'robots=\nauthor='),
-(26, 'Extensions', 'extensions', '', '<p>Out of the box, Joomla! does a great job of managing the content needed to make your Web site sing. But for many people, the true power of Joomla! lies in the application framework that makes it possible for developers all around the world to create powerful add-ons that are called <strong>Extensions</strong>. An Extension is used to add capabilities to Joomla! that do not exist in the base core code. Here are just some examples of the hundreds of available Extensions:</p> <ul> <li>Dynamic form builders</li> <li>Business or organisational directories</li> <li>Document management</li> <li>Image and multimedia galleries</li> <li>E-commerce and shopping cart engines</li> <li>Forums and chat software</li> <li>Calendars</li> <li>E-mail newsletters</li> <li>Data collection and reporting tools</li> <li>Banner advertising systems</li> <li>Paid subscription services</li> <li>and many, many, more</li> </ul> <p>You can f!
ind more examples over at our ever growing <a href="http://extensions.joomla.org" target="_blank" title="Joomla! Extensions Directory">Joomla! Extensions Directory</a>. Prepare to be amazed at the amount of exciting work produced by our active developer community!</p><p>A useful guide to the Extension site can be found at:<br /><a href="http://extensions.joomla.org/content/view/15/63/" target="_blank" title="Guide to the Joomla! Extension site">http://extensions.joomla.org/content/view/15/63/</a> </p> <h3>Types of Extensions </h3><p>There are five types of extensions:</p> <ul> <li>Components</li> <li>Modules</li> <li>Templates</li> <li>Plugins</li> <li>Languages</li> </ul> <p>You can read more about the specifics of these using the links in the Article Index - a Table of Contents (yet another useful feature of Joomla!) - at the top right or by clicking on the <strong>Next </strong>link below.<br /> </p> <hr title="Components" class="system-pagebreak" /> <h3><img s!
rc="images/stories/ext_com.png" border="0" alt="Component - Jo!
omla! Ex
tension Directory" title="Component - Joomla! Extension Directory" width="17" height="17" /> Components</h3> <p>A Component is the largest and most complex of the Extension types. Components are like mini-applications that render the main body of the page. An analogy that might make the relationship easier to understand would be that Joomla! is a book and all the Components are chapters in the book. The core Article Component (<font face="courier new,courier">com_content</font>), for example, is the mini-application that handles all core Article rendering just as the core registration Component (<font face="courier new,courier">com_user</font>) is the mini-application that handles User registration.</p> <p>Many of Joomla!''s core features are provided by the use of default Components such as:</p> <ul> <li>Contacts</li> <li>Front Page</li> <li>News Feeds</li> <li>Banners</li> <li>Mass Mail</li> <li>Polls</li></ul><p>A Component will manage data, set display!
s, provide functions, and in general can perform any operation that does not fall under the general functions of the core code.</p> <p>Components work hand in hand with Modules and Plugins to provide a rich variety of content display and functionality aside from the standard Article and content display. They make it possible to completely transform Joomla! and greatly expand its capabilities.</p> <hr title="Modules" class="system-pagebreak" /> <h3><img src="images/stories/ext_mod.png" border="0" alt="Module - Joomla! Extension Directory" title="Module - Joomla! Extension Directory" width="17" height="17" /> Modules</h3> <p>A more lightweight and flexible Extension used for page rendering is a Module. Modules are used for small bits of the page that are generally less complex and able to be seen across different Components. To continue in our book analogy, a Module can be looked at as a footnote or header block, or perhaps an image/caption block that can be rendered on !
a particular page. Obviously you can have a footnote on any pa!
ge but
not all pages will have them. Footnotes also might appear regardless of which chapter you are reading. Simlarly Modules can be rendered regardless of which Component you have loaded.</p> <p>Modules are like little mini-applets that can be placed anywhere on your site. They work in conjunction with Components in some cases and in others are complete stand alone snippets of code used to display some data from the database such as Articles (Newsflash) Modules are usually used to output data but they can also be interactive form items to input data for example the Login Module or Polls.</p> <p>Modules can be assigned to Module positions which are defined in your Template and in the back-end using the Module Manager and editing the Module Position settings. For example, "left" and "right" are common for a 3 column layout. </p> <h4>Displaying Modules</h4> <p>Each Module is assigned to a Module position on your site. If you wish it to display in two different locations you must c!
opy the Module and assign the copy to display at the new location. You can also set which Menu Items (and thus pages) a Module will display on, you can select all Menu Items or you can pick and choose by holding down the control key and selecting multiple locations one by one in the Modules [Edit] screen</p> <p>Note: Your Main Menu is a Module! When you create a new Menu in the Menu Manager you are actually copying the Main Menu Module (<font face="courier new,courier">mod_mainmenu</font>) code and giving it the name of your new Menu. When you copy a Module you do not copy all of its parameters, you simply allow Joomla! to use the same code with two separate settings.</p> <h4>Newsflash Example</h4> <p>Newsflash is a Module which will display Articles from your site in an assignable Module position. It can be used and configured to display one Category, all Categories, or to randomly choose Articles to highlight to Users. It will display as much of an Article as you set, and!
will show a <em>Read more...</em> link to take the User to th!
e full A
rticle.</p> <p>The Newsflash Component is particularly useful for things like Site News or to show the latest Article added to your Web site.</p> <hr title="Plugins" class="system-pagebreak" /> <h3><img src="images/stories/ext_plugin.png" border="0" alt="Plugin - Joomla! Extension Directory" title="Plugin - Joomla! Extension Directory" width="17" height="17" /> Plugins</h3> <p>One of the more advanced Extensions for Joomla! is the Plugin. In previous versions of Joomla! Plugins were known as Mambots. Aside from changing their name their functionality has been expanded. A Plugin is a section of code that runs when a pre-defined event happens within Joomla!. Editors are Plugins, for example, that execute when the Joomla! event <font face="courier new,courier">onGetEditorArea</font> occurs. Using a Plugin allows a developer to change the way their code behaves depending upon which Plugins are installed to react to an event.</p> <hr title="Languages" class="system-pagebr!
eak" /> <h3><img src="images/stories/ext_lang.png" border="0" alt="Language - Joomla! Extensions Directory" title="Language - Joomla! Extensions Directory" width="17" height="17" /> Languages</h3> <p>New to Joomla! 1.5 and perhaps the most basic and critical Extension is a Language. Joomla! is released with multiple Installation Languages but the base Site and Administrator are packaged in just the one Language <strong>en-GB</strong> - being English with GB spelling for example. To include all the translations currently available would bloat the core package and make it unmanageable for uploading purposes. The Language files enable all the User interfaces both Front-end and Back-end to be presented in the local preferred language. Note these packs do not have any impact on the actual content such as Articles. </p> <p>More information on languages is available from the <br /> <a href="http://community.joomla.org/translations.html" target="_blank" title="Joomla! Translatio!
n Teams">http://community.joomla.org/translations.html</a></p>!
', '', 1
, 4, 0, 29, '2008-08-11 06:00:00', 62, '', '2008-08-11 06:00:00', 62, 0, '0000-00-00 00:00:00', '2006-10-10 22:00:00', '0000-00-00 00:00:00', '', '', 'show_title=\nlink_titles=\nshow_intro=\nshow_section=\nlink_section=\nshow_category=\nlink_category=\nshow_vote=\nshow_author=\nshow_create_date=\nshow_modify_date=\nshow_pdf_icon=\nshow_print_icon=\nshow_email_icon=\nlanguage=\nkeyref=\nreadmore=', 24, 0, 3, 'About Joomla!, General, Extensions', '', 0, 102, 'robots=\nauthor=');
+(26, 'Extensions', 'extensions', '', '<p>Out of the box, Joomla! does a great job of managing the content needed to make your Web site sing. But for many people, the true power of Joomla! lies in the application framework that makes it possible for developers all around the world to create powerful add-ons that are called <strong>Extensions</strong>. An Extension is used to add capabilities to Joomla! that do not exist in the base core code. Here are just some examples of the hundreds of available Extensions:</p> <ul> <li>Dynamic form builders</li> <li>Business or organisational directories</li> <li>Document management</li> <li>Image and multimedia galleries</li> <li>E-commerce and shopping cart engines</li> <li>Forums and chat software</li> <li>Calendars</li> <li>Email newsletters</li> <li>Data collection and reporting tools</li> <li>Banner advertising systems</li> <li>Paid subscription services</li> <li>and many, many, more</li> </ul> <p>You can fi!
nd more examples over at our ever growing <a href="http://extensions.joomla.org" target="_blank" title="Joomla! Extensions Directory">Joomla! Extensions Directory</a>. Prepare to be amazed at the amount of exciting work produced by our active developer community!</p><p>A useful guide to the Extension site can be found at:<br /><a href="http://extensions.joomla.org/content/view/15/63/" target="_blank" title="Guide to the Joomla! Extension site">http://extensions.joomla.org/content/view/15/63/</a> </p> <h3>Types of Extensions </h3><p>There are five types of extensions:</p> <ul> <li>Components</li> <li>Modules</li> <li>Templates</li> <li>Plugins</li> <li>Languages</li> </ul> <p>You can read more about the specifics of these using the links in the Article Index - a Table of Contents (yet another useful feature of Joomla!) - at the top right or by clicking on the <strong>Next </strong>link below.<br /> </p> <hr title="Components" class="system-pagebreak" /> <h3><img sr!
c="images/stories/ext_com.png" border="0" alt="Component - Joo!
mla! Ext
ension Directory" title="Component - Joomla! Extension Directory" width="17" height="17" /> Components</h3> <p>A Component is the largest and most complex of the Extension types. Components are like mini-applications that render the main body of the page. An analogy that might make the relationship easier to understand would be that Joomla! is a book and all the Components are chapters in the book. The core Article Component (<font face="courier new,courier">com_content</font>), for example, is the mini-application that handles all core Article rendering just as the core registration Component (<font face="courier new,courier">com_user</font>) is the mini-application that handles User registration.</p> <p>Many of Joomla!''s core features are provided by the use of default Components such as:</p> <ul> <li>Contacts</li> <li>Front Page</li> <li>News Feeds</li> <li>Banners</li> <li>Mass Mail</li> <li>Polls</li></ul><p>A Component will manage data, set displays!
, provide functions, and in general can perform any operation that does not fall under the general functions of the core code.</p> <p>Components work hand in hand with Modules and Plugins to provide a rich variety of content display and functionality aside from the standard Article and content display. They make it possible to completely transform Joomla! and greatly expand its capabilities.</p> <hr title="Modules" class="system-pagebreak" /> <h3><img src="images/stories/ext_mod.png" border="0" alt="Module - Joomla! Extension Directory" title="Module - Joomla! Extension Directory" width="17" height="17" /> Modules</h3> <p>A more lightweight and flexible Extension used for page rendering is a Module. Modules are used for small bits of the page that are generally less complex and able to be seen across different Components. To continue in our book analogy, a Module can be looked at as a footnote or header block, or perhaps an image/caption block that can be rendered on a!
particular page. Obviously you can have a footnote on any pag!
e but n
ot all pages will have them. Footnotes also might appear regardless of which chapter you are reading. Simlarly Modules can be rendered regardless of which Component you have loaded.</p> <p>Modules are like little mini-applets that can be placed anywhere on your site. They work in conjunction with Components in some cases and in others are complete stand alone snippets of code used to display some data from the database such as Articles (Newsflash) Modules are usually used to output data but they can also be interactive form items to input data for example the Login Module or Polls.</p> <p>Modules can be assigned to Module positions which are defined in your Template and in the back-end using the Module Manager and editing the Module Position settings. For example, "left" and "right" are common for a 3 column layout. </p> <h4>Displaying Modules</h4> <p>Each Module is assigned to a Module position on your site. If you wish it to display in two different locations you must co!
py the Module and assign the copy to display at the new location. You can also set which Menu Items (and thus pages) a Module will display on, you can select all Menu Items or you can pick and choose by holding down the control key and selecting multiple locations one by one in the Modules [Edit] screen</p> <p>Note: Your Main Menu is a Module! When you create a new Menu in the Menu Manager you are actually copying the Main Menu Module (<font face="courier new,courier">mod_mainmenu</font>) code and giving it the name of your new Menu. When you copy a Module you do not copy all of its parameters, you simply allow Joomla! to use the same code with two separate settings.</p> <h4>Newsflash Example</h4> <p>Newsflash is a Module which will display Articles from your site in an assignable Module position. It can be used and configured to display one Category, all Categories, or to randomly choose Articles to highlight to Users. It will display as much of an Article as you set, and !
will show a <em>Read more...</em> link to take the User to the!
full Ar
ticle.</p> <p>The Newsflash Component is particularly useful for things like Site News or to show the latest Article added to your Web site.</p> <hr title="Plugins" class="system-pagebreak" /> <h3><img src="images/stories/ext_plugin.png" border="0" alt="Plugin - Joomla! Extension Directory" title="Plugin - Joomla! Extension Directory" width="17" height="17" /> Plugins</h3> <p>One of the more advanced Extensions for Joomla! is the Plugin. In previous versions of Joomla! Plugins were known as Mambots. Aside from changing their name their functionality has been expanded. A Plugin is a section of code that runs when a pre-defined event happens within Joomla!. Editors are Plugins, for example, that execute when the Joomla! event <font face="courier new,courier">onGetEditorArea</font> occurs. Using a Plugin allows a developer to change the way their code behaves depending upon which Plugins are installed to react to an event.</p> <hr title="Languages" class="system-pagebre!
ak" /> <h3><img src="images/stories/ext_lang.png" border="0" alt="Language - Joomla! Extensions Directory" title="Language - Joomla! Extensions Directory" width="17" height="17" /> Languages</h3> <p>New to Joomla! 1.5 and perhaps the most basic and critical Extension is a Language. Joomla! is released with multiple Installation Languages but the base Site and Administrator are packaged in just the one Language <strong>en-GB</strong> - being English with GB spelling for example. To include all the translations currently available would bloat the core package and make it unmanageable for uploading purposes. The Language files enable all the User interfaces both Front-end and Back-end to be presented in the local preferred language. Note these packs do not have any impact on the actual content such as Articles. </p> <p>More information on languages is available from the <br /> <a href="http://community.joomla.org/translations.html" target="_blank" title="Joomla! Translation!
Teams">http://community.joomla.org/translations.html</a></p>'!
, '', 1,
4, 0, 29, '2008-08-11 06:00:00', 62, '', '2008-08-11 06:00:00', 62, 0, '0000-00-00 00:00:00', '2006-10-10 22:00:00', '0000-00-00 00:00:00', '', '', 'show_title=\nlink_titles=\nshow_intro=\nshow_section=\nlink_section=\nshow_category=\nlink_category=\nshow_vote=\nshow_author=\nshow_create_date=\nshow_modify_date=\nshow_pdf_icon=\nshow_print_icon=\nshow_email_icon=\nlanguage=\nkeyref=\nreadmore=', 24, 0, 3, 'About Joomla!, General, Extensions', '', 0, 102, 'robots=\nauthor=');
INSERT INTO `jos_content` (`id`, `title`, `alias`, `title_alias`, `introtext`, `fulltext`, `state`, `sectionid`, `mask`, `catid`, `created`, `created_by`, `created_by_alias`, `modified`, `modified_by`, `checked_out`, `checked_out_time`, `publish_up`, `publish_down`, `images`, `urls`, `attribs`, `version`, `parentid`, `ordering`, `metakey`, `metadesc`, `access`, `hits`, `metadata`) VALUES
(27, 'The Joomla! Community', 'the-joomla-community', '', '<p><strong>Got a question? </strong>With more than 210,000 members, the Joomla! Discussion Forums at <a href="http://forum.joomla.org/" target="_blank" title="Forums">forum.joomla.org</a> are a great resource for both new and experienced users. Ask your toughest questions the community is waiting to see what you''ll do with your Joomla! site.</p><p><strong>Do you want to show off your new Joomla! Web site?</strong> Visit the <a href="http://forum.joomla.org/viewforum.php?f=514" target="_blank" title="Site Showcase">Site Showcase</a> section of our forum.</p><p><strong>Do you want to contribute?</strong></p><p>If you think working with Joomla is fun, wait until you start working on it. We''re passionate about helping Joomla users become contributors. There are many ways you can help Joomla''s development:</p><ul> <li>Submit news about Joomla. We syndicate Joomla-related news on <a href="http://news.joomla.org" targe!
t="_blank" title="JoomlaConnect">JoomlaConnect<sup>TM</sup></a>. If you have Joomla news that you would like to share with the community, find out how to get connected <a href="http://community.joomla.org/connect.html" target="_blank" title="JoomlaConnect">here</a>.</li> <li>Report bugs and request features in our <a href="http://joomlacode.org/gf/project/joomla/tracker/" target="_blank" title="Joomla! developement trackers">trackers</a>. Please read <a href="http://docs.joomla.org/Filing_bugs_and_issues" target="_blank" title="Reporting Bugs">Reporting Bugs</a>, for details on how we like our bug reports served up</li><li>Submit patches for new and/or fixed behaviour. Please read <a href="http://docs.joomla.org/Patch_submission_guidelines" target="_blank" title="Submitting Patches">Submitting Patches</a>, for details on how to submit a patch.</li><li>Join the <a href="http://forum.joomla.org/viewforum.php?f=509" target="_blank" title="Joomla! development forums">developer!
forums</a> and share your ideas for how to improve Joomla. We!
''re alw
ays open to suggestions, although we''re likely to be sceptical of large-scale suggestions without some code to back it up.</li><li>Join any of the <a href="http://www.joomla.org/about-joomla/the-project/working-groups.html" target="_blank" title="Joomla! working groups">Joomla Working Groups</a> and bring your personal expertise to the Joomla community. </li></ul><p>These are just a few ways you can contribute. See <a href="http://www.joomla.org/about-joomla/contribute-to-joomla.html" target="_blank" title="Contribute">Contribute to Joomla</a> for many more ways.</p>', '', 1, 4, 0, 30, '2008-08-12 16:50:48', 62, '', '2008-08-12 16:50:48', 62, 0, '0000-00-00 00:00:00', '2006-10-11 02:00:00', '0000-00-00 00:00:00', '', '', 'show_title=\nlink_titles=\nshow_intro=\nshow_section=\nlink_section=\nshow_category=\nlink_category=\nshow_vote=\nshow_author=\nshow_create_date=\nshow_modify_date=\nshow_pdf_icon=\nshow_print_icon=\nshow_email_icon=\nlanguage=\nkeyref=\nreadmore=', 12,!
0, 2, '', '', 0, 52, 'robots=\nauthor='),
(28, 'How do I install Joomla! 1.5?', 'how-do-i-install-joomla-15', '', '<p>Installing of Joomla! 1.5 is pretty easy. We assume you have set-up your Web site, and it is accessible with your browser.<br /><br />Download Joomla! 1.5, unzip it and upload/copy the files into the directory you Web site points to, fire up your browser and enter your Web site address and the installation will start. </p><p>For full details on the installation processes check out the <a href="http://help.joomla.org/content/category/48/268/302" target="_blank" title="Joomla! 1.5 Installation Manual">Installation Manual</a> on the <a href="http://help.joomla.org" target="_blank" title="Joomla! Help Site">Joomla! Help Site</a> where you will also find download instructions for a PDF version too. </p>', '', 1, 3, 0, 31, '2008-08-11 01:10:59', 62, '', '2008-08-11 01:10:59', 62, 0, '0000-00-00 00:00:00', '2006-10-10 06:00:00', '0000-00-00 00:00:00', '', '', 'show_title=\nlink_titles=\nshow_intro=\nshow_!
section=\nlink_section=\nshow_category=\nlink_category=\nshow_vote=\nshow_author=\nshow_create_date=\nshow_modify_date=\nshow_pdf_icon=\nshow_print_icon=\nshow_email_icon=\nlanguage=\nkeyref=\nreadmore=', 5, 0, 3, '', '', 0, 5, 'robots=\nauthor='),

Modified: development/branches/jcamp/tests/system/suite/TestSuite.php
===================================================================
--- development/branches/jcamp/tests/system/suite/TestSuite.php 2010-08-31 19:21:09 UTC (rev 18740)
+++ development/branches/jcamp/tests/system/suite/TestSuite.php 2010-08-31 19:24:28 UTC (rev 18741)
@@ -20,7 +20,9 @@
require_once 'control_panel/control_panel0004Test.php';
require_once 'control_panel/control_panel0005Test.php';
require_once 'menus/menu0001Test.php';
+require_once 'menus/menu0002Test.php';
require_once 'articles/article0001Test.php';
+require_once 'articles/article0002Test.php';
require_once 'articles/featured0001Test.php';
require_once 'articles/featured0002Test.php';
require_once 'com_users/user0001Test.php';
@@ -33,6 +35,7 @@
require_once 'acl/acl0001Test.php';
require_once 'acl/acl0002Test.php';
require_once 'acl/acl0003Test.php';
+require_once 'acl/acl0004Test.php';
require_once 'language/language0001Test.php';


@@ -53,7 +56,9 @@
$suite->addTestSuite('ControlPanel0004');
$suite->addTestSuite('ControlPanel0005');
$suite->addTestSuite('Menu0001');
+ $suite->addTestSuite('Menu0002');
$suite->addTestSuite('Article0001');
+ $suite->addTestSuite('Article0002');
$suite->addTestSuite('Featured0001Test');
$suite->addTestSuite('Featured0002Test');
$suite->addTestSuite('User0001Test');
@@ -66,7 +71,8 @@
$suite->addTestSuite('Acl0001Test');
$suite->addTestSuite('Acl0002Test');
$suite->addTestSuite('DoInstall');
- $suite->addTestSuite('Acl0003Test');
+ $suite->addTestSuite('Acl0003Test');
+ $suite->addTestSuite('Acl0004Test');
$suite->addTestSuite('Language0001Test');

return $suite;

Modified: development/branches/jcamp/tests/system/suite/control_panel/control_panel0004Test.php
===================================================================
--- development/branches/jcamp/tests/system/suite/control_panel/control_panel0004Test.php 2010-08-31 19:21:09 UTC (rev 18740)
+++ development/branches/jcamp/tests/system/suite/control_panel/control_panel0004Test.php 2010-08-31 19:24:28 UTC (rev 18741)
@@ -79,18 +79,41 @@
$this->select("filter_published", "label=- Select State -");
$this->clickGo();
$this->waitForPageToLoad("30000");
-
print("Check that new category is not shown." . "\n");
$this->assertFalse($this->isTextPresent("Functional Test Category"));
print("Check that reordering still works." . "\n");
+ print("Move Modules category down one." . "\n");
+ $this->click("//table[@class='adminlist']/tbody//tr//td/a[contains(text(), 'Modules')]/../../td//a[@title='Move Down']");
+ $this->waitForPageToLoad("30000");
+ $this->assertTrue($this->isElementPresent("//dl[@id='system-message'][contains(., 'success')]"));
+ print("Check that Templates and Modules categories are in new order." . "\n");
+ $this->assertContains("Templates", $this->getTable("//table[@class='adminlist'].5.1"));
+ $this->assertContains("Beez 20", $this->getTable("//table[@class='adminlist'].6.1"));
+ $this->assertContains("Beez5", $this->getTable("//table[@class='adminlist'].7.1"));
+ $this->assertContains("Atomic", $this->getTable("//table[@class='adminlist'].8.1"));
+ $this->assertContains("Milky Way", $this->getTable("//table[@class='adminlist'].9.1"));
+ $this->assertContains("Modules", $this->getTable("//table[@class='adminlist'].10.1"));
+ $this->assertContains("Content Modules", $this->getTable("//table[@class='adminlist'].11.1"));
+ $this->assertContains("User Modules", $this->getTable("//table[@class='adminlist'].12.1"));
+ $this->assertContains("Display Modules", $this->getTable("//table[@class='adminlist'].13.1"));
+ $this->assertContains("Utility Modules", $this->getTable("//table[@class='adminlist'].14.1"));
+ $this->assertContains("Menu Module", $this->getTable("//table[@class='adminlist'].15.1"));
print("Move Modules category up one." . "\n");
$this->click("//table[@class='adminlist']/tbody//tr//td/a[contains(text(), 'Modules')]/../../td//a[@title='Move Up']");
$this->waitForPageToLoad("30000");
$this->assertTrue($this->isElementPresent("//dl[@id='system-message'][contains(., 'success')]"));
- print("Move Modules category down one." . "\n");
- $this->click("//table[@class='adminlist']/tbody//tr//td/a[contains(text(), 'Modules')]/../../td//a[@title='Move Down']");
- $this->waitForPageToLoad("30000");
- $this->assertTrue($this->isElementPresent("//dl[@id='system-message'][contains(., 'success')]"));
+ print("Check that Templates and Modules categories are in original order." . "\n");
+ $this->assertContains("Templates", $this->getTable("//table[@class='adminlist'].11.1"));
+ $this->assertContains("Beez 20", $this->getTable("//table[@class='adminlist'].12.1"));
+ $this->assertContains("Beez5", $this->getTable("//table[@class='adminlist'].13.1"));
+ $this->assertContains("Atomic", $this->getTable("//table[@class='adminlist'].14.1"));
+ $this->assertContains("Milky Way", $this->getTable("//table[@class='adminlist'].15.1"));
+ $this->assertContains("Modules", $this->getTable("//table[@class='adminlist'].5.1"));
+ $this->assertContains("Content Modules", $this->getTable("//table[@class='adminlist'].6.1"));
+ $this->assertContains("User Modules", $this->getTable("//table[@class='adminlist'].7.1"));
+ $this->assertContains("Display Modules", $this->getTable("//table[@class='adminlist'].8.1"));
+ $this->assertContains("Utility Modules", $this->getTable("//table[@class='adminlist'].9.1"));
+ $this->assertContains("Menu Module", $this->getTable("//table[@class='adminlist'].10.1"));
$this->doAdminLogout();
print("Finished control_panel0004Test.php/testCreateRemoveCategory." . "\n");

@@ -135,11 +158,11 @@
$this->assertFalse($this->isElementPresent("//input[@class='text-area-order'][@disabled='disabled']"));

echo "Check initial ordering of categories\n";
- $this->assertEquals("Components (Alias: components)", $this->getTable("//table[@class=\"adminlist\"].4.1"));
- $this->assertEquals("Modules (Alias: modules)", $this->getTable("//table[@class=\"adminlist\"].5.1"));
- $this->assertEquals("Templates (Alias: templates)", $this->getTable("//table[@class=\"adminlist\"].11.1"));
- $this->assertEquals("Languages (Alias: languages)", $this->getTable("//table[@class=\"adminlist\"].16.1"));
- $this->assertEquals("Plugins (Alias: plugins)", $this->getTable("//table[@class=\"adminlist\"].17.1"));
+ $this->assertContains("Components", $this->getTable("//table[@class=\"adminlist\"].4.1"));
+ $this->assertContains("Modules", $this->getTable("//table[@class=\"adminlist\"].5.1"));
+ $this->assertContains("Templates", $this->getTable("//table[@class=\"adminlist\"].11.1"));
+ $this->assertContains("Languages", $this->getTable("//table[@class=\"adminlist\"].16.1"));
+ $this->assertContains("Plugins", $this->getTable("//table[@class=\"adminlist\"].17.1"));

echo "change the order of categories and click Save Order\n";
$this->type("//div[@id='element-box']/div[2]/form/table/tbody/tr[4]/td[4]/input", "5");
@@ -151,11 +174,11 @@
$this->waitForPageToLoad("30000");

echo "check that orders have changed\n";
- $this->assertEquals("Plugins (Alias: plugins)", $this->getTable("//table[@class=\"adminlist\"].4.1"));
- $this->assertEquals("Languages (Alias: languages)", $this->getTable("//table[@class=\"adminlist\"].5.1"));
- $this->assertEquals("Templates (Alias: templates)", $this->getTable("//table[@class=\"adminlist\"].6.1"));
- $this->assertEquals("Modules (Alias: modules)", $this->getTable("//table[@class=\"adminlist\"].11.1"));
- $this->assertEquals("Components (Alias: components)", $this->getTable("//table[@class=\"adminlist\"].17.1"));
+ $this->assertContains("Plugins ", $this->getTable("//table[@class=\"adminlist\"].4.1"));
+ $this->assertContains("Languages", $this->getTable("//table[@class=\"adminlist\"].5.1"));
+ $this->assertContains("Templates", $this->getTable("//table[@class=\"adminlist\"].6.1"));
+ $this->assertContains("Modules", $this->getTable("//table[@class=\"adminlist\"].11.1"));
+ $this->assertContains("Components", $this->getTable("//table[@class=\"adminlist\"].17.1"));
$this->assertTrue($this->isElementPresent("//dl[@id='system-message'][contains(., 'success')]"));

echo "put the categories back in the original order and click Save Order\n";
@@ -169,22 +192,22 @@

echo "Check for success message and that order has been put back to original\n";
$this->assertTrue($this->isElementPresent("//dl[@id='system-message'][contains(., 'success')]"));
- $this->assertEquals("Components (Alias: components)", $this->getTable("//table[@class=\"adminlist\"].4.1"));
- $this->assertEquals("Modules (Alias: modules)", $this->getTable("//table[@class=\"adminlist\"].5.1"));
- $this->assertEquals("Templates (Alias: templates)", $this->getTable("//table[@class=\"adminlist\"].11.1"));
- $this->assertEquals("Languages (Alias: languages)", $this->getTable("//table[@class=\"adminlist\"].16.1"));
- $this->assertEquals("Plugins (Alias: plugins)", $this->getTable("//table[@class=\"adminlist\"].17.1"));
+ $this->assertContains("Components", $this->getTable("//table[@class=\"adminlist\"].4.1"));
+ $this->assertContains("Modules", $this->getTable("//table[@class=\"adminlist\"].5.1"));
+ $this->assertContains("Templates", $this->getTable("//table[@class=\"adminlist\"].11.1"));
+ $this->assertContains("Languages", $this->getTable("//table[@class=\"adminlist\"].16.1"));
+ $this->assertContains("Plugins", $this->getTable("//table[@class=\"adminlist\"].17.1"));

echo "Try pressing save order with no form changes\n";
$this->click("//a[contains(@href, 'saveorder')][@class = 'saveorder']");
$this->waitForPageToLoad("30000");
echo "Check that there is no success message and that orders haven't changed\n";
$this->assertFalse($this->isElementPresent("//dl[@id='system-message'][contains(., 'success')]"));
- $this->assertEquals("Components (Alias: components)", $this->getTable("//table[@class=\"adminlist\"].4.1"));
- $this->assertEquals("Modules (Alias: modules)", $this->getTable("//table[@class=\"adminlist\"].5.1"));
- $this->assertEquals("Templates (Alias: templates)", $this->getTable("//table[@class=\"adminlist\"].11.1"));
- $this->assertEquals("Languages (Alias: languages)", $this->getTable("//table[@class=\"adminlist\"].16.1"));
- $this->assertEquals("Plugins (Alias: plugins)", $this->getTable("//table[@class=\"adminlist\"].17.1"));
+ $this->assertContains("Components", $this->getTable("//table[@class=\"adminlist\"].4.1"));
+ $this->assertContains("Modules", $this->getTable("//table[@class=\"adminlist\"].5.1"));
+ $this->assertContains("Templates", $this->getTable("//table[@class=\"adminlist\"].11.1"));
+ $this->assertContains("Languages", $this->getTable("//table[@class=\"adminlist\"].16.1"));
+ $this->assertContains("Plugins", $this->getTable("//table[@class=\"adminlist\"].17.1"));
$this->doAdminLogout();
print("Finished control_panel0004Test.php/testCategorySaveOrder." . "\n");
}
@@ -234,10 +257,10 @@
$this->assertTrue($this->isElementPresent("//input[@class='text-area-order']"));
$this->assertTrue($this->isElementPresent("//span[@class='state downarrow']"));
echo "Check the starting order of the menu items\n";
- $this->assertEquals("Single Article (Alias: single-article)", $this->getTable("//table[@class='adminlist'].6.1"));
- $this->assertEquals("Article Categories (Alias: article-categories)", $this->getTable("//table[@class='adminlist'].7.1"));
- $this->assertEquals("Article Category Blog (Alias: article-category-blog)", $this->getTable("//table[@class='adminlist'].8.1"));
- $this->assertEquals("Article Category List (Alias: article-category-list)", $this->getTable("//table[@class='adminlist'].9.1"));
+ $this->assertContains("Single Article", $this->getTable("//table[@class='adminlist'].6.1"));
+ $this->assertContains("Article Categories", $this->getTable("//table[@class='adminlist'].7.1"));
+ $this->assertContains("Article Category Blog", $this->getTable("//table[@class='adminlist'].8.1"));
+ $this->assertContains("Article Category List", $this->getTable("//table[@class='adminlist'].9.1"));

echo "Reverse the order of 4 articles\n";
$this->type("//div[@id='element-box']/div[2]/form/table/tbody/tr[6]/td[4]/input", "4");
@@ -248,10 +271,10 @@
$this->click("//a[contains(@href, 'saveorder')][@class = 'saveorder']");
$this->waitForPageToLoad("30000");
$this->assertTrue($this->isElementPresent("//dl[@id='system-message'][contains(., 'success')]"));
- $this->assertEquals("Single Article (Alias: single-article)", $this->getTable("//table[@class='adminlist'].9.1"));
- $this->assertEquals("Article Categories (Alias: article-categories)", $this->getTable("//table[@class='adminlist'].8.1"));
- $this->assertEquals("Article Category Blog (Alias: article-category-blog)", $this->getTable("//table[@class='adminlist'].7.1"));
- $this->assertEquals("Article Category List (Alias: article-category-list)", $this->getTable("//table[@class='adminlist'].6.1"));
+ $this->assertContains("Single Article", $this->getTable("//table[@class='adminlist'].9.1"));
+ $this->assertContains("Article Categories", $this->getTable("//table[@class='adminlist'].8.1"));
+ $this->assertContains("Article Category Blog", $this->getTable("//table[@class='adminlist'].7.1"));
+ $this->assertContains("Article Category List", $this->getTable("//table[@class='adminlist'].6.1"));

echo "Change the ordering back and click Save Order\n";
$this->type("//div[@id='element-box']/div[2]/form/table/tbody/tr[6]/td[4]/input", "4");
@@ -263,21 +286,113 @@

echo "Check the ordering is back to original order\n";
$this->assertTrue($this->isElementPresent("//dl[@id='system-message'][contains(., 'success')]"));
- $this->assertEquals("Single Article (Alias: single-article)", $this->getTable("//table[@class='adminlist'].6.1"));
- $this->assertEquals("Article Categories (Alias: article-categories)", $this->getTable("//table[@class='adminlist'].7.1"));
- $this->assertEquals("Article Category Blog (Alias: article-category-blog)", $this->getTable("//table[@class='adminlist'].8.1"));
- $this->assertEquals("Article Category List (Alias: article-category-list)", $this->getTable("//table[@class='adminlist'].9.1"));
+ $this->assertContains("Single Article", $this->getTable("//table[@class='adminlist'].6.1"));
+ $this->assertContains("Article Categories", $this->getTable("//table[@class='adminlist'].7.1"));
+ $this->assertContains("Article Category Blog", $this->getTable("//table[@class='adminlist'].8.1"));
+ $this->assertContains("Article Category List", $this->getTable("//table[@class='adminlist'].9.1"));

echo "Click Save Order when nothing has been changed and make sure it doesn't to anything\n";
$this->click("//a[contains(@href, 'saveorder')][@class = 'saveorder']");
$this->waitForPageToLoad("30000");
$this->assertFalse($this->isElementPresent("//dl[@id='system-message'][contains(., 'success')]"));
- $this->assertEquals("Single Article (Alias: single-article)", $this->getTable("//table[@class='adminlist'].6.1"));
- $this->assertEquals("Article Categories (Alias: article-categories)", $this->getTable("//table[@class='adminlist'].7.1"));
- $this->assertEquals("Article Category Blog (Alias: article-category-blog)", $this->getTable("//table[@class='adminlist'].8.1"));
- $this->assertEquals("Article Category List (Alias: article-category-list)", $this->getTable("//table[@class='adminlist'].9.1"));
+ $this->assertContains("Single Article", $this->getTable("//table[@class='adminlist'].6.1"));
+ $this->assertContains("Article Categories", $this->getTable("//table[@class='adminlist'].7.1"));
+ $this->assertContains("Article Category Blog", $this->getTable("//table[@class='adminlist'].8.1"));
+ $this->assertContains("Article Category List", $this->getTable("//table[@class='adminlist'].9.1"));
echo "Done with control_panel0004Test/testMenuItemSaveOrder\n";
$this->doAdminLogout();
}
+
+ function testMenuItemOrderUpDown()
+ {
+ echo "Starting testMenuItemOrderUpDown\n";
+ $this->setUp();
+ $this->gotoAdmin();
+ $this->doAdminLogin();
+ echo "Navigate to Menu Items -> About Joomla menu\n";
+ $this->click("link=About Joomla");
+ $this->waitForPageToLoad("30000");
+
+ echo "Check that Contact Component and Content Component Menu Items are in original order\n";
+ $this->assertContains("Contact Component", $this->getTable("//table[@class='adminlist'].13.1"));
+ $this->assertContains("Contact Categories", $this->getTable("//table[@class='adminlist'].14.1"));
+ $this->assertContains("Contact Single Category", $this->getTable("//table[@class='adminlist'].15.1"));
+ $this->assertContains("Single Contact", $this->getTable("//table[@class='adminlist'].16.1"));
+ $this->assertContains("Featured Contacts", $this->getTable("//table[@class='adminlist'].17.1"));
+ $this->assertContains("Content Component", $this->getTable("//table[@class='adminlist'].5.1"));
+ $this->assertContains("Single Article", $this->getTable("//table[@class='adminlist'].6.1"));
+ $this->assertContains("Article Categories", $this->getTable("//table[@class='adminlist'].7.1"));
+ $this->assertContains("Article Category Blog", $this->getTable("//table[@class='adminlist'].8.1"));
+ $this->assertContains("Article Category List", $this->getTable("//table[@class='adminlist'].9.1"));
+ $this->assertContains("Featured Articles", $this->getTable("//table[@class='adminlist'].10.1"));
+
+ echo "Move Content Component Menu Item Down One\n";
+ $this->click("//table[@class='adminlist']/tbody//tr//td/a[contains(text(), 'Content Component')]/../../td//a[@title='Move Down']");
+ $this->waitForPageToLoad("30000");
+ $this->assertTrue($this->isElementPresent("//dl[@id='system-message'][contains(., 'success')]"));
+ echo "Check that Contact Component and Content Component Menu Items are in new order\n";
+ $this->assertContains("Contact Component", $this->getTable("//table[@class='adminlist'].5.1"));
+ $this->assertContains("Contact Categories", $this->getTable("//table[@class='adminlist'].6.1"));
+ $this->assertContains("Contact Single Category", $this->getTable("//table[@class='adminlist'].7.1"));
+ $this->assertContains("Single Contact", $this->getTable("//table[@class='adminlist'].8.1"));
+ $this->assertContains("Featured Contacts", $this->getTable("//table[@class='adminlist'].9.1"));
+ $this->assertContains("Content Component", $this->getTable("//table[@class='adminlist'].10.1"));
+ $this->assertContains("Single Article", $this->getTable("//table[@class='adminlist'].11.1"));
+ $this->assertContains("Article Categories", $this->getTable("//table[@class='adminlist'].12.1"));
+ $this->assertContains("Article Category Blog", $this->getTable("//table[@class='adminlist'].13.1"));
+ $this->assertContains("Article Category List", $this->getTable("//table[@class='adminlist'].14.1"));
+ $this->assertContains("Featured Articles", $this->getTable("//table[@class='adminlist'].15.1"));
+
+ echo "Move Content Component Menu Item Up One\n";
+ $this->click("//table[@class='adminlist']/tbody//tr//td/a[contains(text(), 'Content Component')]/../../td//a[@title='Move Up']");
+ $this->waitForPageToLoad("30000");
+ $this->assertTrue($this->isElementPresent("//dl[@id='system-message'][contains(., 'success')]"));
+ echo "Check that Contact Component and Content Component Menu Items are in original order\n";
+ $this->assertContains("Contact Component", $this->getTable("//table[@class='adminlist'].13.1"));
+ $this->assertContains("Contact Categories", $this->getTable("//table[@class='adminlist'].14.1"));
+ $this->assertContains("Contact Single Category", $this->getTable("//table[@class='adminlist'].15.1"));
+ $this->assertContains("Single Contact", $this->getTable("//table[@class='adminlist'].16.1"));
+ $this->assertContains("Featured Contacts", $this->getTable("//table[@class='adminlist'].17.1"));
+ $this->assertContains("Content Component", $this->getTable("//table[@class='adminlist'].5.1"));
+ $this->assertContains("Single Article", $this->getTable("//table[@class='adminlist'].6.1"));
+ $this->assertContains("Article Categories", $this->getTable("//table[@class='adminlist'].7.1"));
+ $this->assertContains("Article Category Blog", $this->getTable("//table[@class='adminlist'].8.1"));
+ $this->assertContains("Article Category List", $this->getTable("//table[@class='adminlist'].9.1"));
+ $this->assertContains("Featured Articles", $this->getTable("//table[@class='adminlist'].10.1"));
+
+ echo "Move Getting Started menu item down one\n";
+ $this->click("//table[@class='adminlist']/tbody//tr//td/a[contains(text(), 'Getting started')]/../../td//a[@title='Move Down']");
+ $this->waitForPageToLoad("30000");
+ $this->assertTrue($this->isElementPresent("//dl[@id='system-message'][contains(., 'success')]"));
+ echo "Check that Using Joomla! is now in first row\n";
+ $this->assertContains("Using Joomla!", $this->getTable("//table[@class='adminlist'].1.1"));
+ echo "Move Gettingi Started back up one\n";
+ $this->select("limit", "label=All");
+ $this->waitForPageToLoad("30000");
+ $this->click("//table[@class='adminlist']/tbody//tr//td/a[contains(text(), 'Getting started')]/../../td//a[@title='Move Up']");
+ $this->waitForPageToLoad("30000");
+ $this->assertTrue($this->isElementPresent("//dl[@id='system-message'][contains(., 'success')]"));
+ echo "Check that Getting started is now in first row\n";
+ $this->assertContains("Getting started", $this->getTable("//table[@class='adminlist'].1.1"));
+ $this->select("limit", "label=20");
+ $this->waitForPageToLoad("30000");
+
+ echo "Test moving Weblinks categories\n";
+ $this->click("//ul[@id='menu-weblinks']/li[2]/a");
+ $this->waitForPageToLoad("30000");
+ echo "Move weblinks Uncatgorised up\n";
+ $this->click("//table[@class='adminlist']/tbody//tr//td/a[contains(text(), 'Uncategorised')]/../../td//a[@title='Move Up']");
+ $this->waitForPageToLoad("30000");
+ $this->assertTrue($this->isElementPresent("//dl[@id='system-message'][contains(., 'success')]"));
+ $this->assertContains("Uncategorised", $this->getTable("//table[@class='adminlist'].1.1"));
+ echo "Move weblinks Uncatgorised back down\n";
+ $this->click("//table[@class='adminlist']/tbody//tr//td/a[contains(text(), 'Uncategorised')]/../../td//a[@title='Move Down']");
+ $this->waitForPageToLoad("30000");
+ $this->assertTrue($this->isElementPresent("//dl[@id='system-message'][contains(., 'success')]"));
+ $this->assertContains("Sample Data-Weblinks", $this->getTable("//table[@class='adminlist'].1.1"));
+
+ echo "Done with control_panel0004Test/testMenuItemOrderUpDown\n";
+ $this->doAdminLogout();
+ }
}
?>

Modified: development/branches/jcamp/tests/system/suite/language/language0001Test.php
===================================================================
--- development/branches/jcamp/tests/system/suite/language/language0001Test.php 2010-08-31 19:21:09 UTC (rev 18740)
+++ development/branches/jcamp/tests/system/suite/language/language0001Test.php 2010-08-31 19:24:28 UTC (rev 18741)
@@ -1,6 +1,6 @@
<?php
/**
- * @version $Id: language0001Test.php 18212 2010-07-22 06:02:54Z eddieajau $
+ * @version $Id: language0001Test.php 18675 2010-08-27 04:53:20Z eddieajau $
* @package Joomla.SystemTest
* @copyright Copyright (C) 2005 - 2010 Open Source Matters, Inc. All rights reserved.
* @license GNU General Public License version 2 or later; see LICENSE.txt
@@ -1306,7 +1306,7 @@
$this->click("link=Mass Mail Users");
$screen='Mass Mail';
$this->waitForPageToLoad("30000");
- $this->click("link=Send e-mail");
+ $this->click("link=Send email");
try
{
$this->assertEquals("Please enter a subject", $this->getAlert());
@@ -1316,7 +1316,7 @@
array_push($this->verificationErrors, $this->getTraceFiles($e));
}
$this->type("jform_subject", "test");
- $this->click("link=Send e-mail");
+ $this->click("link=Send email");
try
{
$this->assertEquals("Please enter a message", $this->getAlert());

Modified: development/branches/jcamp/tests/unit/suite/libraries/joomla/database/JTableNestedTest.php
===================================================================
--- development/branches/jcamp/tests/unit/suite/libraries/joomla/database/JTableNestedTest.php 2010-08-31 19:21:09 UTC (rev 18740)
+++ development/branches/jcamp/tests/unit/suite/libraries/joomla/database/JTableNestedTest.php 2010-08-31 19:24:28 UTC (rev 18741)
@@ -5,19 +5,26 @@
* @license GNU General Public License version 2 or later; see LICENSE.txt
*/

-require_once JPATH_BASE.'/libraries/joomla/database/tablenested.php';
+require_once JPATH_BASE . '/libraries/joomla/database/tablenested.php';
+require_once JPATH_BASE . '/libraries/joomla/database/table/category.php';
+require_once JPATH_BASE . '/libraries/joomla/database/table/asset.php';
+require_once JPATH_BASE . '/libraries/joomla/database/table/menu.php';
+require_once JPATH_BASE . '/libraries/joomla/factory.php';
+require_once 'PHPUnit/Extensions/Database/TestCase.php';
+require_once 'PHPUnit/Extensions/Database/DataSet/CsvDataSet.php';

/**
* Test class for JTableNested.
* Generated by PHPUnit on 2009-10-08 at 22:01:58.
*/
-class JTableNestedTest extends PHPUnit_Framework_TestCase {
+class JTableNestedTest extends JoomlaDatabaseTestCase {
/**
* @var JTableNested
* @access protected
*/
protected $object;
-
+ protected $db;
+
/**
* Sets up the fixture, for example, opens a network connection.
* This method is called before a test is executed.
@@ -25,9 +32,37 @@
* @access protected
*/
protected function setUp() {
- //$this->object = new JTableNested;
+ parent::setup();
+ $connect = parent::getConnection();
+ $categories = $this->getDataSet();
+ $this->_db = JFactory::getDbo();
+ $this->object = new JTableCategory($this->_db);
+ JFactory::$session = $this->getMock('JSession', array('_start'));
}

+ protected function getDataSet() {
+ $dataSet = new PHPUnit_Extensions_Database_DataSet_CsvDataSet(',', '"', '\\');
+ $refreshTestNames = array
+ (
+ 'testGetPath'
+ ,'testMove'
+ ,'testMoveByReference'
+ ,'testDelete'
+ ,'testStore'
+ ,'testGetRootId'
+ ,'testOrderUp'
+ ,'testRebuild'
+ ,'testRebuildPath'
+ ,'testSaveorder'
+ );
+ if (in_array($this->name, $refreshTestNames)) {
+ $dataSet->addTable('jos_categories', JPATH_BASE . '/tests/unit/stubs/jos_categories.csv');
+ $dataSet->addTable('jos_assets', JPATH_BASE . '/tests/unit/stubs/jos_assets.csv');
+ $dataSet->addTable('jos_menu', JPATH_BASE . '/tests/unit/stubs/jos_menu.csv');
+ }
+ return $dataSet;
+ }
+
/**
* Tears down the fixture, for example, closes a network connection.
* This method is called after a test is executed.
@@ -35,118 +70,682 @@
* @access protected
*/
protected function tearDown() {
+ parent::tearDown();
}

- /**
- * @todo Implement testGetPath().
- */
- public function testGetPath() {
- // Remove the following lines when you implement this test.
- $this->markTestIncomplete('This test has not been implemented yet.');
+ public function testGetPath($nodata = true) {
+ // Get path of ROOT node
+ $pathRoot = $this->object->getPath(1);
+ $this->assertEquals(1, count($pathRoot), 'Line: '.__LINE__.' Root path should have 1 element');
+ $this->assertEquals('1', $pathRoot[0]->id, 'Line: '.__LINE__.' Path of root should have id=1');
+
+ // Get path of Components node
+ $pathComponents = $this->object->getPath(21);
+ $this->assertEquals(5, count($pathComponents), 'Line: '.__LINE__.' Components path should have 5 elements');
+ $this->assertEquals('1', $pathComponents[0]->id, 'Line: '.__LINE__.' Element 0 should have id=1');
+ $this->assertEquals('14', $pathComponents[1]->id, 'Element 1 should have id=14');
+ $this->assertEquals('19', $pathComponents[2]->id, 'Element 2 should have id=19');
+ $this->assertEquals('20', $pathComponents[3]->id, 'Element 3 should have id=20');
+ $this->assertEquals('21', $pathComponents[4]->id, 'Element 4 should have id=21');
+
+ // Get path of invalid id
+ $pathInvalid = $this->object->getPath(999);
+ $this->assertEquals(0, count($pathInvalid), 'Invalid path should have zero elements');
}

- /**
- * @todo Implement testGetTree().
- */
- public function testGetTree() {
- // Remove the following lines when you implement this test.
- $this->markTestIncomplete('This test has not been implemented yet.');
+ public function testGetTree($nodata = false) {
+ // get Root as tree
+ $treeRoot = $this->object->getTree('1');
+ $this->assertEquals(68, count($treeRoot), 'Root tree should have 68 nodes');
+ $this->assertEquals('1', $treeRoot[0]->id, 'id for element 0 should be 1');
+ $this->assertEquals('18', $treeRoot[1]->id, 'id for element 1 should be 18');
+ $this->assertEquals('31', $treeRoot[2]->id, 'id for element 2 should be 31');
+ $this->assertEquals('9', $treeRoot[67]->id, 'id for element 2 should be 31');
+
+ // get Templates as tree
+ $treeTemplates = $this->object->getTree(23);
+ $this->assertEquals(5, count($treeTemplates), 'Templates tree should have 5 nodes');
+ $this->assertEquals('23', $treeTemplates[0]->id, 'id for element 0 should be 23');
+ $this->assertEquals('69', $treeTemplates[1]->id, 'id for element 1 should be 69');
+ $this->assertEquals('70', $treeTemplates[2]->id, 'id for element 2 should be 70');
+ $this->assertEquals('68', $treeTemplates[3]->id, 'id for element 2 should be 68');
+ $this->assertEquals('71', $treeTemplates[4]->id, 'id for element 2 should be 71');
+
+ // get Plugins as tree
+ $treePlugins = $this->object->getTree(25);
+ $this->assertEquals(1, count($treePlugins), 'Templates tree should have 5 nodes');
+ $this->assertEquals('25', $treePlugins[0]->id, 'd for element 0 should be 25');
+
+ // Get invalid node as tree
+ $treeInvalid = $this->object->getTree(99999);
+ $this->assertEquals(0, count($treeInvalid), 'Invalid tree should have 0 nodes');
}

- /**
- * @todo Implement testIsLeaf().
- */
public function testIsLeaf() {
- // Remove the following lines when you implement this test.
- $this->markTestIncomplete('This test has not been implemented yet.');
+ $this->assertFalse($this->object->isLeaf(1), 'Root node is not a leaf');
+ $this->assertFalse($this->object->isLeaf(23), 'Templates node is not a leaf');
+ $this->assertFalse($this->object->isLeaf(-1), 'Invalid node is not a leaf');
+ $this->assertTrue($this->object->isLeaf(25), 'Plugins is a leaf');
}

- /**
- * @todo Implement testSetLocation().
- */
public function testSetLocation() {
- // Remove the following lines when you implement this test.
- $this->markTestIncomplete('This test has not been implemented yet.');
+ $table = $this->object;
+
+ // Test default location
+ $table->setLocation(20);
+ $this->assertAttributeEquals(20, '_location_id', $table);
+ $this->assertAttributeEquals('after', '_location', $table);
+
+ // Test with explicit locations
+ $table->setLocation(20,'before');
+ $this->assertAttributeEquals('before', '_location', $table);
+
+ // Test that invalid location returns false
+ $this->assertFalse($table->setLocation(20,'xxx'));
}
+
+ public function testMove() {
+ $table = $this->object;
+
+ // Save original tree for future reference
+ $treeOriginal = $table->getTree('1');
+ // Check original tree for starting integrity
+ $this->checkLftRgt($treeOriginal);
+
+ // Move Modules category (22) down
+ $table->reset();
+ $this->assertTrue($table->load(22), 'Line: '.__LINE__.' Load should be successful');
+ $where = null;
+ $this->assertTrue($table->move(1, $where), 'Line: '.__LINE__.' Move should be successful');
+
+ // Get new root and check positions
+ $treeRoot= $table->getTree('1');
+ $this->checkLftRgt($treeRoot);
+ $this->assertEquals(68, count($treeRoot), 'Line: '.__LINE__.' Root tree should have 68 nodes');
+ $this->assertEquals('1', $treeRoot[0]->id, 'Line: '.__LINE__.' id for element 0 should be 1');
+ $this->assertEquals('23', $treeRoot[9]->id, 'Line: '.__LINE__.' id for element 9 should be 23');
+ $this->assertEquals('69', $treeRoot[10]->id, 'Line: '.__LINE__.' id for element 10 should be 69');
+ $this->assertEquals('70', $treeRoot[11]->id, 'Line: '.__LINE__.' id for element 11 should be 70');
+ $this->assertEquals('68', $treeRoot[12]->id, 'Line: '.__LINE__.' id for element 12 should be 68');
+ $this->assertEquals('71', $treeRoot[13]->id, 'Line: '.__LINE__.' id for element 13 should be 71');
+ $this->assertEquals('22', $treeRoot[14]->id, 'Line: '.__LINE__.' id for element 14 should be 23');
+ $this->assertEquals('64', $treeRoot[15]->id, 'Line: '.__LINE__.' id for element 15 should be 69');
+ $this->assertEquals('65', $treeRoot[16]->id, 'Line: '.__LINE__.' id for element 16 should be 70');
+ $this->assertEquals('66', $treeRoot[17]->id, 'Line: '.__LINE__.' id for element 17 should be 68');
+ $this->assertEquals('67', $treeRoot[18]->id, 'Line: '.__LINE__.' id for element 18 should be 71');
+ $this->assertEquals('75', $treeRoot[19]->id, 'Line: '.__LINE__.' id for element 19 should be 71');
+
+ // Rebuild and make sure nothing changes
+ $table->rebuild();
+ $newRoot = $table->getTree('1');
+ $this->checkLftRgt($newRoot);
+ $this->compareTrees($treeRoot, $newRoot);

- /**
- * @todo Implement testMove().
- */
- public function testMove() {
- // Remove the following lines when you implement this test.
- $this->markTestIncomplete('This test has not been implemented yet.');
+ // Move node back up
+ $table->reset();
+ $this->assertTrue($table->load(22), 'Line: '.__LINE__.' Load should be successful');
+ $this->assertTrue($table->move(-1, $where), 'Line: '.__LINE__.' Move should be successful');
+
+ // Get the new tree -- should be the same as the original
+ $treeOriginalNew = $table->getTree('1');
+ $this->checkLftRgt($treeOriginalNew);
+ $this->compareTrees($treeOriginal, $treeOriginalNew);
+
+ // Move Sample Data Articles Down
+ $table->reset();
+ $this->assertTrue($table->load(14), 'Line: '.__LINE__.' Load should be successful');
+ $this->assertTrue($table->move(1, $where), 'Line: '.__LINE__.' Move should be successful');
+ $treeSampleDataDown = $table->getTree('1');
+ $this->checkLftRgt($treeSampleDataDown);
+ $this->assertEquals(68, count($treeRoot), 'Line: '.__LINE__.' Root tree should have 68 nodes');
+ $this->assertEquals('14', $treeRoot[5]->id, 'Line: '.__LINE__.' id for element 0 should be 1');
+ $this->assertEquals('9', $treeRoot[67]->id, 'Line: '.__LINE__.' id for element 9 should be 23');
+
+ // Move Sample Data Articles back up
+ $table->reset();
+ $this->assertTrue($table->load(14), 'Line: '.__LINE__.' Load should be successful');
+ $this->assertTrue($table->move(-1, $where), 'Line: '.__LINE__.' Move should be successful');
+ $treeOriginalNew = $table->getTree('1');
+ $this->compareTrees($treeOriginal, $treeOriginalNew);
+
+ // Move Articles Uncategorised Down (should return false and not change anything)
+ $table->reset();
+ $this->assertTrue($table->load(9), 'Line: '.__LINE__.' Load should be successful');
+ $this->assertFalse($table->move(1, $where), 'Line: '.__LINE__.' Move should fail');
+ $treeOriginalNew = $table->getTree('1');
+ $this->assertEquals(68, count($treeOriginalNew), 'Root tree should have 68 nodes');
+ $this->compareTrees($treeOriginal, $treeOriginalNew);
+
+ // Move Sample Data Weblinks up (should return false and not change anything)
+ $table->reset();
+ $this->assertTrue($table->load(18), 'Line: '.__LINE__.' Load should be successful');
+ $this->assertFalse($table->move(-1, $where), 'Line: '.__LINE__.' Move should fail');
+ $treeOriginalNew = $table->getTree('1');
+ $this->assertEquals(68, count($treeOriginalNew), 'Root tree should have 68 nodes');
+ $this->compareTrees($treeOriginal, $treeOriginalNew);
+
+ // Move Menu Module down (should return false and not change anything)
+ $table->reset();
+ $this->assertTrue($table->load(75), 'Line: '.__LINE__.' Load should be successful');
+ $this->assertFalse($table->move(1, $where), 'Line: '.__LINE__.' Move should fail');
+ $treeOriginalNew = $table->getTree('1');
+ $this->assertEquals(68, count($treeOriginalNew), 'Line: '.__LINE__.' Root tree should have 68 nodes');
+ $this->compareTrees($treeOriginal, $treeOriginalNew);
+
+ // Move Content Modules up (should return false and not change anything)
+ $table->reset();
+ $this->assertTrue($table->load(64), 'Line: '.__LINE__.' Load should be successful');
+ $this->assertFalse($table->move(-1, $where), 'Line: '.__LINE__.' Move should fail');
+ $treeOriginalNew = $table->getTree('1');
+ $this->assertEquals(68, count($treeOriginalNew), 'Line: '.__LINE__.' Root tree should have 68 nodes');
+ $this->compareTrees($treeOriginal, $treeOriginalNew);
+
+ // Move Content Modules down
+ $table->reset();
+ $this->assertTrue($table->load(64), 'Line: '.__LINE__.' Load should be successful');
+ $this->assertTrue($table->move(1, $where), 'Line: '.__LINE__.' Move should succeed');
+ $treeContentModulesDown = $table->getTree('1');
+ $this->assertEquals(68, count($treeContentModulesDown), 'Line: '.__LINE__.' Root tree should have 68 nodes');
+ $this->checkLftRgt($treeContentModulesDown);
+ $this->assertEquals('64', $treeContentModulesDown[11]->id, 'Line: '.__LINE__.' id for element 11 should be 64');
+ $this->assertEquals('65', $treeContentModulesDown[10]->id, 'Line: '.__LINE__.' id for element 10 should be 65');
+
+ // Move Content Modules up
+ $table->reset();
+ $this->assertTrue($table->load(64), 'Line: '.__LINE__.' Load should be successful');
+ $this->assertTrue($table->move(-1, $where), 'Line: '.__LINE__.' Move should succeed');
+ $treeOriginalNew = $table->getTree('1');
+ $this->assertEquals(68, count($treeOriginalNew), 'Line: '.__LINE__.' Root tree should have 68 nodes');
+ $this->compareTrees($treeOriginal, $treeOriginalNew);
+
+ // Test Move with where clause
+ // Move Weblinks Uncategorised Up with where clause
+ $table->reset();
+ $this->assertTrue($table->load(13), 'Line: '.__LINE__.' Load should be successful');
+ $where = 'extension = ' . $this->_db->Quote('com_weblinks');
+ $this->assertTrue($table->move(-1, $where), 'Line: '.__LINE__.' Move should succeed');
+ $treeTemp = $table->getTree('1');
+ $this->assertEquals('13', $treeTemp[1]->id, 'Line: '.__LINE__.' id for element 1 should be 13');
+ $this->assertEquals('18', $treeTemp[2]->id, 'Line: '.__LINE__.' id for element 2 should be 18');
}
+
+ public function testMoveByReference() {
+ $table = $this->object;
+
+ // Save original tree for future reference
+ $treeOriginal = $table->getTree('1');
+ // Check original tree for starting integrity
+ $this->checkLftRgt($treeOriginal);
+
+ //Move Modules category (22) to after Plugins (25)
+ $this->assertTrue($table->moveByReference('25', 'after', '22'), 'Line: '.__LINE__.' MovebyReference should succeed');
+ $treeTemp = $table->getTree('1');
+ $this->assertEquals(68, count($treeTemp), 'Line: '.__LINE__.' Root tree should have 68 nodes');
+ $this->checkLftRgt($treeTemp);
+ $this->assertEquals('23', $treeTemp[9]->id, 'Line: '.__LINE__.' id for element 9 should be 23');
+ $this->assertEquals('69', $treeTemp[10]->id, 'Line: '.__LINE__.' id for element 10 should be 69');
+ $this->assertEquals('24', $treeTemp[14]->id, 'Line: '.__LINE__.' id for element 14 should be 24');
+ $this->assertEquals('25', $treeTemp[15]->id, 'Line: '.__LINE__.' id for element 15 should be 25');
+ $this->assertEquals('22', $treeTemp[16]->id, 'Line: '.__LINE__.' id for element 16 should be 22');
+ $this->assertEquals('25', $treeTemp[15]->id, 'Line: '.__LINE__.' id for element 21 should be 25');
+
+ // Move Modules category (22) back to before Templates (23)
+ $this->assertTrue($table->moveByReference('23', 'before', '22'), 'Line: '.__LINE__.' MovebyReference should succeed');
+ $treeOriginalNew = $table->getTree('1');
+ $this->assertEquals(68, count($treeOriginalNew), 'Line: '.__LINE__.' Root tree should have 68 nodes');
+ $this->compareTrees($treeOriginal, $treeOriginalNew);
+
+ // Move Templates (23) to first child under Menu Module (75)
+ $this->assertTrue($table->moveByReference('75', 'first-child', '23'), 'Line: '.__LINE__.' MovebyReference should succeed');
+ $treeTemp = $table->getTree('1');
+ $this->checkLftRgt($treeTemp);
+ $this->assertEquals('23', $treeTemp[15]->id, 'Line: '.__LINE__.' id for element 15 should be 23');
+ $this->assertEquals(6, $treeTemp[15]->level, 'Line: '.__LINE__.' level for element 15 should be 6');
+ $this->assertEquals('75', $treeTemp[15]->parent_id, 'Line: '.__LINE__.' parent_id for element 15 should be 75');
+ $this->assertEquals('69', $treeTemp[16]->id, 'Line: '.__LINE__.' id for element 16 should be 69');
+ $this->assertEquals(7, $treeTemp[16]->level, 'Line: '.__LINE__.' level for element 16 should be 7');
+ $this->assertEquals('23', $treeTemp[16]->parent_id, 'Line: '.__LINE__.' parent_id for element 16 should be 23');
+
+ // Move Templates (23) back to original position - after Modules (22)
+ $this->assertTrue($table->moveByReference('22', 'after', '23'), 'Line: '.__LINE__.' MovebyReference should succeed');
+ $treeOriginalNew = $table->getTree('1');
+ $this->assertEquals(68, count($treeOriginalNew), 'Line: '.__LINE__.' Root tree should have 68 nodes');
+ $this->compareTrees($treeOriginal, $treeOriginalNew);

- /**
- * @todo Implement testDelete().
- */
+ // Move Components (21) to be last-child of Extensions (20)
+ $this->assertTrue($table->moveByReference('20', 'last-child', '21'), 'Line: '.__LINE__.' MovebyReference should succeed');
+ $treeTemp = $table->getTree('1');
+ $this->assertEquals(68, count($treeTemp), 'Line: '.__LINE__.' Root tree should have 68 nodes');
+ $this->checkLftRgt($treeTemp);
+ $this->assertEquals('22', $treeTemp[8]->id, 'Line: '.__LINE__.' id for element 8 should be 22');
+ $this->assertEquals('21', $treeTemp[21]->id, 'Line: '.__LINE__.' id for element 21 should be 21');
+
+ // Move Components (21) back to first-child of Extensions (20)
+ $this->assertTrue($table->moveByReference('20', 'first-child', '21'), 'Line: '.__LINE__.' MovebyReference should succeed');
+ $treeOriginalNew = $table->getTree('1');
+ $this->assertEquals(68, count($treeOriginalNew), 'Line: '.__LINE__.' Root tree should have 68 nodes');
+ $this->compareTrees($treeOriginal, $treeOriginalNew);
+
+ // Try to move Modules (22) to first-child of User Modules (65)
+ // Should be invalid since 65 is child of 22
+ $this->assertFalse($table->moveByReference('65', 'first-child', '22'), 'Line: '.__LINE__.' MovebyReference should fail');
+
+ // Move Sample Data Articles (14) to before Sample Data Weblinks (18)
+ $this->assertTrue($table->moveByReference('18', 'before', '14'), 'Line: '.__LINE__.' MovebyReference should succeed');
+ $treeTemp = $table->getTree('1');
+ $this->assertEquals(68, count($treeTemp), 'Line: '.__LINE__.' Root tree should have 68 nodes');
+ $this->checkLftRgt($treeTemp);
+ $this->assertEquals('14', $treeTemp[1]->id, 'Line: '.__LINE__.' id for element 1 should be 14');
+ $this->assertEquals('19', $treeTemp[2]->id, 'Line: '.__LINE__.' id for element 2 should be 19');
+ $this->assertEquals('18', $treeTemp[26]->id, 'Line: '.__LINE__.' id for element 26 should be 18');
+ $this->assertEquals('31', $treeTemp[27]->id, 'Line: '.__LINE__.' id for element 27 should be 31');
+
+ // Move Sample Data Weblinks (18) to be first-child of ROOT (1)
+ // Should put it back to original state
+ $this->assertTrue($table->moveByReference('1', 'first-child', '18'), 'Line: '.__LINE__.' MovebyReference should succeed');
+ $treeOriginalNew = $table->getTree('1');
+ $this->assertEquals(68, count($treeOriginalNew), 'Root tree should have 68 nodes');
+ $this->compareTrees($treeOriginal, $treeOriginalNew);
+
+ // Move with blank reference id
+ // Default behavior is to move the node to the last child of the root node (ignores the position parameter)
+ $this->assertTrue($table->moveByReference('', 'before', '18'), 'Line: '.__LINE__.' MovebyReference should succeed');
+ $treeTemp = $table->getTree('1');
+ $this->assertEquals(68, count($treeTemp), 'Line: '.__LINE__.' Root tree should have 68 nodes');
+ $this->checkLftRgt($treeTemp);
+ $this->assertEquals('14', $treeTemp[1]->id, 'Line: '.__LINE__.' id for element 1 should be 14');
+ $this->assertEquals('19', $treeTemp[2]->id, 'Line: '.__LINE__.' id for element 2 should be 19');
+ $this->assertEquals('18', $treeTemp[64]->id, 'Line: '.__LINE__.' id for element 26 should be 18');
+ $this->assertEquals('31', $treeTemp[65]->id, 'Line: '.__LINE__.' id for element 27 should be 31');
+
+ // Call with no id should return false
+ $this->assertFalse($table->moveByReference('', 'first-child', ''), 'Line: '.__LINE__.' MovebyReference should fail');
+
+ // Can set id with load method
+ $table->load('18');
+ // Move Sample Data Weblinks back to first-child under Root
+ $this->assertTrue($table->moveByReference('1', 'first-child'), 'Line: '.__LINE__.' MovebyReference should succeed');
+ $treeOriginalNew = $table->getTree('1');
+ $this->assertEquals(68, count($treeOriginalNew), 'Line: '.__LINE__.' Root tree should have 68 nodes');
+ $this->compareTrees($treeOriginal, $treeOriginalNew);
+ }
+
public function testDelete() {
- // Remove the following lines when you implement this test.
- $this->markTestIncomplete('This test has not been implemented yet.');
+ $table = $this->object;
+ $assetsTable = new JTableAsset($this->_db);
+ $treeAssetsOriginal = $assetsTable->getTree('1');
+ $this->assertEquals(158, count($treeAssetsOriginal), 'Line: '.__LINE__.' Assets root tree should have 158 nodes');
+
+ // Delete Sample Data weblinks (18) & children
+ $table->load('18');
+ $this->assertTrue($table->delete('18', true), 'Line: '.__LINE__.' Should delete 18');
+
+ // Check categories table
+ $treeTemp = $table->getTree('1');
+ $this->assertEquals(64, count($treeTemp), 'Line: '.__LINE__.' Root tree should have 68 nodes');
+ $this->checkLftRgt($treeTemp);
+ $this->assertEquals('14', $treeTemp[1]->id, 'Line: '.__LINE__.' id for element 1 should be 14');
+ $this->assertEquals('19', $treeTemp[2]->id, 'Line: '.__LINE__.' id for element 2 should be 19');
+ $this->assertEquals(0, count($table->getTree('18')), 'Line: '.__LINE__.' Id 18 should have been deleted');
+ $this->assertEquals(0, count($table->getTree('31')), 'Line: '.__LINE__.' Id 31 should have been deleted');
+
+ // Check assets table
+ $treeAssetsTemp = $assetsTable->getTree('1');
+ $this->assertEquals(154, count($treeAssetsTemp), 'Line: '.__LINE__.' After delete, assets root tree should have 154 nodes');
+ $this->assertEquals(0, count($assetsTable->getTree('43')), 'Line: '.__LINE__.' Id 43 should have been deleted from assets');
+ $this->assertEquals(0, count($assetsTable->getTree('56')), 'Line: '.__LINE__.' Id 56 should have been deleted from assets');
+
+ // Delete Modules (22) and don't delete children
+ // Child nodes should be moved up to parent
+ $table->load('22');
+ $this->assertTrue($table->delete('22', false), 'Line: '.__LINE__.' Delete id 22 should be successful');
+ // Check categories table
+ $treeTemp = $table->getTree('1');
+ $this->assertEquals(63, count($treeTemp), 'Line: '.__LINE__.' Root tree should have 63 nodes');
+ $this->checkLftRgt($treeTemp);
+ $this->assertEquals('64', $treeTemp[5]->id, 'Line: '.__LINE__.' id for element 5 should be 64');
+ $this->assertEquals('4', $treeTemp[5]->level, 'Line: '.__LINE__.' level for element 5 should be 4');
+ $this->assertEquals('65', $treeTemp[6]->id, 'Line: '.__LINE__.' id for element 6 should be 65');
+ $this->assertEquals('4', $treeTemp[6]->level, 'Line: '.__LINE__.' id for element 6 should be 4');
+ $this->assertEquals('66', $treeTemp[7]->id, 'Line: '.__LINE__.' id for element 7 should be 66');
+ $this->assertEquals('4', $treeTemp[7]->level, 'Line: '.__LINE__.' id for element 7 should be 4');
+ $this->assertEquals('67', $treeTemp[8]->id, 'Line: '.__LINE__.' id for element 8 should be 67');
+ $this->assertEquals('4', $treeTemp[8]->level, 'Line: '.__LINE__.' id for element 8 should be 4');
+ $this->assertEquals('75', $treeTemp[9]->id, 'Line: '.__LINE__.' id for element 9 should be 75');
+ $this->assertEquals('4', $treeTemp[9]->level, 'Line: '.__LINE__.' id for element 9 should be 4');
+ $this->assertEquals(0, count($table->getTree('22')), 'Line: '.__LINE__.' id 22 should be deleted');
+
+ // Check assets table
+ $treeAssetsTemp = $assetsTable->getTree('1');
+ $this->assertEquals(153, count($treeAssetsTemp), 'Line: '.__LINE__.' After delete, assets root tree should have 153 nodes');
+ $this->assertEquals(0, count($assetsTable->getTree('47')), 'Line: '.__LINE__.' Id 47 should have been deleted from assets');
+
+ // Try using delete method without the table->load
+ // It should fail and return false
+ $table->reset();
+ $this->assertFalse($table->delete('14'), 'Line: '.__LINE__.' Table delete should fail because table->load() was not run first');
+
+ // Delete Templates (23) without arguments (using just the $table->load)
+ $table->load('23');
+ $this->assertTrue($table->delete(), 'Line: '.__LINE__.' Should delete id 23 and children');
+
+ // Check categories
+ $treeTemp = $table->getTree('1');
+ $this->assertEquals(58, count($treeTemp), 'Line: '.__LINE__.' Root tree should have 58 nodes');
+ $this->checkLftRgt($treeTemp);
+ $this->assertEquals('24', $treeTemp[10]->id, 'Line: '.__LINE__.' id for element 10 should be 24');
+ $this->assertEquals(0, count($table->getTree('23')), 'Line: '.__LINE__.' id 23 should be deleted');
+
+ // Check assets
+ $treeAssetsTemp = $assetsTable->getTree('1');
+ $this->assertEquals(147, count($treeAssetsTemp), 'Line: '.__LINE__.' After delete, assets root tree should have 148 nodes');
+ $this->assertEquals(0, count($assetsTable->getTree('48')), 'Line: '.__LINE__.' Id 48 should have been deleted from assets');
+ $this->assertEquals(0, count($assetsTable->getTree('98')), 'Line: '.__LINE__.' Id 98 should have been deleted from assets');
+ $this->assertEquals(0, count($assetsTable->getTree('147')), 'Line: '.__LINE__.' Id 147 should have been deleted from assets (article)');
+
+ $table->load('21'); // Components no children
+ $this->assertTrue($table->delete('21', false), 'Line: '.__LINE__.' Should delete id 21 but not children');
+ // Check categories
+ $treeTemp = $table->getTree('1');
+ $this->assertEquals(57, count($treeTemp), 'Line: '.__LINE__.' Root tree should have 58 nodes');
+ $this->checkLftRgt($treeTemp);
+ $this->assertEquals('64', $treeTemp[4]->id, 'Line: '.__LINE__.' id for element 4 should be 64');
+ $this->assertEquals(0, count($table->getTree('21')), 'Line: '.__LINE__.' id 21 should be deleted');
+
+ // Check assets
+ $treeAssetsTemp = $assetsTable->getTree('1');
+ $this->assertEquals(146, count($treeAssetsTemp), 'Line: '.__LINE__.' After delete, assets root tree should have 146 nodes');
+
+ // Test table with no assets
+ $menuTable = new JTableMenu($this->_db);
+ $menuTable->load('2');
+ $this->assertTrue($menuTable->delete('2', true), 'Line: '.__LINE__.' Menu id 2 should be deleted');
+ $treeMenuTemp = $menuTable->getTree('1');
+ $this->checkLftRgt($treeMenuTemp);
+ $this->assertEquals(16, count($treeMenuTemp), 'Line: '.__LINE__.' Menu table should have 16 rows');
+ $this->assertEquals(146, count($treeAssetsTemp), 'Line: '.__LINE__.' After delete, assets root tree should still have 146 nodes');
+
+ // Check assets
+ $treeAssetsTemp = $assetsTable->getTree('1');
+ $this->assertEquals(146, count($treeAssetsTemp), 'Line: '.__LINE__.' After delete, assets root tree should have 146 nodes');
}

- /**
- * @todo Implement testCheck().
- */
public function testCheck() {
- // Remove the following lines when you implement this test.
- $this->markTestIncomplete('This test has not been implemented yet.');
+ $this->assertTrue(true, 'Test skipped since this method is overridden in all subclasses');
}
-
- /**
- * @todo Implement testStore().
- */
+
public function testStore() {
- // Remove the following lines when you implement this test.
- $this->markTestIncomplete('This test has not been implemented yet.');
+ // Use assets table since it does not override the JTableNested store() method
+ $table = new JTableAsset($this->_db);
+
+ // Existing row nulls=false
+ $table->load('3');
+ $rules = $table->rules;
+ $table->title = 'New Title';
+ $table->rules = null;
+ $this->assertTrue($table->store(), 'Line: '.__LINE__.' Table store should succeed');
+ $table->reset();
+ $table->load('3');
+ $this->assertEquals('New Title', $table->title, 'Line: '.__LINE__.' Title should be updated');
+ $this->assertEquals($rules, $table->rules, 'Line: '.__LINE__.' Rules should not be overwritten by null value');
+
+ // Existing Row nulls=true
+ $table->rules = null;
+ $table->title = 'New Title Null';
+ $this->assertFalse($table->store(true), 'Line: '.__LINE__.' Table store should fail since rules field is not null in db');
+ $table->reset();
+ $table->load('3');
+ $this->assertEquals('New Title', $table->title, 'Line: '.__LINE__.' Title should not be updated');
+ $this->assertEquals($rules, $table->rules, 'Line: '.__LINE__.' Rules should not be overwritten by null value');
+
+ // Existing Row with new parent (implicit move)
+ // Move id 3 to be first child of 4
+ $table->reset();
+ $table->load('3');
+ $table->setLocation('4', 'first-child');
+ $table->title = 'Move 3 to first child of 4';
+ $this->assertTrue($table->store(), 'Line: '.__LINE__.' Table store should succeed');
+ $treeTemp = $table->getTree('1');
+ $this->assertEquals('4', $treeTemp[2]->id, 'Line: '.__LINE__.' id for element 2 should be 4');
+ $this->assertEquals('3', $treeTemp[3]->id, 'Line: '.__LINE__.' id for element 3 should be 3');
+ $this->assertEquals(2, $treeTemp[3]->level, 'Line: '.__LINE__.' level for element 3 should be 2');
+
+ // New row with reference node
+ $table->reset();
+ $table->load('40');
+ $table->id = null;
+ $table->title = 'New Node Last Child of 4';
+ $table->setLocation('4', 'last-child');
+ $table->name = 'com.banners.category.999';
+
+ // New row without reference node
+ $this->assertTrue($table->store(), 'Line: '.__LINE__.' Table store should succeed');
+ $treeTemp = $table->getTree('1');
+ $this->assertEquals(159, count($treeTemp), 'Line: '.__LINE__.' Tree should now have 159 rows');
+ $this->assertEquals('com.banners.category.999', $treeTemp[6]->name, 'Line: '.__LINE__.' New node should be in position 6');
+ $this->assertEquals('4', $treeTemp[6]->parent_id, 'Line: '.__LINE__.' New node should parent id of 4');
+ $this->assertEquals(2, $treeTemp[6]->level, 'Line: '.__LINE__.' New node level should be 2');
}

- /**
- * @todo Implement testPublish().
- */
public function testPublish() {
- // Remove the following lines when you implement this test.
- $this->markTestIncomplete('This test has not been implemented yet.');
+ // Test with pk's in argument
+ $table = $this->object;
+ $pks = array('18', '31', '32');
+ $this->assertTrue($table->publish($pks, '1'), 'Line: '.__LINE__.' Publish with pks should work');
+ $treeTemp = $table->getTree('1');
+ $this->assertEquals('1', $treeTemp[1]->published, 'Line: '.__LINE__.' Id 18 should be published');
+ $this->assertEquals('1', $treeTemp[2]->published, 'Line: '.__LINE__.' Id 31 should be published');
+ $this->assertEquals('1', $treeTemp[3]->published, 'Line: '.__LINE__.' Id 32 should be published');
+
+ // Test with pk's set in instance fields
+ $table->reset();
+ $table->id = '18,31,32';
+ $this->assertTrue($table->publish(null, '-1'), 'Line: '.__LINE__.' Publish with instance fields should work');
+ $treeTemp = $table->getTree('1');
+ $this->assertEquals('-1', $treeTemp[1]->published, 'Line: '.__LINE__.' Id 18 should be published');
+ $this->assertEquals('-1', $treeTemp[2]->published, 'Line: '.__LINE__.' Id 31 should be published');
+ $this->assertEquals('-1', $treeTemp[3]->published, 'Line: '.__LINE__.' Id 32 should be published');
+
+ // Test with row checked out to same user
+ $table->reset();
+ $pks = array('18', '31', '32');
+ $table->checkout('1', '18');
+ $this->assertTrue($table->publish($pks, '1', '1'), 'Line: '.__LINE__.' Same user can change state');
+
+ // Test with row checked out to different user
+ $table->checkout('2', '18');
+ $this->assertFalse($table->publish($pks, '-1', '1'), 'Line: '.__LINE__.' Different user should not be able to change state');
+
+ // Test with child row checked out
+ // Checkout Park Links (31) and try to unpublish parent Sample Data Links (18)
+ $table->reset();
+ $table->checkout('2', '31');
+ $pks = array('18');
+ $this->assertFalse($table->publish($pks, '-1', '1'), 'Line: '.__LINE__.' Cannot change state if parent checked out');
+
+ // Test with parent node unpublished
+ // Try to publish Extensions (20) with parent unpublished
+ $pks = array('20');
+ $this->assertTrue($table->publish($pks, '1'), 'Line: '.__LINE__.' Can publish child if parent is not published');
+ $treeTemp = $table->getTree('1');
+ $this->assertEquals('20', $treeTemp[7]->id, 'Line: '.__LINE__.' Node 7 is id=20');
+ $this->assertEquals('1', $treeTemp[7]->published, 'Line: '.__LINE__.' Id 20 should be published');
}

- /**
- * @todo Implement testOrderUp().
- */
public function testOrderUp() {
- // Remove the following lines when you implement this test.
- $this->markTestIncomplete('This test has not been implemented yet.');
+ $table = $this->object;
+ $this->assertTrue($table->orderUp('14'), 'Line: '.__LINE__.' orderUp should succeed');
+ $treeTemp = $table->getTree('1');
+ $this->assertEquals('14', $treeTemp[1]->id, 'Line: '.__LINE__.' Node 1 is id=14');
+ $this->assertEquals('76', $treeTemp[25]->id, 'Line: '.__LINE__.' id is not correct');
+
+ // Move it back down
+ $this->assertTrue($table->orderDown('14'), 'Line: '.__LINE__.' orderDown should succeed');
+ $this->assertEquals('14', $treeTemp[1]->id, 'Line: '.__LINE__.' id is not correct');
}

- /**
- * @todo Implement testOrderDown().
- */
public function testOrderDown() {
- // Remove the following lines when you implement this test.
- $this->markTestIncomplete('This test has not been implemented yet.');
+ $this->assertTrue(true, 'Test skipped since this method is tested in the testOrderUp method');
}

- /**
- * @todo Implement testGetRootId().
- */
public function testGetRootId() {
- // Remove the following lines when you implement this test.
- $this->markTestIncomplete('This test has not been implemented yet.');
+ $table = $this->object;
+
+ // Test valid table
+ $this->assertEquals('1', $table->getRootId(), 'Line: '.__LINE__.' root id of valid table is 1');
+
+ // Test two rows with parent_id = 0
+ $table->load('18', true);
+ $table->parent_id = '0';
+ $table->alias = 'alias18';
+ $this->assertTrue($table->store());
+ $this->assertEquals('1', $table->getRootId(), 'Line: '.__LINE__.' root id with two parent_id=0 is 1');
+
+ // Test with two rows with lft=0
+ $table->load('18', true);
+ $table->lft = 0;
+ $this->assertTrue($table->store(), 'Line: '.__LINE__.' Can update database');
+
+ $table->load('1', true);
+ $table->alias = 'root';
+ $this->assertTrue($table->store(), 'Line: '.__LINE__.' Can update database');
+ $this->assertEquals('1', $table->getRootId(), 'Line: '.__LINE__.' root id with two lft=0 rows is 1');
+
+ // No alias = root
+ $table->load('1', true);
+ $table->alias = 'rootxxx';
+ $this->assertTrue($table->store(), 'Line: '.__LINE__.' Can update database');
+ $this->assertFalse($table->getRootId(), 'Line: '.__LINE__.' cannot get root if no alias = root');
+
+ // Test two rows with alias = root
+ // Run Query to create duplicate root alias values
+ $query = $this->_db->getQuery(true);
+ $query->update($table->getTableName());
+ $query->set('alias = '. $this->_db->quote('root'));
+ $query->where('id in('. $this->_db->quote('1') . ',' . $this->_db->quote('18') . ')');
+
+ $this->_db->setQuery($query);
+ $this->assertTrue($this->_db->query(), 'Line: '.__LINE__.' Query to update duplicate root alias values');
+ $this->assertFalse($table->getRootId(), 'Line: '.__LINE__.' cannot get root if >1 rows with alias = root');
}

- /**
- * @todo Implement testRebuild().
- */
public function testRebuild() {
- // Remove the following lines when you implement this test.
- $this->markTestIncomplete('This test has not been implemented yet.');
+ // Without parent id
+ $table = $this->object;
+ $this->removeLftRgtValues($table);
+ $this->assertEquals(136, $table->rebuild(), 'Line: '.__LINE__.' Rebuild should succeed');
+ $tree = $table->getTree('1');
+ $this->checkLftRgt($tree);
+
+ // With parent id
+ $this->removeLftRgtValues($table);
+ $this->assertEquals(136, $table->rebuild('1'), 'Line: '.__LINE__.' Rebuild should return 136');
+ $tree = $table->getTree('1');
+ $this->checkLftRgt($tree);
+
+ // With left id > 0
+ $this->removeLftRgtValues($table);
+ $this->assertEquals(149, $table->rebuild(null, 13), 'Line: '.__LINE__.' Rebuild should return 149');
+ $tree = $table->getTree('1');
+ $this->checkLftRgt($tree);
+
+ // With level > 0
+ $this->removeLftRgtValues($table);
+ $this->assertEquals(136, $table->rebuild(null, 0, 3), 'Line: '.__LINE__.' Rebuild should return 136');
+ $tree = $table->getTree('1');
+ $this->assertEquals(3, $tree[0]->level, 'Line: '.__LINE__.' Root node should have level 3');
+ $this->assertEquals(7, $tree[8]->level, 'Line: '.__LINE__.' node 8 should have level 7');
+
+ // With path specified
+ $this->removeLftRgtValues($table);
+ $this->assertEquals(136, $table->rebuild(null, 0, 0, 'mypath'), 'Line: '.__LINE__.' Rebuild should return 136');
+ $tree = $table->getTree('1');
+ $this->checkLftRgt($tree);
+ $this->assertEquals('mypath/uncategorised', $tree[1]->path, 'Line: '.__LINE__.' mypath should be prepended to normal path');
}
-
+
+ public function testRebuildPath() {
+ $table = $this->object;
+ $this->assertTrue($table->rebuildPath('64'));
+ $tree = $table->getTree('1');
+ $this->assertEquals('sample-data-articles/joomla/extensions/modules/content-modules', $tree[10]->path, 'Line: '.__LINE__.' mypath should be prepended to normal path');
+ }
+
+ public function testSaveorder() {
+ $table = $this->object;
+ // Swap orders of id's 21 and 22 (both level 4)
+ // And reverse order of 64, 65, 66, 67, 75 (all level 5 with parent 22)
+ $idArray = array('21', '22', '64', '65', '66', '67', '75');
+ $lftArray = array(2, 1, 9 , 8, 7 ,6, 5);
+ $this->assertEquals(136, $table->saveorder($idArray, $lftArray), 'Line: '.__LINE__.' saveorder should succeed');
+ $tree = $table->getTree('1');
+ $this->checkLftRgt($tree);
+ $this->assertEquals('22', $tree[8]->id, 'Line: '.__LINE__.' 22 should be in position 8');
+ $this->assertEquals('75', $tree[9]->id, 'Line: '.__LINE__.' 75 should be in position 9');
+ $this->assertEquals('67', $tree[10]->id, 'Line: '.__LINE__.' 67 should be in position 10');
+ $this->assertEquals('66', $tree[11]->id, 'Line: '.__LINE__.' 66 should be in position 11');
+ $this->assertEquals('65', $tree[12]->id, 'Line: '.__LINE__.' 65 should be in position 12');
+ $this->assertEquals('64', $tree[13]->id, 'Line: '.__LINE__.' 64 should be in position 13');
+ $this->assertEquals('21', $tree[14]->id, 'Line: '.__LINE__.' 21 should be in position 14');
+
+ // Test invalid cases
+ // Different number of array elements
+ $idArray = array('21', '22');
+ $lftArray = array(1, 2, 3);
+ $this->assertFalse($table->saveorder($idArray, $lftArray), 'Line: '.__LINE__.' saveorder should fail');
+
+ // One argument not an array
+ $this->assertFalse($table->saveorder('22', $lftArray), 'Line: '.__LINE__.' saveorder should fail');
+ $this->assertFalse($table->saveorder($idArray, 1), 'Line: '.__LINE__.' saveorder should fail');
+ }
+
+ private function compareTrees($tree1, $tree2) {
+ for ($i = 0; $i < count($tree1); $i++) {
+ $this->assertEquals($tree1[$i]->id, $tree2[$i]->id, 'Line: '.__LINE__.' id#' . $i . ' should be equal');
+ $this->assertEquals($tree1[$i]->lft, $tree2[$i]->lft, 'Line: '.__LINE__.' lft#' . $i . ' should be equal');
+ $this->assertEquals($tree1[$i]->rgt, $tree2[$i]->rgt, 'Line: '.__LINE__.' rgt#' . $i . ' should be equal');
+ $this->assertEquals($tree1[$i]->parent_id, $tree2[$i]->parent_id, 'Line: '.__LINE__.' parent_id#' . $i . ' should be equal');
+ $this->assertEquals($tree1[$i]->level, $tree2[$i]->level, 'Line: '.__LINE__.' level#' . $i . ' should be equal');
+ }
+ }
+
+ private function checkLftRgt($tree) {
+ $lftRgtValues = array();
+ // build array of all lft and rgt values
+ $start = $tree[0]->lft;
+ $end = $tree[0]->rgt;
+ for ($i = 0; $i < count($tree); $i++) {
+ $lftRgtValues[] = $tree[$i]->lft;
+ $lftRgtValues[] = $tree[$i]->rgt;
+ }
+
+ // Check that size of tree is consistent with node 0's lft, rgt values
+ $countOfValues = 1 + $end - $start;
+ $this->assertEquals($countOfValues, count($lftRgtValues),
+ 'Line: '.__LINE__.' Count of values (' . count($lftRgtValues) . ') should be 1 + node 0 rgt (' . $end . ') less lft (' . $start . ')');
+
+ // Check that there are no missing integers between node 0's lft, rgt values
+ for ($j = $start; $j < $end; $j++) {
+ $this->assertTrue(in_array($j, $lftRgtValues), 'Line: '.__LINE__.' Number ' . $j . ' should be in lft or rgt values');
+ }
+
+ // Check that node 0 is valid (level=0, parent_id=0)
+ $this->assertEquals(0, $tree[0]->level, 'Line: '.__LINE__.' Root node should be level 0');
+ $this->assertEquals('0', $tree[0]->parent_id, 'Line: '.__LINE__.' Root node should have parent_id = 0');
+ }
+
/**
- * @todo Implement testRebuildPath().
+ *
+ * Privatate function to purposely break a valid table by removing all level, lft and rgt values
+ * @param JTableNested $table
*/
- public function testRebuildPath() {
- // Remove the following lines when you implement this test.
- $this->markTestIncomplete('This test has not been implemented yet.');
+
+ private function removeLftRgtValues($table) {
+ $query = $this->_db->getQuery(true);
+ $query->update($table->getTableName());
+ $query->set('lft = 0, rgt = 0, level = 0');
+ $this->_db->setQuery($query);
+ $this->assertTrue($this->_db->query(), 'Query to break valid table');
}
}
?>

Modified: development/branches/jcamp/tests/unit/suite/libraries/joomla/document/feed/renderer/JDocumentRendererRSSTest.php
===================================================================
--- development/branches/jcamp/tests/unit/suite/libraries/joomla/document/feed/renderer/JDocumentRendererRSSTest.php 2010-08-31 19:21:09 UTC (rev 18740)
+++ development/branches/jcamp/tests/unit/suite/libraries/joomla/document/feed/renderer/JDocumentRendererRSSTest.php 2010-08-31 19:24:28 UTC (rev 18741)
@@ -5,6 +5,7 @@
* @license GNU General Public License version 2 or later; see LICENSE.txt
*/

+require_once JPATH_BASE.'/libraries/joomla/document/renderer.php';
require_once JPATH_BASE.'/libraries/joomla/document/feed/renderer/rss.php';

/**

Modified: development/branches/jcamp/tests/unit/suite/libraries/joomla/form/fields/JFormFieldCalendarTest.php
===================================================================
--- development/branches/jcamp/tests/unit/suite/libraries/joomla/form/fields/JFormFieldCalendarTest.php 2010-08-31 19:21:09 UTC (rev 18740)
+++ development/branches/jcamp/tests/unit/suite/libraries/joomla/form/fields/JFormFieldCalendarTest.php 2010-08-31 19:24:28 UTC (rev 18741)
@@ -300,7 +300,7 @@
JHtml::register('calendar', array($mock, 'calendar')); // register our mock with JHtml

$calendar->getInput(); // invoke our method
- JHtml::unregister('calendar'); // unregister the mock
+ JHtml::unregister('jhtml..calendar'); // unregister the mock
}

public function testGetInputServer_UTC()
@@ -369,7 +369,7 @@
JHtml::register('calendar', array($mock, 'calendar')); // register our mock with JHtml

$calendar->getInput(); // invoke our method
- JHtml::unregister('calendar'); // unregister the mock
+ JHtml::unregister('jhtml..calendar'); // unregister the mock
}

public function testGetInputUser_UTC()
@@ -440,7 +440,7 @@
JHtml::register('calendar', array($mock, 'calendar')); // register our mock with JHtml

$calendar->getInput(); // invoke our method
- JHtml::unregister('calendar'); // unregister the mock
+ JHtml::unregister('jhtml..calendar'); // unregister the mock

// create the mock to implant into JHtml so that we can check our values
$mock2 = $this->getMock('calendarHandler', array('calendar'));
@@ -463,7 +463,7 @@
JHtml::register('calendar', array($mock2, 'calendar')); // register our mock with JHtml

$calendar->getInput(); // invoke our method
- JHtml::unregister('calendar'); // unregister the mock
+ JHtml::unregister('jhtml..calendar'); // unregister the mock
}

/**

Modified: development/branches/jcamp/tests/unit/suite/libraries/joomla/form/rules/JFormRuleEmailTest.php
===================================================================
--- development/branches/jcamp/tests/unit/suite/libraries/joomla/form/rules/JFormRuleEmailTest.php 2010-08-31 19:21:09 UTC (rev 18740)
+++ development/branches/jcamp/tests/unit/suite/libraries/joomla/form/rules/JFormRuleEmailTest.php 2010-08-31 19:24:28 UTC (rev 18741)
@@ -76,4 +76,32 @@
'Line:'.__LINE__.' The unique rule should pass and return true.'
);
}
-}
\ No newline at end of file
+
+ public function emailData()
+ {
+ return array(
+ array('te...@example.com', true),
+ array('badaddress.com', false),
+ array('firstnam...@domain.tld', true),
+ array('firstname...@domain.tld', true),
+ array('firstname+midd...@domain.tld', true),
+ array('firstnam...@subdomain.domain.tld', true),
+ array('firstname...@subdomain.domain.tld', true),
+ array('firstname+midd...@subdomain.domain.tld', true)
+ );
+ }
+
+ /**
+ * @dataProvider emailData
+ */
+ public function testEmailData($emailAddress, $expectedResult)
+ {
+ $rule = new JFormRuleEmail;
+ $xml = simplexml_load_string('<form><field name="email1" /></form>', 'JXMLElement');
+ $this->assertThat(
+ $rule->test($xml->field[0], $emailAddress),
+ $this->equalTo($expectedResult),
+ $emailAddress.' should have returned '.($expectedResult ? 'true' : 'false').' but did not'
+ );
+ }
+}

Modified: development/branches/jcamp/tests/unit/suite/libraries/joomla/html/JHtmlTest.php
===================================================================
--- development/branches/jcamp/tests/unit/suite/libraries/joomla/html/JHtmlTest.php 2010-08-31 19:21:09 UTC (rev 18740)
+++ development/branches/jcamp/tests/unit/suite/libraries/joomla/html/JHtmlTest.php 2010-08-31 19:24:28 UTC (rev 18741)
@@ -740,14 +740,157 @@
}

/**
- * @todo Implement testCalendar().
+ * Tests JHTML::calendar() method with and without 'readonly' attribute.
*/
public function testCalendar()
{
- // Remove the following lines when you implement this test.
- $this->markTestIncomplete(
- 'This test has not been implemented yet.'
- );
+ // Create a world for the test
+ jimport('joomla.session.session');
+ jimport('joomla.application.application');
+ jimport('joomla.document.document');
+
+ $cfg = new JObject();
+ JFactory::$session = $this->getMock('JSession', array('_start'));
+ JFactory::$application = $this->getMock('ApplicationMock');
+ JFactory::$config = $cfg;
+
+ JFactory::$application->expects($this->any())
+ ->method('getTemplate')
+ ->will($this->returnValue('atomic'));
+
+ $cfg->live_site = 'http://example.com';
+ $cfg->offset = 'Europe/Kiev';
+ $_SERVER['HTTP_USER_AGENT'] = 'Test Browser';
+
+ // two sets of test data
+ $test_data = array('date' => '2010-05-28', 'friendly_date' => 'Friday, 28 May 2010',
+ 'name' => 'cal1_name', 'id' => 'cal1_id', 'format' => '%Y-%m-%d',
+ 'attribs' => array()
+ );
+
+ $test_data_ro = array_merge($test_data, array('attribs' => array('readonly' => 'readonly')));
+
+ foreach (array($test_data, $test_data_ro) as $data) {
+ // Reset the document
+ JFactory::$document = JDocument::getInstance('html', array('unique_key' => serialize($data)));
+
+ $input = JHTML::calendar($data['date'], $data['name'], $data['id'], $data['format'], $data['attribs']);
+ $this->assertThat(
+ strlen($input),
+ $this->greaterThan(0),
+ 'Line:'.__LINE__.' The calendar method should return something without error.'
+ );
+
+ $xml = new simpleXMLElement('<calendar>' . $input . '</calendar>');
+ $this->assertEquals(
+ (string) $xml->input['type'],
+ 'text',
+ 'Line:'.__LINE__.' The calendar input should have `type == "text"`'
+ );
+
+ $this->assertEquals(
+ (string) $xml->input['title'],
+ $data['friendly_date'],
+ 'Line:'.__LINE__.' The calendar input should have `title == "' . $data['friendly_date'] . '"`'
+ );
+
+ $this->assertEquals(
+ (string) $xml->input['name'],
+ $data['name'],
+ 'Line:'.__LINE__.' The calendar input should have `name == "' . $data['name'] . '"`'
+ );
+
+ $this->assertEquals(
+ (string) $xml->input['id'],
+ $data['id'],
+ 'Line:'.__LINE__.' The calendar input should have `id == "' . $data['id'] . '"`'
+ );
+
+ $this->assertEquals(
+ (string) $xml->input['value'],
+ $data['date'],
+ 'Line:'.__LINE__.' The calendar input should have `value == "' . $data['date'] . '"`'
+ );
+
+ $head_data = JFactory::getDocument()->getHeadData();
+
+ if (isset($data['attribs']['readonly']) && $data['attribs']['readonly'] === 'readonly') {
+ $this->assertEquals(
+ (string) $xml->input['readonly'],
+ $data['attribs']['readonly'],
+ 'Line:'.__LINE__.' The readonly calendar input should have `readonly == "' . $data['attribs']['readonly'] . '"`'
+ );
+
+ $this->assertFalse(
+ isset($xml->img),
+ 'Line:'.__LINE__.' The readonly calendar input shouldn\'t have a calendar image'
+ );
+
+ $this->assertArrayNotHasKey(
+ '/media/system/js/calendar.js',
+ $head_data['scripts'],
+ 'Line:'.__LINE__.' JS file "calendar.js" shouldn\'t be loaded'
+ );
+
+ $this->assertArrayNotHasKey(
+ '/media/system/js/calendar-setup.js',
+ $head_data['scripts'],
+ 'Line:'.__LINE__.' JS file "calendar-setup.js" shouldn\'t be loaded'
+ );
+
+ $this->assertArrayNotHasKey(
+ 'text/javascript',
+ $head_data['script'],
+ 'Line:'.__LINE__.' Inline JS for the calendar shouldn\'t be loaded'
+ );
+ }
+ else {
+ $this->assertFalse(
+ isset($xml->input['readonly']),
+ 'Line:'.__LINE__.' The calendar input shouldn\'t have readonly attribute'
+ );
+
+ $this->assertTrue(
+ isset($xml->img),
+ 'Line:'.__LINE__.' The calendar input should have a calendar image'
+ );
+
+ $this->assertEquals(
+ (string) $xml->img['id'],
+ $data['id'] . '_img',
+ 'Line:'.__LINE__.' The calendar image should have `id == "' . $data['id'] . '_img' . '"`'
+ );
+
+ $this->assertEquals(
+ (string) $xml->img['class'],
+ 'calendar',
+ 'Line:'.__LINE__.' The calendar image should have `class == "calendar"`'
+ );
+
+ $this->assertFileExists(
+ JPATH_ROOT . $xml->img['src'],
+ 'Line:'.__LINE__.' The calendar image source should point to an existent file'
+ );
+
+ $this->assertArrayHasKey(
+ '/media/system/js/calendar.js',
+ $head_data['scripts'],
+ 'Line:'.__LINE__.' JS file "calendar.js" should be loaded'
+ );
+
+ $this->assertArrayHasKey(
+ '/media/system/js/calendar-setup.js',
+ $head_data['scripts'],
+ 'Line:'.__LINE__.' JS file "calendar-setup.js" should be loaded'
+ );
+
+ $this->assertContains(
+ 'DHTML Date/Time Selector',
+ $head_data['script']['text/javascript'],
+ 'Line:'.__LINE__.' Inline JS for the calendar should be loaded'
+ );
+ }
+ }
}

/**
@@ -761,3 +904,12 @@
);
}
}
+
+
+class ApplicationMock
+{
+ public function getTemplate()
+ {
+
+ }
+}

Modified: development/branches/jcamp/tests/unit/suite/libraries/joomla/installer/JInstallerTest.php
===================================================================
--- development/branches/jcamp/tests/unit/suite/libraries/joomla/installer/JInstallerTest.php 2010-08-31 19:21:09 UTC (rev 18740)
+++ development/branches/jcamp/tests/unit/suite/libraries/joomla/installer/JInstallerTest.php 2010-08-31 19:24:28 UTC (rev 18741)
@@ -37,11 +37,19 @@
*/
public function testGetInstance()
{
+ $this->saveFactoryState();
+
+ $newDbo = $this->getMock('test');
+
+ JFactory::$database = &$newDbo;
+
$this->assertThat(
$this->object = JInstaller::getInstance(),
$this->isInstanceOf('JInstaller'),
'JInstaller::getInstance failed'
);
+
+ $this->restoreFactoryState();
}

public function testMyOnlyTest()
@@ -57,6 +65,12 @@
*/
public function testGetAndSetOverwrite()
{
+ $this->saveFactoryState();
+
+ $newDbo = $this->getMock('test');
+
+ JFactory::$database = &$newDbo;
+
$this->object = JInstaller::getInstance();
$this->object->setOverwrite(false);

@@ -78,6 +92,7 @@
'getOverwrite did not return the expected value.'
);

+ $this->restoreFactoryState();
}

/**
@@ -85,6 +100,12 @@
*/
public function testGetAndSetRedirectUrl()
{
+ $this->saveFactoryState();
+
+ $newDbo = $this->getMock('test');
+
+ JFactory::$database = &$newDbo;
+
$this->object = JInstaller::getInstance();
$this->object->setRedirectUrl('http://www.example.com');

@@ -94,6 +115,7 @@
'Get or Set Redirect Url failed'
);

+ $this->restoreFactoryState();
}

/**
@@ -101,6 +123,12 @@
*/
public function testGetAndSetUpgrade()
{
+ $this->saveFactoryState();
+
+ $newDbo = $this->getMock('test');
+
+ JFactory::$database = &$newDbo;
+
$this->object = JInstaller::getInstance();
$this->object->setUpgrade(false);

@@ -122,6 +150,7 @@
'getUpgrade did not return the expected value.'
);

+ $this->restoreFactoryState();
}

/**
@@ -140,6 +169,12 @@
*/
public function testGetPath()
{
+ $this->saveFactoryState();
+
+ $newDbo = $this->getMock('test');
+
+ JFactory::$database = &$newDbo;
+
$this->object = JInstaller::getInstance();

$this->assertThat(
@@ -155,6 +190,8 @@
$this->equalTo(JPATH_BASE.'/required_path'),
'getPath did not return the previously set value for the path'
);
+
+ $this->restoreFactoryState();
}

/**
@@ -162,6 +199,12 @@
*/
public function testAbortFile()
{
+ $this->saveFactoryState();
+
+ $newDbo = $this->getMock('test');
+
+ JFactory::$database = &$newDbo;
+
copy(JPATH_BASE.'/tests/_data/installer_packages/com_alpha/com_alpha.jpg', dirname(__FILE__).'/tmp/com_alpha.jpg');

$this->object = JInstaller::getInstance();
@@ -178,6 +221,7 @@
$this->isFalse()
);

+ $this->restoreFactoryState();
}

/**
@@ -185,6 +229,16 @@
*/
public function testAbortFolder()
{
+ $this->saveFactoryState();
+
+ $newDbo = $this->getMock('test');
+
+ JFactory::$database = &$newDbo;
+
+ //TODO - remove dependence on JFolder
+ if (file_exists(dirname(__FILE__).'/tmp/en-GB')) {
+ JFolder::delete(dirname(__FILE__).'/tmp/en-GB');
+ }
JFolder::copy(JPATH_BASE.'/tests/_data/installer_packages/com_alpha/language/en-GB', dirname(__FILE__).'/tmp/en-GB');

$this->object = JInstaller::getInstance();
@@ -201,6 +255,7 @@
$this->isFalse()
);

+ $this->restoreFactoryState();
}


@@ -209,6 +264,12 @@
*/
public function testAbortQuery()
{
+ $this->saveFactoryState();
+
+ $newDbo = $this->getMock('test');
+
+ JFactory::$database = &$newDbo;
+
$this->object = JInstaller::getInstance();
$this->object->pushStep(array('type' => 'query'));

@@ -218,6 +279,7 @@
$this->isFalse()
);

+ $this->restoreFactoryState();
}


@@ -251,8 +313,6 @@
);

$this->restoreFactoryState();
-
-
}


@@ -261,6 +321,12 @@
*/
public function testAbortDefault()
{
+ $this->saveFactoryState();
+
+ $newDbo = $this->getMock('test');
+
+ JFactory::$database = &$newDbo;
+
$adapterMock = $this->getMock('test', array('_rollback_testtype'));

$adapterMock->expects($this->once())
@@ -281,6 +347,7 @@
$this->isTrue()
);

+ $this->restoreFactoryState();
}

/**
@@ -288,6 +355,12 @@
*/
public function testAbortMsg()
{
+ $this->saveFactoryState();
+
+ $newDbo = $this->getMock('test');
+
+ JFactory::$database = &$newDbo;
+
//$this->object = JInstaller::getInstance();
$this->object = new JInstaller;

@@ -298,6 +371,7 @@
$this->isTrue()
);

+ $this->restoreFactoryState();
}


@@ -306,6 +380,12 @@
*/
public function testAbortBadType()
{
+ $this->saveFactoryState();
+
+ $newDbo = $this->getMock('test');
+
+ JFactory::$database = &$newDbo;
+
//$this->object = JInstaller::getInstance();
$this->object = new JInstaller;

@@ -316,6 +396,7 @@
$this->isFalse()
);

+ $this->restoreFactoryState();
}


@@ -325,6 +406,7 @@
public function testAbortDebug()
{

+
$configMock = $this->getMock('test', array('get'));

$configMock->expects($this->atLeastOnce())
@@ -334,9 +416,14 @@
$this->setExpectedError(array('code' => 500));

//$this->object = JInstaller::getInstance();
+ $this->saveFactoryState();
+
+ $newDbo = $this->getMock('test');
+
+ JFactory::$database = &$newDbo;
+
$this->object = new JInstaller;

- $this->saveFactoryState();
JFactory::$config = $configMock;

$this->assertThat(
@@ -602,4 +689,4 @@
);
}
}
-?>
+

Modified: development/branches/jcamp/tests/unit/suite/libraries/joomla/language/JLanguageTest.php
===================================================================
--- development/branches/jcamp/tests/unit/suite/libraries/joomla/language/JLanguageTest.php 2010-08-31 19:21:09 UTC (rev 18740)
+++ development/branches/jcamp/tests/unit/suite/libraries/joomla/language/JLanguageTest.php 2010-08-31 19:24:28 UTC (rev 18741)
@@ -28,6 +28,8 @@
protected function setUp()
{
$this->object = new JLanguage;
+
+ include_once 'inspectors.php';
}

/**
@@ -38,6 +40,46 @@
{
}

+ /**
+ * Test the JLanguage::parse method
+ */
+ public function testParse()
+ {
+ $lang = new JLanguageInspector('', true);
+
+ $strings = $lang->parse(dirname(__FILE__).'/_ini/good.ini');
+
+ $this->assertThat(
+ $strings,
+ $this->logicalNot($this->equalTo(array())),
+ 'Line: '.__LINE__.' good ini file should load properly.'
+ );
+
+ $strings = $lang->parse(dirname(__FILE__).'/_ini/bad.ini');
+
+ $this->assertThat(
+ $strings,
+ $this->equalTo(array()),
+ 'Line: '.__LINE__.' good ini file should load properly.'
+ );
+
+ $errors = $lang->getProperty('errorfiles');
+ $this->assertThat(
+ count($errors),
+ $this->equalTo(1),
+ 'Line: '.__LINE__.' bad ini file should have one error.'
+ );
+
+ // Slice the error string.
+ $parts = explode('line(s)', array_pop($errors));
+
+ $this->assertThat(
+ trim($parts[1]),
+ $this->equalTo('4, 5, 6, 7, 9, 10, 11, 12, 13, 14, 15'),
+ 'Line: '.__LINE__.' bad ini file should have several lines marked.'
+ );
+ }
+
/**
* @todo Implement testGetInstance().
*/
@@ -268,32 +310,32 @@

$this->assertEquals(
array('0'),
- $lang->getpluralSuffices(0),
+ $lang->getPluralSuffixes(0),
'Line: '.__LINE__
);

$this->assertEquals(
array('1'),
- $lang->getPluralSuffices(1),
+ $lang->getPluralSuffixes(1),
'Line: '.__LINE__
);

$this->assertEquals(
array('MORE'),
- $lang->getPluralSuffices(5),
+ $lang->getPluralSuffixes(5),
'Line: '.__LINE__
);
}

/**
- * @todo Implement testGetPluralSufficesCallback().
+ * @todo Implement testgetPluralSuffixesCallback().
*/
- public function testGetPluralSufficesCallback()
+ public function testgetPluralSuffixesCallback()
{
$lang = new JLanguage('');

$this->assertTrue(
- is_callable($lang->getPluralSufficesCallback())
+ is_callable($lang->getPluralSuffixesCallback())
);
}

@@ -307,14 +349,14 @@
$lang = new JLanguage('');

$this->assertTrue(
- is_callable($lang->getPluralSufficesCallback())
+ is_callable($lang->getPluralSuffixesCallback())
);

$this->assertTrue(
is_callable($lang->setPluralSufficesCallback($function1))
);

- $get = $lang->getPluralSufficesCallback();
+ $get = $lang->getPluralSuffixesCallback();
$this->assertEquals(
$function1,
$get,
@@ -343,13 +385,13 @@

$this->assertEquals(
$function2,
- $lang->getPluralSufficesCallback(),
+ $lang->getPluralSuffixesCallback(),
'Line: '.__LINE__
);

$this->assertNotEquals(
$function1,
- $lang->getPluralSufficesCallback(),
+ $lang->getPluralSuffixesCallback(),
'Line: '.__LINE__
);
}
@@ -1354,4 +1396,4 @@
$this->equalTo($lang->parseXMLLanguageFile($dir2))
);*/
}
-}
\ No newline at end of file
+}

Modified: development/branches/jcamp/tests/unit/suite/libraries/joomla/mail/JMailTest.php
===================================================================
--- development/branches/jcamp/tests/unit/suite/libraries/joomla/mail/JMailTest.php 2010-08-31 19:21:09 UTC (rev 18740)
+++ development/branches/jcamp/tests/unit/suite/libraries/joomla/mail/JMailTest.php 2010-08-31 19:24:28 UTC (rev 18741)
@@ -152,14 +152,38 @@
);
}

+ public function useSmtpData()
+ {
+ return array(
+ 'SMTP without Authentication' => array(
+ null,
+ 'example.com',
+ null,
+ null,
+ false,
+ null,
+ array(
+ 'called' => 'IsSMTP',
+ 'return' => true
+ )
+ )
+ );
+ }
+
/**
* @todo Implement testUseSMTP().
+ * @dataProvider useSmtpData
*/
- public function testUseSMTP()
+ public function testUseSMTP($auth, $host, $user, $pass, $secure, $port, $expected)
{
- // Remove the following lines when you implement this test.
- $this->markTestIncomplete(
- 'This test has not been implemented yet.'
+ $mail = $this->getMock('JMail', array('SetLanguage', 'IsSMTP', 'IsMail'));
+
+ $mail->expects($this->once())
+ ->method($expected['called']);
+
+ $this->assertThat(
+ $mail->useSMTP($auth, $host, $user, $pass, $secure, $port),
+ $this->equalTo($expected['return'])
);
}
}

Modified: development/branches/jcamp/tests/unit/suite/libraries/joomla/user/JUserHelperTest.php
===================================================================
--- development/branches/jcamp/tests/unit/suite/libraries/joomla/user/JUserHelperTest.php 2010-08-31 19:21:09 UTC (rev 18740)
+++ development/branches/jcamp/tests/unit/suite/libraries/joomla/user/JUserHelperTest.php 2010-08-31 19:24:28 UTC (rev 18741)
@@ -7,7 +7,7 @@
* Test class for JUserHelper.
* Generated by PHPUnit on 2009-10-26 at 22:44:33.
*/
-class JUserHelperTest extends PHPUnit_Framework_TestCase
+class JUserHelperTest extends JoomlaDatabaseTestCase
{
/**
* @var JUserHelper
@@ -15,11 +15,34 @@
protected $object;

/**
+ * Receives the callback from JError and logs the required error information for the test.
+ *
+ * @param JException The JException object from JError
+ *
+ * @return bool To not continue with JError processing
+ */
+ static function errorCallback( $error )
+ {
+ JUserHelperTest::$actualError['code'] = $error->get('code');
+ JUserHelperTest::$actualError['msg'] = $error->get('message');
+ JUserHelperTest::$actualError['info'] = $error->get('info');
+ return false;
+ }
+
+ /**
* Sets up the fixture, for example, opens a network connection.
* This method is called before a test is executed.
*/
protected function setUp()
{
+ jimport('joomla.user.user');
+ parent::setUp();
+
+ $this->saveFactoryState();
+ $this->saveErrorHandlers();
+ $this->setErrorCallback('JUserHelperTest');
+ JUserHelperTest::$actualError = array();
+
$this->object = new JUserHelper;
}

@@ -29,6 +52,7 @@
*/
protected function tearDown()
{
+ $this->setErrorhandlers($this->savedErrorState);
}

/**
@@ -42,15 +66,61 @@
);
}

+ /**
+ * Test cases for userGroups
+ *
+ * Each test case provides
+ * - integer userid a user id
+ * - array group user group, given as hash
+ * group_id => group_name,
+ * empty if undefined
+ * - array error error info, given as hash
+ * with indices 'code', 'msg', and
+ * 'info', empty, if no error occured
+ * @see ... (link to where the group and error structures are
+ * defined)
+ * @return array
+ */
+ function casesGetUserGroups()
+ {
+ return array(
+ 'validSuperUser' => array(
+ 42,
+ array( 8 => 'Super Users' ),
+ array(),
+ ),
+ 'unknownUser' => array(
+ 1000,
+ array(),
+ array(
+ 'code' => 'SOME_ERROR_CODE',
+ 'msg' => 'JLIB_USER_ERROR_UNABLE_TO_LOAD_USER',
+ 'info' => ''
+ ),
+ ),
+ );
+ }
+
/**
- * @todo Implement testGetUserGroups().
+ * TestingGetUserGroups().
+ *
+ * @param integer User ID
+ * @param mixed User object or empty array if unknown
+ * @param array Expected error info
+ *
+ * @return void
+ * @dataProvider casesGetUserGroups
*/
- public function testGetUserGroups()
+ public function testGetUserGroups( $userid, $expected, $error )
{
- // Remove the following lines when you implement this test.
- $this->markTestIncomplete(
- 'This test has not been implemented yet.'
+ $this->assertThat(
+ JUserHelper::getUserGroups($userid),
+ $this->equalTo($expected)
);
+ $this->assertThat(
+ JUserHelperTest::$actualError,
+ $this->equalTo($error)
+ );
}

/**
@@ -98,15 +168,48 @@
}

/**
- * @todo Implement testGetUserId().
+ * Test cases for userId
+ *
+ * @return array
*/
- public function testGetUserId()
+ function casesGetUserId()
{
- // Remove the following lines when you implement this test.
- $this->markTestIncomplete(
- 'This test has not been implemented yet.'
+ return array(
+ 'admin' => array(
+ 'admin',
+ 42,
+ array(),
+ ),
+ 'unknown' => array(
+ 'unknown',
+ null,
+ array(),
+ ),
);
}
+
+ /**
+ * TestingGetUserGroups().
+ *
+ * @param string User name
+ * @param int Expected user id
+ * @param array Expected error info
+ *
+ * @return void
+ * @dataProvider casesGetUserId
+ */
+ public function testGetUserId( $username, $expected, $error )
+ {
+ $expResult = $expected;
+ $this->assertThat(
+ JUserHelper::getUserId($username),
+ $this->equalTo($expResult)
+ );
+ $this->assertThat(
+ JUserHelperTest::$actualError,
+ $this->equalTo($error)
+ );
+ }

/**
* @todo Implement testGetCryptedPassword().

Modified: development/branches/jcamp/tests/unit/suite/libraries/joomla/user/JUserTest.php
===================================================================
--- development/branches/jcamp/tests/unit/suite/libraries/joomla/user/JUserTest.php 2010-08-31 19:21:09 UTC (rev 18740)
+++ development/branches/jcamp/tests/unit/suite/libraries/joomla/user/JUserTest.php 2010-08-31 19:24:28 UTC (rev 18741)
@@ -442,7 +442,7 @@
$this->assertThat(
$testUser->getErrors(),
$this->equalTo(
- array('Please enter a valid e-mail address.')
+ array('Please enter a valid email address.')
),
'Should have caused valid email error'
);

Modified: development/branches/jcamp/tests/unit/suite/libraries/joomla/utilities/JSimpleCryptTest.php
===================================================================
--- development/branches/jcamp/tests/unit/suite/libraries/joomla/utilities/JSimpleCryptTest.php 2010-08-31 19:21:09 UTC (rev 18740)
+++ development/branches/jcamp/tests/unit/suite/libraries/joomla/utilities/JSimpleCryptTest.php 2010-08-31 19:24:28 UTC (rev 18741)
@@ -17,7 +17,7 @@
* @package Joomla.UnitTest
* @subpackage Utilities
*/
-class JSimpleCryptTest extends PHPUnit_Framework_TestCase
+class JSimpleCryptTest extends JoomlaTestCase
{
/**
* @var JSimpleCrypt
@@ -33,6 +33,7 @@
protected function setUp()
{
//$this->object = new JSimpleCrypt;
+ $this->saveFactoryState();
}

/**
@@ -43,6 +44,7 @@
*/
protected function tearDown()
{
+ $this->restoreFactoryState();
}

/**
@@ -97,6 +99,14 @@
*/
public function testDecrypt( $expected, $key, $text )
{
+ $cfg = $this->getMock('JObject', array('get'));
+
+ $cfg->expects($this->any())
+ ->method('get')
+ ->will($this->returnValue(''));
+
+ JFactory::$config = $cfg;
+
$this->object = new JSimpleCrypt($key);

$this->assertThat(
@@ -117,6 +127,14 @@
*/
public function testEncrypt( $text, $key, $expected )
{
+ $cfg = $this->getMock('JObject', array('get'));
+
+ $cfg->expects($this->any())
+ ->method('get')
+ ->will($this->returnValue(''));
+
+ JFactory::$config = $cfg;
+
$this->object = new JSimpleCrypt($key);

$this->assertThat(
@@ -125,4 +143,4 @@
);
}
}
-?>
+

Reply all
Reply to author
Forward
0 new messages