From 19b38c7c740461b572d0801ce58a244dc0659bc4 Mon Sep 17 00:00:00 2001
From: Neo <321592+Neo-Desktop@users.noreply.github.com>
Date: Fri, 19 Dec 2025 00:26:08 -0800
Subject: [PATCH] Version 2.3.6
---
.../jscripts/dom-drag.js | 240 +
.../jscripts/folder_rte_files/blank.html | 14 +
.../jscripts/folder_rte_files/index.html | 1 +
.../folder_rte_files/module_bbcodeloader.php | 246 +
.../jscripts/folder_rte_files/module_div.php | 264 +
.../folder_rte_files/module_email.php | 208 +
.../folder_rte_files/module_image.php | 231 +
.../jscripts/folder_rte_files/module_link.php | 260 +
.../folder_rte_files/module_table.php | 299 +
.../folder_rte_files/rte_html_functions.js | 143 +
.../jscripts/folder_rte_files/rte_popup.css | 81 +
.../jscripts/index.html | 1 +
.../jscripts/ipb_board.js | 15 +
.../jscripts/ipb_finduser.js | 75 +
.../jscripts/ipb_forum.js | 965 +
.../jscripts/ipb_global.js | 1349 +
.../jscripts/ipb_global_xmlenhanced.js | 463 +
.../jscripts/ipb_pm.js | 179 +
.../jscripts/ipb_poll.js | 440 +
.../jscripts/ipb_profile.js | 36 +
.../jscripts/ipb_register.js | 959 +
.../jscripts/ipb_topic.js | 1119 +
.../jscripts/ipb_usercp.js | 238 +
.../jscripts/ipb_xhr_findnames.js | 720 +
.../jscripts/ips_attach.js | 666 +
.../jscripts/ips_ipsclass.js | 597 +
.../jscripts/ips_menu.js | 559 +
.../jscripts/ips_profile_portal.js | 1282 +
.../jscripts/ips_text_editor.js | 3794 +++
.../jscripts/ips_text_editor_func.js | 569 +
.../jscripts/ips_text_editor_lite.js | 819 +
.../jscripts/ips_xmlhttprequest.js | 397 +
.../skin_acp/clientscripts/index.html | 1 +
.../skin_acp/clientscripts/ipd_cell_select.js | 311 +
.../skin_acp/clientscripts/ipd_dragmove.js | 910 +
.../clientscripts/ipd_form_functions.js | 402 +
.../skin_acp/clientscripts/ipd_tab_factory.js | 184 +
.../skin_acp/clientscripts/ipd_titleedit.js | 559 +
.../skin_acp/clientscripts/ips_calendar_us.js | 299 +
.../clientscripts/ips_hierarchical.js | 147 +
.../Installation Guide/data/Thumbs.db | Bin 9728 -> 0 bytes
.../Installation Guide/data/help.html | 180 -
.../Installation Guide/data/install.html | 326 -
.../Installation Guide/data/logo4.gif | Bin 5476 -> 0 bytes
.../Installation Guide/data/logobg.gif | Bin 3295 -> 0 bytes
.../Installation Guide/data/menu.html | 114 -
.../Installation Guide/data/tile_back.gif | Bin 488 -> 0 bytes
.../Installation Guide/data/welcome.html | 89 -
.../Installation Guide/install_guide.html | 32 -
.../InstallationGuide/data/chmod.html | 232 +
Documentation/InstallationGuide/data/docs.css | 228 +
.../InstallationGuide/data/help.html | 293 +
.../data/images/addresses.gif | Bin 0 -> 1236 bytes
.../InstallationGuide/data/images/admin.gif | Bin 0 -> 1152 bytes
.../InstallationGuide/data/images/box.gif | Bin 0 -> 1652 bytes
.../data/images/bullet_doing.gif | Bin 0 -> 1008 bytes
.../data/images/bullet_done.gif | Bin 0 -> 1009 bytes
.../data/images/bullet_notdone.gif | Bin 0 -> 1010 bytes
.../InstallationGuide/data/images/check.gif | Bin 0 -> 1383 bytes
.../InstallationGuide/data/images/db.gif | Bin 0 -> 1250 bytes
.../data/images}/file.gif | Bin
.../data/images}/folder.gif | Bin
.../InstallationGuide/data/images/help.gif | Bin 0 -> 1396 bytes
.../InstallationGuide/data/images/index.html | 11 +
.../data/images/install_done.gif | Bin 0 -> 1693 bytes
.../InstallationGuide/data/images/link.gif | Bin 0 -> 1057 bytes
.../InstallationGuide/data/images/main_bg.gif | Bin 0 -> 2116 bytes
.../data/images/package_bg.gif | Bin 0 -> 34431 bytes
.../data/images/package_icon.gif | Bin 0 -> 1169 bytes
.../InstallationGuide/data/images/pixel.gif | Bin 0 -> 43 bytes
.../data/images/title_bar.gif | Bin 0 -> 295 bytes
.../InstallationGuide/data/images/warning.gif | Bin 0 -> 1520 bytes
.../InstallationGuide/data/images/wizard.gif | Bin 0 -> 1591 bytes
.../InstallationGuide/data/install1.html | 42 +
.../InstallationGuide/data/install2.html | 47 +
.../InstallationGuide/data/install3.html | 32 +
.../InstallationGuide/data/requirements.html | 37 +
.../InstallationGuide/data/welcome.html | 40 +
.../InstallationGuide/install_guide.html | 57 +
.../InstallationGuide/upgrading.html | 63 +
Documentation/START_HERE.html | 61 +
Documentation/upgradefromipb_1x.html | 114 -
Tools/ipchat.php | 266 +
Tools/rebuildposts/readme.txt | 18 +
Tools/rebuildposts/rebuildposts.php | 654 +
{Tools_and_Scripts => Tools}/ssi.php | 1520 +-
Tools/ssi_templates/active.html | 1 +
Tools/ssi_templates/index.html | 1 +
Tools/ssi_templates/news.html | 1 +
Tools/ssi_templates/stats.html | 1 +
.../ssi_templates/syndicate_rss.html | 2 +-
Tools/ssi_templates/syndicate_xml.html | 1 +
Tools_and_Scripts/portal/index_rename.php | 28 -
Tools_and_Scripts/portal/readme.txt | 44 -
Tools_and_Scripts/show.php | 55 -
Tools_and_Scripts/ssi_templates/active.html | 16 -
Tools_and_Scripts/ssi_templates/index.html | 15 -
Tools_and_Scripts/ssi_templates/news.html | 13 -
Tools_and_Scripts/ssi_templates/stats.html | 17 -
.../ssi_templates/syndicate_xml.html | 39 -
readme.html | 119 -
upload/admin.php | 17 +-
upload/admin/Thumbs.db | Bin 3072 -> 3072 bytes
upload/admin/index.php | 28 +-
upload/cache/index.html | 11 +-
.../cache/lang_cache/en/acp_lang_acpperms.php | 5 +-
upload/cache/lang_cache/en/index.html | 11 +-
upload/cache/lang_cache/en/lang_editors.php | 3 +
.../lang_cache/en/lang_email_content.php | 84 +-
upload/cache/lang_cache/en/lang_error.php | 12 +-
upload/cache/lang_cache/en/lang_global.php | 49 +-
upload/cache/lang_cache/en/lang_javascript.js | 2 +
upload/cache/lang_cache/en/lang_mod.php | 5 +-
upload/cache/lang_cache/en/lang_msg.php | 20 +-
upload/cache/lang_cache/en/lang_post.php | 9 +
upload/cache/lang_cache/en/lang_profile.php | 14 +-
upload/cache/lang_cache/en/lang_register.php | 40 +-
upload/cache/lang_cache/en/lang_topic.php | 15 +-
upload/cache/lang_cache/en/lang_ucp.php | 27 +-
upload/cache/lang_cache/index.html | 11 +-
.../cache/lang_cache/ru/acp_lang_acpperms.php | 196 -
.../cache/lang_cache/ru/acp_lang_member.php | 28 -
.../cache/lang_cache/ru/acp_lang_portal.php | 23 -
upload/cache/lang_cache/ru/index.html | 10 -
upload/cache/lang_cache/ru/lang_boards.php | 110 -
upload/cache/lang_cache/ru/lang_buddy.php | 56 -
upload/cache/lang_cache/ru/lang_calendar.php | 115 -
upload/cache/lang_cache/ru/lang_chatpara.php | 19 -
upload/cache/lang_cache/ru/lang_chatsigma.php | 19 -
upload/cache/lang_cache/ru/lang_editors.php | 127 -
.../lang_cache/ru/lang_email_content.php | 611 -
upload/cache/lang_cache/ru/lang_emails.php | 73 -
upload/cache/lang_cache/ru/lang_error.php | 330 -
upload/cache/lang_cache/ru/lang_forum.php | 142 -
upload/cache/lang_cache/ru/lang_global.php | 298 -
upload/cache/lang_cache/ru/lang_help.php | 19 -
upload/cache/lang_cache/ru/lang_javascript.js | 64 -
upload/cache/lang_cache/ru/lang_legends.php | 36 -
upload/cache/lang_cache/ru/lang_login.php | 70 -
upload/cache/lang_cache/ru/lang_mlist.php | 90 -
upload/cache/lang_cache/ru/lang_mod.php | 276 -
upload/cache/lang_cache/ru/lang_msg.php | 295 -
upload/cache/lang_cache/ru/lang_online.php | 52 -
upload/cache/lang_cache/ru/lang_portal.php | 54 -
upload/cache/lang_cache/ru/lang_post.php | 227 -
upload/cache/lang_cache/ru/lang_printpage.php | 27 -
upload/cache/lang_cache/ru/lang_profile.php | 274 -
upload/cache/lang_cache/ru/lang_register.php | 247 -
upload/cache/lang_cache/ru/lang_search.php | 164 -
upload/cache/lang_cache/ru/lang_stats.php | 40 -
.../lang_cache/ru/lang_subscriptions.php | 83 -
upload/cache/lang_cache/ru/lang_tar.php | 31 -
upload/cache/lang_cache/ru/lang_topic.php | 223 -
upload/cache/lang_cache/ru/lang_ucp.php | 647 -
upload/cache/skin_cache/index.html | 11 +-
upload/conf_global.php.dist | 4 -
.../converge_local/apis/allowed_methods.php | 75 +-
upload/converge_local/apis/index.html | 11 +-
.../converge_local/apis/server_functions.php | 95 +-
upload/converge_local/converge.php | 26 +-
upload/converge_local/converge_server.php | 15 +-
upload/converge_local/index.html | 11 +-
upload/index.php | 132 +-
upload/init.php | 60 +-
upload/install/core/actions/address.php | 38 +-
upload/install/core/actions/admin.php | 36 +-
upload/install/core/actions/db.php | 55 +-
upload/install/core/actions/done.php | 28 +-
upload/install/core/actions/eula.php | 28 +-
upload/install/core/actions/index.html | 11 +-
upload/install/core/actions/install.php | 2014 +-
upload/install/core/actions/requirements.php | 28 +-
upload/install/core/class_installer.php | 682 +-
upload/install/core/class_tar.php | 1747 +-
upload/install/core/conf.php | 4 +-
upload/install/core/index.html | 11 +-
upload/install/core/ipsclass.php | 117 +-
upload/install/core/template.php | 105 +-
upload/install/custom/app.php | 808 +-
upload/install/custom/index.html | 11 +-
upload/install/images/Thumbs.db | Bin 19968 -> 0 bytes
upload/install/images/index.html | 11 +-
upload/install/index.php | 40 +-
upload/install/installfiles/config.xml | 87 +-
upload/install/installfiles/groups.xml | 12 +-
upload/install/installfiles/index.html | 11 +-
upload/install/installfiles/loginauth.xml | 14 +-
upload/install/installfiles/sequence.xml | 14 +-
.../install/installfiles/writeablefiles.xml | 4 +
upload/install/sql/index.html | 11 +-
upload/install/sql/mysql_fulltext.php | 28 -
upload/install/sql/mysql_inserts.php | 59 +-
upload/install/sql/mysql_install.php | 229 +-
upload/install/sql/mysql_tables.php | 2645 +-
upload/interface/board/index.php | 261 +
upload/interface/board/modules/ipb/api.php | 1100 +
upload/interface/board/modules/ipb/config.php | 31 +
upload/interface/board/modules/ipb/index.html | 1 +
.../interface/board/modules/ipb/methods.php | 154 +
upload/ips_kernel/PEAR/Text/Diff.php | 32 +-
upload/ips_kernel/PEAR/Text/Diff/Renderer.php | 2 +-
.../PEAR/Text/Diff/Renderer/index.html | 1 +
.../PEAR/Text/Diff/Renderer/inline.php | 2 +-
.../PEAR/Text/Diff/Renderer/unified.php | 2 +-
upload/ips_kernel/PEAR/Text/Diff/index.html | 1 +
upload/ips_kernel/PEAR/Text/Diff3.php | 2 +-
upload/ips_kernel/PEAR/Text/index.html | 1 +
upload/ips_kernel/PEAR/index.html | 1 +
upload/ips_kernel/class_ajax.php | 40 +-
upload/ips_kernel/class_api_server.php | 49 +-
upload/ips_kernel/class_cache_apc.php | 13 +-
upload/ips_kernel/class_cache_diskcache.php | 11 +-
.../ips_kernel/class_cache_eaccelerator.php | 16 +-
upload/ips_kernel/class_cache_memcache.php | 11 +-
upload/ips_kernel/class_cache_mmcache.php | 11 +-
upload/ips_kernel/class_cache_xcache.php | 11 +-
upload/ips_kernel/class_captcha.php | 706 +-
.../class_captcha_plugin/default.php | 819 +
.../class_captcha_plugin/recaptcha.php | 281 +
upload/ips_kernel/class_communication.php | 27 +-
upload/ips_kernel/class_converge.php | 10 +-
upload/ips_kernel/class_convert_charset.php | 21 +-
upload/ips_kernel/class_db.php | 97 +-
upload/ips_kernel/class_db_mysql.php | 19 +-
upload/ips_kernel/class_db_mysql_client.php | 188 +-
upload/ips_kernel/class_db_mysqli_client.php | 204 +-
upload/ips_kernel/class_difference.php | 28 +-
upload/ips_kernel/class_email.php | 387 +-
upload/ips_kernel/class_file_management.php | 37 +-
upload/ips_kernel/class_image.php | 15 +-
upload/ips_kernel/class_ipsclass_core.php | 13 +-
upload/ips_kernel/class_profiling.php | 396 +
upload/ips_kernel/class_resources_reader.php | 553 -
upload/ips_kernel/class_rss.php | 398 +-
upload/ips_kernel/class_template.php | 10 +-
upload/ips_kernel/class_template_engine.php | 119 +-
upload/ips_kernel/class_upload.php | 89 +-
upload/ips_kernel/class_xml.php | 27 +-
upload/ips_kernel/class_xml_rpc.php | 98 +-
upload/ips_kernel/class_xmlarchive.php | 19 +-
upload/ips_kernel/db_lib/index.html | 1 +
upload/ips_kernel/db_lib/mysql_tools.php | 372 +
.../convertcharset/ConvertCharset.class.php | 1204 +-
.../convertcharset/ConvertTables/index.html | 1 +
.../convertcharset/ConvertTables/windows-874 | 286 +
.../ips_kernel/i18n/convertcharset/index.html | 1 +
upload/ips_kernel/i18n/index.html | 1 +
upload/ips_kernel/index.html | 11 +-
upload/jscripts/folder_rte_files/index.html | 11 +-
.../folder_rte_files/module_bbcodeloader.php | 101 +-
.../jscripts/folder_rte_files/module_div.php | 62 +-
.../folder_rte_files/module_email.php | 18 +-
.../folder_rte_files/module_image.php | 26 +-
.../jscripts/folder_rte_files/module_link.php | 26 +-
.../folder_rte_files/module_table.php | 76 +-
upload/jscripts/index.html | 11 +-
upload/jscripts/ipb_forum.js | 1260 +-
upload/jscripts/ipb_global.js | 2 +-
upload/jscripts/ipb_global_xmlenhanced.js | 2 +-
upload/jscripts/ipb_register.js | 960 +-
upload/jscripts/ipb_usercp.js | 239 +-
upload/jscripts/ips_ipsclass.js | 2 +-
upload/jscripts/ips_menu.js | 2 +-
upload/jscripts/ips_profile_portal.js | 2 +-
upload/jscripts/ips_text_editor.js | 3873 ++-
upload/jscripts/ips_text_editor_func.js | 2 +-
upload/jscripts/ips_text_editor_lite.js | 2 +-
upload/lofiversion/index.php | 64 +-
upload/lofiversion/lofi_skin.php | 21 +-
upload/lofiversion/lofiscreen.css | 4 +-
upload/modules/index.html | 11 +-
upload/modules/ipb_member_sync.php | 17 +-
upload/modules/mod_example.php | 14 +-
upload/modules/module_loader.php | 10 +-
upload/resources/acpperms.xml | 2 +-
upload/resources/bbcode.xml | 260 +-
upload/resources/components.xml | 206 +-
upload/resources/faq.xml | 220 +-
upload/resources/help_sections.xml | 969 +
upload/resources/help_settings.xml | 470 +
upload/resources/index.html | 11 +-
upload/resources/ipb_images-pro.xml.gz | Bin 0 -> 247310 bytes
upload/resources/ipb_skin-pro.xml.gz | Bin 0 -> 135672 bytes
upload/resources/ipb_templates.xml | 25653 ++++++++--------
upload/resources/macro.xml | 938 +-
upload/resources/settings.xml | 13601 ++++----
upload/resources/skinsets.xml | 933 +-
upload/resources/tasks.xml | 62 +-
upload/resources/version_history.php | 13 +
upload/retail/chatauth.php | 19 +-
upload/retail/chatservice.php | 17 +-
upload/retail/index.html | 11 +-
upload/skin_acp/IPB2_Standard/acp_css.css | 107 +-
upload/skin_acp/IPB2_Standard/acp_js.js | 30 +-
.../IPB2_Standard/acp_js_skin/index.html | 11 +-
.../acp_js_skin/ips_menu_html.js | 210 +-
upload/skin_acp/IPB2_Standard/acp_perms.js | 12 +-
.../acp_skin_html/cp_skin_admin.php | 163 +-
.../acp_skin_html/cp_skin_api.php | 317 +
.../acp_skin_html/cp_skin_attachments.php | 170 +-
.../acp_skin_html/cp_skin_bbcode_badword.php | 339 +-
.../acp_skin_html/cp_skin_components.php | 64 +-
.../acp_skin_html/cp_skin_dashboard.php | 1073 +
.../acp_skin_html/cp_skin_diagnostics.php | 45 +-
.../acp_skin_html/cp_skin_editors.php | 10 +-
.../acp_skin_html/cp_skin_forums.php | 301 +-
.../acp_skin_html/cp_skin_global.php | 179 +-
.../acp_skin_html/cp_skin_groups.php | 840 +-
.../acp_skin_html/cp_skin_index.php | 803 -
.../acp_skin_html/cp_skin_lookandfeel.php | 400 +-
.../acp_skin_html/cp_skin_management.php | 634 +-
.../acp_skin_html/cp_skin_member.php | 1238 +-
.../acp_skin_html/cp_skin_paysubs.php | 8 -
.../acp_skin_html/cp_skin_rss.php | 132 +-
.../acp_skin_html/cp_skin_security.php | 1195 +-
.../acp_skin_html/cp_skin_settings.php | 214 +-
.../acp_skin_html/cp_skin_taskmanager.php | 830 +-
.../acp_skin_html/cp_skin_tools.php | 1419 +-
.../IPB2_Standard/acp_skin_html/index.html | 11 +-
upload/skin_acp/IPB2_Standard/acp_template.js | 2 +-
upload/skin_acp/IPB2_Standard/colours.html | 2 +-
upload/skin_acp/IPB2_Standard/css.html | 2 +-
.../skin_acp/IPB2_Standard/images/about.png | Bin 0 -> 875 bytes
.../IPB2_Standard/images/acp-login-logo.gif | Bin 9979 -> 3394 bytes
.../IPB2_Standard/images/acp-logo.gif | Bin 3327 -> 3894 bytes
.../IPB2_Standard/images/emo_delete.gif | Bin 387 -> 410 bytes
.../folder_components/diagnostics/index.html | 10 -
.../images/folder_components/index.html | 11 +-
.../folder_components/index/bulkmail.png | Bin 0 -> 1530 bytes
.../images/folder_components/index/emos.png | Bin 0 -> 1164 bytes
.../images/folder_components/index/forums.png | Bin 0 -> 1533 bytes
.../images/folder_components/index/groups.png | Bin 0 -> 1711 bytes
.../images/folder_components/index/index.html | 11 +-
.../folder_components/index/languages.png | Bin 0 -> 1796 bytes
.../folder_components/index/members.png | Bin 0 -> 1449 bytes
.../folder_components/index/settings.png | Bin 0 -> 1605 bytes
.../images/folder_components/index/skins.png | Bin 0 -> 1593 bytes
.../folder_components/index/validating.png | Bin 0 -> 1413 bytes
.../folder_components/security/index.html | 11 +-
.../folder_components/skinremap/index.html | 1 +
.../folder_components/skinremap/remap_row.png | Bin 0 -> 1581 bytes
.../folder_components/xmlrpc/api_user.png | Bin 0 -> 1620 bytes
.../folder_components/xmlrpc/index.html | 1 +
.../folder_components/xmlrpc/log_row.png | Bin 0 -> 753 bytes
.../folder_css_images/dropshadow-alpha.png | Bin 2698 -> 13086 bytes
.../images/folder_css_images/index.html | 11 +-
.../IPB2_Standard/images/icon_help.png | Bin 0 -> 3554 bytes
.../images/icons_form/index.html | 11 +-
.../images/icons_menu/index.html | 11 +-
.../skin_acp/IPB2_Standard/images/iframe.html | 1 +
.../skin_acp/IPB2_Standard/images/index.html | 11 +-
.../IPB2_Standard/images/ipsnews_item.gif | Bin 0 -> 517 bytes
.../images/tabs_main/dashboard.png | Bin 0 -> 1109 bytes
.../IPB2_Standard/images/tabs_main/index.html | 11 +-
.../IPB2_Standard/images/te_remove.gif | Bin 139 -> 333 bytes
.../IPB2_Standard/images/te_revert.gif | Bin 144 -> 333 bytes
.../images/update_icons/index.html | 1 +
.../images/update_icons/update_available.gif | Bin 0 -> 3410 bytes
.../images/update_icons/update_info.png | Bin 0 -> 10404 bytes
.../images/update_icons/update_security.gif | Bin 0 -> 8720 bytes
.../images/update_icons/update_warning.png | Bin 0 -> 10086 bytes
.../images/update_icons/uptodate.gif | Bin 0 -> 3501 bytes
upload/skin_acp/IPB2_Standard/index.html | 11 +-
upload/skin_acp/clientscripts/index.html | 11 +-
upload/skin_acp/index.html | 11 +-
upload/sources/acp_loaders/acp_admin.php | 236 +-
upload/sources/acp_loaders/acp_components.php | 323 +-
upload/sources/acp_loaders/acp_content.php | 209 +-
upload/sources/acp_loaders/acp_dashboard.php | 92 +
upload/sources/acp_loaders/acp_help.php | 185 +-
.../sources/acp_loaders/acp_lookandfeel.php | 202 +-
.../sources/acp_loaders/acp_pages_admin.php | 124 +-
.../acp_loaders/acp_pages_components.php | 173 +-
.../sources/acp_loaders/acp_pages_content.php | 231 +-
upload/sources/acp_loaders/acp_pages_help.php | 138 +-
.../acp_loaders/acp_pages_lookandfeel.php | 68 +-
.../sources/acp_loaders/acp_pages_tools.php | 106 +-
upload/sources/acp_loaders/acp_tools.php | 205 +-
upload/sources/acp_loaders/index.html | 11 +-
.../sources/action_admin/acppermissions.php | 2724 +-
.../sources/action_admin/administration.php | 1528 +-
upload/sources/action_admin/adminlogs.php | 279 +-
upload/sources/action_admin/api.php | 580 +
upload/sources/action_admin/attachments.php | 715 +-
upload/sources/action_admin/banandbadword.php | 495 +-
upload/sources/action_admin/bbcode.php | 418 +-
upload/sources/action_admin/calendars.php | 1979 +-
upload/sources/action_admin/components.php | 2483 +-
.../action_admin/{index.php => dashboard.php} | 1108 +-
upload/sources/action_admin/diagnostics.php | 893 +-
upload/sources/action_admin/emailerror.php | 262 +-
upload/sources/action_admin/emaillogs.php | 318 +-
upload/sources/action_admin/emoticons.php | 822 +-
upload/sources/action_admin/forums.php | 1256 +-
upload/sources/action_admin/groups.php | 1552 +-
upload/sources/action_admin/help.php | 1156 +-
upload/sources/action_admin/index.html | 11 +-
upload/sources/action_admin/ips.php | 256 +-
upload/sources/action_admin/languages.php | 970 +-
upload/sources/action_admin/login.php | 737 +-
upload/sources/action_admin/login_auth.php | 436 +-
upload/sources/action_admin/logs_login.php | 366 +-
upload/sources/action_admin/member.php | 3065 +-
upload/sources/action_admin/member_tools.php | 816 +-
upload/sources/action_admin/moderator.php | 1521 +-
upload/sources/action_admin/modlogs.php | 294 +-
.../sources/action_admin/multi_moderate.php | 1096 +-
.../sources/action_admin/paysubscriptions.php | 63 +-
upload/sources/action_admin/portal.php | 778 +-
upload/sources/action_admin/postoffice.php | 2144 +-
upload/sources/action_admin/prefs.php | 400 +-
upload/sources/action_admin/profilefields.php | 1154 +-
upload/sources/action_admin/quickhelp.php | 341 +-
upload/sources/action_admin/rebuild.php | 1946 +-
.../sources/action_admin/remote_template.php | 1994 +-
upload/sources/action_admin/rssexport.php | 1190 +-
upload/sources/action_admin/rssimport.php | 838 +-
upload/sources/action_admin/security.php | 554 +-
upload/sources/action_admin/settings.php | 463 +-
upload/sources/action_admin/skin_css.php | 2148 +-
upload/sources/action_admin/skin_diff.php | 378 +-
upload/sources/action_admin/skin_import.php | 845 +-
upload/sources/action_admin/skin_macros.php | 974 +-
upload/sources/action_admin/skin_remap.php | 378 +
upload/sources/action_admin/skin_sets.php | 3850 ++-
.../action_admin/skin_template_bits.php | 2725 +-
upload/sources/action_admin/skin_wrappers.php | 163 +-
upload/sources/action_admin/skintools.php | 1091 +-
upload/sources/action_admin/spiderlogs.php | 617 +-
upload/sources/action_admin/sql.php | 136 +-
upload/sources/action_admin/sql_mysql.php | 1040 +-
upload/sources/action_admin/statistics.php | 1153 +-
upload/sources/action_admin/support.php | 112 +-
upload/sources/action_admin/task_manager.php | 563 +-
upload/sources/action_admin/warnlogs.php | 424 +-
upload/sources/action_admin/xmlout.php | 681 +-
.../sources/action_public/announcements.php | 67 +-
upload/sources/action_public/attach.php | 37 +-
upload/sources/action_public/boards.php | 28 +-
upload/sources/action_public/browsebuddy.php | 22 +-
upload/sources/action_public/calendar.php | 5980 ++--
upload/sources/action_public/captcha.php | 92 +
upload/sources/action_public/findpost.php | 42 +-
upload/sources/action_public/forums.php | 105 +-
upload/sources/action_public/help.php | 26 +-
upload/sources/action_public/index.html | 11 +-
upload/sources/action_public/login.php | 55 +-
upload/sources/action_public/memberlist.php | 83 +-
upload/sources/action_public/messenger.php | 171 +-
.../action_public/misc/contact_member.php | 1625 +-
.../action_public/misc/forward_page.php | 18 +-
upload/sources/action_public/misc/index.html | 11 +-
upload/sources/action_public/misc/legends.php | 121 +-
.../action_public/misc/multi_moderate.php | 22 +-
.../sources/action_public/misc/print_page.php | 48 +-
upload/sources/action_public/misc/stats.php | 20 +-
upload/sources/action_public/misc/tracker.php | 32 +-
upload/sources/action_public/misc/warn.php | 75 +-
upload/sources/action_public/moderate.php | 93 +-
upload/sources/action_public/online.php | 27 +-
.../action_public/paysubscriptions.php | 38 +-
upload/sources/action_public/portal.php | 30 +-
upload/sources/action_public/post.php | 21 +-
upload/sources/action_public/profile.php | 8677 +++---
upload/sources/action_public/register.php | 5659 ++--
upload/sources/action_public/rssout.php | 26 +-
upload/sources/action_public/search.php | 4008 ++-
upload/sources/action_public/taskloader.php | 16 +-
upload/sources/action_public/topics.php | 5481 ++--
upload/sources/action_public/usercp.php | 8067 ++---
upload/sources/action_public/xmlout.php | 4642 ++-
upload/sources/api/api_components.php | 135 +-
upload/sources/api/api_core.php | 97 +-
upload/sources/api/api_forums.php | 126 +-
upload/sources/api/api_language.php | 38 +-
upload/sources/api/api_member.php | 325 +
upload/sources/api/api_settings.php | 831 +-
upload/sources/api/api_skins.php | 684 +-
upload/sources/api/api_tasks.php | 41 +-
.../sources/api/api_topic_subscriptions.php | 170 +
upload/sources/api/api_topic_view.php | 144 +-
upload/sources/api/api_topics_and_posts.php | 229 +-
upload/sources/api/index.html | 11 +-
.../sources/classes/attach/class_attach.php | 2396 +-
upload/sources/classes/attach/index.html | 11 +-
upload/sources/classes/attach/plugin_msg.php | 89 +-
upload/sources/classes/attach/plugin_post.php | 102 +-
.../sources/classes/bbcode/class_bbcode.php | 1568 +-
.../classes/bbcode/class_bbcode_core.php | 505 +-
.../classes/bbcode/class_bbcode_legacy.php | 18 +-
upload/sources/classes/bbcode/index.html | 11 +-
.../sources/classes/class_custom_fields.php | 26 +-
upload/sources/classes/class_display.php | 127 +-
upload/sources/classes/class_email.php | 518 +-
upload/sources/classes/class_forums.php | 31 +-
upload/sources/classes/class_session.php | 134 +-
.../sources/classes/class_virus_checker.php | 962 +-
.../classes/class_virus_checker/index.html | 11 +-
.../class_virus_checker/lib_known_names.php | 17 +-
.../class_virus_checker/lib_lang_files.php | 17 +-
.../lib_writeable_dirs.php | 17 +-
.../sources/classes/editor/class_editor.php | 24 +-
.../classes/editor/class_editor_rte.php | 38 +-
.../classes/editor/class_editor_std.php | 12 +-
upload/sources/classes/editor/index.html | 11 +-
upload/sources/classes/index.html | 11 +-
.../paymentgateways/class_gw_2checkout.php | 32 +-
.../paymentgateways/class_gw_authorizenet.php | 43 +-
.../classes/paymentgateways/class_gw_core.php | 4 +-
.../paymentgateways/class_gw_manual.php | 20 +
.../paymentgateways/class_gw_nochex.php | 34 +-
.../paymentgateways/class_gw_paypal.php | 53 +-
.../paymentgateways/class_gw_protx.php | 72 +-
.../paymentgateways/class_gw_safshop.php | 25 +-
.../classes/paymentgateways/class_gw_test.php | 5 +
.../paymentgateways/custom/cus_example.php | 4 +-
.../classes/paymentgateways/custom/index.html | 11 +-
.../classes/paymentgateways/index.html | 11 +-
upload/sources/classes/post/class_post.php | 5022 ++-
.../sources/classes/post/class_post_edit.php | 1815 +-
.../sources/classes/post/class_post_new.php | 83 +-
.../sources/classes/post/class_post_reply.php | 119 +-
upload/sources/classes/post/index.html | 11 +-
upload/sources/components_acp/blog.php | 5 +-
upload/sources/components_acp/chatpara.php | 39 +-
upload/sources/components_acp/chatsigma.php | 385 +-
upload/sources/components_acp/copyright.php | 476 +-
upload/sources/components_acp/default.php | 16 +-
upload/sources/components_acp/downloads.php | 111 +
upload/sources/components_acp/gallery.php | 103 +-
upload/sources/components_acp/index.html | 11 +-
.../components_acp/setting_plugins/index.html | 11 +-
.../setting_plugins/securityandprivacy.php | 298 +-
.../setting_plugins/trashcan.php | 16 +-
upload/sources/components_init/chatpara.php | 14 +-
upload/sources/components_init/chatsigma.php | 16 +-
upload/sources/components_init/index.html | 11 +-
.../sources/components_location/chatpara.php | 14 +-
.../sources/components_location/chatsigma.php | 16 +-
upload/sources/components_location/index.html | 11 +-
upload/sources/components_public/chatpara.php | 24 +-
.../sources/components_public/chatsigma.php | 22 +-
upload/sources/components_public/index.html | 11 +-
.../profile/aboutme.conf.php | 35 +
.../components_public/profile/aboutme.php | 120 +
.../components_public/profile/index.html | 11 +-
.../components_public/profile/posts.conf.php | 4 +-
.../components_public/profile/posts.php | 52 +-
.../components_public/profile/topics.conf.php | 4 +-
.../components_public/profile/topics.php | 52 +-
upload/sources/components_ucp/index.html | 11 +-
upload/sources/handlers/han_editor.php | 193 +-
upload/sources/handlers/han_login.php | 115 +-
upload/sources/handlers/han_parse_bbcode.php | 104 +-
.../sources/handlers/han_paysubscriptions.php | 2684 +-
upload/sources/handlers/han_post.php | 16 +-
upload/sources/handlers/index.html | 11 +-
upload/sources/index.html | 11 +-
upload/sources/ipsclass.php | 1036 +-
upload/sources/lib/admin_cache_functions.php | 2261 +-
upload/sources/lib/admin_forum_functions.php | 1096 +-
upload/sources/lib/admin_functions.php | 878 +-
upload/sources/lib/admin_pages.php | 477 +-
upload/sources/lib/admin_skin.php | 1533 +-
.../sources/lib/admin_template_functions.php | 255 +-
upload/sources/lib/func_boardstats.php | 44 +-
upload/sources/lib/func_chat.php | 364 +-
upload/sources/lib/func_chat_legacy.php | 31 +-
upload/sources/lib/func_digest.php | 181 +-
upload/sources/lib/func_mod.php | 70 +-
upload/sources/lib/func_msg.php | 3162 +-
upload/sources/lib/func_taskmanager.php | 28 +-
upload/sources/lib/func_topic_linear.php | 25 +-
upload/sources/lib/func_topic_threaded.php | 46 +-
upload/sources/lib/func_usercp.php | 140 +-
upload/sources/lib/index.html | 11 +-
upload/sources/lib/post_parser.php | 20 +-
upload/sources/lib/search_mysql_ftext.php | 194 +-
upload/sources/lib/search_mysql_man.php | 63 +-
upload/sources/lib/skin_info.php | 250 +-
upload/sources/lib/tar.php | 20 +-
upload/sources/loginauth/convert/auth.php | 281 +-
.../sources/loginauth/convert/auth_sha256.php | 24 +-
upload/sources/loginauth/convert/index.html | 11 +-
upload/sources/loginauth/external/auth.php | 100 +-
upload/sources/loginauth/external/index.html | 11 +-
upload/sources/loginauth/index.html | 11 +-
upload/sources/loginauth/internal/auth.php | 25 +-
upload/sources/loginauth/internal/index.html | 11 +-
upload/sources/loginauth/ipconverge/auth.php | 394 +-
.../sources/loginauth/ipconverge/index.html | 11 +-
upload/sources/loginauth/ldap/auth.php | 42 +-
upload/sources/loginauth/ldap/conf.php | 9 +
upload/sources/loginauth/ldap/index.html | 11 +-
upload/sources/loginauth/login_core.php | 89 +-
.../sources/portal_plugins/calendar-cfg.php | 20 +-
upload/sources/portal_plugins/calendar.php | 470 +-
upload/sources/portal_plugins/index.html | 11 +-
.../portal_plugins/online_users-cfg.php | 20 +-
.../sources/portal_plugins/online_users.php | 16 +-
upload/sources/portal_plugins/poll-cfg.php | 20 +-
upload/sources/portal_plugins/poll.php | 16 +-
.../portal_plugins/recent_topics-cfg.php | 22 +-
.../sources/portal_plugins/recent_topics.php | 80 +-
upload/sources/sql/index.html | 11 +-
upload/sources/sql/mysql_admin_queries.php | 26 +-
upload/sources/sql/mysql_api_queries.php | 12 +-
upload/sources/sql/mysql_extra_queries.php | 20 +-
upload/sources/sql/mysql_queries.php | 1594 +-
upload/sources/sql/mysql_subsm_queries.php | 18 +-
upload/sources/tasks/announcements.php | 20 +-
upload/sources/tasks/bulkmail.php | 18 +-
upload/sources/tasks/calendarevents.php | 20 +-
upload/sources/tasks/cleanout.php | 20 +-
upload/sources/tasks/dailycleanout.php | 35 +-
upload/sources/tasks/dailydigest.php | 20 +-
upload/sources/tasks/doexpiresubs.php | 20 +-
upload/sources/tasks/expiresubs.php | 48 +-
upload/sources/tasks/index.html | 11 +-
upload/sources/tasks/logprune.php | 20 +-
upload/sources/tasks/rebuildstats.php | 20 +-
upload/sources/tasks/removevalidating.php | 49 +-
upload/sources/tasks/rssimport.php | 41 +-
upload/sources/tasks/update_profile_views.php | 18 +-
upload/sources/tasks/updateviews.php | 20 +-
upload/sources/tasks/weeklydigest.php | 20 +-
.../IPB_Community_Pack/Thumbs.db | Bin 66048 -> 0 bytes
.../IPB_Community_Pack/index.html | 1 +
upload/style_avatars/Smiley_Avatars/Thumbs.db | Bin 10240 -> 0 bytes
.../style_avatars/Smiley_Avatars/index.html | 1 +
upload/style_avatars/Thumbs.db | Bin 12800 -> 0 bytes
upload/style_avatars/index.html | 11 +-
.../captcha_backgrounds/captcha1.jpg | Bin 0 -> 2279 bytes
.../captcha_backgrounds/captcha10.jpg | Bin 0 -> 3121 bytes
.../captcha_backgrounds/captcha2.jpg | Bin 0 -> 3105 bytes
.../captcha_backgrounds/captcha3.jpg | Bin 0 -> 3343 bytes
.../captcha_backgrounds/captcha4.jpg | Bin 0 -> 3004 bytes
.../captcha_backgrounds/captcha5.jpg | Bin 0 -> 2973 bytes
.../captcha_backgrounds/captcha6.jpg | Bin 0 -> 3386 bytes
.../captcha_backgrounds/captcha7.jpg | Bin 0 -> 6286 bytes
.../captcha_backgrounds/captcha8.jpg | Bin 0 -> 7701 bytes
.../captcha_backgrounds/captcha9.jpg | Bin 0 -> 3712 bytes
.../captcha_backgrounds/index.html | 1 +
upload/style_captcha/captcha_fonts/bboron.ttf | Bin 0 -> 32480 bytes
.../style_captcha/captcha_fonts/colophon.ttf | Bin 0 -> 42820 bytes
upload/style_captcha/captcha_fonts/davis.ttf | Bin 0 -> 37784 bytes
upload/style_captcha/captcha_fonts/hockey.ttf | Bin 0 -> 46560 bytes
upload/style_captcha/captcha_fonts/index.html | 11 +-
upload/style_captcha/captcha_fonts/px10.ttf | Bin 0 -> 29480 bytes
upload/style_captcha/captcha_fonts/robot.ttf | Bin 0 -> 45072 bytes
upload/style_captcha/captcha_fonts/tomnr.ttf | Bin 0 -> 53760 bytes
upload/style_captcha/index.html | 11 +-
upload/style_emoticons/default/closedeyes.gif | Bin 472 -> 0 bytes
upload/style_emoticons/default/glare.gif | Bin 468 -> 0 bytes
upload/style_emoticons/default/index.html | 11 +-
upload/style_emoticons/default/ninja.gif | Bin 481 -> 0 bytes
upload/style_emoticons/default/wink.gif | Bin 696 -> 696 bytes
upload/style_emoticons/index.html | 11 +-
upload/style_images/1/cal_addevent.gif | Bin 2646 -> 1987 bytes
upload/style_images/1/cal_newevent.gif | Bin 2599 -> 1944 bytes
upload/style_images/1/click2enlarge.gif | Bin 393 -> 304 bytes
.../1/folder_attach_images/index.html | 11 +-
.../1/folder_editor_images/css_rte.css | 12 +-
.../1/folder_editor_images/index.html | 11 +-
.../style_images/1/folder_js_skin/index.html | 11 +-
.../1/folder_js_skin/ips_menu_html.js | 2 +-
.../1/folder_mime_types/index.html | 11 +-
.../1/folder_post_icons/index.html | 11 +-
.../1/folder_profile_portal/index.html | 11 +-
.../1/folder_team_icons/index.html | 11 +-
.../1/folder_topic_view/index.html | 11 +-
upload/style_images/1/index.html | 11 +-
upload/style_images/1/login-button.gif | Bin 1226 -> 1226 bytes
upload/style_images/1/nophoto.gif | Bin 3253 -> 3288 bytes
upload/style_images/1/p_aim.gif | Bin 1281 -> 1294 bytes
upload/style_images/1/p_card.gif | Bin 1856 -> 1557 bytes
upload/style_images/1/p_delete.gif | Bin 1781 -> 1583 bytes
upload/style_images/1/p_edit.gif | Bin 1813 -> 1438 bytes
upload/style_images/1/p_email.gif | Bin 1596 -> 1574 bytes
upload/style_images/1/p_icq.gif | Bin 1286 -> 1290 bytes
upload/style_images/1/p_im.gif | Bin 1194 -> 1200 bytes
upload/style_images/1/p_move.gif | Bin 1920 -> 1586 bytes
upload/style_images/1/p_mq_add.gif | Bin 1683 -> 1633 bytes
upload/style_images/1/p_mq_remove.gif | Bin 1637 -> 1578 bytes
upload/style_images/1/p_msn.gif | Bin 1309 -> 1310 bytes
upload/style_images/1/p_offline.gif | Bin 784 -> 815 bytes
upload/style_images/1/p_online.gif | Bin 1230 -> 1231 bytes
upload/style_images/1/p_pin.gif | Bin 1724 -> 1415 bytes
upload/style_images/1/p_pm.gif | Bin 1486 -> 1222 bytes
upload/style_images/1/p_quote.gif | Bin 1734 -> 1516 bytes
upload/style_images/1/p_report.gif | Bin 1681 -> 1601 bytes
upload/style_images/1/p_unpin.gif | Bin 1816 -> 1553 bytes
upload/style_images/1/p_up.gif | Bin 695 -> 1402 bytes
upload/style_images/1/p_www.gif | Bin 1517 -> 1523 bytes
upload/style_images/1/rate1.gif | Bin 311 -> 297 bytes
upload/style_images/1/rate2.gif | Bin 319 -> 296 bytes
upload/style_images/1/rate3.gif | Bin 319 -> 298 bytes
upload/style_images/1/rate4.gif | Bin 308 -> 294 bytes
upload/style_images/1/rate5.gif | Bin 226 -> 212 bytes
upload/style_images/1/t_addpoll.gif | Bin 2510 -> 1911 bytes
upload/style_images/1/t_closed.gif | Bin 1873 -> 1817 bytes
upload/style_images/1/t_comments.gif | Bin 1929 -> 1953 bytes
upload/style_images/1/t_ecard.gif | Bin 2024 -> 1834 bytes
upload/style_images/1/t_favorite.gif | Bin 2208 -> 2102 bytes
upload/style_images/1/t_media.gif | Bin 2682 -> 2241 bytes
upload/style_images/1/t_moved.gif | Bin 2127 -> 2520 bytes
upload/style_images/1/t_new.gif | Bin 2248 -> 1947 bytes
upload/style_images/1/t_newimage.gif | Bin 2086 -> 2108 bytes
upload/style_images/1/t_options.gif | Bin 1841 -> 1932 bytes
upload/style_images/1/t_poll.gif | Bin 2404 -> 1891 bytes
upload/style_images/1/t_qr.gif | Bin 2318 -> 1972 bytes
upload/style_images/1/t_reply.gif | Bin 1936 -> 1957 bytes
upload/style_images/1/t_slideshow.gif | Bin 2071 -> 2176 bytes
upload/style_images/css_1.css | 13 +-
upload/style_images/index.html | 11 +-
upload/upgrade/core/actions/done.php | 26 -
upload/upgrade/core/actions/eula.php | 31 -
upload/upgrade/core/actions/index.html | 1 +
upload/upgrade/core/actions/install.php | 396 +-
upload/upgrade/core/actions/overview.php | 58 +-
upload/upgrade/core/class_installer.php | 62 +-
upload/upgrade/core/conf.php | 6 +-
upload/upgrade/core/index.html | 1 +
upload/upgrade/core/template.php | 104 +-
upload/upgrade/custom/app.php | 104 +-
upload/upgrade/custom/index.html | 1 +
upload/upgrade/images/index.html | 17 +-
upload/upgrade/index.php | 223 +-
upload/upgrade/installfiles/config.xml | 87 +-
upload/upgrade/installfiles/index.html | 1 +
upload/upgrade/installfiles/sequence.xml | 9 +-
..._upgrade.php => version_upgrade_mysql.php} | 1346 +-
..._upgrade.php => version_upgrade_mysql.php} | 468 +-
..._upgrade.php => version_upgrade_mysql.php} | 1242 +-
.../installfiles/upg_20004/mysql_updates.php | 37 +-
.../installfiles/upg_20005/mysql_updates.php | 12 +-
.../installfiles/upg_20007/mysql_updates.php | 66 +-
.../installfiles/upg_20009/components.php | 1356 -
.../installfiles/upg_20009/mysql_updates.php | 10 +-
.../upg_20009/version_upgrade.php | 68 -
.../installfiles/upg_20010/components.php | 1349 -
.../upg_20010/version_upgrade.php | 68 -
.../installfiles/upg_21003/components.php | 1675 -
.../upg_21003/mysql_updates_4.php | 27 +-
.../upg_21003/version_upgrade.php | 230 +-
.../upg_21007/version_upgrade.php | 44 +-
.../installfiles/upg_21008/mysql_updates.php | 2 +-
.../upg_21008/version_upgrade.php | 28 +-
.../installfiles/upg_21009/mysql_updates.php | 42 +-
.../upg_21009/version_upgrade.php | 32 +-
.../upg_22005/mysql_updates_3.php | 4 +-
.../upg_22005/version_upgrade.php | 230 +-
.../upg_22006/version_upgrade.php | 58 +-
.../installfiles/upg_23000/mysql_updates.php | 29 +
.../installfiles/upg_23002/mysql_updates.php | 19 +
.../installfiles/upg_23003/mysql_updates.php | 6 +
.../upg_23003/version_upgrade.php | 104 +
.../installfiles/upg_23005/mysql_updates.php | 36 +
.../installfiles/upg_23007/mysql_updates.php | 5 +
.../installfiles/upg_23008/mysql_updates.php | 11 +
.../installfiles/upg_23010/mysql_updates.php | 6 +
upload/upgrade/sql/mysql_install.php | 130 -
upload/uploads/index.html | 11 +-
upload/uploads/profile/index.html | 1 +
764 files changed, 143731 insertions(+), 118164 deletions(-)
create mode 100644 Development/javascript_uncompressed/jscripts/dom-drag.js
create mode 100644 Development/javascript_uncompressed/jscripts/folder_rte_files/blank.html
create mode 100644 Development/javascript_uncompressed/jscripts/folder_rte_files/index.html
create mode 100644 Development/javascript_uncompressed/jscripts/folder_rte_files/module_bbcodeloader.php
create mode 100644 Development/javascript_uncompressed/jscripts/folder_rte_files/module_div.php
create mode 100644 Development/javascript_uncompressed/jscripts/folder_rte_files/module_email.php
create mode 100644 Development/javascript_uncompressed/jscripts/folder_rte_files/module_image.php
create mode 100644 Development/javascript_uncompressed/jscripts/folder_rte_files/module_link.php
create mode 100644 Development/javascript_uncompressed/jscripts/folder_rte_files/module_table.php
create mode 100644 Development/javascript_uncompressed/jscripts/folder_rte_files/rte_html_functions.js
create mode 100644 Development/javascript_uncompressed/jscripts/folder_rte_files/rte_popup.css
create mode 100644 Development/javascript_uncompressed/jscripts/index.html
create mode 100644 Development/javascript_uncompressed/jscripts/ipb_board.js
create mode 100644 Development/javascript_uncompressed/jscripts/ipb_finduser.js
create mode 100644 Development/javascript_uncompressed/jscripts/ipb_forum.js
create mode 100644 Development/javascript_uncompressed/jscripts/ipb_global.js
create mode 100644 Development/javascript_uncompressed/jscripts/ipb_global_xmlenhanced.js
create mode 100644 Development/javascript_uncompressed/jscripts/ipb_pm.js
create mode 100644 Development/javascript_uncompressed/jscripts/ipb_poll.js
create mode 100644 Development/javascript_uncompressed/jscripts/ipb_profile.js
create mode 100644 Development/javascript_uncompressed/jscripts/ipb_register.js
create mode 100644 Development/javascript_uncompressed/jscripts/ipb_topic.js
create mode 100644 Development/javascript_uncompressed/jscripts/ipb_usercp.js
create mode 100644 Development/javascript_uncompressed/jscripts/ipb_xhr_findnames.js
create mode 100644 Development/javascript_uncompressed/jscripts/ips_attach.js
create mode 100644 Development/javascript_uncompressed/jscripts/ips_ipsclass.js
create mode 100644 Development/javascript_uncompressed/jscripts/ips_menu.js
create mode 100644 Development/javascript_uncompressed/jscripts/ips_profile_portal.js
create mode 100644 Development/javascript_uncompressed/jscripts/ips_text_editor.js
create mode 100644 Development/javascript_uncompressed/jscripts/ips_text_editor_func.js
create mode 100644 Development/javascript_uncompressed/jscripts/ips_text_editor_lite.js
create mode 100644 Development/javascript_uncompressed/jscripts/ips_xmlhttprequest.js
create mode 100644 Development/javascript_uncompressed/skin_acp/clientscripts/index.html
create mode 100644 Development/javascript_uncompressed/skin_acp/clientscripts/ipd_cell_select.js
create mode 100644 Development/javascript_uncompressed/skin_acp/clientscripts/ipd_dragmove.js
create mode 100644 Development/javascript_uncompressed/skin_acp/clientscripts/ipd_form_functions.js
create mode 100644 Development/javascript_uncompressed/skin_acp/clientscripts/ipd_tab_factory.js
create mode 100644 Development/javascript_uncompressed/skin_acp/clientscripts/ipd_titleedit.js
create mode 100644 Development/javascript_uncompressed/skin_acp/clientscripts/ips_calendar_us.js
create mode 100644 Development/javascript_uncompressed/skin_acp/clientscripts/ips_hierarchical.js
delete mode 100644 Documentation/Installation Guide/data/Thumbs.db
delete mode 100644 Documentation/Installation Guide/data/help.html
delete mode 100644 Documentation/Installation Guide/data/install.html
delete mode 100644 Documentation/Installation Guide/data/logo4.gif
delete mode 100644 Documentation/Installation Guide/data/logobg.gif
delete mode 100644 Documentation/Installation Guide/data/menu.html
delete mode 100644 Documentation/Installation Guide/data/tile_back.gif
delete mode 100644 Documentation/Installation Guide/data/welcome.html
delete mode 100644 Documentation/Installation Guide/install_guide.html
create mode 100644 Documentation/InstallationGuide/data/chmod.html
create mode 100644 Documentation/InstallationGuide/data/docs.css
create mode 100644 Documentation/InstallationGuide/data/help.html
create mode 100644 Documentation/InstallationGuide/data/images/addresses.gif
create mode 100644 Documentation/InstallationGuide/data/images/admin.gif
create mode 100644 Documentation/InstallationGuide/data/images/box.gif
create mode 100644 Documentation/InstallationGuide/data/images/bullet_doing.gif
create mode 100644 Documentation/InstallationGuide/data/images/bullet_done.gif
create mode 100644 Documentation/InstallationGuide/data/images/bullet_notdone.gif
create mode 100644 Documentation/InstallationGuide/data/images/check.gif
create mode 100644 Documentation/InstallationGuide/data/images/db.gif
rename Documentation/{Installation Guide/data => InstallationGuide/data/images}/file.gif (100%)
rename Documentation/{Installation Guide/data => InstallationGuide/data/images}/folder.gif (100%)
create mode 100644 Documentation/InstallationGuide/data/images/help.gif
create mode 100644 Documentation/InstallationGuide/data/images/index.html
create mode 100644 Documentation/InstallationGuide/data/images/install_done.gif
create mode 100644 Documentation/InstallationGuide/data/images/link.gif
create mode 100644 Documentation/InstallationGuide/data/images/main_bg.gif
create mode 100644 Documentation/InstallationGuide/data/images/package_bg.gif
create mode 100644 Documentation/InstallationGuide/data/images/package_icon.gif
create mode 100644 Documentation/InstallationGuide/data/images/pixel.gif
create mode 100644 Documentation/InstallationGuide/data/images/title_bar.gif
create mode 100644 Documentation/InstallationGuide/data/images/warning.gif
create mode 100644 Documentation/InstallationGuide/data/images/wizard.gif
create mode 100644 Documentation/InstallationGuide/data/install1.html
create mode 100644 Documentation/InstallationGuide/data/install2.html
create mode 100644 Documentation/InstallationGuide/data/install3.html
create mode 100644 Documentation/InstallationGuide/data/requirements.html
create mode 100644 Documentation/InstallationGuide/data/welcome.html
create mode 100644 Documentation/InstallationGuide/install_guide.html
create mode 100644 Documentation/InstallationGuide/upgrading.html
create mode 100644 Documentation/START_HERE.html
delete mode 100644 Documentation/upgradefromipb_1x.html
create mode 100644 Tools/ipchat.php
create mode 100644 Tools/rebuildposts/readme.txt
create mode 100644 Tools/rebuildposts/rebuildposts.php
rename {Tools_and_Scripts => Tools}/ssi.php (79%)
create mode 100644 Tools/ssi_templates/active.html
create mode 100644 Tools/ssi_templates/index.html
create mode 100644 Tools/ssi_templates/news.html
create mode 100644 Tools/ssi_templates/stats.html
rename {Tools_and_Scripts => Tools}/ssi_templates/syndicate_rss.html (73%)
create mode 100644 Tools/ssi_templates/syndicate_xml.html
delete mode 100644 Tools_and_Scripts/portal/index_rename.php
delete mode 100644 Tools_and_Scripts/portal/readme.txt
delete mode 100644 Tools_and_Scripts/show.php
delete mode 100644 Tools_and_Scripts/ssi_templates/active.html
delete mode 100644 Tools_and_Scripts/ssi_templates/index.html
delete mode 100644 Tools_and_Scripts/ssi_templates/news.html
delete mode 100644 Tools_and_Scripts/ssi_templates/stats.html
delete mode 100644 Tools_and_Scripts/ssi_templates/syndicate_xml.html
delete mode 100644 readme.html
delete mode 100644 upload/cache/lang_cache/ru/acp_lang_acpperms.php
delete mode 100644 upload/cache/lang_cache/ru/acp_lang_member.php
delete mode 100644 upload/cache/lang_cache/ru/acp_lang_portal.php
delete mode 100644 upload/cache/lang_cache/ru/index.html
delete mode 100644 upload/cache/lang_cache/ru/lang_boards.php
delete mode 100644 upload/cache/lang_cache/ru/lang_buddy.php
delete mode 100644 upload/cache/lang_cache/ru/lang_calendar.php
delete mode 100644 upload/cache/lang_cache/ru/lang_chatpara.php
delete mode 100644 upload/cache/lang_cache/ru/lang_chatsigma.php
delete mode 100644 upload/cache/lang_cache/ru/lang_editors.php
delete mode 100644 upload/cache/lang_cache/ru/lang_email_content.php
delete mode 100644 upload/cache/lang_cache/ru/lang_emails.php
delete mode 100644 upload/cache/lang_cache/ru/lang_error.php
delete mode 100644 upload/cache/lang_cache/ru/lang_forum.php
delete mode 100644 upload/cache/lang_cache/ru/lang_global.php
delete mode 100644 upload/cache/lang_cache/ru/lang_help.php
delete mode 100644 upload/cache/lang_cache/ru/lang_javascript.js
delete mode 100644 upload/cache/lang_cache/ru/lang_legends.php
delete mode 100644 upload/cache/lang_cache/ru/lang_login.php
delete mode 100644 upload/cache/lang_cache/ru/lang_mlist.php
delete mode 100644 upload/cache/lang_cache/ru/lang_mod.php
delete mode 100644 upload/cache/lang_cache/ru/lang_msg.php
delete mode 100644 upload/cache/lang_cache/ru/lang_online.php
delete mode 100644 upload/cache/lang_cache/ru/lang_portal.php
delete mode 100644 upload/cache/lang_cache/ru/lang_post.php
delete mode 100644 upload/cache/lang_cache/ru/lang_printpage.php
delete mode 100644 upload/cache/lang_cache/ru/lang_profile.php
delete mode 100644 upload/cache/lang_cache/ru/lang_register.php
delete mode 100644 upload/cache/lang_cache/ru/lang_search.php
delete mode 100644 upload/cache/lang_cache/ru/lang_stats.php
delete mode 100644 upload/cache/lang_cache/ru/lang_subscriptions.php
delete mode 100644 upload/cache/lang_cache/ru/lang_tar.php
delete mode 100644 upload/cache/lang_cache/ru/lang_topic.php
delete mode 100644 upload/cache/lang_cache/ru/lang_ucp.php
delete mode 100644 upload/install/images/Thumbs.db
create mode 100644 upload/interface/board/index.php
create mode 100644 upload/interface/board/modules/ipb/api.php
create mode 100644 upload/interface/board/modules/ipb/config.php
create mode 100644 upload/interface/board/modules/ipb/index.html
create mode 100644 upload/interface/board/modules/ipb/methods.php
create mode 100644 upload/ips_kernel/PEAR/Text/Diff/Renderer/index.html
create mode 100644 upload/ips_kernel/PEAR/Text/Diff/index.html
create mode 100644 upload/ips_kernel/PEAR/Text/index.html
create mode 100644 upload/ips_kernel/PEAR/index.html
create mode 100644 upload/ips_kernel/class_captcha_plugin/default.php
create mode 100644 upload/ips_kernel/class_captcha_plugin/recaptcha.php
create mode 100644 upload/ips_kernel/class_profiling.php
delete mode 100644 upload/ips_kernel/class_resources_reader.php
create mode 100644 upload/ips_kernel/db_lib/index.html
create mode 100644 upload/ips_kernel/db_lib/mysql_tools.php
create mode 100644 upload/ips_kernel/i18n/convertcharset/ConvertTables/index.html
create mode 100644 upload/ips_kernel/i18n/convertcharset/ConvertTables/windows-874
create mode 100644 upload/ips_kernel/i18n/convertcharset/index.html
create mode 100644 upload/ips_kernel/i18n/index.html
create mode 100644 upload/resources/help_sections.xml
create mode 100644 upload/resources/help_settings.xml
create mode 100644 upload/resources/ipb_images-pro.xml.gz
create mode 100644 upload/resources/ipb_skin-pro.xml.gz
create mode 100644 upload/skin_acp/IPB2_Standard/acp_skin_html/cp_skin_api.php
create mode 100644 upload/skin_acp/IPB2_Standard/acp_skin_html/cp_skin_dashboard.php
delete mode 100644 upload/skin_acp/IPB2_Standard/acp_skin_html/cp_skin_index.php
create mode 100644 upload/skin_acp/IPB2_Standard/images/about.png
delete mode 100644 upload/skin_acp/IPB2_Standard/images/folder_components/diagnostics/index.html
create mode 100644 upload/skin_acp/IPB2_Standard/images/folder_components/index/bulkmail.png
create mode 100644 upload/skin_acp/IPB2_Standard/images/folder_components/index/emos.png
create mode 100644 upload/skin_acp/IPB2_Standard/images/folder_components/index/forums.png
create mode 100644 upload/skin_acp/IPB2_Standard/images/folder_components/index/groups.png
create mode 100644 upload/skin_acp/IPB2_Standard/images/folder_components/index/languages.png
create mode 100644 upload/skin_acp/IPB2_Standard/images/folder_components/index/members.png
create mode 100644 upload/skin_acp/IPB2_Standard/images/folder_components/index/settings.png
create mode 100644 upload/skin_acp/IPB2_Standard/images/folder_components/index/skins.png
create mode 100644 upload/skin_acp/IPB2_Standard/images/folder_components/index/validating.png
create mode 100644 upload/skin_acp/IPB2_Standard/images/folder_components/skinremap/index.html
create mode 100644 upload/skin_acp/IPB2_Standard/images/folder_components/skinremap/remap_row.png
create mode 100644 upload/skin_acp/IPB2_Standard/images/folder_components/xmlrpc/api_user.png
create mode 100644 upload/skin_acp/IPB2_Standard/images/folder_components/xmlrpc/index.html
create mode 100644 upload/skin_acp/IPB2_Standard/images/folder_components/xmlrpc/log_row.png
create mode 100644 upload/skin_acp/IPB2_Standard/images/icon_help.png
create mode 100644 upload/skin_acp/IPB2_Standard/images/iframe.html
create mode 100644 upload/skin_acp/IPB2_Standard/images/ipsnews_item.gif
create mode 100644 upload/skin_acp/IPB2_Standard/images/tabs_main/dashboard.png
create mode 100644 upload/skin_acp/IPB2_Standard/images/update_icons/index.html
create mode 100644 upload/skin_acp/IPB2_Standard/images/update_icons/update_available.gif
create mode 100644 upload/skin_acp/IPB2_Standard/images/update_icons/update_info.png
create mode 100644 upload/skin_acp/IPB2_Standard/images/update_icons/update_security.gif
create mode 100644 upload/skin_acp/IPB2_Standard/images/update_icons/update_warning.png
create mode 100644 upload/skin_acp/IPB2_Standard/images/update_icons/uptodate.gif
create mode 100644 upload/sources/acp_loaders/acp_dashboard.php
create mode 100644 upload/sources/action_admin/api.php
rename upload/sources/action_admin/{index.php => dashboard.php} (57%)
create mode 100644 upload/sources/action_admin/skin_remap.php
create mode 100644 upload/sources/action_public/captcha.php
create mode 100644 upload/sources/api/api_member.php
create mode 100644 upload/sources/api/api_topic_subscriptions.php
create mode 100644 upload/sources/components_acp/downloads.php
create mode 100644 upload/sources/components_public/profile/aboutme.conf.php
create mode 100644 upload/sources/components_public/profile/aboutme.php
delete mode 100644 upload/style_avatars/IPB_Community_Pack/Thumbs.db
create mode 100644 upload/style_avatars/IPB_Community_Pack/index.html
delete mode 100644 upload/style_avatars/Smiley_Avatars/Thumbs.db
create mode 100644 upload/style_avatars/Smiley_Avatars/index.html
delete mode 100644 upload/style_avatars/Thumbs.db
create mode 100644 upload/style_captcha/captcha_backgrounds/captcha1.jpg
create mode 100644 upload/style_captcha/captcha_backgrounds/captcha10.jpg
create mode 100644 upload/style_captcha/captcha_backgrounds/captcha2.jpg
create mode 100644 upload/style_captcha/captcha_backgrounds/captcha3.jpg
create mode 100644 upload/style_captcha/captcha_backgrounds/captcha4.jpg
create mode 100644 upload/style_captcha/captcha_backgrounds/captcha5.jpg
create mode 100644 upload/style_captcha/captcha_backgrounds/captcha6.jpg
create mode 100644 upload/style_captcha/captcha_backgrounds/captcha7.jpg
create mode 100644 upload/style_captcha/captcha_backgrounds/captcha8.jpg
create mode 100644 upload/style_captcha/captcha_backgrounds/captcha9.jpg
create mode 100644 upload/style_captcha/captcha_backgrounds/index.html
create mode 100644 upload/style_captcha/captcha_fonts/bboron.ttf
create mode 100644 upload/style_captcha/captcha_fonts/colophon.ttf
create mode 100644 upload/style_captcha/captcha_fonts/davis.ttf
create mode 100644 upload/style_captcha/captcha_fonts/hockey.ttf
create mode 100644 upload/style_captcha/captcha_fonts/px10.ttf
create mode 100644 upload/style_captcha/captcha_fonts/robot.ttf
create mode 100644 upload/style_captcha/captcha_fonts/tomnr.ttf
delete mode 100644 upload/style_emoticons/default/closedeyes.gif
delete mode 100644 upload/style_emoticons/default/glare.gif
delete mode 100644 upload/style_emoticons/default/ninja.gif
create mode 100644 upload/upgrade/core/actions/index.html
create mode 100644 upload/upgrade/core/index.html
create mode 100644 upload/upgrade/custom/index.html
create mode 100644 upload/upgrade/installfiles/index.html
rename upload/upgrade/installfiles/upg_10002/{version_upgrade.php => version_upgrade_mysql.php} (62%)
rename upload/upgrade/installfiles/upg_10003/{version_upgrade.php => version_upgrade_mysql.php} (80%)
rename upload/upgrade/installfiles/upg_10004/{version_upgrade.php => version_upgrade_mysql.php} (77%)
delete mode 100644 upload/upgrade/installfiles/upg_20009/components.php
delete mode 100644 upload/upgrade/installfiles/upg_20009/version_upgrade.php
delete mode 100644 upload/upgrade/installfiles/upg_20010/components.php
delete mode 100644 upload/upgrade/installfiles/upg_20010/version_upgrade.php
delete mode 100644 upload/upgrade/installfiles/upg_21003/components.php
create mode 100644 upload/upgrade/installfiles/upg_23000/mysql_updates.php
create mode 100644 upload/upgrade/installfiles/upg_23002/mysql_updates.php
create mode 100644 upload/upgrade/installfiles/upg_23003/mysql_updates.php
create mode 100644 upload/upgrade/installfiles/upg_23003/version_upgrade.php
create mode 100644 upload/upgrade/installfiles/upg_23005/mysql_updates.php
create mode 100644 upload/upgrade/installfiles/upg_23007/mysql_updates.php
create mode 100644 upload/upgrade/installfiles/upg_23008/mysql_updates.php
create mode 100644 upload/upgrade/installfiles/upg_23010/mysql_updates.php
delete mode 100644 upload/upgrade/sql/mysql_install.php
create mode 100644 upload/uploads/profile/index.html
diff --git a/Development/javascript_uncompressed/jscripts/dom-drag.js b/Development/javascript_uncompressed/jscripts/dom-drag.js
new file mode 100644
index 00000000..0da3991b
--- /dev/null
+++ b/Development/javascript_uncompressed/jscripts/dom-drag.js
@@ -0,0 +1,240 @@
+/**************************************************
+ * dom-drag.js
+ * 09.25.2001
+ * www.youngpup.net
+ **************************************************
+ * 10.28.2001 - fixed minor bug where events
+ * sometimes fired off the handle, not the root.
+ **************************************************
+ * IPS CHANGES
+ * 06.01.2005 - Added "cursorchange" to change
+ * 07.18.2005 - Added cookie to store values
+ * 07.18.2005 - Made it impossible to drag < 0 height (keeponscreen)
+ * mouse cursor when over drag handle
+ * 07.29.2005 - Added "AddEvent" handler to prevent
+ * event clashes / overwrites
+ **************************************************/
+
+
+var Drag = {
+
+ obj : null,
+ fx : null,
+ fy : null,
+ cookiename : null,
+ keeponscreen: true,
+
+ init : function(o, oRoot, minX, maxX, minY, maxY, bSwapHorzRef, bSwapVertRef, fXMapper, fYMapper)
+ {
+ o.onmousedown = Drag.start;
+ o.onmouseover = Drag.cursorchange;
+
+ o.hmode = bSwapHorzRef ? false : true ;
+ o.vmode = bSwapVertRef ? false : true ;
+
+ o.root = oRoot && oRoot != null ? oRoot : o ;
+
+ if (o.hmode && isNaN(parseInt(o.root.style.left ))) o.root.style.left = "0px";
+ if (o.vmode && isNaN(parseInt(o.root.style.top ))) o.root.style.top = "0px";
+ if (!o.hmode && isNaN(parseInt(o.root.style.right ))) o.root.style.right = "0px";
+ if (!o.vmode && isNaN(parseInt(o.root.style.bottom))) o.root.style.bottom = "0px";
+
+ o.minX = typeof minX != 'undefined' ? minX : null;
+ o.minY = typeof minY != 'undefined' ? minY : null;
+ o.maxX = typeof maxX != 'undefined' ? maxX : null;
+ o.maxY = typeof maxY != 'undefined' ? maxY : null;
+
+ o.xMapper = fXMapper ? fXMapper : null;
+ o.yMapper = fYMapper ? fYMapper : null;
+
+ //----------------------------------
+ // Figure width and height
+ //----------------------------------
+
+ if ( Drag.keeponscreen )
+ {
+ Drag.my_width = 0;
+ Drag.my_height = 0;
+
+ if ( typeof( window.innerWidth ) == 'number' )
+ {
+ //----------------------------------
+ // Non IE
+ //----------------------------------
+
+ Drag.my_width = window.innerWidth;
+ Drag.my_height = window.innerHeight;
+ }
+ else if ( document.documentElement && ( document.documentElement.clientWidth || document.documentElement.clientHeight ) )
+ {
+ //----------------------------------
+ // IE 6+
+ //----------------------------------
+
+ Drag.my_width = document.documentElement.clientWidth;
+ Drag.my_height = document.documentElement.clientHeight;
+ }
+ else if ( document.body && ( document.body.clientWidth || document.body.clientHeight ) )
+ {
+ //----------------------------------
+ // Old IE
+ //----------------------------------
+
+ Drag.my_width = document.body.clientWidth;
+ Drag.my_height = document.body.clientHeight;
+ }
+ }
+
+ o.root.onDragStart = new Function();
+ o.root.onDragEnd = new Function();
+ o.root.onDrag = new Function();
+ },
+
+ cursorchange : function(e)
+ {
+ var o = Drag.obj = this;
+ o.style.cursor = 'move';
+ },
+
+ start : function(e)
+ {
+ var o = Drag.obj = this;
+ e = Drag.fixE(e);
+ var y = parseInt(o.vmode ? o.root.style.top : o.root.style.bottom);
+ var x = parseInt(o.hmode ? o.root.style.left : o.root.style.right );
+ o.root.onDragStart(x, y);
+
+ o.lastMouseX = e.clientX;
+ o.lastMouseY = e.clientY;
+
+ if (o.hmode) {
+ if (o.minX != null) o.minMouseX = e.clientX - x + o.minX;
+ if (o.maxX != null) o.maxMouseX = o.minMouseX + o.maxX - o.minX;
+ } else {
+ if (o.minX != null) o.maxMouseX = -o.minX + e.clientX + x;
+ if (o.maxX != null) o.minMouseX = -o.maxX + e.clientX + x;
+ }
+
+ if (o.vmode) {
+ if (o.minY != null) o.minMouseY = e.clientY - y + o.minY;
+ if (o.maxY != null) o.maxMouseY = o.minMouseY + o.maxY - o.minY;
+ } else {
+ if (o.minY != null) o.maxMouseY = -o.minY + e.clientY + y;
+ if (o.maxY != null) o.minMouseY = -o.maxY + e.clientY + y;
+ }
+
+ //Drag.addEvent( document, 'mousemove', Drag.drag , false );
+ //Drag.addEvent( document, 'mouseup' , Drag.end , false );
+
+ document.onmousemove = Drag.drag;
+ document.onmouseup = Drag.end;
+
+ return false;
+ },
+
+ drag : function(e)
+ {
+ e = Drag.fixE(e);
+ var o = Drag.obj;
+
+ var ey = e.clientY;
+ var ex = e.clientX;
+ var y = parseInt(o.vmode ? o.root.style.top : o.root.style.bottom);
+ var x = parseInt(o.hmode ? o.root.style.left : o.root.style.right );
+ var nx, ny;
+
+ if (o.minX != null) ex = o.hmode ? Math.max(ex, o.minMouseX) : Math.min(ex, o.maxMouseX);
+ if (o.maxX != null) ex = o.hmode ? Math.min(ex, o.maxMouseX) : Math.max(ex, o.minMouseX);
+ if (o.minY != null) ey = o.vmode ? Math.max(ey, o.minMouseY) : Math.min(ey, o.maxMouseY);
+ if (o.maxY != null) ey = o.vmode ? Math.min(ey, o.maxMouseY) : Math.max(ey, o.minMouseY);
+
+ nx = x + ((ex - o.lastMouseX) * (o.hmode ? 1 : -1));
+ ny = y + ((ey - o.lastMouseY) * (o.vmode ? 1 : -1));
+
+ if (o.xMapper) nx = o.xMapper(y);
+ else if (o.yMapper) ny = o.yMapper(x);
+
+ //----------------------------------
+ // Keep on screen?
+ //----------------------------------
+
+ if ( Drag.keeponscreen )
+ {
+ ny = ny < 0 ? 0 : ny;
+ nx = nx < 0 ? 0 : nx;
+
+ if ( Drag.my_width )
+ {
+ nx = nx > Drag.my_width - parseInt(o.root.style.width) ? Drag.my_width - parseInt(o.root.style.width) : nx;
+ }
+ }
+
+ Drag.obj.root.style[o.hmode ? "left" : "right"] = nx + "px";
+ Drag.obj.root.style[o.vmode ? "top" : "bottom"] = ny + "px";
+ Drag.obj.lastMouseX = ex;
+ Drag.obj.lastMouseY = ey;
+
+ Drag.obj.root.onDrag(nx, ny);
+ return false;
+ },
+
+ end : function()
+ {
+ document.onmousemove = null;
+ document.onmouseup = null;
+ Drag.obj.root.onDragEnd( parseInt(Drag.obj.root.style[Drag.obj.hmode ? "left" : "right"]),
+ parseInt(Drag.obj.root.style[Drag.obj.vmode ? "top" : "bottom"]));
+
+ var o = Drag.obj;
+
+ fy = parseInt( o.root.style.top );
+ fx = parseInt( o.root.style.left );
+
+ //----------------------------------
+ // Store in a cookie?
+ //----------------------------------
+
+ if ( Drag.cookiename )
+ {
+ try
+ {
+ ipsclass.my_setcookie( Drag.cookiename, fx+','+fy, 1 );
+ }
+ catch(e)
+ {
+ }
+ }
+
+ Drag.obj = null;
+
+ },
+
+ addEvent: function(elm, evType, fn, useCapture)
+ {
+ // Cross-browser event handling for IE5+, NS6 and Mozilla
+ // By Scott Andrew
+
+ if ( elm.addEventListener )
+ {
+ elm.addEventListener(evType, fn, useCapture);
+ return true;
+ }
+ else if ( elm.attachEvent )
+ {
+ var r = elm.attachEvent('on' + evType, fn);
+ return r;
+ }
+ else
+ {
+ elm['on' + evType] = fn;
+ }
+ },
+
+ fixE : function(e)
+ {
+ if (typeof e == 'undefined') e = window.event;
+ if (typeof e.layerX == 'undefined') e.layerX = e.offsetX;
+ if (typeof e.layerY == 'undefined') e.layerY = e.offsetY;
+ return e;
+ }
+};
\ No newline at end of file
diff --git a/Development/javascript_uncompressed/jscripts/folder_rte_files/blank.html b/Development/javascript_uncompressed/jscripts/folder_rte_files/blank.html
new file mode 100644
index 00000000..65238c08
--- /dev/null
+++ b/Development/javascript_uncompressed/jscripts/folder_rte_files/blank.html
@@ -0,0 +1,14 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Development/javascript_uncompressed/jscripts/folder_rte_files/index.html b/Development/javascript_uncompressed/jscripts/folder_rte_files/index.html
new file mode 100644
index 00000000..b49fc27d
--- /dev/null
+++ b/Development/javascript_uncompressed/jscripts/folder_rte_files/index.html
@@ -0,0 +1 @@
+
Invision Power Board - Bulletin Board System
403: Invision Power Board -> Forbidden
You have reached this Page in error, please use
your back button to return to Invision Board.
Invision Power Board
\ No newline at end of file
diff --git a/Development/javascript_uncompressed/jscripts/folder_rte_files/module_bbcodeloader.php b/Development/javascript_uncompressed/jscripts/folder_rte_files/module_bbcodeloader.php
new file mode 100644
index 00000000..25fcf5e7
--- /dev/null
+++ b/Development/javascript_uncompressed/jscripts/folder_rte_files/module_bbcodeloader.php
@@ -0,0 +1,246 @@
+
+
+ Insert Custom BBCode
+
+
+
+
+
+
+
+Insert
+
+
+Example
+
+
+
+
+
+
+
+
+
diff --git a/Development/javascript_uncompressed/jscripts/folder_rte_files/module_div.php b/Development/javascript_uncompressed/jscripts/folder_rte_files/module_div.php
new file mode 100644
index 00000000..c0766e73
--- /dev/null
+++ b/Development/javascript_uncompressed/jscripts/folder_rte_files/module_div.php
@@ -0,0 +1,264 @@
+
+
+ Insert Div/Span
+
+
+
+
+
+
+
+Insert DIV/SPAN
+
+
+
+
+
+ Type:
+
+ DIV
+ SPAN
+
+
+
+
+
+
+
+
+
+Font
+
+
+
+
+
+
+Background
+
+
+
+
+
+
+Box Model
+
+
+
+
+Custom Elements
+
+
+
+
+
+
+OK
+Cancel
+
+
+
+
+
+
diff --git a/Development/javascript_uncompressed/jscripts/folder_rte_files/module_email.php b/Development/javascript_uncompressed/jscripts/folder_rte_files/module_email.php
new file mode 100644
index 00000000..adae2f9e
--- /dev/null
+++ b/Development/javascript_uncompressed/jscripts/folder_rte_files/module_email.php
@@ -0,0 +1,208 @@
+
+
+ Insert Div/Span
+
+
+
+
+
+
+
+Insert Email
+
+
+
+
+Email Address
+
+
+
+ user@domain.com
+
+
+
+
+
+
+
+
+Email Text
+
+
+
+
+
+
+
+OK
+Cancel
+
+
+
+
+
+
diff --git a/Development/javascript_uncompressed/jscripts/folder_rte_files/module_image.php b/Development/javascript_uncompressed/jscripts/folder_rte_files/module_image.php
new file mode 100644
index 00000000..f05849f6
--- /dev/null
+++ b/Development/javascript_uncompressed/jscripts/folder_rte_files/module_image.php
@@ -0,0 +1,231 @@
+
+
+ Insert Div/Span
+
+
+
+
+
+
+
+Insert Image
+
+
+
+
+Image Location
+
+
+
+
+
+
+
+ Advanced Options
+
+
+
+
+
+
+
+
+
+
+
+
+OK
+Cancel
+
+
+
+
+
+
diff --git a/Development/javascript_uncompressed/jscripts/folder_rte_files/module_link.php b/Development/javascript_uncompressed/jscripts/folder_rte_files/module_link.php
new file mode 100644
index 00000000..288e7535
--- /dev/null
+++ b/Development/javascript_uncompressed/jscripts/folder_rte_files/module_link.php
@@ -0,0 +1,260 @@
+
+
+ Insert Div/Span
+
+
+
+
+
+
+
+Insert Link
+
+
+
+
+Link Location
+
+
+
+
+
+
+Link Text
+
+
+
+
+
+
+ Advanced Options
+
+
+
+
+
+
+
+
+
+
+
+
+OK
+Cancel
+
+
+
+
+
+
diff --git a/Development/javascript_uncompressed/jscripts/folder_rte_files/module_table.php b/Development/javascript_uncompressed/jscripts/folder_rte_files/module_table.php
new file mode 100644
index 00000000..614352f0
--- /dev/null
+++ b/Development/javascript_uncompressed/jscripts/folder_rte_files/module_table.php
@@ -0,0 +1,299 @@
+
+
+
+
+
+ Insert Table
+
+
+
+
+
+
+
+
+Insert Table
+
+
+
+Basics
+
+
+
+
+
+
+Layout
+
+
+
+ Alignment:
+
+
+ Not set
+ Left
+ Right
+ Texttop
+ Absmiddle
+ Baseline
+ Absbottom
+ Bottom
+ Middle
+ Top
+
+
+
+
+
+
+
+
+
+
+Spacing
+
+
+
+
+
+ OK
+ Cancel
+
+
+
+
+
+
diff --git a/Development/javascript_uncompressed/jscripts/folder_rte_files/rte_html_functions.js b/Development/javascript_uncompressed/jscripts/folder_rte_files/rte_html_functions.js
new file mode 100644
index 00000000..b5d8a683
--- /dev/null
+++ b/Development/javascript_uncompressed/jscripts/folder_rte_files/rte_html_functions.js
@@ -0,0 +1,143 @@
+//------------------------------------------------------------------------------
+// IPS Cross-Browser Global Text Editor HTML
+//------------------------------------------------------------------------------
+// Supports all "v5" browsers (inc. Opera, Safari, etc)
+// Used for non RTE applications.
+// (c) 2005 Invision Power Services, Inc.
+// http://www.invisionpower.com
+//------------------------------------------------------------------------------
+
+
+/**
+* Rich Text Editor HTML Functions
+*/
+function rte_html_functions()
+{
+ /**
+ * Main control bar object
+ * @var object Main control bar object
+ */
+ this.control_obj = false;
+ /**
+ * Editor ID
+ */
+ this.editor_id = false;
+ /**
+ * Current open bar object
+ */
+ this.current_bar_object = null;
+
+ /**
+ * Main init function
+ * Nothing much to do
+ */
+ this.init = function()
+ {
+ }
+
+ /**
+ * Show new control bar
+ *
+ * @param type Type of control bar (must be same as function key)
+ */
+ this.show_control_bar = function( type )
+ {
+ if ( ! this.control_obj )
+ {
+ return;
+ }
+
+ //-----------------------------------------
+ // Already open? Kill it
+ //-----------------------------------------
+
+ if ( this.current_bar_object )
+ {
+ this.remove_control_bar();
+ }
+
+ var mainbar = document.getElementById( 'rte-main-bar');
+ var addtobar = document.getElementById( 'rte-hidden-items' );
+
+ //-----------------------------------------
+ // Spawn new DIV object
+ //-----------------------------------------
+
+ var newdiv = document.createElement('div');
+
+ newdiv.id = this.editor_id + '_htmlblock_' + type + '_menu';
+ newdiv.style.display = '';
+ newdiv.className = 'rte-buttonbar';
+ newdiv.style.zIndex = parseInt( this.control_obj.style.zIndex ) + 1;
+ newdiv.style.position = 'absolute';
+ newdiv.style.width = '220px';
+ newdiv.style.height = '400px';
+ newdiv.style.top = ipsclass.get_obj_toppos( mainbar ) + 'px';
+ newdiv.style.left = ipsclass.get_obj_leftpos( mainbar ) - ( parseInt(newdiv.style.width) + 10 ) + 'px';
+
+ var tmpheight = parseInt(newdiv.style.height) - 15;
+ newdiv.innerHTML = this.wrap_html_panel( "" );
+
+ //-----------------------------------------
+ // Add and show
+ //-----------------------------------------
+
+ addtobar.appendChild(newdiv);
+
+ ipsclass.set_unselectable( newdiv );
+
+ //-----------------------------------------
+ // INIT Drag
+ //-----------------------------------------
+
+ var phdl = document.getElementById('rte-pallete-handle');
+
+ Drag.init( phdl, newdiv );
+
+ this.current_bar_object = newdiv;
+ }
+
+ /**
+ * Remove control bar
+ * Removes the control bar.
+ */
+ this.remove_control_bar = function()
+ {
+ if ( ! this.current_bar_object )
+ {
+ return;
+ }
+
+ var addtobar = document.getElementById( 'rte-hidden-items' );
+
+ //-----------------------------------------
+ // Kill old bar
+ //-----------------------------------------
+
+ addtobar.removeChild( this.current_bar_object );
+
+ //-----------------------------------------
+ // Reset bar object
+ //-----------------------------------------
+
+ this.current_bar_object = null;
+ }
+
+ /**
+ * Wrap HTML block with basic control panel stuff
+ */
+ this.wrap_html_panel = function( html )
+ {
+ var newhtml = "";
+ newhtml += " ";
+ newhtml += "
";
+ newhtml += "
";
+ newhtml += "
";
+ newhtml += "
";
+ newhtml += "
" + html + "
";
+ newhtml += "
";
+ newhtml += "
";
+
+ return newhtml;
+ }
+}
\ No newline at end of file
diff --git a/Development/javascript_uncompressed/jscripts/folder_rte_files/rte_popup.css b/Development/javascript_uncompressed/jscripts/folder_rte_files/rte_popup.css
new file mode 100644
index 00000000..24540963
--- /dev/null
+++ b/Development/javascript_uncompressed/jscripts/folder_rte_files/rte_popup.css
@@ -0,0 +1,81 @@
+html, body
+{
+ color: #000;
+ font: 10px Verdana,sans-serif;
+ background-color: transparent;
+ margin: 0px;
+ padding: 0px;
+}
+body
+{
+ padding: 5px;
+}
+
+table
+{
+ font: 10px Verdana,sans-serif;
+}
+
+.tblbutton
+{
+ border:1px solid #999;
+ background-color: #CCC;
+ font-family:Verdana, Arial;
+ font-size:10px;
+ font-weight:bold;
+ padding:2px;
+}
+
+form p
+{
+ margin-top: 5px;
+ margin-bottom: 5px;
+}
+.fl
+{
+ width: 9em; float: left; padding: 2px 5px; text-align: right;
+}
+
+.fr
+{
+ width: 7em; float: left; padding: 2px 5px; text-align: right;
+}
+
+.frlarge
+{
+ width: 10em; float: left; padding: 2px 5px; text-align: right;
+}
+
+fieldset
+{
+ padding: 0px 10px 5px 5px;
+}
+
+select, input, button
+{
+ font: 10px Verdana,sans-serif;
+}
+
+button
+{
+ width: 70px;
+}
+.space
+{
+ padding: 2px;
+}
+
+.title
+{
+ color: #000;
+ font-weight: bold;
+ font-size: 120%;
+ padding: 3px 10px;
+ margin-bottom: 10px;
+ border-bottom: 1px solid black;
+ letter-spacing: 2px;
+}
+form
+{
+ padding: 0px; margin: 0px;
+}
\ No newline at end of file
diff --git a/Development/javascript_uncompressed/jscripts/index.html b/Development/javascript_uncompressed/jscripts/index.html
new file mode 100644
index 00000000..af2fbe79
--- /dev/null
+++ b/Development/javascript_uncompressed/jscripts/index.html
@@ -0,0 +1 @@
+
Invision Power Board - Bulletin Board System
403: Invision Power Board -> Forbidden
You have reached this Page in error, please use
your back button to return to Invision Board.
Invision Power Board
\ No newline at end of file
diff --git a/Development/javascript_uncompressed/jscripts/ipb_board.js b/Development/javascript_uncompressed/jscripts/ipb_board.js
new file mode 100644
index 00000000..9a8ee5eb
--- /dev/null
+++ b/Development/javascript_uncompressed/jscripts/ipb_board.js
@@ -0,0 +1,15 @@
+//------------------------------------------
+// Invision Power Board v2.1
+// Boards JS File
+// (c) 2005 Invision Power Services, Inc.
+//
+// http://www.invisionboard.com
+//------------------------------------------
+
+
+
+/*--------------------------------------------*/
+// Send request to update marker
+// NO LONGER USED
+/*--------------------------------------------*/
+
diff --git a/Development/javascript_uncompressed/jscripts/ipb_finduser.js b/Development/javascript_uncompressed/jscripts/ipb_finduser.js
new file mode 100644
index 00000000..efa82801
--- /dev/null
+++ b/Development/javascript_uncompressed/jscripts/ipb_finduser.js
@@ -0,0 +1,75 @@
+//------------------------------------------
+// Invision Power Board v2.0
+// Find User JS File
+// (c) 2004 Invision Power Services, Inc.
+//
+// http://www.invisionboard.com
+//------------------------------------------
+
+
+
+function add_to_form()
+{
+ var name = document.finduser.username.options[document.finduser.username.selectedIndex].value;
+
+ if (separator == 'line')
+ {
+ separator = '\n';
+ }
+
+ if (separator == 'none')
+ {
+ separator = '';
+ }
+
+ if (entry == 'textarea')
+ {
+ // Where shall we put the separator?
+
+ var tbox = eval('opener.document.REPLIER.'+in_name+'.value');
+ var tboxSize = eval('opener.document.REPLIER.'+in_name+'.value.length');
+
+ // Remove leading spaces...
+
+ while ( tbox.slice(0,1) == " " )
+ {
+ tbox = tbox.substr(1, tboxSize - 1);
+ tboxSize = tboxSize;
+ }
+
+ // Remove trailing spaces...
+
+ while ( tbox.slice(tboxSize - 1, tboxSize) == " " )
+ {
+ tbox = tbox.substr(0, tboxSize - 1);
+ tboxSize = tboxSize;
+ }
+
+ // Do we have a leading comma?
+
+ while ( tbox.slice(0,1) == "\n" )
+ {
+ tbox = tbox.substr(1, tboxSize - 1);
+ tboxSize = tboxSize;
+ }
+
+ // Do we have a trailing comma?...
+
+ while ( tbox.slice(tboxSize - 1, tboxSize) == "\n" )
+ {
+ tbox = tbox.substr(0, tboxSize - 1);
+ tboxSize = tboxSize;
+ }
+
+ // First in box?
+
+ if ( tboxSize == 0)
+ {
+ eval('opener.document.REPLIER.'+in_name+'.value += name');
+ }
+ else
+ {
+ eval('opener.document.REPLIER.'+in_name+'.value += separator + name');
+ }
+ }
+}
\ No newline at end of file
diff --git a/Development/javascript_uncompressed/jscripts/ipb_forum.js b/Development/javascript_uncompressed/jscripts/ipb_forum.js
new file mode 100644
index 00000000..09ea9b64
--- /dev/null
+++ b/Development/javascript_uncompressed/jscripts/ipb_forum.js
@@ -0,0 +1,965 @@
+//------------------------------------------
+// Invision Power Board v2.1
+// Forums JS File
+// (c) 2005 Invision Power Services, Inc.
+//
+// http://www.invisionboard.com
+//------------------------------------------
+
+/*--------------------------------------------*/
+// INIT
+/*--------------------------------------------*/
+
+var topic_dates = {};
+var topic_flags = {};
+var topic_state = {};
+var forum_mark_time;
+var newer_topics = new Array;
+var newer_count = 0;
+var flags_count = 0;
+var forum_id;
+var url_extra = '';
+var start_int = 0;
+var forum_mark_sent = 0;
+var span_html = new Array;
+var desc_html = new Array;
+var text_html = new Array;
+var folders = new Array;
+var _desc_clicked = 0;
+var topic_links_init = 0;
+
+var _this_select_all = 0;
+
+var tid_date = new Array();
+
+var click_delay = 1200; //microseconds (1.2 seconds)
+
+/*--------------------------------------------*/
+// Pop up mod options
+/*--------------------------------------------*/
+
+function forum_mod_pop( fid )
+{
+ try
+ {
+ menu_action_close();
+ }
+ catch(e) { }
+
+ PopUp( ipb_var_base_url + 'act=mod&CODE=prune_start&f='+fid+'&auth_key='+ipb_md5_check, 'PRUNE', 600,500);
+}
+
+/*--------------------------------------------*/
+// INIT topic links...
+/*--------------------------------------------*/
+
+function forum_init_topic_links()
+{
+ //----------------------------------
+ // Get page links...
+ // Gah.. another safari bug
+ //----------------------------------
+
+ var pagelinks = document.getElementsByTagName('a');
+
+ //----------------------------------
+ // Sort through and grab topic links
+ //----------------------------------
+
+ for ( var i = 0 ; i <= pagelinks.length ; i++ )
+ {
+ try
+ {
+ if ( ! pagelinks[i].id )
+ {
+ continue;
+ }
+ }
+ catch(e)
+ {
+ continue;
+ }
+
+ var linkid = pagelinks[i].id;
+ var linkname = linkid.replace( /^(.*)-(\d+)$/, "$1" );
+
+ if ( linkname == 'tid-link' )
+ {
+ pagelinks[i].onmousedown = topic_link_event_mousedown;
+ pagelinks[i].onmouseup = topic_link_event_mouseup;
+ //pagelinks[i].style.cursor = 'text';
+
+ if ( ! topic_links_init )
+ {
+ pagelinks[i].title = pagelinks[i].title + '. ' + lang_clickhold;
+ }
+ }
+ }
+
+ topic_links_init = 1;
+}
+
+/*--------------------------------------------*/
+// Mousedown, start timer
+/*--------------------------------------------*/
+
+function topic_link_event_mousedown( event )
+{
+ //----------------------------------
+ // Prevent link loading
+ //----------------------------------
+
+ event = global_cancel_bubble( event, true );
+
+ //----------------------------------
+ // Get TID
+ //----------------------------------
+
+ var tid = _get_tid_from_id( this.id );
+
+ //----------------------------------
+ // Start...
+ //----------------------------------
+
+ tid_date[ tid ] = _get_time_now();
+
+ //----------------------------------
+ // Start loop
+ //----------------------------------
+
+ setTimeout( "topic_link_event_timer("+tid+")", 5 );
+}
+
+/*--------------------------------------------*/
+// Event, loop
+/*--------------------------------------------*/
+
+function topic_link_event_timer( tid )
+{
+ //----------------------------------
+ // Get time now
+ //----------------------------------
+
+ var timenow = _get_time_now();
+
+ //----------------------------------
+ // Click held for 1.5 s+?
+ //----------------------------------
+
+ if ( timenow > 0 && tid_date[tid] > 0 && ( (timenow - tid_date[tid] ) > click_delay ) )
+ {
+ //----------------------------------
+ // Yeah.. wipe tid time and convert
+ //----------------------------------
+
+ tid_date[tid] = 0;
+ span_to_input( tid );
+ return false;
+ }
+
+ //----------------------------------
+ // Not wiped? loop on!
+ //----------------------------------
+
+ if ( tid_date[tid] > 0 )
+ {
+ setTimeout( "topic_link_event_timer("+tid+")", 5 );
+ }
+ else
+ {
+ return false;
+ }
+}
+
+/*--------------------------------------------*/
+// Mouseup? Cancel timer to kill the loop
+/*--------------------------------------------*/
+
+function topic_link_event_mouseup( event )
+{
+ //----------------------------------
+ // Prevent link loading
+ //----------------------------------
+
+ event = global_cancel_bubble( event, true );
+
+ //----------------------------------
+ // Get TID
+ //----------------------------------
+
+ var tid = _get_tid_from_id( this.id );
+
+ //----------------------------------
+ // Reset timer
+ //----------------------------------
+
+ tid_date[tid] = 0;
+}
+
+/*--------------------------------------------*/
+// Get time now
+/*--------------------------------------------*/
+
+function _get_time_now()
+{
+ var mydate = new Date();
+ return mydate.getTime();
+}
+
+/*--------------------------------------------*/
+// Get TID from ID
+/*--------------------------------------------*/
+
+function _get_tid_from_id( id )
+{
+ return id.replace( /.*\-(\d+)/, "$1" );
+}
+
+
+/*--------------------------------------------*/
+// Turn topic title into text input
+/*--------------------------------------------*/
+
+function topic_toggle_folder( tid, state )
+{
+ //----------------------------------
+ // Using fancy js?
+ //----------------------------------
+
+ if ( ! use_enhanced_js )
+ {
+ return false;
+ }
+
+ //----------------------------------
+ // Can edit?
+ //----------------------------------
+
+ if ( ! perm_can_open && ! perm_can_close )
+ {
+ return false;
+ }
+
+ var td_content = document.getElementById( 'tid-folder-' + tid ).innerHTML;
+
+ if ( topic_state[ tid ] )
+ {
+ state = topic_state[ tid ];
+ }
+
+ if ( state == 'closed' )
+ {
+ //----------------------------------
+ // Can?
+ //----------------------------------
+
+ if ( ! perm_can_open )
+ {
+ return false;
+ }
+
+ //----------------------------------
+ // Topic is locked
+ //----------------------------------
+
+ if ( folders[ tid ] )
+ {
+ td_content = folders[ tid ];
+ }
+
+ state = 'open';
+ }
+ else
+ {
+ //----------------------------------
+ // Can?
+ //----------------------------------
+
+ if ( ! perm_can_close )
+ {
+ return false;
+ }
+
+ //----------------------------------
+ // Topic isn't locked
+ //----------------------------------
+
+ folders[ tid ] = td_content;
+ state = 'closed';
+ }
+
+ //-----------------------------------------
+ // Store state
+ //-----------------------------------------
+
+ topic_state[ tid ] = state;
+
+ /*--------------------------------------------*/
+ // Main function to do on request
+ // Must be defined first!!
+ /*--------------------------------------------*/
+
+ do_request_function = function()
+ {
+ //----------------------------------
+ // Ignore unless we're ready to go
+ //----------------------------------
+
+ if ( ! xmlobj.readystate_ready_and_ok() )
+ {
+ // Could do a little loading graphic here?
+ return;
+ }
+
+ //----------------------------------
+ // INIT
+ //----------------------------------
+
+ var returned = xmlobj.xmlhandler.responseText;
+
+ td_content = returned;
+ document.getElementById( 'tid-folder-' + tid ).innerHTML = td_content;
+ };
+
+ //----------------------------------
+ // LOAD XML
+ //----------------------------------
+
+ xmlobj = new ajax_request();
+ xmlobj.onreadystatechange( do_request_function );
+
+ xmlobj.process( ipb_var_base_url + 'act=xmlout&do=save-topic&type=openclose&name='+state+'&md5check='+ipb_md5_check+'&tid='+tid );
+
+ return false;
+}
+
+/*--------------------------------------------*/
+// Turn topic title into text input
+/*--------------------------------------------*/
+
+function span_to_input( tid )
+{
+ //----------------------------------
+ // Using fancy js?
+ //----------------------------------
+
+ if ( ! use_enhanced_js )
+ {
+ return false;
+ }
+
+ //----------------------------------
+ // Can?
+ //----------------------------------
+
+ if ( ! perm_can_edit )
+ {
+ return false;
+ }
+
+ //----------------------------------
+ // Prevent double click when desc open
+ //----------------------------------
+
+ if ( _desc_clicked )
+ {
+ return false;
+ }
+
+ span_html[ tid ] = document.getElementById( 'tid-span-' + tid ).innerHTML;
+ text_html[ tid ] = document.getElementById( 'tid-link-' + tid ).innerHTML;
+
+ //----------------------------------
+ // Topic title
+ //----------------------------------
+
+ perm_max_length = perm_max_length ? perm_max_length : 50;
+
+ document.getElementById( 'tid-span-' + tid ).innerHTML = ' '; //"'
+ document.getElementById( 'edit-' + tid ).onkeyup = function( event ) { tid_keypress(event, tid) }
+ document.getElementById( 'edit-' + tid ).onblur = function( event ) { tid_blur(tid) }
+ document.getElementById( 'edit-' + tid ).focus();
+
+ return false;
+}
+
+/*--------------------------------------------*/
+// Turn topic DESC into text input
+/*--------------------------------------------*/
+
+function span_desc_to_input( tid )
+{
+ //----------------------------------
+ // Using fancy js?
+ //----------------------------------
+
+ if ( ! use_enhanced_js )
+ {
+ return false;
+ }
+
+ //----------------------------------
+ // Can?
+ //----------------------------------
+
+ if ( ! perm_can_edit )
+ {
+ return false;
+ }
+
+ //----------------------------------
+ // Prevent double click when desc open
+ //----------------------------------
+
+ if ( _desc_clicked )
+ {
+ return false;
+ }
+
+ _desc_clicked = 1;
+
+ desc_html[ tid ] = document.getElementById( 'tid-desc-' + tid ).innerHTML;
+
+ //----------------------------------
+ // Topic desc
+ //----------------------------------
+
+ document.getElementById( 'tid-desc-' + tid ).innerHTML = ' '; //"'
+ document.getElementById( 'edit-' + tid ).focus();
+
+ return false;
+}
+
+/*--------------------------------------------*/
+// BLUR HANDLER
+/*--------------------------------------------*/
+
+tid_blur = function( tid, type )
+{
+ new_text = document.getElementById( 'edit-' + tid ).value;
+
+ if( type == 'desc' )
+ {
+ tid_save( tid, new_text, type );
+ }
+ else
+ {
+ if ( new_text != "" )
+ {
+ tid_save( tid, new_text, type );
+ }
+ }
+}
+
+/*--------------------------------------------*/
+// KEY PRESS HANDLER
+/*--------------------------------------------*/
+
+tid_keypress = function( evt, tid, type )
+{
+ if ( is_safari )
+ {
+ return false;
+ }
+
+ evt = evt ? evt : window.event;
+
+ new_text = document.getElementById( 'edit-' + tid ).value;
+
+ if ( ( evt.keyCode == 13 || evt.keyCode == 3 ) && new_text != "" )
+ {
+ tid_save( tid, new_text, type );
+ }
+ else if( evt.keyCode == 27 )
+ {
+ if( type == 'desc' )
+ {
+ document.getElementById( 'tid-desc-' + tid ).innerHTML = desc_html[ tid ];
+ }
+ else
+ {
+ document.getElementById( 'tid-span-' + tid ).innerHTML = span_html[ tid ];
+ document.getElementById( 'tid-link-' + tid ).innerHTML = text_html[ tid ];
+ }
+ return false;
+ }
+}
+
+/*--------------------------------------------*/
+// UDPATE DB
+/*--------------------------------------------*/
+
+tid_save = function( tid, new_text, type )
+{
+ var donotedit = 0;
+
+ if ( type == 'desc' )
+ {
+ if ( new_text == desc_html[ tid ] )
+ {
+ donotedit = 1;
+ }
+
+ _desc_clicked = 0;
+
+ document.getElementById( 'tid-desc-' + tid ).innerHTML = new_text;
+ }
+ else
+ {
+ if ( new_text == text_html[ tid ] )
+ {
+ donotedit = 1;
+ }
+
+ type = 'title';
+ document.getElementById( 'tid-span-' + tid ).innerHTML = span_html[ tid ];
+ document.getElementById( 'tid-link-' + tid ).innerHTML = new_text;
+
+ //----------------------------------
+ // Re-check topic links
+ //----------------------------------
+
+ forum_init_topic_links();
+ }
+
+ if ( donotedit )
+ {
+ return false;
+ }
+
+ var url = ipb_var_base_url + 'act=xmlout&do=save-topic&type='+type+'&md5check='+ipb_md5_check+'&tid='+tid;
+ var fields = new Array();
+
+ //----------------------------------
+ // Populate fields
+ //----------------------------------
+
+ fields['md5check'] = ipb_md5_check;
+ fields['tid'] = tid;
+ fields['act'] = 'xmlout';
+ fields['do'] = 'save-topic';
+ fields['type'] = type;
+ fields['name'] = new_text;
+
+ /*--------------------------------------------*/
+ // Main function to do on request
+ // Must be defined first!!
+ /*--------------------------------------------*/
+
+ do_request_function = function()
+ {
+ //----------------------------------
+ // Ignore unless we're ready to go
+ //----------------------------------
+
+ if ( ! xmlobj.readystate_ready_and_ok() )
+ {
+ // Could do a little loading graphic here?
+ return;
+ }
+
+ //----------------------------------
+ // INIT
+ //----------------------------------
+
+ var returned = xmlobj.xmlhandler.responseText;
+
+ if ( type != 'desc' && ! returned.match( /s<\/null>/ ) )
+ {
+ document.getElementById( 'tid-link-' + tid ).innerHTML = returned;
+ }
+ };
+
+ //----------------------------------
+ // LOAD XML
+ //----------------------------------
+
+ xmlobj = new ajax_request();
+ xmlobj.onreadystatechange( do_request_function );
+ xmlobj.process( url, 'POST', xmlobj.format_for_post(fields) );
+
+
+ return false;
+}
+
+
+/*--------------------------------------------*/
+// Who posted
+/*--------------------------------------------*/
+
+function who_posted(tid)
+{
+ window.open( ipb_var_base_url+ "act=Stats&CODE=who&t="+tid, "WhoPosted", "toolbar=no,scrollbars=yes,resizable=yes,width=230,height=300");
+}
+
+/*--------------------------------------------*/
+// Check delete
+/*--------------------------------------------*/
+
+function checkdelete()
+{
+ if ( ! document.modform.selectedtids.value )
+ {
+ return false;
+ }
+
+ isDelete = document.modform.tact.options[document.modform.tact.selectedIndex].value;
+
+ if (isDelete == 'delete')
+ {
+ formCheck = confirm( lang_suredelete );
+
+ if (formCheck == true)
+ {
+ return true;
+ }
+ else
+ {
+ return false;
+ }
+ }
+}
+
+/*--------------------------------------------*/
+// Toggle selection
+/*--------------------------------------------*/
+
+function forum_select_all()
+{
+ clean = new Array();
+ saved = new Array();
+ var topics_this_page = new Array();
+
+ tmp = document.modform.selectedtids.value;
+
+ if ( tmp != "" )
+ {
+ saved = tmp.split(",");
+ }
+
+ if( _this_select_all == 0 )
+ {
+ var the_topics = document.getElementsByTagName('input');
+
+ for ( var i = 0 ; i <= the_topics.length ; i++ )
+ {
+ var e = the_topics[i];
+
+ if ( e && (e.type == 'hidden') && (! e.disabled) )
+ {
+ var s = e.id;
+ var a = s.replace( /^tid_(.+?)$/, "$1" );
+
+ if ( a )
+ {
+ try
+ {
+ document.getElementById( 'ipb-topic-' + a ).src = selectedbutton;
+ clean[clean.length] = a;
+ topics_this_page[ a ] = 1;
+ }
+ catch(err)
+ {
+ }
+ }
+ }
+ }
+
+ document.getElementById( 'ipb-topics-all' ).src = selectedbutton;
+
+ _this_select_all = 1;
+ }
+ else
+ {
+ var the_topics = document.getElementsByTagName('input');
+
+ for ( var i = 0 ; i <= the_topics.length ; i++ )
+ {
+ var e = the_topics[i];
+
+ if ( e && (e.type == 'hidden') && (! e.disabled) )
+ {
+ var s = e.id;
+ var a = s.replace( /^tid_(.+?)$/, "$1" );
+
+ if ( a )
+ {
+ try
+ {
+ document.getElementById( 'ipb-topic-' + a ).src = unselectedbutton;
+ topics_this_page[ a ] = 1;
+ }
+ catch(err)
+ {
+ }
+ }
+ }
+ }
+
+ document.getElementById( 'ipb-topics-all' ).src = unselectedbutton;
+
+ _this_select_all = 0;
+ }
+
+ for( i = 0 ; i < saved.length; i++ )
+ {
+ if ( saved[i] != "" && topics_this_page[ saved[i] ] != 1 )
+ {
+ clean[clean.length] = saved[i];
+ }
+ }
+
+ newvalue = clean.join(',');
+
+ var oldvalue = 0;
+
+ for( var k = 0; k < clean.length; k++ )
+ {
+ if( topics_this_page[ clean[ k ] ] != 1 )
+ {
+ oldvalue++;
+ }
+ }
+
+ my_setcookie( 'modtids', newvalue, 0 );
+
+ document.modform.selectedtids.value = newvalue;
+
+ newcount = stacksize(clean);
+
+ if( oldvalue > 0 )
+ {
+ document.modform.gobutton.value = ipsclass.html_entity_decode( lang_gobutton ) + ' (' + newcount + ') (' + oldvalue + ' ' + ipsclass.html_entity_decode( lang_otherpage ) +' )';
+ }
+ else
+ {
+ document.modform.gobutton.value = ipsclass.html_entity_decode( lang_gobutton ) + ' (' + newcount + ')';
+ }
+
+ return false;
+}
+
+function forum_toggle_tid( tid )
+{
+ var saved = new Array();
+ var clean = new Array();
+ var add = 1;
+ var _img = document.getElementById( 'ipb-topic-' + tid );
+
+ //-----------------------------------
+ // Get form info
+ //-----------------------------------
+
+ tmp = document.modform.selectedtids.value;
+
+ if( tmp != "" )
+ {
+ saved = tmp.split(",");
+ }
+
+ //-----------------------------------
+ // Remove bit if exists
+ //-----------------------------------
+
+ for( i = 0 ; i < saved.length; i++ )
+ {
+ if ( saved[i] != "" )
+ {
+ if ( saved[i] == tid )
+ {
+ add = 0;
+ }
+ else
+ {
+ clean[clean.length] = saved[i];
+ }
+ }
+ }
+
+ //-----------------------------------
+ // Add?
+ //-----------------------------------
+
+ if ( add )
+ {
+ clean[ clean.length ] = tid;
+ _img.src = selectedbutton;
+ }
+ else
+ {
+ _img.src = unselectedbutton;
+ }
+
+ newvalue = clean.join(',');
+ var topics_this_page = new Array();
+ var oldvalue = 0;
+ var the_topics = document.getElementsByTagName('input');
+
+ for ( var i = 0 ; i <= the_topics.length ; i++ )
+ {
+ var e = the_topics[i];
+
+ if ( e && (e.type == 'hidden') && (! e.disabled) )
+ {
+ var s = e.id;
+ var a = s.replace( /^tid_(.+?)$/, "$1" );
+
+ if ( a )
+ {
+ topics_this_page[ a ] = 1;
+ }
+ }
+ }
+
+ for( var k = 0; k < clean.length; k++ )
+ {
+ if ( topics_this_page[ clean[ k ] ] != 1 )
+ {
+ oldvalue++;
+ }
+ }
+
+ my_setcookie( 'modtids', newvalue, 0 );
+
+ document.modform.selectedtids.value = newvalue;
+
+ newcount = stacksize(clean);
+
+ if ( oldvalue > 0 )
+ {
+ document.modform.gobutton.value = ipsclass.html_entity_decode( lang_gobutton ) + ' (' + newcount + ') (' + oldvalue + ' ' + ipsclass.html_entity_decode( lang_otherpage ) +' )';
+ }
+ else
+ {
+ document.modform.gobutton.value = ipsclass.html_entity_decode( lang_gobutton ) + ' (' + newcount + ')';
+ }
+
+ return false;
+}
+
+/*--------------------------------------------*/
+// Do multi page jump
+/*--------------------------------------------*/
+
+function multi_page_jump( url_bit, total_posts, per_page )
+{
+ pages = 1;
+ cur_st = ipb_var_st;
+ cur_page = 1;
+
+ if ( total_posts % per_page == 0 )
+ {
+ pages = total_posts / per_page;
+ }
+ else
+ {
+ pages = Math.ceil( total_posts / per_page );
+ }
+
+ msg = ipb_lang_tpl_q1 + " " + pages;
+
+ if ( cur_st > 0 )
+ {
+ cur_page = cur_st / per_page; cur_page = cur_page -1;
+ }
+
+ show_page = 1;
+
+ if ( cur_page < pages )
+ {
+ show_page = cur_page + 1;
+ }
+
+ if ( cur_page >= pages )
+ {
+ show_page = cur_page - 1;
+ }
+ else
+ {
+ show_page = cur_page + 1;
+ }
+
+ userPage = prompt( msg, show_page );
+
+ if ( userPage > 0 )
+ {
+ if ( userPage < 1 ) { userPage = 1; }
+ if ( userPage > pages ) { userPage = pages; }
+ if ( userPage == 1 ) { start = 0; }
+ else { start = (userPage - 1) * per_page; }
+
+ window.location = url_bit + "&st=" + start + "&start=" + start;
+ }
+}
+
+
+function boards_send_marker_update( fid, is_subforum )
+{
+ //----------------------------------
+ // Get current image...
+ //----------------------------------
+
+ try
+ {
+ var imgsrc = document.getElementById( 'f-'+fid ).innerHTML;
+
+ if ( imgsrc )
+ {
+ //----------------------------------
+ // Find out what img its using...
+ //----------------------------------
+
+ var regex = new RegExp( "src=['\"](.*/)("+regex_markers+")['\"]" );
+
+ var results = imgsrc.match( regex );
+
+ //----------------------------------
+ // Got a replacement?
+ //----------------------------------
+
+ if ( img_markers[ results[2] ] )
+ {
+ imgsrc = imgsrc.replace( regex, "src='$1"+img_markers[ results[2] ]+"'" );
+
+ document.getElementById( 'f-'+fid ).innerHTML = imgsrc;
+ }
+ }
+ }
+ catch(e){}
+
+ var text_return = 0;
+
+ /*--------------------------------------------*/
+ // Main function to do on request
+ // Must be defined first!!
+ /*--------------------------------------------*/
+
+ do_request_function = function()
+ {
+ //----------------------------------
+ // Ignore unless we're ready to go
+ //----------------------------------
+
+ if ( ! xmlobj.readystate_ready_and_ok() )
+ {
+ // Could do a little loading graphic here?
+ return;
+ };
+
+ //----------------------------------
+ // Do nothing
+ //----------------------------------
+
+ text_return = xmlobj.xmlhandler.responseText;
+ };
+
+ xmlobj = new ajax_request();
+ xmlobj.onreadystatechange( do_request_function );
+
+ xmlobj.process( ipb_var_base_url + 'act=xmlout&do=mark-forum&fid='+fid+'&sf='+is_subforum );
+
+ if ( text_return == 1 )
+ {
+ return false;
+ }
+}
\ No newline at end of file
diff --git a/Development/javascript_uncompressed/jscripts/ipb_global.js b/Development/javascript_uncompressed/jscripts/ipb_global.js
new file mode 100644
index 00000000..343c0d8c
--- /dev/null
+++ b/Development/javascript_uncompressed/jscripts/ipb_global.js
@@ -0,0 +1,1349 @@
+//------------------------------------------
+// Invision Power Board v2.0
+// Global JS File
+// (c) 2003 Invision Power Services, Inc.
+//
+// http://www.invisionboard.com
+//------------------------------------------
+
+//==========================================
+// Set up
+//==========================================
+
+var input_red = 'input-warn';
+var input_green = 'input-ok';
+var input_ok_box = 'input-ok-content';
+var input_warn_box = 'input-warn-content';
+
+var img_blank = 'blank.gif';
+var img_tick = 'aff_tick.gif';
+var img_cross = 'aff_cross.gif';
+
+var uagent = navigator.userAgent.toLowerCase();
+// Konqueror works best when treated as Safari, especially for attachment manager
+var is_safari = ( (uagent.indexOf('safari') != -1) || (navigator.vendor == "Apple Computer, Inc.") || (uagent.indexOf('konqueror') != -1) || (uagent.indexOf('khtml') != -1) );
+var is_opera = (uagent.indexOf('opera') != -1);
+var is_webtv = (uagent.indexOf('webtv') != -1);
+var is_ie = ( (uagent.indexOf('msie') != -1) && (!is_opera) && (!is_safari) && (!is_webtv) );
+var is_ie4 = ( (is_ie) && (uagent.indexOf("msie 4.") != -1) );
+var is_ie7 = ( (is_ie) && (uagent.indexOf("msie 7.") != -1) );
+var is_moz = (navigator.product == 'Gecko');
+var is_ns = ( (uagent.indexOf('compatible') == -1) && (uagent.indexOf('mozilla') != -1) && (!is_opera) && (!is_webtv) && (!is_safari) );
+var is_ns4 = ( (is_ns) && (parseInt(navigator.appVersion) == 4) );
+//var is_kon = (uagent.indexOf('konqueror') != -1);
+
+var is_win = ( (uagent.indexOf("win") != -1) || (uagent.indexOf("16bit") !=- 1) );
+var is_mac = ( (uagent.indexOf("mac") != -1) || (navigator.vendor == "Apple Computer, Inc.") );
+var ua_vers = parseInt(navigator.appVersion);
+
+var ipb_pages_shown = 0;
+var ipb_pages_array = new Array();
+
+var ipb_skin_url = ipb_skin_url ? ipb_skin_url : ipb_var_image_url;
+
+/*-------------------------------------------------------------------------*/
+// Check check checkity box
+/*-------------------------------------------------------------------------*/
+
+function gbl_check_search_box()
+{
+ try
+ {
+ var _cb = document.getElementById( 'gbl-search-checkbox' );
+ var _fd = document.getElementById( 'gbl-search-forums' );
+
+ if ( _cb.checked && ipb_input_f )
+ {
+ _fd.value = ipb_input_f;
+ }
+ else
+ {
+ _fd.value = 'all';
+ }
+ }
+ catch(error)
+ {
+ }
+};
+
+/*-------------------------------------------------------------------------*/
+// Display in-line messages...
+/*-------------------------------------------------------------------------*/
+
+function show_inline_messages()
+{
+ var _string = window.location.toString();
+ var _msg_box = null;
+
+ if ( _string.indexOf( '?___msg=' ) != -1 || _string.indexOf( ';___msg=' ) != -1 || _string.indexOf( '&___msg=' ) != -1 )
+ {
+ // Is this a frame? Move it to the parent...
+ try
+ {
+ if ( parent.document.getElementById( 'ipd-msg-text' ) )
+ {
+ _msg_box = parent.document.getElementById( 'ipd-msg-text' );
+ }
+ else
+ {
+ _msg_box = document.getElementById( 'ipd-msg-text' );
+ }
+ }
+ catch( error )
+ {
+ alert( error );
+ }
+
+ var message = _string.replace( /^.*[\?;&]___msg=(.+?)(&.*$|$)/, "$1" );
+ message = unescape( message );
+
+ if ( message_pop_up_lang[ message ] )
+ {
+ try
+ {
+ _msg_box.innerHTML = message_pop_up_lang[ message ];
+
+ centerdiv = new center_div();
+ centerdiv.divname = 'ipd-msg-wrapper';
+ centerdiv.move_div();
+
+ var _this_to = setTimeout("hide_inline_messages_instant()",2000);
+ }
+ catch( anerror)
+ {
+ alert( message_pop_up_lang[ message ] );
+ }
+ }
+ }
+};
+
+function show_inline_messages_instant( msg )
+{
+ _msg_box = document.getElementById( 'ipd-msg-text' );
+ _msg_box.innerHTML = message_pop_up_lang[ msg ];
+
+ centerdiv = new center_div();
+ centerdiv.divname = 'ipd-msg-wrapper';
+ centerdiv.move_div();
+
+ var _this_to = setTimeout("hide_inline_messages_instant()",2000);
+};
+
+function hide_inline_messages_instant()
+{
+ try
+ {
+ document.getElementById( 'ipd-msg-wrapper' ).style.display = 'none';
+ parent.document.getElementById( 'ipd-msg-wrapper' ).style.display = 'none';
+ }
+ catch(acold)
+ {
+ }
+};
+
+/*-------------------------------------------------------------------------*/
+// Generate new iframe include
+/*-------------------------------------------------------------------------*/
+
+function iframe_include()
+{
+ this.iframe_id = null;
+ this.iframe_obj = null;
+ this.iframe_add_to_div = null;
+ this.iframe_add_to_div_obj = null;
+ this.iframe_main_wrapper = null;
+ this.iframe_classname = 'GBL-component-iframe';
+ this.ok_to_go = 1;
+ this.iframe_height = 300;
+ this.ajax = '';
+};
+
+iframe_include.prototype.init = function()
+{
+ try
+ {
+ this.iframe_add_to_div_obj = document.getElementById( this.iframe_add_to_div );
+ }
+ catch( error )
+ {
+ this.ok_to_go = 0;
+ }
+};
+
+iframe_include.prototype.include = function( url )
+{
+ //-----------------------------------------
+ // Check
+ //-----------------------------------------
+
+ if ( ! this.ok_to_go )
+ {
+ return false;
+ }
+
+ //-----------------------------------------
+ // INIT
+ //-----------------------------------------
+
+ var iheight = parseInt( this.iframe_add_to_div_obj.style.height );
+ var iwidth = parseInt( this.iframe_add_to_div_obj.style.width );
+
+ //-----------------------------------------
+ // Generate iFrame box
+ //-----------------------------------------
+
+ if ( this.iframe_obj )
+ {
+ this.iframe_add_to_div_obj.removeChild( this.iframe_obj );
+ }
+
+ this.iframe_obj = document.createElement( 'IFRAME' );
+
+ this.iframe_obj.src = url;
+ this.iframe_obj.id = this.iframe_id;
+ this.iframe_obj.name = this.iframe_id;
+ this.iframe_obj.scrolling = 'no';
+ this.iframe_obj.frameBorder = 'no';
+ this.iframe_obj.border = '0';
+ this.iframe_obj.className = this.iframe_classname;
+ this.iframe_obj.style.width = iwidth ? iwidth + 'px' : '100%';
+ this.iframe_obj.style.height = iheight ? iheight - 5 + 'px' : this.iframe_height + 'px';
+ this.iframe_obj.style.overflow = 'hidden';
+ this.iframe_obj.style.padding = '0px';
+ this.iframe_obj.style.margin = '0px';
+
+ // Ajax object
+ this.ajax = new ajax_request();
+
+ // Fix up padding
+ this.iframe_add_to_div_obj.style.padding = '0px';
+ this.iframe_add_to_div_obj.style.margin = '0px';
+
+ if( is_ie && !is_ie7 )
+ {
+ this.iframe_add_to_div_obj.style.paddingLeft = '6px';
+ this.iframe_add_to_div_obj.style.paddingRight = '6px';
+ }
+
+ // Add environmentals..
+ this.iframe_obj.iframe_loaded = 0;
+ this.iframe_obj.iframe_init = 0;
+ this.iframe_obj._this = this;
+
+ // Attach iFrame inside our DIV
+ this.iframe_add_to_div_obj.style.overflow = '';
+ this.iframe_add_to_div_obj.appendChild( this.iframe_obj );
+
+ this.ajax.show_loading( ajax_load_msg );
+
+ // Add handler
+ if ( is_ie )
+ {
+ this.iframe_obj.allowTransparency = true;
+ this.iframe_obj.onreadystatechange = this.iframe_on_load_ie;
+ }
+ else
+ {
+ this.iframe_obj.onload = this.iframe_onload;
+ }
+};
+
+/**
+* Each time the window is loaded, close
+* any open messages
+*/
+iframe_include.prototype.iframe_onload = function( e )
+{
+ //-----------------------------------------
+ // First load?
+ //-----------------------------------------
+
+ //window.frames[ this.id ].document
+
+ var _document= this._this.iframe_obj.contentDocument;
+
+ if ( is_safari )
+ {
+ _document = window.frames[ this.id ].document;
+ }
+
+ if ( ! this.iframe_init )
+ {
+ this.iframe_init = 1;
+ this.iframe_loaded = 1;
+
+
+ _document.onmousedown = menu_action_close;
+ }
+ else
+ {
+ this.iframe_loaded = 1;
+
+ _document.onmousedown = menu_action_close;
+ }
+
+ this._this.ajax.hide_loading();
+
+ //-----------------------------------------
+ // Attempt to fix up padding issues
+ //-----------------------------------------
+
+ try
+ {
+ _document.getElementsByTagName( 'body' )[0].style.padding = '0px';
+ _document.getElementsByTagName( 'body' )[0].style.margin = '0px';
+ }
+ catch(error)
+ {
+ }
+
+ //-----------------------------------------
+ // Resize...
+ //-----------------------------------------
+
+ var _new_height = parseInt( _document.getElementById( this._this.iframe_main_wrapper ).offsetHeight );
+
+ if ( _new_height > 0 )
+ {
+ if ( is_safari )
+ {
+ _new_height += 3;
+ }
+
+ this._this.iframe_obj.style.height = _new_height + "px";
+ this._this.iframe_add_to_div_obj.style.height = _new_height + "px";
+ }
+
+ //-----------------------------------------
+ // Fix up style sheets
+ //-----------------------------------------
+
+ var style = document.getElementsByTagName( 'style' );
+ var _new_style = '';
+
+ for( i in style )
+ {
+ _new_style += "\n" + style[i].innerHTML;
+ }
+
+ try
+ {
+ _document.getElementsByTagName( 'style' )[0].innerHTML = _new_style;
+ }
+ catch(error)
+ {
+ }
+};
+
+/**
+* IE only calls onload once... So subsequent loads
+* don't do anything.. hence the readystate change
+*/
+iframe_include.prototype.iframe_on_load_ie = function( e )
+{
+ //-----------------------------------------
+ // First load?
+ //-----------------------------------------
+
+ if ( this.readyState == 'complete' )
+ {
+ var _document = '';
+
+ if ( this._this.iframe_obj.contentWindow )
+ {
+ _document = this._this.iframe_obj.contentWindow.document;
+ }
+ else if ( this._this.iframe_obj.document )
+ {
+ _document = this._this.iframe_obj.document;
+ }
+ else
+ {
+ _document = window.frames[ this.id ].document;
+ }
+
+ if ( ! this.iframe_init )
+ {
+ this.iframe_init = 1;
+ this.iframe_loaded = 1;
+ _document.onmousedown = menu_action_close;
+ }
+ else
+ {
+ this.iframe_loaded = 1;
+ _document.onmousedown = menu_action_close;
+ }
+
+ //-----------------------------------------
+ // Fix up style sheets
+ //-----------------------------------------
+
+ var style = document.getElementsByTagName( 'style' );
+ var _new_style = '';
+
+ for( i in style )
+ {
+ if ( style[i].innerHTML )
+ {
+ _new_style += "\n" + style[i].innerHTML;
+ }
+ }
+
+ var _urls = _new_style.match( /@import\s+?url\(\s+?['"](.+?)['"]\s+?\);/ig );
+
+ if ( _urls && _urls.length )
+ {
+ for( i = 0 ; i <= _urls.length ; i++ )
+ {
+ if ( typeof( _urls[i] ) != 'undefined' )
+ {
+ _urls[i] = _urls[i].replace( /@import\s+?url\(\s+?['"](.+?)['"]\s+?\);/ig, "$1" );
+
+ if ( typeof( _urls[i] ) != 'undefined' )
+ {
+ _document.createStyleSheet( _urls[i] );
+ }
+ }
+ }
+ }
+
+ this._this.ajax.hide_loading();
+
+ //-----------------------------------------
+ // Attempt to fix up padding issues
+ //-----------------------------------------
+
+ try
+ {
+ _document.getElementsByTagName( 'body' )[0].style.padding = '0px';
+ _document.getElementsByTagName( 'body' )[0].style.margin = '0px';
+ }
+ catch(error)
+ {
+ }
+
+ //-----------------------------------------
+ // Resize...
+ //-----------------------------------------
+
+ var _new_height = parseInt( _document.getElementById( this._this.iframe_main_wrapper ).offsetHeight );
+ var _new_width = parseInt( _document.getElementById( this._this.iframe_main_wrapper ).offsetWidth );
+
+ if ( _new_height > 0 )
+ {
+ this._this.iframe_obj.style.height = _new_height + "px";
+ this._this.iframe_add_to_div_obj.style.height = _new_height + "px";
+ }
+
+ if ( _new_width > 0 )
+ {
+ this._this.iframe_obj.style.width = _new_width + "px";
+ this._this.iframe_add_to_div_obj.style.width = _new_width + "px";
+ }
+ }
+};
+
+/*-------------------------------------------------------------------------*/
+// Fix IE PNG images
+/*-------------------------------------------------------------------------*/
+
+function ie_fix_png()
+{
+ if ( is_ie )
+ {
+ document.onreadystatechange = ie_fix_png_do;
+ }
+}
+
+function ie_fix_png_do()
+{
+ if ( document.readyState == 'complete' )
+ {
+ var pos = navigator.userAgent.indexOf("MSIE ");
+ var version = navigator.userAgent.substring(pos + 5);
+ var blanky = ipb_skin_url + "/blank.gif";
+ var _sw = screen.width * ( parseInt( ipsclass.settings['resize_percent'] ) / 100 );
+
+ if (pos == -1)
+ {
+ return false;
+ }
+
+ if ( ! ((version.indexOf("5.5") == 0) || (version.indexOf("6") == 0)) && (navigator.platform == ("Win32")) )
+ {
+ return;
+ }
+
+ var images = document.getElementsByTagName( 'IMG' );
+ var _len = images.length;
+
+ if ( _len )
+ {
+ for ( var i = 0 ; i < _len ; i++ )
+ {
+ if ( images[i].src.match( /\.png$/ ) )
+ {
+ var element = images[i];
+ var _width = 0;
+ var _height = 0;
+ var _src = 0;
+
+ element._width = element._width ? parseInt( element._width ) : 0;
+ element._resized = parseInt( element._resized );
+
+ if ( ! element.style.width )
+ {
+ _width = element.width;
+ }
+
+ if ( ! element.style.height )
+ {
+ _height = element.height;
+ }
+
+ _src = element.src;
+
+ //-----------------------------------------
+ // Prevent PNG clash with topic overwrite
+ //-----------------------------------------
+
+ if ( _width < _sw && ! element._resized && element._width < _sw )
+ {
+ element.src = blanky;
+
+ if ( _width )
+ {
+ element.style.width = _width+"px";
+ }
+ if ( _height )
+ {
+ element.style.height = _height+"px";
+ }
+
+ element.runtimeStyle.filter = "progid:DXImageTransform.Microsoft.AlphaImageLoader(src='" + _src + "',sizingMethod='scale')";
+ }
+ else
+ {
+ //alert( 'Skipped: ' + images[i].src );
+ }
+ }
+ }
+ }
+ }
+}
+
+/*-------------------------------------------------------------------------*/
+// Add onload event
+/*-------------------------------------------------------------------------*/
+
+function add_onload_event( func )
+{
+ var oldonload = window.onload;
+
+ if (typeof window.onload != 'function')
+ {
+ window.onload = func;
+
+ }
+ else
+ {
+ window.onload = function()
+ {
+ if ( oldonload )
+ {
+ oldonload();
+ };
+
+ func();
+ };
+ }
+}
+
+/*-------------------------------------------------------------------------*/
+// Add shadow to an ID
+/*-------------------------------------------------------------------------*/
+
+function add_shadow( wrapname, divname )
+{
+ var divobj = document.getElementById( divname );
+ var wrapobj = document.getElementById( wrapname );
+
+ //----------------------------------
+ // Transform the DIV
+ //----------------------------------
+
+ if ( is_ie )
+ {
+ wrapobj.className = 'shadow-ie';
+ wrapobj.style.width = divobj.offsetWidth + 1 + 'px';
+ wrapobj.style.height = divobj.offsetHeight + 1 + 'px';
+ }
+ else
+ {
+ wrapobj.className = 'shadow-moz';
+ wrapobj.style.width = divobj.offsetWidth + 0 + 'px';
+ wrapobj.style.height = divobj.offsetHeight + 0 + 'px';
+ }
+}
+
+/*-------------------------------------------------------------------------*/
+// DST Auto correction
+/*-------------------------------------------------------------------------*/
+
+function global_dst_check( tzo, dst )
+{
+ var op = tzo < 0 ? 'plus' : 'minus';
+ tzo = Math.abs( tzo );
+ var dstoffset = Math.abs( new Date().getTimezoneOffset() / 60 );
+ var dstset = 0;
+ var url = ipb_var_base_url + 'act=xmlout&do=dst-autocorrection&md5check=' + ipb_md5_check;
+
+ if( op == 'plus' )
+ {
+ var thisoffset = tzo - dst;
+ }
+ else
+ {
+ var thisoffset = tzo + dst;
+ }
+
+ var math = Math.abs( thisoffset - dstoffset );
+
+ if ( math != 0 )
+ {
+ try
+ {
+ //----------------------------------
+ // Fancy first...
+ //----------------------------------
+
+ xml_dst_set( url + '&xml=1' );
+ dstset = 1;
+ }
+ catch(e)
+ {
+ dstset = 0;
+ }
+
+ //----------------------------------
+ // No fancy?
+ //----------------------------------
+
+ if ( dstset == 0 )
+ {
+ window.location = url;
+ }
+ }
+}
+
+/*-------------------------------------------------------------------------*/
+// Get cookie
+/*-------------------------------------------------------------------------*/
+
+function my_getcookie( name )
+{
+ return ipsclass.my_getcookie( name );
+}
+
+/*-------------------------------------------------------------------------*/
+// Set cookie
+/*-------------------------------------------------------------------------*/
+
+function my_setcookie( name, value, sticky )
+{
+ return ipsclass.my_setcookie( name, value, sticky );
+}
+
+/*-------------------------------------------------------------------------*/
+// Lang replace
+/*-------------------------------------------------------------------------*/
+
+function lang_build_string()
+{
+ if ( ! arguments.length || ! arguments )
+ {
+ return;
+ }
+
+ var string = arguments[0];
+
+ for( var i = 1 ; i < arguments.length ; i++ )
+ {
+ var match = new RegExp('<%' + i + '>', 'gi');
+ string = string.replace( match, arguments[i] );
+ }
+
+ return string;
+}
+
+/*-------------------------------------------------------------------------*/
+// Pop up friends window
+/*-------------------------------------------------------------------------*/
+
+function friends_pop( extra_url )
+{
+ ipb_var_base_url = ipb_var_base_url.replace( '&', '&' );
+
+ if ( extra_url )
+ {
+ extra_url = extra_url.replace( '&', '&' );
+ }
+ else
+ {
+ extra_url = '';
+ }
+
+ ipsclass.pop_up_window( ipb_var_base_url + 'act=profile&CODE=friends_list_popup' + extra_url, 450, 400, 'Friends' );
+}
+
+/*-------------------------------------------------------------------------*/
+// Pop up MyAssistant window
+/*-------------------------------------------------------------------------*/
+
+function buddy_pop()
+{
+ var not_loaded_yet = 0;
+
+ if ( use_enhanced_js )
+ {
+ try
+ {
+ xml_myassistant_init();
+ not_loaded_yet = 1;
+ }
+ catch( e )
+ {
+ //alert(e);
+ not_loaded_yet = 0;
+ }
+ }
+
+ if ( ! not_loaded_yet )
+ {
+ ipb_var_base_url = ipb_var_base_url.replace( '&', '&' );
+ window.open( ipb_var_base_url + 'act=buddy','BrowserBuddy','width=250,height=500,resizable=yes,scrollbars=yes');
+ }
+}
+
+/*-------------------------------------------------------------------------*/
+// Multi Page jumps
+/*-------------------------------------------------------------------------*/
+
+function check_enter( pages_id, e )
+{
+ var keypress = e.keyCode ? e.keyCode : e.which ? e.which : e.charCode;
+
+ if( keypress == 13 )
+ {
+ do_multi_page_jump( pages_id );
+ }
+}
+
+function do_multi_page_jump( pages_id )
+{
+ var pages = 1;
+ var cur_st = ipb_var_st;
+ var cur_page = 1;
+ var total_posts = ipb_pages_array[ pages_id ][2];
+ var per_page = ipb_pages_array[ pages_id ][1];
+ var url_bit = ipb_pages_array[ pages_id ][0];
+ var userPage = parseInt( document.getElementById( 'st-'+pages_id ).value );
+
+ var st_type = document.getElementById( 'st-type-'+pages_id ).value;
+
+ st_type = st_type ? st_type : 'st';
+
+ //-----------------------------------
+ // Fix up URL BIT
+ //-----------------------------------
+
+ url_bit = url_bit.replace( new RegExp( "&", "g" ) , '&' );
+
+ //-----------------------------------
+ // Work out pages
+ //-----------------------------------
+
+ if ( total_posts % per_page == 0 )
+ {
+ pages = total_posts / per_page;
+ }
+ else
+ {
+ pages = Math.ceil( total_posts / per_page );
+ }
+
+ if ( cur_st > 0 )
+ {
+ cur_page = cur_st / per_page; cur_page = cur_page -1;
+ }
+
+ if ( userPage > 0 )
+ {
+ if ( userPage < 1 ) { userPage = 1; }
+ if ( userPage > pages ) { userPage = pages; }
+ if ( userPage == 1 ) { start = 0; }
+ else { start = (userPage - 1) * per_page; }
+
+ if ( start )
+ {
+ window.location = url_bit + "&" + st_type + "=" + start;
+ }
+ else
+ {
+ window.location = url_bit;
+ }
+
+ return false;
+ }
+}
+
+/*-------------------------------------------------------------------------*/
+// Hide / Unhide menu elements
+/*-------------------------------------------------------------------------*/
+
+function pages_st_focus( pages_id )
+{
+ document.getElementById( 'st-'+pages_id ).focus();
+}
+
+/*-------------------------------------------------------------------------*/
+// Hide / Unhide menu elements
+/*-------------------------------------------------------------------------*/
+
+function ShowHide(id1, id2)
+{
+ if (id1 != '') toggleview(id1);
+ if (id2 != '') toggleview(id2);
+}
+
+/*-------------------------------------------------------------------------*/
+// Get element by id
+/*-------------------------------------------------------------------------*/
+
+function my_getbyid(id)
+{
+ itm = null;
+
+ if (document.getElementById)
+ {
+ itm = document.getElementById(id);
+ }
+ else if (document.all)
+ {
+ itm = document.all[id];
+ }
+ else if (document.layers)
+ {
+ itm = document.layers[id];
+ }
+
+ return itm;
+}
+
+/*-------------------------------------------------------------------------*/
+// Show/hide toggle
+/*-------------------------------------------------------------------------*/
+
+function toggleview(id)
+{
+ if ( ! id ) return;
+
+ if ( itm = my_getbyid(id) )
+ {
+ if (itm.style.display == "none")
+ {
+ my_show_div(itm);
+ }
+ else
+ {
+ my_hide_div(itm);
+ }
+ }
+}
+
+/*-------------------------------------------------------------------------*/
+// Set DIV ID to hide
+/*-------------------------------------------------------------------------*/
+
+function my_hide_div(itm)
+{
+ if ( ! itm ) return;
+
+ itm.style.display = "none";
+}
+
+/*-------------------------------------------------------------------------*/
+// Set DIV ID to show
+/*-------------------------------------------------------------------------*/
+
+function my_show_div(itm)
+{
+ if ( ! itm ) return;
+
+ itm.style.display = "";
+}
+
+/*-------------------------------------------------------------------------*/
+// Change cell colour
+/*-------------------------------------------------------------------------*/
+
+function change_cell_color( id, cl )
+{
+ itm = my_getbyid(id);
+
+ if ( itm )
+ {
+ itm.className = cl;
+ }
+}
+
+/*-------------------------------------------------------------------------*/
+// Toggle category
+/*-------------------------------------------------------------------------*/
+
+function togglecategory( fid, add )
+{
+ saved = new Array();
+ clean = new Array();
+
+ //-----------------------------------
+ // Get any saved info
+ //-----------------------------------
+
+ if ( tmp = ipsclass.my_getcookie('collapseprefs') )
+ {
+ saved = tmp.split(",");
+ }
+
+ //-----------------------------------
+ // Remove bit if exists
+ //-----------------------------------
+
+ for( i = 0 ; i < saved.length; i++ )
+ {
+ if ( saved[i] != fid && saved[i] != "" )
+ {
+ clean[clean.length] = saved[i];
+ }
+ }
+
+ //-----------------------------------
+ // Add?
+ //-----------------------------------
+
+ if ( add )
+ {
+ clean[ clean.length ] = fid;
+ my_show_div( my_getbyid( 'fc_'+fid ) );
+ my_hide_div( my_getbyid( 'fo_'+fid ) );
+ }
+ else
+ {
+ my_show_div( my_getbyid( 'fo_'+fid ) );
+ my_hide_div( my_getbyid( 'fc_'+fid ) );
+ }
+
+ ipsclass.my_setcookie( 'collapseprefs', clean.join(','), 1 );
+}
+
+/*-------------------------------------------------------------------------*/
+// locationjump
+/*-------------------------------------------------------------------------*/
+
+function locationjump(url)
+{
+ window.location = ipb_var_base_url + url;
+}
+
+/*-------------------------------------------------------------------------*/
+// CHOOSE SKIN
+/*-------------------------------------------------------------------------*/
+
+function chooseskin(obj)
+{
+ choosebox = obj.options[obj.selectedIndex].value;
+ extravars = '';
+
+ if ( choosebox != -1 && ! isNaN( choosebox ) )
+ {
+ if ( document.skinselectorbox.skinurlbits.value )
+ {
+ extravars = '&' + document.skinselectorbox.skinurlbits.value;
+
+ //----------------------------------
+ // Strip out old skin change stuff
+ // setskin=1&skinid=2
+ //----------------------------------
+
+ extravars = extravars.replace( /setskin=\d{1,}/g, '' );
+ extravars = extravars.replace( /skinid=\d{1,}/g , '' );
+ extravars = extravars.replace( /cal_id=&/g, '' );
+ extravars = extravars.replace( /&{1,}/g , '&' );
+ extravars = extravars.replace( /s=&/g , '' );
+ }
+
+ locationjump( 'setskin=1&skinid=' + choosebox + extravars );
+ }
+}
+
+/*-------------------------------------------------------------------------*/
+// CHOOSE LANG
+/*-------------------------------------------------------------------------*/
+
+function chooselang(obj)
+{
+ choosebox = obj.options[obj.selectedIndex].value;
+ extravars = '';
+
+ if ( document.langselectorbox.langurlbits.value )
+ {
+ extravars = '&' + document.langselectorbox.langurlbits.value;
+
+ //----------------------------------
+ // Strip out old skin change stuff
+ // setskin=1&skinid=2
+ //----------------------------------
+
+ extravars = extravars.replace( /setlanguage=\d{1,}/g, '' );
+ extravars = extravars.replace( /cal_id=&/g, '' );
+ extravars = extravars.replace( /langid=\w{1,}/g , '' );
+ extravars = extravars.replace( /&{1,}/g , '&' );
+ extravars = extravars.replace( /s=&/g , '' );
+ }
+
+ locationjump( 'setlanguage=1&langid=' + choosebox + extravars );
+}
+
+/*-------------------------------------------------------------------------*/
+// pop up window
+/*-------------------------------------------------------------------------*/
+
+function PopUp(url, name, width,height,center,resize,scroll,posleft,postop)
+{
+ showx = "";
+ showy = "";
+
+ if (posleft != 0) { X = posleft }
+ if (postop != 0) { Y = postop }
+
+ if (!scroll) { scroll = 1 }
+ if (!resize) { resize = 1 }
+
+ if ((parseInt (navigator.appVersion) >= 4 ) && (center))
+ {
+ X = (screen.width - width ) / 2;
+ Y = (screen.height - height) / 2;
+ }
+
+ if ( X > 0 )
+ {
+ showx = ',left='+X;
+ }
+
+ if ( Y > 0 )
+ {
+ showy = ',top='+Y;
+ }
+
+ if (scroll != 0) { scroll = 1 }
+
+ var Win = window.open( url, name, 'width='+width+',height='+height+ showx + showy + ',resizable='+resize+',scrollbars='+scroll+',location=no,directories=no,status=no,menubar=no,toolbar=no');
+}
+
+/*-------------------------------------------------------------------------*/
+// Array: Get stack size
+/*-------------------------------------------------------------------------*/
+
+function stacksize(thearray)
+{
+ for (i = 0 ; i < thearray.length; i++ )
+ {
+ if ( (thearray[i] == "") || (thearray[i] == null) || (thearray == 'undefined') )
+ {
+ return i;
+ }
+ }
+
+ return thearray.length;
+}
+
+/*-------------------------------------------------------------------------*/
+// Array: Push stack
+/*-------------------------------------------------------------------------*/
+
+function pushstack(thearray, newval)
+{
+ arraysize = stacksize(thearray);
+ thearray[arraysize] = newval;
+}
+
+/*-------------------------------------------------------------------------*/
+// Array: Pop stack
+/*-------------------------------------------------------------------------*/
+
+function popstack(thearray)
+{
+ arraysize = stacksize(thearray);
+ theval = thearray[arraysize - 1];
+ delete thearray[arraysize - 1];
+ return theval;
+}
+
+/*-------------------------------------------------------------------------*/
+// Converts "safe" innerHTML back to normal template
+/*-------------------------------------------------------------------------*/
+
+function innerhtml_template_to_html( t )
+{
+ t = t.replace( /<%(\d+?)>/ig, "<%$1>" );
+ t = t.replace( /%3C%(\d+?)%3E/ig , "<%$1>" );
+ return t;
+}
+
+/*-------------------------------------------------------------------------*/
+// Global freeze events
+/*-------------------------------------------------------------------------*/
+
+function global_cancel_bubble(obj, extra)
+{
+ if ( ! obj || is_ie)
+ {
+ if ( extra )
+ {
+ window.event.returnValue = false;
+ }
+
+ window.event.cancelBubble = true;
+
+ return window.event;
+ }
+ else
+ {
+ obj.stopPropagation();
+
+ if ( extra )
+ {
+ obj.preventDefault();
+ }
+
+ return obj;
+ }
+}
+
+/*-------------------------------------------------------------------------*/
+// Get left posititon of object
+/*-------------------------------------------------------------------------*/
+
+function _get_obj_leftpos(obj)
+{
+ var left = obj.offsetLeft;
+
+ while( (obj = obj.offsetParent) != null )
+ {
+ left += obj.offsetLeft;
+ }
+
+ return left;
+}
+
+/*-------------------------------------------------------------------------*/
+// Get top position of object
+/*-------------------------------------------------------------------------*/
+
+function _get_obj_toppos(obj)
+{
+ var top = obj.offsetTop;
+
+ while( (obj = obj.offsetParent) != null )
+ {
+ top += obj.offsetTop;
+ }
+
+ return top;
+}
+
+/*-------------------------------------------------------------------------*/
+// Center a div on the screen
+/*-------------------------------------------------------------------------*/
+
+function center_div()
+{
+ this.divname = '';
+ this.divobj = '';
+ this.shimobj = '';
+}
+
+/*-------------------------------------------------------------------------*/
+// Main run function
+/*-------------------------------------------------------------------------*/
+
+center_div.prototype.move_div = function()
+{
+ try
+ {
+ if ( parent.document.getElementById( this.divname ) )
+ {
+ this._document = parent.document;
+ this._window = parent.window;
+ }
+ }
+ catch(e)
+ {
+ return;
+ }
+
+ this.divobj = this._document.getElementById( this.divname );
+
+ //----------------------------------
+ // Figure width and height
+ //----------------------------------
+
+ var my_width = 0;
+ var my_height = 0;
+
+ if ( typeof( this._window.innerWidth ) == 'number' )
+ {
+ //----------------------------------
+ // Non IE
+ //----------------------------------
+
+ my_width = this._window.innerWidth;
+ my_height = this._window.innerHeight;
+ }
+ else if ( this._document.documentElement && ( this._document.documentElement.clientWidth || this._document.documentElement.clientHeight ) )
+ {
+ //----------------------------------
+ // IE 6+
+ //----------------------------------
+
+ my_width = this._document.documentElement.clientWidth;
+ my_height = this._document.documentElement.clientHeight;
+ }
+ else if ( this._document.body && ( this._document.body.clientWidth || this._document.body.clientHeight ) )
+ {
+ //----------------------------------
+ // Old IE
+ //----------------------------------
+
+ my_width = this._document.body.clientWidth;
+ my_height = this._document.body.clientHeight;
+ }
+
+ //----------------------------------
+ // Show (but behind the zIndex...
+ //----------------------------------
+
+ this.divobj.style.position = 'absolute';
+ this.divobj.style.display = 'block';
+ this.divobj.style.zIndex = -1;
+
+ if ( is_ie )
+ {
+ var layer_html = this.divobj.innerHTML;
+ var full_html = "" + layer_html;
+
+ this.divobj.innerHTML = full_html;
+ }
+
+ //----------------------------------
+ // Stop IE showing select boxes over
+ // floating div [ 2 ]
+ //----------------------------------
+
+ //if ( is_ie )
+ //{
+ // this.shimobj = this._document.getElementById( this.divname + "-shim" );
+ // this.shimobj.style.width = (parseInt(this.divobj.offsetWidth) -5) + "px";
+ // this.shimobj.style.height = this.divobj.offsetHeight;
+ // this.shimobj.style.zIndex = this.divobj.style.zIndex - 1;
+ // this.shimobj.style.top = this.divobj.style.top;
+ // this.shimobj.style.left = this.divobj.style.left;
+ // this.shimobj.style.display = "";
+ //}
+
+ //----------------------------------
+ // Get div height && width
+ //----------------------------------
+
+ var divheight = parseInt( this.divobj.style.height ) ? parseInt( this.divobj.style.height ) : parseInt( this.divobj.offsetHeight );
+ var divwidth = parseInt( this.divobj.style.width ) ? parseInt( this.divobj.style.width ) : parseInt( this.divobj.offsetWidth );
+
+ divheight = divheight ? divheight : 200;
+ divwidth = divwidth ? divwidth : 400;
+
+ //----------------------------------
+ // Get current scroll offset
+ //----------------------------------
+
+ var scrolly = this.getYscroll();
+
+ //----------------------------------
+ // Finalize...
+ //----------------------------------
+
+ var setX = ( my_width - divwidth ) / 2;
+ var setY = ( my_height - divheight ) / 2 + scrolly;
+
+ setX = ( setX < 0 ) ? 0 : setX;
+ setY = ( setY < 0 ) ? 0 : setY;
+
+ this.divobj.style.left = setX + "px";
+ this.divobj.style.top = setY + "px";
+
+ //----------------------------------
+ // Show for real...
+ //----------------------------------
+
+ this.divobj.style.zIndex = 99;
+};
+
+/*-------------------------------------------------------------------------*/
+// Hide div
+/*-------------------------------------------------------------------------*/
+
+center_div.prototype.hide_div = function()
+{
+ try
+ {
+ if ( ! this.divobj )
+ {
+ return;
+ }
+ else
+ {
+ this.divobj.style.display = 'none';
+ }
+ }
+ catch(e)
+ {
+ return;
+ }
+};
+
+/*-------------------------------------------------------------------------*/
+// Get YScroll
+/*-------------------------------------------------------------------------*/
+
+center_div.prototype.getYscroll = function()
+{
+ var scrollY = 0;
+
+ if ( this._document.documentElement && this._document.documentElement.scrollTop )
+ {
+ scrollY = this._document.documentElement.scrollTop;
+ }
+ else if ( this._document.body && this._document.body.scrollTop )
+ {
+ scrollY = this._document.body.scrollTop;
+ }
+ else if ( this._window.pageYOffset )
+ {
+ scrollY = this._window.pageYOffset;
+ }
+ else if ( this._window.scrollY )
+ {
+ scrollY = this._window.scrollY;
+ }
+
+ return scrollY;
+};
\ No newline at end of file
diff --git a/Development/javascript_uncompressed/jscripts/ipb_global_xmlenhanced.js b/Development/javascript_uncompressed/jscripts/ipb_global_xmlenhanced.js
new file mode 100644
index 00000000..2d4926c6
--- /dev/null
+++ b/Development/javascript_uncompressed/jscripts/ipb_global_xmlenhanced.js
@@ -0,0 +1,463 @@
+//------------------------------------------------------------------------------
+// IPS XML HTTP REQUEST:: GET NEW POSTS
+//------------------------------------------------------------------------------
+// Supports Safari, Mozilla 1.3+ (Firefox, etc) and IE 5.5+
+// (c) 2005 Invision Power Services, Inc.
+// http://www.invisionpower.com
+//------------------------------------------------------------------------------
+
+/*--------------------------------------------*/
+// INIT VARS
+/*--------------------------------------------*/
+
+var gnp_div = 'get-new-posts_menu';
+var msg_div = 'get-new-msgs_menu';
+var mem_div = 'get-members';
+var divobj;
+var divopen = 0;
+var xmlobj;
+var reg_img = '';
+
+var myass_main;
+var myass_loaded = 0;
+var pm_cycle_count = 0;
+var search_cache = {};
+var posts_st = 0;
+
+/*--------------------------------------------*/
+// Get NEXT posts link
+/*--------------------------------------------*/
+
+function xml_show_new_posts( st )
+{
+ posts_st = st;
+ xml_myassistant_init( 'posts' );
+}
+
+/*--------------------------------------------*/
+// Load MyASSISTANT!
+/*--------------------------------------------*/
+
+function xml_myassistant_init( tab )
+{
+ myass_main = document.getElementById( 'get-myassistant' );
+ myass_drag = document.getElementById( 'myass-drag' );
+ myass_content = document.getElementById( 'myass-content' );
+
+ /*--------------------------------------------*/
+ // Main function to do on request
+ // Must be defined first!!
+ /*--------------------------------------------*/
+
+ do_request_function = function()
+ {
+ //----------------------------------
+ // Ignore unless we're ready to go
+ //----------------------------------
+
+ if ( ! xmlobj_myass.readystate_ready_and_ok() )
+ {
+ // Could do a little loading graphic here?
+ return;
+ }
+
+ //----------------------------------
+ // INIT
+ //----------------------------------
+
+ var html = xmlobj_myass.xmlhandler.responseText;
+
+ //----------------------------------
+ // Stop IE showing select boxes over
+ // floating div [ 1 ]
+ //----------------------------------
+
+ if ( is_ie )
+ {
+ html = "" + html;
+ }
+
+ myass_content.innerHTML = html;
+
+ //----------------------------------
+ // Stop IE showing select boxes over
+ // floating div [ 1 ]
+ //----------------------------------
+
+ if ( is_ie )
+ {
+ drag_html = myass_drag.innerHTML;
+ main_drag_html = "" + drag_html;
+
+ myass_drag.innerHTML = main_drag_html;
+ }
+
+ //----------------------------------
+ // Stop IE showing select boxes over
+ // floating div [ 2 ]
+ //----------------------------------
+
+ if ( is_ie )
+ {
+ myass_shim = document.getElementById('myass-shim');
+ myass_shim.style.width = myass_content.offsetWidth;
+ myass_shim.style.height = myass_content.offsetHeight;
+ myass_shim.style.zIndex = myass_content.style.zIndex - 1;
+ myass_shim.style.top = myass_content.style.top;
+ myass_shim.style.left = myass_content.style.left;
+ myass_shim.style.display = "block";
+
+ myass_shim_d = document.getElementById('myass-shim-two');
+ myass_shim_d.style.width = myass_drag.offsetWidth;
+ myass_shim_d.style.height = myass_drag.offsetHeight;
+ myass_shim_d.style.zIndex = myass_drag.style.zIndex - 1;
+ myass_shim_d.style.top = myass_drag.style.top;
+ myass_shim_d.style.left = myass_drag.style.left;
+ myass_shim_d.style.display = "block";
+ }
+ };
+
+ xmlobj_myass = new ajax_request();
+ xmlobj_myass.onreadystatechange( do_request_function );
+
+ //----------------------------------
+ // LOAD XML
+ //----------------------------------
+
+ if ( ! tab )
+ {
+ xmlobj_myass.process( ipb_var_base_url + 'act=buddy&xml=1' );
+ }
+ else if ( tab == 'newpms' )
+ {
+ //----------------------------------
+ // Figure out where we are..
+ //----------------------------------
+
+ var limit_a = 0;
+
+ pm_cycle_count++;
+
+ if ( pm_cycle_count <= ipb_new_msgs )
+ {
+ limit_a = pm_cycle_count - 1;
+ }
+ else
+ {
+ pm_cycle_count = 1;
+ }
+
+ xmlobj_myass.process( ipb_var_base_url + 'act=buddy&xml=1&tab=' + tab + '&limit=' + limit_a );
+
+ myass_content.style.width = '398px';
+ myass_content.style.overflow = 'auto';
+ myass_content.style.overflowX = 'hidden';
+ }
+ else if ( tab == 'posts' )
+ {
+ xmlobj_myass.process( ipb_var_base_url + 'act=buddy&xml=1&tab=' + tab + '&st=' + posts_st );
+ }
+ else
+ {
+ xmlobj_myass.process( ipb_var_base_url + 'act=buddy&xml=1&tab=' + tab );
+ }
+
+ myass_main.style.position = 'absolute';
+ myass_main.style.display = 'block';
+ myass_main.style.zIndex = 99;
+
+ //----------------------------------
+ // Not loaded? INIT
+ //----------------------------------
+
+ if ( ! myass_loaded )
+ {
+ //----------------------------------
+ // Figure width and height
+ //----------------------------------
+
+ var my_width = 0;
+ var my_height = 0;
+
+ if ( typeof( window.innerWidth ) == 'number' )
+ {
+ //----------------------------------
+ // Non IE
+ //----------------------------------
+
+ my_width = window.innerWidth;
+ my_height = window.innerHeight;
+ }
+ else if ( document.documentElement && ( document.documentElement.clientWidth || document.documentElement.clientHeight ) )
+ {
+ //----------------------------------
+ // IE 6+
+ //----------------------------------
+
+ my_width = document.documentElement.clientWidth;
+ my_height = document.documentElement.clientHeight;
+ }
+ else if( document.body && ( document.body.clientWidth || document.body.clientHeight ) )
+ {
+ //----------------------------------
+ // Old IE
+ //----------------------------------
+
+ my_width = document.body.clientWidth;
+ my_height = document.body.clientHeight;
+ }
+
+ //----------------------------------
+ // Get div height && width
+ //----------------------------------
+
+ var divheight = parseInt( myass_main.style.Height );
+ var divwidth = parseInt( myass_main.style.Width );
+
+ divheight = divheight ? divheight : 400;
+ divwidth = divwidth ? divwidth : 400;
+
+ //----------------------------------
+ // Got it stored in a cookie?
+ //----------------------------------
+
+ var divxy = my_getcookie( 'ipb-myass-div' );
+ var co_ords;
+
+ if ( divxy && divxy != null )
+ {
+ co_ords = divxy.split( ',' );
+
+ //----------------------------------
+ // Got co-ords?
+ //----------------------------------
+
+ if ( co_ords.length )
+ {
+ var final_width = co_ords[0];
+ var final_height = co_ords[1];
+
+ if ( co_ords[0] > my_width )
+ {
+ //----------------------------------
+ // Keep it on screen
+ //----------------------------------
+
+ final_width = my_width - divwidth;
+ }
+
+ if ( co_ords[1] > my_height )
+ {
+ //----------------------------------
+ // Keep it on screen
+ //----------------------------------
+
+ final_height = my_height - divheight;
+ }
+
+ myass_main.style.left = final_width + 'px';
+ myass_main.style.top = final_height + 'px';
+ }
+ }
+ else
+ {
+ //----------------------------------
+ // Reposition DIV roughly centered
+ //----------------------------------
+
+ myass_main.style.left = my_width / 2 - (divwidth / 2) + 'px';
+ myass_main.style.top = my_height / 2 - (divheight / 2 ) + 'px';
+ }
+
+ Drag.cookiename = 'ipb-myass-div';
+ Drag.init( myass_drag, myass_main );
+
+ myass_loaded = 1;
+ }
+};
+
+/*--------------------------------------------*/
+// Alter DST Retrieve XML document
+/*--------------------------------------------*/
+
+function xml_myassistant_search( url )
+{
+ var keywords = document.getElementById('myass-search-input').value;
+ var msg_field = document.getElementById('myass-search-message');
+ var url = ipb_var_base_url+'act=Search&CODE=01&forums=all&cat_forum=forum&joinname=1&search_in=posts&result_type=topics&xml=1&keywords='+escape(keywords);
+
+ if ( keywords.length < 4 )
+ {
+ msg_field.innerHTML = ipb_myass_chars_lang;
+ return false;
+ }
+
+ //----------------------------------
+ // Already cached?
+ //----------------------------------
+
+ if ( search_cache[ keywords ] )
+ {
+ msg_field.innerHTML = search_cache[ keywords ];
+ return;
+ }
+
+ /*--------------------------------------------*/
+ // Main function to do on request
+ // Must be defined first!!
+ /*--------------------------------------------*/
+
+ do_request_function = function()
+ {
+ //----------------------------------
+ // Ignore unless we're ready to go
+ //----------------------------------
+
+ if ( ! xmlobj.readystate_ready_and_ok() )
+ {
+ xmlobj.show_loading();
+ return;
+ }
+
+ xmlobj.hide_loading();
+
+ //----------------------------------
+ // INIT
+ //----------------------------------
+
+ var html = xmlobj.xmlhandler.responseText;
+
+ msg_field.innerHTML = html;
+ search_cache[ keywords ] = html;
+ };
+
+ //----------------------------------
+ // LOAD XML
+ //----------------------------------
+
+ xmlobj = new ajax_request();
+ xmlobj.onreadystatechange( do_request_function );
+
+ xmlobj.process( url );
+};
+
+/*--------------------------------------------*/
+// Alter DST Retrieve XML document
+/*--------------------------------------------*/
+
+function xml_dst_set( url )
+{
+ /*--------------------------------------------*/
+ // Main function to do on request
+ // Must be defined first!!
+ /*--------------------------------------------*/
+
+ do_request_function = function()
+ {
+ //----------------------------------
+ // Ignore unless we're ready to go
+ //----------------------------------
+
+ if ( ! xmlobj.readystate_ready_and_ok() )
+ {
+ // Could do a little loading graphic here?
+ return;
+ }
+
+ //----------------------------------
+ // INIT
+ //----------------------------------
+
+ var html = xmlobj.xmlhandler.responseText;
+
+ if ( html == 'error' )
+ {
+ window.location = url.replace( '&xml=1', '&xml=0');
+ }
+ };
+
+ //----------------------------------
+ // LOAD XML
+ //----------------------------------
+
+ xmlobj = new ajax_request();
+ xmlobj.onreadystatechange( do_request_function );
+
+ xmlobj.process( url );
+};
+
+
+/*-------------------------------------------------------------------------*/
+// INIT Post GD Image
+/*-------------------------------------------------------------------------*/
+
+function init_gd_image()
+{
+ var reg_img = document.getElementById('gd-antispam');
+
+ try
+ {
+ reg_img.style.cursor = 'pointer';
+ }
+ catch(e)
+ {
+ reg_img.style.cursor = 'hand';
+ };
+
+ reg_img._ready = 1;
+
+ reg_img.onclick = do_change_img;
+};
+
+function do_change_img()
+{
+ var rc = '';
+ var act = 'Reg';
+ var code = 'image';
+ var reg_img = document.getElementById('gd-antispam');
+
+ if ( ! reg_img._ready )
+ {
+ return false;
+ }
+
+ var url = ipb_var_base_url+'act=xmlout&do=change-gd-img&img='+rc;
+
+ do_request_function = function()
+ {
+ //----------------------------------
+ // Ignore unless we're ready to go
+ //----------------------------------
+
+ if ( ! xmlobj.readystate_ready_and_ok() )
+ {
+ // Could do a little loading graphic here?
+ return;
+ }
+
+ //----------------------------------
+ // INIT
+ //----------------------------------
+
+ var html = xmlobj.xmlhandler.responseText;
+
+ reg_img.src = ipb_var_base_url+'act=captcha&showImage®id='+html;
+
+ var reg_field = document.getElementById('regid');
+ reg_field.value = html;
+
+ reg_img._ready = 1;
+ };
+
+ //----------------------------------
+ // LOAD XML
+ //----------------------------------
+
+ reg_img._ready = 0;
+
+ xmlobj = new ajax_request();
+ xmlobj.onreadystatechange( do_request_function );
+ xmlobj.process( url );
+}
+
+
diff --git a/Development/javascript_uncompressed/jscripts/ipb_pm.js b/Development/javascript_uncompressed/jscripts/ipb_pm.js
new file mode 100644
index 00000000..bdf1ac3b
--- /dev/null
+++ b/Development/javascript_uncompressed/jscripts/ipb_pm.js
@@ -0,0 +1,179 @@
+//------------------------------------------
+// Invision Power Board v2.1
+// PM JS File
+// (c) 2005 Invision Power Services, Inc.
+//
+// http://www.invisionboard.com
+//------------------------------------------
+
+//==========================================
+// Check All boxes
+//==========================================
+
+function CheckAll(fmobj)
+{
+ for (var i=0;i maxid )
+ {
+ maxid = parseInt(i);
+ }
+ }
+
+ maxid = maxid + 1;
+
+ poll_write_form_to_array();
+
+ poll_questions[ maxid ] = '';
+ poll_multi[ maxid ] = '';
+
+ poll_draw_main_box();
+
+ return false;
+}
+
+
+/*--------------------------------------------*/
+// ADD POLL CHOICE
+/*--------------------------------------------*/
+
+function poll_add_choice( qid )
+{
+ var maxid = 0;
+
+ //-------------------------------
+ // Get max choice ID
+ //-------------------------------
+
+ for ( var c in poll_choices )
+ {
+ //-------------------------------
+ // Is this a choice for this q?
+ //-------------------------------
+
+ var id = c.replace( new RegExp( "^" + qid + "_(\\d+)$" ), "$1" );
+
+ if ( ! isNaN( id ) )
+ {
+ if ( id > maxid )
+ {
+ maxid = parseInt(id);
+ }
+ }
+ }
+
+ maxid = maxid + 1;
+
+ poll_write_form_to_array();
+
+ poll_choices[ qid +'_'+maxid ] = '';
+
+ if ( is_mod )
+ {
+ poll_votes[ qid +'_'+maxid ] = 0;
+ }
+
+ poll_draw_main_box();
+
+ return false;
+}
+
+
+/*--------------------------------------------*/
+// REMOVE POLL CHOICE
+/*--------------------------------------------*/
+
+function poll_remove_choice( mainid )
+{
+ if ( confirm( js_lang_confirm ) )
+ {
+ delete( poll_choices[ mainid ] );
+
+ if ( is_mod )
+ {
+ delete( poll_votes[ mainid ] );
+ }
+
+ poll_write_form_to_array();
+ poll_draw_main_box();
+ }
+
+ return false;
+}
+
+/*--------------------------------------------*/
+// REMOVE POLL QUESTION
+/*--------------------------------------------*/
+
+function poll_remove_question( mainid )
+{
+ if ( confirm( js_lang_confirm ) )
+ {
+ //-------------------------------
+ // Delete question
+ //-------------------------------
+
+ delete( poll_questions[ mainid ] );
+
+ //-------------------------------
+ // Delete choices
+ //-------------------------------
+
+ for ( var c in poll_choices )
+ {
+ //-------------------------------
+ // Is this a choice for this q?
+ //-------------------------------
+
+ var id = c.replace( new RegExp( "^" + mainid + "_(\\d+)$" ), "$1" );
+
+ if ( ! isNaN( id ) )
+ {
+ delete( poll_choices[ c ] );
+
+ if ( is_mod )
+ {
+ delete( poll_votes[ c ] );
+ }
+ }
+ }
+
+ poll_write_form_to_array();
+ poll_draw_main_box();
+ }
+
+ return false;
+}
+
+/*--------------------------------------------*/
+// UPDATE POLL STATE
+/*--------------------------------------------*/
+
+function poll_update_state()
+{
+ used = max_poll_questions - used_questions;
+
+ var tmp_lang = lang_build_string( poll_stat_lang, used, max_poll_choices );
+ statobj.innerHTML = lang_build_string( html_stat_wrap, tmp_lang );
+}
+
+/*--------------------------------------------*/
+// SHOW POLL FORM
+/*--------------------------------------------*/
+
+function show_poll_form()
+{
+ my_show_div( openobj );
+ my_hide_div( closedobj );
+}
+
+/*--------------------------------------------*/
+// CLOSE POLL FORM
+/*--------------------------------------------*/
+
+function close_poll_form()
+{
+ my_show_div( closedobj );
+ my_hide_div( openobj );
+}
+
+/*--------------------------------------------*/
+// FORM MAKE SAFE
+/*--------------------------------------------*/
+
+function _poll_make_form_safe( t )
+{
+ t = t.replace( /'/g, ''' );
+ t = t.replace( /"/g, '"' );
+
+ return t;
+}
+
+
+
+
+
+
+
diff --git a/Development/javascript_uncompressed/jscripts/ipb_profile.js b/Development/javascript_uncompressed/jscripts/ipb_profile.js
new file mode 100644
index 00000000..dcd31797
--- /dev/null
+++ b/Development/javascript_uncompressed/jscripts/ipb_profile.js
@@ -0,0 +1,36 @@
+//------------------------------------------
+// Invision Power Board v2.1
+// Profile JS File
+// (c) 2005 Invision Power Services, Inc.
+//
+// http://www.invisionboard.com
+//------------------------------------------
+
+
+
+/*--------------------------------------------*/
+// Profile: Open pop-up window
+/*--------------------------------------------*/
+
+function profile_dname_history( mid )
+{
+ //----------------------------------
+ // Attempt to close the menu
+ //----------------------------------
+
+ try
+ {
+ menu_action_close();
+ }
+ catch(e)
+ {
+ }
+
+ //----------------------------------
+ // Launch Pop Up
+ //----------------------------------
+
+ PopUp( ipb_var_base_url + 'act=profile&CODE=show-display-names&id=' + mid, 'DNAMETITLE', 400, 300 );
+
+ return false;
+}
\ No newline at end of file
diff --git a/Development/javascript_uncompressed/jscripts/ipb_register.js b/Development/javascript_uncompressed/jscripts/ipb_register.js
new file mode 100644
index 00000000..54a493e8
--- /dev/null
+++ b/Development/javascript_uncompressed/jscripts/ipb_register.js
@@ -0,0 +1,959 @@
+//------------------------------------------
+// Invision Power Board v2.1
+// Register JS File
+// (c) 2005 Invision Power Services, Inc.
+//
+// http://www.invisionboard.com
+//------------------------------------------
+
+var user_display_name_max_length = 26;
+var reg_got_dname = 0;
+var reg_oktogo = 0;
+var reg_field_ids = new Array();
+var reg_img_ids = new Array();
+var reg_box_ids = new Array();
+var reg_msg_ids = new Array();
+
+var ucp_dname_illegal_chars = new Array( '[', ']', '|', ',', ';', '$', '"', '<', '>', '\\' );
+var ucp_dname_illegal_regex = '';
+
+for ( var i in ucp_dname_illegal_chars )
+{
+ ucp_dname_illegal_regex += '\\' + ucp_dname_illegal_chars[i];
+}
+
+var error_email = 0;
+
+var in_member_id = 0;
+
+RegExp.escape = function(text)
+{
+ if (!arguments.callee.sRE)
+ {
+ var specials = [ '/', '.', '*', '+', '?', '|', '(', ')', '[', ']', '{', '}', '\\', '$' ];
+
+ arguments.callee.sRE = new RegExp( '(\\' + specials.join('|\\') + ')', 'g' );
+ }
+
+ return text.replace(arguments.callee.sRE, '\\$1');
+};
+
+/*-------------------------------------------------------------------------*/
+// INIT Reg form
+/*-------------------------------------------------------------------------*/
+
+function init_reg_form( got_dname, register_method )
+{
+ //------------------------------------------
+ // INIT objects
+ //------------------------------------------
+
+ reg_got_dname = got_dname;
+
+ //------------------------------------------
+ // Fields...
+ //------------------------------------------
+
+ if( register_method == 'username' )
+ {
+ reg_field_ids['name'] = document.getElementById( 'reg-name' );
+ }
+
+ reg_field_ids['password'] = document.getElementById( 'reg-password' );
+ reg_field_ids['password-check'] = document.getElementById( 'reg-password-check' );
+ reg_field_ids['emailaddress'] = document.getElementById( 'reg-emailaddress' );
+ reg_field_ids['emailaddress-two'] = document.getElementById( 'reg-emailaddress-two' );
+
+ //------------------------------------------
+ // Images
+ //------------------------------------------
+
+ if( register_method == 'username' )
+ {
+ reg_img_ids['name'] = document.getElementById( 'img-name' );
+ }
+
+ reg_img_ids['password'] = document.getElementById( 'img-password' );
+ reg_img_ids['emailaddress'] = document.getElementById( 'img-emailaddress' );
+
+ //------------------------------------------
+ // Boxes
+ //------------------------------------------
+
+ if( register_method == 'username' )
+ {
+ reg_box_ids['name'] = document.getElementById( 'box-name' );
+ }
+
+ reg_box_ids['password'] = document.getElementById( 'box-password' );
+ reg_box_ids['emailaddress'] = document.getElementById( 'box-emailaddress' );
+
+ //------------------------------------------
+ // Messages
+ //------------------------------------------
+
+ if ( register_method == 'username' )
+ {
+ reg_msg_ids['name'] = document.getElementById( 'msg-name' );
+ }
+
+ reg_msg_ids['password'] = document.getElementById( 'msg-password' );
+ reg_msg_ids['emailaddress'] = document.getElementById( 'msg-emailaddress' );
+
+ //------------------------------------------
+ // Set up onblur
+ //------------------------------------------
+
+ if( register_method == 'username' )
+ {
+ reg_field_ids['name'].onblur = check_user_name;
+ }
+
+ reg_field_ids['password-check'].onblur = check_passwords;
+ reg_field_ids['emailaddress'].onblur = check_email_addresses_one;
+ reg_field_ids['emailaddress-two'].onblur = check_email_addresses;
+
+ //------------------------------------------
+ // Already got error messages?
+ //------------------------------------------
+
+ if ( register_method == 'username' )
+ {
+ if ( ! reg_msg_ids['name'].innerHTML )
+ {
+ reg_box_ids['name'].style.display = 'none';
+ }
+ }
+
+ if ( ! reg_msg_ids['password'].innerHTML )
+ {
+ reg_box_ids['password'].style.display = 'none';
+ }
+
+ if ( ! reg_msg_ids['emailaddress'].innerHTML )
+ {
+ reg_box_ids['emailaddress'].style.display = 'none';
+ }
+
+ //------------------------------------------
+ // Display name. ..
+ //------------------------------------------
+
+ if ( reg_got_dname )
+ {
+ reg_field_ids['dname'] = document.getElementById( 'reg-members-display-name' );
+ reg_box_ids['dname'] = document.getElementById( 'box-dname' );
+ reg_msg_ids['dname'] = document.getElementById( 'msg-dname' );
+ reg_img_ids['dname'] = document.getElementById( 'img-members-display-name' );
+
+ if ( ! reg_msg_ids['dname'].innerHTML )
+ {
+ reg_box_ids['dname'].style.display = 'none';
+ }
+
+ reg_field_ids['dname'].onblur = check_display_name;
+ }
+};
+
+/*-------------------------------------------------------------------------*/
+// INIT Reg form
+/*-------------------------------------------------------------------------*/
+
+function init_complete_login_form()
+{
+ //------------------------------------------
+ // INIT objects
+ //------------------------------------------
+
+ reg_got_dname = got_dname;
+
+ if ( ! reg_email_ok )
+ {
+ //------------------------------------------
+ // Fields...
+ //------------------------------------------
+
+ reg_field_ids['emailaddress'] = document.getElementById( 'reg-emailaddress' );
+ reg_field_ids['emailaddress-two'] = document.getElementById( 'reg-emailaddress-two' );
+
+ //------------------------------------------
+ // Images
+ //------------------------------------------
+
+ reg_img_ids['emailaddress'] = document.getElementById( 'img-emailaddress' );
+
+ //------------------------------------------
+ // Boxes
+ //------------------------------------------
+
+ reg_box_ids['emailaddress'] = document.getElementById( 'box-emailaddress' );
+
+ //------------------------------------------
+ // Messages
+ //------------------------------------------
+
+ reg_msg_ids['emailaddress'] = document.getElementById( 'msg-emailaddress' );
+
+ //------------------------------------------
+ // Set up onblur
+ //------------------------------------------
+
+ reg_field_ids['emailaddress'].onblur = check_email_addresses_one;
+ reg_field_ids['emailaddress-two'].onblur = check_email_addresses;
+
+ //------------------------------------------
+ // Already got error messages?
+ //------------------------------------------
+
+ if ( ! reg_msg_ids['emailaddress'].innerHTML )
+ {
+ reg_box_ids['emailaddress'].style.display = 'none';
+ }
+ }
+
+ //------------------------------------------
+ // Display name...
+ //------------------------------------------
+
+ if ( reg_got_dname )
+ {
+ reg_field_ids['dname'] = document.getElementById( 'reg-members-display-name' );
+ reg_box_ids['dname'] = document.getElementById( 'box-dname' );
+ reg_msg_ids['dname'] = document.getElementById( 'msg-dname' );
+ reg_img_ids['dname'] = document.getElementById( 'img-members-display-name' );
+
+ if ( ! reg_msg_ids['dname'].innerHTML )
+ {
+ reg_box_ids['dname'].style.display = 'none';
+ }
+
+ reg_field_ids['dname'].onblur = check_display_name;
+ }
+
+ in_member_id = member_id;
+};
+
+/*-------------------------------------------------------------------------*/
+// Check email address validity
+/*-------------------------------------------------------------------------*/
+
+function check_email_addresses_one( event )
+{
+ if( !event )
+ {
+ event = window.event;
+ }
+
+ //----------------------------------
+ // INIT
+ //----------------------------------
+
+ var error_found = '';
+
+ //----------------------------------
+ // Ajax: check for existing email address
+ //----------------------------------
+
+ if ( use_enhanced_js && reg_field_ids['emailaddress'].value )
+ {
+ var url = ipb_var_base_url+'act=xmlout&do=check-email-address&email='+encodeURIComponent( reg_field_ids['emailaddress'].value );
+
+ /*--------------------------------------------*/
+ // Main function to do on request
+ // Must be defined first!!
+ /*--------------------------------------------*/
+
+ do_request_function = function()
+ {
+ //----------------------------------
+ // Ignore unless we're ready to go
+ //----------------------------------
+
+ if ( ! xmlobj.readystate_ready_and_ok() )
+ {
+ // Could do a little loading graphic here?
+ return;
+ }
+
+ //----------------------------------
+ // INIT
+ //----------------------------------
+
+ var html = xmlobj.xmlhandler.responseText;
+
+ if ( html == 'found' )
+ {
+ error_found += reg_error_email_taken + " ";
+ }
+ if ( html == 'banned' )
+ {
+ error_found += reg_error_email_ban + " ";
+ }
+ if ( html == 'invalid' )
+ {
+ error_found += reg_error_email_invalid + " ";
+ }
+
+ //----------------------------------
+ // Show errors
+ //----------------------------------
+
+ if ( error_found )
+ {
+ reg_field_ids['emailaddress'].className = input_red;
+ reg_img_ids['emailaddress'].src = ipb_var_image_url + '/' + img_cross;
+ reg_msg_ids['emailaddress'].innerHTML = error_found;
+ reg_box_ids['emailaddress'].style.display = 'block';
+ error_email = 1;
+ }
+ else
+ {
+ error_email = 0;
+ }
+
+ error_found = '';
+ };
+
+ //----------------------------------
+ // LOAD XML
+ //----------------------------------
+
+ xmlobj = new ajax_request();
+ xmlobj.onreadystatechange( do_request_function );
+ xmlobj.process( url );
+ }
+};
+
+/*-------------------------------------------------------------------------*/
+// Check email addresses
+/*-------------------------------------------------------------------------*/
+
+function check_email_addresses( event )
+{
+ if( !event )
+ {
+ event = window.event;
+ }
+
+ //----------------------------------
+ // INIT
+ //----------------------------------
+
+ var error_found = '';
+
+ //----------------------------------
+ // Check
+ //----------------------------------
+
+ if ( ! reg_field_ids['emailaddress'].value.match( /[@\.]/ ) )
+ {
+ error_found += reg_error_email_missing + " ";
+ }
+
+ if ( ! error_found && ( ! reg_field_ids['emailaddress'].value || ! reg_field_ids['emailaddress-two'].value ) )
+ {
+ error_found += reg_error_email_missing + " ";
+ }
+
+ if ( reg_field_ids['emailaddress'].value.toLowerCase() != reg_field_ids['emailaddress-two'].value.toLowerCase() )
+ {
+ error_found += reg_error_email_nm + " ";
+ }
+
+ if ( error_found )
+ {
+ reg_field_ids['emailaddress'].className = input_red;
+ reg_field_ids['emailaddress-two'].className = input_red;
+ reg_img_ids['emailaddress'].src = ipb_var_image_url + '/' + img_cross;
+ reg_msg_ids['emailaddress'].innerHTML = error_found;
+ reg_box_ids['emailaddress'].style.display = 'block';
+ error_email = 1;
+ }
+ else
+ {
+ error_email = 0;
+ }
+
+ //----------------------------------
+ // No error....
+ //----------------------------------
+
+ if ( error_email == 0 && event.type != 'submit' )
+ {
+ check_email_addresses_one();
+ }
+
+ //----------------------------------
+ // Still no errors...
+ //----------------------------------
+
+ if ( error_email == 0 )
+ {
+ reg_field_ids['emailaddress'].className = input_green;
+ reg_field_ids['emailaddress-two'].className = input_green;
+ reg_img_ids['emailaddress'].src = ipb_var_image_url + '/' + img_tick;
+ reg_box_ids['emailaddress'].style.display = 'none';
+ reg_msg_ids['emailaddress'].innerHTML = '';
+ }
+
+ if( reg_field_ids['emailaddress'].className == input_red )
+ {
+ reg_field_ids['emailaddress-two'].className = input_red;
+ }
+};
+
+
+/*-------------------------------------------------------------------------*/
+// Check passwords match
+/*-------------------------------------------------------------------------*/
+
+function check_passwords( event )
+{
+ if( !event )
+ {
+ event = window.event;
+ }
+
+ //----------------------------------
+ // INIT
+ //----------------------------------
+
+ var error_found = '';
+
+ //----------------------------------
+ // Check
+ //----------------------------------
+
+ if ( ! reg_field_ids['password'].value || ! reg_field_ids['password-check'].value )
+ {
+ error_found += reg_error_no_pass + " ";
+ }
+
+ if ( reg_field_ids['password'].value != reg_field_ids['password-check'].value )
+ {
+ error_found += reg_error_pass_nm + " ";
+ }
+
+ if ( error_found )
+ {
+ reg_field_ids['password'].className = input_red;
+ reg_field_ids['password-check'].className = input_red;
+ reg_img_ids['password'].src = ipb_var_image_url + '/' + img_cross;
+ reg_msg_ids['password'].innerHTML = error_found;
+ reg_box_ids['password'].style.display = 'block';
+ }
+ else
+ {
+ reg_field_ids['password'].className = input_green;
+ reg_field_ids['password-check'].className = input_green;
+ reg_img_ids['password'].src = ipb_var_image_url + '/' + img_tick;
+ reg_box_ids['password'].style.display = 'none';
+ reg_msg_ids['password'].innerHTML = '';
+ }
+};
+
+/*-------------------------------------------------------------------------*/
+// Check display name
+/*-------------------------------------------------------------------------*/
+
+function check_display_name( event )
+{
+ if( !event )
+ {
+ event = window.event;
+ }
+
+ //----------------------------------
+ // INIT
+ //----------------------------------
+
+ var error_found = '';
+
+ //----------------------------------
+ // Make sure we have sommat
+ //----------------------------------
+
+ if ( ! reg_field_ids['dname'].value || reg_field_ids['dname'].value.length < 3 || reg_field_ids['dname'].value.length > user_display_name_max_length )
+ {
+ error_found += reg_error_no_name + " ";
+ }
+
+ //----------------------------------
+ // Check for illegal chars
+ //----------------------------------
+
+ if ( reg_field_ids['dname'].value.match( new RegExp( "[" + ucp_dname_illegal_regex + "]" ) ) )
+ {
+ error_found += reg_error_chars + " ";
+ }
+
+ if ( allowed_chars != "" )
+ {
+ var test_regex = new RegExp();
+ test_regex.compile( "^[" + RegExp.escape(allowed_chars) + "]+$" );
+
+ if ( !test_regex.test( reg_field_ids['dname'].value ) )
+ {
+ error_found += allowed_error + " ";
+ }
+ }
+
+ //----------------------------------
+ // Ajax: check for existing member name
+ //----------------------------------
+
+ if ( use_enhanced_js && reg_field_ids['dname'].value && event.type != 'submit' )
+ {
+ var url = ipb_var_base_url+'act=xmlout&do=check-display-name&name='+escape( reg_field_ids['dname'].value );
+
+ // Complete reg form?
+
+ if ( in_member_id )
+ {
+ url += '&id=' + in_member_id;
+ }
+
+ /*--------------------------------------------*/
+ // Main function to do on request
+ // Must be defined first!!
+ /*--------------------------------------------*/
+
+ do_request_function = function()
+ {
+ //----------------------------------
+ // Ignore unless we're ready to go
+ //----------------------------------
+
+ if ( ! xmlobj.readystate_ready_and_ok() )
+ {
+ // Could do a little loading graphic here?
+ return;
+ }
+
+ //----------------------------------
+ // INIT
+ //----------------------------------
+
+ var html = xmlobj.xmlhandler.responseText;
+
+ if ( html == 'found' )
+ {
+ error_found += reg_error_taken + " ";
+ }
+
+ //----------------------------------
+ // Show errors
+ //----------------------------------
+
+ if ( error_found )
+ {
+ reg_field_ids['dname'].className = input_red;
+ reg_img_ids['dname'].src = ipb_var_image_url + '/' + img_cross;
+ reg_msg_ids['dname'].innerHTML = error_found;
+ reg_box_ids['dname'].style.display = 'block';
+ }
+ else
+ {
+ reg_field_ids['dname'].className = input_green;
+ reg_img_ids['dname'].src = ipb_var_image_url + '/' + img_tick;
+ reg_box_ids['dname'].style.display = 'none';
+ reg_msg_ids['dname'].innerHTML = '';
+ }
+
+ error_found = '';
+ };
+
+ //----------------------------------
+ // LOAD XML
+ //----------------------------------
+
+ xmlobj = new ajax_request();
+ xmlobj.onreadystatechange( do_request_function );
+ xmlobj.process( url );
+ }
+ else
+ {
+ //----------------------------------
+ // Show errors
+ //----------------------------------
+
+ if ( error_found )
+ {
+ reg_field_ids['dname'].className = input_red;
+ reg_img_ids['dname'].src = ipb_var_image_url + '/' + img_cross;
+ reg_msg_ids['dname'].innerHTML = error_found;
+ reg_box_ids['dname'].style.display = 'block';
+ }
+ else
+ {
+ reg_field_ids['dname'].className = input_green;
+ reg_img_ids['dname'].src = ipb_var_image_url + '/' + img_tick;
+ reg_box_ids['dname'].style.display = 'none';
+ reg_msg_ids['dname'].innerHTML = '';
+ }
+
+ error_found = '';
+ }
+};
+
+
+/*-------------------------------------------------------------------------*/
+// Check username
+/*-------------------------------------------------------------------------*/
+
+function check_user_name( event )
+{
+ if( !event )
+ {
+ event = window.event;
+ }
+
+ //----------------------------------
+ // INIT
+ //----------------------------------
+
+ var error_found = '';
+
+ //----------------------------------
+ // Make sure we have sommat
+ //----------------------------------
+
+ if ( ! reg_field_ids['name'].value || reg_field_ids['name'].value.length < 3 || reg_field_ids['name'].value.length > user_display_name_max_length )
+ {
+ error_found += reg_error_username_none + " ";
+ }
+
+ if ( allowed_chars != "" )
+ {
+ var test_regex = new RegExp();
+ test_regex.compile( "^[" + RegExp.escape(allowed_chars) + "]+$" );
+
+ if ( !test_regex.test( reg_field_ids['name'].value ) )
+ {
+ error_found += allowed_error + " ";
+ }
+ }
+
+ //----------------------------------
+ // Ajax: check for existing member name
+ //----------------------------------
+
+ if ( use_enhanced_js && reg_field_ids['name'].value && event.type != 'submit' )
+ {
+ // + symbols get stripped due to escape
+ reg_field_ids['name'].value = reg_field_ids['name'].value.replace("+", "+");
+
+ //----------------------------------
+ // Get new xhttp obj
+ //----------------------------------
+
+ var url = ipb_var_base_url+'act=xmlout&do=check-user-name&name='+escape( reg_field_ids['name'].value );
+
+ /*--------------------------------------------*/
+ // Main function to do on request
+ // Must be defined first!!
+ /*--------------------------------------------*/
+
+ do_request_function = function()
+ {
+ //----------------------------------
+ // Ignore unless we're ready to go
+ //----------------------------------
+
+ if ( ! xmlobj.readystate_ready_and_ok() )
+ {
+ // Could do a little loading graphic here?
+ return;
+ }
+
+ //----------------------------------
+ // INIT
+ //----------------------------------
+
+ var html = xmlobj.xmlhandler.responseText;
+
+ if ( html == 'found' )
+ {
+ error_found += reg_error_username_taken + " ";
+ }
+
+ //----------------------------------
+ // Show errors
+ //----------------------------------
+
+ if ( error_found )
+ {
+ reg_field_ids['name'].className = input_red;
+ reg_img_ids['name'].src = ipb_var_image_url + '/' + img_cross;
+ reg_msg_ids['name'].innerHTML = error_found;
+ reg_box_ids['name'].style.display = 'block';
+ }
+ else
+ {
+ reg_field_ids['name'].className = input_green;
+ reg_img_ids['name'].src = ipb_var_image_url + '/' + img_tick;
+ reg_box_ids['name'].style.display = 'none';
+ reg_msg_ids['name'].innerHTML = '';
+ }
+
+ error_found = '';
+ };
+
+ //----------------------------------
+ // LOAD XML
+ //----------------------------------
+
+ xmlobj = new ajax_request();
+ xmlobj.onreadystatechange( do_request_function );
+ xmlobj.process( url );
+ }
+ else
+ {
+ //----------------------------------
+ // Show errors
+ //----------------------------------
+
+ if ( error_found )
+ {
+ reg_field_ids['name'].className = input_red;
+ reg_img_ids['name'].src = ipb_var_image_url + '/' + img_cross;
+ reg_msg_ids['name'].innerHTML = error_found;
+ reg_box_ids['name'].style.display = 'block';
+ }
+ else
+ {
+ reg_field_ids['name'].className = input_green;
+ reg_img_ids['name'].src = ipb_var_image_url + '/' + img_tick;
+ reg_box_ids['name'].style.display = 'none';
+ reg_msg_ids['name'].innerHTML = '';
+ }
+
+ error_found = '';
+ }
+
+ reg_field_ids['name'].value = reg_field_ids['name'].value.replace("+", "+");
+};
+
+/*-------------------------------------------------------------------------*/
+// Validate the complete log in form
+/*-------------------------------------------------------------------------*/
+
+function validate_complete_login_form( event )
+{
+ if( !event )
+ {
+ event = window.event;
+ }
+
+ //------------------------------------------
+ // Simply run the functions
+ //------------------------------------------
+
+ reg_oktogo = 1;
+
+ if ( ! email_ok )
+ {
+ check_email_addresses( event );
+
+ //------------------------------------------
+ // Got error messages
+ //------------------------------------------
+
+ if ( reg_msg_ids['emailaddress'].innerHTML )
+ {
+ reg_oktogo = 0;
+ }
+ }
+
+ //------------------------------------------
+ // Display name...
+ //------------------------------------------
+
+ if ( reg_got_dname )
+ {
+ check_display_name( event );
+
+ if ( reg_msg_ids['dname'].innerHTML )
+ {
+ reg_oktogo = 0;
+ }
+ }
+
+ //------------------------------------------
+ // Return
+ //------------------------------------------
+
+ return reg_oktogo ? true : false;
+};
+
+/*-------------------------------------------------------------------------*/
+// Validate the registration form
+/*-------------------------------------------------------------------------*/
+
+function validate_reg_form( event )
+{
+ if( !event )
+ {
+ event = window.event;
+ }
+
+ //------------------------------------------
+ // Simply run the functions
+ //------------------------------------------
+
+ reg_oktogo = 1;
+
+ check_email_addresses( event );
+
+ check_passwords( event );
+
+ if( register_method == 'username' )
+ {
+ check_user_name( event );
+ }
+
+ //------------------------------------------
+ // Got error messages
+ //------------------------------------------
+
+ if( register_method == 'username' )
+ {
+ if ( reg_msg_ids['name'].innerHTML )
+ {
+ reg_oktogo = 0;
+ }
+ }
+
+ if ( reg_msg_ids['password'].innerHTML )
+ {
+ reg_oktogo = 0;
+ }
+
+ if ( reg_msg_ids['emailaddress'].innerHTML )
+ {
+ reg_oktogo = 0;
+ }
+
+ //------------------------------------------
+ // Display name...
+ //------------------------------------------
+
+ if ( reg_got_dname )
+ {
+ check_display_name( event );
+
+ if ( reg_msg_ids['dname'].innerHTML )
+ {
+ reg_oktogo = 0;
+ }
+ }
+
+ //------------------------------------------
+ // Return
+ //------------------------------------------
+
+ return reg_oktogo ? true : false;
+};
+
+/*-------------------------------------------------------------------------*/
+// They are a COPPA :D
+/*-------------------------------------------------------------------------*/
+
+function coppa_save()
+{
+ //------------------------------------------
+ // Set cookie
+ //------------------------------------------
+
+ my_setcookie( 'coppa', 'yes', 1 );
+ my_setcookie( 'coppabday', bday_m + '-' + bday_d + '-' + bday_y, 1 );
+};
+
+/*-------------------------------------------------------------------------*/
+// Run from the COPPA
+/*-------------------------------------------------------------------------*/
+
+function coppa_cancel()
+{
+ //------------------------------------------
+ // Set cookie
+ //------------------------------------------
+
+ //my_setcookie( 'coppa', '0', 1 );
+ locationjump( '' );
+};
+
+/*-------------------------------------------------------------------------*/
+// Run from the COPPA
+/*-------------------------------------------------------------------------*/
+
+function coppa_check()
+{
+ //------------------------------------------
+ // Set cookie
+ //------------------------------------------
+
+ var coppa_check = my_getcookie( 'coppa' );
+
+ if ( coppa_check == 'yes' )
+ {
+ alert( coppa_bounce );
+
+ var bdays = my_getcookie( 'coppabday' );
+ var dates = bdays.split( '-' );
+
+ locationjump( 'act=reg&CODE=coppa_two&m=' + dates[0] + '&d=' + dates[1] + '&y=' + dates[2] );
+ }
+};
+
+/*-------------------------------------------------------------------------*/
+// Show a more info button?
+/*-------------------------------------------------------------------------*/
+
+
+function reg_get_more_check()
+{
+ var dropdown = document.getElementById( 'subspackage' );
+ var chosenid = dropdown.options[dropdown.selectedIndex].value;
+
+ if ( ! chosenid )
+ {
+ chosenid = 0;
+ }
+
+ if ( subdesc[chosenid] )
+ {
+ document.getElementById( 'reg-get-more-info' ).style.display = '';
+ }
+ else
+ {
+ document.getElementById( 'reg-get-more-info' ).style.display = 'none';
+ }
+};
+
+
+/*-------------------------------------------------------------------------*/
+// Show subs more info form
+/*-------------------------------------------------------------------------*/
+
+function get_more_info()
+{
+ var dropdown = document.getElementById( 'subspackage' );
+ var chosenid = dropdown.options[dropdown.selectedIndex].value;
+
+ if ( ! chosenid )
+ {
+ chosenid = 0;
+ }
+
+ //------------------------------------------
+ // Toggle view...
+ //------------------------------------------
+
+ if ( subdesc[chosenid] )
+ {
+ document.getElementById('pkdesc').innerHTML = subdesc[chosenid];
+
+ toggleview('subspkdiv');
+ }
+};
\ No newline at end of file
diff --git a/Development/javascript_uncompressed/jscripts/ipb_topic.js b/Development/javascript_uncompressed/jscripts/ipb_topic.js
new file mode 100644
index 00000000..b1c2b73d
--- /dev/null
+++ b/Development/javascript_uncompressed/jscripts/ipb_topic.js
@@ -0,0 +1,1119 @@
+//------------------------------------------
+// Invision Power Board v2.1
+// Topics JS File
+// (c) 2005 Invision Power Services, Inc.
+//
+// http://www.invisionboard.com
+//------------------------------------------
+
+var mystored_selection = '';
+var post_cache = new Array();
+var ajax_loaded = 1;
+var ignore_cache = new Array();
+var rate_value = 0;
+
+/*--------------------------------------------*/
+// Add onload event
+/*--------------------------------------------*/
+
+add_onload_event( fix_linked_image_sizes );
+
+/*--------------------------------------------*/
+// Fix linked images (attach thumbs)
+/*--------------------------------------------*/
+
+function fix_linked_image_sizes_attach_thumb( attach_id, width, height, file_size )
+{
+ //-----------------------------------------
+ // INIT
+ //-----------------------------------------
+
+ var _img = ' ';
+ var img_obj = document.getElementById( 'ipb-attach-img-' + attach_id );
+ var div_obj = document.getElementById( 'ipb-attach-div-' + attach_id );
+ var ct_obj = document.getElementById( 'ipb-attach-ct-' + attach_id );
+ var cb_obj = document.getElementById( 'ipb-attach-cb-' + attach_id );
+ var url_obj = document.getElementById( 'ipb-attach-url-' + attach_id );
+ var tbl_obj = document.getElementById( 'ipb-attach-table-' + attach_id );
+
+ var _width = parseInt( img_obj.width ) ? parseInt( img_obj.width ) : parseInt( img_obj.style.width );
+ var _height = parseInt( img_obj.height ) ? parseInt( img_obj.height ) : parseInt( img_obj.style.height );
+ var _padding = 5;
+ var _percent = 0;
+
+ if ( is_ie )
+ {
+ //-----------------------------------------
+ // Well done MS.. more bugs and workarounds
+ //-----------------------------------------
+
+ _width = parseInt( img_obj.currentStyle['width'] );
+ _height = parseInt( img_obj.currentStyle['height'] );
+ }
+
+ if ( is_safari )
+ {
+ //-----------------------------------------
+ // Nice. Safari you suck! I hate you!
+ // You're the black sheep of the apple family!
+ //-----------------------------------------
+
+ tbl_obj.style.display = 'inline-block';
+ }
+
+ //-----------------------------------------
+ // Got width / height?
+ //-----------------------------------------
+
+ if ( width && height )
+ {
+ _percent = Math.ceil( 100 - parseInt( _width / width * 100 ) );
+ }
+
+ //-----------------------------------------
+ // Stylize
+ //-----------------------------------------
+
+ // Remove IMG class to stop gray border
+ img_obj.className = 'ipb';
+ img_obj.title = ipb_global_lang['click_to_view'];
+ img_obj.onmouseover = fix_attach_images_mouseover;
+ img_obj.onclick = function(event) { ipsclass.pop_up_window( url_obj.href, width + 20, height + 20 ); ipsclass.cancel_bubble(event); };
+
+ // Re-style the main div obj
+ div_obj.style.width = ( _width > 140 ? _width : 140 ) + 'px';
+ div_obj.style.height = _height + ( _padding * 2 ) + 28 + 'px';
+ div_obj.className = 'resized-linked-image';
+ div_obj.style.paddingTop = _padding + "px";
+ div_obj.style.paddingBottom = _padding + "px";
+ div_obj.style.paddingLeft = _padding + 3 + "px";
+ div_obj.style.paddingRight = _padding + 3 + "px";
+ div_obj.style.textAlign = 'center';
+ div_obj.title = ipb_global_lang['click_to_view'];
+ //div_obj.onmouseover = fix_linked_images_mouseover;
+ //div_obj.onclick = function(event) { ipsclass.pop_up_window( url_obj.href, width + 20, height + 20 ); ipsclass.cancel_bubble(event); };
+
+ // Add content to the top div
+ ct_obj.style.fontSize = '9px';
+ cb_obj.style.fontSize = '9px';
+ cb_obj.style.textAlign = 'center';
+
+ if ( _percent > 0 )
+ {
+ ct_obj.innerHTML = _img + ' ' + ipsclass.lang_build_string( ipb_global_lang['image_attach_percent'], _percent );
+ }
+ else
+ {
+ ct_obj.innerHTML = _img + ' ' + ipb_global_lang['image_attach_no_percent'];
+ }
+
+ cb_obj.innerHTML = "";
+
+ if ( width && height )
+ {
+ cb_obj.innerHTML = ipsclass.lang_build_string( ipb_global_lang['image_attach_dims'], width, height );
+ }
+
+ cb_obj.innerHTML += ipsclass.lang_build_string( ipb_global_lang['image_attach_size'], file_size );
+}
+
+/*--------------------------------------------*/
+// Fix linked images (normal IMGs)
+/*--------------------------------------------*/
+
+function fix_linked_image_sizes()
+{
+ if ( ipsclass.settings['do_linked_resize'] != 1 )
+ {
+ return true;
+ }
+
+ var images = document.getElementsByTagName( 'IMG' );
+ var _padding = 2;
+ var _count = 0;
+ var _img = ' ';
+ var _img2 = ' ';
+ var _sw = screen.width * ( parseInt( ipsclass.settings['resize_percent'] ) / 100 );
+
+ for ( var i = 0 ; i < images.length; i++ )
+ {
+ if ( images[i].className == 'linked-image' )
+ {
+ //-----------------------------------------
+ // Inc. counter
+ //-----------------------------------------
+
+ _count++;
+
+ //-----------------------------------------
+ // Set up basics...
+ //-----------------------------------------
+
+ if ( images[i].width > _sw )
+ {
+ //-----------------------------------------
+ // Grab some details...
+ //-----------------------------------------
+
+ var _width = images[i].width;
+ var _height = images[i].height;
+ var _percent = 0;
+
+ //-----------------------------------------
+ // Work out percentage
+ //-----------------------------------------
+
+ images[i].width = _sw;
+
+ if ( images[i].width < _width && _width > 0 && images[i].width > 0 )
+ {
+ _percent = Math.ceil( parseInt( images[i].width / _width * 100 ) );
+ }
+
+ images[i].id = '--ipb-img-resizer-' + _count;
+ images[i]._resized = 1;
+ images[i]._width = _width;
+
+ //-----------------------------------------
+ // Add in wrapper
+ //-----------------------------------------
+
+ var div = document.createElement( 'div' );
+
+
+ div.innerHTML = _img + ' ' + ipsclass.lang_build_string( ipb_global_lang['image_resized'], _percent, _width, _height );
+ div.style.width = images[i].width - ( _padding * 2 ) + 'px';
+ div.className = 'resized-linked-image';
+ div.style.paddingTop = _padding + "px";
+ div.style.paddingBottom = _padding + "px";
+ div.style.paddingLeft = _padding + "px";
+ div.style.paddingRight = _padding + "px";
+ div._is_div = 1;
+ div._resize_id = _count;
+ div.onclick = fix_linked_images_onclick;
+ div.onmouseover = fix_linked_images_mouseover;
+ div.title = ipb_global_lang['click_to_view' ];
+ div._src = images[i].src;
+
+ //-----------------------------------------
+ // Add it all...
+ //-----------------------------------------
+
+ //if ( is_ie && ! is_ie7 )
+ //{
+ // images[i].outerHTML = div.outerHTML + images[i].outerHTML;
+ //}
+ //else
+ //{
+ images[i].parentNode.insertBefore( div, images[i] );
+ //}
+ }
+ }
+ }
+}
+
+function fix_linked_images_onclick(e)
+{
+ //-----------------------------------------
+ // Div clicked
+ //-----------------------------------------
+
+ PopUp( this._src, 'popup',screen.width,screen.height,1,1,1);
+
+ e = ipsclass.cancel_bubble_all( e );
+
+ return false;
+};
+
+function fix_attach_images_mouseover(e)
+{
+ //-----------------------------------------
+ // Change cursor...
+ //-----------------------------------------
+
+ try
+ {
+ this.style.cursor='pointer';
+ }
+ catch(acold)
+ {
+ }
+}
+
+function fix_linked_images_mouseover(e)
+{
+ try
+ {
+ this.style.cursor='pointer';
+ }
+ catch(acold)
+ {
+ }
+
+}
+
+
+/*--------------------------------------------*/
+// Fast reply stuff
+/*--------------------------------------------*/
+
+function emoticon( ecode, eobj, eurl )
+{
+ ecode = ' ' + ecode + ' ';
+ var obj_ta = document.getElementById( 'fastreplyarea' );
+
+ if ( (ua_vers >= 4) && is_ie && is_win)
+ {
+ if (obj_ta.isTextEdit)
+ {
+ obj_ta.focus();
+ var sel = document.selection;
+ var rng = sel.createRange();
+ rng.colapse;
+ if((sel.type == "Text" || sel.type == "None") && rng != null)
+ {
+ if(ecode != "" && rng.text.length > 0)
+ ecode = rng.text + ecode ;
+
+ rng.text = ecode;
+ }
+ }
+ else
+ {
+ obj_ta.value += ecode;
+ }
+ }
+ //----------------------------------------
+ // It's MOZZY!
+ //----------------------------------------
+
+ else if ( obj_ta.selectionEnd )
+ {
+ var ss = obj_ta.selectionStart;
+ var st = obj_ta.scrollTop;
+ var es = obj_ta.selectionEnd;
+
+ if (es <= 2)
+ {
+ es = obj_ta.textLength;
+ }
+
+ var start = (obj_ta.value).substring(0, ss);
+ var middle = (obj_ta.value).substring(ss, es);
+ var end = (obj_ta.value).substring(es, obj_ta.textLength);
+
+ //-----------------------------------
+ // text range?
+ //-----------------------------------
+
+ if (obj_ta.selectionEnd - obj_ta.selectionStart > 0)
+ {
+ middle = ecode + middle;
+ }
+ else
+ {
+ middle = ecode + middle;
+
+ }
+
+ obj_ta.value = start + middle + end;
+
+ var cpos = ss + (middle.length);
+
+ obj_ta.selectionStart = cpos;
+ obj_ta.selectionEnd = cpos;
+ obj_ta.scrollTop = st;
+ }
+ //----------------------------------------
+ // It's CRAPPY!
+ //----------------------------------------
+ else
+ {
+ obj_ta.value += ecode;
+ }
+
+ obj_ta.focus();
+
+ if ( (ua_vers >= 4) && is_ie && is_win && emowindow != 'undefined' )
+ {
+ emowindow.focus();
+ }
+
+ //document.getElementById( 'fastreplyarea' ).value += ' ' + ecode + ' ';
+}
+
+/*--------------------------------------------*/
+// Topic: Scroll to post: IE fix
+/*--------------------------------------------*/
+
+function topic_scroll_to_post( post_id )
+{
+ //----------------------------------
+ // Check for PID
+ //----------------------------------
+
+ if ( ! post_id )
+ {
+ return false;
+ }
+
+ try
+ {
+ var post_main_obj = document.getElementById( 'post-main-' + post_id );
+ }
+ catch(error)
+ {
+ var post_main_obj;
+ }
+
+ if ( post_main_obj )
+ {
+ var post_box_top = _get_obj_toppos( post_main_obj );
+
+ if ( post_box_top )
+ {
+ scroll( 0, post_box_top - 30 );
+ }
+ }
+}
+
+/*--------------------------------------------*/
+// Show hidden post
+/*--------------------------------------------*/
+
+function topic_show_ignored_post( pid )
+{
+ try
+ {
+ // Set up
+ var post_main = document.getElementById( 'post-main-' + pid );
+ var post_ignore = document.getElementById( 'post-ignore-' + pid );
+
+ // Show it
+ post_main.innerHTML = ignore_cache[ pid ];
+ }
+ catch( e )
+ {
+ //alert( e );
+ }
+
+ return false;
+}
+
+
+/*--------------------------------------------*/
+// Initiate topic hide
+/*--------------------------------------------*/
+
+function topic_init_ignored_post( pid )
+{
+ try
+ {
+ // Set up
+ var post_main = document.getElementById( 'post-main-' + pid );
+ var post_ignore = document.getElementById( 'post-ignore-' + pid );
+
+ // Cache it...
+ ignore_cache[ pid ] = post_main.innerHTML;
+
+ // Display "ignored" msg
+ post_main.innerHTML = post_ignore.innerHTML;
+ }
+ catch( e )
+ {
+ //alert( e );
+ }
+}
+
+
+/*--------------------------------------------*/
+// Ajax: Use full editor
+/*--------------------------------------------*/
+
+function ajax_fulleditor_for_edit( post_id )
+{
+ if ( post_id && ipb_input_t && ipb_input_f )
+ {
+ var _form = document.getElementById( 'quick-edit-form-' + post_id );
+ var _url = ipb_var_base_url + 'act=post&do=edit_post&f=' + ipb_input_f + '&t=' + ipb_input_t + '&p=' + post_id + '&st=' + ipb_var_st + '&_from=quickedit';
+
+ _form.action = _url;
+ _form.method = 'POST';
+
+ _form.submit();
+
+ xmlobj.show_loading();
+
+ return false;
+ }
+ else
+ {
+ return false;
+ }
+}
+
+/*--------------------------------------------*/
+// Ajax: Cancel for edit
+/*--------------------------------------------*/
+
+function ajax_cancel_for_edit( post_id )
+{
+ if ( post_cache[ post_id ] != "" )
+ {
+ document.getElementById( 'post-'+post_id ).innerHTML = post_cache[ post_id ];
+ }
+
+ return false;
+}
+
+/*--------------------------------------------*/
+// Ajax: Save for edit
+/*--------------------------------------------*/
+
+function ajax_save_for_edit( post_id )
+{
+ //----------------------------------
+ // INIT
+ //----------------------------------
+
+ var url = ipb_var_base_url+'act=xmlout&do=post-edit-save&p='+post_id+'&t='+ipb_input_t+'&f='+ipb_input_f;
+ var fields = new Array();
+
+ //----------------------------------
+ // Populate fields
+ //----------------------------------
+
+ fields['md5check'] = ipb_md5_check;
+ fields['t'] = ipb_input_t;
+ fields['f'] = ipb_input_f;
+ fields['p'] = post_id;
+ fields['act'] = 'xmlout';
+ fields['do'] = 'post-edit-save';
+ fields['Post'] = document.getElementById( post_id + '_textarea' ).value;
+ fields['std_used'] = 1; // Make sure STD BBCode parser is used
+
+ //-----------------------------------------
+ // Got a reason to be jolly?
+ //-----------------------------------------
+
+ try
+ {
+ fields['post_edit_reason'] = document.getElementById( 'post_edit_reason' ).value;
+ }
+ catch(err)
+ {
+ }
+
+ //----------------------------------
+ // Is there a post?
+ //----------------------------------
+
+ var post_check = fields['Post'];
+
+ if ( post_check.replace( /^\s*|\s*$/g, "" ) == "" )
+ {
+ alert( js_no_empty_post );
+ return false;
+ }
+
+ /*--------------------------------------------*/
+ // Main function to do on request
+ // Must be defined first!!
+ /*--------------------------------------------*/
+
+ do_request_function = function()
+ {
+ //----------------------------------
+ // Ignore unless we're ready to go
+ //----------------------------------
+
+ if ( ! xmlobj.readystate_ready_and_ok() )
+ {
+ xmlobj.show_loading();
+ return;
+ }
+
+ xmlobj.hide_loading();
+
+ //----------------------------------
+ // INIT
+ //----------------------------------
+
+ var html = xmlobj.xmlhandler.responseText;
+
+ //-----------------------------------------
+ // Execute JS...
+ //-----------------------------------------
+
+ if ( html == 'nopermission' )
+ {
+ alert( js_error_no_permission );
+ document.getElementById( 'post-'+post_id ).innerHTML = post_cache[ post_id ];
+ }
+ else if ( html != 'error' )
+ {
+ document.getElementById( 'post-'+post_id ).innerHTML = html;
+ xmlobj.execute_javascript( html );
+ fix_linked_image_sizes();
+ }
+ };
+
+ //----------------------------------
+ // LOAD XML
+ //----------------------------------
+
+ xmlobj = new ajax_request();
+ xmlobj.onreadystatechange( do_request_function );
+ var xmlreturn = xmlobj.process( url, 'POST', xmlobj.format_for_post(fields) );
+
+ return false;
+}
+
+/*--------------------------------------------*/
+// Ajax: Prep for edit
+/*--------------------------------------------*/
+
+function ajax_prep_for_edit( post_id, event )
+{
+ //----------------------------------
+ // Cancel bubble (Prevent IE scroll...)
+ //----------------------------------
+
+ global_cancel_bubble( event, true );
+
+ var post_main_obj = document.getElementById( 'post-main-' + post_id );
+ var post_box_top = _get_obj_toppos( post_main_obj );
+
+ //----------------------------------
+ // INIT
+ //----------------------------------
+
+ var url = ipb_var_base_url+'act=xmlout&do=post-edit-show&p='+post_id+'&t='+ipb_input_t+'&f='+ipb_input_f;
+
+ post_cache[ post_id ] = document.getElementById( 'post-'+post_id ).innerHTML;
+
+ //----------------------------------
+ // Attempt to close open menus
+ //----------------------------------
+
+ try
+ {
+ menu_action_close();
+ }
+ catch(e)
+ {
+ //alert( e );
+ }
+
+ /*--------------------------------------------*/
+ // Main function to do on request
+ // Must be defined first!!
+ /*--------------------------------------------*/
+
+ do_request_function = function()
+ {
+ //----------------------------------
+ // Ignore unless we're ready to go
+ //----------------------------------
+
+ if ( ! xmlobj.readystate_ready_and_ok() )
+ {
+ xmlobj.show_loading();
+ return;
+ }
+
+ xmlobj.hide_loading();
+
+ //----------------------------------
+ // INIT
+ //----------------------------------
+
+ var html = xmlobj.xmlhandler.responseText;
+
+ if ( html == 'nopermission' )
+ {
+ alert( js_error_no_permission );
+ }
+ else if ( html != 'error' )
+ {
+ if ( post_box_top )
+ {
+ scroll( 0, post_box_top - 30 );
+ }
+
+ document.getElementById( 'post-' + post_id ).innerHTML = html;
+
+ //-----------------------------------------
+ // Set up new editor
+ //-----------------------------------------
+
+ IPS_Lite_Editor[ post_id ] = new ips_text_editor_lite( post_id );
+ IPS_Lite_Editor[ post_id ].init();
+ }
+ };
+
+ //----------------------------------
+ // LOAD XML
+ //----------------------------------
+
+ xmlobj = new ajax_request();
+ xmlobj.onreadystatechange( do_request_function );
+
+ xmlobj.process( url );
+
+ return false;
+}
+
+/*--------------------------------------------*/
+// check selection
+/*--------------------------------------------*/
+
+function checkselection()
+{
+ var myselection = '';
+
+ if ( window.getSelection )
+ {
+ myselection = window.getSelection();
+ }
+ else if ( document.selection )
+ {
+ myselection = document.selection.createRange().text;
+ }
+ else if ( document.getSelection )
+ {
+ myselection = document.getSelection();
+ }
+
+ if ( myselection != '' && myselection != null )
+ {
+ if ( myselection != mystored_selection )
+ {
+ document.getElementById('fastreply-pastesel').style.display = '';
+ mystored_selection = (myselection.toString() != '') ? myselection.toString() : null;
+ }
+ }
+ else
+ {
+ mystored_selection = null;
+ }
+}
+
+/*--------------------------------------------*/
+// Paste selection
+/*--------------------------------------------*/
+
+function pasteselection()
+{
+ if ( mystored_selection != '' && mystored_selection != null )
+ {
+ var fr = document.getElementById('fastreplyarea');
+ if (fr)
+ {
+ fr.value += '[quote]'+mystored_selection+'[/quote]\n';
+ fr.focus();
+ }
+ }
+
+ return false;
+}
+
+/*--------------------------------------------*/
+// Link to a post
+/*--------------------------------------------*/
+
+function link_to_post(pid)
+{
+ temp = prompt( ipb_lang_tt_prompt, ipb_var_base_url + "showtopic=" + ipb_input_t + "&view=findpost&p=" + pid );
+ return false;
+}
+
+/*--------------------------------------------*/
+// Delete post
+/*--------------------------------------------*/
+
+function delete_post(theURL)
+{
+ if (confirm( ipb_lang_js_del_1 ))
+ {
+ window.location.href=theURL;
+ }
+ else
+ {
+ alert ( ipb_lang_js_del_2 );
+ }
+}
+
+/*--------------------------------------------*/
+// Multi quote
+/*--------------------------------------------*/
+
+function multiquote_add(id)
+{
+ saved = new Array();
+ clean = new Array();
+ add = 1;
+
+ //-----------------------------------
+ // Get any saved info
+ //-----------------------------------
+
+ if ( tmp = my_getcookie('mqtids') )
+ {
+ saved = tmp.split(",");
+ }
+
+ //-----------------------------------
+ // Remove bit if exists
+ //-----------------------------------
+
+ for( i = 0 ; i < saved.length; i++ )
+ {
+ if ( saved[i] != "" )
+ {
+ if ( saved[i] == id )
+ {
+ add = 0;
+ }
+ else
+ {
+ clean[clean.length] = saved[i];
+ }
+ }
+ }
+
+ //-----------------------------------
+ // Add?
+ //-----------------------------------
+
+ if ( add )
+ {
+ clean[ clean.length ] = id;
+ eval("document.mad_"+id+".src=removequotebutton");
+ eval("document.mad_"+id+".title='-'");
+ }
+ else
+ {
+ eval(" document.mad_"+id+".src=addquotebutton");
+ eval("document.mad_"+id+".title='+'");
+ }
+
+ my_setcookie( 'mqtids', clean.join(','), 0 );
+
+ return false;
+}
+
+/*--------------------------------------------*/
+// Check delete
+/*--------------------------------------------*/
+
+function checkdelete()
+{
+ if ( ! document.modform.selectedpids.value )
+ {
+ return false;
+ }
+
+ isDelete = document.modform.tact.options[document.modform.tact.selectedIndex].value;
+
+ if (isDelete == 'delete')
+ {
+ formCheck = confirm( lang_suredelete );
+
+ if (formCheck == true)
+ {
+ return true;
+ }
+ else
+ {
+ return false;
+ }
+ }
+}
+
+/*--------------------------------------------*/
+// Toggle selection
+//*--------------------------------------------*/
+
+function topic_toggle_pid( pid )
+{
+ //-----------------------------------
+ // Got a number?
+ //-----------------------------------
+
+ if ( isNaN( pid ) )
+ {
+ return false;
+ }
+
+ saved = new Array();
+ clean = new Array();
+ add = 1;
+
+ //-----------------------------------
+ // Get form info
+ //-----------------------------------
+
+ tmp = document.modform.selectedpids.value;
+
+ saved = tmp.split(",");
+
+ //-----------------------------------
+ // Remove bit if exists
+ //-----------------------------------
+
+ for( i = 0 ; i < saved.length; i++ )
+ {
+ if ( saved[i] != "" )
+ {
+ if ( saved[i] == pid )
+ {
+ add = 0;
+ }
+ else
+ {
+ clean[clean.length] = saved[i];
+ }
+ }
+ }
+
+ //-----------------------------------
+ // Add?
+ //-----------------------------------
+
+ if ( add )
+ {
+ clean[ clean.length ] = pid;
+ eval("document.img"+pid+".src=selectedbutton");
+ }
+ else
+ {
+ eval(" document.img"+pid+".src=unselectedbutton");
+ }
+
+ newvalue = clean.join(',');
+
+ my_setcookie( 'modpids', newvalue, 0 );
+
+ document.modform.selectedpids.value = newvalue;
+
+ newcount = stacksize(clean);
+
+ document.modform.gobutton.value = lang_gobutton + ' (' + newcount + ')';
+
+ return false;
+};
+
+
+function topic_rate()
+{
+ /**
+ * Settings
+ */
+ this.settings = {
+ 'allow_rating' : 0,
+ 'default_rating' : 3,
+ 'img_star_on' : 'star_filled.gif',
+ 'img_star_selected' : 'star_selected.gif',
+ 'img_star_off' : 'star_empty.gif',
+ 'img_main_star_0' : 'rating_0.gif',
+ 'img_main_star_1' : 'rating_1.gif',
+ 'img_main_star_2' : 'rating_2.gif',
+ 'img_main_star_3' : 'rating_3.gif',
+ 'img_main_star_4' : 'rating_4.gif',
+ 'img_main_star_5' : 'rating_5.gif',
+ 'img_base_url' : '',
+ 'div_rating_wrapper' : 'topic-rating-wrapper',
+ 'text_rating_image' : 'topic-rating-img-',
+ 'topic-rating-img-main' : 'topic-rating-img-main',
+ 'topic-rating-my-rating' : 'topic-rating-my-rating',
+ 'topic-rating-hits' : 'topic-rating-hits'
+ };
+
+ this.languages = {
+ 'img_alt_rate' : '',
+ 'rate_me' : ''
+ };
+
+ /**
+ * INIT rating images
+ */
+ this.init_rating_images = function()
+ {
+ //-----------------------------------------
+ // INIT
+ //-----------------------------------------
+
+ var html = '';
+
+ //-----------------------------------------
+ // Can rate this member?
+ //-----------------------------------------
+
+ if ( ! this.settings[ 'allow_rating' ] )
+ {
+ return false;
+ }
+
+ //-----------------------------------------
+ // Still here? OK...
+ //-----------------------------------------
+
+ for( var i = 1 ; i <= 5 ; i++ )
+ {
+ var _onmouseover = '';
+ var _onmouseout = '';
+ var _onclick = '';
+ var _title = '';
+
+ _onmouseover = ' onmouseover="this.style.cursor=\'pointer\'; topic_rate.show_rating_images(' + i + ', 0)"';
+ _onmouseout = ' onmouseout="topic_rate.show_rating_images(-1, 1)"';
+ _onclick = ' onclick="topic_rate.send_rating(' + i + ')"';
+ _title = this.languages['img_alt_rate'];
+
+ html += " ";
+ }
+
+ document.getElementById( this.settings['div_rating_wrapper'] ).innerHTML = this.languages['rate_me'] + ' ' + html;
+
+ //-----------------------------------------
+ // Now set the image...
+ //-----------------------------------------
+
+ this.show_rating_images( this.settings['default_rating'], 1 );
+ };
+
+ /**
+ * Send rating..
+ */
+ this.send_rating = function( rating )
+ {
+ //-----------------------------------------
+ // INIT
+ //-----------------------------------------
+
+ rating = rating ? rating : 0;
+
+ //-----------------------------------------
+ // Got a rating?
+ //-----------------------------------------
+
+ if ( rating )
+ {
+ //----------------------------------
+ // INIT
+ //----------------------------------
+
+ var url = ipb_var_base_url+'act=xmlout&do=topic_rate&t='+ipb_input_t+'&rating='+rating;
+
+ /*--------------------------------------------*/
+ // Main function to do on request
+ // Must be defined first!!
+ /*--------------------------------------------*/
+
+ do_request_function = function()
+ {
+ //----------------------------------
+ // Ignore unless we're ready to go
+ //----------------------------------
+
+ if ( ! xmlobj.readystate_ready_and_ok() )
+ {
+ xmlobj.show_loading( '' );
+ return;
+ }
+
+ xmlobj.hide_loading();
+
+ //----------------------------------
+ // INIT
+ //----------------------------------
+
+ var html = xmlobj.xmlhandler.responseText;
+
+ if ( html == 'no_permission' )
+ {
+ alert( js_error_no_permission );
+ }
+ else if ( html != 'error' )
+ {
+ var _result = html.split(',');
+ var _new_value = _result[0];
+ var _new_hits = _result[1];
+ var _new_stars = _result[2];
+ var _type = _result[3];
+
+ //-----------------------------------------
+ // Now set the image...
+ //-----------------------------------------
+
+ topic_rate.settings['default_rating'] = parseInt( _new_stars );
+
+ topic_rate.show_rating_images( topic_rate.settings['default_rating'], 1 );
+
+ menu_action_close();
+
+ //-----------------------------------------
+ // Update counts
+ //-----------------------------------------
+
+ document.getElementById('topic-rating-hits').innerHTML = _new_hits;
+ document.getElementById('topic-rating-my-rating').innerHTML = rating;
+
+ show_inline_messages_instant( 'rating_updated' );
+ }
+ };
+
+ //----------------------------------
+ // LOAD XML
+ //----------------------------------
+
+ xmlobj = new ajax_request();
+ xmlobj.onreadystatechange( do_request_function );
+
+ xmlobj.process( url );
+
+ return false;
+ }
+ };
+
+ /**
+ * Show rating images..
+ */
+ this.show_rating_images = function( rating, restore_default )
+ {
+ //-----------------------------------------
+ // INIT
+ //-----------------------------------------
+
+ rating = restore_default ? this.settings['default_rating'] : parseInt( rating );
+ var star = restore_default ? this.settings['img_star_on'] : this.settings['img_star_selected'];
+
+ //-----------------------------------------
+ // Set to 0
+ //-----------------------------------------
+
+ for( var i = 1 ; i <= 5 ; i++ )
+ {
+ var _img = document.getElementById( this.settings['text_rating_image'] + i );
+ _img.src = this.settings['img_base_url'] + '/' + this.settings['img_star_off'];
+ }
+
+ //-----------------------------------------
+ // Show ones coloured...
+ //-----------------------------------------
+
+ for( var i = 1 ; i <= rating ; i++ )
+ {
+ var _img = document.getElementById( this.settings['text_rating_image'] + i );
+ _img.src = this.settings['img_base_url'] + '/' + star;
+ }
+
+ //-----------------------------------------
+ // Set main image
+ //-----------------------------------------
+
+ document.getElementById( this.settings['topic-rating-img-main'] ).src = this.settings['img_base_url'] + '/' + this.settings['img_main_star_' + rating ];
+ };
+
+};
\ No newline at end of file
diff --git a/Development/javascript_uncompressed/jscripts/ipb_usercp.js b/Development/javascript_uncompressed/jscripts/ipb_usercp.js
new file mode 100644
index 00000000..4bfcb849
--- /dev/null
+++ b/Development/javascript_uncompressed/jscripts/ipb_usercp.js
@@ -0,0 +1,238 @@
+//------------------------------------------
+// Invision Power Board v2.1
+// User CP JS File
+// (c) 2005 Invision Power Services, Inc.
+//
+// http://www.invisionboard.com
+//------------------------------------------
+
+var ucp_dname_name;
+var ucp_dname_pass;
+var ucp_dname_name_img;
+var ucp_dname_pass_img;
+var ucp_dname_form;
+var ucp_dname_warn;
+var ucp_dname_warn_content;
+var dname_max_length = 26;
+
+var ucp_dname_ok_to_go = 0;
+var ucp_dname_illegal_chars = new Array( '[', ']', '|', ',', ';', '$' );
+var ucp_dname_illegal_regex = '';
+
+for ( var i in ucp_dname_illegal_chars )
+{
+ ucp_dname_illegal_regex += '\\' + ucp_dname_illegal_chars[i];
+}
+
+var error_found = '';
+
+RegExp.escape = function(text)
+{
+ if (!arguments.callee.sRE)
+ {
+ var specials = [ '/', '.', '*', '+', '?', '|', '(', ')', '[', ']', '{', '}', '\\', '$' ];
+
+ arguments.callee.sRE = new RegExp( '(\\' + specials.join('|\\') + ')', 'g' );
+ }
+
+ return text.replace(arguments.callee.sRE, '\\$1');
+};
+
+/*-------------------------------------------------------------------------*/
+// INIT Display name change stuff
+/*-------------------------------------------------------------------------*/
+
+function ucp_dname_init( name, pass, form, wbox )
+{
+ ucp_dname_name = document.getElementById( name );
+ ucp_dname_pass = document.getElementById( pass );
+ ucp_dname_form = document.getElementById( form );
+ ucp_dname_warn = document.getElementById( wbox );
+
+ ucp_dname_warn_content = document.getElementById( wbox+'-content' );
+ ucp_dname_name_img = document.getElementById( name+'-img' );
+ ucp_dname_pass_img = document.getElementById( pass+'-img' );
+
+ ucp_dname_name.onblur = ucp_dname_check;
+ ucp_dname_form.onsubmit = ucp_dname_form_check;
+
+ if ( ucp_dname_warn_content.innerHTML )
+ {
+ ucp_dname_warn.style.display = 'block';
+ }
+}
+
+/*-------------------------------------------------------------------------*/
+// EVENT: Check display name
+/*-------------------------------------------------------------------------*/
+
+function ucp_dname_check( event )
+{
+ //----------------------------------
+ // INIT
+ //----------------------------------
+
+ //----------------------------------
+ // Make sure we have sommat
+ //----------------------------------
+
+ if ( ! ucp_dname_name.value || ucp_dname_name.value.length < 3 || ucp_dname_name.value.length > dname_max_length )
+ {
+ error_found += dname_error_no_name + " ";
+ }
+
+ //----------------------------------
+ // Check for illegal chars
+ //----------------------------------
+
+ if ( ucp_dname_name.value.match( new RegExp( "[" + ucp_dname_illegal_regex + "]" ) ) )
+ {
+ error_found += dname_error_chars + " ";
+ }
+
+ if ( allowed_chars != "" )
+ {
+ var test_regex = new RegExp();
+
+ test_regex.compile( "^[" + RegExp.escape(allowed_chars) + "]+$" );
+
+ if ( !test_regex.test( ucp_dname_name.value ) )
+ {
+ error_found += allowed_error + " ";
+ }
+ }
+
+ //----------------------------------
+ // Ajax: check for existing member name
+ //----------------------------------
+
+ if ( use_enhanced_js && ucp_dname_name.value )
+ {
+ var url = ipb_var_base_url+'act=xmlout&do=check-display-name&name='+escape( ucp_dname_name.value );
+
+ /*--------------------------------------------*/
+ // Main function to do on request
+ // Must be defined first!!
+ /*--------------------------------------------*/
+
+ do_request_function = function()
+ {
+ //----------------------------------
+ // Ignore unless we're ready to go
+ //----------------------------------
+
+ if ( ! xmlobj.readystate_ready_and_ok() )
+ {
+ // Could do a little loading graphic here?
+ return;
+ }
+
+ //----------------------------------
+ // INIT
+ //----------------------------------
+
+ var html = xmlobj.xmlhandler.responseText;
+
+ if ( html == 'found' )
+ {
+ error_found += dname_error_taken + " ";
+ }
+
+ //----------------------------------
+ // Show errors
+ //----------------------------------
+
+ if ( error_found )
+ {
+ ucp_dname_name.className = input_red;
+ ucp_dname_name_img.src = ipb_var_image_url + '/' + img_cross;
+ ucp_dname_warn_content.innerHTML = error_found;
+ ucp_dname_warn.style.display = 'block';
+ }
+ else
+ {
+ ucp_dname_name.className = input_green;
+ ucp_dname_name_img.src = ipb_var_image_url + '/' + img_tick;
+ ucp_dname_warn.style.display = 'none';
+ ucp_dname_warn_content.innerHTML = '';
+ }
+
+ error_found = '';
+ };
+
+ //----------------------------------
+ // LOAD XML
+ //----------------------------------
+
+ xmlobj = new ajax_request();
+ xmlobj.onreadystatechange( do_request_function );
+ xmlobj.process( url );
+ }
+ else
+ {
+ //----------------------------------
+ // Show errors
+ //----------------------------------
+
+ if ( error_found )
+ {
+ ucp_dname_name.className = input_red;
+ ucp_dname_name_img.src = ipb_var_image_url + '/' + img_cross;
+ ucp_dname_warn_content.innerHTML = error_found;
+ ucp_dname_warn.style.display = 'block';
+ }
+ else
+ {
+ ucp_dname_name.className = input_green;
+ ucp_dname_name_img.src = ipb_var_image_url + '/' + img_tick;
+ ucp_dname_warn.style.display = 'none';
+ ucp_dname_warn_content.innerHTML = '';
+ }
+
+ error_found = '';
+ }
+}
+
+/*-------------------------------------------------------------------------*/
+// EVENT: Check display name
+/*-------------------------------------------------------------------------*/
+
+function ucp_dname_form_check( event )
+{
+ //----------------------------------
+ // DO pass fields
+ //----------------------------------
+
+ if ( ! ucp_dname_pass.value )
+ {
+ error_found += dname_error_no_pass + " ";
+ }
+
+ //----------------------------------
+ // Check name
+ //----------------------------------
+
+ ucp_dname_check( event );
+
+ if ( error_found )
+ {
+ ucp_dname_ok_to_go = 0;
+ }
+ else
+ {
+ ucp_dname_ok_to_go = 1;
+ }
+
+ //----------------------------------
+ // Return
+ //----------------------------------
+
+ if ( ucp_dname_ok_to_go )
+ {
+ return true;
+ }
+ else
+ {
+ return false;
+ }
+}
\ No newline at end of file
diff --git a/Development/javascript_uncompressed/jscripts/ipb_xhr_findnames.js b/Development/javascript_uncompressed/jscripts/ipb_xhr_findnames.js
new file mode 100644
index 00000000..de4987a2
--- /dev/null
+++ b/Development/javascript_uncompressed/jscripts/ipb_xhr_findnames.js
@@ -0,0 +1,720 @@
+//------------------------------------------------------------------------------
+// IPS XML HTTP REQUEST:: GET NEW POSTS
+//------------------------------------------------------------------------------
+// Supports Safari, Mozilla 1.3+ (Firefox, etc) and IE 5.5+
+// (c) 2005 Invision Power Services, Inc.
+// http://www.invisionpower.com
+//------------------------------------------------------------------------------
+
+/*--------------------------------------------*/
+// INIT VARS
+/*--------------------------------------------*/
+
+var mem_div = 'ipb-get-members';
+var divobj;
+var iframeobj;
+var formobj;
+var xmlobj;
+var _result_cache = new Array();
+var _div_rows = 0;
+var _cur_updown_pressed = 0;
+var _last_key_code = 0;
+var _event_key_code = 0;
+var _cur_input_val = '';
+var _old_input_val = '';
+var _hiliteindex = -1;
+var _hilite_sug_div;
+var _complete_div_list;
+var delay_action = false;
+var _allow_update = true;
+var _form_onsubmit_saved;
+var _urllookup;
+var _timemout_main = 0;
+var _timeout_blur = 0;
+var _in_focus = 0;
+
+/*--------------------------------------------*/
+// SHOW POSSIBLE MEMBER NAME MATCHES
+/*--------------------------------------------*/
+
+main_loop = function()
+{
+ if ( ( _old_input_val != _cur_input_val ) && ( _cur_input_val.length >= 3 ) && ( _in_focus == 1 ) )
+ {
+ if ( ! delay_action && _allow_update )
+ {
+ //----------------------------------
+ // Try cache
+ //----------------------------------
+
+ var cached = _result_cache[ _cur_input_val ];
+
+ if ( cached )
+ {
+ returnSearch( _cur_input_val, cached[0], cached[1] );
+ }
+ else
+ {
+ /*--------------------------------------------*/
+ // Main function to do on request
+ // Must be defined first!!
+ /*--------------------------------------------*/
+
+ do_request_function = function()
+ {
+ //----------------------------------
+ // Ignore unless we're ready to go
+ //----------------------------------
+
+ if ( ! xmlobj.readystate_ready_and_ok() )
+ {
+ // Could do a little loading graphic here?
+ return;
+ }
+
+ //----------------------------------
+ // INIT
+ //----------------------------------
+
+ var returned = xmlobj.xmlhandler.responseText;
+
+ //----------------------------------
+ // Did we get something?
+ //----------------------------------
+
+ if ( returned.charAt(0) == '<' )
+ {
+ return false;
+ }
+ else
+ {
+ eval( returned );
+ }
+ };
+
+ xmlobj = new ajax_request();
+ xmlobj.onreadystatechange( do_request_function );
+
+ xmlobj.process( ipb_var_base_url + '&act=xmlout&do='+_urllookup+'&name='+escape(inobj.value) );
+
+ inobj.focus();
+ }
+ }
+
+ delay_action = false;
+ }
+
+ _old_input_val = _cur_input_val;
+
+ _timemout_main = setTimeout( 'main_loop()', 10 );
+
+ return false;
+};
+
+/*--------------------------------------------*/
+// Initalize...
+/*--------------------------------------------*/
+
+function init_js( formobjname, fieldobjname, urllookup )
+{
+ //----------------------------------
+ // Set up
+ //----------------------------------
+
+ if ( ! urllookup )
+ {
+ _urllookup = 'get-member-names';
+ }
+ else
+ {
+ _urllookup = urllookup;
+ }
+
+ formobj = document.getElementById( formobjname );
+ inobj = document.getElementById( fieldobjname );
+ divobj = document.getElementById( mem_div );
+
+ inobj.setAttribute( "autocomplete", "off" );
+ inobj.onfocus = function () { _in_focus = 1; };
+ inobj.onblur = onblurhandler;
+ inobj.onsubmit = submit_handler;
+
+ //----------------------------------
+ // Already got a submit handler?
+ //----------------------------------
+
+ if ( formobj.onsubmit )
+ {
+ _form_onsubmit_saved = formobj.onsubmit;
+ }
+
+ formobj.onsubmit = submit_handler;
+
+ if ( inobj.createTextRange )
+ {
+ inobj.onkeyup = new Function( "return onkeyuphandler(event);" );
+ }
+ else
+ {
+ inobj.onkeyup = onkeyuphandler;
+ }
+
+ cache_name_results("",new Array(),new Array());
+
+ _cur_input_val = inobj.value;
+
+ document.onkeydown = keydownhandler;
+
+ set_up_key_down();
+}
+
+/*--------------------------------------------*/
+// Set up key down
+/*--------------------------------------------*/
+
+function set_up_key_down()
+{
+ if ( document.createEventObject )
+ {
+ var y = document.createEventObject();
+ y.ctrlKey = true;
+ y.keyCode = 70;
+ document.fireEvent( "onkeydown", y )
+ }
+}
+
+/*--------------------------------------------*/
+// Key down handler
+/*--------------------------------------------*/
+
+function keydownhandler( event )
+{
+ if( ! event && window.event )
+ {
+ event = window.event;
+ }
+ if ( event )
+ {
+ _last_key_code = event.keyCode;
+ }
+}
+
+/*--------------------------------------------*/
+// On blur handler
+/*--------------------------------------------*/
+
+function onblurhandler( event )
+{
+ if ( ! event && window.event )
+ {
+ event = window.event;
+ }
+
+ if ( ! _cur_updown_pressed )
+ {
+ _in_focus = 0;
+
+ my_xr_hide_div( divobj );
+ _hiliteindex = -1;
+
+ // Tab?
+
+ if ( _last_key_code == 9 )
+ {
+ _last_key_code = -1;
+ }
+ }
+
+ _cur_updown_pressed = false;
+}
+
+/*--------------------------------------------*/
+// On key up handler
+/*--------------------------------------------*/
+
+function key_handler_function()
+{
+ //----------------------------------
+ // trap up/down cursor
+ //----------------------------------
+
+ if ( _event_key_code == 40 || _event_key_code == 38 )
+ {
+ _allow_update = false;
+ blur_then_focus();
+ }
+ else
+ {
+ _cur_updown_pressed = false;
+ _allow_update = true;
+ }
+
+ _cur_input_val = inobj.value;
+
+ handle_cursor_press( _event_key_code );
+}
+
+/*--------------------------------------------*/
+// Handle cursor press
+/*--------------------------------------------*/
+
+function handle_cursor_press( eventcode )
+{
+ if ( eventcode == 40 )
+ {
+ hilite_new_value( _hiliteindex + 1 );
+ }
+ else if ( eventcode == 38 )
+ {
+ hilite_new_value( _hiliteindex - 1 );
+ }
+ else if ( eventcode == 13 || eventcode == 3 )
+ {
+ //----------------------------------
+ // Are we looking through the divs?
+ //----------------------------------
+
+ if ( _hiliteindex != -1 )
+ {
+ my_xr_hide_div( divobj );
+ _hiliteindex = -1;
+ }
+
+ return false;
+ }
+
+ return true;
+}
+
+/*--------------------------------------------*/
+// Highlight new value (cursor keys pressed)
+/*--------------------------------------------*/
+
+function hilite_new_value( index )
+{
+ if ( _div_rows <= 0 )
+ {
+ return;
+ }
+
+ my_show_div( divobj );
+
+ if ( index > _div_rows )
+ {
+ index = _div_rows - 1;
+ }
+
+ if ( _hiliteindex != -1 && index != _hiliteindex )
+ {
+ set_style_for_element( _hilite_sug_div, 'wrapdiv' );
+ }
+
+ if ( index < 0 )
+ {
+ _hiliteindex = -1;
+ inobj.focus();
+ return;
+ }
+
+ _hiliteindex = index;
+ _hilite_sug_div = divobj.getElementsByTagName('DIV').item( index );
+
+ set_style_for_element( _hilite_sug_div, 'spanhilite' );
+
+ newval = find_span_value_for_class( _hilite_sug_div, 'namespan' );
+
+ if ( newval && typeof(newval) != 'undefined' )
+ {
+ inobj.value = find_span_value_for_class( _hilite_sug_div, 'namespan' );
+ }
+}
+
+/*--------------------------------------------*/
+// Blur then focus
+/*--------------------------------------------*/
+
+function blur_then_focus()
+{
+ _cur_updown_pressed = true;
+
+ inobj.blur();
+
+ _timemout_blur = setTimeout( "set_input_field_focus();", 10 );
+ return;
+}
+
+/*--------------------------------------------*/
+// Set input field focus
+/*--------------------------------------------*/
+
+function set_input_field_focus()
+{
+ inobj.focus();
+}
+
+/*--------------------------------------------*/
+// Styles element
+/*--------------------------------------------*/
+
+function set_style_for_element( c, name )
+{
+ try
+ {
+ if ( ! c )
+ {
+ return;
+ }
+ }
+ catch(e)
+ {
+ return;
+ }
+
+ c.className = name;
+
+ switch( name )
+ {
+ case 'wrapdiv':
+ c.style.backgroundColor = "white";
+ c.style.color = "black";
+
+ if ( c.displaySpan )
+ {
+ c.displaySpan.style.color = "green";
+ }
+
+ break;
+ case 'wrapspan':
+ c.style.display = "block";
+ c.style.paddingLeft = "3";
+ c.style.paddingRight = "3";
+ c.style.height = "16px";
+ c.style.overflow = "hidden";
+ break;
+ case 'namespan':
+ c.style.cssFloat = "left";
+ c.style.width = '100%';
+ break;
+ case 'idspan':
+ c.style.cssFloat = "right";
+ c.style.display = 'none';
+ break;
+ case 'spanhilite':
+ c.style.backgroundColor = "#3366cc";
+ c.style.color = "white";
+
+ if ( c.displaySpan )
+ {
+ c.displaySpan.style.color = "white";
+ }
+
+ break;
+ }
+}
+
+/*--------------------------------------------*/
+// Get value of named span
+/*--------------------------------------------*/
+
+function find_span_value_for_class( i, dc )
+{
+ try
+ {
+ if ( ! i )
+ {
+ return;
+ }
+ }
+ catch(e)
+ {
+ return;
+ }
+
+ var ga = i.getElementsByTagName('span');
+
+ if ( ga )
+ {
+ for( var f=0; f < ga.length; ++f )
+ {
+ if ( ga[f].className == dc )
+ {
+ var value = ga[f].innerHTML;
+
+ if ( value == " " )
+ {
+ return "";
+ }
+ else
+ {
+ return value;
+ }
+ }
+ }
+ }
+ else
+ {
+ return "";
+ }
+}
+
+
+/*--------------------------------------------*/
+// Displays the actual list
+/*--------------------------------------------*/
+
+function display_suggested_list( na, ia )
+{
+ //----------------------------------
+ // Clear div
+ //----------------------------------
+
+ while( divobj.childNodes.length > 0 )
+ {
+ divobj.removeChild( divobj.childNodes[0] );
+ }
+
+ //----------------------------------
+ // Write Div
+ //----------------------------------
+
+ _div_rows = 0;
+
+ for( var f = 0 ; f < na.length; ++f )
+ {
+ _div_rows++;
+ var od = document.createElement("DIV");
+ set_style_for_element( od, 'wrapdiv' );
+ od.onmousedown = sb_mdown;
+ od.onmouseover = sb_mover;
+ od.onmouseout = sb_mout;
+
+ var span_wrap = document.createElement("SPAN");
+ set_style_for_element( span_wrap, 'wrapspan' );
+
+ var span_name = document.createElement("SPAN");
+ span_name.innerHTML = na[f];
+
+ var span_id = document.createElement("SPAN");
+
+ set_style_for_element( span_name, 'namespan' );
+ set_style_for_element( span_id, 'idspan' );
+
+ od.displaySpan = span_id;
+
+ span_id.innerHTML = ia[f];
+
+ span_wrap.appendChild( span_name );
+ span_wrap.appendChild( span_id );
+ od.appendChild( span_wrap );
+ divobj.appendChild( od );
+ }
+
+ //----------------------------------
+ // Calc pos.
+ //----------------------------------
+
+ var mid = inobj;
+ var left_px = _get_obj_leftpos(mid);
+ var top_px = _get_obj_toppos(mid) + mid.offsetHeight;
+ var width = parseInt( divobj.style.width );
+ var height = parseInt( divobj.style.height );
+
+ //----------------------------------
+ // Show menu DIV
+ //----------------------------------
+
+ divobj.style.position = "absolute";
+
+ //----------------------------------
+ // Try and keep it on screen
+ //----------------------------------
+
+ if ( (left_px + width) >= document.body.clientWidth )
+ {
+ left_px = left_px + mid.offsetWidth - width;
+ }
+
+ //----------------------------------
+ // Try and keep it on screen
+ //----------------------------------
+
+ if ( (top_px + height) >= document.body.clientHeight )
+ {
+ top_px = top_px - height;
+ }
+
+ //----------------------------------
+ // Finalize menu position
+ //----------------------------------
+
+ divobj.style.left = left_px + "px";
+ divobj.style.top = top_px + "px";
+ divobj.style.display = "block";
+
+ _hiliteindex= -1;
+
+ //----------------------------------
+ // Workaround for IE bug which shows
+ // select boxes and other windows GUI
+ // over divs. SHOW IFRAME
+ //----------------------------------
+
+ if ( is_ie )
+ {
+ try
+ {
+ if ( ! document.getElementById( 'if_xhr_' + mem_div ) )
+ {
+ iframeobj = document.createElement('iframe');
+
+ iframeobj.src = 'javascript:;';
+ iframeobj.id = 'if_xhr_' + mem_div;
+
+ document.getElementsByTagName('body')[0].appendChild( iframeobj );
+ }
+ else
+ {
+ iframeobj = document.getElementById( 'if_xhr_' + mem_div );
+ }
+
+ iframeobj.scrolling = 'no';
+ iframeobj.frameborder = 'no';
+ iframeobj.className = 'iframeshim';
+ iframeobj.style.position = 'absolute';
+
+ iframeobj.style.width = parseInt(divobj.offsetWidth) + 'px';
+ iframeobj.style.height = parseInt(divobj.offsetHeight) + 'px';
+ iframeobj.style.top = divobj.style.top;
+ iframeobj.style.left = divobj.style.left;
+ iframeobj.style.zIndex = divobj.style.zIndex - 1;
+ iframeobj.style.display = "block";
+
+ }
+ catch(error)
+ {
+ //alert(error); // Oh dear, someones stolen the iframe
+ }
+ }
+}
+
+/*--------------------------------------------*/
+// Caches the results
+/*--------------------------------------------*/
+
+function cache_name_results( mstring, na, ia )
+{
+ _result_cache[mstring] = new Array( na, ia );
+}
+
+/*--------------------------------------------*/
+// This is the function the response XML text gives
+/*--------------------------------------------*/
+
+returnSearch = function( mstring, namearray, idarray )
+{
+ //----------------------------------
+ // Cache..
+ //----------------------------------
+
+ cache_name_results( mstring, namearray, idarray );
+
+ if ( _in_focus != 1 )
+ {
+ return false;
+ }
+
+ //----------------------------------
+ // Display
+ //----------------------------------
+
+ display_suggested_list( namearray, idarray );
+
+ //----------------------------------
+ // Resize or hide?
+ //----------------------------------
+
+ if ( _div_rows > 0 )
+ {
+ divobj.style.height = 16 * _div_rows + 4;
+ }
+ else
+ {
+ my_xr_hide_div( divobj );
+ _hiliteindex = -1;
+ }
+};
+
+/*--------------------------------------------*/
+// Submit handler
+/*--------------------------------------------*/
+
+submit_handler = function ( event )
+{
+ delay_action = true;
+ var retval = true;
+
+ if ( _hiliteindex != -1 )
+ {
+ return false;
+ }
+ else
+ {
+ if ( _form_onsubmit_saved )
+ {
+ eval( 'tmpsubmit = ' + _form_onsubmit_saved );
+ retval = tmpsubmit();
+ }
+
+ return retval;
+ }
+};
+
+/*--------------------------------------------*/
+// On key up handler
+/*--------------------------------------------*/
+
+onkeyuphandler = function( event )
+{
+ _event_key_code = event.keyCode;
+ key_handler_function();
+};
+
+/*--------------------------------------------*/
+// Div mouse events
+/*--------------------------------------------*/
+
+sb_mdown = function()
+{
+ delay_action = true;
+ inobj.value = find_span_value_for_class( this, 'namespan' );
+};
+
+sb_mover = function()
+{
+ set_style_for_element( this, 'spanhilite' );
+};
+
+sb_mout = function()
+{
+ set_style_for_element( this, 'wrapdiv' );
+};
+
+function my_xr_hide_div ( dobj )
+{
+ dobj.style.display = "none";
+
+ if ( is_ie )
+ {
+ try
+ {
+ document.getElementById( 'if_xhr_' + mem_div ).style.display = "none";
+ }
+ catch(e)
+ {
+ //alert(e);// Oh dear, someones stolen the iframe
+ }
+ }
+}
+
+
+
diff --git a/Development/javascript_uncompressed/jscripts/ips_attach.js b/Development/javascript_uncompressed/jscripts/ips_attach.js
new file mode 100644
index 00000000..e5a166e3
--- /dev/null
+++ b/Development/javascript_uncompressed/jscripts/ips_attach.js
@@ -0,0 +1,666 @@
+//------------------------------------------------------------------------------
+// IPS JS: Attach Functions
+// (c) 2005 Invision Power Services, Inc.
+// http://www.invisionpower.com
+// Matt Mecham (16/12/05)
+//------------------------------------------------------------------------------
+
+var ipsattach = new ips_attach();
+
+function ips_attach()
+{
+ /**
+ * iFrame id
+ */
+ this.iframe_id = 'ips--iframe-obj-attach';
+ /**
+ * iFrame Object
+ */
+ this.iframe_obj = null;
+ /**
+ * Init URL
+ * URL to load to display current attachments, etc
+ */
+ this.iframe_init_url = '';
+ /**
+ * URL for removing attachment
+ */
+ this.iframe_remove_url = '';
+ /**
+ * The name of the DIV that this iframe is attached to
+ */
+ this.iframe_add_to_div = 'ips-attach-div-iframe';
+ this.iframe_add_to_div_obj = null;
+ /**
+ * The name of the DIV that this iframe is attached to
+ */
+ this.iframe_parent_div = 'ips-attach-div-parent';
+ this.iframe_parent_div_obj = null;
+ /**
+ * The name of the DIV that the status bar is in
+ */
+ this.status_div = 'ips-attach-div-status';
+ this.status_div_obj = null;
+ /**
+ * The name of the DIV that the dropdown menu text is in
+ */
+ this.dropdown_text = 'ips-attach-menu-text';
+ this.dropdown_text_obj = null;
+ /**
+ * Default iframe height
+ */
+ this.iframe_height = 300;
+ /**
+ * css class names
+ */
+ this.iframe_classname = 'attach-iframe';
+ /**
+ * Message cover
+ */
+ this.message_div_id = 'ips-attach-message';
+ this.message_div_obj = null;
+ this.message_span_id = 'ips-attach-message-span';
+ this.message_span_obj = null;
+ /**
+ * Default Status message
+ */
+ this.status_msg = '';
+ this.status_is_error = '';
+ /**
+ * Current items array
+ */
+ this.current_items = new Array();
+ /**
+ * Current items' menu
+ */
+ this.current_item_menu = 'ips-attach-menu';
+ this.current_item_menu_obj = null;
+ /**
+ * Images URL
+ */
+ this.images_url = null;
+ /**
+ * Language array
+ */
+ this.lang = new Array();
+ /**
+ * CSS classes
+ */
+ this.css_menu_row = 'attach-menu-row';
+ this.css_menu_row_over = 'attach-menu-row-over';
+ /**
+ * Show attachments menu
+ */
+ this.show_attach_menu = 1;
+ /**
+ * Onload command
+ */
+ this.onload_function = '';
+
+ /**
+ * Has an upload...
+ */
+ this.has_upload_pending = 0;
+
+ /**
+ * INIT
+ */
+ this.init = function()
+ {
+ //-----------------------------------------
+ // INIT objects
+ //-----------------------------------------
+
+ this.iframe_add_to_div_obj = document.getElementById( this.iframe_add_to_div );
+ this.iframe_parent_div_obj = document.getElementById( this.iframe_parent_div );
+ this.message_div_obj = document.getElementById( this.message_div_id );
+ this.message_span_obj = document.getElementById( this.message_span_id );
+ this.status_div_obj = document.getElementById( this.status_div );
+ this.dropdown_text_obj = document.getElementById( this.dropdown_text );
+
+ //-----------------------------------------
+ // INIT Current button
+ //-----------------------------------------
+
+ if ( this.show_attach_menu )
+ {
+ // INIT div
+ this.current_item_menu_obj = document.getElementById( this.current_item_menu );
+
+ ipsmenu.register( this.current_item_menu );
+
+ this.current_item_menu_obj._onclick = this.current_item_menu_obj.onclick;
+ this.current_item_menu_obj.onmouseover = this.current_item_menu_obj.onmouseout = this.current_item_menu_obj.onclick = this.current_menu_mouseover;
+
+ ipsmenu.menu_registered[ this.current_item_menu ]._open = ipsmenu.menu_registered[ this.current_item_menu ].open;
+ ipsmenu.menu_registered[ this.current_item_menu ].open = this.current_menu_button_show;
+ }
+ };
+
+ /**
+ * Dynamically builds the HTML for the IPS Menu system
+ *
+ * @var object Javascript object clicked
+ */
+ this.init_current_menu = function( obj )
+ {
+ //-----------------------------------------
+ // Old menu?
+ //-----------------------------------------
+
+ var menu = '';
+
+ try
+ {
+ menu = document.getElementById( ipsattach.current_item_menu + '_menu' );
+ menu.innerHTML = '';
+ }
+ catch(error)
+ {
+ menu = document.createElement('div');
+ }
+
+ //-----------------------------------------
+ // Create menu wrapper
+ //-----------------------------------------
+
+ var _items = 0;
+
+ menu.id = ipsattach.current_item_menu + '_menu';
+ menu.className = 'attach-popupmenu';
+ menu.style.display = 'none';
+ menu.style.cursor = 'default';
+ menu.style.padding = '3px';
+ menu.style.width = 'auto';
+ menu.style.overflow = 'auto';
+
+ //-----------------------------------------
+ // What are we doing?
+ //-----------------------------------------
+
+ for( var i in ipsattach.current_items )
+ {
+ var option = document.createElement('div');
+ option.innerHTML = ipsattach.current_items[i];
+ option.style.width = ipsattach.current_item_menu_obj.style.width;
+ option.className = 'attach-menu-row';
+ option.onmouseover = option.onmouseout = ipsattach.menu_onmouse_event;
+ menu.appendChild(option);
+
+ _items++;
+ }
+
+ if ( ! _items )
+ {
+ var option = document.createElement('div');
+ option.innerHTML = ipsattach.lang['no_items'];
+ option.style.width = ipsattach.current_item_menu_obj.style.width;
+ option.className = 'attach-menu-row';
+ option.onmouseover = option.onmouseout = ipsattach.menu_onmouse_event;
+ menu.appendChild(option);
+ }
+
+ // Set status counter correct
+ ipsattach.set_attach_count_status( _items );
+
+ ipsattach.iframe_parent_div_obj.appendChild(menu);
+
+ ipsclass.set_unselectable( menu );
+ };
+
+ /**
+ * Recounts number of current attachments and sets counter
+ *
+ * @param integer Cached count
+ */
+ this.set_attach_count_status = function( _items )
+ {
+ if ( ! ipsattach.show_attach_menu )
+ {
+ return;
+ }
+
+ if ( typeof( _items ) == 'undefined' )
+ {
+ _items = 0;
+
+ for( var i in ipsattach.current_items )
+ {
+ _items++;
+ }
+ }
+
+ try
+ {
+ ipsattach.dropdown_text_obj.innerHTML = " (" + _items + ")";
+ }
+ catch(error)
+ {
+ }
+ };
+
+ /**
+ * Add item into current_attachments menu
+ */
+ this.add_current_item = function( attach_id, attach_name, attach_size, attach_image )
+ {
+ //-----------------------------------------
+ // Fix up attach_name
+ //-----------------------------------------
+
+ if ( attach_name.length > 22 )
+ {
+ var _ext = attach_name.replace( /^.*\.(\S+?)$/ , "$1" );
+ var _main = attach_name.replace( /^(.*)\.\S+?$/ , "$1" );
+ var _a = _main.substr( 0, 8 );
+ var _b = _main.substr( _main.length - 8 , _main.length );
+
+ attach_name = _a + '...' + _b + '.' + _ext;
+ }
+
+ var html = '';
+
+ html += ' ';
+ html += ' ';
+
+ html += ' ';
+ html += '' + attach_name + ' ';
+ html += ' ('+attach_size+') ';
+
+ this.current_items[ this.current_items.length ] = html;
+ };
+
+ /**
+ * Adds the IPD attach tag into the current editor
+ *
+ * @param integer Attachment ID
+ * @param string Attachment name
+ */
+ this.add_attachment_into_editor = function( id, name )
+ {
+ // Form tag
+ var tag = "[attachment=" + id + ":" + name + "]";
+
+ // Add
+ ipsclass.add_editor_contents( tag );
+ };
+
+ /**
+ * Removes an attachment
+ *
+ * @param integer Attachment ID
+ */
+ this.remove_attachment = function( id )
+ {
+ menu_action_close();
+
+ if ( confirm( ipsattach.lang['remove_warn'] + ' ['+ id + ']' ) )
+ {
+ ipsattach.iframe_obj.src = ipsattach.iframe_remove_url + "&attach_id=" + id;
+
+ ipsattach.iframe_on_un_load( 'attach_removal' );
+ }
+ };
+
+ /**
+ * Show upload field and attachments
+ * Draws the iFrame and sets the source
+ */
+ this.show_attach_box = function()
+ {
+ //-----------------------------------------
+ // INIT
+ //-----------------------------------------
+
+ var iheight = parseInt( this.iframe_add_to_div_obj.style.height );
+ var iwidth = this.iframe_add_to_div_obj.style.width;
+
+ //-----------------------------------------
+ // Generate iFrame box
+ //-----------------------------------------
+
+ if ( ! this.iframe_obj )
+ {
+ this.iframe_obj = document.createElement( 'IFRAME' );
+
+ this.iframe_obj.src = this.iframe_init_url;
+ this.iframe_obj.id = this.iframe_id;
+ this.iframe_obj.name = this.iframe_id;
+ this.iframe_obj.scrolling = 'no';
+ this.iframe_obj.frameBorder = 'no';
+ this.iframe_obj.border = '0';
+ this.iframe_obj.className = this.iframe_classname;
+ this.iframe_obj.style.width = iwidth ? iwidth : '100%';
+ this.iframe_obj.style.height = iheight ? iheight - 5 + 'px' : this.iframe_height + 'px';
+ this.iframe_obj.style.overflow = 'hidden';
+ this.iframe_obj.style.display = '';
+
+ // Add environmentals..
+ this.iframe_obj.msg_open = 1;
+ this.iframe_obj.iframe_loaded = 0;
+ this.iframe_obj.iframe_init = 0;
+
+ // Attach iFrame inside our DIV
+ this.iframe_add_to_div_obj.appendChild( this.iframe_obj );
+
+ // Add handler
+ if ( is_ie )
+ {
+ this.iframe_obj.style.backgroundColor = 'transparent';
+ this.iframe_obj.allowTransparency = true;
+ this.iframe_obj.onreadystatechange = this.iframe_on_load_ie;
+ }
+ else
+ {
+ this.iframe_obj.onload = this.iframe_onload;
+ }
+
+ //-----------------------------------------
+ // Safari bug: Onload events don't fire
+ // when the parent DIV is hidden.
+ //-----------------------------------------
+
+ if ( is_safari )
+ {
+ this.iframe_parent_div_obj.style.display = '';
+ }
+ else
+ {
+ this.iframe_parent_div_obj.style.display = 'none';
+ }
+ }
+
+ //-----------------------------------------
+ // INIT cover div
+ //-----------------------------------------
+
+ if ( typeof this.message_div_obj != 'undefined' )
+ {
+ this.message_div_obj.style.width = typeof this.iframe_parent_div_obj.style.width != 'undefined' ? this.iframe_parent_div_obj.style.width : '100%';
+ this.message_div_obj.style.height = this.iframe_parent_div_obj.offsetHeight ? this.iframe_parent_div_obj.offsetHeight : '120px';
+ this.message_div_obj.style.position = 'relative';
+ this.message_div_obj.style.display = 'none';
+ }
+
+ //-----------------------------------------
+ // Show cover div during INIT
+ //-----------------------------------------
+
+ this.show_message( this.lang['init_progress'] );
+ };
+
+ /**
+ * Draws status bar
+ * Using "ipsattach" as is called in an event function
+ */
+ this.init_status_bar = function()
+ {
+ //-----------------------------------------
+ // INIT
+ //-----------------------------------------
+
+ var _html = '';
+
+ if ( typeof ipsattach.status_div_obj != 'undefined' )
+ {
+ try
+ {
+ ipsattach.status_msg = ipsattach.lang[ ipsattach.status_msg ];
+ }
+ catch(error) { }
+
+ if ( ipsattach.status_msg )
+ {
+ if ( ipsattach.status_is_error )
+ {
+ _html += " " + ipsattach.status_msg;
+ }
+ else
+ {
+ _html += " " + ipsattach.status_msg;
+ }
+ }
+
+ ipsattach.status_div_obj.innerHTML = _html;
+ }
+
+ //-----------------------------------------
+ // Reset pending...
+ //-----------------------------------------
+
+ ipsattach.has_upload_pending = 0;
+ };
+
+ /**
+ * Manually show the iframe message
+ */
+ this.iframe_on_un_load = function( msg )
+ {
+ //-----------------------------------------
+ // Message...
+ //-----------------------------------------
+
+ msg = typeof(msg) != 'undefined' ? ipsattach.lang[ msg ] : ipsattach.lang['uploading_file'];
+
+ //-----------------------------------------
+ // Show...
+ //-----------------------------------------
+
+ if ( this.iframe_obj.iframe_loaded )
+ {
+ this.iframe_obj.iframe_loaded = 0;
+ this.iframe_obj.msg_open = 1;
+
+ ipsattach.show_message( msg );
+ }
+ };
+
+ /**
+ * Each time the window is loaded, close
+ * any open messages
+ */
+ this.iframe_onload = function( e )
+ {
+ //-----------------------------------------
+ // First load?
+ //-----------------------------------------
+
+ if ( ! this.iframe_init )
+ {
+ this.iframe_init = 1;
+ this.iframe_loaded = 1;
+
+ if ( this.msg_open )
+ {
+ this.msg_open = 0;
+
+ ipsattach.hide_message();
+ }
+
+ window.frames[ this.id ].document.onmousedown = menu_action_close;
+ }
+ else
+ {
+ this.iframe_loaded = 1;
+ window.frames[ this.id ].document.onmousedown = menu_action_close;
+
+ if ( this.msg_open )
+ {
+ this.msg_open = 0;
+
+ ipsattach.hide_message();
+ }
+
+ //-----------------------------------------
+ // Run command?
+ //-----------------------------------------
+
+ if ( ipsattach.onload_function )
+ {
+ ipsattach.onload_function();
+ }
+ }
+
+ // INIT stuff
+ ipsattach.init_status_bar();
+ // Set status counter correct
+ ipsattach.set_attach_count_status();
+ };
+
+ /**
+ * IE only calls onload once... So subsequent loads
+ * don't do anything.. hence the readystate change
+ */
+ this.iframe_on_load_ie = function( e )
+ {
+ //-----------------------------------------
+ // First load?
+ //-----------------------------------------
+
+ if ( this.readyState == 'complete' )
+ {
+ if ( ! this.iframe_init )
+ {
+ this.iframe_init = 1;
+ this.iframe_loaded = 1;
+ window.frames[ this.id ].document.onmousedown = menu_action_close;
+
+ if ( this.msg_open )
+ {
+ this.msg_open = 0;
+
+ ipsattach.hide_message();
+ }
+
+ }
+ else
+ {
+ this.iframe_loaded = 1;
+ window.frames[ this.id ].document.onmousedown = menu_action_close;
+
+ if ( this.msg_open )
+ {
+ this.msg_open = 0;
+ ipsattach.hide_message();
+ }
+ }
+
+ //window.frames[ this.id ].document.getElementsByTagName('html')[0].allowTransparency = true;
+ window.frames[ this.id ].document.getElementsByTagName('html')[0].style.background = 'transparent';
+
+ //alert( window.frames[ this.id ].document.getElementsByTagName('html')[0].outerHTML );
+
+ //-----------------------------------------
+ // Run command?
+ //-----------------------------------------
+
+ if ( ipsattach.onload_function )
+ {
+ ipsattach.onload_function();
+ }
+
+ // INIT stuff
+ ipsattach.init_status_bar();
+ // Set status counter correct
+ ipsattach.set_attach_count_status();
+ }
+ };
+
+ /**
+ * Show message DIV
+ */
+ this.show_message = function( msg )
+ {
+ //-----------------------------------------
+ // Safari bug: Onload events don't fire
+ // when the parent DIV is hidden.
+ //-----------------------------------------
+
+ if ( is_safari )
+ {
+ return;
+ }
+
+ if ( typeof ipsattach.message_div_obj != 'undefined' )
+ {
+ ipsattach.message_div_obj.style.display = '';
+ ipsattach.message_span_obj.innerHTML = msg;
+
+ // Hide other div
+ ipsattach.iframe_parent_div_obj.style.display = 'none';
+ }
+ };
+
+ /**
+ * Hide message DIV
+ */
+ this.hide_message = function()
+ {
+ //-----------------------------------------
+ // Safari bug: Onload events don't fire
+ // when the parent DIV is hidden.
+ //-----------------------------------------
+
+ if ( is_safari )
+ {
+ return;
+ }
+
+ if ( typeof ipsattach.message_div_obj != 'undefined' )
+ {
+ ipsattach.message_div_obj.style.display = 'none';
+ ipsattach.message_span_obj.innerHTML = '';
+
+ // Show other div
+ ipsattach.iframe_parent_div_obj.style.display = '';
+ }
+ };
+
+ /**
+ * Mouseover events
+ *
+ * @param Event Object
+ */
+ this.current_menu_mouseover = function(e)
+ {
+ e = ipsclass.cancel_bubble(e, true);
+
+ if ( e.type == 'click' )
+ {
+ this._onclick(e);
+ }
+ };
+
+ /**
+ * Shows the pop-up menu
+ * First, dynamically writes menu - then passes to ipsmenu class to show
+ *
+ * @param Object Object
+ */
+ this.current_menu_button_show = function(obj)
+ {
+ ipsattach.init_current_menu(obj);
+ this._open(obj);
+ };
+
+ /**
+ * Roll over effect for the menu
+ * ^^
+ *
+ * @param Event Object
+ */
+ this.menu_onmouse_event = function( e )
+ {
+ e = ipsclass.cancel_bubble(e, true);
+
+ if ( e.type == 'mouseover' )
+ {
+ this.className = ipsattach.css_menu_row_over;
+ }
+ else if ( e.type == 'mouseout' )
+ {
+ this.className = ipsattach.css_menu_row;
+ }
+ };
+
+}
diff --git a/Development/javascript_uncompressed/jscripts/ips_ipsclass.js b/Development/javascript_uncompressed/jscripts/ips_ipsclass.js
new file mode 100644
index 00000000..e922b93d
--- /dev/null
+++ b/Development/javascript_uncompressed/jscripts/ips_ipsclass.js
@@ -0,0 +1,597 @@
+//------------------------------------------------------------------------------
+// IPS Global JS functions
+//------------------------------------------------------------------------------
+// Matt Mecham Woz Here
+// (c) 2005 Invision Power Services, Inc.
+// http://www.invisionpower.com
+//------------------------------------------------------------------------------
+
+
+function ipsclass()
+{
+ this.cookies = new Array();
+ this.ignore_cookies = new Array( ipb_var_cookieid + 'ipb_stronghold',
+ ipb_var_cookieid + 'session_id',
+ ipb_var_cookieid + 'ipb_admin_session_id',
+ ipb_var_cookieid + 'member_id',
+ ipb_var_cookieid + 'pass_hash' );
+
+ this.settings = {
+ 'do_linked_resize' : 0,
+ 'resize_percent' : 50
+ };
+
+ /*-------------------------------------------------------------------------*/
+ // Sort out cookies
+ /*-------------------------------------------------------------------------*/
+
+ this.init = function()
+ {
+ var _tmp = document.cookie.split(';');
+
+ if ( _tmp.length )
+ {
+ for( i = 0 ; i < _tmp.length ; i++ )
+ {
+ if ( _tmp[i].match( new RegExp( ipb_var_cookieid + ".*$" ) ) )
+ {
+ var _data = _tmp[i].split('=');
+ var _key = this.trim( _data[0] );
+ var _value = unescape( this.trim( _data[1] ) );
+
+ if ( _key && ( ! this.in_array( _key, this.ignore_cookies ) ) )
+ {
+ this.cookies[ _key.replace( ipb_var_cookieid, '' ) ] = _value;
+ }
+ }
+ }
+ }
+
+ _tmp = null;
+ };
+
+ //=============================================================================
+ // PHP EMULATION
+ //=============================================================================
+
+ /**
+ * Emulate PHPs trim function
+ */
+ this.trim = function( text )
+ {
+ if( typeof(text) == 'undefined' )
+ {
+ return '';
+ }
+
+ text = text.replace(/^\s+/, '');
+ return text.replace(/\s+$/, '');
+ };
+
+ /**
+ * Emulate PHPs html_entity_decode function
+ */
+ this.html_entity_decode = function( text )
+ {
+ if( typeof ca == 'undefined' )
+ {
+ var ca = document.createElement( 'textarea' );
+ }
+
+ ca.innerHTML = text.replace( //g, '>' );
+
+ return ca.value;
+ };
+
+ /**
+ * Emulate PHPs in_array function
+ */
+ this.in_array = function( needle, haystack )
+ {
+ if ( ! haystack.length )
+ {
+ return false;
+ }
+
+ for ( var i = 0 ; i < haystack.length ; i++)
+ {
+ if ( haystack[i] === needle )
+ {
+ return true;
+ }
+ }
+
+ return false;
+ };
+
+ /**
+ * Emulate PHPs htmlspecial chars function
+ */
+ this.htmlspecialchars = function( text )
+ {
+ text = text.replace( //g, '>' );
+ text = text.replace( /"/g, '"' );
+
+ return text;
+ };
+
+ /**
+ * Emulate PHPs un htmlspecial chars function
+ */
+ this.un_htmlspecialchars = function( text )
+ {
+ text = text.replace( /</g , '<' );
+ text = text.replace( />/g , '>' );
+ text = text.replace( /"/g, '"' );
+
+ return text;
+ };
+
+ //=============================================================================
+ // EDITOR FUNCTIONS
+ //=============================================================================
+
+ /**
+ * Get contents from an open editor
+ */
+ this.get_editor_contents = function( editor_id, editor_array )
+ {
+ var aIPS_editor = editor_array ? editor_array : IPS_editor;
+
+ if ( ! editor_id )
+ {
+ //-----------------------------------------
+ // Assume we don't care, and get first box
+ //-----------------------------------------
+
+ for( var i in aIPS_editor )
+ {
+ if( typeof( aIPS_editor[i] ) != 'object' )
+ {
+ continue;
+ }
+
+ editor_id = i;
+ break;
+ }
+ }
+
+ return aIPS_editor[ editor_id ].editor_get_contents;
+ };
+
+ /**
+ * Add contents to an open editor
+ */
+ this.add_editor_contents = function( text, editor_id, editor_array )
+ {
+ var aIPS_editor = editor_array ? editor_array : IPS_editor;
+
+ if ( ! editor_id )
+ {
+ //-----------------------------------------
+ // Assume we don't care, and get first box
+ //-----------------------------------------
+
+ for( var i in aIPS_editor )
+ {
+ if( typeof( aIPS_editor[i] ) != 'object' )
+ {
+ continue;
+ }
+
+ editor_id = i;
+ break;
+ }
+ }
+
+ return aIPS_editor[ editor_id ].insert_text( text );
+ };
+
+ /**
+ * Convert saved tags to display tags
+ */
+ this.convert_saved_tags_to_display_tags = function( text )
+ {
+ text = text.replace( /(<|<|<)!--/, "{" );
+ text = text.replace( /--(>|>|>)/ , "}" );
+
+ return text;
+ };
+
+ //=============================================================================
+ // MISC FUNCTIONS
+ //=============================================================================
+
+ /**
+ * Include a script...
+ */
+ this.include_javascript = function( _file, div_id )
+ {
+ /* INIT */
+ var _doc = ( div_id ) ? document.getElementById( div_id ) : document.getElementsByTagName( 'head' ).item(0);
+ var _js = document.createElement('script' );
+
+ /* Create attribute */
+ _js.setAttribute( 'language', 'javascript' );
+ _js.setAttribute( 'type', 'text/javascript' );
+ _js.setAttribute( 'src', _file );
+ _doc.appendChild( _js );
+
+ return false;
+ };
+
+ /**
+ * Fade in colour...
+ */
+ this.fade_in_element = function( div )
+ {
+ //-----------------------------------------
+ // INIT
+ //-----------------------------------------
+
+ var hash = '#';
+ var color_items = "0123456789abcdef";
+ var start_color = '#ffff66';
+ var orig_color = document.getElementById( div ).style.backgroundColor;
+ var temp_end = '#ffffff';
+ var iter = 20;
+ var time = 80;
+
+ var rbeg = color_items.indexOf(start_color.substr(1,1))*16 + color_items.indexOf(start_color.substr(2,1));
+ var gbeg = color_items.indexOf(start_color.substr(3,1))*16 + color_items.indexOf(start_color.substr(4,1));
+ var bbeg = color_items.indexOf(start_color.substr(5,1))*16 + color_items.indexOf(start_color.substr(6,1));
+ var rend = color_items.indexOf(temp_end.substr(1,1))*16 + color_items.indexOf(temp_end.substr(2,1));
+ var gend = color_items.indexOf(temp_end.substr(3,1))*16 + color_items.indexOf(temp_end.substr(4,1));
+ var bend = color_items.indexOf(temp_end.substr(5,1))*16 + color_items.indexOf(temp_end.substr(6,1));
+
+ for ( i = 1, r = rbeg, g = gbeg, b = bbeg;
+ i <= iter;
+ r = Math.round(rbeg + i * ((rend - rbeg) / (iter-1))),
+ g = Math.round(gbeg + i * ((gend - gbeg) / (iter-1))),
+ b = Math.round(bbeg + i * ((bend - bbeg) / (iter-1))), i++
+ )
+ {
+ hstr = '#' + color_items.charAt(Math.floor(r/16)) + color_items.charAt(r%16) + color_items.charAt(Math.floor(g/16)) + color_items.charAt(g%16) + color_items.charAt(Math.floor(b/16)) + color_items.charAt(b%16);
+
+ setTimeout('var div = document.getElementById("' + div + '"); div.style.backgroundColor = "' + hstr + '";', i * time);
+ }
+
+ setTimeout('var div = document.getElementById("' + div + '"); div.style.backgroundColor = "' + orig_color + '";', (i+1) * time);
+ };
+
+ /**
+ * Accepts a string followed by a list of replacements
+ */
+
+ this.lang_build_string = function()
+ {
+ if ( ! arguments.length || ! arguments )
+ {
+ return;
+ }
+
+ var string = arguments[0];
+
+ for( var i = 1 ; i < arguments.length ; i++ )
+ {
+ var match = new RegExp('<%' + i + '>', 'gi');
+ string = string.replace( match, arguments[i] );
+ }
+
+ return string;
+ };
+
+ /**
+ * Return the ID from an ID title string
+ *
+ * @param string ID title
+ * @return integar ID
+ */
+ this.get_id_from_text = function( id )
+ {
+ return id.replace( /.*(\-|_)(\S+)/, "$2" );
+ };
+
+ /**
+ * Return the name from an ID string
+ *
+ * @param string ID title
+ * @return integar ID
+ */
+ this.get_name_from_text = function( id )
+ {
+ return id.replace( /(.*)(\-|_)(\S+)/, "$1" );
+ };
+
+ /**
+ * Location jump
+ * @param string URL to redirect to
+ * @param boolean Do not prepend normal URL
+ */
+ this.location_jump = function( url, full )
+ {
+ url = url.replace( /&/g, '&' );
+
+ if ( full )
+ {
+ window.location.href = url;
+ }
+ else
+ {
+ window.location.href = ipb_var_base_url + url;
+ }
+ };
+
+ /**
+ * Confirm an action
+ */
+ this.confirm_action = function(url, msg)
+ {
+ if ( ! msg )
+ {
+ msg = 'PLEASE CONFIRM:\nOK to proceed?';
+ }
+
+ if ( url )
+ {
+ url = url.replace( '&', '&' );
+ }
+ else
+ {
+ url = '';
+ }
+
+ if ( confirm( msg ) )
+ {
+ window.location.href = url;
+ }
+ else
+ {
+ alert ( ipb_global_lang['action_cancelled'] );
+ return false;
+ }
+ };
+
+ /**
+ * Create pop-up window
+ */
+ this.pop_up_window = function(url, width, height, name)
+ {
+ if ( ! name )
+ {
+ var mydate = new Date();
+ name = mydate.getTime();
+ }
+
+ var Win = window.open( url.replace( '&', '&' ), name, 'width='+width+',height='+height + ',resizable=1,scrollbars=1,location=no,directories=no,status=no,menubar=no,toolbar=no');
+
+ Win.focus();
+
+ return false;
+ };
+
+ /**
+ * Set stuff unselectable
+ */
+ this.set_unselectable = function(obj)
+ {
+ if ( ! is_ie4 && typeof( obj.tagName ) != 'undefined' )
+ {
+ if ( obj.hasChildNodes() )
+ {
+ for (var i = 0; i < obj.childNodes.length; i++)
+ {
+ this.set_unselectable( obj.childNodes[i] );
+ }
+ }
+ obj.unselectable = 'on';
+ }
+ };
+
+ /**
+ * GET LEFT OBJECT POSITION
+ * Safari friendly version...
+ */
+ this.get_obj_leftpos = function(obj)
+ {
+ var curleft = 0;
+
+ if (obj.offsetParent)
+ {
+ while (obj.offsetParent)
+ {
+ curleft += obj.offsetLeft;
+ obj = obj.offsetParent;
+ }
+ }
+ else if (obj.x)
+ {
+ curleft += obj.x;
+ }
+
+ return curleft;
+ };
+
+ /**
+ * GET TOP OBJECT POSITION
+ * Safari friendly version...
+ */
+ this.get_obj_toppos = function(obj)
+ {
+ var curtop = 0;
+
+ if (obj.offsetParent)
+ {
+ while (obj.offsetParent)
+ {
+ curtop += obj.offsetTop;
+ obj = obj.offsetParent;
+ }
+ }
+ else if (obj.y)
+ {
+ curtop += obj.y;
+ }
+
+ return curtop;
+ };
+
+ //=============================================================================
+ // CANCEL BUBBLE FUNCTIONS
+ //=============================================================================
+
+ /**
+ * Stop the browser bubbling events
+ */
+ this.cancel_bubble = function(obj, extra)
+ {
+ if ( extra !== false )
+ {
+ extra = true;
+ }
+
+ if ( ! obj || is_ie)
+ {
+ if ( extra )
+ {
+ window.event.returnValue = false;
+ }
+
+ window.event.cancelBubble = true;
+
+ return window.event;
+ }
+ else
+ {
+ obj.stopPropagation();
+
+ if ( extra )
+ {
+ obj.preventDefault();
+ }
+
+ return obj;
+ }
+ };
+
+ this.cancel_bubble_all = function( obj )
+ {
+ return ipsclass.cancel_bubble( obj, true );
+ };
+
+ this.cancel_bubble_low = function( obj )
+ {
+ return ipsclass.cancel_bubble( obj, false );
+ };
+
+ //=============================================================================
+ // COOKIE FUNCTIONS
+ //=============================================================================
+
+ /**
+ * Cookie: Get Cookie
+ */
+ this.my_getcookie = function( name )
+ {
+ return this.cookies[ name ];
+ /*cname = ipb_var_cookieid + name + '=';
+ cpos = document.cookie.indexOf( cname );
+
+ if ( cpos != -1 )
+ {
+ cstart = cpos + cname.length;
+ cend = document.cookie.indexOf(";", cstart);
+
+ if (cend == -1)
+ {
+ cend = document.cookie.length;
+ }
+
+ return unescape( document.cookie.substring(cstart, cend) );
+ }
+
+ return null;*/
+ };
+
+ /**
+ * Cookie: Set Cookie
+ */
+ this.my_setcookie = function( name, value, sticky )
+ {
+ expire = "";
+ domain = "";
+ path = "/";
+
+ if ( sticky )
+ {
+ expire = "; expires=Wed, 1 Jan 2020 00:00:00 GMT";
+ }
+
+ if ( ipb_var_cookie_domain != "" )
+ {
+ domain = '; domain=' + ipb_var_cookie_domain;
+ }
+
+ if ( ipb_var_cookie_path != "" )
+ {
+ path = ipb_var_cookie_path;
+ }
+
+ document.cookie = ipb_var_cookieid + name + "=" + value + "; path=" + path + expire + domain + ';';
+
+ //-----------------------------------------
+ // Update internal array
+ //-----------------------------------------
+
+ this.cookies[ name ] = value;
+ };
+
+ //=============================================================================
+ // ARRAY FUNCTIONS
+ //=============================================================================
+
+ /**
+ * Array: Get stacksize
+ * @param array Array
+ * @return int Array length
+ */
+ this.array_stacksize = function( thearray )
+ {
+ for (i = 0 ; i < thearray.length; i++ )
+ {
+ if ( (thearray[i] == "") || (thearray[i] == null) || (thearray == 'undefined') )
+ {
+ return i;
+ }
+ }
+
+ return thearray.length;
+ };
+
+ /**
+ * Array: Add element to the stack
+ * @param array Array
+ * @param mixed New value
+ */
+ this.array_pushstack = function ( thearray, newval )
+ {
+ var arraysize = this.array_stacksize(thearray);
+ thearray[arraysize] = newval;
+ };
+
+ /**
+ * Array: Remove last array element
+ * @param array Array
+ * @return int Array length
+ */
+ this.array_popstack = function( thearray )
+ {
+ var arraysize = this.array_stacksize( thearray );
+ var theval = thearray[arraysize - 1];
+
+ delete thearray[arraysize - 1];
+ return theval;
+ };
+
+}
diff --git a/Development/javascript_uncompressed/jscripts/ips_menu.js b/Development/javascript_uncompressed/jscripts/ips_menu.js
new file mode 100644
index 00000000..baef2da8
--- /dev/null
+++ b/Development/javascript_uncompressed/jscripts/ips_menu.js
@@ -0,0 +1,559 @@
+/*-------------------------------------------------------------------------*/
+// IPS BASIC MENU CLASS
+// (c) 2005 Invision Power Services, Inc
+// ASSUMES "ips_global.js" has been loaded
+/*-------------------------------------------------------------------------*/
+
+ipsmenu = new ips_menu();
+
+/*-------------------------------------------------------------------------*/
+// INIT Handler class
+/*-------------------------------------------------------------------------*/
+
+function ips_menu()
+{
+ this.menu_registered = new Array();
+ this.menu_openfuncs = new Array();
+ this.menu_over_css = new Array();
+ this.menu_out_css = new Array();
+ this.menu_open_event = new Array();
+ this.dynamic_register = new Array();
+ this.menu_cur_open = null;
+ this.dynamic_html = null;
+}
+
+/*-------------------------------------------------------------------------*/
+// Register menu control ID (add to array)
+/*-------------------------------------------------------------------------*/
+
+ips_menu.prototype.register = function ( cid, callback, menu_over_css, menu_out_css, event_type )
+{
+ if ( event_type )
+ {
+ this.menu_open_event[ cid ] = ( event_type == 'onmouseover' ) ? 'onmouseover' : 'onclick';
+ }
+
+ this.menu_registered[ cid ] = new ips_menu_class( cid );
+
+ if ( callback )
+ {
+ this.menu_openfuncs[ cid ] = callback;
+ }
+
+ if ( menu_over_css && menu_out_css )
+ {
+ this.menu_over_css[ cid ] = menu_over_css;
+ this.menu_out_css[ cid ] = menu_out_css;
+ }
+
+ return this.menu_registered[ cid ];
+};
+
+/*-------------------------------------------------------------------------*/
+// Register menu control ID (add to array)
+/*-------------------------------------------------------------------------*/
+
+ips_menu.prototype.close = function ()
+{
+ if ( this.menu_cur_open )
+ {
+ this.menu_registered[ this.menu_cur_open ].close();
+ }
+};
+
+/*-------------------------------------------------------------------------*/
+// ips_menu_class: Object for each menu
+/*-------------------------------------------------------------------------*/
+
+function ips_menu_class( cid )
+{
+ this.cid = cid;
+ this.initialized = false;
+
+ this.init_control_object();
+ this.init_menu();
+};
+
+/*-------------------------------------------------------------------------*/
+// ips_menu_class: Initiate a single menu
+/*-------------------------------------------------------------------------*/
+
+ips_menu_class.prototype.init_control_object = function()
+{
+ this.cid_obj = document.getElementById( this.cid );
+
+ //----------------------------------
+ // Change cursor to show link
+ //----------------------------------
+
+ try
+ {
+ this.cid_obj.style.cursor = "pointer";
+ }
+ catch(e)
+ {
+ this.cid_obj.style.cursor = "hand";
+ }
+
+ this.cid_obj.unselectable = true;
+
+ if ( ipsmenu.menu_open_event[ this.cid ] == 'onmouseover' )
+ {
+ this.cid_obj.onmouseover = ips_menu_events.prototype.event_onclick;
+ }
+ else
+ {
+ this.cid_obj.onclick = ips_menu_events.prototype.event_onclick;
+ this.cid_obj.onmouseover = ips_menu_events.prototype.event_onmouseover;
+ }
+
+ this.cid_obj.onmouseout = ips_menu_events.prototype.event_onmouseout;
+};
+
+/*-------------------------------------------------------------------------*/
+// ips_menu_class: Initiate a single menu
+/*-------------------------------------------------------------------------*/
+
+ips_menu_class.prototype.init_menu = function()
+{
+ this.cid_menu_obj = document.getElementById( this.cid + '_menu' );
+
+ if ( this.cid_menu_obj )
+ {
+ //----------------------------------
+ // Save CPU - already init?
+ //----------------------------------
+
+ if ( this.initialized )
+ {
+ return;
+ }
+
+ //----------------------------------
+ // Pop-up menu obj (hidden div)
+ //----------------------------------
+
+ this.cid_menu_obj.style.display = "none";
+ this.cid_menu_obj.style.position = "absolute";
+ this.cid_menu_obj.style.left = "0px";
+ this.cid_menu_obj.style.top = "0px";
+ this.cid_menu_obj.onclick = ipsclass.cancel_bubble_low;
+ this.cid_menu_obj.zIndex = 50;
+
+ this.initialized = true;
+ }
+};
+
+/*-------------------------------------------------------------------------*/
+// ips_menu_class: Open menu
+/*-------------------------------------------------------------------------*/
+
+ips_menu_class.prototype.open = function( obj )
+{
+ //----------------------------------
+ // Not init?
+ //----------------------------------
+
+ if ( ! this.cid_menu_obj )
+ {
+ this.initialized = false;
+ this.init_menu();
+ }
+
+ //----------------------------------
+ // Close current menu(s)
+ //----------------------------------
+
+ if ( ipsmenu.menu_cur_open != null )
+ {
+ ipsmenu.menu_registered[ ipsmenu.menu_cur_open ].close();
+ }
+
+ //----------------------------------
+ // Save CPU - cur open clicked?
+ //----------------------------------
+
+ if ( ipsmenu.menu_cur_open == obj.id )
+ {
+ return false;
+ }
+
+ //----------------------------------
+ // Set current open menu
+ //----------------------------------
+
+ ipsmenu.menu_cur_open = obj.id;
+
+ //----------------------------------
+ // Get ID of menu DIV to show
+ //----------------------------------
+
+ var left_px = ipsclass.get_obj_leftpos(obj);
+ var top_px = ipsclass.get_obj_toppos(obj) + obj.offsetHeight;
+ var ifid = obj.id;
+
+ //try
+ //{
+ // if ( is_safari && ! ipb_is_acp )
+ // {
+ // top_px += 20;
+ // }
+ //}
+ //catch(error)
+ //{
+ // if ( is_safari )
+ // {
+ // top_px += 20;
+ // }
+ //}
+
+ //----------------------------------
+ // Show menu DIV.. but keep it underneath
+ //----------------------------------
+
+ this.cid_menu_obj.style.zIndex = -1;
+ this.cid_menu_obj.style.display = "";
+
+ //----------------------------------
+ // Try and keep it on screen
+ //----------------------------------
+
+ var width = parseInt( this.cid_menu_obj.style.width ) ? parseInt( this.cid_menu_obj.style.width ) : this.cid_menu_obj.offsetWidth;
+
+ if ( (left_px + width) >= document.body.clientWidth )
+ {
+ left_px = left_px + obj.offsetWidth - width;
+ }
+
+ //-----------------------------------------
+ // Firefox bump
+ //-----------------------------------------
+
+ if ( is_moz )
+ {
+ top_px -= 1;
+ }
+
+ //----------------------------------
+ // Finalize menu position
+ //----------------------------------
+
+ this.cid_menu_obj.style.left = left_px + "px";
+ this.cid_menu_obj.style.top = top_px + "px";
+ this.cid_menu_obj.style.zIndex = 100;
+
+ //----------------------------------
+ // Run a custom function?
+ //----------------------------------
+
+ if ( ipsmenu.menu_openfuncs[ obj.id ] )
+ {
+ eval( ipsmenu.menu_openfuncs[ obj.id ] );
+ }
+
+ //----------------------------------
+ // Workaround for IE bug which shows
+ // select boxes and other windows GUI
+ // over divs. SHOW IFRAME
+ //----------------------------------
+
+ if ( is_ie )
+ {
+ try
+ {
+ if ( ! document.getElementById( 'if_' + obj.id ) )
+ {
+ var iframeobj = document.createElement('iframe');
+
+ iframeobj.src = 'javascript:;';
+ iframeobj.id = 'if_' +obj.id;
+
+ document.getElementsByTagName('body').appendChild( iframeobj );
+ }
+ else
+ {
+ var iframeobj = document.getElementById( 'if_' +obj.id );
+ }
+
+ iframeobj.scrolling = 'no';
+ iframeobj.frameborder = 'no';
+ iframeobj.className = 'iframeshim';
+ iframeobj.style.position = 'absolute';
+
+ iframeobj.style.width = parseInt(this.cid_menu_obj.offsetWidth) + 'px';
+ iframeobj.style.height = parseInt(this.cid_menu_obj.offsetHeight) + 'px';
+ iframeobj.style.top = this.cid_menu_obj.style.top;
+ iframeobj.style.left = this.cid_menu_obj.style.left;
+ iframeobj.style.zIndex = 99;
+ iframeobj.style.display = "block";
+
+ }
+ catch(error)
+ {
+ //alert(error); // Oh dear, someones stolen the iframe
+ }
+ }
+
+ //----------------------------------
+ // Work around for safari which doesnt
+ // allow a hrefs top be clickable in
+ // a pop up div
+ //----------------------------------
+
+ if ( is_safari )
+ {
+ try
+ {
+ mlinks = this.cid_menu_obj.getElementsByTagName('a');
+
+ for ( var i = 0 ; i <= mlinks.length ; i++ )
+ {
+ //----------------------------------
+ // Ignore non links and links that end with #
+ // As safari likes to do that with href='#' links
+ //----------------------------------
+
+ if ( mlinks[i] != null
+ && mlinks[i].href != null
+ && mlinks[i].href
+ && ( mlinks[i].href.indexOf( '#', 0 ) != (mlinks[i].href.length - 1) )
+ )
+ {
+ mlinks[i].onmousedown = ips_menu_events.prototype.event_safari_onclick_handler;
+ mlinks[i].id = 'saf-link-' + this.cid + i;
+ }
+ }
+ }
+ catch( error )
+ {
+ //alert( error );
+ }
+ }
+
+ if ( this.cid_obj.editor_id )
+ {
+ this.cid_obj.state = true;
+ IPS_editor[this.cid_obj.editor_id].set_menu_context(this.cid_obj, 'mousedown');
+ }
+
+ return false;
+};
+
+/*-------------------------------------------------------------------------*/
+// ips_menu_class: Close a menu
+/*-------------------------------------------------------------------------*/
+
+ips_menu_class.prototype.close = function()
+{
+ if ( this.cid_menu_obj != null )
+ {
+ this.cid_menu_obj.style.display = "none";
+ }
+ else if ( ipsmenu.menu_cur_open != null )
+ {
+ ipsmenu.menu_registered[ ipsmenu.menu_cur_open ].cid_menu_obj.style.display = 'none';
+ }
+
+ ipsmenu.menu_cur_open = null;
+
+ if ( this.cid_obj )
+ {
+ if ( ipsmenu.menu_out_css[ this.cid_obj.id ] )
+ {
+ this.cid_obj.className = ipsmenu.menu_out_css[ this.cid_obj.id ];
+ }
+ }
+
+ //----------------------------------
+ // Workaround for IE bug which shows
+ // select boxes and other windows GUI
+ // over divs. Hide IFRAME
+ //----------------------------------
+
+ if ( is_ie )
+ {
+ try
+ {
+ document.getElementById( 'if_' + this.cid ).style.display = "none";
+ }
+ catch(error)
+ {
+ //alert(e);// Oh dear, someones stolen the iframe
+ }
+ }
+
+ //-----------------------------------------
+ // IPS Editor stuff
+ //-----------------------------------------
+
+ if ( this.cid_obj.editor_id )
+ {
+ this.cid_obj.state = false;
+ IPS_editor[ this.cid_obj.editor_id ].set_menu_context( this.cid_obj, 'mouseout' );
+ }
+};
+
+/*-------------------------------------------------------------------------*/
+// ACTION: If menu open and hover over another cid, close cur open new
+/*-------------------------------------------------------------------------*/
+
+ips_menu_class.prototype.hover = function(e)
+{
+ if ( ipsmenu.menu_cur_open != null )
+ {
+ if ( ipsmenu.menu_registered[ ipsmenu.menu_cur_open ].cid != this.id )
+ {
+ this.open(e);
+ }
+ }
+};
+
+/*-------------------------------------------------------------------------*/
+// INIT: ips menu events
+/*-------------------------------------------------------------------------*/
+
+function ips_menu_events()
+{
+};
+
+/*-------------------------------------------------------------------------*/
+// Safari: bug fix
+/*-------------------------------------------------------------------------*/
+
+ips_menu_events.prototype.event_safari_onclick_handler = function()
+{
+ if ( this.id )
+ {
+ window.location = document.getElementById( this.id ).href;
+ }
+};
+
+/*-------------------------------------------------------------------------*/
+// Event: On mouseover
+/*-------------------------------------------------------------------------*/
+
+ips_menu_events.prototype.event_onmouseover = function(e)
+{
+ e = ipsclass.cancel_bubble(e, true);
+ ipsmenu.menu_registered[ this.id ].hover(this);
+
+ if ( ipsmenu.menu_over_css[ this.id ] )
+ {
+ this.className = ipsmenu.menu_over_css[ this.id ];
+ }
+};
+
+/*-------------------------------------------------------------------------*/
+// Event: On mouseout
+/*-------------------------------------------------------------------------*/
+
+ips_menu_events.prototype.event_onmouseout = function(e)
+{
+ e = ipsclass.cancel_bubble(e, true);
+
+ if ( ipsmenu.menu_out_css[ this.id ] && ipsmenu.menu_cur_open != this.id )
+ {
+ this.className = ipsmenu.menu_out_css[ this.id ];
+ }
+};
+
+/*-------------------------------------------------------------------------*/
+// Event: On click
+/*-------------------------------------------------------------------------*/
+
+ips_menu_events.prototype.event_onclick = function(e)
+{
+ e = ipsclass.cancel_bubble(e, true);
+
+ if ( ipsmenu.menu_cur_open == null )
+ {
+ if ( ipsmenu.menu_over_css[ this.id ] )
+ {
+ this.className = ipsmenu.menu_over_css[ this.id ];
+ }
+
+ ipsmenu.menu_registered[ this.id ].open(this);
+ }
+ else
+ {
+ // For the RTE, if we click from font to size, for example
+ // we want the menu to open...
+
+ //ipsmenu.menu_registered[ this.id ].close();
+
+ if ( ipsmenu.menu_cur_open == this.id )
+ {
+ ipsmenu.menu_registered[ this.id ].close();
+
+ if ( ipsmenu.menu_out_css[ this.id ] )
+ {
+ this.className = ipsmenu.menu_out_css[ this.id ];
+ }
+ }
+ else
+ {
+ if ( ipsmenu.menu_over_css[ this.id ] )
+ {
+ this.className = ipsmenu.menu_over_css[ this.id ];
+ }
+
+ ipsmenu.menu_registered[ this.id ].open(this);
+ };
+ }
+};
+
+/*-------------------------------------------------------------------------*/
+// Global INIT
+/*-------------------------------------------------------------------------*/
+
+function menu_do_global_init()
+{
+ //----------------------------------
+ // Close all menus on click
+ //----------------------------------
+
+ document.onclick = menu_action_close;
+
+ //----------------------------------
+ // Write HTML
+ //----------------------------------
+
+ if ( ipsmenu.dynamic_html != null && ipsmenu.dynamic_html != '' )
+ {
+
+ }
+
+ //----------------------------------
+ // Register
+ //----------------------------------
+
+ if ( ipsmenu.dynamic_register.length )
+ {
+ for( var i=0; i < ipsmenu.dynamic_register.length; i++ )
+ {
+ if ( ipsmenu.dynamic_register[i] )
+ {
+ ipsmenu.register( ipsmenu.dynamic_register[i] );
+ }
+ }
+ }
+};
+
+/*-------------------------------------------------------------------------*/
+// Global: Close menus from any app
+/*-------------------------------------------------------------------------*/
+
+function menu_action_close(e)
+{
+ try {
+ if( e.button == 2 || e.button == 3 )
+ {
+ return;
+ }
+ }
+ catch( acold ) {};
+
+ ipsmenu.close(e);
+};
+
+
diff --git a/Development/javascript_uncompressed/jscripts/ips_profile_portal.js b/Development/javascript_uncompressed/jscripts/ips_profile_portal.js
new file mode 100644
index 00000000..801b0217
--- /dev/null
+++ b/Development/javascript_uncompressed/jscripts/ips_profile_portal.js
@@ -0,0 +1,1282 @@
+//------------------------------------------------------------------------------
+// IPS JS: Attach Functions
+// (c) 2005 Invision Power Services, Inc.
+// http://www.invisionpower.com
+// Matt Mecham (16/12/05)
+//------------------------------------------------------------------------------
+
+var ips_personal_portal = new ips_personal_portal();
+
+function ips_personal_portal()
+{
+ /**
+ * Rating wrapper
+ */
+ this.div_rating_wrapper = 'pp-rating-wrapper';
+
+ /**
+ * Rating image text piece
+ */
+ this.text_rating_image = 'pp-rating-img-';
+
+ /**
+ * CSS classes
+ */
+ this.css_classes = {
+ 'pp-tabon' : 'pp-tabon',
+ 'pp-taboff' : 'pp-taboff',
+ 'pp-tabshaded' : 'pp-tabshaded',
+ 'pp-contentbox-back' : 'pp-contentbox-back',
+ 'pp-contentbox-entry-noheight' : 'pp-contentbox-entry-noheight',
+ 'pp-contentbox-entry-noheight-mod' : 'pp-contentbox-entry-noheight-mod',
+ 'pp-contentbox-entry-noheight-sel' : 'pp-contentbox-entry-noheight-sel'
+ };
+
+ /**
+ * Contact types
+ */
+ this.contact_types = { 'aim' : 'aim',
+ 'msn' : 'msn',
+ 'icq' : 'icq',
+ 'yahoo' : 'yahoo'
+ };
+ /**
+ * Content Tabs
+ */
+ this.content_tabs = { };
+
+ /**
+ * Stored tabs
+ */
+ this.stored_tabs = { };
+
+ /**
+ * Stored div classes
+ */
+ this.stored_div_classes = { };
+
+ /**
+ * iframe tabs
+ */
+ this.iframe_tabs = {
+ 'comments' : ipb_var_base_url + 'act=profile&CODE=personal_iframe_comments',
+ 'settings' : ipb_var_base_url + 'act=profile&CODE=personal_iframe_settings',
+ 'friends' : ipb_var_base_url + 'act=profile&CODE=personal_iframe_friends'
+ };
+
+ /**
+ * Stored tabs
+ */
+ this.stored_tabs_css = { };
+
+ /**
+ * Other wrappers
+ */
+ this.div_names = {
+ 'pp-entry-gender-wrap' : 'pp-entry-gender-wrap',
+ 'pp-entry-gender-text' : 'pp-entry-gender-text',
+ 'pp-entry-gender-img' : 'pp-entry-gender-img',
+ 'pp-entry-gender-imgwrap' : 'pp-entry-gender-imgwrap',
+ 'pp-entry-location-wrap' : 'pp-entry-location-wrap',
+ 'pp-entry-location-text' : 'pp-entry-location-text',
+ 'pp-entry-born-wrap' : 'pp-entry-born-wrap',
+ 'pp-entry-born-text' : 'pp-entry-born-text',
+ 'pp-entry-age-wrap' : 'pp-entry-age-wrap',
+ 'pp-entry-age-text' : 'pp-entry-age-text',
+ 'pp-entry-age-yearsold' : 'pp-entry-age-yearsold',
+ 'pp-main-tab-content' : 'pp-main-tab-content',
+ 'pp-content-tab' : 'pp-content-tab',
+ 'pp-comment-textarea' : 'pp-comment-textarea',
+ 'pp-comments-wrap' : 'pp-comments-wrap',
+ 'pp-comment-entry' : 'pp-comment-entry',
+ 'pp-comment-entry-main' : 'pp-comment-entry-main',
+ 'pp-iframe-wrap' : 'pp-iframe-wrap',
+ 'pp-entry-contact-wrap' : 'pp-entry-contact-wrap',
+ 'pp-entry-contact-entry' : 'pp-entry-contact-entry',
+ 'pp-main-photo' : 'pp-main-photo',
+ 'pp-personal_statement' : 'pp-personal_statement',
+ 'pp-checked' : 'pp-checked',
+ 'pp-friend-img' : 'pp-friend-img',
+ 'pp-friend-text' : 'pp-friend-text',
+ 'pp-friend-wrap' : 'pp-friend-wrap'
+ };
+
+ /**
+ * Settings
+ */
+ this.settings = {
+ 'allow_rating' : 0,
+ 'default_rating' : 3,
+ 'edit_allowed' : 0,
+ 'member_id' : 0,
+ 'viewer_id' : 0,
+ 'img_star_on' : 'star_filled.gif',
+ 'img_star_selected' : 'star_selected.gif',
+ 'img_star_off' : 'star_empty.gif',
+ 'img_gender_male' : 'gender_male.png',
+ 'img_gender_female' : 'gender_female.png',
+ 'img_gender_mystery': 'gender_mystery.png',
+ 'img_base_url' : '',
+ 'img_menu_icon' : '',
+ 'default_tab' : '',
+ 'photo_def_width' : '150',
+ 'photo_def_height' : '150',
+ 'photo_def_src' : ipb_var_image_url + '/folder_profile_portal/pp-blank-large.png',
+ 'img_friend_remove' : ipb_var_image_url + '/folder_profile_portal/friend_remove_small.png',
+ 'img_friend_add' : ipb_var_image_url + '/folder_profile_portal/friend_add_small.png'
+ };
+ /**
+ * Language
+ */
+ this.languages = {
+ 'rate_me' : 'Rate Me',
+ 'img_alt_rate' : 'Rate this member, click on desired star to send rating',
+ 'gender_male' : 'Male',
+ 'gender_female' : 'Female',
+ 'gender_mystery' : 'Gender Not Set',
+ 'saving_comment' : 'Saving Comment...',
+ 'loading_tab' : ajax_load_msg,
+ 'deleting_comment' : 'Deleting Comment...',
+ 'friend_add' : 'Add as Friend',
+ 'friend_remove' : 'Remove Friend'
+ };
+
+ /**
+ * Loaded tab
+ */
+ var loaded_tab = null;
+
+ /**
+ * INIT
+ */
+ this.init = function()
+ {
+ //-----------------------------------------
+ // INIT tabs
+ //-----------------------------------------
+
+ var divs = document.getElementsByTagName( 'DIV' );
+ var divcount = 0;
+
+ //----------------------------------
+ // Sort through and grab divs
+ //----------------------------------
+
+ for ( var i = 0 ; i <= divs.length ; i++ )
+ {
+ try
+ {
+ if ( ! divs[i].id )
+ {
+ continue;
+ }
+ }
+ catch(error)
+ {
+ continue;
+ }
+
+ var divid = divs[i].id;
+ var divname = ipsclass.get_name_from_text( divs[i].id );
+ var divnum = ipsclass.get_id_from_text( divs[i].id );
+
+ //----------------------------------
+ // Work with it?
+ //----------------------------------
+
+ if ( divname == this.div_names['pp-content-tab'] )
+ {
+ var _highlight = 0;
+
+ this.stored_tabs[ divnum ] = divs[i];
+ this.stored_tabs_css[ divnum ] = divs[i].className;
+
+ divs[i].style.cursor = 'pointer';
+ divs[i].onclick = this.tab_onclick;
+
+ //-----------------------------------------
+ // Show this tab?
+ //-----------------------------------------
+
+ if ( this.settings['default_tab'] != "" )
+ {
+ if ( this.settings['default_tab'] == divnum )
+ {
+ _highlight = 1;
+ }
+ }
+ else if ( divcount == 0 )
+ {
+ _highlight = 1;
+ }
+
+ //----------------------------------
+ // Set correct classes / display
+ //----------------------------------
+
+ if ( _highlight == 1)
+ {
+ // First tab...
+ divs[i].className = this.css_classes['pp-tabon'];
+ divs[i].style.display = 'block';
+ }
+ else
+ {
+ // Second tab
+
+ if ( divs[i].className != this.css_classes['pp-tabshaded'] )
+ {
+ divs[i].className = this.css_classes['pp-taboff'];
+ }
+
+ divs[i].style.display = 'block';
+ }
+
+ divcount++;
+ }
+ }
+
+ //-----------------------------------------
+ // Draw rating images...
+ //-----------------------------------------
+
+ this.init_rating_images();
+
+ //-----------------------------------------
+ // Render drop down boxes
+ //-----------------------------------------
+
+ this.show_dropdown_boxes();
+ };
+
+ /**
+ * Show friend add/remove
+ */
+ this.show_friend_add_or_remove = function( add_friend )
+ {
+ try
+ {
+ var _div = document.getElementById( this.div_names['pp-friend-wrap'] );
+ var _html = '';
+
+ if ( _div.id )
+ {
+ if ( add_friend )
+ {
+ _html = " ";
+ _html += "" + this.languages['friend_add'] + " ";
+ }
+ else
+ {
+ _html = " ";
+ _html += "" + this.languages['friend_remove'] + " ";
+
+ }
+
+ _div.innerHTML = _html;
+ }
+ }
+ catch(error)
+ {
+ }
+ };
+
+ /**
+ * Toggle DIV class for a comment box
+ */
+ this.toggle_comment_box = function( comment_id, from_iframe )
+ {
+ //-----------------------------------------
+ // INIT
+ //-----------------------------------------
+
+ comment_id = parseInt( comment_id );
+ from_iframe = parseInt( from_iframe );
+
+ //-----------------------------------------
+ // Work out document...
+ //-----------------------------------------
+
+ var _document = document;
+
+ if ( from_iframe )
+ {
+ var iframe = document.getElementById( 'pp-main-tab-content-iframe' );
+
+ if ( iframe.contentDocument )
+ {
+ _document = iframe.contentDocument;
+ }
+ else if ( iframe.contentWindow )
+ {
+ _document = iframe.contentWindow.document;
+ }
+ else if ( iframe.document )
+ {
+ _document = iframe.document;
+ }
+ }
+
+ //-----------------------------------------
+ // Continue...
+ //-----------------------------------------
+
+ if ( comment_id )
+ {
+ var _div = _document.getElementById( this.div_names['pp-comment-entry-main'] + '-' + comment_id );
+ var _box = _document.getElementById( this.div_names['pp-checked'] + '-' + comment_id );
+ var _class = _div.className;
+
+ if ( _class == this.css_classes['pp-contentbox-entry-noheight'] || _class == this.css_classes['pp-contentbox-entry-noheight-mod'] )
+ {
+ this.stored_div_classes[ this.div_names['pp-comment-entry'] + '-' + comment_id ] = _class;
+
+ _div.className = this.css_classes['pp-contentbox-entry-noheight-sel'];
+ }
+ else if ( this.stored_div_classes[ this.div_names['pp-comment-entry'] + '-' + comment_id ] )
+ {
+ _div.className = this.stored_div_classes[ this.div_names['pp-comment-entry'] + '-' + comment_id ];
+ }
+ else
+ {
+ _div.className = this.css_classes['pp-contentbox-entry-noheight'];
+ }
+ }
+
+ return true;
+ };
+
+ /**
+ * Convert some stuff to drop down boxes
+ */
+ this.show_dropdown_boxes = function()
+ {
+ //-----------------------------------------
+ // INIT
+ //-----------------------------------------
+
+ var html = '';
+
+ //-----------------------------------------
+ // Are we the same ID as the viewer
+ //-----------------------------------------
+
+ if ( ( this.settings['member_id'] == this.settings['viewer_id'] ) && ( this.settings['viewer_id'] ) && ( this.settings['edit_allowed'] == 1 ) )
+ {
+ try
+ {
+ //-----------------------------------------
+ // Gender box...
+ //-----------------------------------------
+
+ var _wrap = document.getElementById( this.div_names['pp-entry-gender-wrap'] );
+
+ _wrap.className = 'popmenubutton-new';
+
+ ipsmenu.register( "pp-entry-gender-wrap" );
+
+ //-----------------------------------------
+ // Location box...
+ //-----------------------------------------
+
+ var _wrap = document.getElementById( this.div_names['pp-entry-location-wrap'] );
+
+ _wrap.className = 'popmenubutton-new';
+
+ ipsmenu.register( "pp-entry-location-wrap" );
+
+ //-----------------------------------------
+ // Birthdate box...
+ //-----------------------------------------
+
+ var _wrap = document.getElementById( this.div_names['pp-entry-born-wrap'] );
+
+ _wrap.className = 'popmenubutton-new';
+
+ ipsmenu.register( "pp-entry-born-wrap" );
+ }
+ catch( error )
+ {
+ }
+
+ //-----------------------------------------
+ // Contact messengers...
+ //-----------------------------------------
+
+ for ( var i in this.contact_types )
+ {
+ try
+ {
+ var _wrap = document.getElementById( this.div_names['pp-entry-contact-wrap'] + '-' + this.contact_types[i] );
+
+ _wrap.className = 'popmenubutton-new';
+
+ ipsmenu.register( "pp-entry-contact-wrap" + '-' + this.contact_types[i] );
+ }
+ catch(error)
+ {
+ }
+ }
+ }
+ };
+
+ /**
+ * INIT rating images
+ */
+ this.init_rating_images = function()
+ {
+ //-----------------------------------------
+ // INIT
+ //-----------------------------------------
+
+ var html = '';
+
+ //-----------------------------------------
+ // Can rate this member?
+ //-----------------------------------------
+
+ if ( ! this.settings[ 'allow_rating' ] )
+ {
+ return false;
+ }
+
+ //-----------------------------------------
+ // Still here? OK...
+ //-----------------------------------------
+
+ for( var i = 1 ; i <= 5 ; i++ )
+ {
+ var _onmouseover = '';
+ var _onmouseout = '';
+ var _onclick = '';
+ var _title = '';
+
+ if ( ( this.settings['member_id'] != this.settings['viewer_id'] ) && ( this.settings['viewer_id'] ) )
+ {
+ _onmouseover = ' onmouseover="this.style.cursor=\'pointer\'; ips_personal_portal.show_rating_images(' + i + ', 0)"';
+ _onmouseout = ' onmouseout="ips_personal_portal.show_rating_images(-1, 1)"';
+ _onclick = ' onclick="ips_personal_portal.send_rating(' + i + ')"';
+ _title = this.languages['img_alt_rate'];
+ }
+
+ html += " ";
+ }
+
+ try
+ {
+ if ( ( this.settings['member_id'] != this.settings['viewer_id'] ) && ( this.settings['viewer_id'] ) )
+ {
+ document.getElementById( this.div_rating_wrapper ).innerHTML = this.languages['rate_me'] + ' ' + html;
+ }
+ else
+ {
+ document.getElementById( this.div_rating_wrapper ).innerHTML = html;
+ }
+
+ //-----------------------------------------
+ // Now set the image...
+ //-----------------------------------------
+
+ this.show_rating_images( this.settings['default_rating'], 1 );
+ }
+ catch( e ) { }
+ };
+
+ /**
+ * Send rating..
+ */
+ this.load_content_tab = function( tab )
+ {
+ //-----------------------------------------
+ // INIT
+ //-----------------------------------------
+
+ var html = '';
+
+ //-----------------------------------------
+ // IE is a pain...
+ //-----------------------------------------
+
+ if ( is_ie && !is_ie7 )
+ {
+ var _div = document.getElementById( ips_personal_portal.div_names['pp-main-tab-content'] );
+ var _width = parseInt( _div.offsetWidth - 12 );
+
+ // IE adds the 12 px from the padding set below back into the width..
+ }
+
+ //-----------------------------------------
+ // Got a rating?
+ //-----------------------------------------
+
+ if ( tab )
+ {
+ //-----------------------------------------
+ // Make sure messages are hidden
+ //-----------------------------------------
+
+ hide_inline_messages_instant();
+
+ //-----------------------------------------
+ // Loaded tab...
+ //-----------------------------------------
+
+ this.loaded_tab = tab;
+
+ //-----------------------------------------
+ // iFrame tab
+ //-----------------------------------------
+
+ if ( this.iframe_tabs[ tab ] )
+ {
+ var url = this.iframe_tabs[ tab ] + '&member_id=' + this.settings['member_id'] + '&md5check=' + ipb_md5_check;
+
+ document.getElementById( this.div_names['pp-main-tab-content'] ).innerHTML = '';
+
+ var iframeinclude = new iframe_include();
+ iframeinclude.iframe_id = 'pp-main-tab-content-iframe';
+ iframeinclude.iframe_add_to_div = 'pp-main-tab-content';
+ iframeinclude.iframe_main_wrapper = 'pp-iframe-wrap';
+ iframeinclude.init();
+ iframeinclude.include( url );
+ }
+ //-----------------------------------------
+ // Normal tab
+ //-----------------------------------------
+
+ else
+ {
+ //----------------------------------
+ // INIT
+ //----------------------------------
+
+ var url = ipb_var_base_url+'act=profile&CODE=personal_ajax_load_tab&member_id=' + this.settings['member_id'] + '&tab=' + tab + '&md5check=' + ipb_md5_check;
+
+ /*--------------------------------------------*/
+ // Main function to do on request
+ // Must be defined first!!
+ /*--------------------------------------------*/
+
+ do_request_function = function()
+ {
+ //----------------------------------
+ // Ignore unless we're ready to go
+ //----------------------------------
+
+ if ( ! xmlobj.readystate_ready_and_ok() )
+ {
+ xmlobj.show_loading( ips_personal_portal.languages['loading_tab'] );
+ return;
+ }
+
+ xmlobj.hide_loading();
+
+ //----------------------------------
+ // INIT
+ //----------------------------------
+
+ var html = xmlobj.xmlhandler.responseText;
+
+ if ( html != 'error' )
+ {
+ document.getElementById( ips_personal_portal.div_names['pp-main-tab-content'] ).innerHTML = html;
+
+ //-----------------------------------------
+ // Topic attachment sizes...
+ //-----------------------------------------
+
+ try
+ {
+ fix_linked_image_sizes();
+ xmlobj.execute_javascript( html );
+
+ //-----------------------------------------
+ // Resize box nicely...
+ //-----------------------------------------
+
+ document.getElementById( ips_personal_portal.div_names['pp-main-tab-content'] ).style.height = 'auto';
+ document.getElementById( ips_personal_portal.div_names['pp-main-tab-content'] ).style.padding = '6px';
+ document.getElementById( ips_personal_portal.div_names['pp-main-tab-content'] ).className = ips_personal_portal.css_classes['pp-contentbox-back'];
+
+ //-----------------------------------------
+ // IE is still a pain
+ //-----------------------------------------
+
+ if ( is_ie )
+ {
+ _div.style.width = ( _width ) ? _width + "px" : 'auto';
+ _div.style.overflowX = 'auto';
+ }
+ }
+ catch(error)
+ {
+ //alert(error);
+ }
+ }
+ else
+ {
+ alert( js_error_no_permission );
+ }
+ };
+
+ //----------------------------------
+ // LOAD XML
+ //----------------------------------
+
+ xmlobj = new ajax_request();
+ xmlobj.onreadystatechange( do_request_function );
+
+ xmlobj.process( url );
+
+ return false;
+ }
+ }
+ };
+
+ /**
+ * Send rating..
+ */
+ this.send_rating = function( rating )
+ {
+ //-----------------------------------------
+ // INIT
+ //-----------------------------------------
+
+ rating = rating ? rating : 0;
+
+ //-----------------------------------------
+ // Got a rating?
+ //-----------------------------------------
+
+ if ( rating )
+ {
+ //----------------------------------
+ // INIT
+ //----------------------------------
+
+ var url = ipb_var_base_url+'act=xmlout&do=member-rate&member_id=' + this.settings['member_id'] + '&rating=' + rating + '&md5check=' + ipb_md5_check;
+
+ /*--------------------------------------------*/
+ // Main function to do on request
+ // Must be defined first!!
+ /*--------------------------------------------*/
+
+ do_request_function = function()
+ {
+ //----------------------------------
+ // Ignore unless we're ready to go
+ //----------------------------------
+
+ if ( ! xmlobj.readystate_ready_and_ok() )
+ {
+ xmlobj.show_loading( '' );
+ return;
+ }
+
+ xmlobj.hide_loading();
+
+ //----------------------------------
+ // INIT
+ //----------------------------------
+
+ var html = xmlobj.xmlhandler.responseText;
+
+ if ( html == 'no_permission' )
+ {
+ alert( js_error_no_permission );
+ }
+ else if ( html != 'error' )
+ {
+ var _result = html.split(',');
+ var _new_value = _result[0];
+ var _new_hits = _result[1];
+ var _new_stars = _result[2];
+ var _type = _result[3];
+
+ //-----------------------------------------
+ // Now set the image...
+ //-----------------------------------------
+
+ ips_personal_portal.settings['default_rating'] = parseInt( _new_stars );
+
+ ips_personal_portal.show_rating_images( ips_personal_portal.settings['default_rating'], 1 );
+
+ ipsclass.fade_in_element( ips_personal_portal.div_rating_wrapper );
+
+ show_inline_messages_instant( 'rating_updated' );
+ }
+ };
+
+ //----------------------------------
+ // LOAD XML
+ //----------------------------------
+
+ xmlobj = new ajax_request();
+ xmlobj.onreadystatechange( do_request_function );
+
+ xmlobj.process( url );
+
+ return false;
+ }
+ };
+
+ /**
+ * Show rating images..
+ */
+ this.show_rating_images = function( rating, restore_default )
+ {
+ //-----------------------------------------
+ // INIT
+ //-----------------------------------------
+
+ rating = restore_default ? this.settings['default_rating'] : parseInt( rating );
+ var star = restore_default ? this.settings['img_star_on'] : this.settings['img_star_selected'];
+
+ //-----------------------------------------
+ // Set to 0
+ //-----------------------------------------
+
+ for( var i = 1 ; i <= 5 ; i++ )
+ {
+ var _img = document.getElementById( this.text_rating_image + i );
+ _img.src = this.settings['img_base_url'] + '/' + this.settings['img_star_off'];
+ }
+
+ //-----------------------------------------
+ // Show ones coloured...
+ //-----------------------------------------
+
+ for( var i = 1 ; i <= rating ; i++ )
+ {
+ var _img = document.getElementById( this.text_rating_image + i );
+ _img.src = this.settings['img_base_url'] + '/' + star;
+ }
+ };
+
+ /**
+ * Delete comment
+ */
+ this.delete_comment = function( comment_id )
+ {
+ //-----------------------------------------
+ // INIT
+ //-----------------------------------------
+
+ var url = ipb_var_base_url+'act=profile&CODE=personal_ajax_delete_comment&member_id=' + this.settings['member_id'];
+ var final_fields = new Array();
+
+ //-----------------------------------------
+ // Populate the form fields
+ //-----------------------------------------
+
+ final_fields['md5check'] = ipb_md5_check;
+ final_fields['comment_id'] = comment_id;
+
+ //-----------------------------------------
+ // Ajaxify mah bad self!
+ //-----------------------------------------
+
+ do_request_function = function()
+ {
+ //----------------------------------
+ // Ignore unless we're ready to go
+ //----------------------------------
+
+ if ( ! xmlobj.readystate_ready_and_ok() )
+ {
+ xmlobj.show_loading( ips_personal_portal.languages['deleting_comment'] );
+ return;
+ }
+
+ xmlobj.hide_loading();
+
+ //----------------------------------
+ // INIT
+ //----------------------------------
+
+ var html = xmlobj.xmlhandler.responseText;
+
+ if ( html == 'nopermission' )
+ {
+ alert( message_pop_up_lang['no_permission'] );
+
+ }
+ else if ( html != 'error' )
+ {
+ document.getElementById( ips_personal_portal.div_names['pp-comments-wrap'] ).innerHTML = html;
+
+ //-----------------------------------------
+ // Reload comments tab
+ //-----------------------------------------
+
+ if ( ips_personal_portal.loaded_tab == 'comments' )
+ {
+ ips_personal_portal.load_content_tab( 'comments' );
+ }
+ }
+ };
+
+ //----------------------------------
+ // LOAD XML
+ //----------------------------------
+
+ xmlobj = new ajax_request();
+ xmlobj.onreadystatechange( do_request_function );
+ var xmlreturn = xmlobj.process( url, 'POST', xmlobj.format_for_post(final_fields) );
+
+ return false;
+ };
+
+ /**
+ * Reload comments
+ */
+ this.reload_comments = function()
+ {
+ //-----------------------------------------
+ // INIT
+ //-----------------------------------------
+
+ var url = ipb_var_base_url+'act=profile&CODE=personal_ajax_reload_comments&member_id=' + this.settings['member_id'];
+ var final_fields = new Array();
+
+ //-----------------------------------------
+ // Populate the form fields
+ //-----------------------------------------
+
+ final_fields['md5check'] = ipb_md5_check;
+
+ //-----------------------------------------
+ // Ajaxify mah bad self!
+ //-----------------------------------------
+
+ do_request_function = function()
+ {
+ //----------------------------------
+ // Ignore unless we're ready to go
+ //----------------------------------
+
+ if ( ! xmlobj_gender.readystate_ready_and_ok() )
+ {
+ return;
+ }
+
+ //----------------------------------
+ // INIT
+ //----------------------------------
+
+ var html = xmlobj_gender.xmlhandler.responseText;
+
+ if ( html != 'error' && html != 'no_permission' )
+ {
+ document.getElementById( ips_personal_portal.div_names['pp-comments-wrap'] ).innerHTML = html;
+ }
+ };
+
+ //----------------------------------
+ // LOAD XML
+ //----------------------------------
+
+ xmlobj_gender = new ajax_request();
+ xmlobj_gender.onreadystatechange( do_request_function );
+ var xmlreturn = xmlobj_gender.process( url, 'POST', xmlobj_gender.format_for_post(final_fields) );
+
+ return false;
+ };
+
+ /**
+ * Save comment
+ */
+ this.save_comment = function()
+ {
+ //-----------------------------------------
+ // INIT
+ //-----------------------------------------
+
+ var url = ipb_var_base_url+'act=profile&CODE=personal_ajax_add_comment&member_id=' + this.settings['member_id'];
+ var final_fields = new Array();
+
+ //-----------------------------------------
+ // Close menu
+ //-----------------------------------------
+
+ menu_action_close();
+
+ //-----------------------------------------
+ // Populate the form fields
+ //-----------------------------------------
+
+ final_fields['md5check'] = ipb_md5_check;
+ final_fields['comment'] = document.getElementById( this.div_names['pp-comment-textarea'] ).value;
+
+ //-----------------------------------------
+ // Ajaxify mah bad self!
+ //-----------------------------------------
+
+ do_request_function = function()
+ {
+ //----------------------------------
+ // Ignore unless we're ready to go
+ //----------------------------------
+
+ if ( ! xmlobj.readystate_ready_and_ok() )
+ {
+ xmlobj.show_loading( ips_personal_portal.languages['saving_comment'] );
+ return;
+ }
+
+ xmlobj.hide_loading();
+
+ //----------------------------------
+ // INIT
+ //----------------------------------
+
+ var html = xmlobj.xmlhandler.responseText;
+
+ if ( html == 'nopermission' )
+ {
+ alert( message_pop_up_lang['no_permission'] );
+ return;
+ }
+ else if ( html == 'error-no-comment' )
+ {
+ show_inline_messages_instant( 'pp_comment_error' );
+ return;
+ }
+ else if ( html != 'error' )
+ {
+ document.getElementById( ips_personal_portal.div_names['pp-comments-wrap'] ).innerHTML = html;
+ xmlobj.execute_javascript( html );
+
+ //-----------------------------------------
+ // Reload comments tab
+ //-----------------------------------------
+
+ if ( ips_personal_portal.loaded_tab == 'comments' )
+ {
+ ips_personal_portal.load_content_tab( 'comments' );
+ }
+
+ document.getElementById( ips_personal_portal.div_names['pp-comment-textarea'] ).value = '';
+ }
+ };
+
+ //----------------------------------
+ // LOAD XML
+ //----------------------------------
+
+ xmlobj = new ajax_request();
+ xmlobj.onreadystatechange( do_request_function );
+ var xmlreturn = xmlobj.process( url, 'POST', xmlobj.format_for_post(final_fields) );
+
+ return false;
+
+ };
+
+ /**
+ * Updates the personal photo
+ */
+ this.update_personal_photo = function( img_url, width, height )
+ {
+ if ( ! img_url || ! img_url.match( "/photo-" ) )
+ {
+ img_url = this.settings['photo_def_src'];
+ width = this.settings['photo_def_width'];
+ height = this.settings['photo_def_height'];
+ }
+
+ var _img = document.getElementById( this.div_names['pp-main-photo'] );
+ var mydate = new Date();
+
+ _img.src = img_url + '?__time=' + mydate.getTime();
+ _img.width = width;
+ _img.height = height;
+ };
+
+ /**
+ * Updates the personal statement
+ */
+ this.update_personal_statement = function( content, website )
+ {
+ var _statement = document.getElementById( this.div_names['pp-personal_statement'] );
+
+ content = content.replace( /\[b\](.+?)\[\/b\]/gi, "$1 " );
+ content = content.replace( /\[i\](.+?)\[\/i\]/gi, "$1 " );
+ content = content.replace( /\[u\](.+?)\[\/u\]/gi, "$1 " );
+
+ // Word wrap
+ content = content.replace( /(\S{19})(\S+?)/g , "$1 $2" );
+
+ _statement.innerHTML = content;
+
+ if ( website )
+ {
+ if ( website.length > 30 )
+ {
+ _statement.innerHTML += "" + ipb_global_lang['visit_my_website'] + " ";
+ }
+ else
+ {
+ _statement.innerHTML += ""+website+" ";
+ }
+ }
+ };
+
+ /**
+ * Saves settings to the Deebee.
+ */
+ this.save_settings = function( func_name, field_data, get_data_from_this_id )
+ {
+ //-----------------------------------------
+ // INIT objects
+ //-----------------------------------------
+
+ var url = ipb_var_base_url+'act=xmlout&do=profile-save-settings&member_id=' + this.settings['member_id'];
+ var final_fields = new Array();
+
+ //-----------------------------------------
+ // Close menu
+ //-----------------------------------------
+
+ menu_action_close();
+
+ //-----------------------------------------
+ // Populate the form fields
+ //-----------------------------------------
+
+ final_fields['md5check'] = ipb_md5_check;
+ final_fields['cmd'] = func_name;
+
+ try
+ {
+ for( var i in field_data )
+ {
+ final_fields[ i ] = field_data[i];
+ }
+ }
+ catch(error)
+ {
+ }
+
+ if ( func_name == 'birthdate' )
+ {
+ final_fields['pp_b_day'] = document.getElementById('pp_b_day').options[ document.getElementById('pp_b_day').selectedIndex ].value;
+ final_fields['pp_b_month'] = document.getElementById('pp_b_month').options[ document.getElementById('pp_b_month').selectedIndex ].value;
+ final_fields['pp_b_year'] = document.getElementById('pp_b_year').options[ document.getElementById('pp_b_year').selectedIndex ].value;
+ }
+
+ if ( get_data_from_this_id != '' )
+ {
+ final_fields['value'] = document.getElementById( get_data_from_this_id ).value;
+ }
+
+ //-----------------------------------------
+ // Ajaxify mah bad self!
+ //-----------------------------------------
+
+ do_request_function = function()
+ {
+ //----------------------------------
+ // Ignore unless we're ready to go
+ //----------------------------------
+
+ if ( ! xmlobj.readystate_ready_and_ok() )
+ {
+ xmlobj.show_loading();
+ return;
+ }
+
+ xmlobj.hide_loading();
+
+ //----------------------------------
+ // INIT
+ //----------------------------------
+
+ var html = xmlobj.xmlhandler.responseText;
+
+ if ( html == 'nopermission' )
+ {
+ alert( message_pop_up_lang['no_permission'] );
+
+ }
+ else if ( html != 'error' )
+ {
+ switch( final_fields['cmd'] )
+ {
+ case 'gender':
+ var _txt = document.getElementById( ips_personal_portal.div_names['pp-entry-gender-text'] );
+ var _imgwrap = document.getElementById( ips_personal_portal.div_names['pp-entry-gender-imgwrap'] );
+ var _date = new Date();
+ var _src = '';
+
+ if ( html == 'male' )
+ {
+ _src = ips_personal_portal.settings['img_base_url'] + '/' + ips_personal_portal.settings['img_gender_male'] + "?__=" + _date.getTime();
+ _txt.innerHTML = ips_personal_portal.languages['gender_male'];
+ }
+ else if ( html == 'female' )
+ {
+ _src = ips_personal_portal.settings['img_base_url'] + '/' + ips_personal_portal.settings['img_gender_female'] + "?__=" + _date.getTime();
+ _txt.innerHTML = ips_personal_portal.languages['gender_female'];
+ }
+ else
+ {
+ _src = ips_personal_portal.settings['img_base_url'] + '/' + ips_personal_portal.settings['img_gender_mystery'] + "?__=" + _date.getTime();
+ _txt.innerHTML = ips_personal_portal.languages['gender_mystery'];
+ }
+
+ _imgwrap.innerHTML = " ";
+
+ // Update gender icons...
+ ips_personal_portal.reload_comments();
+
+ ipsclass.fade_in_element( ips_personal_portal.div_names['pp-entry-gender-wrap'] );
+
+ break;
+ case 'contact':
+ if ( html == 'icqerror' )
+ {
+ show_inline_messages_instant( 'pp_icq_error' );
+ }
+ else
+ {
+ document.getElementById( ips_personal_portal.div_names['pp-entry-contact-entry'] + '-' + field_data['contacttype'] ).innerHTML = html;
+
+ ipsclass.fade_in_element( ips_personal_portal.div_names['pp-entry-contact-wrap'] + '-' + field_data['contacttype'] );
+ }
+ break;
+ case 'location':
+ document.getElementById( ips_personal_portal.div_names['pp-entry-location-text'] ).innerHTML = html;
+
+ ipsclass.fade_in_element( ips_personal_portal.div_names['pp-entry-location-wrap'] );
+
+ break;
+ case 'birthdate':
+
+ if ( html == 'dateerror' )
+ {
+ show_inline_messages_instant( 'pp_date_error' );
+ }
+ else
+ {
+ document.getElementById( ips_personal_portal.div_names['pp-entry-born-text'] ).innerHTML = html;
+
+ var _dates = html.split('-');
+
+ if ( _dates[2] )
+ {
+ var today = new Date();
+ var _years = today.getFullYear();
+ var _days = today.getDate();
+ var _mos = today.getMonth() + 1;
+ var _age = _years - _dates[2];
+
+ _dates[0] = month[ _dates[0] ];
+
+ if ( _dates[0] > _mos )
+ {
+ _age -= 1;
+ }
+ else if ( _dates[0] == _mos )
+ {
+ if ( _dates[1] > _days )
+ {
+ _age -= 1;
+ }
+ }
+
+ document.getElementById( ips_personal_portal.div_names['pp-entry-age-text'] ).innerHTML = _age;
+ document.getElementById( ips_personal_portal.div_names['pp-entry-age-yearsold'] ).style.display = '';
+
+ ipsclass.fade_in_element( ips_personal_portal.div_names['pp-entry-age-wrap'] );
+ }
+ else
+ {
+ document.getElementById( ips_personal_portal.div_names['pp-entry-age-text'] ).innerHTML = ips_personal_portal.languages['age_unknown'];
+ document.getElementById( ips_personal_portal.div_names['pp-entry-age-yearsold'] ).style.display = 'none';
+
+ ipsclass.fade_in_element( ips_personal_portal.div_names['pp-entry-age-wrap'] );
+ document.getElementById( ips_personal_portal.div_names['pp-entry-born-pretext'] ).style.display = '';
+ }
+
+ ipsclass.fade_in_element( ips_personal_portal.div_names['pp-entry-born-wrap'] );
+ }
+ }
+ }
+ };
+
+ //----------------------------------
+ // LOAD XML
+ //----------------------------------
+
+ xmlobj = new ajax_request();
+ xmlobj.onreadystatechange( do_request_function );
+ var xmlreturn = xmlobj.process( url, 'POST', xmlobj.format_for_post(final_fields) );
+
+ return false;
+ };
+
+ /**
+ * On mouseover event
+ */
+ this.tab_onclick = function( event )
+ {
+ //-------------------------------
+ // No? Get one then
+ //-------------------------------
+
+ var tabid = ipsclass.get_id_from_text( this.id );
+
+ // Stop scrolling to top of the page...
+ ipsclass.cancel_bubble( event );
+
+ //----------------------------------
+ // Load tab
+ //----------------------------------
+
+ ips_personal_portal.tab_load( tabid );
+
+ return false;
+ };
+
+ /**
+ * On mouseover event
+ */
+ this.tab_load = function( tabid )
+ {
+ //-------------------------------
+ // Got it?
+ //-------------------------------
+
+ for ( var i in ips_personal_portal.stored_tabs )
+ {
+ if ( i == tabid )
+ {
+ ips_personal_portal.stored_tabs[ i ].style.display = 'block';
+ ips_personal_portal.stored_tabs[ i ].className = ips_personal_portal.css_classes['pp-tabon'];
+ }
+ else
+ {
+ ips_personal_portal.stored_tabs[ i ].style.display = 'block';
+
+ if ( ips_personal_portal.stored_tabs_css[ i ] == ips_personal_portal.css_classes['pp-tabshaded'] )
+ {
+ ips_personal_portal.stored_tabs[ i ].className = ips_personal_portal.css_classes['pp-tabshaded'];
+ }
+ else
+ {
+ ips_personal_portal.stored_tabs[ i ].className = ips_personal_portal.css_classes['pp-taboff'];
+ }
+ }
+ }
+
+ //----------------------------------
+ // Load tab
+ //----------------------------------
+
+ ips_personal_portal.load_content_tab( tabid );
+
+ return false;
+ };
+
+
+}
diff --git a/Development/javascript_uncompressed/jscripts/ips_text_editor.js b/Development/javascript_uncompressed/jscripts/ips_text_editor.js
new file mode 100644
index 00000000..cfa16392
--- /dev/null
+++ b/Development/javascript_uncompressed/jscripts/ips_text_editor.js
@@ -0,0 +1,3794 @@
+//------------------------------------------------------------------------------
+// IPS Cross-Browser Global Text Editor Functions
+//------------------------------------------------------------------------------
+// Supports all "v5" browsers (inc. Opera, Safari, etc)
+// Used for non RTE applications.
+// (c) 2005 Invision Power Services, Inc.
+// http://www.invisionpower.com
+//------------------------------------------------------------------------------
+
+//-----------------------------------------------------------
+// This setting makes hitting the enter key in IE turn into a
+// newline (br tag) instead of the default action of using a
+// paragraph tag. This causes the indent and list options not
+// to work properly in IE, so do not enable this unless you
+// don't care about those options. This functionality will be
+// expanded upon in a future release, however this is not due
+// to an issue with IPB, but rather due to how IE handles the
+// javascript exec_command functions, and is beyond our control
+// without a lot of javascript rewriting of those functions,
+// specific to IE behaviors.
+//-----------------------------------------------------------
+
+var ie_ptags_to_newlines = true;
+
+var IPS_editor = new Array();
+
+//-------------------------------
+// Define which buttons change
+// when clicked
+//-------------------------------
+
+var buttons_update = new Array(
+ "bold",
+ "italic",
+ "underline",
+ "justifyleft",
+ "justifycenter",
+ "justifyright",
+ "insertorderedlist",
+ "insertunorderedlist"
+);
+
+var ips_primary_colors = new Array(
+ '#000000' ,
+ '#A0522D' ,
+ '#556B2F' ,
+ '#006400' ,
+ '#483D8B' ,
+ '#000080' ,
+ '#4B0082' ,
+ '#2F4F4F' ,
+ '#8B0000' ,
+ '#FF8C00' ,
+ '#808000' ,
+ '#008000' ,
+ '#008080' ,
+ '#0000FF' ,
+ '#708090' ,
+ '#696969' ,
+ '#FF0000' ,
+ '#F4A460' ,
+ '#9ACD32' ,
+ '#2E8B57' ,
+ '#48D1CC' ,
+ '#4169E1' ,
+ '#800080' ,
+ '#808080' ,
+ '#FF00FF' ,
+ '#FFA500' ,
+ '#FFFF00' ,
+ '#00FF00' ,
+ '#00FFFF' ,
+ '#00BFFF' ,
+ '#9932CC' ,
+ '#C0C0C0' ,
+ '#FFC0CB' ,
+ '#F5DEB3' ,
+ '#FFFACD' ,
+ '#98FB98' ,
+ '#AFEEEE' ,
+ '#ADD8E6' ,
+ '#DDA0DD' ,
+ '#FFFFFF'
+);
+
+//-------------------------------
+// Define font faces
+//-------------------------------
+
+var ips_primary_fonts = new Array(
+ "Arial",
+ "Arial Black",
+ "Arial Narrow",
+ "Book Antiqua",
+ "Century Gothic",
+ "Comic Sans MS",
+ "Courier New",
+ "Franklin Gothic Medium",
+ "Garamond",
+ "Georgia",
+ "Impact",
+ "Lucida Console",
+ "Lucida Sans Unicode",
+ "Microsoft Sans Serif",
+ "Palatino Linotype",
+ "Tahoma",
+ "Times New Roman",
+ "Trebuchet MS",
+ "Verdana"
+);
+
+//-------------------------------
+// Remap font sizes
+//-------------------------------
+
+var ips_primary_sizes = new Array(
+ 1,
+ 2,
+ 3,
+ 4,
+ 5,
+ 6,
+ 7
+);
+
+//-----------------------------------------
+// Insert Special Items
+//-----------------------------------------
+
+var ips_format_items =
+{
+ 'cmd_subscript' : 'Sub-script',
+ 'cmd_superscript' : 'Super-script',
+ 'cmd_strikethrough' : 'Strikethrough'
+};
+
+//-----------------------------------------
+// Special item images
+//-----------------------------------------
+
+var ips_format_item_images =
+{
+ 'cmd_subscript' : 'rte-subscript.gif',
+ 'cmd_superscript' : 'rte-superscript.gif',
+ 'cmd_strikethrough' : 'rte-strike.gif'
+};
+
+//-----------------------------------------
+// Language array
+//-----------------------------------------
+
+ips_language_array = {};
+
+/**
+* Main function.
+* Creates instance of an IPS editor
+*/
+function ips_text_editor( editor_id, mode, use_bbcode, file_path, initial_text )
+{
+ /**
+ * @var string Unique editor ID (allows multiple editors)
+ * @var INT Is Rich Text Mode (WYSIWYG)
+ * @var boolean Is initialized
+ * @var array Buttons to track
+ * @var array Fonts to track
+ * @var array Item State
+ * @var object Text Area object
+ * @var object Controls Bar
+ * @var object Font drop down object
+ * @var object Size drop down object
+ * @var object Special drop down object
+ * @var object Font format drop down object
+ * @var object Main bar object
+ * @var boolean Use IPS menus
+ * @var boolean Is Internet Explorer
+ * @var boolean Is Mozilla
+ * @var boolean Is Opera
+ * @var boolean Is Safari
+ * @var string RTE files path
+ * @var string Current font-face
+ * @var string Current font-size
+ * @var boolean Using BBCode inplace of HTML
+ * @var string Opening brace
+ * @var string Closing brace
+ * @var boolean Allow advanced options
+ * @var string IPS Editor Frame HTML
+ * @var array Array of pop-ups
+ * @var string Character set of page
+ * @var int Fix up IE to tags
+ * @var object Emoticon window ID
+ * @var int Editor is loading
+ * @var array Array of hidden objects
+ */
+ this.editor_id = editor_id;
+ this.is_rte = mode;
+ this.initialized = false;
+ this.buttons = new Array();
+ this.fonts = new Array();
+ this.state = new Array();
+ this.text_obj = document.getElementById( this.editor_id + '_textarea' );
+ this.control_obj = document.getElementById( this.editor_id + '_controls' );
+ this.font_obj = document.getElementById( this.editor_id + '_out_fontname' );
+ this.size_obj = document.getElementById( this.editor_id + '_out_fontsize' );
+ this.special_obj = document.getElementById( this.editor_id + '_out_special' );
+ this.format_obj = document.getElementById( this.editor_id + '_out_format' );
+ this.mainbar = document.getElementById( this.editor_id + '_main-bar');
+ this.use_menus = ( typeof( ipsmenu ) == 'undefined' ? false : true );
+ this.is_ie = is_ie;
+ this.is_moz = is_moz;
+ this.is_opera = is_opera;
+ this.is_safari = is_safari;
+ this.file_path = file_path ? file_path : global_rte_includes_url;
+ this.font_state = null;
+ this.size_state = null;
+ this.use_bbcode = use_bbcode;
+ this.open_brace = this.use_bbcode ? '[' : '<';
+ this.close_brace = this.use_bbcode ? ']' : '>';
+ this.allow_advanced = this.use_bbcode ? 0 : 1;
+ this.ips_frame_html = '';
+ this.popups = new Array();
+ this.char_set = global_rte_char_set ? global_rte_char_set : 'UTF-8';
+ this.forum_fix_ie_newlines = 0;
+ this.emoticon_window_id = '';
+ this.is_loading = 0;
+ this.hidden_objects = new Array();
+
+ /**
+ * History stuff
+ */
+ this.history_pointer = -1;
+ this.history_recordings = new Array();
+ /**
+ * HTML Toggle status
+ */
+ this._showing_html = 0;
+
+ /**
+ * IE Range cache.
+ * Prevents selection being lost when
+ * iframe / popup is loaded
+ */
+ this._ie_cache = null;
+
+ /**
+ * Current open bar object
+ */
+ this.current_bar_object = null;
+
+ /**
+ * Special items menu
+ */
+ this.ips_special_items =
+ {
+ /*'cmd_loader_link' : new Array( ips_language_array['js_rte_link'] ? ips_language_array['js_rte_link'] : 'Insert Link... ' , 'rte-hyperlink.png' ),
+ 'cmd_loader_unlink': new Array( ips_language_array['js_rte_unlink'] ? ips_language_array['js_rte_unlink'] : 'Unlink Text...' , 'rte-unlink.png', 'this.format_text( e, "unlink", false );' ),
+ 'cmd_loader_image' : new Array( ips_language_array['js_rte_image'] ? ips_language_array['js_rte_image'] : 'Insert Image... ' , 'rte-image.png' ),
+ 'cmd_loader_email' : new Array( ips_language_array['js_rte_email'] ? ips_language_array['js_rte_email'] : 'Insert Email... ' , 'rte-email.png' ),
+ 'cmd_loader_table' : new Array( ips_language_array['js_rte_table'] ? ips_language_array['js_rte_table'] : 'Insert Table... ' , 'rte-table.png' ),
+ 'cmd_loader_div' : new Array( ips_language_array['js_rte_div'] ? ips_language_array['js_rte_div'] : 'Insert Div... ' , 'rte-div.png' )*/
+ };
+
+ /**
+ * Reset lang on format items menu
+ */
+ ips_format_items['cmd_subscript'] = ips_language_array['js_rte_sub'] ? ips_language_array['js_rte_sub'] : 'Sub-script';
+ ips_format_items['cmd_superscript'] = ips_language_array['js_rte_sup'] ? ips_language_array['js_rte_sup'] : 'Super-script';
+ ips_format_items['cmd_strikethrough'] = ips_language_array['js_rte_strike'] ? ips_language_array['js_rte_strike'] : 'Strikethrough';
+ ips_language_array['emos_show_all'] = ips_language_array['emos_show_all'] ? ips_language_array['emos_show_all'] : 'Show All';
+
+ /**
+ * INIT Text editor
+ */
+ this.init = function()
+ {
+ if ( this.initialized )
+ {
+ return;
+ }
+
+ //-----------------------------------------
+ // Show control bar that's hidden for non-js
+ //-----------------------------------------
+
+ this.control_obj.style.display = '';
+
+ //-----------------------------------------
+ // Reset WYSIWYG flag
+ //-----------------------------------------
+
+ try
+ {
+ document.getElementById( this.editor_id + '_wysiwyg_used' ).value = parseInt(this.is_rte);
+ }
+ catch(err) { }
+
+ //-----------------------------------------
+ // Get default frame HTML
+ //-----------------------------------------
+
+ this.ips_frame_html = this.get_frame_html();
+
+ //-----------------------------------------
+ // Set editor up
+ //-----------------------------------------
+
+ this.editor_set_content( initial_text );
+
+ //-----------------------------------------
+ // Set mouse events
+ //-----------------------------------------
+
+ this.editor_set_functions();
+
+ //-----------------------------------------
+ // Set controls up
+ //-----------------------------------------
+
+ this.editor_set_controls();
+
+
+ this.initialized = true;
+ };
+
+ /**
+ * Returns frame HTML
+ *
+ * @return string Frame HTML
+ */
+ this.get_frame_html = function()
+ {
+ var ips_frame_html = "";
+ ips_frame_html += "\n";
+ ips_frame_html += "
\n";
+ ips_frame_html += " ";
+ ips_frame_html += "\n";
+ ips_frame_html += "\n";
+ ips_frame_html += "\n";
+ ips_frame_html += "{:content:}\n";
+ ips_frame_html += "\n";
+ ips_frame_html += "";
+
+ return ips_frame_html;
+ };
+
+ /**
+ * Refocus editor check
+ */
+ this.editor_check_focus = function()
+ {
+ if ( ! this.editor_window.has_focus )
+ {
+ if ( this.is_opera )
+ {
+ this.editor_window.focus();
+ }
+
+ this.editor_window.focus();
+ }
+ };
+
+ /**
+ * INIT control bar
+ * Goes through control bar images and sets up buttons
+ * and drop down menus, adds classnames and sets up
+ * onmouse events
+ */
+ this.editor_set_controls = function()
+ {
+ var controls = new Array();
+ var _c = 0;
+
+ if ( ! this.control_obj )
+ {
+ return;
+ }
+
+ //-----------------------------------------
+ // Grab all buttons
+ // 2 step 'cos moz goes into infinite loop otherwise
+ //-----------------------------------------
+
+ var items = this.control_obj.getElementsByTagName("DIV");
+
+ for ( var i = 0 ; i < items.length ; i++ )
+ {
+ if ( ( items[i].className == 'rte-normal' || items[i].className == 'rte-menu-button' || items[i].className == 'rte-normal-menubutton' ) && items[i].id )
+ {
+ controls[ controls.length ] = items[i].id;
+ }
+ }
+
+ for ( var i = 0 ; i < controls.length ; i++ )
+ {
+ var control = document.getElementById( controls[i] );
+
+ if ( control.className == 'rte-normal' )
+ {
+ this.init_editor_button( control );
+ }
+ else if ( control.className == 'rte-menu-button' || control.className == 'rte-normal-menubutton' )
+ {
+ this.init_editor_popup_button( control );
+ }
+ }
+
+ ipsclass.set_unselectable( this.control_obj );
+ };
+
+ /**
+ * INIT Popup Menu
+ * Dynamically builds up the context sensitive options
+ *
+ * @param object Button object
+ *
+ */
+ this.init_editor_popup_button = function( obj )
+ {
+ //-----------------------------------------
+ // Add to IPS Menu system
+ //-----------------------------------------
+
+ if ( ! this.use_menus )
+ {
+ return;
+ }
+
+ ipsmenu.register( obj.id );
+
+ obj.cmd = obj.id.replace( new RegExp( '^' + this.editor_id + '_popup_(.+?)$' ), '$1' );
+ obj.editor_id = this.editor_id;
+ obj.state = false;
+
+ //-----------------------------------------
+ // Add to buttons array
+ //-----------------------------------------
+
+ this.buttons[ obj.cmd ] = obj;
+
+ //-----------------------------------------
+ // Set Up Popup button display
+ //-----------------------------------------
+
+ if (obj.cmd == 'fontname')
+ {
+ this.fontout = this.font_obj;
+ this.fontout.innerHTML = obj.title;
+ this.fontoptions = {'' : this.fontout};
+
+ for (var option in ips_primary_fonts)
+ {
+ var div = document.createElement('div');
+ div.id = this.editor_id + '_fontoption_' + ips_primary_fonts[option];
+ div.style.width = this.fontout.style.width;
+ div.style.display = 'none';
+ div.innerHTML = ips_primary_fonts[option];
+ this.fontoptions[ips_primary_fonts[option]] = this.fontout.parentNode.appendChild(div);
+ }
+ }
+ else if (obj.cmd == 'fontsize')
+ {
+ this.sizeout = this.size_obj;
+ this.sizeout.innerHTML = obj.title;
+ this.sizeoptions = {'' : this.sizeout};
+
+ for (var option in ips_primary_sizes)
+ {
+ var div = document.createElement('div');
+ div.id = this.editor_id + '_sizeoption_' + ips_primary_sizes[option];
+ div.style.width = this.sizeout.style.width;
+ div.style.display = 'none';
+ div.innerHTML = ips_primary_sizes[option];
+ this.sizeoptions[ips_primary_sizes[option]] = this.sizeout.parentNode.appendChild(div);
+ }
+ }
+
+ obj._onmouseover = obj.onmouseover;
+ obj._onclick = obj.onclick;
+ obj.onmouseover = obj.onmouseout = obj.onclick = ips_editor_events.prototype.popup_button_onmouseevent;
+
+ ipsmenu.menu_registered[obj.id]._open = ipsmenu.menu_registered[obj.id].open;
+ ipsmenu.menu_registered[obj.id].open = ips_editor_events.prototype.popup_button_show;
+ };
+
+
+ /**
+ * Dynamically builds the HTML for the IPS Menu system
+ *
+ * @var object Javascript object clicked
+ */
+ this.init_editor_menu = function( obj )
+ {
+ //-----------------------------------------
+ // Create menu wrapper
+ //-----------------------------------------
+
+ var menu = document.createElement('div');
+
+ menu.id = this.editor_id + '_popup_' + obj.cmd + '_menu';
+ menu.className = 'rte-popupmenu';
+ menu.style.display = 'none';
+ menu.style.cursor = 'default';
+ menu.style.padding = '3px';
+ menu.style.width = 'auto';
+ menu.style.height = 'auto';
+ menu.style.overflow = 'hidden';
+
+ //-----------------------------------------
+ // What are we doing?
+ //-----------------------------------------
+
+ switch( obj.cmd )
+ {
+ case 'fontsize':
+ for( var i in ips_primary_sizes )
+ {
+ if ( typeof( ips_primary_sizes[i] ) == 'function' )
+ {
+ continue;
+ }
+
+ var option = document.createElement('div');
+
+ option.style.paddingTop = ips_primary_sizes[ i ]*2 + 'px';
+ option.style.paddingBottom = ips_primary_sizes[ i ]*2 + 'px';
+
+ option.innerHTML = '' + ips_primary_sizes[ i ] + ' ';
+ option.className = 'rte-menu-size';
+ option.title = ips_primary_sizes[ i ];
+ option.cmd = obj.cmd;
+ option.editor_id = this.editor_id;
+ option.onmouseover = option.onmouseout = option.onmouseup = option.onmousedown = ips_editor_events.prototype.menu_option_onmouseevent;
+ option.onclick = ips_editor_events.prototype.font_format_option_onclick;
+
+ menu.style.width = this.size_obj.style.width;
+
+ menu.appendChild(option);
+ }
+ break;
+
+ case 'fontname':
+ for( var i in ips_primary_fonts )
+ {
+ if ( typeof( ips_primary_fonts[i] ) == 'function' )
+ {
+ continue;
+ }
+
+ var option = document.createElement('div');
+ option.innerHTML = '' + ips_primary_fonts[ i ] + ' ';
+ option.className = 'rte-menu-face';
+ option.title = ips_primary_fonts[ i ];
+ option.cmd = obj.cmd;
+ option.editor_id = this.editor_id;
+ option.onmouseover = option.onmouseout = option.onmouseup = option.onmousedown = ips_editor_events.prototype.menu_option_onmouseevent;
+ option.onclick = ips_editor_events.prototype.font_format_option_onclick;
+
+ menu.style.width = this.font_obj.style.width;
+ menu.appendChild(option);
+ }
+ break;
+
+ case 'special':
+ for( var i in this.ips_special_items )
+ {
+ if ( typeof( this.ips_special_items[i] ) == 'function' )
+ {
+ continue;
+ }
+
+ var option = document.createElement('div');
+ var img = ( typeof this.ips_special_items[i][1] != 'undefined' ) ? ' ' : '';
+ option.innerHTML = img + this.ips_special_items[i][0];
+ option.className = 'rte-menu-face';
+ option.cmd = 'module_load',
+ option.loader_key = i.replace( 'cmd_loader_', '' );
+ option.editor_id = this.editor_id;
+ option.onmouseover = option.onclick = option.onmouseout = option.onmouseup = option.onmousedown = ips_editor_events.prototype.special_onmouse_event;
+
+ menu.style.width = this.special_obj.style.width;
+ menu.appendChild(option);
+ }
+ break;
+ case 'format':
+ for( var i in ips_format_items )
+ {
+ if ( typeof( ips_format_items[i] ) == 'function' )
+ {
+ continue;
+ }
+
+ var option = document.createElement('div');
+ var img = ( typeof ips_format_item_images[i] != 'undefined' ) ? ' ' : '';
+ option.innerHTML = img + ips_format_items[i];
+ option.className = 'rte-menu-face';
+ option.cmd = i.replace( 'cmd_', '' );
+ option.editor_id = this.editor_id;
+ option.onmouseover = option.onclick = option.onmouseout = option.onmouseup = option.onmousedown = ips_editor_events.prototype.special_onmouse_event;
+
+ menu.style.width = '130px';
+ menu.appendChild(option);
+ }
+ break;
+
+ case 'emoticons':
+ var table = document.createElement('table');
+ table.cellPadding = 0;
+ table.cellSpacing = 0;
+ table.border = 0;
+ //table.width = 'auto';
+
+ if ( this.is_ie )
+ {
+ table.style.paddingRight = '15px'; // Scrollbar fun
+ }
+
+ var i = 0;
+ var perrow = 3;
+
+ var tr = table.insertRow(-1);
+ var td = tr.insertCell(-1);
+ td.colSpan = perrow;
+ td.align = 'center';
+ td.cellPadding = 0;
+ td.innerHTML = '';
+
+ for( var emo in ips_smilie_items )
+ {
+ if ( i % perrow == 0 )
+ {
+ var tr = table.insertRow(-1);
+ }
+
+ i++;
+
+ var div = document.createElement('div');
+ var _tmp = ips_smilie_items[ emo ].split( "," );
+ var img = ' ';
+ div.innerHTML = img;
+
+ var option = tr.insertCell(-1);
+ option.className = 'rte-menu-emo';
+ option.appendChild(div);
+
+ option.cmd = obj.cmd;
+ option.editor_id = this.editor_id;
+ option.id = this.editor_id + '_emoticon_' + _tmp[0];
+ option.emo_id = _tmp[0];
+ option.emo_image = _tmp[1];
+ option.emo_code = emo;
+ option.onmouseover = option.onmouseout = option.onmouseup = option.onmousedown = ips_editor_events.prototype.menu_option_onmouseevent;
+ option.onclick = ips_editor_events.prototype.emoticon_onclick;
+ }
+
+ if ( i > 0 )
+ {
+ menu.style.width = 'auto';
+
+ if( this.is_ie )
+ {
+ menu.style.paddingRight = '15px'; // Scrollbar fun
+ }
+
+ menu.style.height = '200px';
+ menu.style.overflow = 'auto';
+ menu.style.overflowX = 'hidden';
+ menu.appendChild(table);
+ break;
+ }
+ else
+ {
+ // No emo's, but show the 'show all' link
+ menu.style.width = 'auto';
+ menu.style.height = '40px';
+ menu.style.overflow = 'auto';
+ menu.appendChild(table);
+ break;
+
+ // document.getElementById( this.editor_id + '_popup_' + obj.cmd ).style.display = 'hidden';
+ // document.getElementById( this.editor_id + '_popup_' + obj.cmd + '_menu' ).style.display = 'hidden';
+ }
+
+ case 'forecolor':
+ case 'backcolor':
+ var table = document.createElement('table');
+ table.cellPadding = 0;
+ table.cellSpacing = 0;
+ table.border = 0;
+ var i = 0;
+
+ for ( var hex in ips_primary_colors )
+ {
+ if ( typeof( ips_primary_colors[hex] ) == 'function' )
+ {
+ continue;
+ }
+
+ if ( i % 8 == 0 )
+ {
+ var tr = table.insertRow(-1);
+ }
+
+ i++;
+
+ var div = document.createElement('div');
+ div.style.backgroundColor = ips_primary_colors[hex];
+ div.innerHTML = ' ';
+ var option = tr.insertCell(-1);
+ option.className = 'rte-menu-color';
+ option.appendChild(div);
+
+ option.cmd = obj.cmd;
+ option.editor_id = this.editor_id;
+ option.colorname = ips_primary_colors[hex];
+ option.id = this.editor_id + '_color_' + ips_primary_colors[hex];
+ option.onmouseover = option.onmouseout = option.onmouseup = option.onmousedown = ips_editor_events.prototype.menu_option_onmouseevent;
+ option.onclick = ips_editor_events.prototype.color_cell_onclick;
+ }
+
+ menu.style.overflow = 'visible';
+ menu.appendChild(table);
+ break;
+ }
+
+ this.popups[ obj.cmd ] = this.control_obj.appendChild(menu);
+
+ ipsclass.set_unselectable( menu );
+ };
+
+ /**
+ * INIT Editor Button
+ * Initialize an editor button (bold, italic, etc)
+ *
+ * @param object Button DIV object
+ */
+ this.init_editor_button = function( obj )
+ {
+ obj.cmd = obj.id.replace( new RegExp( '^' + this.editor_id + '_cmd_(.+?)$' ), '$1' );
+ obj.editor_id = this.editor_id;
+
+ //-----------------------------------------
+ // Add to buttons array
+ //-----------------------------------------
+
+ this.buttons[ obj.cmd ] = obj;
+
+ //-----------------------------------------
+ // Set up defaults
+ //-----------------------------------------
+
+ obj.state = false;
+ obj.mode = 'normal';
+ obj.real_type = 'button';
+
+ obj.onclick = ips_editor_events.prototype.button_onmouse_event;
+ obj.onmousedown = ips_editor_events.prototype.button_onmouse_event;
+ obj.onmouseover = ips_editor_events.prototype.button_onmouse_event;
+ obj.onmouseout = ips_editor_events.prototype.button_onmouse_event;
+ };
+
+ /**
+ * Toggle menu context
+ * Toggles the menu's class for mouseover, select, etc
+ *
+ * @param object Menu object
+ * @param object state
+ */
+ this.set_menu_context = function(obj, state)
+ {
+ //-----------------------------------------
+ // Show HTML? Return...
+ //-----------------------------------------
+
+ if ( this._showing_html )
+ {
+ return false;
+ }
+
+ switch (obj.state)
+ {
+ case true:
+ {
+ this.editor_set_ctl_style(obj, 'menubutton', 'down');
+ break;
+ }
+
+ default:
+ {
+ switch (state)
+ {
+ case 'mouseout':
+ {
+ this.editor_set_ctl_style(obj, 'menubutton', 'normal');
+ break;
+ }
+ case 'mousedown':
+ {
+ this.editor_set_ctl_style(obj, 'menubutton', 'down');
+ break;
+ }
+ case 'mouseup':
+ case 'mouseover':
+ {
+ this.editor_set_ctl_style(obj, 'menubutton', 'hover');
+ break;
+ }
+ }
+ }
+ }
+ };
+
+ /**
+ * Toggle button context
+ * Toggles the menu's class for mouseover, select, etc
+ *
+ * @param object menu object
+ * @param object state
+ * @param object type
+ */
+ this.set_button_context = function(obj, state, type)
+ {
+ //-----------------------------------------
+ // Showing HTML?
+ //-----------------------------------------
+
+ if ( this._showing_html )
+ {
+ return false;
+ }
+
+ if (typeof type == 'undefined')
+ {
+ type = 'button';
+ }
+
+ if ( state == 'mousedown' && ( obj.cmd == 'undo' || obj.cmd == 'redo' ) )
+ {
+ return false;
+ }
+
+ switch (obj.state)
+ {
+ case true:
+ {
+ switch (state)
+ {
+ case 'mouseout':
+ {
+ this.editor_set_ctl_style(obj, 'button', 'selected');
+ break;
+ }
+ case 'mouseover':
+ case 'mousedown':
+ case 'mouseup':
+ {
+ this.editor_set_ctl_style(obj, type, 'down');
+ break;
+ }
+ }
+ break;
+ }
+ default:
+ {
+ switch (state)
+ {
+ case 'mouseout':
+ {
+ this.editor_set_ctl_style(obj, type, 'normal');
+ break;
+ }
+ case 'mousedown':
+ {
+ this.editor_set_ctl_style(obj, type, 'down');
+ break;
+ }
+ case 'mouseover':
+ case 'mouseup':
+ {
+ this.editor_set_ctl_style(obj, type, 'hover');
+ break;
+ }
+ }
+ break;
+ }
+ }
+ };
+
+ /**
+ * Sets the editor button control style
+ *
+ * @var object Button Object
+ * @var string Control Type
+ * @var string Control Mode
+ */
+ this.editor_set_ctl_style = function( obj, type, mode )
+ {
+ if ( obj.mode != mode )
+ {
+ //-----------------------------------------
+ // Add in -menu class
+ //-----------------------------------------
+
+ var extra = '';
+
+ if ( type == 'menu' )
+ {
+ extra = '-menu';
+ }
+ else if ( type == 'menubutton' )
+ {
+ extra = '-menubutton';
+ }
+
+ //-----------------------------------------
+ // Add in -color if it's a color box
+ //-----------------------------------------
+
+ extra += obj.colorname ? '-color' : '';
+
+ //-----------------------------------------
+ // Add in -emo if it's an emo
+ //-----------------------------------------
+
+ extra += obj.emo_id ? '-emo' : '';
+
+ //-----------------------------------------
+ // Set mote...
+ //-----------------------------------------
+
+ obj.mode = mode;
+
+ try
+ {
+ switch (mode)
+ {
+ case "normal":
+ {
+ // Normal
+ obj.className = 'rte-normal' + extra;
+ }
+ break;
+
+ case "hover":
+ {
+ // Hover
+ obj.className = 'rte-hover' + extra;
+ }
+ break;
+
+ case "selected":
+ case "down":
+ {
+ // On
+ obj.className = 'rte-selected' + extra;
+ }
+ break;
+ }
+ }
+ catch (e)
+ {
+ }
+ }
+ };
+
+ /**
+ * Format Text
+ *
+ * @var event Event Object
+ * @var string Formatted command
+ * @var string Formatting command extra
+ */
+ this.format_text = function(e, command, arg)
+ {
+ e = ipsclass.cancel_bubble( e, true );
+
+ //-----------------------------------------
+ // Special considerations...
+ //-----------------------------------------
+
+ if ( command.match( /resize_/ ) )
+ {
+ this.resize_editorbox( command.replace( /resize_(up|down)/, "$1" ) );
+ }
+
+ //-----------------------------------------
+ // Switch editor...
+ //-----------------------------------------
+
+ if ( command.match( /switcheditor/i ) )
+ {
+ switch_editor_mode( this.editor_id );
+ }
+
+ //-----------------------------------------
+ // Manually recording history?
+ //-----------------------------------------
+
+ if ( ! this.is_rte )
+ {
+ if ( command != 'redo' )
+ {
+ this.history_record_state( this.editor_get_contents() );
+ }
+ }
+
+ //-----------------------------------------
+ // Continue...
+ //-----------------------------------------
+
+ this.editor_check_focus();
+
+ if ( this[ command ] )
+ {
+ var return_val = this[ command ](e);
+ }
+ else
+ {
+ try
+ {
+ var return_val = this.apply_formatting( command, false, (typeof arg == 'undefined' ? true : arg) );
+ }
+ catch(e)
+ {
+ var return_val = false;
+ }
+ }
+
+ //-----------------------------------------
+ // Manually recording history?
+ //-----------------------------------------
+
+ if ( ! this.is_rte )
+ {
+ if ( command != 'undo' )
+ {
+ this.history_record_state( this.editor_get_contents() );
+ }
+ }
+
+ //-----------------------------------------
+ // Set context
+ //-----------------------------------------
+
+ this.set_context(command);
+
+ //-----------------------------------------
+ // Check focus
+ //-----------------------------------------
+
+ this.editor_check_focus();
+
+ return return_val;
+ };
+
+ /**
+ * Check spelling
+ */
+ this.spellcheck = function()
+ {
+ if ( this.is_moz || this.is_opera )
+ {
+ return false;
+ }
+ try
+ {
+ if ( this.rte_mode )
+ {
+ var tmpis = new ActiveXObject("ieSpell.ieSpellExtension").CheckDocumentNode( this.editor_document );
+ }
+ else
+ {
+ var tmpis = new ActiveXObject("ieSpell.ieSpellExtension").CheckAllLinkedDocuments( this.editor_document );
+ }
+ }
+ catch( exception )
+ {
+ if ( exception.number == -2146827859 )
+ {
+ if ( confirm( ips_language_array['js_rte_erroriespell'] ? ips_language_array['js_rte_erroriespell'] : "ieSpell not detected. Click Ok to go to download page." ) )
+ {
+ window.open("http://www.iespell.com/download.php", "DownLoad");
+ }
+ }
+ else
+ {
+ alert( ips_language_array['js_rte_errorliespell'] ? ips_language_array['js_rte_errorliespell'] : "Error Loading ieSpell: Exception " + exception.number);
+ }
+ }
+ };
+
+ /**
+ * Removes items that you don't wish to have
+ * @param string Command key
+ */
+ this.module_remove_item = function( key )
+ {
+ //-----------------------------------------
+ // Remove...
+ //-----------------------------------------
+
+ var tmp = this.ips_special_items;
+
+ this.ips_special_items = new Array();
+
+ for( var i in tmp )
+ {
+ if ( i != 'cmd_loader_' + key )
+ {
+ this.ips_special_items[ i ] = tmp[i];
+ }
+ }
+ };
+
+ /**
+ * Add to special items array
+ * @param string Command key
+ * @param string Menu text
+ * @param string Menu Image
+ * @param string Javascript code to eval (Optional)
+ */
+ this.module_add_item = function( key, text, image, evalcode )
+ {
+ //-----------------------------------------
+ // Add...
+ //-----------------------------------------
+
+ this.ips_special_items[ 'cmd_loader_' + key ] = new Array( text, image, evalcode );
+ };
+
+ /**
+ * Load module
+ * @param object Object
+ * @param object Mouse event
+ * @param string Loader function
+ */
+ this.module_load = function( obj, e, loader_key )
+ {
+ if ( ! loader_key )
+ {
+ return false;
+ }
+
+ e = ipsclass.cancel_bubble( e, true );
+
+ this.editor_check_focus();
+
+ this.preserve_ie_range();
+
+ menu_action_close();
+
+ //-----------------------------------------
+ // Extra args?
+ //-----------------------------------------
+
+ var _m = loader_key.match( /\{(.+?)\}$/ );
+ var _args = '';
+
+ try
+ {
+ if ( _m[1] )
+ {
+ _args = _m[1];
+ }
+ }
+ catch(internetexplorer)
+ {
+
+ }
+
+ //-----------------------------------------
+ // Eval or show in control bar?
+ //-----------------------------------------
+
+ if ( typeof this.ips_special_items[ 'cmd_loader_' + loader_key ][2] != "undefined" )
+ {
+ eval( this.ips_special_items[ 'cmd_loader_' + loader_key ][2] );
+ return false
+ }
+ else
+ {
+ this.module_show_control_bar( loader_key, _args );
+ }
+ };
+
+ /**
+ * Show new control bar
+ *
+ * @param type Type of control bar (must be same as function key)
+ */
+ this.module_show_control_bar = function( type, _args )
+ {
+ if ( ! this.control_obj )
+ {
+ return;
+ }
+
+ type = type.replace( /(\{.+?\})$/, '' );
+ _args = ( typeof( _args ) != 'undefined' ) ? _args : '';
+
+ //-----------------------------------------
+ // Already open? Kill it
+ //-----------------------------------------
+
+ if ( this.current_bar_object )
+ {
+ this.module_remove_control_bar();
+ }
+
+ //-----------------------------------------
+ // Spawn new DIV object
+ //-----------------------------------------
+
+ var newdiv = document.createElement('div');
+
+ newdiv.id = this.editor_id + '_htmlblock_' + type + '_menu';
+ newdiv.style.display = '';
+ newdiv.className = 'rte-buttonbar';
+ newdiv.style.zIndex = parseInt( this.control_obj.style.zIndex ) + 1;
+ newdiv.style.position = 'absolute';
+ newdiv.style.width = '320px';
+ newdiv.style.height = '400px';
+ newdiv.style.top = ipsclass.get_obj_toppos( this.mainbar ) + 'px';
+
+ var _left = ipsclass.get_obj_leftpos( this.mainbar ) - ( parseInt(newdiv.style.width) + 10 );
+
+ if ( _left < 1 )
+ {
+ _left = ipsclass.get_obj_leftpos( this.mainbar );
+ }
+
+ newdiv.style.left = ipsclass.get_obj_leftpos( this.mainbar ) - ( parseInt(newdiv.style.width) + 10 ) + 'px';
+ newdiv.style.left = _left + 'px';
+
+ var tmpheight = parseInt(newdiv.style.height) - 16;
+ newdiv.innerHTML = this.module_wrap_html_panel( "" );
+
+ //-----------------------------------------
+ // Add and show
+ //-----------------------------------------
+
+ this.mainbar.appendChild(newdiv);
+
+ if ( is_ie )
+ {
+ document.getElementById( this.editor_id + '_iframeblock_' + type + '_menu' ).style.backgroundColor = 'transparent';
+ document.getElementById( this.editor_id + '_iframeblock_' + type + '_menu' ).allowTransparency = true;
+ }
+
+ ipsclass.set_unselectable( newdiv );
+
+ //-----------------------------------------
+ // INIT Drag
+ //-----------------------------------------
+
+ Drag.init( document.getElementById( this.editor_id + '_pallete-handle' ), newdiv );
+
+ this.current_bar_object = newdiv;
+ };
+
+ /**
+ * Remove control bar
+ * Removes the control bar.
+ */
+ this.module_remove_control_bar = function()
+ {
+ if ( ! this.current_bar_object )
+ {
+ return;
+ }
+
+ //-----------------------------------------
+ // Kill old bar
+ //-----------------------------------------
+
+ this.mainbar.removeChild( this.current_bar_object );
+
+ //-----------------------------------------
+ // Reset bar object
+ //-----------------------------------------
+
+ this.current_bar_object = null;
+ };
+
+ /**
+ * Wrap HTML block with basic control panel stuff
+ */
+ this.module_wrap_html_panel = function( html )
+ {
+ var newhtml = "";
+ newhtml += " ";
+ newhtml += "
";
+ newhtml += "
";
+ newhtml += "
";
+ newhtml += "
";
+ newhtml += "
" + html + "
";
+ newhtml += "
";
+ newhtml += "
";
+
+ return newhtml;
+ };
+
+ /**
+ * Resize editor
+ *
+ * @param string Up (smaller) Down (Larger)
+ */
+
+ this.resize_editorbox = function( direction )
+ {
+ var inc_value = 100;
+ var current_height = parseInt( this.editor_box.style.height );
+ var new_height = 0;
+ current_height = current_height ? current_height : 300;
+
+ //-----------------------------------------
+ // If we're not going smaller than 300...
+ //-----------------------------------------
+
+ if ( current_height >= 50 )
+ {
+ if ( direction == 'up' )
+ {
+ new_height = current_height - inc_value;
+ }
+ else
+ {
+ new_height = current_height + inc_value;
+ }
+
+ if ( new_height > 249 )
+ {
+ this.editor_box.style.height = new_height + 'px';
+
+ ipsclass.my_setcookie( 'ips_rte_height', new_height, 1 );
+ }
+ }
+ };
+
+ /**
+ * Make HTML entities safe
+ * @param string Raw HTML
+ * @return string Treated HTML
+ */
+ this.htmlspecialchars = function( html )
+ {
+ html = html.replace(/&/g, "&");
+ html = html.replace(/"/g, """);
+ html = html.replace(//g, ">");
+
+ return html;
+ };
+
+ /**
+ * Make HTML entities unsafe
+ * @param string Raw HTML
+ * @return string Treated HTML
+ */
+ this.unhtmlspecialchars = function( html )
+ {
+ html = html.replace( /"/g, '"' );
+ html = html.replace( /</g , '<' );
+ html = html.replace( />/g , '>' );
+ html = html.replace( /&/g , '&' );
+
+ return html;
+ };
+
+ /**
+ * Remove HTML tags. Ugly.
+ * @param string Raw HTML
+ * @return string Treated HTML
+ */
+ this.strip_html = function( html )
+ {
+ html = html.replace( /<\/?([^>]+?)>/ig, "");
+ return html;
+ };
+
+ /**
+ * Remove empty HTML tags. Ugly.
+ * @param string Raw HTML
+ * @return string Treated HTML
+ */
+ this.strip_empty_html = function( html )
+ {
+ html = html.replace( '<([^>]+?)>([^>]+?)>', "");
+ return html;
+ };
+
+ /**
+ * Format HTML a bit nicely
+ */
+ this.clean_html = function( t )
+ {
+ if ( t == "" || typeof t == 'undefined' )
+ {
+ return t;
+ }
+
+ //-------------------------------
+ // Sort out BR tags
+ //-------------------------------
+
+ t = t.replace( / /ig, " ");
+
+ //-------------------------------
+ // Remove empty tags
+ //-------------------------------
+
+ t = t.replace( /
(\s+?)?<\/p>/ig, "");
+
+ //-------------------------------
+ // HR issues
+ //-------------------------------
+
+ t = t.replace( /
<\/p>/ig , " ");
+ t = t.replace( / <\/p>
<\/p>/ig, "
");
+
+ //-------------------------------
+ // Attempt to fix some formatting
+ // issues....
+ //-------------------------------
+
+ t = t.replace( /<(p|div)([^&]*)>/ig , "\n<$1$2>\n" );
+ t = t.replace( /<\/(p|div)([^&]*)>/ig , "\n$1$2>\n");
+ t = t.replace( / (?!<\/td)/ig , " \n" );
+
+ //-------------------------------
+ // And some table issues...
+ //-------------------------------
+
+ t = t.replace( /<\/(td|tr|tbody|table)>/ig , "$1>\n");
+ t = t.replace( /<(tr|tbody|table(.+?)?)>/ig , "<$1>\n" );
+ t = t.replace( /<(td(.+?)?)>/ig , "\t<$1>" );
+
+ //-------------------------------
+ // Newlines
+ //-------------------------------
+
+ t = t.replace( / <\/p>/ig , " ");
+ t = t.replace( / /ig , " \n");
+ t = t.replace( / /ig , " \n");
+
+ t = t.replace( /
\n<\/td>/ig , " " );
+
+ //-----------------------------------------
+ // Script tags
+ //-----------------------------------------
+
+ t = t.replace( /", "i" ) ) )
+ {
+ i++;
+
+ if ( i >= max_iteration )
+ {
+ break;
+ }
+ else
+ {
+ text_blocks[ text_blocks.length ] = _match[1];
+ source_code = source_code.replace( _match[0], '' );
+ }
+ }
+
+ try
+ {
+ if ( text_blocks.length )
+ {
+ for ( i = 0 ; i < text_blocks.length ; i++ )
+ {
+ eval( text_blocks[ i ] );
+ }
+ }
+ }
+ catch(error)
+ {
+ }
+};
+
+/*--------------------------------------------*/
+// IPB thinks we can use fancy JS, lets see...
+/*--------------------------------------------*/
+
+try
+{
+ if ( use_enhanced_js )
+ {
+ use_enhanced_js = ajax_request.prototype.xml_init() ? 1 : 0;
+ }
+}
+catch(error)
+{
+ var use_enhanced_js = 0;
+}
\ No newline at end of file
diff --git a/Development/javascript_uncompressed/skin_acp/clientscripts/index.html b/Development/javascript_uncompressed/skin_acp/clientscripts/index.html
new file mode 100644
index 00000000..b49fc27d
--- /dev/null
+++ b/Development/javascript_uncompressed/skin_acp/clientscripts/index.html
@@ -0,0 +1 @@
+
Invision Power Board - Bulletin Board System
403: Invision Power Board -> Forbidden
You have reached this Page in error, please use
your back button to return to Invision Board.
Invision Power Board
\ No newline at end of file
diff --git a/Development/javascript_uncompressed/skin_acp/clientscripts/ipd_cell_select.js b/Development/javascript_uncompressed/skin_acp/clientscripts/ipd_cell_select.js
new file mode 100644
index 00000000..3b2a9603
--- /dev/null
+++ b/Development/javascript_uncompressed/skin_acp/clientscripts/ipd_cell_select.js
@@ -0,0 +1,311 @@
+//------------------------------------------------------------------------------
+// IPS JS: Cell select
+// (c) 2005 Invision Power Services, Inc.
+// http://www.invisionpower.com
+// Matt Mecham (29/11/05)
+//------------------------------------------------------------------------------
+
+var _cell_select;
+
+/*-------------------------------------------------------------------------*/
+// Initiate object
+/*-------------------------------------------------------------------------*/
+
+function cell_select()
+{
+ /**
+ * CSS: Table cell row OFF
+ *
+ * @var INT
+ */
+ this.css_row_off = 'tablerow1';
+
+ /**
+ * CSS: Table cell row ON
+ *
+ * @var string
+ */
+ this.css_row_on = 'tablerow2selected';
+
+ /**
+ * String: TR row ID part
+ *
+ * @var string
+ */
+ this.row_tr_id = 'arow';
+
+ /**
+ * String: Checkbox ID part
+ *
+ * @var string
+ */
+ this.row_checkbox_id = 'acid';
+
+ /**
+ * String: ID name of toggle all box
+ *
+ * @var string
+ */
+ this.toggle_all_name = 'cellselect-cball';
+
+ /**
+ * String: ID of toggle all box
+ *
+ * @var object
+ */
+ this.toggle_all_id = '';
+
+ /**
+ * String: Flag to see if we have a toggle all box
+ *
+ * @var object
+ */
+ this.toggle_all_flag = 0;
+
+ /**
+ * Array: Selected IDs array
+ *
+ * @var array
+ */
+ this.selected_ids = new Array();
+
+ /**
+ * Array: Total possible cbs
+ *
+ * @var array
+ */
+ this.total_ids = 0;
+
+ /**
+ * Store CSS rows for the original row
+ */
+ this.store_css_row = new Array();
+};
+
+/*-------------------------------------------------------------------------*/
+// Initiate object
+/*-------------------------------------------------------------------------*/
+
+cell_select.prototype.init = function()
+{
+ //----------------------------------
+ // Check for toggle all box
+ //----------------------------------
+
+ try
+ {
+ this.toggle_all_id = document.getElementById( this.toggle_all_name );
+ this.toggle_all_flag = 1;
+ this.toggle_all_id.checked = false;
+ }
+ catch(error)
+ {
+ this.toggle_all_flag = 0;
+ }
+
+ //----------------------------------
+ // Check checked boxes
+ //----------------------------------
+
+ var checkboxes = document.getElementsByTagName('INPUT');
+
+ _cell_select = this;
+
+ //----------------------------------
+ // Sort through and grab links
+ //----------------------------------
+
+ for ( var i = 0 ; i < checkboxes.length ; i++ )
+ {
+ try
+ {
+ if ( ! checkboxes[i].id )
+ {
+ continue;
+ }
+
+ if ( checkboxes[i].getAttribute('type') != 'checkbox' )
+ {
+ continue;
+ }
+ }
+ catch(error)
+ {
+ continue;
+ }
+
+ var cbid = checkboxes[i].id;
+ var cbname = cbid.replace( /^(.*)-(\d+)$/, "$1" );
+ var cbnum = this.get_id_from_text( checkboxes[i].id );
+
+ //----------------------------------
+ // Work with it?
+ //----------------------------------
+
+ if ( cbname == this.row_checkbox_id )
+ {
+ if ( checkboxes[i].getAttribute('checked') || checkboxes[i].checked )
+ {
+ this.row_change_color( cbnum );
+ this.selected_ids[ cbnum ] = 1;
+ this.total_ids++;
+ }
+ else
+ {
+ this.selected_ids[ cbnum ] = 0;
+ this.total_ids++;
+ }
+ }
+ }
+};
+
+/*-------------------------------------------------------------------------*/
+// Toggle all row has been clicked
+/*-------------------------------------------------------------------------*/
+
+cell_select.prototype.row_toggle_all = function()
+{
+ //----------------------------------
+ // Using a toggle all?
+ //----------------------------------
+
+ if ( ! this.toggle_all_flag )
+ {
+ return;
+ }
+
+ //----------------------------------
+ // Grab initial state
+ //----------------------------------
+
+ var checkstate = this.toggle_all_id.checked;
+
+ //----------------------------------
+ // Spread the love
+ //----------------------------------
+
+ var checkboxes = document.getElementsByTagName('INPUT');
+
+ //----------------------------------
+ // Sort through and grab links
+ //----------------------------------
+
+ for ( var i = 0 ; i < checkboxes.length ; i++ )
+ {
+ try
+ {
+ if ( ! checkboxes[i].id )
+ {
+ continue;
+ }
+
+ if ( checkboxes[i].getAttribute('type') != 'checkbox' )
+ {
+ continue;
+ }
+ }
+ catch(error)
+ {
+ continue;
+ }
+
+ var cbid = checkboxes[i].id;
+ var cbname = cbid.replace( /^(.*)-(\d+)$/, "$1" );
+ var cbnum = this.get_id_from_text( checkboxes[i].id );
+
+ //----------------------------------
+ // Work with it?
+ //----------------------------------
+
+ if ( cbname == this.row_checkbox_id )
+ {
+ checkboxes[i].checked = checkstate;
+ this.selected_ids[ cbnum ] = checkstate ? 0 : 1;
+ this.row_change_color( cbnum );
+ this.selected_ids[ cbnum ] = checkstate ? 1 : 0;
+ }
+ }
+};
+
+/*-------------------------------------------------------------------------*/
+// A row has been clicked
+/*-------------------------------------------------------------------------*/
+
+cell_select.prototype.row_clicked = function( row_id )
+{
+ //----------------------------------
+ // Change color
+ //----------------------------------
+
+ this.row_change_color( row_id );
+
+ //----------------------------------
+ // Reset flag
+ //----------------------------------
+
+ this.selected_ids[ row_id ] = ( this.selected_ids[ row_id ] ) ? 0 : 1;
+
+ //----------------------------------
+ // Test toggle all box
+ //----------------------------------
+
+ if ( this.toggle_all_flag )
+ {
+ var c = 0;
+
+ for( var i in this.selected_ids )
+ {
+ if ( this.selected_ids[i] )
+ {
+ c++;
+ }
+ }
+
+ //----------------------------------
+ // Number of 'on' not equal to total?
+ //----------------------------------
+
+ if ( c != this.total_ids )
+ {
+ this.toggle_all_id.checked = false;
+ }
+ else
+ {
+ this.toggle_all_id.checked = true;
+ }
+ }
+};
+
+/*-------------------------------------------------------------------------*/
+// Change color
+/*-------------------------------------------------------------------------*/
+
+cell_select.prototype.row_change_color = function( row_id )
+{
+ //----------------------------------
+ // Get Row TDs...
+ //----------------------------------
+
+ var tds = document.getElementById( this.row_tr_id + '-' + row_id ).getElementsByTagName('TD');
+
+ //----------------------------------
+ // Sort through and grab links
+ //----------------------------------
+
+ var _cell = ( this.store_css_row[ row_id ] ) ? this.store_css_row[ row_id ] : this.css_row_off;
+
+ for ( var i = 0 ; i < tds.length ; i++ )
+ {
+ tds[i].className = ( this.selected_ids[ row_id ] ) ? _cell : this.css_row_on;
+ }
+};
+
+
+/*-------------------------------------------------------------------------*/
+// Grab ID from string
+/*-------------------------------------------------------------------------*/
+
+cell_select.prototype.get_id_from_text = function( id )
+{
+ return id.replace( /.*(?:\-|_)(\d+)/, "$1" );
+};
\ No newline at end of file
diff --git a/Development/javascript_uncompressed/skin_acp/clientscripts/ipd_dragmove.js b/Development/javascript_uncompressed/skin_acp/clientscripts/ipd_dragmove.js
new file mode 100644
index 00000000..ea2f2251
--- /dev/null
+++ b/Development/javascript_uncompressed/skin_acp/clientscripts/ipd_dragmove.js
@@ -0,0 +1,910 @@
+//------------------------------------------------------------------------------
+// IPS JS: Drag Move
+// (c) 2005 Invision Power Services, Inc.
+// http://www.invisionpower.com
+// Matt Mecham (27/07/05)
+//------------------------------------------------------------------------------
+
+var drag_move = new dragmove();
+
+/*-------------------------------------------------------------------------*/
+// Initiate object
+/*-------------------------------------------------------------------------*/
+
+function dragmove()
+{
+ /*
+ * Portion of ID name without "-{id}" for
+ * drag handles (object which initiates drag)
+ *
+ * @var string
+ */
+ this.var_drag_handle_id_text = null;
+
+ /*
+ * URL to redirect to after change
+ *
+ * @var string
+ */
+ this.var_bounce_url = null;
+
+ /*
+ * Portion of ID name without "-{id}" for
+ * hidden drag elements. These are HTML
+ * blobs which actually get made visible
+ * and are dragged.
+ *
+ * @var string
+ */
+ this.var_drag_draggable_id_text = null;
+
+ /*
+ * Portion of ID name without "-{id}" for
+ * drag objects (the actual drag container)
+ *
+ * @var string
+ */
+ this.var_drag_object_id_text = null;
+
+ /*
+ * Portion of ID name for the
+ * row which is altered when the drag is
+ * started AND a TARGET copy is created
+ * over it when dragging started
+ *
+ * @var string
+ */
+ this.var_original_row_text = null;
+
+ /*
+ * Current dragged ID
+ *
+ * @var integer
+ */
+ this.current_id = null;
+
+ /*
+ * Drag in progress
+ *
+ * @var integer
+ */
+ this._drag_in_progress = null;
+
+ /**
+ * Target IDs (Populated in DHTML)
+ * Must be in the format as follows:
+ *
+ *
+ * @var array
+ */
+ this.var_target_ids = new Array();
+
+ /**
+ * Parent IDs (Populated in DHTML)
+ * Must be in the format as follows:
+ *
+ *
+ * @var array
+ */
+ this.var_parent_ids = new Array();
+
+ /**
+ * Process parent IDs?
+ * Turn off to not restrict actions
+ * based on parents
+ *
+ * @var boolean
+ */
+ this.var_parent_process = 1;
+
+ /*
+ * CSS classname of layer that is
+ * drawn above the row when a move
+ * is started
+ *
+ * @var string
+ */
+ this.var_hide_row_classname = 'dragmove-hide';
+
+ /*
+ * CSS classname of target mouseover
+ *
+ * @var string
+ */
+ this.var_target_over_classname = 'tablerow3';
+
+ /*
+ * CSS classname of target mouseout
+ *
+ * @var string
+ */
+ this.var_target_out_classname = 'tablerow2';
+
+ /*
+ * ID of target over
+ * set by mouseover. cleared by mouseout
+ *
+ * @var string
+ */
+ this.var_target_over_id = null;
+
+ /*
+ * URL of Ajax request
+ *
+ * @var string
+ */
+ this.var_ajax_url = null;
+
+ /*
+ * Array of FAKE TARGETS
+ *
+ * @var array
+ */
+ this._TARGETS = new Array();
+
+ /*
+ * Array of FAKE TARGETS DImensions
+ *
+ * @var array
+ */
+ this.dims = new Array();
+
+ /*
+ * Array of unmoveable objects
+ *
+ * @var array
+ */
+ this.UNMOVEABLES = new Array();
+
+ /*
+ * ID of "Unmoveable" alert object
+ *
+ * @var array
+ */
+ this.UNMOVEABLES_id = 'dragmove-unmoveable';
+
+ /*
+ * Array of ALL parent ids for a certain ID
+ * Traversing up the parent tree
+ *
+ * var @array
+ */
+ this.parent_id_tree = new Array();
+
+ /*
+ * Array of ALL children ids for a certain ID
+ * Traversing up the parent tree
+ *
+ * var @array
+ */
+ this.child_id_tree = new Array();
+
+ /*
+ * Array of ALL children ids / parent
+ * structure
+ *
+ * var @array
+ */
+ this.child_id_array = new Array();
+};
+
+/*-------------------------------------------------------------------------*/
+// Initiate draggable objects
+/*-------------------------------------------------------------------------*/
+
+dragmove.prototype.drag_init = function()
+{
+ //----------------------------------
+ // Get page links...
+ // Gah.. another safari bug
+ //----------------------------------
+
+ var draghandles = document.getElementsByTagName('*');
+
+ //----------------------------------
+ // Sort through and grab topic links
+ //----------------------------------
+
+ for ( var i = 0 ; i <= draghandles.length ; i++ )
+ {
+ try
+ {
+ if ( ! draghandles[i].id )
+ {
+ continue;
+ }
+ }
+ catch(e)
+ {
+ continue;
+ }
+
+ var linkid = draghandles[i].id;
+ var linkname = linkid.replace( /^(.*)-(\d+)$/, "$1" );
+ var thisid = this.get_id_from_text( draghandles[i].id );
+
+ //----------------------------------
+ // SET UP DRAG HANDLES
+ //----------------------------------
+
+ if ( linkname == this.var_drag_handle_id_text )
+ {
+ var drag_main_obj = document.getElementById( this.var_drag_draggable_id_text + '-' + thisid );
+ var drag_handle_obj = document.getElementById( this.var_drag_handle_id_text + '-' + thisid );
+
+ draghandles[i].style.cursor = "move";
+
+ Drag.init( drag_handle_obj, drag_main_obj );
+
+ drag_main_obj.onDrag = function(x, y, e) { dragmove_events.prototype.event_drag_ging( x, y, e ); };
+ drag_main_obj.onDragStart = function(x, y, e) { dragmove_events.prototype.event_drag_start( x, y, e ); };
+ drag_main_obj.onDragEnd = function(x, y, e) { dragmove_events.prototype.event_drag_end( x, y, e ); };
+
+ //----------------------------------
+ // This has to be after Drag.init
+ // to replace mouseover handler
+ //----------------------------------
+
+ drag_handle_obj.onmouseover = dragmove_events.prototype.event_mouseover;
+ drag_handle_obj.onmouseout = dragmove_events.prototype.event_mouseout;
+ }
+ }
+
+ //----------------------------------
+ // Create child / parent structure
+ //----------------------------------
+
+ if ( this.var_parent_ids.length )
+ {
+ for( var i in this.var_parent_ids )
+ {
+ if ( ! this.child_id_array[ this.var_parent_ids[i] ] )
+ {
+ this.child_id_array[ this.var_parent_ids[i] ] = new Array();
+ }
+
+ this.child_id_array[ this.var_parent_ids[i] ][ this.child_id_array[ this.var_parent_ids[i] ].length ] = i;
+ }
+ }
+};
+
+/*-------------------------------------------------------------------------*/
+// Add ID to UNMOVEABLES array
+/*-------------------------------------------------------------------------*/
+
+dragmove.prototype.get_parents_array = function( root_tid )
+{
+ if ( this.var_parent_ids[ root_tid ] )
+ {
+ this.parent_id_tree[ this.parent_id_tree.length ] = this.var_parent_ids[ root_tid ];
+
+ this.get_parents_array( this.var_parent_ids[ root_tid ] );
+ }
+};
+
+/*-------------------------------------------------------------------------*/
+// Add ID to UNMOVEABLES array
+/*-------------------------------------------------------------------------*/
+
+dragmove.prototype.get_children_array = function( root_tid )
+{
+ if ( this.child_id_array[ root_tid ] )
+ {
+ for( var i in this.child_id_array[ root_tid ] )
+ {
+ this.child_id_tree[ this.child_id_tree.length ] = this.child_id_array[ root_tid ][i];
+
+ this.get_children_array( this.child_id_array[ root_tid ][i] );
+ }
+ }
+};
+
+/*-------------------------------------------------------------------------*/
+// Add ID to UNMOVEABLES array
+/*-------------------------------------------------------------------------*/
+
+dragmove.prototype.add_id_to_unmoveables = function( tid )
+{
+ this.UNMOVEABLES[ tid ] = tid;
+};
+
+/*-------------------------------------------------------------------------*/
+// Add ID to target array
+/*-------------------------------------------------------------------------*/
+
+dragmove.prototype.add_id_to_targets = function( tid )
+{
+ this.var_target_ids[ tid ] = 1;
+};
+
+/*-------------------------------------------------------------------------*/
+// Add ID to target array
+/*-------------------------------------------------------------------------*/
+
+dragmove.prototype.add_id_to_parents = function( tid, parent_id )
+{
+ this.var_parent_ids[ tid ] = parent_id == 'root' ? 0 : parseInt(parent_id);
+};
+
+/*--------------------------------------------*/
+// Get TID from ID
+/*--------------------------------------------*/
+
+dragmove.prototype.get_id_from_text = function( id )
+{
+ return id.replace( /.*\-(\d+)/, "$1" );
+};
+
+/*-------------------------------------------------------------------------*/
+// Initiate events object
+/*-------------------------------------------------------------------------*/
+
+function dragmove_events()
+{
+
+};
+
+/*-------------------------------------------------------------------------*/
+// TARGET EVENT: Mouseover
+/*-------------------------------------------------------------------------*/
+
+dragmove_events.prototype.event_TARGET_mouseover = function(e)
+{
+ //-------------------------------
+ // Already over a target
+ //-------------------------------
+
+ if ( drag_move.var_target_over_id )
+ {
+ return false;
+ }
+
+ //-------------------------------
+ // Not dragging?
+ //-------------------------------
+
+ if ( ! drag_move._drag_in_progress )
+ {
+ return false;
+ }
+
+ //-------------------------------
+ // No? Get one then
+ //-------------------------------
+
+ drag_move.var_target_over_id = drag_move.get_id_from_text( this.id );
+
+ //-------------------------------
+ // Can we actually mouse over this?
+ // Check parents to make sure we're not
+ // trying to move a child into its existing
+ // parent. Also don't allow to drop over
+ // oneself
+ //-------------------------------
+
+ if ( drag_move.var_parent_process && drag_move.current_id )
+ {
+ //-------------------------------
+ // Move into self
+ //-------------------------------
+
+ if ( drag_move.var_target_over_id == drag_move.current_id )
+ {
+ //-------------------------------
+ // Yeah.. so don't do anything
+ //-------------------------------
+
+ drag_move.var_target_over_id = null;
+ return false;
+ }
+
+ //-------------------------------
+ // Move into current parent
+ //-------------------------------
+
+ if ( drag_move.var_target_over_id == drag_move.var_parent_ids[ drag_move.current_id ] )
+ {
+ //-------------------------------
+ // Yeah.. so don't do anything
+ //-------------------------------
+
+ drag_move.var_target_over_id = null;
+ return false;
+ }
+
+ //-------------------------------
+ // Make sure we're not moving into
+ // own parents
+ //-------------------------------
+
+ drag_move.child_id_tree = new Array();
+
+ drag_move.get_children_array( drag_move.current_id );
+
+ // Add in current ID
+ drag_move.child_id_tree[ drag_move.child_id_tree.length ] = drag_move.current_id;
+
+ for( var i in drag_move.child_id_tree )
+ {
+ if ( drag_move.var_target_over_id == drag_move.child_id_tree[i] )
+ {
+ //-------------------------------
+ // Yeah.. so don't do anything
+ //-------------------------------
+
+ drag_move.var_target_over_id = null;
+ return false;
+ }
+ }
+ }
+
+ var target_obj = document.getElementById( drag_move.var_original_row_text + '-' + drag_move.var_target_over_id );
+
+ //-------------------------------
+ // Store old classname...
+ //-------------------------------
+
+ drag_move.var_target_out_classname = target_obj.className;
+
+ //-------------------------------
+ // Change classname...
+ //-------------------------------
+
+ target_obj.className = drag_move.var_target_over_classname;
+};
+
+/*-------------------------------------------------------------------------*/
+// TARGET EVENT: Mouseout
+/*-------------------------------------------------------------------------*/
+
+dragmove_events.prototype.event_TARGET_mouseout = function(e)
+{
+ //-------------------------------
+ // Not touched a target?
+ //-------------------------------
+
+ if ( ! drag_move.var_target_over_id )
+ {
+ return false;
+ }
+
+ //-------------------------------
+ // Not dragging?
+ //-------------------------------
+
+ if ( ! drag_move._drag_in_progress )
+ {
+ return false;
+ }
+
+ //-------------------------------
+ // Get obj
+ //-------------------------------
+
+ var target_obj = document.getElementById( drag_move.var_original_row_text + '-' + drag_move.var_target_over_id );
+
+ //-------------------------------
+ // Store old classname...
+ //-------------------------------
+
+ target_obj.className = drag_move.var_target_out_classname;
+
+ //-------------------------------
+ // Clear target ID
+ //-------------------------------
+
+ drag_move.var_target_over_id = null;
+};
+
+/*-------------------------------------------------------------------------*/
+// MAIN EVENT: Mouseover
+/*-------------------------------------------------------------------------*/
+
+dragmove_events.prototype.event_mouseover = function(e)
+{
+ //-------------------------------
+ // Already dragging?
+ //-------------------------------
+
+ if ( drag_move.current_id )
+ {
+ return false;
+ }
+
+ //-------------------------------
+ // Unmoveable?
+ //-------------------------------
+
+ var check_for_id = drag_move.UNMOVEABLES[ drag_move.get_id_from_text( this.id ) ];
+
+ if ( check_for_id )
+ {
+ var alert_object = null;
+
+ //-------------------------------
+ // Attempt to get DIV
+ //-------------------------------
+
+ try
+ {
+ alert_object = document.getElementById( drag_move.UNMOVEABLES_id );
+ }
+ catch(error)
+ {
+ drag_move.UNMOVEABLES_id = null;
+ }
+
+ //-------------------------------
+ // Yeah, so draw alert and return
+ //-------------------------------
+
+ if ( alert_object )
+ {
+ var drag_root_obj = document.getElementById( drag_move.var_drag_handle_id_text + '-' + check_for_id );
+
+ alert_object.style.top = ipsclass.get_obj_toppos( drag_root_obj ) - 4 + 'px';
+ alert_object.style.left = ipsclass.get_obj_leftpos( drag_root_obj ) + 22 + 'px';
+ alert_object.style.position = 'absolute';
+ alert_object.style.display = '';
+ }
+
+ return false;
+ }
+
+ //-------------------------------
+ // No? Get one then
+ //-------------------------------
+
+ drag_move.current_id = drag_move.get_id_from_text( this.id );
+};
+
+/*-------------------------------------------------------------------------*/
+// MAIN EVENT: Mouseout
+/*-------------------------------------------------------------------------*/
+
+dragmove_events.prototype.event_mouseout = function(e)
+{
+ //-------------------------------
+ // Unmoveable?
+ //-------------------------------
+
+ var check_for_id = drag_move.UNMOVEABLES[ drag_move.get_id_from_text( this.id ) ];
+
+ if ( check_for_id )
+ {
+ var alert_object = null;
+
+ //-------------------------------
+ // Attempt to get DIV
+ //-------------------------------
+
+ try
+ {
+ alert_object = document.getElementById( drag_move.UNMOVEABLES_id );
+ }
+ catch(error)
+ {
+ drag_move.UNMOVEABLES_id = null;
+ }
+
+ //-------------------------------
+ // Yeah, so draw alert and return
+ //-------------------------------
+
+ if ( alert_object )
+ {
+ alert_object.style.display = 'none';
+ }
+
+ return false;
+ }
+
+ //-------------------------------
+ // Release current drag ID
+ // only if a drag is not in
+ // progress
+ //-------------------------------
+
+ if ( ! drag_move._drag_in_progress )
+ {
+ drag_move.current_id = null;
+ }
+};
+
+/*-------------------------------------------------------------------------*/
+// DRAG EVENT: DRAG IN PROGRESS (No, not men in dresses)
+/*-------------------------------------------------------------------------*/
+
+dragmove_events.prototype.event_drag_ging = function( x, y )
+{
+ if ( is_ie )
+ {
+ var bingo = 0;
+
+ if ( drag_move.var_target_ids.length )
+ {
+ for ( var i in drag_move.var_target_ids )
+ {
+ if ( x >= drag_move.dims[ i ]['x1']
+ && x <= drag_move.dims[ i ]['x2']
+ && y >= drag_move.dims[ i ]['y1']
+ && y <= drag_move.dims[ i ]['y2']
+ )
+ {
+ bingo = 1;
+ this.id = i;
+ dragmove_events.prototype.event_TARGET_mouseover();
+ break;
+ }
+ }
+ }
+
+ if ( ! bingo )
+ {
+ dragmove_events.prototype.event_TARGET_mouseout();
+ }
+ }
+};
+
+/*-------------------------------------------------------------------------*/
+// DRAG START: Gentlemen, start your dresses!
+/*-------------------------------------------------------------------------*/
+
+dragmove_events.prototype.event_drag_start = function( x, y )
+{
+ //-------------------------------
+ // Time for hidden div to make
+ // a showing...
+ //-------------------------------
+
+ if ( drag_move.current_id )
+ {
+ var drag_main_obj = document.getElementById( drag_move.var_drag_draggable_id_text + '-' + drag_move.current_id );
+ var drag_root_obj = document.getElementById( drag_move.var_drag_object_id_text + '-' + drag_move.current_id );
+ var drag_orig_obj = document.getElementById( drag_move.var_original_row_text + '-' + drag_move.current_id );
+
+ //-------------------------------
+ // For some reason, Safari wants
+ // to be relative..
+ //-------------------------------
+
+ if ( is_safari )
+ {
+ drag_root_obj.style.position = 'relative';
+ }
+
+ drag_main_obj.style.top = ipsclass.get_obj_toppos( drag_root_obj ) + 'px';
+ drag_main_obj.style.left = ipsclass.get_obj_leftpos( drag_root_obj ) + 'px';
+ drag_main_obj.style.position = 'absolute';
+ drag_main_obj.style.display = 'block';
+ drag_main_obj.style.zIndex = 1000;
+
+ //-------------------------------
+ // Set up TARGETS
+ //-------------------------------
+
+ if ( drag_move.var_target_ids.length )
+ {
+ for ( var i in drag_move.var_target_ids )
+ {
+ var main_obj = document.getElementById( drag_move.var_original_row_text + '-' + i );
+
+ //-------------------------------
+ // For some reason, Safari wants
+ // to be relative..
+ //-------------------------------
+
+ if ( is_safari )
+ {
+ main_obj.style.position = 'relative';
+ }
+
+ if ( is_ie )
+ {
+ //-------------------------------
+ // IE has problems with onmouseover
+ // and zIndex.. couldn't resolve it
+ // so cheated. slower, hence IE only
+ // Gen co-ord maps of targets
+ //-------------------------------
+
+ drag_move.dims[ i ] = new Array();
+
+ drag_move.dims[ i ]['x1'] = ipsclass.get_obj_leftpos(main_obj);
+ drag_move.dims[ i ]['x2'] = drag_move.dims[i]['x1'] + main_obj.offsetWidth;
+ drag_move.dims[ i ]['y1'] = ipsclass.get_obj_toppos(main_obj) - 20;
+
+ // We need to leave a gutter at the bottom / top of each target area to allow
+ // the mouse out event to fire otherwise two targets together will show as one
+ // big target
+ drag_move.dims[ i ]['y2'] = drag_move.dims[i]['y1'] + main_obj.offsetHeight - 5;
+ }
+ else
+ {
+ var targetobj = document.createElement('div');
+ targetobj.id = drag_move.var_original_row_text + '-TARGET-' + i;
+ targetobj.style.background = 'transparent';
+ targetobj.style.position = 'absolute';
+ targetobj.style.left = ipsclass.get_obj_leftpos(main_obj) + 'px';
+ targetobj.style.top = ipsclass.get_obj_toppos(main_obj) + 'px';
+ targetobj.style.width = main_obj.offsetWidth + 'px';
+ targetobj.style.height = main_obj.offsetHeight + 'px';
+ targetobj.style.zIndex = 1000;
+
+ document.body.appendChild(targetobj);
+
+ drag_move._TARGETS[ drag_move._TARGETS.length ] = targetobj;
+
+ targetobj.onmouseover = dragmove_events.prototype.event_TARGET_mouseover;
+ targetobj.onmouseout = dragmove_events.prototype.event_TARGET_mouseout;
+ }
+ }
+ }
+
+ //-------------------------------
+ // Alter original row
+ //-------------------------------
+
+ if ( ! document.getElementById( drag_move.var_original_row_text + '-HIDDEN-' + drag_move.current_id ) )
+ {
+ var newdiv = document.createElement('DIV');
+ newdiv.id = drag_move.var_original_row_text + '-HIDDEN-' + drag_move.current_id;
+ newdiv.className = (is_ie ) ? drag_move.var_hide_row_classname+'-ie' : drag_move.var_hide_row_classname+'-moz';
+ newdiv.style.position = 'absolute';
+ newdiv.style.top = ipsclass.get_obj_toppos( drag_root_obj ) + 'px';
+ newdiv.style.left = ipsclass.get_obj_leftpos( drag_root_obj ) + 'px';
+ newdiv.style.width = drag_orig_obj.offsetWidth + 'px';
+ newdiv.style.height = drag_orig_obj.offsetHeight + 'px';
+
+ document.body.appendChild(newdiv);
+ }
+ else
+ {
+ var newdiv = document.getElementById( drag_move.var_original_row_text + '-HIDDEN-' + drag_move.current_id );
+ newdiv.style.display = '';
+ }
+
+ //-------------------------------
+ // Set drag flag
+ //-------------------------------
+
+ drag_move._drag_in_progress = 1;
+ }
+};
+
+/*-------------------------------------------------------------------------*/
+// DRAG START: Time to remove the makeup
+/*-------------------------------------------------------------------------*/
+
+dragmove_events.prototype.event_drag_end = function( x, y )
+{
+ //-------------------------------
+ // Hide DIV
+ //-------------------------------
+
+ if ( drag_move.current_id )
+ {
+ var drag_main_obj = document.getElementById( drag_move.var_drag_draggable_id_text + '-' + drag_move.current_id );
+ var drag_root_obj = document.getElementById( drag_move.var_drag_object_id_text + '-' + drag_move.current_id );
+ var drag_orig_obj = document.getElementById( drag_move.var_original_row_text + '-' + drag_move.current_id );
+
+ //-------------------------------
+ // Hide draggable thing
+ //-------------------------------
+
+ drag_main_obj.style.display = 'none';
+
+ //-------------------------------
+ // Hide row cover
+ //-------------------------------
+
+ if ( document.getElementById( drag_move.var_original_row_text + '-HIDDEN-' + drag_move.current_id ) )
+ {
+ document.getElementById( drag_move.var_original_row_text + '-HIDDEN-' + drag_move.current_id ).style.display = 'none';
+ }
+ }
+
+ //-------------------------------
+ // CLEAR TARGETS
+ //-------------------------------
+
+ if ( drag_move._TARGETS )
+ {
+ for ( var i in drag_move._TARGETS )
+ {
+ document.body.removeChild( drag_move._TARGETS[i] );
+ }
+
+ drag_move._TARGETS = new Array();
+ }
+
+ //-------------------------------
+ // Did we drop on a target?
+ //-------------------------------
+
+ if ( drag_move.var_target_over_id )
+ {
+ var new_parent_id = drag_move.var_target_over_id;
+ var page_id = drag_move.current_id;
+
+ /*--------------------------------------------*/
+ // Main function to do on request
+ // Must be defined first!!
+ /*--------------------------------------------*/
+
+ do_request_function = function()
+ {
+ //----------------------------------
+ // Ignore unless we're ready to go
+ //----------------------------------
+
+ if ( ! xmlobj.readystate_ready_and_ok() )
+ {
+ xmlobj.show_loading( "Move in progress..." );
+ return;
+ }
+
+ xmlobj.hide_loading();
+
+ //----------------------------------
+ // INIT
+ //----------------------------------
+
+ var returned = xmlobj.xmlhandler.responseText;
+
+ if ( returned.match( /(0|-|\=)<\/null>/ ) )
+ {
+ alert( "Error occured, move not completed " + returned );
+ }
+ else
+ {
+ window.location = drag_move.var_bounce_url;
+ }
+ };
+
+ //----------------------------------
+ // LOAD XML
+ //----------------------------------
+
+ xmlobj = new ajax_request();
+ xmlobj.onreadystatechange( do_request_function );
+ xmlobj.process( drag_move.var_ajax_url +'&pid='+page_id+'&new_parent_id='+new_parent_id );
+ }
+
+ //-------------------------------
+ // Release current drag ID
+ //-------------------------------
+
+ drag_move.current_id = null;
+
+ //-------------------------------
+ // Set drag flag
+ //-------------------------------
+
+ drag_move._drag_in_progress = null;
+
+ //-------------------------------
+ // Change colour back...
+ //-------------------------------
+
+ if ( drag_move.var_target_over_id )
+ {
+ //-------------------------------
+ // Get obj
+ //-------------------------------
+
+ var target_obj = document.getElementById( drag_move.var_original_row_text + '-' + drag_move.var_target_over_id );
+
+ //-------------------------------
+ // Store old classname...
+ //-------------------------------
+
+ target_obj.className = drag_move.var_target_out_classname;
+ }
+
+ //-------------------------------
+ // Clear target ID
+ //-------------------------------
+
+ drag_move.var_target_over_id = null;
+};
\ No newline at end of file
diff --git a/Development/javascript_uncompressed/skin_acp/clientscripts/ipd_form_functions.js b/Development/javascript_uncompressed/skin_acp/clientscripts/ipd_form_functions.js
new file mode 100644
index 00000000..703322b1
--- /dev/null
+++ b/Development/javascript_uncompressed/skin_acp/clientscripts/ipd_form_functions.js
@@ -0,0 +1,402 @@
+//------------------------------------------------------------------------------
+// IPS JS: Form Functions
+// (c) 2005 Invision Power Services, Inc.
+// http://www.invisionpower.com
+// Matt Mecham (17/10/05)
+//------------------------------------------------------------------------------
+
+var _form_functions = null;
+
+/*-------------------------------------------------------------------------*/
+// Initiate object
+/*-------------------------------------------------------------------------*/
+
+function form_functions()
+{
+ /**
+ * Name: Form
+ *
+ * @var string
+ */
+ this.name_form = 'mainform';
+
+ /**
+ * ID: Form
+ *
+ * @var string
+ */
+ this.obj_form = null;
+
+ /**
+ * ID: Form Edited
+ *
+ * @var INT
+ */
+ this.form_edited = 1;
+
+ /**
+ * NAME: Edit hold
+ *
+ * @var string
+ */
+ this.name_edit_hold = 'page-edit-hold';
+
+ /**
+ * ID: Edit hold
+ *
+ * @var string
+ */
+ this.id_edit_hold = null;
+
+ /**
+ * Saved onsubmit handlers
+ *
+ * @var string
+ */
+ this.form_onsubmit_saved = null;
+
+ /**
+ * Array of form BUTTON div id names
+ *
+ * @var array
+ */
+ this.form_button_divs = new Array();
+
+ /**
+ * Array of form LINK div id names
+ *
+ * @var array
+ */
+ this.form_link_divs = new Array();
+
+ /**
+ * Array of form EVAL div id names
+ *
+ * @var array
+ */
+ this.form_eval_divs = new Array();
+
+ /**
+ * CSS styles: Button off
+ *
+ * @var string
+ */
+ this.css_formbutton_off = 'formbutton-off';
+
+ /**
+ * CSS styles: Button on
+ *
+ * @var string
+ */
+ this.css_formbutton_on = 'formbutton-on';
+}
+
+/*-------------------------------------------------------------------------*/
+// Initiate object
+/*-------------------------------------------------------------------------*/
+
+form_functions.prototype.init = function()
+{
+ //----------------------------------
+ // Get form object
+ //----------------------------------
+
+ this.obj_form = document.getElementById( this.name_form );
+
+ //----------------------------------
+ // Already got a submit handler?
+ //----------------------------------
+
+ if ( this.obj_form.onsubmit )
+ {
+ this.form_onsubmit_saved = this.obj_form.onsubmit;
+ }
+
+ //----------------------------------
+ // Got the hold box?
+ //----------------------------------
+
+ try
+ {
+ this.id_edit_hold = document.getElementById( this.name_edit_hold );
+ }
+ catch(error)
+ {
+
+ }
+
+ //----------------------------------
+ // Get page links...
+ // Gah.. another safari bug
+ //----------------------------------
+
+ var inputs = this.obj_form.getElementsByTagName('INPUT');
+
+ _form_functions = this;
+
+ //----------------------------------
+ // Sort through and grab links
+ //----------------------------------
+
+ for ( var i = 0 ; i <= inputs.length ; i++ )
+ {
+ try
+ {
+ if ( inputs[i].type == 'hidden' )
+ {
+ continue;
+ }
+ }
+ catch(error)
+ {
+ continue;
+ }
+
+ inputs[i].onchange = this.form_event_edited;
+ }
+
+ //----------------------------------
+ // Form check...
+ //----------------------------------
+
+ this.obj_form.onsubmit = this.form_submit;
+};
+
+/*-------------------------------------------------------------------------*/
+// Initiate object
+/*-------------------------------------------------------------------------*/
+
+form_functions.prototype.add_submit_event = function( div_id, field_name, init_value, onsubmit_value )
+{
+ var div_obj = null;
+
+ //----------------------------------
+ // Make sure we got one...
+ //----------------------------------
+
+ try
+ {
+ div_obj = document.getElementById( div_id );
+ }
+ catch( error )
+ {
+ alert( "Could not initialize field: " + div_id );
+ return false;
+ }
+
+ //----------------------------------
+ // Add hidden field to form...
+ //----------------------------------
+
+ if ( field_name )
+ {
+ var field = document.createElement('input');
+
+ field.type = 'hidden';
+ field.value = init_value;
+ field.name = field_name;
+ field.id = 'field--x--' + div_id;
+
+ this.obj_form.appendChild( field );
+
+ this.form_button_divs[ div_id ] = onsubmit_value;
+ }
+
+ //----------------------------------
+ // Add event handlers...
+ //----------------------------------
+
+ div_obj.onmouseover = this.form_button_mouseover;
+ div_obj.onmouseout = this.form_button_mouseout;
+ div_obj.onclick = this.form_button_submit;
+
+ div_obj.className = this.css_formbutton_off;
+};
+
+/*-------------------------------------------------------------------------*/
+// Add EVAL event
+/*-------------------------------------------------------------------------*/
+
+form_functions.prototype.add_eval_event = function( div_id, eval_code )
+{
+ var div_obj = null;
+
+ //----------------------------------
+ // Make sure we got one...
+ //----------------------------------
+
+ try
+ {
+ div_obj = document.getElementById( div_id );
+ }
+ catch( error )
+ {
+ alert( "Could not initialize event: " + div_id );
+ return false;
+ }
+
+ this.form_eval_divs[ div_id ] = eval_code;
+
+ //----------------------------------
+ // Add event handlers...
+ //----------------------------------
+
+ div_obj.onmouseover = this.form_button_mouseover;
+ div_obj.onmouseout = this.form_button_mouseout;
+ div_obj.onclick = this.form_button_eval_click;
+
+ div_obj.className = this.css_formbutton_off;
+};
+
+/*-------------------------------------------------------------------------*/
+// Add LINK event
+/*-------------------------------------------------------------------------*/
+
+form_functions.prototype.add_link_event = function( div_id, link_url )
+{
+ var div_obj = null;
+
+ //----------------------------------
+ // Make sure we got one...
+ //----------------------------------
+
+ try
+ {
+ div_obj = document.getElementById( div_id );
+ }
+ catch( error )
+ {
+ alert( "Could not initialize event: " + div_id );
+ return false;
+ }
+
+ this.form_link_divs[ div_id ] = link_url;
+
+ //----------------------------------
+ // Add event handlers...
+ //----------------------------------
+
+ div_obj.onmouseover = this.form_button_mouseover;
+ div_obj.onmouseout = this.form_button_mouseout;
+ div_obj.onclick = this.form_button_link_click;
+
+ div_obj.className = this.css_formbutton_off;
+};
+
+/*-------------------------------------------------------------------------*/
+// Div EVAL has been clicked...
+/*-------------------------------------------------------------------------*/
+
+form_functions.prototype.form_button_eval_click = function()
+{
+ try
+ {
+ eval( _form_functions.form_eval_divs[ this.id ] );
+ }
+ catch( error )
+ {
+
+ }
+};
+
+
+/*-------------------------------------------------------------------------*/
+// Div Link has been clicked...
+/*-------------------------------------------------------------------------*/
+
+form_functions.prototype.form_button_link_click = function()
+{
+ try
+ {
+ window.location = _form_functions.form_link_divs[ this.id ];
+ }
+ catch( error )
+ {
+
+ }
+};
+
+/*-------------------------------------------------------------------------*/
+// The form has changed...
+/*-------------------------------------------------------------------------*/
+
+form_functions.prototype.form_button_submit = function()
+{
+ try
+ {
+ var field_obj = document.getElementById( 'field--x--' + this.id );
+ field_obj.value = _form_functions.form_button_divs[ this.id ];
+ }
+ catch( error )
+ {
+
+ }
+
+ //----------------------------------
+ // Submit..
+ //----------------------------------
+
+ _form_functions.form_submit();
+ _form_functions.obj_form.submit();
+};
+
+/*-------------------------------------------------------------------------*/
+// The form has changed...
+/*-------------------------------------------------------------------------*/
+
+form_functions.prototype.form_button_mouseover = function()
+{
+ this.className = _form_functions.css_formbutton_on;
+};
+
+/*-------------------------------------------------------------------------*/
+// The form has changed...
+/*-------------------------------------------------------------------------*/
+
+form_functions.prototype.form_button_mouseout = function()
+{
+ this.className = _form_functions.css_formbutton_off;
+};
+
+/*-------------------------------------------------------------------------*/
+// The form has changed...
+/*-------------------------------------------------------------------------*/
+
+form_functions.prototype.form_event_edited = function()
+{
+ _form_functions.form_edited = 1;
+};
+
+/*-------------------------------------------------------------------------*/
+// The form has changed...
+/*-------------------------------------------------------------------------*/
+
+form_functions.prototype.form_submit = function()
+{
+ var retval = true;
+
+ if ( _form_functions.form_edited )
+ {
+ //alert ("Form edited" );
+ }
+
+ if ( _form_functions.form_onsubmit_saved )
+ {
+ eval( 'tmpsubmit = ' + _form_functions.form_onsubmit_saved );
+ retval = tmpsubmit();
+ }
+
+ return retval;
+};
+
+/*-------------------------------------------------------------------------*/
+// The form has changed...
+/*-------------------------------------------------------------------------*/
+
+form_functions.prototype.document_onblur = function()
+{
+ if ( _form_functions.form_edited )
+ {
+ //alert ("Form edited" );
+ }
+};
diff --git a/Development/javascript_uncompressed/skin_acp/clientscripts/ipd_tab_factory.js b/Development/javascript_uncompressed/skin_acp/clientscripts/ipd_tab_factory.js
new file mode 100644
index 00000000..38f435d8
--- /dev/null
+++ b/Development/javascript_uncompressed/skin_acp/clientscripts/ipd_tab_factory.js
@@ -0,0 +1,184 @@
+//------------------------------------------------------------------------------
+// IPS JS: Tabby Cat.
+// (c) 2005 Invision Power Services, Inc.
+// http://www.invisionpower.com
+// Matt Mecham (02/11/05)
+//------------------------------------------------------------------------------
+
+var _tab_factory;
+
+/*-------------------------------------------------------------------------*/
+// Initiate object
+/*-------------------------------------------------------------------------*/
+
+function tab_factory()
+{
+ /**
+ * ID: CSS: Tab off class
+ *
+ * @var INT
+ */
+ this.css_tab_off = 'taboff';
+
+ /**
+ * ID: Form
+ *
+ * @var string
+ */
+ this.css_tab_on = 'tabon';
+
+ /**
+ * String: Part tab set up
+ *
+ * @var string
+ */
+ this.string_tab_id = 'tabtab';
+
+ /**
+ * String: Part tab pane
+ *
+ * @var string
+ */
+ this.string_tab_pane = 'tabpane';
+
+ /**
+ * String: Tab array
+ *
+ * @var array
+ */
+ this.stored_tabs = new Array();
+
+ /**
+ * String: Panes array
+ *
+ * @var array
+ */
+ this.stored_panes = new Array();
+}
+
+/*-------------------------------------------------------------------------*/
+// Initiate object
+function tab_factory_init_tabs() { }
+/*-------------------------------------------------------------------------*/
+
+tab_factory.prototype.init_tabs = function()
+{
+ //----------------------------------
+ // Get page divs...
+ //----------------------------------
+
+ var divs = document.getElementsByTagName('DIV');
+ var divcount = 0;
+
+ _tab_factory = this;
+
+ //----------------------------------
+ // Sort through and grab links
+ //----------------------------------
+
+ for ( var i = 0 ; i <= divs.length ; i++ )
+ {
+ try
+ {
+ if ( ! divs[i].id )
+ {
+ continue;
+ }
+ }
+ catch(error)
+ {
+ continue;
+ }
+
+ var divid = divs[i].id;
+ var divname = divid.replace( /^(.*)-(\d+)$/, "$1" );
+ var divnum = this.get_id_from_text( divs[i].id );
+
+ //----------------------------------
+ // Work with it?
+ //----------------------------------
+
+ if ( divname == this.string_tab_id )
+ {
+ this.stored_tabs[ divnum ] = divs[i];
+
+ divs[i].style.cursor = 'pointer';
+
+ divs[i].onclick = this.toggle_tabs;
+
+ //----------------------------------
+ // Set correct classes / display
+ //----------------------------------
+
+ this.stored_panes[ divnum ] = document.getElementById( this.string_tab_pane + '-' + divnum );
+
+ if ( divcount == 0 )
+ {
+ // First tab...
+ divs[i].className = this.css_tab_on;
+ divs[i].style.display = 'block';
+
+ this.stored_panes[ divnum ].style.display = 'block';
+ }
+ else
+ {
+ // Second tab
+ divs[i].className = this.css_tab_off;
+ divs[i].style.display = 'block';
+
+ this.stored_panes[ divnum ].style.display = 'none';
+ }
+
+ divcount++;
+ }
+ }
+};
+
+/*-------------------------------------------------------------------------*/
+// The form has changed...
+/*-------------------------------------------------------------------------*/
+
+tab_factory.prototype.toggle_tabs = function(event)
+{
+ //-------------------------------
+ // No? Get one then
+ //-------------------------------
+
+ var tabid = _tab_factory.get_id_from_text( this.id );
+
+ //-------------------------------
+ // Got it?
+ //-------------------------------
+
+ for ( var i in _tab_factory.stored_tabs )
+ {
+ if ( i == tabid )
+ {
+ _tab_factory.stored_tabs[ i ].style.display = 'block';
+ _tab_factory.stored_tabs[ i ].className = _tab_factory.css_tab_on;
+ _tab_factory.stored_panes[ i ].style.display = 'block';
+ }
+ else
+ {
+ _tab_factory.stored_tabs[ i ].style.display = 'block';
+ _tab_factory.stored_tabs[ i ].className = _tab_factory.css_tab_off;
+ _tab_factory.stored_panes[ i ].style.display = 'none';
+ }
+ }
+
+ // Stop scrolling to top of the page...
+ ipsclass.cancel_bubble( event );
+
+ return false;
+};
+
+
+
+/*-------------------------------------------------------------------------*/
+// Grab ID from string
+/*-------------------------------------------------------------------------*/
+
+tab_factory.prototype.get_id_from_text = function( id )
+{
+ return id.replace( /.*\-(\d+)/, "$1" );
+};
diff --git a/Development/javascript_uncompressed/skin_acp/clientscripts/ipd_titleedit.js b/Development/javascript_uncompressed/skin_acp/clientscripts/ipd_titleedit.js
new file mode 100644
index 00000000..dcb9504c
--- /dev/null
+++ b/Development/javascript_uncompressed/skin_acp/clientscripts/ipd_titleedit.js
@@ -0,0 +1,559 @@
+//------------------------------------------------------------------------------
+// IPS JS: Content Pages Functions
+// (c) 2005 Invision Power Services, Inc.
+// http://www.invisionpower.com
+// Matt Mecham (27/07/05)
+//------------------------------------------------------------------------------
+
+var _this;
+
+/*-------------------------------------------------------------------------*/
+// Initiate object
+/*-------------------------------------------------------------------------*/
+
+function titleedit()
+{
+ this.var_ajax_url = null;
+
+ // Click delay
+ this.var_click_delay = 1200;
+
+ this.var_link_id_text = 'pages-link';
+ this.var_span_id_text = 'pages-page';
+ this.var_div_main = 'pages-main';
+
+ // Language
+ this.lang_click_and_hold = null;
+
+ // Internal stuff
+ this._tid_timeout = null;
+ this._new_text = null;
+ this._tid_links_init = 0;
+ this._tid_date = new Array();
+ this._span_contents = new Array();
+ this._link_contents = new Array();
+
+ /**
+ * Array of uneditable IDs
+ *
+ */
+ this.UNEDITABLES = new Array();
+
+ /**
+ * ID part of uneditable alert box
+ *
+ */
+
+ this.uneditable_id_text = 'titleedit-uneditable';
+
+ // Set up divs
+ this.div_main_wrap = document.getElementById( this.var_div_main );
+
+ /**
+ * Type of edit box required
+ * Allowed: text, textarea
+ */
+ this.edit_box = 'text';
+ this.edit_box_ta_rows = 5;
+ this.edit_box_ta_cols = 45;
+
+ /**
+ * Allows the use of a secret DIV
+ * to keep the content updated
+ * Leave blank to not use
+ */
+ this.var_real_id_text = '';
+}
+
+/*-------------------------------------------------------------------------*/
+// Initiate object
+/*-------------------------------------------------------------------------*/
+
+titleedit.prototype.init = function()
+{
+ //----------------------------------
+ // Get page links...
+ // Gah.. another safari bug
+ //----------------------------------
+
+ var pagelinks = document.getElementsByTagName('*');
+
+ _this = this;
+
+ //----------------------------------
+ // Sort through and grab topic links
+ //----------------------------------
+
+ for ( var i = 0 ; i <= pagelinks.length ; i++ )
+ {
+ try
+ {
+ if ( ! pagelinks[i].id )
+ {
+ continue;
+ }
+ }
+ catch(e)
+ {
+ continue;
+ }
+
+ var linkid = pagelinks[i].id;
+ var linkname = linkid.replace( /^(.*)-(\d+)$/, "$1" );
+ var linknum = linkid.replace( /^(.*)-(\d+)$/, "$2" );
+
+ if ( linkname == this.var_link_id_text )
+ {
+ if ( this.UNEDITABLES[ linknum ] )
+ {
+ pagelinks[i].onmouseover = this.title_mouseover;
+ pagelinks[i].onmouseout = this.title_mouseout;
+ }
+ else
+ {
+ pagelinks[i].onmousedown = this.title_mousedown;
+ pagelinks[i].onmouseup = this.title_mouseup;
+
+ if ( ! this._tid_links_init )
+ {
+ pagelinks[i].title = pagelinks[i].title ? pagelinks[i].title + ". " + this.lang_click_and_hold : this.lang_click_and_hold;
+ }
+ }
+ }
+ }
+
+ this._tid_links_init = 1;
+};
+
+/*--------------------------------------------*/
+// Mouseover: Show alert
+/*--------------------------------------------*/
+
+
+titleedit.prototype.title_mouseover = function( event )
+{
+ //----------------------------------
+ // Prevent link loading
+ //----------------------------------
+
+ event = ipsclass.cancel_bubble( event, true );
+
+ //----------------------------------
+ // Get TID
+ //----------------------------------
+
+ var tid = _this.get_tid_from_id( this.id );
+
+ //-------------------------------
+ // Unmoveable?
+ //-------------------------------
+
+ var check_for_id = _this.UNEDITABLES[ tid ];
+
+ if ( check_for_id )
+ {
+ var alert_object = null;
+
+ //-------------------------------
+ // Attempt to get DIV
+ //-------------------------------
+
+ try
+ {
+ alert_object = document.getElementById( _this.uneditable_id_text );
+ }
+ catch(error)
+ {
+ }
+
+ //-------------------------------
+ // Yeah, so draw alert and return
+ //-------------------------------
+
+ if ( alert_object )
+ {
+ var root_obj = document.getElementById( _this.var_link_id_text + '-' + check_for_id );
+
+ //-------------------------------
+ // For some reason, Safari wants
+ // to be relative..
+ //-------------------------------
+
+ if ( is_safari )
+ {
+ root_obj.style.position = 'relative';
+ }
+
+ alert_object.style.top = ipsclass.get_obj_toppos( root_obj ) - 4 + 'px';
+ alert_object.style.left = ipsclass.get_obj_leftpos( root_obj ) + 5 + root_obj.offsetWidth + 'px';
+ alert_object.style.position = 'absolute';
+ alert_object.style.display = '';
+ }
+
+ return false;
+ }
+};
+
+/*--------------------------------------------*/
+// Mouseout: Hide alert
+/*--------------------------------------------*/
+
+
+titleedit.prototype.title_mouseout = function( event )
+{
+ //----------------------------------
+ // Prevent link loading
+ //----------------------------------
+
+ event = ipsclass.cancel_bubble( event, true );
+
+ //----------------------------------
+ // Get TID
+ //----------------------------------
+
+ var tid = _this.get_tid_from_id( this.id );
+
+ //-------------------------------
+ // Unmoveable?
+ //-------------------------------
+
+ var check_for_id = _this.UNEDITABLES[ tid ];
+
+ if ( check_for_id )
+ {
+ var alert_object = null;
+
+ //-------------------------------
+ // Attempt to get DIV
+ //-------------------------------
+
+ try
+ {
+ alert_object = document.getElementById( _this.uneditable_id_text );
+ }
+ catch(error)
+ {
+ }
+
+ //-------------------------------
+ // Yeah, so draw alert and return
+ //-------------------------------
+
+ if ( alert_object )
+ {
+ alert_object.style.display = 'none';
+ }
+
+ return false;
+ }
+};
+
+
+/*--------------------------------------------*/
+// Mousedown, start timer
+/*--------------------------------------------*/
+
+
+titleedit.prototype.title_mousedown = function( event )
+{
+ //----------------------------------
+ // Prevent link loading
+ //----------------------------------
+
+ event = ipsclass.cancel_bubble( event, true );
+
+ //----------------------------------
+ // Get TID
+ //----------------------------------
+
+ var tid = _this.get_tid_from_id( this.id );
+
+ //----------------------------------
+ // Start...
+ //----------------------------------
+
+ _this._tid_date[ tid ] = _this.get_time_now();
+
+ //----------------------------------
+ // Start loop
+ //----------------------------------
+
+ _this._tid_timeout = setTimeout( "_this.link_event_timer("+tid+")", 5 );
+};
+
+/*--------------------------------------------*/
+// Event, loop
+/*--------------------------------------------*/
+
+
+titleedit.prototype.link_event_timer = function( tid )
+{
+ //----------------------------------
+ // Get time now
+ //----------------------------------
+
+ var timenow = this.get_time_now();
+
+ //----------------------------------
+ // Click held for 1.5 s+?
+ //----------------------------------
+
+ if ( timenow > 0 && this._tid_date[tid] > 0 && ( (timenow - this._tid_date[tid] ) > this.var_click_delay ) )
+ {
+ //----------------------------------
+ // Yeah.. wipe tid time and convert
+ //----------------------------------
+
+ this._tid_date[tid] = 0;
+ this.span_to_input( tid );
+ return false;
+ }
+
+ //----------------------------------
+ // Not wiped? loop on!
+ //----------------------------------
+
+ if ( this._tid_date[tid] > 0 )
+ {
+ this._tid_timeout = setTimeout( "_this.link_event_timer("+tid+")", 5 );
+ }
+ else
+ {
+ return false;
+ }
+};
+
+/*--------------------------------------------*/
+// Turn topic title into text input
+/*--------------------------------------------*/
+
+
+titleedit.prototype.span_to_input = function( tid )
+{
+ //----------------------------------
+ // Using fancy js?
+ //----------------------------------
+
+ if ( ! use_enhanced_js )
+ {
+ return false;
+ }
+
+ this._span_contents[ tid ] = document.getElementById( this.var_span_id_text + '-' + tid ).innerHTML;
+ this._link_contents[ tid ] = document.getElementById( this.var_link_id_text + '-' + tid ).innerHTML;
+
+ var value = '';
+
+ //----------------------------------
+ // Using hidden div or not?
+ //----------------------------------
+
+ if ( this.var_real_id_text )
+ {
+ value = document.getElementById( this.var_real_id_text + '-' + tid ).innerHTML;
+ }
+ else
+ {
+ value = this._link_contents[ tid ];
+ }
+
+ //----------------------------------
+ // Show edit box
+ //----------------------------------
+
+ if ( this.edit_box == 'text' )
+ {
+ value = value.replace( /"/g, '"');
+ document.getElementById(this.var_span_id_text + '-' + tid ).innerHTML = ' ';
+ }
+ else
+ {
+ value = value.replace( /<\/textarea>/g, '</textarea>');
+ document.getElementById(this.var_span_id_text + '-' + tid ).innerHTML = ''+value+' ';
+ }
+
+ document.getElementById( 'edit-' + tid ).focus();
+
+ return false;
+};
+
+/*--------------------------------------------*/
+// Mouseup? Cancel timer to kill the loop
+/*--------------------------------------------*/
+
+titleedit.prototype.title_mouseup = function( event )
+{
+ //----------------------------------
+ // Prevent link loading
+ //----------------------------------
+
+ event = ipsclass.cancel_bubble( event, true );
+
+ //----------------------------------
+ // Get TID
+ //----------------------------------
+
+ var tid = _this.get_tid_from_id( this.id );
+
+ //----------------------------------
+ // Reset timer
+ //----------------------------------
+
+ _this._tid_date[tid] = 0;
+};
+
+/*--------------------------------------------*/
+// BLUR HANDLER
+/*--------------------------------------------*/
+
+
+titleedit.prototype.edit_blur = function( tid, type )
+{
+ _this._new_text = document.getElementById( 'edit-' + tid ).value;
+
+ if ( _this._new_text != "" )
+ {
+ _this.title_save( tid, _this._new_text, type );
+ }
+};
+
+/*--------------------------------------------*/
+// KEY PRESS HANDLER
+/*--------------------------------------------*/
+
+
+titleedit.prototype.edit_keypress = function( evt, tid, type )
+{
+ evt = (evt) ? evt : window.event;
+ _this._new_text = document.getElementById( 'edit-' + tid ).value;
+
+ // Make sure we're not using a text area
+ if ( _this.edit_box == 'text' )
+ {
+ if ( ( evt.keyCode == 13 || evt.keyCode == 3 ) && _this._new_text != "" )
+ {
+ _this.title_save( tid, _this._new_text, type );
+ }
+ }
+};
+
+/*--------------------------------------------*/
+// UDPATE DB
+/*--------------------------------------------*/
+
+
+titleedit.prototype.title_save = function( tid, new_text, type )
+{
+ var donotedit = 0;
+
+ if ( new_text == _this._span_contents[ tid ] )
+ {
+ donotedit = 1;
+ }
+
+ document.getElementById( _this.var_span_id_text + '-' + tid ).innerHTML = _this._span_contents[ tid ];
+ document.getElementById( _this.var_link_id_text + '-' + tid ).innerHTML = new_text;
+
+ //----------------------------------
+ // Using hidden div or not?
+ //----------------------------------
+
+ if ( _this.var_real_id_text )
+ {
+ document.getElementById( _this.var_real_id_text + '-' + tid ).innerHTML = new_text;
+ }
+
+ //----------------------------------
+ // Re-check topic links
+ //----------------------------------
+
+ _this.init();
+
+ if ( donotedit )
+ {
+ return false;
+ }
+
+ var fields = new Array();
+
+ //----------------------------------
+ // Populate fields
+ //----------------------------------
+
+ fields['tid'] = tid;
+ fields['name'] = new_text;
+ fields['md5check'] = ipb_md5_check;
+
+ /*--------------------------------------------*/
+ // Main function to do on request
+ // Must be defined first!!
+ /*--------------------------------------------*/
+
+ do_request_function = function()
+ {
+ //----------------------------------
+ // Ignore unless we're ready to go
+ //----------------------------------
+
+ if ( ! xmlobj.readystate_ready_and_ok() )
+ {
+ xmlobj.show_loading("Saving...");
+ return;
+ }
+
+ xmlobj.hide_loading();
+
+ //----------------------------------
+ // INIT
+ //----------------------------------
+
+ var returned = xmlobj.xmlhandler.responseText;
+
+ if ( returned.match( /(0|-|\=)<\/null>/ ) )
+ {
+ alert( "Error occured, not saved" );
+ }
+ };
+
+ //----------------------------------
+ // LOAD XML
+ //----------------------------------
+
+ xmlobj = new ajax_request();
+ xmlobj.onreadystatechange( do_request_function );
+ xmlobj.process( _this.var_ajax_url, 'POST', xmlobj.format_for_post(fields) );
+
+ return false;
+};
+
+
+/*--------------------------------------------*/
+// Get time now
+/*--------------------------------------------*/
+
+
+titleedit.prototype.get_time_now = function()
+{
+ var mydate = new Date();
+ return mydate.getTime();
+};
+
+/*--------------------------------------------*/
+// Get TID from ID
+/*--------------------------------------------*/
+
+
+titleedit.prototype.get_tid_from_id = function( id )
+{
+ return id.replace( /.*\-(\d+)/, "$1" );
+};
+
+/*-------------------------------------------------------------------------*/
+// Add ID to UNMOVEABLES array
+
+/*-------------------------------------------------------------------------*/
+
+titleedit.prototype.add_id_to_uneditables = function( tid )
+{
+ this.UNEDITABLES[ tid ] = tid;
+};
\ No newline at end of file
diff --git a/Development/javascript_uncompressed/skin_acp/clientscripts/ips_calendar_us.js b/Development/javascript_uncompressed/skin_acp/clientscripts/ips_calendar_us.js
new file mode 100644
index 00000000..95a7424f
--- /dev/null
+++ b/Development/javascript_uncompressed/skin_acp/clientscripts/ips_calendar_us.js
@@ -0,0 +1,299 @@
+/*-------------------------------------------------------------------------*/
+// Title: Tigra Calendar
+// URL: http://www.softcomplex.com/products/tigra_calendar/
+// Version: 3.2 (American date format)
+// Date: 10/14/2002 (mm/dd/yyyy)
+// Note: Permission given to use this script in ANY kind of applications if
+// header lines are left unchanged.
+// Note: Script consists of two files: calendar?.js and calendar.html
+/*-------------------------------------------------------------------------*/
+
+/*--------------------------------------------*/
+// if two digit year input dates after this year
+// considered 20 century.
+/*--------------------------------------------*/
+
+var NUM_CENTYEAR = 30;
+
+/*--------------------------------------------*/
+// is time input control required by default
+/*--------------------------------------------*/
+
+var BUL_TIMECOMPONENT = false;
+
+/*--------------------------------------------*/
+// are year scrolling buttons required by default
+/*--------------------------------------------*/
+
+var BUL_YEARSCROLL = true;
+
+var calendars = [];
+var RE_NUM = /^\-?\d+$/;
+
+/*--------------------------------------------*/
+// Create object
+/*--------------------------------------------*/
+
+function calendar_us(obj_target)
+{
+ //-------------------------------
+ // assigning methods
+ //-------------------------------
+
+ this.gen_date = cal_gen_date2;
+ this.gen_time = cal_gen_time2;
+ this.gen_tsmp = cal_gen_tsmp2;
+ this.prs_date = cal_prs_date2;
+ this.prs_time = cal_prs_time2;
+ this.prs_tsmp = cal_prs_tsmp2;
+ this.popup = cal_popup2;
+
+ //-------------------------------
+ // validate input parameters
+ //-------------------------------
+
+ if (!obj_target)
+ {
+ return cal_error("Error calling the calendar: no target control specified");
+ }
+
+ if (obj_target.value == null)
+ {
+ return cal_error("Error calling the calendar: parameter specified is not valid target control");
+ }
+
+ this.target = obj_target;
+ this.time_comp = BUL_TIMECOMPONENT;
+ this.year_scroll = BUL_YEARSCROLL;
+
+ //-------------------------------
+ // register in global collections
+ //-------------------------------
+
+ this.id = calendars.length;
+ calendars[this.id] = this;
+}
+
+/*--------------------------------------------*/
+// POP-UP Calendar
+/*--------------------------------------------*/
+
+function cal_popup2 (str_datetime, already_opened)
+{
+ this.dt_current = this.prs_tsmp(str_datetime ? str_datetime : this.target.value);
+
+ if (!this.dt_current)
+ {
+ return;
+ }
+
+ //-------------------------------
+ // If already open, don't load path...
+ //-------------------------------
+
+ if ( already_opened )
+ {
+ calendar_url = 'calendar.html';
+ }
+ else
+ {
+ calendar_url = ipb_skin_url + '/calendar.html';
+ }
+
+ var obj_calwindow = window.open(
+ calendar_url + '?datetime=' + this.dt_current.valueOf()+ '&id=' + this.id,
+ 'Calendar', 'width=200,height='+(this.time_comp ? 215 : 190)+
+ ',status=no,resizable=no,top=200,left=200,dependent=yes,alwaysRaised=yes'
+ );
+
+ obj_calwindow.opener = window;
+ obj_calwindow.focus();
+}
+
+/*--------------------------------------------*/
+// timestamp generating function
+/*--------------------------------------------*/
+
+function cal_gen_tsmp2 (dt_datetime)
+{
+ return(this.gen_date(dt_datetime) + ' ' + this.gen_time(dt_datetime));
+}
+
+/*--------------------------------------------*/
+// date generating function
+/*--------------------------------------------*/
+
+function cal_gen_date2 (dt_datetime)
+{
+ return (
+ (dt_datetime.getMonth() < 9 ? '0' : '') + (dt_datetime.getMonth() + 1) + "/"
+ + (dt_datetime.getDate() < 10 ? '0' : '') + dt_datetime.getDate() + "/"
+ + dt_datetime.getFullYear()
+ );
+}
+
+/*--------------------------------------------*/
+// time generating function
+/*--------------------------------------------*/
+
+function cal_gen_time2 (dt_datetime)
+{
+ return (
+ (dt_datetime.getHours() < 10 ? '0' : '') + dt_datetime.getHours() + ":"
+ + (dt_datetime.getMinutes() < 10 ? '0' : '') + (dt_datetime.getMinutes()) + ":"
+ + (dt_datetime.getSeconds() < 10 ? '0' : '') + (dt_datetime.getSeconds())
+ );
+}
+
+/*--------------------------------------------*/
+// timestamp parsing function
+/*--------------------------------------------*/
+
+function cal_prs_tsmp2 (str_datetime)
+{
+ //-------------------------------
+ // if no parameter specified return current timestamp
+ //-------------------------------
+
+ if (!str_datetime)
+ {
+ return (new Date());
+ }
+
+ //-------------------------------
+ // if positive integer treat as milliseconds from epoch
+ //-------------------------------
+
+ if (RE_NUM.exec(str_datetime))
+ {
+ return new Date(str_datetime);
+ }
+
+ //-------------------------------
+ // else treat as date in string format
+ //-------------------------------
+
+ var arr_datetime = str_datetime.split(' ');
+
+ return this.prs_time(arr_datetime[1], this.prs_date(arr_datetime[0]));
+}
+
+/*--------------------------------------------*/
+// date parsing function
+/*--------------------------------------------*/
+
+function cal_prs_date2 (str_date)
+{
+ var arr_date = str_date.split('/');
+
+ if (arr_date.length != 3) return alert ("Invalid date format: '" + str_date + "'.\nFormat accepted is dd-mm-yyyy.");
+ if (!arr_date[1]) return alert ("Invalid date format: '" + str_date + "'.\nNo day of month value can be found.");
+ if (!RE_NUM.exec(arr_date[1])) return alert ("Invalid day of month value: '" + arr_date[1] + "'.\nAllowed values are unsigned integers.");
+ if (!arr_date[0]) return alert ("Invalid date format: '" + str_date + "'.\nNo month value can be found.");
+ if (!RE_NUM.exec(arr_date[0])) return alert ("Invalid month value: '" + arr_date[0] + "'.\nAllowed values are unsigned integers.");
+ if (!arr_date[2]) return alert ("Invalid date format: '" + str_date + "'.\nNo year value can be found.");
+ if (!RE_NUM.exec(arr_date[2])) return alert ("Invalid year value: '" + arr_date[2] + "'.\nAllowed values are unsigned integers.");
+
+ var dt_date = new Date();
+ dt_date.setDate(1);
+
+ if (arr_date[0] < 1 || arr_date[0] > 12) return alert ("Invalid month value: '" + arr_date[0] + "'.\nAllowed range is 01-12.");
+ dt_date.setMonth(arr_date[0]-1);
+
+ if (arr_date[2] < 100) arr_date[2] = Number(arr_date[2]) + (arr_date[2] < NUM_CENTYEAR ? 2000 : 1900);
+ dt_date.setFullYear(arr_date[2]);
+
+ var dt_numdays = new Date(arr_date[2], arr_date[0], 0);
+ dt_date.setDate(arr_date[1]);
+ if (dt_date.getMonth() != (arr_date[0]-1)) return alert ("Invalid day of month value: '" + arr_date[1] + "'.\nAllowed range is 01-"+dt_numdays.getDate()+".");
+
+ return (dt_date)
+}
+
+/*--------------------------------------------*/
+// time parsing function
+/*--------------------------------------------*/
+
+function cal_prs_time2 (str_time, dt_date)
+{
+ if (!dt_date)
+ {
+ return null;
+ }
+
+ var arr_time = String(str_time ? str_time : '').split(':');
+
+ if (!arr_time[0])
+ {
+ dt_date.setHours(0);
+ }
+ else if (RE_NUM.exec(arr_time[0]))
+ {
+ if (arr_time[0] < 24)
+ {
+ dt_date.setHours(arr_time[0]);
+ }
+ else
+ {
+ return cal_error ("Invalid hours value: '" + arr_time[0] + "'.\nAllowed range is 00-23.");
+ }
+ }
+ else
+ {
+ return cal_error ("Invalid hours value: '" + arr_time[0] + "'.\nAllowed values are unsigned integers.");
+ }
+
+ if (!arr_time[1])
+ {
+ dt_date.setMinutes(0);
+ }
+ else if (RE_NUM.exec(arr_time[1]))
+ {
+ if (arr_time[1] < 60)
+ {
+ dt_date.setMinutes(arr_time[1]);
+ }
+ else
+ {
+ return cal_error ("Invalid minutes value: '" + arr_time[1] + "'.\nAllowed range is 00-59.");
+ }
+ }
+ else
+ {
+ return cal_error ("Invalid minutes value: '" + arr_time[1] + "'.\nAllowed values are unsigned integers.");
+ }
+
+ if (!arr_time[2])
+ {
+ dt_date.setSeconds(0);
+ }
+
+ else if (RE_NUM.exec(arr_time[2]))
+ {
+ if (arr_time[2] < 60)
+ {
+ dt_date.setSeconds(arr_time[2]);
+ }
+ else
+ {
+ return cal_error ("Invalid seconds value: '" + arr_time[2] + "'.\nAllowed range is 00-59.");
+ }
+ }
+ else
+ {
+ return cal_error ("Invalid seconds value: '" + arr_time[2] + "'.\nAllowed values are unsigned integers.");
+ }
+
+ dt_date.setMilliseconds(0);
+ return dt_date;
+}
+
+/*--------------------------------------------*/
+// Error
+/*--------------------------------------------*/
+
+function cal_error (str_message)
+{
+ alert (str_message);
+ return null;
+}
diff --git a/Development/javascript_uncompressed/skin_acp/clientscripts/ips_hierarchical.js b/Development/javascript_uncompressed/skin_acp/clientscripts/ips_hierarchical.js
new file mode 100644
index 00000000..ed97e2b5
--- /dev/null
+++ b/Development/javascript_uncompressed/skin_acp/clientscripts/ips_hierarchical.js
@@ -0,0 +1,147 @@
+//------------------------------------------------------------------------------
+// IPS JS: HIERARCHICAL DISPLAY FUNCTIONS
+// (c) 2005 Invision Power Services, Inc.
+// http://www.invisionpower.com
+// Matt Mecham (13/12/05)
+//------------------------------------------------------------------------------
+
+function hierarchical()
+{
+ /**
+ * Class variables.
+ *
+ * @var string Cookie name
+ * @var string Refresh display URL
+ * @var string First part of the image ID title string
+ */
+
+ this.cookie_name = '';
+ this.location_url = '';
+ this.toggle_image_id_name = 'hier-toggle';
+
+ /**
+ * INIT: Grabs IDs from the HTML and
+ * sets up the various functions
+ */
+
+ this.init = function()
+ {
+ //-----------------------------------------
+ // Do DIVs
+ //-----------------------------------------
+
+ var divs = document.getElementsByTagName('IMG');
+
+ //----------------------------------
+ // Sort through and grab links
+ //----------------------------------
+
+ for ( var i = 0 ; i < divs.length ; i++ )
+ {
+ try
+ {
+ if ( ! divs[i].id )
+ {
+ continue;
+ }
+ }
+ catch(error)
+ {
+ continue;
+ }
+
+ var divid = divs[i].id;
+ var divname = ipsclass.get_name_from_text( divid );
+ var divnum = ipsclass.get_id_from_text( divid );
+
+ //----------------------------------
+ // Work with it?
+ //----------------------------------
+
+ if ( divname == this.toggle_image_id_name )
+ {
+ divs[i].style.cursor = 'pointer';
+ divs[i].toggle_image_id_name = this.toggle_image_id_name;
+ divs[i].location_url = this.location_url;
+ divs[i].cookie_name = this.cookie_name;
+ divs[i].toggle_id = divnum;
+ divs[i].onclick = hierarchical_events.prototype.toggle_folder;
+ }
+ }
+ };
+}
+
+/**
+* Wrapper function
+*/
+function hierarchical_events()
+{
+
+}
+
+/**
+* Toggle Folder Action
+* @param object Event Object
+*/
+hierarchical_events.prototype.toggle_folder = function( e )
+{
+ //-----------------------------------------
+ // Check..
+ //-----------------------------------------
+
+ if ( ! this.cookie_name )
+ {
+ return false;
+ }
+
+ //-----------------------------------------
+ // Cancel event bubbling
+ //-----------------------------------------
+
+ e = ipsclass.cancel_bubble(e, true);
+
+ //-----------------------------------------
+ // Set up
+ //-----------------------------------------
+
+ var saved = new Array();
+ var clean = new Array();
+ var found_id = 0;
+
+ //-----------------------------------
+ // Get any saved info
+ //-----------------------------------
+
+ if ( tmp = ipsclass.my_getcookie( this.cookie_name ) )
+ {
+ saved = tmp.split(",");
+ }
+
+ //-----------------------------------
+ // Remove bit if exists
+ //-----------------------------------
+
+ for( i = 0 ; i < saved.length; i++ )
+ {
+ if ( saved[i] != this.toggle_id && saved[i] != "" )
+ {
+ clean[clean.length] = saved[i];
+ }
+ else if ( saved[i] == this.toggle_id )
+ {
+ found_id = 1;
+ }
+ }
+
+ //-----------------------------------
+ // Not found the ID, so add it
+ //-----------------------------------
+
+ if ( ! found_id )
+ {
+ clean[ clean.length ] = this.toggle_id;
+ }
+
+ ipsclass.my_setcookie( this.cookie_name, clean.join(','), 1 );
+ ipsclass.location_jump( this.location_url, true );
+};
diff --git a/Documentation/Installation Guide/data/Thumbs.db b/Documentation/Installation Guide/data/Thumbs.db
deleted file mode 100644
index 662728a962fd48c120c0b71d96f0066a26b909b2..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001
literal 9728
zcmeI2c|26z|Gv^86Bm@F>f5}fY0_&i!o4?H=11K2*
zv^i%2FauZstN=CuJAeZ~n{Q4~0vCXAe>?t(O#ao???%7^;tM|h5J`vu#0QjqkYF&Q
zKQ8>hV>T{FyC3|S?9EOkE!8y9L4nc}k*}J&{;a|ee8&Kxr`u?sR{lVhFDfs-bynp^
zEBqgNwDxKDKw8}VX#2D{vZe(VklkO4zy0^`*iW;0<=c&&)_2-a(B|a-i+@_&)9w|t
zd%*Yc&jXHm0ek=$fFB?L5CjMTgaNea76pg_!~qfjNq`hU8XyCZ1#AJx0ptN&0owoy
z07ZZjU^`$3KpC(TK=U73zi8vA3V;LD0O|k@fF@uMKntJ^&;cL-NWflzEI-~hl3Kx+>L%7XwOfCa!3a2Q|(um;!wYyoxvdw>JL5#R)H2Dkud
z*EtGGSAZMf7{DEH9N+;s0q_KP0lWbx0cZfN9*uv8(0q{&P(u&=_Z@Wr!ewG;YzUzP
zPJIM?Akdo|j0_BntV~RsnAus`+1Xgx*fw+UaBb$`=3ryv;^*S#
z<%7Xs?3@CE{Ct8ud@w%RMd+ZQ4g(_#BO?pnX12|Ie_5zcAl%Ggj@h7e(hz!XIw&_C
zwSneGbc~?4v<`n0I(pE@O-#%ztZYD`oC`!K6iUwkrS%$Uhl1}R4BU)7QoD3F@g6$L
zB#q%yIiHZhETi|}Da@jET6VXqUlB5>2~V%n{sCtKgMvfCFIjJgz^n3R0=TFUhsshL^XcXM*@<>iV;E`DIlHx6IH?`(oLT85Z`pEc?T-|F)|K!VaYalLzGn0k~AG7O!?Mm@*$sSyNzxZ=wm^6HVuPL8FN%vz%+SH-5g`z@~4umwAHrwd%HZ%vj`NT_YZ
zC2k|{e(D#L;@nwwvn7%+Sym-`ZLduKHNzg8dn96}3%dbkx`NQ8R$06=xIuuwkY78g
zDo^u`_QXVMK__c8cs>>2OrF^H;5U#)BSPGnXPn(jDkJX>4s6^pT7wU;?ygaJ*U@QHC<}ejv
z5=qkeG~HECg)oq{CQV`Ki&uvNd3I_rQ5a?^R)sTD2dfD_XT_ZCG~*UUIQMMoy|w4M
z$xMGLF-;Et+0x72>~+iY?MSf$xe-}{X7KxmeLoXxKM21$kJlQ^b0?JJL~VP#AJmVO
zUx~VcaC&+=;rY0ReA@#hEL^O=?v;MirkR97pKJZ&H7=V|VoyIp&Jzgb0SM79?Om(-
zp9QRiuU*;^Gc;O=CE&aQ4J0iDiXX^C2sP{5R?G<^-Q)Rvq%QBN%Yuz!PWx~uZgnka
zG=#}6FW*V^JlSvRj|I?Cnx0Qfmq~pCZI6IwfnoSI@ZHJ&idUwR71a
z@7WuPs3Kg0vxpg6U7Ap*^+e8|muRV|<}!nGoQ`vykBu5A+bT-Q898JJ>yx8tvTxlg
zPNCQ^HG3m_C9keb%ooX!3{xPyo$HT+P~Z`~V$Obd%?mos
zDfw?^y=UPK1EWoFd9#x>9|M+if>3q+;$sxf8P(K^3#!XgJn!pl4ijB_W~JHD?piT0
zXxe-#XG1NQXAe_M*?!9darJg`Xp^C_Aa86%e_sif^Ts)$&Fwa+o)j5;TjD3Q+|Kfs
zdIAZiOjg9=*(-(|2RSoTdpC!mRS!JK7T`unTvbw6cp3L7oPFYmA8Yv22^U?3owsh?
zg$4T7TP=xWJv8p}ty1KRu}E??i8CV0etI!6HT0#;*<(q%_aZSOvS@tMp{~TN_hMP%
z%Lwrqo2av!gA!Y8OV#2-+5Pk$IPoWL4aWXKDuc*sQ9;`IZjX2
ztb(O8vs(R^(lk4b#5KMdnIRI#`_Op1q5j7EZVnW$yus;)u8`cDY|<#OGs{#=Y?aA(3
za|#{Wmgq2Y;n~HCGOv2pX02fPbEo6;KFsK4vFZ917}y1S9{HG#pQ@fnq7bMMF1!^(
zkE3$ti8jY3O29&Ffzd82y_crDOPIVWB|X}zZ=xiE;!)Gi8PlB_{v(7PMFtIBocPyw
z?Y77w)-!PaEHCC?1z$@VQjFz17`ND-kp>SqBsWpze+(Ir93G(|8HYh3w&KywW(TgD
zwO<||D_KTY!Q5puCBt+-YA?KjbJw-zW=kfvu66cf{0gl@UZ5(UrrVBf#Lw-?IyaLZj8Y-68cA|w)1FtcBbAG6
z4mVAGOP{P52RIrjhMAAJRcRdUz3Yj!BtIDH7wPs?qeuzcnW-2{+s(fnGEDJe;u(I{
z7n^&IN!upT`|LLS46HdF+p78wQv;X0^7>79Vvxu)@h2YgsYy07Xku0O?d^9g6%SZ+
z2qVVjJtPN$@`UGpxUqeyzX0
zy;uG8>#wC?HItp6MaB;MD4~dz$xZ!zK8Fd2udf)zJ$$L})@rW}>z=jnmG+;_8P`&;
zf~)r^h#3klu=!m+Q#C9aU^!-6k(#sz?{^u+-9uWTz)P>be6Qp$aUyF17Qfg?g~-KM
zC@;fpEE3g$c{uAKQC(tVac
zLeA&5HQ|$6Gjb3WM50{$R68~AvSuYQor}j%A$s%uODoD0g__5iH4f{?8ga5Xi8-CA
zac$%rvVJZ83hF5pB63fb9CCz7eyJ5VW7YIrQC}%x|0CJhXqB{vQwE{1RiiaK1oK;)K|2@@F)GjVv=urwHoUb;%ZNSoFUr_
zdglAz^et?rLcGDC=nyC?e7KE0*pqee0=GySbB;~87`M9Wth_v#zVx;TXImTBZxs=6
z)x=!8;wfcEM>x>2f*T8eZoi1c>pwo5nXh)hy1Fy;VSJ^{E{}rsqHb9xhH0aWNd@0Z
z3HySWE2E@`!P&MXi^*ozd==wGSYRDdy=Iy-`aV`aC+TBP&6Y@QGoit^>qZ~;=1XuW
zUtcqtE@3LlVx~fx3)*pB$cx(tT)5J?KDBaZdL{Bo-&;O%Yu2d5C#xU+v9rN)v4zdb
zQ!
zwoO7fWhf=4DgEx7+IoA-1m3)5A9u<&MEISxF%rKivS?LcO=oJjw<~ujboWcQ1z*p_
zipun5(VEJkKK-T|8GKiOnu?3_^Q)KrWLyRf7U>IgNQUE=@7kHOrZL0E`b&%JB4(WL
z6O}ronQVTAs{&ZN;5aYD8W^EOU;ms$~nQJAlZhi6`M#jJE9%yy8*95qhDL}ilmh_l4Wk5<@yW7)Z-$c<+t
z7x<-xmODQ34O(vVOD4
z#;@8ZK`!3|p!z?wXn9oV|DxpzboIei{Q+NV(v<$1fb7~I`F~nI@<(c$1EqK06lpoz
ze+r4pf713w-S6|j8|Qws
z{N9^nK_!|U8{TyMo9}(EL-Qq?zi#Mktlx@(JwLzJhZTrOK0e`aOi%oAZtcR(N0m4?lEPb7VVosHlScw
z%??%HOGu9GSeM^2Mk(U8k7ishV2y{meM?%e4=-o67ri{MeZ9!Uu_y1y3zayAE9#yk
z&h8X_GHE7#2pKh%(eBad@4^$iXE)#YVrlpDJDxkxx#!;RE8TYt-Kb*qG{I^A(YPs+
z@`c(#_Vtt+rFT8Lg^gYm-p-sf2a+ohn^Skh**gBC{6(lJB>xV>L8b@x6(aBSu4;@u
zUMW-}jCOQ%d9P%p?MmOBoWAgWMJ0M`vFNA5w7xyTdQXc5p`ELwyI)flV&n
zsfqzf_K(5@s;;`(NRPO}Ou4Hj6RL#Z37COeKJrpSf|G-%&86dVPP2V`(Fukj=~`}F
zMnSD(qo)K-*p{ktlF@hjN3n~FLiU#aB{S%vmIXxEY(W3=ip0_ct}c4?M6o~*6%r8I
zTs~flr_7BMch6DGIZ5*C7adk?+R6^u{(dSmdK=xw0+05r{1Z72R%<80FTd{KKQF$2
M&i+Z2f9qHO1@pjwasU7T
diff --git a/Documentation/Installation Guide/data/help.html b/Documentation/Installation Guide/data/help.html
deleted file mode 100644
index 1dc67068..00000000
--- a/Documentation/Installation Guide/data/help.html
+++ /dev/null
@@ -1,180 +0,0 @@
-
-
-
-
-
-
-
-
- Инструкция по установке IPB: Help & FAQ
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- При загрузке файла установщика я получаю страницу с кодом
-Если при загрузке в вашем браузере файла для установки форума у вас просто загружается страница с кодом вместо нормальной страницы для начала установки, это означает, что у вас не установлен либо неправильно настроен PHP. В этом случае обратитесь к вашему хостеру для разрешения проблемы.
-
- Я получаю ошибку типа «access denied for user@localhost using password YES» при нажатии на кнопку начала установки форума.
-Если вы получаете такую ошибку mySQL, это может означать, что название базы mySQL, имя пользователя mySQL, пароль mySQL или хост mySQL указан неверно. Дважды проверьте введенную вами информацию и особое внимание уделите вводимому паролю базы. Чаще всего пароли бывают чувствительны к регистру. Если данная ошибка постоянно повторяется, обратитесь к своему хостеру для проверки того, что вводимая вами информация верная.
-
-
- После установки я получаю такую ошибку: «Warning: fopen("/.install.lock", "w") - Permission denied ...»
-После установки, Invision Power Board пытается создать файл-«блокировщик», который блокирует скрипт установки форума. Если вы получаете эту ошибку, это означает, что ваш файл-установщик не может создать такой файл. После первого входа в Админцентр удалите файл установки «install/index.php » со своего сервера, и можете загрузить его снова только в том случае, если хотите установить форум заново. В дальнейшем не обращайте внимания на эту ошибку.
-
-
- При установке форума я получаю ошибку типа: «ВНИМАНИЕ! Невозможно определить местоположение файла 'conf_global.php'»
-Это означает, что установщик не смог определить местонахождение файла 'conf_global.php'. Проверьте наличие этого файла в корневой папке форума на сервере. Если этот файл загружен правильно, и на него установлен верный атрибут CHMOD, тогда вы можете указать установщику, где искать данный файл. Для этого откройте файл 'install/index.php' в любом текстовом редакторе. Найдите вверху строку «$root = "./";». Укажите полный реальный путь в этой переменной. Примечание: надо указать именно путь, а не URL. Если вы введете что-то типа «http://www.domain.com», вы получите ошибку. Путь надо указывать от корня до текущей папки (например, '/home/site/public_html/forums/'). Более подробная информация приведена в верхней части установщика. После окончания редактирования сохраните отредактированный файл, загрузите его на сервер и начните установку форума.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Никак не получается войти в Админцентр
- В целях дополнительной безопасности Админцентр производит проверку вашего IP. В некоторых случаях ваш IP может изменяться (особенно, если вы используете dial-up соединение). Для разрешения проблемы вы можете отключить проверку Админцентра на IP.
- Для этого откройте файл «admin.php« в вашем текстовом редакторе. В начале файла найдите и измените строку $check_ip = 1; на $check_ip = 0; . Сохраните изменения и перезагрузите файл на сервер.
- Хоть это и не очень опасно, но вы не должны показывать ID вашей административной сессии кому-либо и не должны где-либо выкладывать ссылку, содержащую данные административной сессии.
-
- При попытке зайти в Админцентр я получаю чистую страницу
- Эта проблема может появиться по следующим причинам.
- Во-первых, откройте файл «admin.php» в вашем текстовом редакторе и измените следующую строку: $use_gzip = 1; на $use_gzip = 0; . Сохраните изменения в файле и перезагрузите его на сервер.
- Если проблема при этом не пропала, проверьте атрибут CHMOD всех под-папок вашего форума. Если вы не уверены в правильности установки CHMOD, установите этот атрибут для всех папок форума на 0777.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- При попытке зайти на форум я получаю чистую страницу
- А в Админцентр вы можете зайти? Если вы не знаете, как зайти в Админцентр, введите в адресную строку вашего браузера следующий адрес http://www.ваш_форум/admin.php (не забудьте изменить ссылку вашего форума!).
- Если страница Админцентра у вас загрузилась, проделайте следующее:
- Нажмите на «Системные настройки» в левом фрейме для раскрытия этого подменю. Затем нажмите там на «Все основные настройки». В правом фрейме выберите пункт «Глобальные настройки форума». После загрузки страницы правого фрейма отключите (Нет) Принудительно отправлять HTTP заголовки? и включите (Да) Отключить GZIP сжатие? Сохраните проделанные изменения и попробуйте войти на форум.
- Если все еще загружается чистая страница, проверьте атрибут CHMOD всех под-папок вашего форума. Если вы не уверены в правильности установки CHMOD, установите этот атрибут для всех папок форума на 0777.
-
- Я использую Windows-сервер, и при попытке зайти на форум я получаю Internal Server Error (внутренняя ошибка сервера)
- В движке есть опция отключения заголовков, печатаемых Invision Power Board.
- Зайдите в Админцентр, нажмите на «Системные настройки» в левом фрейме для раскрытия этого подменю. Затем нажмите там на «Все основные настройки». В правом фрейме выберите пункт «Глобальные настройки форума». После загрузки страницы правого фрейма, отключите (Нет) Отправлять HTTP заголовки? , сохраните изменения и попробуйте войти на форум.
-
- Я использую Windows-сервер, и при попытке отправки сообщения на форуме у меня загружается чистая страница
- Некоторые Windows-сервера используют другой HTTP-протокол при запросах HTTP-редиректа. Для изменения этого имеется опция в Админцентре.
- Зайдите в Админцентр, нажмите на «Системные настройки» в левом фрейме для раскрытия этого подменю. Затем нажмите там на «Все основные настройки». Выберите опцию «С использованием заголовка Refresh: (Windows)» в поле «Тип переадресации». Сохраните изменения.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Если у вас появились какие-то проблемы, не надо паниковать!
- Для решения этих проблем вы можете обратиться в службу поддержки .
- Также вы можете обратиться к нам на форумы IBResource.ru . Форум посещают очень много специалистов, имеющих большой опыт использования Invision Power Board, и, возможно, они дадут вам дельный совет по устранению вашей ошибки. Рекомендуем воспользоваться поиском по нашему форуму. Вполне вероятно, что кто-то уже имел ошибку, аналогичную вашей, и к этой ошибке найдено решение.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/Documentation/Installation Guide/data/install.html b/Documentation/Installation Guide/data/install.html
deleted file mode 100644
index 7d509a77..00000000
--- a/Documentation/Installation Guide/data/install.html
+++ /dev/null
@@ -1,326 +0,0 @@
-
-
-
-
- Инструкция по установке: Установка
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Распакуйте скачанный архив форума и ознакомьтесь сначала с содержимым и необходимыми правами CHMOD . Убедитесь в том, что ваш сервер поддерживает создание папок и длинные названия файлов и папок.
-
- Если вы еще не создавали папки под форум, создайте такую папку на сервере (например, если вы хотите, чтобы ваш форум вызывался по адресу 'http://www.domain.com/forums/', создайте папку с названием 'forums' в папке
- 'public_html' или 'www' на вашем сервере.
-
- При помощи FTP-клиента, загрузите все содержимое папки upload в созданную под форум папку (если вы по совету выше создали папку с названием 'forums' загрузите, содержимое вышеуказанной папки в эту папку.)
-
- Используя FTP-клиент, создайте следующие папки на сервере: «cache», «install», «ips_kernel», «jscripts», «lofiversion», «modules», «retail», «skin_acp», «sources», «style_avatars», «style_emoticons», «style_images», «upgrade» и «uploads» (Совет: если ваш FTP-клиент поддерживает технологию «Drag n' Drop», вы можете сэкономить некоторое количество времени, просто выбрав все файлы распакованного ZIP-архива и перетащив их в окно вашего FTP-клиента; тем самым вы скопируете все файлы на сервер, а FTP-клиент автоматически создаст необходимые папки за вас. Если вы поступили именно так, в дальнейших инструкциях вы можете пропускать пункты, связанные с загрузкой файлов, а только выполнять инструкции по установке CHMOD).
-
-
- Загрузите из распакованного ZIP-архива файлы на сервер. Заметим, что размещение файлов по папкам на сервере должно быть таким же, как и в архиве. После окнчания загрузки, установите CHMOD для папок «skin_cache» и «uploads» на 0755 (при дальнейшей настройке, если у вас появится сообщение об ошибках CHMOD, измените данный атрибут для вышеназванных папок на
-
- 0777).
-
- Переименуйте файл «conf_global.php.dist» в «conf_global.php», далее установите ему CHMOD на 0666 (при дальнейшей настройке, если у вас появится сообщение об ошибках CHMOD, измените данный атрибут для этого файла на 0777).
-
- Теперь вы можете перейти к следующему шагу.
-
-
-
-
-
-
-
-
-
-
-
- Установщик требуется для ввода информации, необходимой для подключения Invision Power Board к базе mySQL и для создания аккаунта Администратора.
-
- Запустите установщик через ваш браузер. Введите для этого в адресную строку вашего браузера адрес (например, если вы создали для форума папку с названием forums, введите
-
- http://www.domain.com/forums/install/index.php , естественно, заменив 'domain.com' на адрес вашего домена.)
-
-
- При загрузке страницы, если у вас появится сообщение-ошибка о неправильных атрибутах для файла «conf_global.php» измените с помощью FTP-клиента CHMOD файла «conf_global.php» на 0777.
-
-Нажмите на кнопку для продолжения. На следующей странице вы должны будете ввести имя пользователя и пароль mySQL. Если вам неизвестны эти данные, обратитесь за информацией к своему хостеру.
-
-Далее введите название сервера mySQL. Обычно используется «localhost» (без кавычек).
-Если вы создали новую базу данных для Invision Power Board или собираетесь использовать уже существующую базу данных, введите название базы в соответствующее поле.
-
-Если вы не собираетесь в дальнейшем устанавливать другой форум Invision Power Board в эту же базу данных, можете оставить пустым поле «Префикс таблиц». При отсутствии пароля mySQL (к примеру, если вы устанавливаете Invision Power Board на локальный сервер) оставьте пустым и поле пароля.
-После нажатия на кнопку продолжения установки, при наличии каких-либо ошибок, вы будете проинформированы об имеющихся ошибках; например, ошибка типа «permission denied for user@localhost using password YES» может означать, что введенные вами имя пользователя или пароль, либо название базы mySQL являются ошибочными. Обратитесь в этом случае за точной информацией к своему хостеру.
-
-После успешного завершения установки форума вы будете уведомлены об этом.
-После полного завершения установки нажмите на ссылку авторизации на форуме и введите имя пользователя и пароль Администратора, указанные вами на начальной стадии установки.
-По завершении авторизации на форуме нажмите на ссылку «Админцентр», находящуюся в верхней части вашего форума.
-
-
-
-
-
-
-
-
-
-
-
-
- Админцентр форума Invision Power Board очень многофункционален. Здесь вы можете создавать новые категории и разделы форума,
-
- редактировать фильтры нецензурных слов, смайлики, изменять цвета форума и т.д. Рекомендуем вам прочесть документацию на Invision Power Board перед попыткой редактирования каких-либо более сложных функций.
-
-
-
- Важные замечания!
-Самое первое, что вы должны сделать удалить файл «install/index.php» с вашего сервера; хотя Invision Power Board и блокирует этот файл после успешной установки форума, кто-нибудь может удалить файл блокировки установщика и при запуске файла-установщика
-
- удалить все существующие таблицы вашей базы данных .
-
- Поздравляем! Вы установили и настроили ваш форум Invision Power Board. При возникновении каких-либо затруднений нажмите на ссылку «Помощь» в верхней части этой документации.
-
- Благодарим за использование и поддержку Invision Power Board
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Ниже вы можете увидеть таблицу с рекомендуемыми атрибутами CHMOD для файлов (и, при необходимости, для папок).
- Установка CHMOD не обязательна для Windows-серверов и может быть проигнорирована. Необходимое значение CHMOD может быть разным для разных серверов. Если вы сомневаетесь, используйте для всего атрибут 0777.
- На некоторых системах вообще не требуется установка CHMOD-атрибутов для успешной инсталляции форума. Используйте таблицу ниже для ознакомления с атрибутами, необходимыми для установки форума и после установки.
-
-
-
-
-
-
-
-
-
- Название файла/папки
- Необходимый CHMOD
- CHMOD для содержимого папки
- CHMOD для установки форума
- CHMOD после установки
-
-
-
-
- admin.php
- -
- -
- -
- -
-
-
-
-
- cache
- 0755
- -
- ДА
- -
-
-
-
-
- cache/skin_cache
- 0755
- -
- ДА
- -
-
-
-
-
- cache/lang_cache
- 0755
- -
- -
- -
-
-
-
-
- conf_global.php
- 0666
- -
- ДА
- -
-
-
-
-
- ipb_templates.xml
- -
- -
- -
- -
-
-
-
-
- index.php
- -
- -
- -
- -
-
-
-
-
- install
- -
- -
- -
- -
-
-
-
-
- ips_kernel
- -
- -
- -
- -
-
-
-
-
- jscripts
- -
- -
- -
- -
-
-
-
-
- lofiversion
- -
- -
- -
- -
-
-
-
-
- modules
- -
- -
- -
- -
-
-
-
-
- retail
- -
- -
- -
- -
-
-
-
-
- skin_acp
- -
- -
- -
- -
-
-
-
-
- sources
- -
- -
- -
- -
-
-
-
-
- style_avatars
- -
- -
- -
- -
-
-
-
- style_emoticons
- 0755
- -
- -
- ДА
-
-
-
- style_images
- 0755
- -
- -
- -
-
-
-
-
- upgrade
- -
- -
- -
- -
-
-
-
-
- uploads
- 0777
- -
- ДА
- -
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/Documentation/Installation Guide/data/logo4.gif b/Documentation/Installation Guide/data/logo4.gif
deleted file mode 100644
index 84421a18cd7d92bf2a0a6b20d6073e8c40d64476..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001
literal 5476
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
TXrOi)xW5K@Nwa7`26p}*E3g#;
diff --git a/Documentation/Installation Guide/data/logobg.gif b/Documentation/Installation Guide/data/logobg.gif
deleted file mode 100644
index b8ec25f76721f915fc8a15e53a9bf25901b43b8c..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001
literal 3295
zcmV<53?TDINk%w1VQ~O70QUd@bgJx3b-T&b>20CocBJ9u>h${i{Zxa?UyRH{X{|(U
zv{;79?C|$jf4*_2>7lpVPjv5*%cB9{Trs8?1<9e&-
ze68tyuIhfT>wdBAfU@s_wDE$q@q)GTg0}Nqh{;cPxMh~z*yQ$Ih{^4#O_UVgc9pWJ4Lz+R8of3)&sm*7TkwpWMIL~prysN{dB;drU%
zSb@P+eY}3H=&HTmXqw@Hw)DNt=x?6hkEhX9dAqR7?@)Zie6a7a%3OT`b*b!o
zvGI4R?EnA&A^8LV00000EC2ui0C4~`000R80FwxeN3P$OCfc-ZG7BCXDA^J#Ud*_$({Vj%bqQnvI8h%eCXcIySMM(zsEpvAglH3UdWRxU#@(x
zA~t#)B%DsYy7lYW6CQKm&K|LDAHs|OA5Xr#dGg(e<@4s_||mtck|CYWOQz{WX1G^yr-X=IUylweLE=bUubX(yd0
zNHUHgV$9;_pMVA`=%9d#F~AQ?xFNurjLLz8AwLW-f}pxoYU!nzW{T-Li%_D67@&qK
z>ZqiaI_d}@oC!t>j5hg525y4?FhHrf)N1RkxaNv0E{8C3&JQC5E9|hu7HcfA16(oA
z0bLl->WU9kvP7iE;$rQ!*k-G(wzo*K#5pPqAnv&2mTT_0<$}NnB?rj!Y>LjDF$Wv6
zqI<%<_~xtczWg3C$vH)!EAYVP#&SgwS=`~xy9_dr!2w15aDl+LRBZ9Z7-y_;GTt7r
zNGu?SEb_=Cmpt+!j9^kp2hK8_U<6KJ!pO%a$CAp;IOnYM&OE1bNDEnDa>39<7j5*>
zNE_XXE5=|^4GbdhXs3Pl6_Z?Y05dm4
zox&Z`T5^TjW!s|n-hB7}?f2h$N21CBLcC)5;fN=$_~MCQ5r#2HIB|p&3>(nJJy=+M
z1>=X;;`!&Ghc5c)o)ch=8{t2%rE5NWcObP=MTMK^dyCiUvCHfe?(K1SNN&d`Arqyd(|oTVd{$;@Ut^O?|W
zCIVhihX6$Ln$WC3Bgzl~DHPxj3qU{xn7K*}?tqL83V{UbK#en?f|(USfEkwI4FkMG
z8j^G-D)!0$&wl#zp8)kI0?H5o1)L(F2>qu#0nvpJ`~wDlFhdUbiGXd^pbjx;*@7Ox
z0u=ZX0sPE?831uRWjufe5)~){R?5{~1}p#v_M)%@EnH&;nJ6$9))3eP)iwY$h;V*Iz~K&i_`@I$afnN?
z26Ny*10qgwhq+MQ{wfFt7NEg^S4;ytC}0OekbnXLum%*gw9f-VUFl*q>c+Rt)_sr)$vttb`zySsNOz1lY!39|M?|}-igKIQ^9e8F(16*JS
zVc5Y1$OuBDk#P-id}BeiWkH(t%#Ko<`qZdSwW?QL>KR-^0UK}ut64n*1ZP=6g0O%L
z8W03i&!7Qo2zCQzVCo<=Kn8q(8mQ^O0vR9!)ia2;w5Lt&YFqo-(jJ8{5`cp>VEfv~
zX2BR66oWQkn%WIWH?@)B0t%FXatnF{9$0V6a;U;C`2I)aYUg(-|&DHt^x6UkK*GX54p%kPV$nA+yVjr$HBu*
zF7kGSVj6^yfc+RG01I5B9V{P3JDv~<>@vszcpyX@o`Ca^x8vwYPrA~V&h(}){Rvj!
z_RXEHbPGU03pl8P2?`K}u6I2JH}HTkEI{>kSbz^xa7GHe?sYieApu%|Kqy3^bWzy-
z?s(6;-uKS;y0fgwmG)NE%*IOVIe3(WL
zXm9)C!`%v-&_VA>AByHX|M}35zVxS0eH~B$>j{uM^_|ZL5>UVjJqW+N_^mLFP4Hp+
z+$X^_z%Tyrlb;0Vm%a|>PyhPc|Ni*Tzy9YB0V^Cn0VJ@0^T!9>M*af+(1RD!76uxCvIE
z1szBTyT^hwSc5jWf|`(nI=F*8*n>X!gFxtm&;WjfV0$tcgh-f#O6Y@|(1cF-gisiT
dQaFWFScU61d
-
-
-
-
-
-
-
-
-
- Invision Power Board Меню
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/Documentation/Installation Guide/data/tile_back.gif b/Documentation/Installation Guide/data/tile_back.gif
deleted file mode 100644
index 330833bbb36e28d9eab84af313264885b39be08c..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001
literal 488
zcmZ?wbhEHb!+5TUn`b9YT5BMqVZsC=gEdm?_)Yn1eR|rTk@cK
z&5MNIvr#RFlO|k9o^&a(|9tcIFCo>t>ejywuiqEma3H8+d(*bhRjZ#jZvGJ8bEahB
z-I%sx(XB^=Dt81|?X2JUu59uB+I6p*cYF;f+uFG0W9h=XAvL>e*1nAEIvrZOr+n$d
z$fiS;D<0Qvd|S8SP1DwoVRd_}Rz77Q4k-R)0V~u2ksv=Yu>E&vEbtH!=sTg3cqGTl
zed3A|shtt)Z+Iu1e#@5dV1q=M*6j03d#cW!lezcd2cygS+m7q@)V;6z`M*J5xVfcO
zSgE74OG%@*uU~_E(&Q=J64PhQlrWkzci#L3M!JiaEY)RRv2qo&_S$vpwYfHJ-omB0
zeaB8kwLN?HsYxF^bXc1I*zptme5cQxnnUK@`wud*pTB&S<^A#V7q8CWfB$v3IAlCFIJ7o%2!|~=uwkJym!Xo^90}*v
zqummrb8ej2_?VMZ!MSV7hlNW{PL{V>5p(iVbL(`2
-
-
-
- Invision Power Board Инструкция по установке: Добро пожаловать
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Добро пожаловать в Invision Power Board, который является быстрым и эффективным решением, написанным на языке PHP с использованием базы данных MySQL.
-
-Данное руководство ознакомит вас с процессом установки Invision Power Board. После прочтения этого документа вы сможете самостоятельно установить и настроить свой форум Invision Power Board.
-Процесс загрузки всех файлов форума на сервер, установка форума и ваша авторизация в админцентр собственного форума отнимет у вас не более 30 минут.
-
-Во-первых, необходим какой-нибудь FTP клиент. Если у вас нет никакого FTP клиента, вы можете скачать Smart FTP или Total Commander для Windows, либо InterArchy для Macintosh.
-Не обязательно иметь какие-либо знания в области PHP-программирования для установки Invision Power Board, но неплохо было бы кратко ознакомиться с основными FTP-функциями.
-
- Это руководство предполагает, что вы уже скачали самую последнюю версию русской версии Invision Power Board , «распаковали» ZIP-файл и готовы приступить к действиям.
- В дальнейшем в этой инструкции ZIP-файл, скачанный вами, будет называться «zip-архив», папки, полученные при распаковке архива «локальными папками», а папки вашего сайта «папки на сервере».
-
-
- Если вы все-таки испытываете какие-либо трудности с FTP-функциями, CHMOD-атрибутами и т.д., вы можете воспользоваться нашими услугами по установке форума. Установка форума на сервер клиента бесплатна!
-
-
-
-
-
-
-
-
-
-
-
-
-
- Требования сервера
-
- Для использования этого движка, необходимо наличие установки на вашем сервере PHP 4.3.0 (или выше) и mySQL 3.22 (или выше). Если вам незнакомы эти показатели, вы можете обратиться с данным вопросом к своему хостеру. Если вы имеете собственный сервер и хорошо знакомы с этим, вы можете скачать PHP
- и mySQL и установить их сами. Если ваш хостинг не поддерживает PHP и mySQL, вы можете приобрести хостинг по доступным ценам в сервисе IPS Hosting .
- Invision Power Board хорошо работает под сервером Apache.
-
- Общие требования
-
- Если у вас всего лишь одна база данных, предоставленная хостером, не обязательно просить новую отдельную базу данных для Invision Power Board, т.к. этот движок поддерживает префиксы таблиц, и опасность того, что какие-нибудь существующие одноименные таблицы будут перезаписаны, полностью отсутствует.
- Для начала установки, вы должны иметь название базы mySQL, имя пользователя и пароль mySQL с правами использования команд «CREATE», «DROP» и «ALTER» tables.
- Необходимо наличие как минимум 2 МБайт дискового пространства WEB-сервера и минимум 3 МБайт свободного места в базе данных mySQL для установки и первичного использования вашего форума.
- За более подробной информацией об объеме свободного места обратитесь к вашему хостеру.
-
- >> Перейти к документации по установке!
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/Documentation/Installation Guide/install_guide.html b/Documentation/Installation Guide/install_guide.html
deleted file mode 100644
index 18336a2a..00000000
--- a/Documentation/Installation Guide/install_guide.html
+++ /dev/null
@@ -1,32 +0,0 @@
-
-
-
-
-
-
-
-
- Invision Power Board Установка
-
-
-
-
-
-
-
-
-
-
-
-
-
-Вы нуждаетесь в нормальном браузере, чтобы просматривать страницы
-
-Internet Explorer 2 уже не браузер :)!
-
-
-
-
-
diff --git a/Documentation/InstallationGuide/data/chmod.html b/Documentation/InstallationGuide/data/chmod.html
new file mode 100644
index 00000000..1330a38e
--- /dev/null
+++ b/Documentation/InstallationGuide/data/chmod.html
@@ -0,0 +1,232 @@
+
+
+
+
+ Invision Power Board Install Guide: Welcome
+
+
+
+
+File Structure and CHMOD values
+
+
+ Below is a table showing the file structure and recommended CHMOD values for the file (and in the case of directories, the CHMOD
+ values for the contents of the directories). The CHMOD values are not needed for Windows based servers and can be safely ignored. The CHMOD
+ values may vary from system to system, if in doubt, CHMOD everything to 0777. Most systems will not need to CHMOD everything to install successfully,
+ use the table below to determine what needs CHMOD'ding for installation, and what can be left until later.
+
+
+
+
+
+
+
+
+
+
+
+ File/Folder Name
+ Item CHMOD Value
+ Contents CHMOD Value
+ CHMOD for install
+ Can CHMOD later
+
+
+
+
+ admin
+ -
+ -
+ -
+ YES
+
+
+
+
+ cache
+ 0755
+ -
+ YES
+ -
+
+
+
+
+ cache/skin_cache
+ 0755
+ -
+ YES
+ -
+
+
+
+
+ cache/lang_cache
+ 0755
+ -
+ -
+ -
+
+
+
+
+ conf_global.php.dist
+ 0666
+ -
+ YES
+ -
+
+
+
+
+ index.php
+ -
+ -
+ -
+ -
+
+
+
+
+ install
+ -
+ -
+ -
+ -
+
+
+
+
+ ips_kernel
+ -
+ -
+ -
+ -
+
+
+
+
+ jscripts
+ -
+ -
+ -
+ -
+
+
+
+
+ lofiversion
+ -
+ -
+ -
+ -
+
+
+
+
+ modules
+ -
+ -
+ -
+ -
+
+
+
+
+ resources
+ -
+ -
+ -
+ -
+
+
+
+
+ retail
+ -
+ -
+ -
+ -
+
+
+
+
+ skin_acp
+ -
+ -
+ -
+ -
+
+
+
+
+ sources
+ -
+ -
+ -
+ -
+
+
+
+
+ style_avatars
+ -
+ -
+ -
+ -
+
+
+
+ style_captcha
+ -
+ -
+ -
+ -
+
+
+
+
+ style_emoticons
+ 0755
+ -
+ -
+ YES
+
+
+
+ style_images
+ 0755
+ -
+ -
+ -
+
+
+
+
+ upgrade
+ -
+ -
+ -
+ -
+
+
+
+
+ uploads
+ 0777
+ -
+ YES
+ -
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Documentation/InstallationGuide/data/docs.css b/Documentation/InstallationGuide/data/docs.css
new file mode 100644
index 00000000..fc0886b7
--- /dev/null
+++ b/Documentation/InstallationGuide/data/docs.css
@@ -0,0 +1,228 @@
+BODY
+{
+ background-color: #ffffff;
+ font-family: Verdana, Tahoma, "Lucida Sans", "Lucida Sans Unicode", Arial, Sans-serif;
+ font-size: 11px;
+}
+
+#ipswrapper {
+ width: 100%;
+ margin: auto;
+}
+
+.main_shell {
+ background-color: #6999DA;
+ border: 1px solid #24426A;
+ width: 706px;
+ margin-left:auto;
+ margin-right:auto;
+}
+
+H1 {
+ margin: 0px;
+ background-image: url('images/title_bar.gif');
+ padding: 7px 5px 6px 5px;
+ font-size: 13px;
+ color: #ffffff;
+ font-weight: bold;
+}
+
+H2 {
+ margin: 0px;
+ font-size: 18px;
+}
+
+H3 {
+ font-size: 11px;
+ margin: 0px;
+}
+
+TABLE {
+ font-size: 10px;
+}
+
+.content-text
+{
+ font-size: 12px;
+ line-height: 150%;
+}
+
+.content-next
+{
+ margin-top: 10px;
+ font-size: 14px;
+ font-weight: bold;
+ background-color: #EEE;
+ padding: 6px;
+}
+
+.content_shell {
+
+ margin: 0px 3px 3px 3px;
+ border: 1px solid #24426A;
+ border-top: 3px solid #24426A;
+ background-image: url('images/main_bg.gif');
+ background-repeat: repeat-x;
+ background-color: #EFF2F7;
+}
+
+.package {
+ height: 517px;
+ background-image: url('images/package_bg.gif');
+ background-repeat: no-repeat;
+ background-position: top-left;
+}
+
+.content_wrap {
+ width: 70%;
+ height: 450px;
+ float: right;
+ margin: 6px 6px 4px 0px;
+ padding: 10px;
+ background-color: #ffffff;
+ border: 1px solid #000000;
+ line-height: 150%;
+ overflow-y:auto;
+ overflow-x:hidden;
+ -moz-border-radius: 10px;
+}
+
+.install_info {
+ float: left;
+ margin: 10px 0px 0px 10px;
+ font-size: 12px;
+}
+
+.install_info H3 {
+ font-size: 15px;
+ color: #6D87A9;
+}
+
+.install_info UL {
+ margin: 0px;
+ margin-top: 15px;
+ padding-left: 25px;
+ list-style-type: none;
+}
+
+#progress .step_done {
+ list-style-image: url('images/bullet_done.gif');
+ color: #44638E;
+ font-style: italic;
+}
+
+#progress .step_doing {
+ list-style-image: url('images/bullet_doing.gif');
+ font-weight: bold;
+}
+
+#progress .step_notdone {
+ list-style-image: url('images/bullet_notdone.gif');
+}
+
+.warning {
+ background-color: #EDF1AB;
+ border: 1px solid #6E704B;
+ padding: 5px;
+ font-weight: bold;
+ -moz-border-radius: 5px;
+
+}
+
+.hr {
+ margin: 4px 6px 0px 6px;
+ border-bottom: 1px solid #627686;
+}
+
+.nav_button {
+ background-color: #B3C9E6;
+ border: 1px solid #24426A;
+ font-size: 12px;
+ padding: 3px 6px 3px 6px;
+ -moz-border-radius: 5px;
+}
+
+.copyright {
+ width: 98%;
+ text-align: right;
+ font-size: 9px;
+ color: #9EA7B3;
+ padding-top: 3px;
+ padding-right: 5px;
+}
+
+.eula {
+ height: 210px;
+ border: 1px solid #76774C;
+ background-color: #FDFDD3;
+ padding: 5px;
+ overflow: auto;
+}
+
+#auto_progress LI {
+ list-style: none;
+ color: #029901;
+ font-size: 11px;
+ font-weight: bold;
+ padding: 3px;
+}
+
+.done_text {
+ font-size: 14px;
+ font-weight: bold;
+}
+
+#links {
+ margin: 0px;
+ padding: 5px;
+}
+
+#links LI {
+ list-style: none;
+}
+
+.float_img {
+ float: left;
+ margin-right: 5px;
+}
+
+.info {
+ background-color: #DCE6F3;
+ border: 1px solid #5876A0;
+ padding: 4px;
+ line-height: 120%;
+ -moz-border-radius: 7px;
+ color: #1D3A60;
+}
+
+.sql_form {
+ width: 100%;
+ font-size: 11px;
+ border-top: 1px solid #6A6A6A;
+ border-left: 1px solid #6A6A6A;
+ border-right: 1px solid #A8A8A8;
+ border-bottom: 1px solid #A8A8A8;
+}
+
+FIELDSET {
+ border: 1px solid #2D4461;
+ background-color: #E6EBF1;
+ margin-top: 5px;
+ padding: 7px;
+ -moz-border-radius: 7px;
+ color: #2D4461;
+}
+
+FIELDSET LEGEND {
+ font-weight: bold;
+}
+
+TABLE .title {
+ color: #2D4461;
+ font-weight: bold;
+ padding-bottom: 3px;
+}
+
+TABLE .content {
+ padding-bottom: 3px;
+}
\ No newline at end of file
diff --git a/Documentation/InstallationGuide/data/help.html b/Documentation/InstallationGuide/data/help.html
new file mode 100644
index 00000000..9bd78594
--- /dev/null
+++ b/Documentation/InstallationGuide/data/help.html
@@ -0,0 +1,293 @@
+
+
+
+
+
+
+
+
+ Invision Install Guide: Help & FAQ
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ When I run the installer, I get a page of code.
+
+
+
+ If when accessing the installer via your web browser you receive a page of code and not the installation start screen, this means that either PHP has
+
+ not been installed or has not been configured properly. Please consult with your web host to see if this is the case.
+
+
+
+ I get an error like this 'access denied for user@localhost using password YES' when I submit the main form.
+
+
+
+ If you receive this error from mySQL it means that either the mySQL database name, mySQL username, mySQL password or mySQL host information is wrong. Please double check the information you
+
+ entered making sure that passwords are typed correctly. In some cases, this information is case sensitive. If this error persists, please consult with your web host to check that the information
+
+ you have is correct.
+
+
+
+ After installing, I get this error 'Warning: fopen("/.install.lock", "w") - Permission denied ...'
+
+
+
+ After installing, Invision Power Board attempts to create a "lock" file which disables the installation script. If you receive this error, the installer
+
+ has not been able to create this file. After you have logged into the Admin Center for the first time, you should remove the "install/index.php" script
+
+ from your server and only re-upload it if you wish to make a fresh install. You can then safely ignore this warning.
+
+
+
+ When installing I get an error like this: 'WARNING! Could not locate 'conf_global.php'
+
+
+
+ This error means that the installer could not "guess" the location of the file 'conf_global.php'. Make sure you have uploaded this file into the same directory that you
+
+ uploaded 'sm_install.php' into. If you have this file already uploaded and the CHMOD value has been set, then you can tell the installer where to look for this file by simply
+
+ opening 'sm_install.php' in your favourite text editor. Look near the top for "$root = "./";". Edit this to reflect your "real" path. Note, this is a path - not a URL, entering "http://www.domain.com" or similar will
+
+ result in an error. A path is literally the file path from the server root to the current directory (such as '/home/site/public_html/forums/'). More information is provided in the script near the top. When you have completed
+
+ the edit, simply save the file and re-upload to your server and re-run through your web browser.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ No matter what I do, I can't stay logged into the Admin CP.
+
+
+
+ For extra security, the Admin CP checks your IP address as part of the admin session validation. In some cases your IP address will change with each page request (especially if you are using a dial up ISP). You can
+
+ stop the Admin CP checking your IP address which will solve the problem.
+
+ To do this, open up "admin.php" in your text editor. Near the top of the script change $check_ip = 1; to $check_ip = 0; . Save the file and re-upload to your
+
+ server.
+
+ Although there is no immediate security risk to doing this, you should not disclose your admin session ID to anyone or post the link you are using for that admin CP session to anyone.
+
+
+
+ When I try to access the Admin CP, the page is completely blank
+
+
+
+ This problem could be the result of a few things.
+
+ Firstly, open up "admin.php" in a text editor and near the top change: $use_gzip = 1; to $use_gzip = 0; . Save the file and re-upload to your
+
+ server.
+
+
+
+ If that doesn't solve the problem, check the CHMOD values on the directories you created during the installation process. If in doubt, CHMOD them to 0777 and any directories contained within.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Every time I try to access a page on the forums it loads a blank page.
+
+
+
+ Can you log into the Admin CP? If you do not know the url, enter the following into your web browser address bar http://www.your-domain-here.com/forums/admin.php (obviously using the correct URL to your board!).
+
+ If the Admin CP loads first time, try the following:
+
+ Click on "Board Settings" to expand the sub-menu. Click on "Basic Config". When the page has loaded, turn off the following: Print HTTP headers? and DISABLE GZIP encoding? . When complete, submit the form
+
+ and try to access your board again.
+
+
+
+ If it still loads a blank page, check the CHMOD values on the directories you created during the installation including any directories contained within. If in doubt, CHMOD to 0777.
+
+
+
+ I am on a Windows server and I get an Internal Server Error when trying to access my board
+
+
+
+ There is an option to disable the headers that Invision Power Board prints by default.
+
+ Log into your Admin Control Panel, click on "Board Settings" to expand the sub-menu. Click on "Basic Config". When the page has loaded, turn off Print HTTP headers? and submit the form
+
+ and try to access your board again.
+
+
+
+ I am on a Windows server and when I make a post I am taken to a blank page
+
+
+
+ Some Windows based servers require a different HTTP protocol when redirecting HTTP requests, there is an option in the Admin Control Panel to overcome this.
+
+
+
+ Log into your Admin Control Panel, click on "Board Settings" to expand the sub-menu. Click on "Basic Config". Choose "Refresh (Windows Savvy) from the "Type of auto-redirect?" option. Submit the form.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ If you have a problem outside the ones solved in this guide, then don't panic!
+
+ We have a large team of trained support professionals that will be able to provide a solution to your problems.
+
+ Simply log into your client center and submit a ticket.
+
+
+
+If you wish to contact us for non-technical issues, please visit our Contact Page which includes a handy email form, mailing address and telephone number.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Documentation/InstallationGuide/data/images/addresses.gif b/Documentation/InstallationGuide/data/images/addresses.gif
new file mode 100644
index 0000000000000000000000000000000000000000..ec274aee3a3448db7602481508b423e4d12ae651
GIT binary patch
literal 1236
zcmV;_1S|VTNk%w1VHW@t0Qdg@tfru*q@upQz64jc>F4FTy1M7!*=)A+gTngl?d^nw
zgjcTboSd9Rr|ny#ao??ezHS^ZDfJ?d9a+Cciii-2{@$c>H
zSFiHo;^Gl%!b_{}(a_IcvhiTB@0ORCtE;Q9u(0s(@S~%nuCA{0^YhBe%J%m5?(XjT
z`ugkZ>%qanrKP3n>gt-BnpCRn=;-MA`T44FF?^=w`I>ACBDG;N-5&?d09o=i%Dx=I+T5M#YitnW#k
zu<+8+(wUi=
znVOo+(bIap_PMsR0!XkISFYFH;GmtFUas)5$==i0+=qyW5p&B6gWTcg>ub34hQIDo
ztL)L&+EJnAQkmUckka7b-*30{Npz=4py-jq?{K>Gbh`DSu*4*o4@Ir*lWU}#Qw)Ane?Vh2c
zsHmvv@bf{Z?31U#MWX59-rnc!@gs@a>f_u`tnhD>$vmU!cD?y#vhHK7?&0L-pP!$d
zot@?7<-XVOm6n$6>gbxm>k)3qI+fjAu#B)a6R3>#W4uGk?kG@AD6K&vB*P`}g#Gy6)ZF+d7uz|NiB8PQlBq|KxrEjEzTQ3PyFFS
z6icC}cb^U%fJG}12RPV*YC(r(03HYf-Bby|NS25x4mh~t0?1#D6@RRhdd2GCza`g#
zC7Cg!5*-ht$eCS{!UT&AL(}3etjs?t3{cpyAVETfzY`S%lmHRtnh^xVzyV_;;U9z(7Iu^<
zVIGDJ6enD8!!I~&QcD(SWRQyyVTOtufO0~U84XYmekIG07SU~K)fzXqBlmF
zzK&=BUhV)eq5x9Z|EE2drP2Zyga52fH9bb-=j=*NQvc^y09fY$RpR%qSJ2nzlzDOn
zHKsjhxBy4a#kPC@#CVyKjuBDBPk_4sJ+S}2ZvUk`XJ%*sGPvT$NB}~<09WGxFP;EV
z*<4>^Ok%D#X~X}{f@FoS97U?$hdcd`Cu@PeGEQ^C&*yrL$0Rg~H9U+WLWFUJ#79U?
zB|v;xXs`dja+#{tWP6GeLY@D!THE69i(fJY3~+~wtr{hN^|@*0-_@wF(*QB107uFI
zW&QvrmIow|bB4J8tx&eW-VRmA-sSQCn>PSDtOOs1|ICAXk;ec@!vJ6P|GsYkOx^=M
zunRGs06)9{L%{$gnE)r9|HF3yB8&i5;{Z_B04$yWK)L`Qi2z;sBTuu{-0lCJJO9>_
zQ)hb}PPCM$)zH}K(Aw*;fs4Y0ABIKpD_QwZ!KV=07=`1ZW;hTu<)T!2{M@g9gYAzznPl8
z07kYpZOuY~gT=-8~8x04lu!6EC
z${~gVk2vDNU>vMf1`eRY$ZY|rFda{XGk{?WnuW3!5CB)~kD?}W+SS44WnnCK-nvZ#
zHc8T`Z%FLCTUZZ3oFNw$;SlxYS2+=!2nLGxf(i^76OR2bK?2J*hD-rnLz7aOyh%?rVOXDPDT7j^_tdBhfMBvd+1?ZiG9!nJ0Os7}!88z2
zwG<9I5F;|o0w8w)Qq{oK``?sjyYvuU=of9ym}@0mcXU@G(FGU-*+n1&I)ZKqI9r
SVG9HgY{3L6maH&PKma?B>Ju*j
literal 0
HcmV?d00001
diff --git a/Documentation/InstallationGuide/data/images/box.gif b/Documentation/InstallationGuide/data/images/box.gif
new file mode 100644
index 0000000000000000000000000000000000000000..e20d917b6694ef1bc92d93e6c40c757b9b32ff62
GIT binary patch
literal 1652
zcmV-)28;PeNk%w1VITk?0QUd@rE&r2wK?;^OysdL|K+XQvSj4sn_Hf?BMm0|$CjvCLL8?AZ(i+NM|##WA50N1NLp^93+i~#!j`s1)Jd~#j4gaGxz
zRPVe<@4Q9Ck_?=joZ8yj)z#Ji-lEdd(*NqV@bK`?n-t2*%9V_H->fOCf+x9#3EHO~
z*`^t>f)w|}Sh2CO>$pI4badLRH0HB5>$pC_kt4^H0qg7QooWcsng-yl
zC;7%(vw#Ndxk9gj8@Po4`o~-P$5_~<7M^MVWMW{he-*rm0OhhYyNCd^fdILN0KSU=
z!;k>Bg8<8z0JDGqx`zPlxk2&1OX{~i>9#zzf&iaz3cZQ|;H@g{xd}hFlm(x5ANS#-
z+V?qfEby1l_hykdTm>n3Vd-V)@2gpMW}^
zdo-=Bt-!OGwzjtH=ESCV5bEaNrg$CFpBnejg#Xopm}(aP*ooM^c-N#EmVZw5*Pqj}
zX64L**3!!A#DRHucmMwW=d>}Rau4n7=c9BAr*{p$peEz6CYF(iyom#YcU$_3;I&QRt|#xiLg=+TnP&{-z*@J21OMutKmeBP8a?C4Ncz93elC13@@2AdPfsu0=8vLLM+M~)PD
zV*|#Cqcjjm>i5smEeqmSLbT*18!nqhkDk~=4abFCv8=S<1%g`xrVn9xN$@7?(KQtc
zL71^7NT)hLLV;@1Dihj*!z6UGp%uUaOciG2h%+M3fgf00jF1850+PQ1Q_M;L=4P87
zjS#Ov1LT2}NPlq4&IAV|jo%jGd$IKyx50!8b2^9hC0LK@GNa>FuJBAnrkS0d4f*R_m;X{(e
zE#k%>19+gOlsgjmCYJy76Ga}C9B@D-if|AC6^xMAg`ZNg`C$%#2r_7#Nh;Fl4-q6X
z$(}oCFvgUI7^208k07EcoLNTyA;5RvjXBA918~BL2W)y+B_MYc;s~sT_5lPHi6pWg
zBe-e+Nj-6_3IQP@3@At;fxJO%KYf@n2_uZ$6MzeRI;(;TzYwA>kGd6d$O6L>+K(OY
zTw(8j19V|-2A$MW?I3;ti|qpNl4znGBexnFn9C-S|hvxU<(fl2(bx4oA84JG<1Mck2#%C@B|bl=z&fk
zfn?lUI5hBqz!Ygn^-l)|d_cky@{r?15<%->f(iN%ya0XJ@bL->MwGx4LH#ta1qu!n
z^NA-FIN?DHEfg{XeaO5~fPoN7Y@q{Y1@*H*CI%QW#W^@M(S|S!03Zg<#C%{t2ZVFf
yj}AykqQuqMh>?!d%%su4Y&|*DPX}8J;eZhBD1!nLYo`v;1`TXNiP}8{1OPkY)-iMd
literal 0
HcmV?d00001
diff --git a/Documentation/InstallationGuide/data/images/bullet_doing.gif b/Documentation/InstallationGuide/data/images/bullet_doing.gif
new file mode 100644
index 0000000000000000000000000000000000000000..8a085c3cd5491473e1b01890430c66c6d87b07c8
GIT binary patch
literal 1008
zcmZ?wbhEHbp0%D`ShiC-#V!Yww*t((`8(Lr1H@m|B{dcZ>F*Sn
z_$7MzpX#2I3)2==y!!Ec_RpNuOMy*K)A*XXN*)Cl+_ZE&qA9V3!DhXjPM?v~BJs#8
z28kyPf{&>D`u9io0H@3pUg1^|lf43}vxOY@N;zzGu-YKwdtAj~lU(*a?~;oiDQEPW
zj?BosY^u6Ryy&u3##v*nc_I~812p>$legxX9}
z_usVQ>$a_rq7%=AuKwJ)<>ckmwPh-+ME?E%-}59Q^s2t(Y|)Y%Va9tDGH?6zJddt^
z?%{t#Y4`W(pMHI`-mI0jq+GO1r0B9&-bJ$==Px?!l}fyAZnsY|@s##~a}WRj|IaWA
zhzJ42pDc_F409NCKx#pGf`Q{KgC*yl62@b51U0{H5IiyApoC+ch^bYI`y~E0K8BMo
zCThCyDc2u3V0mz*v#O}0nnKp)m)+uwiPI8(6fAe)k?VU@615>?a-&L%i$l_-<33U<
zjaIgnk6I4QHZCpLaWX+!NPusy)!7qDiATA$=Q>EdDmm;F=2oGx)uB1{_!OxCla#AX
zo;{O{qIDP<4!C+;Qwo)GnYks=w^2<`Zsv<6>P~W6L0Sc`f;bpiEj8LQqzW257}~Og
eVi!6-Z{)M%vNL{iq={uFi-64^i6aII4Aua|olKMf
literal 0
HcmV?d00001
diff --git a/Documentation/InstallationGuide/data/images/bullet_done.gif b/Documentation/InstallationGuide/data/images/bullet_done.gif
new file mode 100644
index 0000000000000000000000000000000000000000..05cec2e0d31b755654b0f79ec816a74de451913f
GIT binary patch
literal 1009
zcmZ?wbhEHbbQCm$#m}y8X-Y5x6)2HTWyt5Su6Pe&wqwO
zvzMRmFccZxeSd4tgK~xr;qKjw8Ky9V9ns`171Lj?{{Q!X?M73z1*!}+njJUdm~(`*
z=WD9XQ0ds;$I#2Kw?VAtQmpH4d82vOQ}2{#uB_o$z`{A7L3{=G#fKM{pIqg?-_mur
zlJ5a^hBoP(^>x3#{ZX5*!qCCddZtQg6=&y-#F@9Nzr6c8?REu6A79R~V7o2a4AU7n
z+Sw&~r5SS7jMvKrA68di%bjpipRZVwzf>~uq<->gy|ztr1NK>~tQMSox0<0xxO?X!
zhAB*(J?so~8JOlVNU!A3YBkcVH@N%umcveI{S_)9hc)$A$weO3QJ<~O&?@A%TS;Lh
zf8FKCkb`D(?$s8b3VZeJP3poj{b`mAd1?%Ga+Z+^tPpP@c1{POM*2eYVQ|
z_qVlHDafzj4%u(PFoWU$_y2~oEq}iH<-SLeA={E6$4YGt_y52DD=+(e{qSx1(`JTR
zMW>w#40ZCnQ4XhM5fi|Nmzg1;mAb;!hSv
z24H&E0VxON2?maH45pkaAClR)?JLE21Ws&V;Ifpz7t=6#+4<%+RkaldM4k$;O62Xc
zxZtADq3jmEY(ZwT;)Mx33@jf4gItGqfHJvqsg{)dLG$t4(3Gus%ndmqjNdwq4HCHbw9U5KPFsJ>gIE{Tu`xNm+FB=5tUbO7)+jXC<@Q{a>wC8D)UUK^dmZ%
zEG@xv7&y#qHzg-D2+N4F6m|q;URE&clu)@KvZ#~SK!DFcu#o*Cmk!Tv27ymZE=&0Q
XrDBpa0uIa*4qfrU&>%9wfx#L8+tVO~
literal 0
HcmV?d00001
diff --git a/Documentation/InstallationGuide/data/images/bullet_notdone.gif b/Documentation/InstallationGuide/data/images/bullet_notdone.gif
new file mode 100644
index 0000000000000000000000000000000000000000..fc5200af3e9be0e60178dd55565b55630f2556eb
GIT binary patch
literal 1010
zcmZ?wbhEHbSf8+Pwlv9SWb91dW$SnO)m2uX@
zcC&WQj4vWw*UbL5DQw
zy((XS{G8T8(cFtpn@(IvJZYdcUv$H#KB+mPd6%s=pSrZ^%=ygoW{W;osZY}Cco*8V
ze@5s5YpZoK9(z?f??r7nb1C(NN5wtYoHIVMlX+EU3B{k#_ua3WeA1xtxu4&DwT@%0
zW~-!R7fEKFH%mVfIOk`+!zTHhGcE}S0ww#!!VhcBepevgBkHqHwdjU@=aGd@dlY^4
zt0kV$@B126eA7X83UA46N1=9p-I*p8`|HxymB%j2&Awn>dfVy1xrYp+fVdD){K>+|
zz%YkF2c#U7Cm1-+Ggxxk1T5;1wQAElD|ljpgOG~3P_Kc|vi9yaiD_>H3XUFGrWHBQ
z3H}O
zyS@NV#EA`@txfD^y9BJhJY!c?n5{C`;Q+JHBKLX`%Zbbk4qe8xn0hoXv~$mtwBzFC
zFi~LO6N*|ElTncFA*B`+^<-k8!ofwlVIL9%4|lc-X>m%t=zN^PIEBwwVwd4!WseTl
Z1U1)(2Lc|n_~gih1WkO*eYk%T{g9JnZc3Wy~@bqY49y3Pidg@bK_OvNNCGegv8Uc6N3YoeY72femgH
zn%{PP(qd}JQ%b!gBCH4jlM6$bLjY|aSjH+)z$XBh0QU6vJcv91kpN}OG8(7_9;yWm
zp#yK0Z&AT00DLMyxF0Q>EWYBn{{Q`v!IAy^{Qz<;|MmY`#w=^jIzF8~_2>3Yzb3P@
zvjCI;37rH0dlo*o9X_@vMt??J#w`V%0vDzRtw|NZ|Eq6GT-`t)b;iCF|ioK
z%fs*S@BjP%$jHcBb6Z|yUJaWF<>lq)<>&YO_m!2E*4Eat;j$^M6!`b}VPavWrKQH@
z#L(E#sH>>Z(9rMi@2{_~{QLZWe}7YUQ<9RBLb)LS|NhL)%;x6icDr^Xb|xLF0sx8;
zIkyx7nF0U#|CHNuIgwuE
z!6QtxMK7=w3ZMcNmk>I*6Z81(Bb^#Xydp5L7Qf@V0EYt_rv+!rJNWnY1(*T(`T6?!
z`nBPljM-{cwO3!iQT_S;Wxii%%Q{uUGHc8{V8%L^-g5Tp_wDWNGoUdTr~>```!}^B
z_w@KTv?)8aDv{ZCp5c0z-F3R#v-|q_9;gl^lOi8;BMzJZ4xa{Jx?d5b1$WR=w%o8G
zjUX$AD=UjD5OEhjurL*U8uRk>O1L`t>H7NZ`ugwuRJ}o4y-YEzF94MT0G9#)ngCwN
zEc*BRLaRamaVh|KEP&Evh0|tWykNZGxJb4(4RaMPsw@C%IR5tk`}q9*_5D6}J}IgY
zdCpmLwsuImE=|8EeA7^V(pUfd|N8R$V`gJObwCZF2A14-de2`rvl+YIwg8p}AaElr
zuMqzJ{{R2~A^8LV00000EC2ui02lxm000R80RIUb=nk
z96MBrIy9gLDOinJRwNEo6K)&_UWbmsdKY8BfLj?v%y|Pbq8e@u1XzH#h{THzdD71%v`cmh|WpBVR3FH~_c`;f&6Mf1jG&i>IvsUMD3!Oc=02U%F@KPGtxJ#fud{
z9(Fm&Q6$Hb5_^TP5NGHOx>2IAB_QI10)ub(Dy<{c@8<;7Gsc*b_p4QtYcK+>`6Hu)
zqhal$r2_Gr#V0H_{?T~VB1#Bv1QwWpa6VMECge9^(G7B!-6xhdsKq&YF6*s7p#{x)j
zqKgtMs4@)&TfBkAhFNrI!Vd-ii8_;uy
z9X8aEi2@NsumU&%Y~lbW7Zft%4>#DT2NQK@@y{$GoM8_!Kpde7Ax&gsf)qcbaDzEj
zBmqYplR#v}9LkVlgb@mw@Fk5098g6gW^loVnF75L1`43;W9W<$7!W2EBP3yl24s8@
zkw07b;Q}K;B#?kNQ{2$a2pi}`0S6akP@t4R{seFZ9Z(Pv2s0b-Q%@O@FcAkETihCv
p6|;EZ!x|c3fI%L6+))Q5kcvc*6%_ojz!g_4fQB8VDEm)906XNNcL)Fg
literal 0
HcmV?d00001
diff --git a/Documentation/InstallationGuide/data/images/db.gif b/Documentation/InstallationGuide/data/images/db.gif
new file mode 100644
index 0000000000000000000000000000000000000000..9ce9cac0b195984da0e44e5f63046a515d4f9be3
GIT binary patch
literal 1250
zcmV<81ReWFNk%w1VHN-s0Qdd?0B6krZqxvD+WPwX;pp)If8_vr;H|B#0C(NK!NmY<
z(g11CwYIpnwzjXYuK--a0E6iOW61zMqyTu{08O(1M6k)t(#6Qk08q97TEGBUz5r9W
z07$O@a@YW1#sG-#09CsHL#Y69*Y57_>gwvMs;U5L&;UoR0AB7RoxVX3g
zYti1`-t6q`&CSi^;rtE;Qo+1atNvDnzyrl+aBy}icP?M;8o3}M9B-sJ#{^eL0+$IH>-;o;oW&190$
z9BaWJZNg!Y(%P$JXSeg<-`*}}!7_Z!K7Gqdr|wIu@^QudHJ$D!
zk?NN6&=H=uQaLfQtwQ-u$Q+&5+y!dE@qzzra;^N|BxAeBh
z&M5(5P{zSL9pT3(oTcVeaHHbuH53=(pZYl
zy1Tpxano(Q^})r-C~2=PW3%4c*r}NzHgn6TsH!=1%1Ls(K&J6ye3(bA_7p^iHkam#v*t9H>N}h1prD|ewBMql
zqz`@D09nU)!})o}{M6s>VT8jtYrx6L$t#ZLotl@tw5{OV))AWd9+>kBUbfKC(BIzN
zWRB55nB*mV)CEtp)5^iq&B-B%;qve607R-Fk?SFr?f`w`OM=Ff*8lhS_P4I3GGnzp
zYq$k<*^trwnwpxQpP${`-7b;isi>!fn5idt&&$u$8G+pdM5@)*)wjy%ReisFrPlyv
z&)nqjSE}wCP_Gk5s>R9A%h1+rjmOT?*lcroC5+=4isk@?>)+?`?d|PAq3^}T#h0kS
zx3{?Q@$pr#@_3ZHRI&Ba($WBr_jr}dOM=Y-`v>W+}hmK%i!nmeZ~3X
z10gH+%xIPZhYM0ZRHz^U!~ua&(G;;5a==xC9wkbM0Yb*si>+3S
zLGy{OFGZY7&Ct4rOSvP>7Lx2S+9)O^5V$&cjaol;~
zBn-l%>j((Ig8~3VkiiBN0E5jFjMULZI$#7-z%T|(kllL#9G6@OtgMlX9;1k|L^%eq
zcVPIzTHsR3DiTF>g%p@*a>PA>
MT(eD_0tEyBJ4pDRYybcN
literal 0
HcmV?d00001
diff --git a/Documentation/Installation Guide/data/file.gif b/Documentation/InstallationGuide/data/images/file.gif
similarity index 100%
rename from Documentation/Installation Guide/data/file.gif
rename to Documentation/InstallationGuide/data/images/file.gif
diff --git a/Documentation/Installation Guide/data/folder.gif b/Documentation/InstallationGuide/data/images/folder.gif
similarity index 100%
rename from Documentation/Installation Guide/data/folder.gif
rename to Documentation/InstallationGuide/data/images/folder.gif
diff --git a/Documentation/InstallationGuide/data/images/help.gif b/Documentation/InstallationGuide/data/images/help.gif
new file mode 100644
index 0000000000000000000000000000000000000000..a9bc7cf273e86174e987f3a250d7bbbc77cab816
GIT binary patch
literal 1396
zcmV-)1&jJeNk%w1VHf}y0QUd@g{aoIwzg}n@5s^J$I8yk)!~nkltz@|GSmaKat|Kv9F4+)QQ6T
z|Nj4GW@o3o(Zj#G+}hTemz8L2azcyK(bCj-w(@VV@shOH;NRbr$o$yh?pC4ehQRvz
z`udEGk9oKCN|@zkYHnPm>{(r6*45Qfo#&F0l8lp^gM@^Ih>QIC`1khqsi~6x0F+1J)pSY7`7`YwFNvc=bzw9hPt-m9~{)X~s&
zcY0u^>c76eg1q*ByY~M5|9O6e^78R~ui}4yf0LP_b$f!w&)dn$&0dnrsj#|pwf1MO
z@osZ@W~%E*m*g*q;4z2YErr`~aBiqiuy2H-I&Di?*|6*ce
zU83fJhK_Z#@~o?>nxU$Gy!q_x?0u)%hp^h|>-W64v!J4-u))*O+4JMy+*F_FgTD5`
z#K-#h_Fkl*_E|6i!@uffxxo}7q?hd_?l(bU&nUtrbV
z?#k8c=;q}uh~3lK^w8Vy+27~V-R*6UxI&cTK$PW9fw;ZD!FGCon#Az-^ze+96e%J1##i=(}8a&@!3#p1$a$qoJmz
zrM1J;$I#nhsOyfVz)+j!W|GThoYr`myTHfK*535y=GpVedQqF>W~SsaiQe(;>NbqvUtnT%
zb#>e2^4#Y0A^8LV00000EC2ui02lxm000R80RIUb=&u1ZH*So`f;Wzc3V#D5Mr1|8
zLW^5kEbUMPf!DACDkKh^K*|CKE$N_e;Q~dHzFtNiIq?HA;sg>qILtdyB8~|;p9pEd
zf{MmFA$w{H#HoWF85R{vM4{77#)^ALBtbAB#LvJ67PPS2(2SNcau+T{!q%k5DW}c{0Qs)2|8ZOop_$LoRtrINvnkwf_9Iz*51TCtgfRQgA
zXO^fSfCkG87PhENNmC&aJ_=6+0icGVldmLU5D^K221%T!8-iDOaj6jlPnzm<^5SGn
zm_luW{K{12MHw<=%0$6bj{yT`BMvD4@ZzDGy*cWVoO36qilGuxS9!nSY6Of|4|=rA
z&@V=xW2kKNi2wqaU;-VdnDIv}-xML<5E4vth!pA45K9DgAd^BGXx&QKoSBD4u~MkL)=_p1ScL~P@6Pc
zY>~hn5_kbh2rlrG#SH^Mq(Uw>jPXGw5$t1!9bWXAhB3>yP)ZhTOcRnodcctb4*_I=
z3lm**!Gt3rEThJyb9}K!ME(#_;VBMRXp>DSKZIa|8iP21=@OC6GUQEOEmu!Q_#L
z6dgF=zzi|mFpVC<5~RWaLacFy2+oRd#u`El@Q_HbE>J)qM*srI5rGu2K(+q_1OPkG
C^bI!v
literal 0
HcmV?d00001
diff --git a/Documentation/InstallationGuide/data/images/index.html b/Documentation/InstallationGuide/data/images/index.html
new file mode 100644
index 00000000..fe90a4e0
--- /dev/null
+++ b/Documentation/InstallationGuide/data/images/index.html
@@ -0,0 +1,11 @@
+
+Invision Power Board - Bulletin Board System
+
+403: Invision Power Board -> Forbidden
+
+You have reached this Page in error, please use
+your back button to return to Invision Board.
+
+Invision Power Board
+
+
\ No newline at end of file
diff --git a/Documentation/InstallationGuide/data/images/install_done.gif b/Documentation/InstallationGuide/data/images/install_done.gif
new file mode 100644
index 0000000000000000000000000000000000000000..443281fc034ba1be8d7303a89bd7afef9fdd86df
GIT binary patch
literal 1693
zcmV;O24eX~Nk%w1VITk?0QUd@?YTkf(TYpEHu3TCmX?(J?fu%aWGAi(JGC4EngRL7
zTjjDelFX0duPug#hP;UYw1EPQ*=z5-NS2Fq`T6i_Dru&0*btty&?SIwFMtgNik($eU)IjwpC0G0sr
zz)RYv9^|nyp>6;Yr3L@xt@OcB(47fbWLW?4!tlz3QkfWXa&lS3Jfw9B$;ruYZ~}GF
zQ@p&q{mNkij|aew0iAg*?z=@aWj80S66wc&?d|R8!)eODrwyA0bEso#w
z0RP^i&YKke{{1hiB4Wuf->fOCf+s1I47r90v4Ru##ag7|ea+3y>$pJLtTe%qBaYZ_
zpKS}{urJM>C8~QG{mW&>#>W5t{>GCPp`oGV9g;PQfPOwo!JU8IF2UW6D5MZ&GK&TL0IHGqV@<&y$&F4CKIC2xuSx
zZa4sfAI!6F>gM0ry?FM@Z_?z?r-V7+wN0eZp|Z`kFtQHVr5S+IX5_thiqvgfvR+P)
z55STyQ<@C*(1ichgVxf@|JaH2
z&5!>6{{R2~A^8LV00000EC2ui03ZM$000R80RIUbNbsMcbq2;PV@9E%!-oa49Kls8
z$p}Ft8li#6QDC}yqBcYmH$omEW8nTY?C22Qu{MG7+342<1Q;wsa-`VEvS5HSBSsh?
zWD|?gUk)<(`&TDil5#5{)-jaoT2Z4$ErHUYgq*iPUd}byS7GVHZiZ|S!fF)869^kt
zz-U7XfCK=h^1vEkwjjGBM?heG0te2M6+%u>F*8E~phr~798$tJVjCNWZa$F%!7!Ue
zYk)Y~bl1az1`Y1XqKBjo!DhWwfmrc?v*9so9L?Ai;;w~9FB(iDCB)v30R+c%DRxFq
z;lhG!Y+6I4IsgkQz67TuN6wC<1X-E?nKw+vja5(BSTZ2vIv@)k9(`F*ZG({7J91nY
z=x+}Y1!kCm2tP6$u?-jo%<;&A3x;um81_BzKzh8|!<3_*Ob
zl0SU3P@Q$}W%mLX=;+`_rgv2TQRo2zJmbV0?))JnCTjo!008fKplSmp_+m{cWW*Xt
z2h<2)jvM0$pv4Cj{NoQM*LfhU3S(5
z6IT;QJ9fPBh7)eMp@_#HOM*-%`~5>fBZ)9Ffd=;ML5CDBj1osKdb|;X5v`0vFbfH=
zz=0%15P+PJ6^L-b4+Knl0L>G7(BOp^JuDFe6mK9)3e`g74+R5cz=PK&4DpE-muR7kGIJwSL?$SZ)04Fn==}pD
nuAp$r2bC02L@=EYz(eZ43xr1AjUX{SCx0Zu!v%K_6c7MA*o`7@
literal 0
HcmV?d00001
diff --git a/Documentation/InstallationGuide/data/images/link.gif b/Documentation/InstallationGuide/data/images/link.gif
new file mode 100644
index 0000000000000000000000000000000000000000..d494909b665cf3d52fd8008265be1ee4d1e26de3
GIT binary patch
literal 1057
zcmeH`+fR}K9EN`&)@NpZX{|EzFspUY(vF(75>te1m1$9FVv&if6@lWC3e?10d0x4(
zkxGeUwn#-I*M_Xfuowz83oF!&gQ#QR+t{?O*7*crTvIcY6rL_{gXX6i}D~7#ka#
zot@R|^*kPLdU_giUJVWos?}<%)oL=CL?TgRVd!F)RHi@9D?4B^sb~0zWsDIoQ5n#>H{2O{S2zUEy;a>ix)wPlq2p-lup5UC8WuK)C>&0phFi}JpwdEbj{mj
z*$kadPo@^bp+}a<8UJD}TpjUB6hY-gNRis7f6FFuH`MRXafd&|SNg{GEPXZS4Ln7tRNNeW3??hX|6*wDeC0B)4u
z6+cRlP7smS8Nl7F;BvOaMA~3e2+oI_qoN?g?L-llvz3G9iMW-!uXL--3h=z=#fV=;
zt24&nc6*|zjjK%ZSaxXL&UfEAmAH9xkrJ#8+q)=ceM>^0PYixF0)BH6P=w^^y|O9G
mCl-S*xP^6tNC`z=Qty48>kCa>)_N=nbD~%BD9Et
zT8FxfKvC;R6_>UO0g?~`A$tNLgpjii=#6Ret+C^|M<@D-1D9L?aIqZ
z-C9Nk4w2>ofGN<~9do#IzHdxt!Q3L1xpzzpTb(E|$CVlSg&<1I4v0X^IS-nNK7o!U
z)|*imPXTLS%!bc$q!3#I$u$)0PRXO)+D&V(uZCK|F;F2*F7ZwGp%9GggDe(L1J-E_!q}6YA2L
z@R4!ju-ss@Ij8h?$rK`(G)+NvwnVQt6Zm_qeMA8xcDL4qn{3V@DKs(;zv63kCSp(o
z4$EPq)d^V~6Iv@vq92_wTI_DjF|S96AsHl`G$VGG!Qz~Oaj6>V8`H`(7P-c1#oYrU
zy&iGkuK8ZRu3xAd6zOM-xSg0AU*w2E&_pOSR{n$uLETEw#uR`MLJW%a{Q^*>w~MFD
zcE|h-j7g^v*)+nDKzyZ9q%sLrX0{X(Oq#9O?6Ay$U~V;pDRt4zAoVCiYy*mI#zjTf}O!5p~%xx7|5s
zusXCbCQ=~+m04%TMxH;
z0faKT}u|;_o>nMJglE4!M9u&`HX%V^gBFEP!EFmT1i|TAjX+?1;zrKmo
z665E)oB@(XexR&o!Q`*+J!wlitUVWT?Py;~dJVZMF$AdIl5;I8EI;O<;vR6UpMS{R
z9J;B{c<5?!oHhCv@6p(z#JKLMr&qYme`YaIACC`1(#zlcY;XF2ftd~i|HKcxWGrkV
z?Y;Py6*2X@{BqK*1jB>g)>T&P#d(tYL(;wP_Qv>8X{Qn%IGFyK*Cls$+`>YZ1RamK
zA6eX3PRc!=o1rB={HkN_q|ZMX#;KV{XTp8@8KmEfIx_F3i*98#93BYk7B={2cp;T}!2p>Iu6;nO
z$`4LUVKeFqBRVNjy{WM^@r|Xiq?DkdSaw4YJrHV)42tZe=FwZr{kKN5JDaw4Iioxu
zR<>Mdz6^t-&7qa;1y}CpvTN2vRWiIi_t4_%X$1-VoU11qSvlADSjz+(qmWi3?KdQe
zeB;8UBLB#;%ZZskMt51VZpzzU?Y_CD`(cdNw+lrN0`^xzly$dDPwl+Zu~2jA?tbFb
z@anTfU_R;W?dQ8l=ZH^OUDxt6E%(05jmnE!5)E;>PDghJgxy_jAct*#31+4}__sAP
zU_14lqR!*VF~%d09$xJuj{}-~@h@k_dxn=ir5;Cns%QtY{HnTG-Oo3lZq0liw{N}u
z*SOM3Qlk1BS^aP7zmpz+038JD(+<9P#`DIy`mmL@$32gI*LP>&-k@sz(7>CM#*^gZ73Dh7p1U*lWP4W1@ycq`9?4qn~49-(KQFT{&Tth!y8
ze3Av`2*O#FqmdiK$wQ(BcOBU~vc1wJ&Tt7`Deo@OIiX)K|LU|n@+~nG`j%k$2khJ5
z->e9G%gXXBJ^J6Q$&xdyrikk_d2>Wq(I)EJF9Kw2dQ4j)S95Blu*vKD*r4CFG17ON
z*qY#i_FS;5rM3_ZuBdq#)>P54GyRAvuxfK~TUn0bn~Jg#<7dn3*yg*p%BV=rr5$OO
z)D30X)@RF~QsW;Rs=fW6ZD>vNf4Pm(M>)pKyt1-)-A^7{{FxAdk5JAtDIbT1XS*by
z2WKyp><{$VtUM5qxm4XiYM7rp5kRI@vXTZ~?=B{Dg3*siwQJGAkA{Mit6O%alnC1g
z|Myx#mfbjDXfDf_Yxh&+bl+PD99^PAhv!5|2jhgDs
z^oOHZs8AMXv|wayJj@~126KH)J)vBN77tBt}edsX{7@J1<3%nJrl?;s{K;g
zacf^JY3a`(DL#dD(=YWXWt1-p>e@>q(`(aKfq#mpvG1&zY$
z;mO(R$=>nF)#bs}>D=V+$lC1P=J34G=hx)%waw<(=JdhY?%3t>#@X!A-|e-~>9Nh|
z#n$NI=+{y)@4?#evCQVZ(&*IV^4j9yWhRm?9krrzSQct%Hh=B>d@Zqu*&7k-0ix|
z;ne2z)Zp&s?DN><@ukM(+357n-0a)s@y_1vxX$F((k)w&f4nF-Rsrm^RdU_+2ZWZ+33>c^wZ+;-Rkws-|)xW?~uCR
zy439B>hi6~+vD!b-tgk;@}$Gzv&-bf-0|Jz
z@5%!OT-s<$r+3Bjt+<92@!{z4yUO0W%HO=p-{tD^;_33)+|I5^UdDwy360u-Rs%m?Yq+I+vfA!>GjX!^V{U^*Wl~p
z>F~JB&?vLxM`&3<;A2|6=J))~t-44zc4
z)6HP1o}A0|>cW~O`O;;Ml&?|61%-qECD|8k;h@z(rcIf8<@RQyJEx~v^)bfaDJ6QJ
zDLp9u=k8$!SA2C;#2;-Mp_Z6Rb-g7Nbxj?V6>mG~M?-0*-KQLG%dLi0cq(<&S$-}p
zRbX-C6;~oy9Bw35VZU97(`aXKxRrGHHAYiv6Q#!^iO1b&VTm?^h1!qzg_vY%poQn(
zMLHH}l!ylXDAQYkkr&-~MsXElOr=p*5RLTdcM*Tt704Hvsfo28f1;I{URGSvR1I#Z
z!ByLR+EJ92fd>lw^Vyd4u+_X2+ilGZ1_3qC!iNHSlL6x4K!3#Xv*Z-XeLIt
zU!8>>`Xfb>&b20eINpchojCFT1(TXk!WAc|9D!P#a@pB9i487{-upAwV6RYcHTWP$~
zHVYr0=Z?waz43zTuD@2bXCSJA`nYdu^JOal4~wp
zXqXokIO|W|=3vXoD4#s*$ckRLX2KTV32?p#c4^XDup5)FkXO%^o-ZKh{r2y_qYN2L
z=vmF|p-%V6_2)9*n>gZsJG)<)tmAt%*@g4yIpG%L%`n1CMV~Y^i<4f^;;fUOH#LXb
z9{sT)x;$U<*+T7k-XS`ZcjkWcS$^_Ln^bA$x3`8xYba@}Lk>)aG8XJ%4=h;19wbP?
z-4LInx7{Z5m
z-~!D8-S)c)F5!%5Oyd&XW{Yv{%5tC*q1EQ)o!N2lijG?t9H)jqr{#@^j?*8rrpCX_
z(e7UU63zZ7Vo3P>jdiH1ULtuosUrH#iub~t#rz0J6ms%(vkN3e)|VdrG18Jc3!)R@
zcSRe5FnUBJAL*VZ#sw-8e49<#B-PnpzV1c*;Kxk$r;H
z*efw-HuVwmb$_f__2j5b9J0@t_!Eu(WJx~s$;@+FJ}Md-eAe3YXiEaD%DdeS_4G>}i!UsS142YTG8mJQXV8qY{k9vFfL
zW=$(vFZu~vRwD<~%Ayk0heAg_l8+_jXBNH5)AjYQoLDVKOC7mMjzW{EqLs0l*^g$>nvY6D?+b2
z&a_d*ZFM0#THHc+z4R=lXKhE@(N@E&dCT3M;0o3peByVc$nX-9dtBn8l@vUHL55)v
zV&uN9tr_KOd&e2ya`HE_1l25PtqaYWMi#a5y{;iYO32yrQ?~5fZ-6~o&Y(h7u+)gH
zY76XM+M;l_>QiriMcCOPvzWB8RV<6?%Td~vleYf^a&DFQRtnqlx3;+OCrH7941*Z|
zxyW@h1?Efv5yODQ#$5uNKheefk
z+2R(*F7|SMomyHiFBs9CezAJJ>{{1m+PzFI=#mW!UCx%Ez?4Qbn5WD>_kMZOO!X=}
z=)v6IGVsE0b907E4CgzOg3i4_0um@e=Q|%a!^>UZog}?gt(w}!HzqWHaU5W3TRYV+
zp0bsjJX=kFnabQowQAQ}0@c2F+f23fjYExEYlyqS+2%BAQH^RBm%tj7cDJe9O=xwK
z@745`8FQQ4P(DXg*l4}8#3g?0IroARl#qbNHO}lh+L201D2TxU8{;NlsVKn!AViMr2S
z0?d}UaoJ3Yw!#A*b(p%n8w~JQySM4>c6rmGNouAlz0jpqI;vfMWc^8f%ATftfu+vh
zSHpPIlrHtms~%ayqq^OmN4f~P{&QEWo9Ujn2Iu2VTiMs1>+XKF%d4LFf1^6R^q>Jf
z=<)aF{{6RQ2X?Uaj9iIZyccla_}uHxiRxGX5;2fKFFgM2Ju^4ERA0US2nRp@!mIw}
zr-%L3oBVInGk)ujXZhiyPWmR3&;0yuz3f%Hf7AEe@P@a0Q^#5GcYmD6bxenJgV%Mo
z$AIX@f3oLwl*e^Z=XF_Uf#gOHPSsmy;0zr&b`6(&YvyKf26Aj?aTq6e({~Bh#{n+r
zf}DVTc*lLu#sY0s2fNmF)PQ)gmw@%xbqJ_>zQ=mHS9MBfcm&vW;&*Z`w{?=1faJ!2
zN@#UR$8@{Le_cmyzE^dVXM4NngkRW%f@g(Qn0T^BaR1hX0BCysrP@J2ZXGciDU?W>_>*=Hi}><
zhMp*OVJLxBNQZwXGY=J3HfV#wHez~rf^P?iEI5cSNC(gujdTEm*_U@D768~7Ol!mf
z3j}^rn2B=8gj;xcM(A}wn1yOsh3H6&spy5O=!Le(j#5aA-*}3=H+65=h3|NVuGWN3
zn1=9hj%nzHs7R2fSdgNqdlATms91as>1$&IY$JG#6X$#=m~nyVjM7L43lNPkcnMH2
zgKri9vQU!5wT*s;Lkg*i45*2ysE`c^gauiS2&sVZ0DlAj8G%hljsqEh1KE-Ysf+AL
zlk}*7E9r7-kdyw1ibPqEU3ZhH2$W9wl0o^D4tacIq)U6~W_IRwZ?}CI$BfnIg3x#f
zW@(lld3_p(1Qb9Dz*Lfz5SOwLOm8D?>u8Wm8I*b%fl@h@g;$e&8I^*mfI4Y=FnO2r
z*pdSYl~B2twub_N*^rJonUu+wfjnpu24-~$%_<_~&!b|A);e~6JQ*n+A_2dvqe
z&}fJ<$d({x2)9WEX%GkcISRX(0*2t5c3GT|NdU#Eoz_X5(OH?0nV_pg38X?AkQl0=T}q)2N~KxqrB6DU1Zt_)
zfSpcSpcA^J6uO~bDtk~Gp_jU$C~&G}TBO$CrBmvvS(==p`l^u03Q~%u@DQH6DxRO<
zrpf1a73Y<3SEtnH0A#rUtQiaN8J~t2gR!}N^;xJnny6-Qt=K96UC^UH3PEi|e5z`x
zRNAWBd7+)^q_Ntm5W1?HYOdyLp%V(KNZP5MO0G$IrR#d7QE;kBTBb(|t6*xXs939$
z>aMFQoHx0qeZ7aRtz88VD8LGxN&rXy%AMC)kVZPIluDokdZZRQsn;0=VM?x^8l6X~
zt~_hAuUeq~I;vzEud;`!DA1)$tFB#ouu__{2m7i->$Mb0v{fs%=PIBmAhWp2t0DTU
zZrXPl)|SLttP*e!E9d~onyhBYv2D&KiRf;0YsJo77sZD2o6!00xM=vMt-FYt%;7
zAhVphq_A4G1u3OpJElkbq+R;8SZkaG>$zXbsSrxEoNKS@N~TjgusM6WKufPRd#+vz
zwEya}OuMx|tGZrmsicdhGYgsU5D7l8tN!2v{!qOBAgsqWr+;Xg2Vkeo*rL&RmK}Qt
zvCy|6>j{ZyRE3pzwvBqk*cblgisjSpH!)R%}f~vhKfTJe+
zz2J)gh)cfX3kK$kzUs@3X8;e*;JG$yy8~La20Wk$yu`Nax~4k7@H)RfOS)xBxw+f5
zQfjkc9K{If!AwiK^!ut=Jis=q#ie_-4P3KXi^f>H#`{XIS-Z8x83}q!!r}R=Nbm_N
z9JeVteJq->F}wgCJH3AY`htfzgFHZzIb5wg9KJtHzJpM{*Sf8Y%Z-26bxu6BS`52Z
zT);IOw3l131+2!Cip6Uzxdu$X4-Cdii^c=&wWut%wT#8IEVi3VyQECOw!F$}jK*MG
z%)Kn7dYsI9Y`n%x0f3BbUkQE1TBmeZ$Q%HT8{4sp9HWhlciV?nHcGfXjJV)tj|sBzX8p_`5e#o
zY|jHN&qs>_$_%_GT)bts!W3JYra8BDtC1Y3w{7szdt1HSEQ2#RsDeuc;vBv}JP0h^
z(lvn2LTm;t`=jgs>t{FV#Af`?_x#FMJkS8G$_(w$I&H?otj|P^&)qr%B*Z$&6X<6!UsUN>&c>bi_Lip(jm>K)9AOdIcKzKo4A>y
zh>Ei1+|qXK(m@OcEX%FxYYRAdlTl68QccIB{L@dZ&uh%YcWlgz-N5fW)k!VXRo&3=
zT+EPN)jO@qS$)`6Yz#oH##*h+fXmf^EX~wh&75Gj?b)Y@+_53etgZR1)o9XijiZuW
zxOIKkcb(Tm+^FmAZdQ~kwR+rh)#rNVvO!9Bpjozq%8+@2lX
zfeqDB;Ms@&J=jYv+?%c3;Vs<+5DB53%%ok~63zb|Jetv5n(O%r*Nn}v@Xb4hEWWuN;6R+XLrl}$sHP&$;8EVo+%4i!p4A|p-Oo+4H>svK{i;|F-4I^l
z<89(%KIX>V-D0lYQvKW$p5-GR-6_uICElgVe8NbuebRi<89jF~;KDWD+8{j#bAShU
zu;a}CYTtqSw=}BX{O#Z5jO6A#=`T&b16)cQ(ot7{_3KR;?mve53bX34(C{o|bp}lLnbMMe$#_lalOE}qF4J+qxFE{ubdH;IxSFQH>ubgL#ZqqO
z;x69dUfiEf;-3EMpg!-re&x1a<|4k;(R^`XO}E3I+N#;7XpINS{?R?Y=(CyMHu~sv
zea_o>4~j@xxT
z@hmOzmVWV(UcM_U(*^#YPrl$cKl5Zy_B_AYGwY!Yv`fBegP%|hYRcjxe)hR;OIEE)Q59oVLphhQ_~gS!q(~@^
zjtyFd>{+x$%@SQZbZuL+am#uFE0Mxo3cV=ZyX1faomg!I&apGl-~xpWFG-L<=`JaY
zvM{EJv(cj&k|;HwgqgDCXOS^wni0^&W{Oo?{ecym)>vD%MG3HCn!^_VRH;-kW*pU<
z3Kdy~R}h1QY&HxL~XWOgKD@
zc(-Bz$&J#HwVI>ml+>%Qz=BTUA#J5y@5U#SU%MPqaCc;ZE@4$-%4}t73&!EI0
za_l|HeyePwjywt}w371E45t2~9BE0AW+KhBn^NP-DR{y{0l5Vmj4sC42uSKnczm$U
z!d2qS@W}a08|9|pcqr}@e~x1%#_LwJ?yWyje62+>Pn7FLp%jS!uFpZuO2n8*=#r?H
z8!3t55>7Y}kFXx`K#vZGVi?k*6o#NeLnM=|&%Vu8lJZrSsI-!!F6JbVtDTxkQ^W)r
zY_T~75oE=yHKUq}s^3O|Gfvaepwkc@c)&H!5vN0RIx+cl@Ihk~81yx7VQjEOMhoS(
zjBv@7j;
zPUdc#3-@OQXnv7qor{+F=H?=m2nkB{qC^5r{|d}7#26C)l_L0tNMk-#t8~fW%oc`~
zB+vwQ__ERjyh-A%p!$R>fAWL}xs0a^b3!$rV)G)Bk3@CDIfoFu5?O+S)=s!188Hz=
zXVw{9bb~IsW^|<+`rF7W@3z~=eb#*D%zO4(XGarBL{g^RjaPz8>7ClsSQJ`}QXYz|
zjH6YdTo_@np&XmPvmd63R<)~=WfkF;Sb`L{^E^&*p?nI}|u7<8XF}
z6bL80@WKNK09sP+q&5=EaTZ!~(9z{wXmF={U(xv`*MD^VbN-xk_?00$p76w^RL7X8
zEg&$0!Po3y0H0IQr#>p_3`$(`yRijNcpTy2eAKr8HmoF%dARb*aSrsQVO7H^Pa(w;
zvVtMrRAxhINWE>q!IU>n*XI|=jx1{a|W?v%8o3c3n|88q7lIrzrXl*Tjyn$y}0ml|o|
z>Jw>VN>g&slnN>Dg?-zQhH6*|!Ucc_FkmDMHo!tV}i6htXLk%;$$ViKvC
zNlhjZl%bp==>(`Wcd1TZnNpw^3z8mA#6XN>q>tCa#+lEc5shp#o0ZVkL1qQBkQ_>x
z;j{u3sMw-n%2Xz9a^t2L8q!&aykQt%z@1e8QtFYB#9<}z1VqL?h?Gwpr6wykPIRVI
za*P|G0T1|{zZ@bk=K<9v920;PY%NKAF$W&C;SlSQ00nAC1bW7>
zRIvREf&L1c&MN8@n@?*U9S$KF9>p&ImXshx08Z7Br>aq)n~iG28pg1u4%C;wd}9}?
zTEoF1QnhHUVOO)7tlxmJth0sTS*aPEyIq`mR=MSvBM^d-Gr4a5T2IEuSLUN(tWfmIF*+FoS>l3b{7o02-i3ad8+e
zmiYq-e+BFlr7PX$k}?D!hHg%En$5Oe;uYZ;&m3a69!kJK7D&aceL@qfUZVG@PF=5O
z+lV&O(8{z7wd#EB8-PfLft&aL%`a;yqfiYggIO8^@P7wPO+&0zw+OyeUtaNw1!G_V
z3xGhG9Sq@z>?;cuu`q^NhJ@8b0%oQQWnn=~Si@@4&XRlXI1ekpoD#5rDSfA3S_#y9
z(ZK;lHewG$Tf};P
z_MW4A?ZXz<#MZ@Pye{PcCTt3*27xgJ3~||y=nk}(?j?@}CR$8qddO9kCTi&mYEo|?
z3&qZNsF_>|RkQlNa-?$qL=RVMxB7*_;raELE%9)OTVl)*aIjqKs!bSJSdx5&Gfa&^
zXJ=nqlB(+eJ?KqE@ZWu@8ua{v{zwDYEn
zYg7AaEsR>iD0#G4jeNx_r@k{-fi2>6+g>zmVxiImQD&Nt-IsbEvLDKN+k%PfLKL8#T^rzo*-P_d~V#O9O`T9x6zrMWO(2
zyR`+|KmKdI*ZV)%b3#k#0oo&hhoiy)ga8b{fMA;|3DbZ_dcU<}yH7v@x}YxMn?N*7
zLp8)ZcbpUMofFJ`5?a{
zn=jRxMt}o2L##ni!@M1A#H8Dy`jUm)qQoN93p#A2*26y7%Y!^9f?9Aw*qc2o?6rvV
zwN%u?SD>qVXvH-H!?i083Wzf~O9bM>MS?8I5fjMjiaB@bz_(%oz-WVEyhHE`fJ)dJ
zo>MRXKNPwbghtAvMvv65^E*T&OS*jPw@@>+9ZE?p+p@r0Ft2+(J5a}%ECO{@M|XTj
z+9SoVt3qEhvtU~T95|_cdquVLz2ZQEugEEbT*{?PgkDT3h6E3ByBEZ80Arl7TJpmm
zBQ2scKab3>kDNh~R6mn^KO8c(ieRKH;Ep4_H7@GJn9PHEn9G{1Nl)y=BFM>|6gvSV
zKzjtrliEFgx>b$q=}>_jQtOP(ynD^x}Q
zVGGR8Gc^ozDT#;_#8gb?v^&P^#f7|wdvE}*TY$kRj96d-tHe230K$E8yj9W2(tyE^
zoJRaQPy7;}X)MICT+L8BNp3<*7)ZSoLqdlfv(|%4b)?POw9P!Y0h|0pDeTR#i^tmQ
zNi4KSxw?l&5KN7WMN&vk0uspP95E}HzzbbWD1gHajLyic7xTEodm4gA`_Awys33bm
z`T9)sY*G9IM~_rBue`S#WTY=NHEYs0kxIBEG{+vvgP5F4{yev?8
z1kNiQyT7EX1}#o*ip9Gi!wFTx40XOOwNNYA(k=zl3w=(<><-9ufLs7kJE%GT4lu@w
zR0b10QOFYjBC|L8`n3BppHFL17zN4JipF~bHAgDRN77NfXoRS_PcOngADK-d?avjU
z&3dTIcJ#y^h&{aoPABb41WnMN49Y1@yBu089=KBFq_Ys{(o|Ks4E<79T~%0J)i1?6
zRfPgu5hCV+r8D1smr(jkS^{yb8
z9*`s$AO#ALh{NpHRBhFOZBs(pb`D&qT7;`Lx9RE7@FIR6F3$mA%_B$N+LR(wBwV+-%4HtA$G)
z+)$jtc^trajaT6W%0|#fqU^n(#gpVZLxFW#%XL-EMcP@-+*v)?M37qQJJVMX51RB5
zFDk*JvP{JzsCX-_(;{1y#L*>7K#c{<^&CXcG(99!%R~J({nJGM*9+1}#aou`&$+yT
z75GowY(l^t+}<3}b{)kk1kRkz*(V*l2V-1)BdrAht%bk6;B-||=p9i1cXiS-yI!1C#ZM(pW9!}w
ziyOprVLZ;`JPrXFR#*?D&Tz8?M!gs9lqK$i(=&R!jr1PRB;Xq?$s`8DB}PvH#?wd|
zRGuPPm*hX}!{Qa_Vh6rka^2hi~4#@wi#TB=RB_O%2bvBUM4$coHLU!s+;b`DWhpepO-03<#aUS<;ZU{Z^T`S^WWW`6
zRVCrDSJD
zIxQeI`W&fC=w{Z#OS#PAyB%jP)?2+DWxk#1Q?Ar@mcn*iWqEw%SGH%Lp5+*5+W37dB`s7-*(`YG1xp$BasbB@7_71lc)&2YOR8GN_9-vS)_ojc!E#
zJ=?T((Ti0-rt5`9XaofA(foY9*$n5E1%fTu0^-d8zBcD`p6MG9!pqGmgPworp!YNyt0g6{07{^hFHRUF_tCY;plD`YW}1&SUx
zBJMOieb2Jq=uzwFNp?}SyH=*tfJWd8xVmBghl5E+{bW!M<>LKhzeZ*G#mzz*YeCT!E(AkkEj@AR`)
zXkJ9llkFr%N&Yt5e4_vj7%8{fx*KljIXG~ZUU1@$>ElLc2RG#i4_ujj=QOTx3wLAb
zme&Uxwq95>qDD3bJlYY5>Vh8g5qDMps!rH=!GSdx-Ab3NZiKJW9?R7uPWa;qJ1
zL#INz24}loS-lB^v>08J3Tt91SK1&>II+CJJLw`7Tu1VzO
z>y}1#l}+{sUiK~y=L8q-QSNL1XgB2}ID&Sx_~sQ{Mo?oCV1!qO?g12pYv*Z>Cjonm
zY%dH0N@5ug2k&uz`BR@m8}?SY^x{0|fd$x3V@tKcIkMBd?|WawvW{dwPsv1NI;}&~
zZgoAHgjpjsZsAV&J5brFzgtjV_GX7vm`-rLooPsqcEG&>j9+JWj^~Y!-fHhlk*DWZ
z#%W4VMYF?!9=2ul`GmuS0+)YzQZIL@omvk>_e0Nv2d;-AxWh*9awaoPdtXGSb2=Q?
zHyz*ceb45R+Ep@Z`XXI+sAu>^H~745_6TP9zUKOvW^&}7_;wuZiXVH8PvebGd)V)_
zjjsiaAM8`y!o%e;chfQf?`2YPA9
zV$!6Blqy%MJeg$!%$PC5(5zWg3(f#KcLvZBW`l-CF&yN=K%z*VdKt!y0mAgo9i|zk
zu2?bks@1Glw^GfZ^=s9tH&)yzYu0Qnv^S0%spZyfkGQoM^`IM<1m3)Q_wHpx_pRF-
zY0uUwLIT4p9QQQ;YzU*12dPhy5<#(Y@G@qBRuV3x)DR+3ibXDFbhTv+$2JQ%B#zOj
z;Q?T>XUo(G9FoL?#Q6Uc{Jj3lJbt$8fDal{!|cR;_yt
z8}=;tvVqgqVhi|fUB7XA@NLi6FC)O0a6S=(N01g>G)W|)JGy+U)v#oRzZ@v9SQ*b%yl)z3uWdY1k%2_hn
zgAhg+)l%H)SlxD5c}HJ(L8fKid2gw=9trHZ*H>Ng%~usw_1)*dVvRjU3KIWSCeRZD
zJ<+9?N_^S>C7EIp#2IYJMTEhOH!vm47F=Y+)CzeNVF?5a0Wm_*Lms4M)QXK`;J72FTZN^aSY(NsL6G1PS>#-`+(j27OX3Az
zd~O|KR#s4QB_)1U?$@7|1%1h-mt%_gtC>nz!3h*GNB~=cxrnyZbHd2Eg)7wMVJBV?
zK)?hBeEJC}A%uKbXi6`^bYhAq3Mbr(0VKd;aalx4)N++Nw}mj6Zo!OGId;0^kKK8-
z!&E!mKq|py{ql>!Wi>o&k@KVqS9-0!s#kgwmuD8KpIS$jV0hx!h<^M*mgSbi3Ogp5
zEV~T}KbTDXP-f8rqShqt+OF1m{D#NxX;
z`IJRa$<5f@7CY+;#A#6ZSZl4AV6wv5-g%YXb_Zi}u)`Vrg0RDcz17xR^GH0GU2(N)
z@vDB-viA)HlbXTVTtRh528?@!iCgyNS~3qOd$Og=X8!u}%LB>GEDmd6us{#BtN?^C
z`L?n;rad>+onWeFOLVudT&Uq|P9F;OO(_oN?z=4hq`?6-Pt@S)8F8_?FwsSaT~|G#
ztraGou5D}L)mv3o1__6^gTdsng}27=B}oEZN%|e1#77uxc;Z_vuIW>aue}3%_pNdN
z&jF3$WO+g~$GHJ!PBRLTfM*=CCJ3Y@XR7-KB38G&obQ_P=t!k20$Upnx8pIyO{IE?<6hmqw}Zf}Wqe2Q
z%ij2QBv!#^a1!I5R+d7)rbK0NR&*SxdLS|?^$$2&0HA(kzW6FkMqpC&zEJ0uj#i1|Q}nJt9p$3qL}WoXgI3p8hcD=eEjwGO
z-XS^_be?uI?Ms1P2-r0Zr*bv#;5xE_9nYLpsGyi`t^yVHNY5a-C~k
z?gCyody>;bI!m&oS)B{0d837DR+DCXT;cACuzM=ZllwFhtOm!3@e%BjnsQzRUz@rG
zKS!&rwBl9fG9?@UBMTB8Yek18+_W~}w;WFEhlNGljUM2*$&Ks(7+%|4=b}NHtpG<~
z`&v@##(0@Mla5#fQv@xNU;!NrRAO^;lR=&^g)2RU`vZFL^eCf$x%>
zW#|r6+sW|(20jvFL{r^oxalC28TeW-ni(t%e(md^SIhvE^~i)jRd@q9fdOwV+Tkw&
zm%|=b>smP=5Kb8P9>|4j>6WlkfYMxxUOHDOHFom6=-)_z_t$C
zp%9vDvFx%bPP1mSgMn?Dfptnd<%zZ)RtKM$e4lFfi%KpFcyQ$z-@;PaxTXNX%pYYY
zWdWM
zdwy2pRG!M*j(SwQ9YK^}HexETOojuuk#){hx4MzdJbdx1*|U8f!c?wZ*pXV9Q986(KihzerK?-;f=wlTaru1pcjS1
z1BUUIW0f-lcFnMcG7qm3Pl<1qU<=bS_}nLVwumy!M_^dmr*j7dtJ~3jJvz~ux8T<@
z!{xJe+zl8pZ5$lnCBV711fakPG4Z_emhX83CSP3tk(AibCtmU!@5)T)9{t^ZJ-yQF
z-SkRhdeTwf8B@k^O$`!_k4ejrYhvnn;iPwXhm5RJK1xlq$GSRbUo9rDB2c8peFt+l
zqA0VR{5#Ns`o&h}i{YL0zP}OKgI}}ZA55xNVc<`V_aEe;pt8$QIL_)LW%7-MsPNb^VpTa93f_UN(hSha3Q7SV`9znNE$4M=@F9
zF+=gm4Oc8o2TmOGF(0tqo%_rUltBe8Lj9qk4PFL1m?M$OZIvJ6?Oyuf
z9Q(Q7`#pi65!cL^7zB{O5oEw?<=@eD130+<133I&0bW`Qx}bFx;Jg7Kja?cz*n>Lp
z3m)A7OWg?v*&Ysv1i{fnyXeF?LBxqQl}sjeOu%%#8=mAwIz!QY{QBN#9jiU$Mm(
zyQ#wr$lD;!K#T#PJN(_EF;9F6gJl&S4FW;+bO
z;ho?Kz$pd<&Qx&F#Cp}tf+$y_VV@%wp4c!>9b#N{s1_aul=JPOt-;w;&;k||l#0C=
z0Jfn2RT?M=;tT+wyn#bD0AATWVg|PVoK}fVB~q9UX5uDxm?x5AC;A{khGHm|A}5gB
zYtY}hwc@5(-|+VG)$M-8}^x!+7A^?PQkiWC`x1IKmkjU_s#lB8-LP0D=Njg5=ZD
zqB`iG*SwJn6rR~(mTWoBK3-xN>>#&+;z17ND264tDZwQq%b<8({izr%`kxiHPV(?>cK%Nzhi6|Q6D1N0_4yPxM8@cgMg1kZ^A)yO2;T6u?0OF!u4xsAQ
zn*eI$FJ4+V>?KFa